使用 jhsdb(hotspot debugger)破解加密的 Java 應用程式

Java 程式碼保護的一種方案是 class 檔案加密或 jar 檔案加密。這類方案透過自訂的載入器載入加密的 class 檔案或 jar 檔案,但由於 JVM 附加機制的存在,這種方式是無效的,可以使用 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