7、Android逆向基础:adb命令详解(安装、卸载、文件传输、日志)、模拟器与真机调试环境配置
说到Android逆向,adb是绕不开的第一个工具。我刚开始接触逆向时,觉得adb就是个调试工具,后来才发现——它其实是连接你与设备之间的桥梁。没有adb,你连App都装不上去,更别提分析了。
这一节,我会把adb的核心命令和调试环境配置讲透。嗯,都是我在项目里反复用过的东西,踩过的坑也不少,咱们一个个说。
7.1 adb是什么?为什么逆向离不开它?
adb全称Android Debug Bridge,说白了就是电脑和Android设备之间的“通信管道”。它让你能在电脑上控制手机、安装App、传文件、看日志……几乎所有逆向操作的第一步,都得靠它。
我个人习惯把adb理解成三个角色:
- 客户端:你电脑上敲的命令
- 服务端:电脑后台跑的一个进程,管理设备连接
- 守护进程(adbd):手机上跑的程序,接收指令
你敲一条adb命令,客户端发给服务端,服务端再转发给手机上的adbd去执行。整个过程很快,但一旦某个环节出问题,你就会看到“device offline”之类的报错。
核心要点:adb是Android逆向的“敲门砖”。不会adb,后面所有逆向操作都无从谈起。
7.2 adb常用命令详解
命令很多,但常用的就那么几个。我按使用频率给你排个序。
7.2.1 设备连接与查看
先看看你的设备有没有连上:
adb devices
这个命令会列出所有连接的设备。如果看到一串字符后面跟着“device”,说明连接成功。如果显示“unauthorized”,说明手机没授权——去手机上点“允许USB调试”就行。
我曾经在项目现场调试时,连了五台设备,结果adb devices只显示三台。排查了半天,发现是USB线的问题。嗯,有时候问题就这么简单。
7.2.2 安装与卸载App
安装一个APK:
adb install app-release.apk
如果App已经存在,想覆盖安装:
adb install -r app-release.apk
卸载App:
adb uninstall com.example.app
注意,卸载用的是包名,不是APK文件名。怎么查包名?后面会讲。
小技巧:安装时加个 -d 参数(adb install -d),可以降级安装——比如从2.0降到1.0。逆向分析时经常需要对比不同版本的行为。
7.2.3 文件传输
从手机拉文件到电脑:
adb pull /sdcard/data.txt ./
从电脑推文件到手机:
adb push ./local.txt /sdcard/
这两个命令在逆向中太常用了。比如你想分析App的数据库文件,先pull出来,用SQLite工具打开看看。或者你想替换App的某个资源文件,push进去覆盖就行。
我记得有一次分析一个恶意App,它把关键配置藏在/data/data/com.evil.app/shared_prefs/里。没有root权限根本读不到。但通过adb backup + 解包,我硬是把配置给扒出来了。这个技巧后面章节会细讲。
7.2.4 日志查看(logcat)
看日志是逆向分析的核心手段之一。App崩溃了?看日志。App弹了个奇怪的Toast?看日志。App偷偷发了网络请求?还是看日志。
adb logcat
这个命令会实时输出所有日志,信息量巨大。我一般会加过滤:
adb logcat -s "TAG_NAME"
或者按优先级过滤:
adb logcat *:E # 只看Error级别
清空旧日志:
adb logcat -c
把日志保存到文件:
adb logcat -d > log.txt
注意:logcat输出的是系统级日志,App如果用了日志混淆或加密,你看到的可能就是一堆乱码。这时候需要结合反编译工具来分析。
7.2.5 其他常用命令
| 命令 | 作用 | 逆向场景 |
|---|---|---|
| adb shell | 进入手机终端 | 查看文件、执行Linux命令 |
| adb shell pm list packages | 列出所有已安装App的包名 | 确认目标App的包名 |
| adb shell dumpsys | 查看系统服务状态 | 分析Activity栈、内存信息 |
| adb shell am start | 启动Activity | 直接拉起目标页面 |
| adb shell input tap | 模拟点击 | 自动化操作、绕过验证 |
举个例子,你想启动某个App的登录页面,但不想手动点:
adb shell am start -n com.example.app/.ui.LoginActivity
这个命令在自动化逆向时特别好用。
7.3 模拟器与真机调试环境配置
环境配置这块,我建议你模拟器和真机都准备一套。模拟器方便快捷,真机更贴近真实环境。
7.3.1 模拟器环境配置
常用的模拟器有:
- Android Studio自带模拟器:官方出品,兼容性最好
- Genymotion:速度快,适合逆向
- MuMu、雷电等国产模拟器:对国内App兼容性好
配置步骤其实很简单:
- 安装模拟器软件
- 创建一台虚拟设备(建议选Android 7~11,覆盖面广)
- 开启开发者选项和USB调试
- 用adb devices确认连接
模拟器默认会开启root权限,这对逆向来说非常方便。你可以直接访问/data/data目录,不用折腾root。
个人建议:如果你用Android Studio模拟器,记得在AVD设置里勾选“Enable keyboard input”,不然输入中文时会很痛苦。
7.3.2 真机调试环境配置
真机调试稍微麻烦一点,但更真实。步骤:
- 打开手机“设置” → “关于手机” → 连续点击“版本号”7次,开启开发者模式
- 返回“设置” → “开发者选项” → 开启“USB调试”
- 用USB线连接电脑
- 手机上弹出授权提示,点击“允许”
- 电脑上执行adb devices确认
这里有个坑——不同品牌的手机,开发者选项的位置不一样。华为在“设置→系统和更新→开发人员选项”,小米在“设置→更多设置→开发者选项”。我刚开始做逆向时,找小米的开发者选项找了十分钟……
避坑指南:我曾经遇到一台华为手机,连上电脑后adb devices一直显示“unauthorized”。折腾了半天,发现是USB连接模式默认是“仅充电”,改成“传输文件”就好了。嗯,这种小问题最容易被忽略。
7.3.3 模拟器 vs 真机:怎么选?
| 对比项 | 模拟器 | 真机 |
|---|---|---|
| 启动速度 | 快(秒级) | 慢(需连接) |
| Root权限 | 默认有 | 需刷机或利用漏洞 |
| 硬件模拟 | 有限(传感器等) | 完整 |
| 反检测 | 容易被App检测 | 较难检测 |
| 适用场景 | 快速分析、调试 | 最终验证、对抗检测 |
我的习惯是:先用模拟器快速分析,遇到反模拟器检测时,再换真机。这样效率最高。
7.4 知识体系总览
下面这张图,把adb命令和调试环境的核心逻辑串起来了。你看一眼就能明白整个体系。
这张图把adb命令分成了六大块。你不需要一次性全记住,先掌握设备管理、应用操作和日志分析这三块,就能应付大部分逆向场景了。
7.5 常见问题与避坑
最后,分享几个我踩过的坑:
- adb devices找不到设备:先检查USB线,再检查驱动,最后检查开发者选项。90%的问题是USB线坏了。
- 安装APK报错“INSTALL_FAILED_UPDATE_INCOMPATIBLE”:说明手机上已经装了签名不同的同包名App。先卸载再安装。
- logcat输出太多,找不到关键信息:加过滤条件,或者用grep(Linux/Mac)或findstr(Windows)筛选。
- 模拟器上App闪退,真机上正常:可能是App检测到了模拟器环境。这时候需要换真机,或者用模拟器伪装工具。
adb命令看似简单,但用好了能极大提升逆向效率。我建议你一边看一边动手试,把每个命令都敲一遍。嗯,实践才是最好的老师。
一句话总结:adb是Android逆向的“瑞士军刀”,安装、卸载、传文件、看日志,样样都行。配合模拟器或真机,你就能开始真正的逆向分析了。