Android逆向-工具篇

工欲善其事,必先利其器
1. Android 官方調(diào)試工具
1.1 Android Device Monitor
Android Studio 是安卓官方的 IDE,用于開發(fā)安卓應用,一般逆向中不需要用到。但是 Android SDK 中有一個調(diào)試工具 Android Device Monitor,用來看日志很方便,因此要裝一下 SDK。通過 Android Studio 的 SDK 管理器可以安裝需要的 SDK 版本。
注意,Android Device Monitor 已經(jīng)從 Android Studio 3.2 中移除,被一組新的組件取代。要在 SDK 管理器的 SDK Tools 標簽下取消勾選 Hide Obsolete Packages,然后選擇 Android SDK Tools (Obsolete),Apply 之后,在 SDK 安裝目錄下會生成一個 tools 目錄,雙擊 <SDK安裝目錄>/tools/monitor.bat 就能打開 Android Device Monitor。Android Device Monitor 和 Android Studio 不要同時開,否則調(diào)試信息會不正常。


Android Device Monitor 的日志過濾功能很強大,可以先按包名過濾目標app的日志,然后搜索關(guān)鍵字定位到具體日志。

Android Studio 官方下載地址:https://developer.android.google.cn/studio
1.2 Android SDK Platform-Tools
Android SDK Platform-Tools是Android SDK的一個子集,提供了常用的命令行工具,平常用到最多的adb和fastboot就在這個工具包里。它是一個壓縮包,解壓后就能執(zhí)行。最好將目錄添加到 PATH 環(huán)境變量,方便在任意目錄下調(diào)用。
官方下載地址:https://developer.android.google.cn/studio/releases/platform-tools?hl=zh-cn

2. apk 解包、簽名、打包
2.1 命令行工具
Apktool
apktool 是一個可以解包并反編譯 apk 的命令行工具,它依賴 Java 8 (JRE 1.8)。常用的命令:
Apktool 官方下載:https://ibotpeaches.github.io/Apktool/
zipalign
zipalign 是數(shù)據(jù)對齊工具,可以優(yōu)化系統(tǒng)解析 apk 的速度,通常按 4 字節(jié)對齊。常用的命令:
其他參數(shù)參考官方文檔:https://developer.android.google.cn/studio/command-line/zipalign?hl=zh-cn
zipalign 位于 <SDK安裝目錄>/build-tools/<版本號> 目錄下。
apksigner
重新打包后的 apk 沒有簽名,是無法安裝到安卓系統(tǒng)中的,需要使用 apksigner 對 apk 簽名:
其中xxx.jks是密鑰庫文件,可用通過Android Studio生成,<ks_pwd>是密鑰庫的密碼,<key_pwd>是密鑰密碼,如果沒有密碼則不需要提供,或者也可以通過其他方式提供,具體細節(jié)參考官方文檔:https://developer.android.google.cn/studio/command-line/apksigner?hl=zh-cn
apksigner 位于 <SDK安裝目錄>/build-tools/<版本號> 目錄下。
這幾個命令組合起來使用:
2.2 圖形界面
有很多基于這些基本命令行工具封裝的圖形界面,推薦一個比較順手的 APK Editor Studio,可以快速修改應用名和圖標。在只需要替換資源文件,而不用修改代碼邏輯的時候,用它來解包/打包速度會快一點。

APK Editor Studio 官方下載地址:https://github.com/kefir500/apk-editor-studio

3 反編譯與代碼查看
解包 apk 后會得到一些 classes.dex 文件,它們是編譯后的二進制文件,反編譯得到 smali 代碼才好閱讀和修改代碼邏輯(當然也可以直接修改 dex,但分析起來比較費勁)。Apktool 在解包時已經(jīng)反編譯了,因此直接得到 smali 代碼。這里介紹一些圖形界面工具,方面查看代碼。
3.1 Android Killer
Android Killer 是一款比較老的工具,依賴 JRE 1.8(好像是因為Apktool),用它來解包和反編譯沒問題,但是再打包回去就會報錯,吾愛上有一些解決方法,在我電腦上都不起作用,就沒深究。主要用它來修改 smali 代碼以及全局搜索和替換。

Android Killer 官方下載地址:https://www.52pojie.cn/thread-319641-1-1.html
3.2 APKToolGUI
由于 AndroidKiller 的編譯打包功能有問題,我一般用 APKToolGUI 完成后續(xù)的編譯打包簽名。

APKToolGUI 官方下載地址:https://github.com/AndnixSH/APKToolGUI
3.3 JEB
JEB 可以將 apk 反編譯為 smali 代碼和 Java 代碼。但是好像沒有全局搜索,也不能修改文件內(nèi)容。

JEB 安裝使用教程:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1598242
3.4 JADX
JADX 功能比較齊全,可以解包、反編譯成 smali 和 Java 代碼,并且支持全局搜索,但是不能修改。適合用來梳理代碼邏輯。

但是感覺它不是很穩(wěn)定,我遇到過幾次崩潰的情況。
JADX 官方下載地址:https://github.com/skylot/jadx

另外還有一些靜態(tài)分析和動態(tài)調(diào)試的工具,IDA Pro、Frida等,后面具體案例再介紹吧。