使用jhsdb(HotSpot Debugger)破解加密的Java应用程序

Java代码保护的一种解决方案是类文件加密。这种解决方案通过自定义加载器加载加密的类文件或jar文件,由于JVM的Attach机制的存在,这种方法是无效的,并且可以使用JDK附带的工具轻松破解。

示例应用程序

以下是一个带有简单摆动窗口和按钮的示例应用程序。

https://github.com/3-keys/test-swing-app

img

加密应用程序

使用Eclipse导出一个可运行的jar文件,并使用加密工具对jar文件进行加密。加密后,jar文件的结构如下:

img

test-swing-app.jar是加密的jar文件数据,Launcher类是此工具的自定义加载类,加密的jar包仍通过标准的java -jar命令运行

破解加密应用

首先,运行加密的jar文件,然后找到JDK的bin目录,你应该能找到一个jshdb文件。

1_nsxbwNJrGJB4mpzsQv55VA

执行jhsdb hsdb,打开HotSpot调试器,如果是在Windows下,你可能需要以管理员身份运行,点击文件选择附加到HotSpot进程…

img

通过Linux系统的ps aux | grep java命令,Windows系统通过任务管理器找到进程的pid,在下面的对话框中,输入进程pid

img

成功附加后,点击工具->类浏览器

img

类浏览器包含了所有已加载类的信息,搜索com.example,你可能会看到com.example下的所有类

img

点击com.example.TestWindow @0x0000…. 然后点击“创建 .class 文件”

img

cd到之前执行jhsdb命令的目录,你可以看到生成的类文件

img

使用 Luytenjadx 打开类文件,你可以看到反编译的代码

img