Java 類別檔(.class)包含豐富的中繼資料與半編譯碼,使得逆向工程相對容易。本文詳細記錄實戰破解流程:從定位授權驗證類別、使用 JVM profiling 追蹤、Jad 反編譯、修改位元碼/原始碼重編譯替換,並探討混淆原理與防護建議。**僅供安全研究與合規性測試參考,嚴禁用於非法破解商業軟體。**
| 路徑 | 適用場景 | 核心步驟 |
|---|---|---|
| KeyGen(註冊碼生成器) | 僅需單一註冊碼驗證,算法可逆或可推導 | 1. 反編譯驗證邏輯 → 2. 還原/推導演算法 → 3. 編寫 KeyGen |
| 類別替換 | 驗證邏輯複雜、涉及多檔案/伺服器端驗證、或使用非對稱加密 | 1. 定位驗證類別 → 2. 修改邏輯(強制返回 true/移除檢查) → 3. 重編譯替換 |
-Xrunhprof:cpu=times:生成 java.hprof.txt,記錄方法呼叫堆疊與耗時-Xrunhprof:cpu=timesjava.hprof.txt,搜尋關鍵字「License」com.togethersoft.together.impl.ide.license.LicenseSetupLicenseSetup.execute() → IdeLicenseAccess.setLicense() → IdeLicenseUtilLicenseSetup、execute、isValid)重命名為無意義短名稱(a、b、c)-g:none 編譯)| 防護層面 | 技術方案 | 備註 |
|---|---|---|
| 程式碼混淆 | ProGuard、DexGuard、ZKM、Allatori、Stringer Java Obfuscator | 商業級工具支援控制流扁平化、字串加密、資源加密 |
| 原生編譯 | GraalVM Native Image、Excelsior JET | 編譯為機器碼,無 class 檔,逆向難度大幅提升 |
| 授權伺服器端驗證 | 簽名授權檔、線上心跳驗證、硬體指紋綁定 | 核心邏輯不在客戶端,根本避免破解 |
| 完整性檢查 | 啟動時校驗 JAR/Class 檔雜湊值、簽名驗證 | 偵測類別替換 |
| 反除錯/反反編譯 | 檢測 JDWP、JVMTI、偽造常數池誘導反編譯器崩潰 | 增加分析成本 |
Java 反編譯與破解技術揭示了「安全性不等於不可逆性」。現代軟體保護應採取纵深防禦:核心邏輯伺服器端化、原生編譯、商業級混淆、完整性驗證、授權雲端化。開發者理解逆向流程,能設計更健壯的保護機制,也能在合法授權下進行相容性開發與安全審計。