Android逆向-工具篇
工欲善其事,必先利其器
1. Android 官方调试工具
1.1 Android Device Monitor
Android Studio 是安卓官方的 IDE,用于开发安卓应用,一般逆向中不需要用到。但是 Android SDK 中有一个调试工具 Android Device Monitor,用来看日志很方便,因此要装一下 SDK。通过 Android Studio 的 SDK 管理器可以安装需要的 SDK 版本。
注意,Android Device Monitor 已经从 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 不要同时开,否则调试信息会不正常。


Android Device Monitor 的日志过滤功能很强大,可以先按包名过滤目标app的日志,然后搜索关键字定位到具体日志。

Android Studio 官方下载地址:https://developer.android.google.cn/studio
1.2 Android SDK Platform-Tools
Android SDK Platform-Tools是Android SDK的一个子集,提供了常用的命令行工具,平常用到最多的adb和fastboot就在这个工具包里。它是一个压缩包,解压后就能执行。最好将目录添加到 PATH 环境变量,方便在任意目录下调用。
官方下载地址: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 是数据对齐工具,可以优化系统解析 apk 的速度,通常按 4 字节对齐。常用的命令:
其他参数参考官方文档:https://developer.android.google.cn/studio/command-line/zipalign?hl=zh-cn
zipalign 位于 <SDK安装目录>/build-tools/<版本号> 目录下。
apksigner
重新打包后的 apk 没有签名,是无法安装到安卓系统中的,需要使用 apksigner 对 apk 签名:
其中xxx.jks是密钥库文件,可用通过Android Studio生成,<ks_pwd>是密钥库的密码,<key_pwd>是密钥密码,如果没有密码则不需要提供,或者也可以通过其他方式提供,具体细节参考官方文档: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 在解包时已经反编译了,因此直接得到 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 完成后续的编译打包签名。

APKToolGUI 官方下载地址:https://github.com/AndnixSH/APKToolGUI
3.3 JEB
JEB 可以将 apk 反编译为 smali 代码和 Java 代码。但是好像没有全局搜索,也不能修改文件内容。

JEB 安装使用教程:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1598242
3.4 JADX
JADX 功能比较齐全,可以解包、反编译成 smali 和 Java 代码,并且支持全局搜索,但是不能修改。适合用来梳理代码逻辑。

但是感觉它不是很稳定,我遇到过几次崩溃的情况。
JADX 官方下载地址:https://github.com/skylot/jadx

另外还有一些静态分析和动态调试的工具,IDA Pro、Frida等,后面具体案例再介绍吧。

