java jar 逆向环境搭建
安装 jd-gui
这个工具主要用来看 java 的字节码文件(.class)
- 到 jd-gui/release 下载 jd-gui-windows-1.6.6.zip
- 解压 jd-gui-windows-1.6.6.zip
- 进入解压后的目录, 把jd-gui.exe 发送快捷方式到桌面
安装 jclasslib
这个工具主要用来改java 字节码文件 (.class)
- 到 jclasslib/release 下载 jclasslib_win64_6_0_3.exe
- 双击 jclasslib_win64_6_0_3.exe 完成安装
安装 7-zip
这个工具是用来查看jar 并替换里面需要修改的class 文件
到 7-zip 下 载安装
安装 jdk
到 jdk download 下载 msi 安装包安装
配置环境变量
- JAVA_HOME
- CLASSPATH
- 加入PATH
在PATH 里新增一项
java jar逆向步骤
使用jd-gui 把 jar 里的class 全部还原成 java 原文件
打开 jd-gui
把jar 拖到 jd-gui
导出java 原文件
File => Save all Source
这会生成一个和jar 原文件目录结构一样的目录, 只不过里面的 .class 全部替换成了 .java
在导出的源文件目录下 使用rg 搜索关键字 定位到目标 .java 再去分析
如
|
|
使用 jclasslib 更改 .class
打开 jclasslib
把 .class 拖到 jclasslib
找到需要修改的地方
主要看方法里面的 [0]Code 如上图所示就已经定位到了需要更改的位置了, 在java 文件中可以看到 只需要把return bool 改成 return true 就可以了
这里是已经改过了的, 原来 395 字节处是 iload_0
如何修改
-
查看jvm 手册掌握原理之后修改
jvm-manual
另外在jclasslib 里面对操作码点左键 => 查看 JVM 规范可以查看该操作码的手册
-
编写目标java 文件, 编译后查看机器码
如我需要知道 return true 的机器码
-
编写test.java
test.java
1 2 3 4 5
public class test { public boolean main(String[] args) { return true; } }
- 😠 注意: java文件名一定要和 class 名一致, 否则编译不过, 还没有有价值的错误信息
-
编译test.java
1
javac test.java
-
使用 jclasslib 查找 test.class
可以看到 return true 其实就是先把常数1 压栈, 然后再 ireturn 就可以了
-
修改class
在需要修改的地方点击左键 => 替换操作码 => 选择 iconst_1 => 确定 => 保存
把改好的文件重新打包成 jar
备份原来的jar
用7zip 打开原来的jar 并进入需要替换的class 所在的目录上
把改好的class 拖进入覆盖掉原来的class
还可以用 beyond compare 去对比一下两个jar 包
😠 注意: 之所以不能把解压后的文件夹直接打包成.zip 再rename
是因为在Windows 下解压的时候, 由于文件名的大小字不敏感, 就有可能会出问题
用有问题的文件再打包就没有意义了
逆向 DVT eclipse
首先了解到DVT 是用的FLEXLM 架构做的验签, 浏览安装目录, 最终定位到 “dvt_eclipse\batch\libs\ro.amiq.dvt.flclient-2.11.jar”
参考jar 逆向步骤对jar 完成修改并打包
查找DVT 中可能包含 ro.amiq.dvt.flclient-2.11.jar 这个jar 的jar
因为jar 可以包含 jar 所以我们除了要替换掉原始的 ro.amiq.dvt.flclient-2.11.jar
这个jar之外, 还要替换包含它的jar
使用rg 搜索可能包含的包
|
|
可以看到 eclipse\plugins\ro.amiq.dvt_22.1.22.jar
中包含了 ro.amiq.dvt.flclient-2.11.jar
之所以可以搜索到是因为 每一个 jar 里面会有 MANIFEST.MF 这个文件, 如果它有包含其他 jar 的话, 会在这个文件里面记录
使用 7zip 替换掉需要修改的jar
需要替换的有两个 一个是 batch/libs/ro.amiq.dvt.flclient-2.11.jar
下的, 另一个是 eclipse\plugins\ro.amiq.dvt_22.1.22.jar
参考 把改好的class 拖进入覆盖掉原来的class
清除缓存文件
使用 wsl 里面的 find 命令找到 ro.amiq.dvt.flclient-2.11.jar 缓存的地方
|
|
把第二个结果的jar 删掉
设置LICENSE
license file
DVT.lic
|
|