Java反编译_class爆破与javaagent

admin 2022年1月23日19:56:53评论156 views字数 2355阅读7分51秒阅读模式

Java反编译_class爆破与javaagent

本文为看雪论坛优秀文章

看雪论坛作者ID:Jtian

总述

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

java反编译

使用jd-gui、IDEA 等工具可以反编译jar包或者class文件。
Java反编译_class爆破与javaagent

jar包解压

jar包本身就是个zip文件,这里直接用7zip解压。

同样的,直接用7zip打包成zip即可完成打包,只要注意目录结构即可。Java反编译_class爆破与javaagent
Java反编译_class爆破与javaagent

爆破class文件

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

爆破点一:改check函数的返回值

添加class文件
Java反编译_class爆破与javaagent
选中Methods里的check方法Java反编译_class爆破与javaagent
双击iconst_0,将其改为iconst_1,并保存class文件。Java反编译_class爆破与javaagent
测试效果,You win!Java反编译_class爆破与javaagent
使用jd-gui验证爆破效果Java反编译_class爆破与javaagent

爆破点二:改if判断

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

重新打包

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

其他说明

1、爆破的地方不要改变其余原始字节码的偏移

如果修改后字节码长度变短,会导致报错,所以要保证修改后的字节码长度不变,以使其余的原始字节码不发生偏移,避免报错。Java反编译_class爆破与javaagent

2、注意栈参数的平衡

3、使用recaf爆破class文件

(这是补充的内容,感谢guduzhe指点)
以“改if判断”举例

软件用的recaf-2.21.7-J8-jar-with-dependencies.jar,把hello.jar包拖拽进去即可反编译。

在反编译窗口选中要修改的函数main-> 右键选择"Edit with assembler"
Java反编译_class爆破与javaagent
删除if判断Java反编译_class爆破与javaagent
Ctrl+S保存修改(保存成功后,反编译窗口的内容也会跟着修改)Java反编译_class爆破与javaagent
导出jar包,File-> Export programJava反编译_class爆破与javaagent
测试效果,You win!Java反编译_class爆破与javaagent

参考:

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

利用javaagent动态修改方法Main.check,直接返回true
cd src_PreMainAgentjavac -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();}...

打包

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!
java -javaagent:PreMainAgent.jar -jar hello.jar
Java反编译_class爆破与javaagent

参考:

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

Java反编译_class爆破与javaagent

看雪ID:Jtian

https://bbs.pediy.com/user-home-598931.htm

*本文由看雪论坛 Jtian 原创,转载请注明来自看雪社区
Java反编译_class爆破与javaagent

# 往期推荐

1.某应用sign签名算法还原

2.海莲花APT组织样本分析

3.详解七句汇编获取Kernel32模块地址

4.保护模式学习笔记之分页机制

5.非华为电脑安装华为电脑管家分析

6.某DEX_VMP安全分析与还原

Java反编译_class爆破与javaagent
Java反编译_class爆破与javaagent

球分享

Java反编译_class爆破与javaagent

球点赞

Java反编译_class爆破与javaagent

球在看

Java反编译_class爆破与javaagent

点击“阅读原文”,了解更多!

原文始发于微信公众号(看雪学苑):Java反编译_class爆破与javaagent

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月23日19:56:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Java反编译_class爆破与javaagenthttp://cn-sec.com/archives/746622.html

发表评论

匿名网友 填写信息