在打AWD或AWDP时,经常会遇到Jar包起的Web服务,初学patch时总会遇到本地依赖缺失或者报错等问题,在公众号看到AWD离线-Jar文件冷补丁这篇文章,算是又学会了一种简单方便的Jar包离线patch方法,关键点就是生成修复后的.class文件,总体操作如下:
一、反编译Jar包得到源码及相关依赖文件
以数字中国决赛AWDP的一道java题为例,首先通过jadx直接导出源码,其中.java源码文件在sources目录下,依赖文件在resources\BOOT-INF\lib目录下
二、修改源码文件并同依赖一起打包编译
因为需要设置临时环境变量,所以编译操作是在Linux环境下
将依赖文件与已经改好的源码放在同一目录下,方便后续编译操作,如果源码中导入了自定义的类,也需要将这些类的源码放在一起(PS:如果没有javac环境的话,可以直接下一个jdk)


接着对修改后的源码进行编译
# 设置一个临时依赖所在的环境变量
CLASS_LIB=$(find ./BOOT-INF/lib/ -name "*.jar" | tr '\n' ':');
~/Desktop/jdk1.8.0_202/bin/javac -cp ".:${CLASS_LIB%:}" ./UserServiceImpl.java ./com/example/demo/model/User.java ./com/example/demo/service/UserService.java ./com/example/demo/utils.java

编译成功,如果报错就根据报错信息添加对应类的.java文件
三、直接在Jar包替换.class文件
将Jar包以压缩包形式打开,直接将编译后的.class文件拖入替换

测试Web服务启动成功,且漏洞存在点已被修复


