记一次加固jar的反编译过程

admin 2023年8月3日08:38:26评论17 views字数 1098阅读3分39秒阅读模式

免责声明

本公众号致力于安全研究和红队攻防技术分享等内容,本文中所有涉及的内容均不针对任何厂商或个人,同时由于传播、利用本公众号所发布的技术或工具造成的任何直接或者间接的后果及损失,均由使用者本人承担。请遵守中华人民共和国相关法律法规,切勿利用本公众号发布的技术或工具从事违法犯罪活动。最后,文中提及的图文若无意间导致了侵权问题,请在公众号后台私信联系作者,进行删除操作。

0x01

使用常规脚本都反编译失败了,结果都是乱码+空白,怀疑可能是jar被加固过了,把jar解压出来看看怎么个事儿。

0x02
反编译过程

首先翻看到MANIFEST.MF文件未加密,可以看到基础配置信息,在文件里看到了一个加密工具--xjar(xjar是Spring Boot JAR 安全加密运行工具,同时支持的原生JAR。基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动、动态解密运行的方案),其密钥被写在了配置文件里

记一次加固jar的反编译过程

在流程中想办法怎么解密

从MANIFEST.MF中看到XJarLauncher是启动类,跟进看到该类的ceateClassloder方法里,传进的参数中包含有一个密钥(xkey),密钥来自配置文件Xjar-Password:

记一次加固jar的反编译过程

具体可以跟进XBootClassLoader类,在构造方法中,包含有加密器解密器的xBootURLHandler对象成为了URL对象的流处理程序:

记一次加固jar的反编译过程

后面还有一个findClass方法,流程是怎么获取和处理class,在findclass中会调用到findResrce方法,但我们的目的是为了解密,到了这里实际就不用再看下去了。因为我们知道了有xDecryptor(解密器)这个东西,查看其接口方法

记一次加固jar的反编译过程

按照前面jar的逻辑,我们可以尝试直接调用这个接口里面的解密方法来对文件进行解密,具体操作如下

按照我们的需求,我们需要用到

记一次加固jar的反编译过程

按照这个方法类型,我们只要传入一个密钥跟一个文件即可,也就是xkey跟需要解密的文件

因为前面已经看到xkey的格式了,所以这里直接照抄传进xkey

XLauncher xLauncher = new XLauncher();InputStream decrypt = xLauncher.xDecryptor.decrypt(xLauncher.xkey,file)

试一下解密jar里的application.properties

记一次加固jar的反编译过程

解密前:

记一次加固jar的反编译过程

0x03
结尾

对于jar加密导致反编译失败,可以尝试此类思路进行解密。修复也简单,因为上文一切的操作都是基于发现了密钥,所以避免密钥写在配置文件中即可。

原文始发于微信公众号(Lambda小队):记一次加固jar的反编译过程

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月3日08:38:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次加固jar的反编译过程http://cn-sec.com/archives/1930770.html

发表评论

匿名网友 填写信息