使用jhsdb(hotspot debugger)破解加密的Java应用程序

一种保护 Java 代码的解决方案是类文件加密或 JAR 文件加密。这种方案通过自定义加载器加载加密的类文件或 JAR 文件,但由于 JVM 的附加机制的存在,这种方法毫无用处,而且很容易被 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

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

img

使用 吕滕 或者 jadx 打开类文件,即可看到反编译后的代码。

img