首页
社区
课程
招聘
[原创] Java反编译_class爆破与javaagent
发表于: 2021-12-29 11:44 36930

[原创] Java反编译_class爆破与javaagent

2021-12-29 11:44
36930

对于java破解,直接反编译出java代码,然后改代码逻辑,再重新打包,这套流程固然清晰直接,但常常会遇到缺少依赖库、编译环境复杂等问题。还有两个思路可以处理这个问题,1.class文件爆破;2.javaagent

使用jd-gui、IDEA 等工具可以反编译jar包或者class文件。
图片描述

jar包本身就是个zip文件,这里直接用7zip解压。
同样的,直接用7zip打包成zip即可完成打包,只要注意目录结构即可。
图片描述
图片描述

使用JavaByte.exe工具爆破class文件

添加class文件
图片描述
选中Methods里的check方法
图片描述
双击iconst_0,将其改为iconst_1,并保存class文件。
图片描述
测试效果,You win!
图片描述
使用jd-gui验证爆破效果
图片描述

图片描述
把0008到0016的代码直接nop掉。
(注意:使用JavaByte.exe进行nop的时候可能会使字节码变短,比如3个字节的“B8001E”变成一个字节的“00”,这里没有自动填充剩余的nop指令,有点不方便。可以通过“Add Instruction”补足剩余的nop,也可以直接通过WinHex等二进制编辑工具进行修改。)
图片描述
测试效果,You win!
图片描述
使用jd-gui验证爆破效果
图片描述

jar包就是个zip文件,爆破class文件之后,直接使用7zip压缩成zip文件,只要保证目录结构正确即可。是否把后缀名.zip改成.jar也不会影响jar包的执行,为了保持习惯上的一致性,可以改一下。
图片描述
测试打包效果
图片描述

如果修改后字节码长度变短,会导致报错,所以要保证修改后的字节码长度不变,以使其余的原始字节码不发生偏移,避免报错。
图片描述

(这是补充的内容,感谢guduzhe指点)
以“改if判断”举例
软件用的recaf-2.21.7-J8-jar-with-dependencies.jar,把hello.jar包拖拽进去即可反编译。
在反编译窗口选中要修改的函数main-> 右键选择"Edit with assembler"
图片描述
删除if判断
图片描述
Ctrl+S保存修改(保存成功后,反编译窗口的内容也会跟着修改)
图片描述
导出jar包,File-> Export program
图片描述
测试效果,You win!
图片描述

https://bbs.pediy.com/thread-217703.htm
https://github.com/ingokegel/jclasslib
https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-6.html
https://github.com/Col-E/Recaf
http://autp.cn/archives/java字节码编辑器文档说明

利用javaagent动态修改方法Main.check,直接返回true

vim MANIFEST.MF
Manifest-Version: 1.0
Can-Redefine-Classes: true
Can-Retransform-Classes: true
Premain-Class: PreMainAgent

需要注意的就一个MANIFEST.MF,然后仿照一个jar包结构用7zip压缩即可(可以直接通过拖拽的方式替换zip包里的内容)。或者直接使用maven、gradle对工程进行管理。

测试效果,You win!

图片描述

https://www.bilibili.com/video/BV1NC4y1a7P2?p=2
https://www.cnblogs.com/rickiyang/p/11368932.html
https://blog.csdn.net/weixin_45492007/article/details/118052979
https://www.javassist.org/tutorial/tutorial.html
https://www.cnblogs.com/Gandy/p/7290069.html

cd src_PreMainAgent
javac -cp .;javassist.jar PreMainAgent.java
cd src_PreMainAgent
javac -cp .;javassist.jar PreMainAgent.java
...
if(!"Main".equals(className)){
    return null;
}
 
try{
    CtClass ctClass = pool.get("Main");
    CtMethod check = ctClass.getDeclaredMethod("check");
    check.setBody("{return true;}");
 
    return ctClass.toBytecode();
} catch(Exception e) {
    e.printStackTrace();
}
...
...

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2021-12-30 11:30 被Jtian编辑 ,原因:
上传的附件:
收藏
免费 10
支持
分享
最新回复 (15)
雪    币: 4014
活跃值: (5665)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
推荐用recaf
2021-12-29 14:01
2
雪    币: 4460
活跃值: (6706)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
verygood
2021-12-29 17:08
0
雪    币: 8206
活跃值: (4161)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢分享,学习下
2021-12-29 19:55
0
雪    币: 2038
活跃值: (4085)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
guduzhe 推荐用recaf
谢谢提醒,recaf确实比较好用
2021-12-30 11:32
0
雪    币: 1482
活跃值: (2538)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢楼主的分享。
2022-1-1 11:43
0
雪    币: 4522
活跃值: (2146)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
插眼·
2022-1-4 09:59
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
很nice
2022-1-13 09:20
0
雪    币: 78
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
师傅您好,逛论坛看到您发的帖子,觉得写得很好,想分享给更多人,未经您的允许已经发到我的公众号上“每天一个入狱小技巧”,表示抱歉。已注明出处,如不同意请回复,我会立即删帖,谢谢
2022-2-14 23:24
0
雪    币: 4014
活跃值: (5665)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
attach模式也可以修改运行中的class文件,也就是java的热更新,实现的工具比较多,这里推荐arthas。
这个recaf插件,结合了字节码编辑和热更新。
https://www.bilibili.com/video/BV1Hr4y167jw/
2022-2-14 23:42
1
雪    币: 576
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
感谢分享 mark
2022-2-16 21:25
0
雪    币: 3191
活跃值: (1310)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
recaf保存后再打开没改变,怎么回事
2022-11-6 17:34
0
雪    币: 1175
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
verygood
2022-11-6 20:15
0
雪    币: 138
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
来学习下
2022-11-18 21:03
0
雪    币: 1641
活跃值: (7319)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
recaf用来搞个例子程序还可以,遇上复杂的商业应用,根本无法,直接不会出现修改的选项。
2022-11-19 10:52
0
雪    币: 2038
活跃值: (4085)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
16
wandering recaf用来搞个例子程序还可以,遇上复杂的商业应用,根本无法,直接不会出现修改的选项。
把要修改的class文件从jar包里拖出来修改后再放回去呢
2022-11-20 22:40
0
游客
登录 | 注册 方可回帖
返回
//