其他
Java反编译_class爆破与javaagent
本文为看雪论坛优秀文章
看雪论坛作者ID:Jtian
一
总述
二
java反编译
三
jar包解压
四
爆破class文件
爆破点一:改check函数的返回值
选中Methods里的check方法
测试效果,You win!
使用jd-gui验证爆破效果
爆破点二:改if判断
把0008到0016的代码直接nop掉。
(注意:使用JavaByte.exe进行nop的时候可能会使字节码变短,比如3个字节的“B8001E”变成一个字节的“00”,这里没有自动填充剩余的nop指令,有点不方便。可以通过“Add Instruction”补足剩余的nop,也可以直接通过WinHex等二进制编辑工具进行修改。)
测试效果,You win!
使用jd-gui验证爆破效果
五
重新打包
测试打包效果
六
其他说明
1、爆破的地方不要改变其余原始字节码的偏移
2、注意栈参数的平衡
3、使用recaf爆破class文件
在反编译窗口选中要修改的函数main-> 右键选择"Edit with assembler"
删除if判断
Ctrl+S保存修改(保存成功后,反编译窗口的内容也会跟着修改)
导出jar包,File-> Export program
测试效果,You win!
参考:
利用javaagent动态修改方法Main.check
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();
}
...
打包
Manifest-Version: 1.0
Can-Redefine-Classes: true
Can-Retransform-Classes: true
Premain-Class: PreMainAgent
java -javaagent:PreMainAgent.jar -jar hello.jar
参考:
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
看雪ID:Jtian
https://bbs.pediy.com/user-home-598931.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!