记一次项目中的jar文件解密

admin 2025年6月2日02:50:58评论36 views字数 799阅读2分39秒阅读模式
免责声明
记一次项目中的jar文件解密

由于传播、利用本公众号虹猫少侠的江湖路所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号虹猫少侠的江湖路及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,会立即删除并致歉。

在一次项目中获取到目标源码,在对源码进行审计时发现被加密了。
查看入口类如下:
记一次项目中的jar文件解密
继续查看MANIFEST.MF文件内容:
记一次项目中的jar文件解密
发现Main-Class指向了一个JarLauncher的类,而不是Application启动类,跟进查看:
记一次项目中的jar文件解密
记一次项目中的jar文件解密
发现该类没有被加密,该类的具体作用就是自定义了一个classloader,该classlader会加载进整个jar,并且调用Application类的main方法,进入到真正的启动类中去。
这里需要关注的就是args这个参数:
记一次项目中的jar文件解密
记一次项目中的jar文件解密
这个参数中包含了AES解密的key和iv的值,然后解密逻辑在下面的JarClassLoader中:
记一次项目中的jar文件解密
XJarURLHandler实现如下:
记一次项目中的jar文件解密
记一次项目中的jar文件解密
通过自定义Handler中的getInputStream对jar包进行解密。所以只需要获取到args参数即可进行解密。
这里的args参数来自于命令行,于是查看历史命令记录,发现如下:
bootstrap.exe java -jar xxxx.jar
通过这种方式启动的jar包,说明args的参数封装在exe文件中的,可以通过逆向该exe文件拿到具体的加密key。
我这里首先通过伪造一个XJarClassLoader类来获取到key,但是发现exe对加载的jar文件进行了hash校验导致了失败:
记一次项目中的jar文件解密
记一次项目中的jar文件解密
既然不能通过修改jar文件来获取到key,那么在不动jar文件的情况下又要获取到args的输入,那么可以通过agent来hook XLauncher类即可:
记一次项目中的jar文件解密
最终成功输入AES的key和iv文件:
记一次项目中的jar文件解密
成功解密class文件:
记一次项目中的jar文件解密
注:漏洞已经协助厂商修复。

原文始发于微信公众号(菜狗安全):记一次项目中的jar文件解密

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月2日02:50:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次项目中的jar文件解密https://cn-sec.com/archives/4116668.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息