第五章 靜態分析 Android 程序(二)(閱讀 Java 代碼)
時間 2021-08-15
標籤
《Android 軟件安全權威指南》學習筆記
閱讀 Java 代碼
- 在大型 APK 的逆向分析時,逐行閱讀 smali 代碼效率較低,閱讀分析更高級的 Java 僞代碼可提高效率
將 DEX 文件轉換成 jar 包
- 把 DEX 中的 Dalvik 指令還原成可閱讀的 Java 代碼的方法:將 DEX 轉換成 jar 包
工具介紹
-
dex2jar
-
提供了 DEX 和 jar 包之間互轉的命令行工具 d2j-dex2jar 和 d2j-jar2dex
-
下載地址:GitHub
-
Google 開源工具 enjarify
-
(其出現的目的是)提供比 dex2jar 更好的將 DEX 轉換爲 jar 包的方案及更精準的轉換結果
-
下載地址:GitHub
-
配置方法:CSDN
-
其實,dex2jar 經過優化,功能已很強大,enjarify 在生成的結果上並無明顯優勢
-
無論 dex2jar 還是 enjarify,都很優秀,轉換結果都是無損的,即轉換成 jar 包後的文件可作爲一個 SDK 文件在程序中調用
jar 分析工具
- jar 分析工具準確地說應稱 jar 包查看工具(大多數 jar 包分析工具只有查看功能,沒有分析功能)
- 常見的有 jd-gui、jadx、bytecode-viewer 等,使用最多的是 jd-gui
jd-gui
特點
- 跨平臺,開源
- 用戶體驗好,運行速度快
- 方法名的跟蹤、跳轉、強大的搜索功能等用起來很順手
- 但可能會對一些特殊語法的解析拋出異常(對基於 JDK 8 開發的 DEX 也會有這樣的情況出現)
jadx
特點
- 支持直接打開 APK 或 DEX 文件查看其 Java 僞代碼,而不用經過 dex2jar 這一轉換過程
- 反編譯 APK 時使用 jadx,會實時對 APK 中的類與方法進行反編譯
- 但不經過前期轉換這一過程也帶來了問題:在查看類的方法時,對本地沒有緩存結果的類會進行實現的反編譯操作,在進行類與字符串操作時,大量的反編譯工作會使操作變得很慢
bytecode-viewer
- 下載地址:GitHub
- 執行如下命令(「-」後的數字是版本號)打開(打開後是一個窗口程序,可拖拽文件)
java -jar Bytecode-Viewer-2.9.22.jar
特點
- 同樣支持直接打開 APK 或 DEX 查看 Java 僞代碼
- bytecode-viewer 的底層會根據用戶的選擇,先調用 dex2jar 或 enjarify 對目標文件進行反編譯,故其後續操作速度相對較快
- bytecode-viewer 和 jd-gui、jadx 一樣,不支持對 jar 包直接修改,但它提供了插件功能並內置了幾款強大的 jar 反混淆插件,在實際分析中的使用效果比後二者好