由于传播、利用本公众号虹猫少侠的江湖路所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号虹猫少侠的江湖路及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,会立即删除并致歉。
在一次项目中获取到目标源码,在对源码进行审计时发现被加密了。
发现Main-Class指向了一个JarLauncher的类,而不是Application启动类,跟进查看:
发现该类没有被加密,该类的具体作用就是自定义了一个classloader,该classlader会加载进整个jar,并且调用Application类的main方法,进入到真正的启动类中去。
这个参数中包含了AES解密的key和iv的值,然后解密逻辑在下面的JarClassLoader中:
通过自定义Handler中的getInputStream对jar包进行解密。所以只需要获取到args参数即可进行解密。
这里的args参数来自于命令行,于是查看历史命令记录,发现如下:
bootstrap.exe java -jar xxxx.jar
通过这种方式启动的jar包,说明args的参数封装在exe文件中的,可以通过逆向该exe文件拿到具体的加密key。
我这里首先通过伪造一个XJarClassLoader类来获取到key,但是发现exe对加载的jar文件进行了hash校验导致了失败:
既然不能通过修改jar文件来获取到key,那么在不动jar文件的情况下又要获取到args的输入,那么可以通过agent来hook XLauncher类即可:
原文始发于微信公众号(菜狗安全):记一次项目中的jar文件解密
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/4116668.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论