在打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服务启动成功,且漏洞存在点已被修复

发表回复