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

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

2021-12-29 11:44
38887

对于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
839K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6A6L8X3N6G2K9$3g2Y4k6h3I4Q4x3V1k6B7j5$3I4S2M7%4y4D9K9h3t1`.
c81K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2L8%4u0S2j5$3I4W2i4K6u0W2j5$3!0E0i4K6u0r3K9X3q4$3j5i4y4W2i4K6u0r3M7%4m8W2j5%4y4Q4x3V1k6B7N6X3#2K6i4K6u0r3M7$3f1I4x3g2)9J5c8X3S2@1L8h3I4Q4x3V1k6B7N6X3#2K6i4K6u0V1y4W2)9J5k6h3S2@1L8h3H3`.
422K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6o6L8$3I4Q4x3X3c8q4i4K6u0r3f1X3g2U0j5h3j5`.
d0fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3q4#2N6s2m8Q4x3X3g2U0L8W2)9J5c8X3q4J5j5$3S2A6N6X3g2K6i4K6u0r3K9X3q4$3j5g2!0q4y4g2!0m8c8q4)9&6y4#2!0q4z5q4)9^5b7g2)9^5x3W2!0q4y4#2!0m8x3q4)9^5x3g2!0q4y4#2!0n7b7#2)9&6y4W2!0q4z5q4!0n7c8g2)9&6x3g2!0q4y4g2)9&6z5g2!0m8z5q4!0q4y4W2)9&6y4W2)9^5y4#2!0q4y4W2!0m8x3g2!0m8x3#2!0q4z5q4!0m8c8W2!0n7y4q4!0q4y4W2)9&6z5q4)9^5c8b7`.`.

利用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!

图片描述

6e5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2T1K9h3I4A6j5X3W2D9K9g2)9J5k6h3y4G2L8g2)9J5c8Y4k6A6k6r3g2G2i4K6u0r3b7W2j5I4e0V1x3@1P5e0q4S2y4#2l9J5i4K6y4r3M7q4)9K6c8o6t1`.
ea7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0L8X3u0D9L8$3N6K6i4K6u0W2j5$3!0E0i4K6u0r3M7X3W2U0K9$3W2&6j5h3&6Y4i4K6u0r3M7q4)9J5c8U0p5I4x3K6j5^5z5e0x3J5i4K6u0W2K9s2c8E0L8l9`.`.
17dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4N6W2K9i4S2A6L8W2)9#2k6U0b7#2y4o6V1J5x3o6l9%4i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5c8X3c8W2N6r3q4A6L8s2y4Q4x3V1j5I4x3e0R3H3y4e0t1&6y4K6V1`.
cbcK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2B7j5i4k6S2M7%4y4A6M7%4c8Q4x3X3g2G2M7X3N6Q4x3V1k6@1N6i4c8G2M7X3W2S2L8q4)9J5c8Y4c8#2N6r3!0J5K9h3q4D9i4K6u0W2K9s2c8E0L8l9`.`.
0ecK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0L8X3u0D9L8$3N6K6i4K6u0W2j5$3!0E0i4K6u0r3c8$3q4F1k6s2W2Q4x3V1k6H3i4K6u0r3y4K6t1&6x3o6l9$3z5g2)9J5k6h3S2@1L8h3H3`.

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();
}
...
...

[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2021-12-30 11:30 被Jtian编辑 ,原因:
上传的附件:
收藏
免费 13
支持
分享
最新回复 (16)
雪    币: 5931
活跃值: (7510)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
推荐用recaf
2021-12-29 14:01
2
雪    币: 5444
活跃值: (8925)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
verygood
2021-12-29 17:08
0
雪    币: 9845
活跃值: (5757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢分享,学习下
2021-12-29 19:55
0
雪    币: 2455
活跃值: (5069)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
5
guduzhe 推荐用recaf
谢谢提醒,recaf确实比较好用
2021-12-30 11:32
0
雪    币: 1705
活跃值: (3063)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢楼主的分享。
2022-1-1 11:43
0
雪    币: 4576
活跃值: (2211)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
插眼·
2022-1-4 09:59
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
很nice
2022-1-13 09:20
0
雪    币: 78
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
师傅您好,逛论坛看到您发的帖子,觉得写得很好,想分享给更多人,未经您的允许已经发到我的公众号上“每天一个入狱小技巧”,表示抱歉。已注明出处,如不同意请回复,我会立即删帖,谢谢
2022-2-14 23:24
0
雪    币: 5931
活跃值: (7510)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
attach模式也可以修改运行中的class文件,也就是java的热更新,实现的工具比较多,这里推荐arthas。
这个recaf插件,结合了字节码编辑和热更新。
0d0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2T1K9h3I4A6j5X3W2D9K9g2)9J5k6h3y4G2L8g2)9J5c8Y4k6A6k6r3g2G2i4K6u0r3b7W2j5I4d9s2t1@1P5e0p5$3y4$3A6%4i4K6u0r3
2022-2-14 23:42
1
雪    币: 577
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
感谢分享 mark
2022-2-16 21:25
0
雪    币: 3312
活跃值: (1475)
能力值: ( 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
雪    币: 5118
活跃值: (9374)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
recaf用来搞个例子程序还可以,遇上复杂的商业应用,根本无法,直接不会出现修改的选项。
2022-11-19 10:52
0
雪    币: 2455
活跃值: (5069)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
16
wandering recaf用来搞个例子程序还可以,遇上复杂的商业应用,根本无法,直接不会出现修改的选项。
把要修改的class文件从jar包里拖出来修改后再放回去呢
2022-11-20 22:40
0
雪    币: 2455
活跃值: (5069)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
17

相关图片,recaf改函数返回值为true

2024-12-2 23:41
0
游客
登录 | 注册 方可回帖
返回