前言:


在Java項目逆向工程領域,開發人員常常面臨代碼質量差、修復耗時的挑戰。本文通過實際案例,深度對比傳統JadGUI工具與我們自主研發的自動化逆向工具在錯誤修復率、效率和質量方面的顯著差異。


jadgui工具逆向代碼:

首先我們來看用jadgui工具導出的源碼是什麼樣的?

首先打開jadgui save all resource 導出java文件。

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar逆向源碼

導出完成是這樣

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar_02

這裏逆向不管是不是maven項目都需要maven打包,都需要創建一個maven項目

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#運維_03

把解壓的文件複製到我們創建的maven項目裏面。記住這裏要在目錄裏面複製,用idea工具複製有點慢

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar_04

複製resource文件過來:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#運維_05

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#運維_06

最後一個複製把pom的jar版本一起拿過來,如果沒有pom就自動手動打lib包到本地倉庫引用

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar逆向源碼_07

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar_08

如果沒有記得解壓jar 包手動打包

複製pom文件版本到項目,如果沒有這個文件就不是maven項目需要手動打包

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#運維_09

idea開發工具一定要配置好maven環境:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#運維_10

導出的包名不對項目要統一替換一下:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar_11

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#運維_12

配置項目jdk對應版本,這裏根據你實際項目版本配置:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar自動逆向工具_13

不知道可以看這裏。一定要配置好

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar_14

這裏就來看所以的編譯錯誤:

這裏不知道如何看所有錯誤可以看我這篇博客:

idea顯示全部錯誤

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#運維_15

總錯誤數283個,項目還不算大,如果大的話可能幾千上萬個報錯,這都是算少的了,那我們來分析到底哪些問題導致代碼報錯。

主要問題集中:

1,代碼差包:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar_16

這是jadgui特性導出項目都會差包問題特別多

2,實體類方法報錯,會序列化失敗:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#自動化_17

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#自動化_18

3,實體類代碼沒有格式化,還得格式化代碼

這裏修復的時候需要全部格式化代碼在修復代碼,因為一行顯示不全,這是編譯工具的通病

4,所有代碼都有註釋信息,和結尾逆向的註釋説明,這個代碼閲讀感極差

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#運維_19

5,繼承實現符號都會報錯,明顯不對

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#自動化_20

6,代碼自動強轉類型問題:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#自動化_21

7,實體類型對不上屬性的問題:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar_22

8,字段初始化值乾沒有了,也是普遍問題

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar逆向源碼_23

9,lambock表達式 全亂了,基本代碼索引都會少,編譯出來全是錯的:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar逆向源碼_24

10,表達式循環也一樣報錯:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#運維_25

如果這裏是用了mybatiesplus的lombock 方法基本你代碼全改,因為編譯逆向出來的全是少屬性報錯。

11,強轉導致類型丟失,異常報錯,沒有處理,這也是編譯出來的通病:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar_26

當前除了這11個問題,還有別的問題我都不一一列舉了,因為畢竟開源工具弄出來的源碼,很多報錯,通常修復一個jar包快的話,也要1,2天,因為代碼報錯太多了,這是正常的。

主要問題在於代碼差包,這個導入都要搞半天,然後實體類,序列化,lombock表達式,其他繼承實現,類型強轉,都丟失了,一個代碼幾百行報錯,這不是關鍵,關鍵是代碼可讀性極差,每個代碼都要用快捷鍵格式化代碼才能修復。

下面來看我自研的自動化逆向工具生成源碼。

自動化逆向源碼插件工具:

自動化工具 可以點擊這裏訪問工具

先來説一下我的工具解決了什麼問題?

解決 90%+ 常見報錯

✅ 缺失 import 修復

✅ 實體類報錯修復

✅ 橋接問題處理

✅ Lombok 序列化修復

✅ MyBatis Plus 問題修復

✅ 其他常見問題修復

首先訪問網站,上傳jar包會自動解析:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar自動逆向工具_27

如果出現這個是因為你之前上傳了一個,我這邊做了簽名控制,從新上傳一個就好了

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#運維_28

這裏上傳好了,就支付成功了自動下載就行,你沒看錯,5秒我就給你出源碼了,這裏核心我是前端做了解壓,減少了帶寬上傳,只掃描class文件,提高了逆向效率,所以這裏我不會保存客户源碼,大家可以放心大膽的上傳。

這裏經過了驗證效率,一萬2千多個代碼在10分鐘之內,效率還是非常高,需要大家上傳後耐心等待一下。

支付下載解壓:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar_29

install.txt 是我用腳本生成好的本地install jar你替換目錄lib就可以打入本地。

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar逆向源碼_30

pom.txt 這個是我根據lib生成的本地pom,你上面執行好了就可以用下面這個引用,不依賴第三方lib,只要你項目用了基本百分百準確。

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar逆向源碼_31

導入idea項目:目錄結構我給你生成好了默認就是maven項目直接open就行。

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#運維_32

來看我的插件自動編譯出來的問題有多少個?

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar自動逆向工具_33

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#運維_34

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#自動化_35

這裏基本原因是因為一部分代碼異常沒有捕捉到,然後部分數值變量會定義類型,從而導致問題產生。這部分後面會迭代解決,從底層處理代碼異常捕捉,類型變量會控制讀取從而達到優化。

  • 原始錯誤數量:283 個錯誤
  • 修復後錯誤數量:22 個錯誤
  • 已修復的錯誤數量:283 - 22 = 261 個錯誤

錯誤解決率

錯誤解決率 = (已修復的錯誤數量 ÷ 原始錯誤數量) × 100%
= (261 ÷ 283) × 100%
92.23%

從目前來看能達到90%以上的錯誤修復率,還是很不錯了,但是後期會優化到95%以上,因為逆向沒有辦法百分百還原,因為不同的架構和代碼都是不一樣的。

自動化工具帶來的價值

我們的自動化工具解決了代碼所有導入的包,不會出現少包的情況。

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar自動逆向工具_36

所有的實體類都做了方法重寫報錯的問題:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#自動化_37

所有的代碼都做了格式化處理,提高了代碼逆向後的可讀性和維護性。

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar_38

當前還有lombock的強轉和值不對,對於複雜的lombock表達式:

幾個開發工具的java逆向工程(java reverse engineering)功能比較_51CTO博客_#jar逆向源碼_39

當前也包括mybatiesplus的lombock表達式強轉和修復,還有其他序列化代碼問題,和泛型強轉的問題都全部修復,後續我這邊插件會接入AI進行分析修復代碼,做代碼分析,從而提高代碼的逆向質量。