脱壳小子-java anti-decompiler保护脱壳

admin 2022年7月14日17:57:26评论168 views字数 1447阅读4分49秒阅读模式

前言

    有一天,脚本小子想开发一个工具,但脚本小子又不想从头构思设计代码框架,就找找业界有没有好的工具能不能抄抄。终于在脚本小子快乐星球里,找到一个看起来还不错的工具。但存在一个问题,这个工具有代码保护壳。。。脚本小子本来只想当裁缝小子的,可没想到还得先是一个脱壳小子才行。

脱壳思路

    正面硬刚解密算法是一种思路,但所需要花费的时间太长,性价比不是很高,并且由于笔者太菜了,浅尝了下,发现不太容易搞定。于是采用CSAgent的形式,通过注入目标程序,替换壳代码的解密加载过程,直接将解密后的代码写到文件当中。解密加载代码在JavaLauncherIdea$Decoder的loadJars方法当中。



脱壳小子-java anti-decompiler保护脱壳
image.png

    其中类CipherInputStream的作用就是读取加密状态的文件,所以我们只需要在这里将CiperInputStream获取的文件流读取出来,然后写入到本地文件即可。

脱壳小子-java anti-decompiler保护脱壳
image.png

    这里有个小坑,就是在壳代码当中有个判断启动java进程的命令行参数当中是否包含-XX:+DisableAttachMechanis,并且这个选项是否是生效的,代码位置在JavaLauncherIdea的main方法中。

脱壳小子-java anti-decompiler保护脱壳
image.png
if (jvmArgs.contains("-XX:+DisableAttachMechanism") && jvmArgs.lastIndexOf("-XX:-DisableAttachMechanism") < jvmArgs.lastIndexOf("-XX:+DisableAttachMechanism")) {
            JavaLauncherIdea launcher = new JavaLauncherIdea();

            try {
                launcher.run(args);
            } catch (Throwable var6) {
                JOptionPane.showMessageDialog((Component)null, var6.getMessage(), "Error", 0);
                System.exit(0);
            }
 }
脱壳小子-java anti-decompiler保护脱壳
image.png

    要是启动参数当中没有加入这个选项或者没有生效,就会创建新JVM进程,并且在新进程启动参数中添加-XX:+DisableAttachMechanis。所以我们在使用javaagent时带上-XX:+DisableAttachMechanis这个启动选项。

脱壳效果

java -javaagent:CSAgent-1.4-SNAPSHOT-jar-with-dependencies.jar -XX:+DisableAttachMechanism -jar xxx.jar
脱壳小子-java anti-decompiler保护脱壳
image.png

    这里开发脱壳agent白嫖了Twi1ight师傅的CSAgent的模板代码,感谢大佬的代码,脚本小子表示白嫖真香。最后脱壳后的文件会保存在java运行的当前目录下,名字以xxx_unpacked.jar命名

开源地址

https://github.com/yougar0/AntiDecAgent

原文始发于微信公众号(yougar0x00的赛博时空):脱壳小子-java anti-decompiler保护脱壳

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月14日17:57:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   脱壳小子-java anti-decompiler保护脱壳http://cn-sec.com/archives/1177423.html

发表评论

匿名网友 填写信息