使用 jhsdb(HotSpot 调试器)破解加密的 Java 应用程序

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

示例应用

下面是一个简单的示例应用程序,包含一个简单的 Swing 窗口和一个按钮。 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 目录,您应该可以找到一个 jhsdb 文件。

1_nsxbwNJrGJB4mpzsQv55VA

执行 jhsdb hsdb,打开 HotSpot Debugger。如果是 Windows 系统,可能需要以管理员身份运行。点击 File 选择 Attach to HotSpot process…,

img

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

img

成功附加后,点击 Tools->Class Browser

img

Class Browser 包含所有已加载类的信息,搜索 com.example,您可以看到 com.example 下的所有类

img

点击 com.example.TestWindow @0x0000....,然后点击 "Create .class File"

img

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

img

使用 Luytenjadx 打开 class 文件,即可看到反编译后的代码

img