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

本文介绍了脚本小子如何利用CSAgent模板代码,为了解密并脱掉一个带有代码保护壳的Java工具,避免正面硬刚解密算法。通过注入目标程序,替换解密加载过程,将解密后的代码直接写入本地文件。在过程中需要注意Java进程启动参数中必须包含-XX:+DisableAttachMechanism以避免创建新JVM进程。最终,脱壳后的文件会保存在运行目录下,名为xxx_unpacked.jar。
摘要由CSDN通过智能技术生成

                                            前言

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

                                        脱壳思路

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

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

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

 

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

 

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

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

 

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

                                                 开源地址

GitHub - yougar0/AntiDecAgent

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值