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兼容性好

配置步骤其实很简单:

  1. 安装模拟器软件
  2. 创建一台虚拟设备(建议选Android 7~11,覆盖面广)
  3. 开启开发者选项和USB调试
  4. 用adb devices确认连接

模拟器默认会开启root权限,这对逆向来说非常方便。你可以直接访问/data/data目录,不用折腾root。

个人建议:如果你用Android Studio模拟器,记得在AVD设置里勾选“Enable keyboard input”,不然输入中文时会很痛苦。

7.3.2 真机调试环境配置

真机调试稍微麻烦一点,但更真实。步骤:

  1. 打开手机“设置” → “关于手机” → 连续点击“版本号”7次,开启开发者模式
  2. 返回“设置” → “开发者选项” → 开启“USB调试”
  3. 用USB线连接电脑
  4. 手机上弹出授权提示,点击“允许”
  5. 电脑上执行adb devices确认

这里有个坑——不同品牌的手机,开发者选项的位置不一样。华为在“设置→系统和更新→开发人员选项”,小米在“设置→更多设置→开发者选项”。我刚开始做逆向时,找小米的开发者选项找了十分钟……

避坑指南:我曾经遇到一台华为手机,连上电脑后adb devices一直显示“unauthorized”。折腾了半天,发现是USB连接模式默认是“仅充电”,改成“传输文件”就好了。嗯,这种小问题最容易被忽略。

7.3.3 模拟器 vs 真机:怎么选?

对比项 模拟器 真机
启动速度 快(秒级) 慢(需连接)
Root权限 默认有 需刷机或利用漏洞
硬件模拟 有限(传感器等) 完整
反检测 容易被App检测 较难检测
适用场景 快速分析、调试 最终验证、对抗检测

我的习惯是:先用模拟器快速分析,遇到反模拟器检测时,再换真机。这样效率最高。

7.4 知识体系总览

下面这张图,把adb命令和调试环境的核心逻辑串起来了。你看一眼就能明白整个体系。

adb 核心体系 设备管理 adb devices adb connect/disconnect 应用操作 adb install/uninstall adb shell pm/am 文件传输 adb pull/push 日志分析 adb logcat 过滤/保存日志 环境配置 模拟器配置 真机调试配置 高级操作 dumpsys分析 模拟点击/输入 逆向分析的基础操作平台

这张图把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逆向的“瑞士军刀”,安装、卸载、传文件、看日志,样样都行。配合模拟器或真机,你就能开始真正的逆向分析了。

公众号:蓝海资料掘金营,微信deep3321