前言:
在Java項目逆向工程領域,開發人員常常面臨代碼質量差、修復耗時的挑戰。本文通過實際案例,深度對比傳統JadGUI工具與我們自主研發的自動化逆向工具在錯誤修復率、效率和質量方面的顯著差異。
jadgui工具逆向代碼:
首先我們來看用jadgui工具導出的源碼是什麼樣的?
首先打開jadgui save all resource 導出java文件。
導出完成是這樣
這裏逆向不管是不是maven項目都需要maven打包,都需要創建一個maven項目
把解壓的文件複製到我們創建的maven項目裏面。記住這裏要在目錄裏面複製,用idea工具複製有點慢
複製resource文件過來:
最後一個複製把pom的jar版本一起拿過來,如果沒有pom就自動手動打lib包到本地倉庫引用
如果沒有記得解壓jar 包手動打包
複製pom文件版本到項目,如果沒有這個文件就不是maven項目需要手動打包
idea開發工具一定要配置好maven環境:
導出的包名不對項目要統一替換一下:
配置項目jdk對應版本,這裏根據你實際項目版本配置:
不知道可以看這裏。一定要配置好
這裏就來看所以的編譯錯誤:
這裏不知道如何看所有錯誤可以看我這篇博客:
idea顯示全部錯誤
總錯誤數283個,項目還不算大,如果大的話可能幾千上萬個報錯,這都是算少的了,那我們來分析到底哪些問題導致代碼報錯。
主要問題集中:
1,代碼差包:
這是jadgui特性導出項目都會差包問題特別多
2,實體類方法報錯,會序列化失敗:
3,實體類代碼沒有格式化,還得格式化代碼
這裏修復的時候需要全部格式化代碼在修復代碼,因為一行顯示不全,這是編譯工具的通病
4,所有代碼都有註釋信息,和結尾逆向的註釋説明,這個代碼閲讀感極差
5,繼承實現符號都會報錯,明顯不對
6,代碼自動強轉類型問題:
7,實體類型對不上屬性的問題:
8,字段初始化值乾沒有了,也是普遍問題
9,lambock表達式 全亂了,基本代碼索引都會少,編譯出來全是錯的:
10,表達式循環也一樣報錯:
如果這裏是用了mybatiesplus的lombock 方法基本你代碼全改,因為編譯逆向出來的全是少屬性報錯。
11,強轉導致類型丟失,異常報錯,沒有處理,這也是編譯出來的通病:
當前除了這11個問題,還有別的問題我都不一一列舉了,因為畢竟開源工具弄出來的源碼,很多報錯,通常修復一個jar包快的話,也要1,2天,因為代碼報錯太多了,這是正常的。
主要問題在於代碼差包,這個導入都要搞半天,然後實體類,序列化,lombock表達式,其他繼承實現,類型強轉,都丟失了,一個代碼幾百行報錯,這不是關鍵,關鍵是代碼可讀性極差,每個代碼都要用快捷鍵格式化代碼才能修復。
下面來看我自研的自動化逆向工具生成源碼。
自動化逆向源碼插件工具:
自動化工具 可以點擊這裏訪問工具
先來説一下我的工具解決了什麼問題?
解決 90%+ 常見報錯
✅ 缺失 import 修復
✅ 實體類報錯修復
✅ 橋接問題處理
✅ Lombok 序列化修復
✅ MyBatis Plus 問題修復
✅ 其他常見問題修復
首先訪問網站,上傳jar包會自動解析:
如果出現這個是因為你之前上傳了一個,我這邊做了簽名控制,從新上傳一個就好了
這裏上傳好了,就支付成功了自動下載就行,你沒看錯,5秒我就給你出源碼了,這裏核心我是前端做了解壓,減少了帶寬上傳,只掃描class文件,提高了逆向效率,所以這裏我不會保存客户源碼,大家可以放心大膽的上傳。
這裏經過了驗證效率,一萬2千多個代碼在10分鐘之內,效率還是非常高,需要大家上傳後耐心等待一下。
支付下載解壓:
install.txt 是我用腳本生成好的本地install jar你替換目錄lib就可以打入本地。
pom.txt 這個是我根據lib生成的本地pom,你上面執行好了就可以用下面這個引用,不依賴第三方lib,只要你項目用了基本百分百準確。
導入idea項目:目錄結構我給你生成好了默認就是maven項目直接open就行。
來看我的插件自動編譯出來的問題有多少個?
這裏基本原因是因為一部分代碼異常沒有捕捉到,然後部分數值變量會定義類型,從而導致問題產生。這部分後面會迭代解決,從底層處理代碼異常捕捉,類型變量會控制讀取從而達到優化。
- 原始錯誤數量:283 個錯誤
- 修復後錯誤數量:22 個錯誤
- 已修復的錯誤數量:283 - 22 = 261 個錯誤
錯誤解決率
錯誤解決率 = (已修復的錯誤數量 ÷ 原始錯誤數量) × 100%
= (261 ÷ 283) × 100%
= 92.23%
從目前來看能達到90%以上的錯誤修復率,還是很不錯了,但是後期會優化到95%以上,因為逆向沒有辦法百分百還原,因為不同的架構和代碼都是不一樣的。
自動化工具帶來的價值
我們的自動化工具解決了代碼所有導入的包,不會出現少包的情況。
所有的實體類都做了方法重寫報錯的問題:
所有的代碼都做了格式化處理,提高了代碼逆向後的可讀性和維護性。
當前還有lombock的強轉和值不對,對於複雜的lombock表達式:
當前也包括mybatiesplus的lombock表達式強轉和修復,還有其他序列化代碼問題,和泛型強轉的問題都全部修復,後續我這邊插件會接入AI進行分析修復代碼,做代碼分析,從而提高代碼的逆向質量。