CFR - another java decompiler批量反編譯jar文件


jd-gui眾所周知,業界公認的反編譯必備工具。

筆者目前遇到一個java項目,社區版,想做一個本地化的版本,詢問官方,官方說閉源,無奈之下只能反編譯了。

面對那么多jar,jd-gui一個個去反編譯保存,工作量的確很大。幸好在網上找到一個不錯的工具

高能預警:jd-gui反編譯的錯誤的,你敢不敢放到cfr來反編譯試一試,保證有驚喜。

CFR - another java decompiler

特性:

    CFR will decompile modern Java features - Java 8 lambdas (pre and post Java beta 103 changes),

   Java 7 String switches etc, but is written entirely in Java 6. 

支持主流java特性-java 8 lambdas表達式,java7字符串切換,最主要的他是用java6編寫,這個就有點厲害了。

筆者還發現,他可以反編譯類的注解,jd-gui無法反編譯的 ,cfr卻游刃有余。經過一番測試,毫不猶豫的把它收錄到逆向兵器庫。

使用方法比較簡單,如下:

java -jar cfr_0_121.jar test.jar --outputdir c:/test

運行以上命令就可以把反編譯后的test.jar代碼保存到c:/test

筆者想要本地化的軟件目錄結構如下

└─proj
     ├─actions
     │ └─aaa.jar
     ├─drawing.jar
     ├─favs.jar
     ├─feeders.jar
     ├─imex.jar
     ├─impl.jar
     ├─language.jar
     ├─option.jar
     ├─resources.jar
     ├─runtime.jar
     ├─test.jar
     ├─treelist.jar
     └─view
          ├─editor.jar
          ├─progress.jar
          └─startup.jar

上面的jar如果用jd-gui手工反編譯工作量很大,如果項目龐大,每次反編譯將耽誤好多時間。

於是筆者寫了一個批處理decompile.bat,可以用於批量反編譯,代碼如下:

可以把需要單獨需要反編譯的jar拖拽到批處理文件上,默認情況下反編譯當前目錄及其子目錄的所有jar

@echo off
color 17

if "%1" == "" (
    for /f "delims=" %%i in ('dir /s /b /a-d /o-s *.jar') do (
        echo 正在反編譯 %%~ni...
        title 正在反編譯 %%i...
        java -jar D:\develop\java逆向\cfr_0_122.jar "%%i" --caseinsensitivefs true  --outputdir "%%~di%%~pi%%~ni"
        echo ----%%i已經翻反編譯---
    )
    goto :end 
) else (
    title 正在反編譯 %1...
    java -jar D:\develop\java逆向\cfr_0_122.jar %1 --caseinsensitivefs true  --outputdir "%~d1%~p1%~n1"
    echo 反編譯完成.
    goto :end
)

echo 反編譯完成.
@pause>nul

:end
pause
exit

 

只要你把這個文件保存下來,放到項目根目錄,運行以后,每個目錄中都會根據jar文件名生成一個目錄,里面是反編譯后的Java代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM