脱壳小子-java anti-decompiler保护脱壳
2022-7-14 13:57:14 Author: yougar0x00的赛博时空(查看原文) 阅读量:12 收藏

前言

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

脱壳思路

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


image.png

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

image.png

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

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

image.png

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

脱壳效果

java -javaagent:CSAgent-1.4-SNAPSHOT-jar-with-dependencies.jar -XX:+DisableAttachMechanism -jar xxx.jar
image.png

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

开源地址

https://github.com/yougar0/AntiDecAgent


文章来源: http://mp.weixin.qq.com/s?__biz=MzU5NTg1NzIzNg==&mid=2247484021&idx=1&sn=23b2917870b3b2af463dcd4ee007fbbf&chksm=fe6ad84ec91d515883ad37e1d615c8679eb96a96f51ad06b72b8c2e7ce97fd9e80713b9d1c19#rd
如有侵权请联系:admin#unsafe.sh