使用jhsdb(hotspot debugger)破解加密的Java应用程序
一种保护 Java 代码的解决方案是类文件加密或 JAR 文件加密。这种方案通过自定义加载器加载加密的类文件或 JAR 文件,但由于 JVM 的附加机制的存在,这种方法毫无用处,而且很容易被 JDK 自带的工具破解。
示例申请
下面是一个示例应用程序,其中包含一个简单的旋转窗口和一个按钮。 https://github.com/3-keys/test-swing-app

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

test-swing-app.jar 是加密的 jar 文件数据,Launcher 类是此工具的自定义加载类,加密的 jar 包仍然通过标准的 java -jar 命令运行。
破解加密应用程序
首先,运行加密的 jar 文件,然后找到 JDK 的 bin 目录,你应该能够找到 jshdb 文件。

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

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

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

类浏览器包含所有已加载类的信息,搜索 com.example 即可查看 com.example 下的所有类。

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

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

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