Java防止反編譯的一種解決方案
一、使用ProGuard對代碼進行混淆
1 下載下傳并啟動ProGuard代碼混淆器
2 Input/output中選擇要加密的Jar檔案,并導入該項目使用的Jar
3 設定混淆參數選項
4 儲存混淆配置
5 重新啟動ProGuard載入儲存的配置檔案
6 混淆成功
7 使用JD-gui反編譯軟體進行混淆前後對比
結論:使用代碼混淆僅增加了程式了解的難度,程式的邏輯及流程仍然清晰可見,(但可以将函數名、參數名、設定的更淩亂一些,進一步增加閱讀難度)。
二、使用Excelsior JET将java可執行程式轉化為C++可執行程式
1 安裝并啟動Excelsior JET
2 釋出運作
3 再系統盤内找不到該程式運作的jar檔案,通過查殼工具PEID檢視該可執行檔案,未加密
4 通過靜态反彙編工具OD檢視該檔案彙編代碼
至此,對該java項目的逆向工程的難度同C++寫的程式一樣困難,較難以得到程式的源代碼。在此操作之上還可以進一步采取手段阻撓對源代碼的逆向工程,如下所示的加殼操作。
三、使用VMProtect等工具對.exe檔案進行加殼保護
1 使用VMProtect工具對該程式加殼
2 在使用VirboxProtector增加第二層保護殼時彈出如下提醒
猜測是VMProtect已經進行了虛拟化保護,在使用同樣機制的VirboxProtector加密後出現了一些問題。
3 在使用UPX加殼軟體增加第二層保護殼時同樣提醒出現了錯誤
這表明已經成功的對該軟體增加了VMP保護殼,軟體的安全性得到了進一步的提升。