先讲一下常规jar包的破解流程。
1) 通过procmon监控相关软件,查看程序都访问了些啥。 2) 用jd-gui反编译 jar 包,得到源码。 3) 搜索关键字以定位。
这种定位方法只是千万种中的一种,根据不同软件的不同执行特性再具体实施不同的定位方案。
1) 用 dex2jar 将 JAR 包转成 Dex 文件。 2) 再将 Dex 解出 Smali。 3) 修改 Smali 代码 4) 将修改后的文件重新打包回 Dex 5) 最后转成 JAR 包,破解完成。
上面的方式基本已经可以解决破解JAR包的需求。但最近研究了一下直接修改.class 字节码的形式来实现修改程序流程的方法,总有会用得上的应用场景的。下面进入正题。
很多时候别人的 jar 包,反编译过来后是没办法直接用Eclipse创建Java 工程再编译通过的。各种引用及反编译带来的错误会让人抓狂。既然破解的关键点已经找到了,我们可以不可以直接修改.class 字节码以实现破解呢,答案是肯定的。
此处省略定位环节,不是本文重点。
1. jclasslib 源码地址:https://github.com/ingokegel/jclasslib
2. 010 Editor 神器不多说
1. The class file format
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.6
2. 中文版Class文件结构
http://gityuan.com/2015/10/17/jvm-class-instruction/
假设通过反编译我们已经知道了关键代码的位置。
知道函数路径后,用jclasslib 打开 .class 文件定位的相关函数处。
点击右边的相关指令可以跳转到指令查询页面:
可以看到 aload_0 对应的字节码为 0x2a。以此类推,查询到我们需要的特征指令对应的字节码。
指令:
字节码
用 010 Editor 打开 .class 文件,会自动加载其文件格式的 .bt 格式解析文件
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
JavaBite 改.class挺好用