第五章 靜態分析 Android 程序(二)(閱讀 Java 代碼)

閱讀 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

  • 下載地址:GitHub
  • 窗口程序,解壓後即可打開使用

特點

  • 跨平臺,開源
  • 用戶體驗好,運行速度快
  • 方法名的跟蹤、跳轉、強大的搜索功能等用起來很順手
  • 但可能會對一些特殊語法的解析拋出異常(對基於 JDK 8 開發的 DEX 也會有這樣的情況出現)

jadx

  • 下載地址:GitHub
  • 支持命令行和窗口模式
    在這裏插入圖片描述

特點

  • 支持直接打開 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 反混淆插件,在實際分析中的使用效果比後二者好