ADB详解

什么是 ADB?

ADB(Android Debug Bridge)是 Android 设备的“万用遥控器”。它由三部分组成:客户端(你在电脑上运行的 adb 命令)守护进程(adb server,运行在电脑上)设备端守护进程(adbd,运行在 Android 设备上)
通过 ADB,你可以在电脑上列设备、打开设备 shell、推/拉文件、安装/卸载应用、查看日志、抓包等。对于 IoT 渗透测试工程师来说,很多基于 Android 的智能设备(智能摄像头、智能音箱、路由器等)都可以用 ADB 做大量枚举与测试。


如何准备与连接

  1. 在电脑安装 ADB:通常需要安装 Android SDK 平台工具(只需要 adb/fastboot 两个可执行文件即可)。

  2. 在设备上启用“USB 调试”:通常是「设置 → 关于手机 → 连续点“版本号”开启开发者选项 → 开发者选项里打开 USB 调试」。(IoT 设备可能有不同方式,或需要串口/串口命令开启)

  3. 通过 USB(或通过网络)连接设备:adb devices 查看是否连上。

示例:

# 启动 adb server 并列出设备
adb start-server
adb devices
# 输出示例:
# List of devices attached
# emulator-5554	device
# 0123456789ABCDEF	device

如果是网络(Wi-Fi)连接(有些 IoT 设备支持):

adb tcpip 5555            # 把设备设置成 TCP/IP 模式(通常需要 usb 先连上)
adb connect 192.168.1.50:5555
adb devices

把设备的 ADB 通道 从 USB 切换到 网络模式(TCP/IP)。让设备在 5555 端口上开启 ADB 服务 → 你可以通过 Wi-Fi 来连它。

让电脑去连接一个开启了 ADB 网络调试的设备


ADB 常用命令

设备枚举与管理

  • adb devices

    • 列出当前连上的设备及序列号(用于多设备时选定目标)。

  • adb -s <serial> <命令>

    • 指定设备序列号执行命令(多设备同时连时必须)。

    • 示例:adb -s 0123456789ABCDEF shell

进入设备 shell 与执行命令

  • adb shell

    • 进入设备的交互式 shell(类似 ssh)。

    • 示例:adb shell 然后在设备上执行 ls /ps, ip addr 等。

  • adb shell <命令>

    • 直接在设备上执行单条命令并返回输出。

    • 示例:adb shell getprop ro.build.version.release(查看 Android 版本)

  • adb shell suadb root

    • 提权命令:adb root 让 adbd 以 root 模式运行(仅在支持的设备/调试固件上可用)。su 则需要设备已 root。注意:多数消费级设备默认不能用 adb root

安装 / 卸载 / 列应用

  • adb install app.apk:安装 apk。

  • adb uninstall <package>:卸载应用(只卸载包名)。

  • adb shell pm list packages:列出所有包。

  • adb shell pm list packages -3:列出第三方(非系统)应用。

  • 检查可调试(debuggable)应用(常见于渗透测试):

    • 方法一(简单判断,可结合静态分析):导出 apk 后查看 AndroidManifest 的 android:debuggable="true",或用 aapt dump badging app.apk

    • 方法二(在设备上):adb shell pm dump <package> | grep debug(不同系统表现不同,作为线索使用)。

文件传输

  • adb push <local> <remote>:把本地文件拷到设备上。

    • 示例:adb push mytool /data/local/tmp/

  • adb pull <remote> <local>:把设备上的文件拉到本地。

    • 示例:adb pull /sdcard/log.txt ./log.txt

  • 常用于:拉取配置文件、日志、数据库、固件镜像等用于离线分析(前提:有权限访问)。

查看日志与诊断

  • adb logcat:设备系统与应用日志流。非常重要。

    • 示例:adb logcat -v time(带时间戳)

    • 可以加过滤器:adb logcat MyAppTag:D *:S(只显示 MyAppTag)

  • adb bugreport:生成包含系统信息、日志、堆栈等的诊断报告(很大)。适合深度分析。

  • adb shell dumpsys <service>:获取系统服务信息(如 dumpsys package, dumpsys activity)。

获取设备信息

  • adb shell getprop:列出设备属性(例如 ro.product.modelro.build.version.sdk 等)。

    • 示例:adb shell getprop ro.product.model

  • adb shell cat /proc/version:查看内核版本。

  • adb shell uname -a:内核信息(视设备支持情况)。

挂载 / 重启 / remount / root

  • adb remount:以可写方式重新挂载系统分区(通常需要 root 权限或特殊固件)。

  • adb reboot:重启设备。可以带参数如 adb reboot bootloader 进入 bootloader。

  • adb root:重新以 root 权限启动 adbd(仅在支持设备上)。

取证与应用数据访问

  • adb backup -apk -shared -all -f backup.ab:创建设备备份(现在很多设备/Android 版本限制或弃用该功能)。

  • adb shell run-as <package> <command>:以应用的用户权限运行命令(仅当应用是可调试或签名打包允许时可用)。可用于访问 data/data/<package> 下的文件。

    • 示例:adb shell run-as com.example.app ls /data/data/com.example.app/databases

  • adb pull /data/data/<package>/databases/my.db(需要有权限或用 run-as / root)。

网络 / 端口转发 / 抓包

  • adb forward tcp:<hostport> tcp:<deviceport>:把设备端口转发到电脑端口(只在 usb 模式下)。

    • 示例:adb forward tcp:8080 tcp:80,然后本地访问 localhost:8080 即等同于访问设备的 80 端口(适用于测试 web 服务)。

  • adb reverse tcp:<deviceport> tcp:<hostport>:反向(从设备到主机)。Android 5.0+ 支持。

  • adb shell tcpdump:很多设备没有 tcpdump,可先 adb push tcpdump 到设备再执行,实现抓包(需要 root 或 CAP_NET_RAW)。

  • 另一种常见方式:使用 adb shell 启动 tcpdump -w /sdcard/capture.pcap,然后 adb pull /sdcard/capture.pcap 到本地用 Wireshark 分析。

屏幕截取 / 录屏

  • adb shell screencap -p /sdcard/screen.png 然后 adb pull /sdcard/screen.png

  • adb shell screenrecord /sdcard/demo.mp4(设备支持时,可以录屏)。

快速常用命令一览

# 列设备
adb devices

# 指定设备运行 shell
adb -s 0123456789ABCDEF shell

# 查看设备属性
adb shell getprop

# 列应用
adb shell pm list packages -3

# 拉取文件
adb pull /sdcard/config.txt ./config.txt

# 推送文件
adb push exploit_tool /data/local/tmp/

# 安装 apk
adb install app.apk

# 获取日志
adb logcat -d > device_log.txt

# 端口转发
adb forward tcp:8080 tcp:80

# 生成 bugreport(可能很大)
adb bugreport bugreport.zip

IoT 渗透测试中常见的 ADB 流程

  1. 确认连接方式:USB、串口、以太网(设备可能暴露 ADB over TCP)或调试端口。先 adb devices 确认序列号/网络地址。

  2. 枚举系统信息getpropuname -acat /proc/versiondumpsys。确定 Android 版本、内核、厂商定制。

  3. 查看启动/服务psnetstat(或 ss)、dumpsys activity services,确认运行的守护进程与监听端口。

  4. 查看包与应用pm list packages -3、拉取 APK(通常在 /data/app/system/app),导出后做静态分析(查 Manifest、签名、debuggable)。

  5. 拉取配置/凭证/日志:尝试拉取 /data/misc/wifi/*.conf、应用数据库(需权限)和日志(/data/loglogcat)。注意:非 root 设备可能受限。

  6. 网络与中间人测试:用 adb forward 将设备本地服务映射到测试机,或者把设备流量导到你控制的抓包代理来检测明文凭证。

  7. 检查持久化/更新机制:分析 OTA 升级流程、固件写入位置、是否存在不安全的升级口令或未签名固件更新。

  8. 尝试权限提升(仅在授权测试时):查看是否存在 adb root、debuggable 应用或可滥用 su binary,或利用旧漏洞(需审慎、合法)。

  9. 生成证据与报告:用 adb bugreport、日志导出、抓包和文件样本作为复现和证明材料。


常见问题与排查技巧

  • 设备未列出(adb devices 空白)

    • 检查 USB 数据线(有些线只充电);检查驱动(Windows 需要厂商驱动或通用 ADB 驱动);确保设备已允许调试授权弹窗(accept)。

  • adb root 不生效:消费级固件通常禁止 adb root。需要设备 root 或使用工程固件。不要在未经授权的设备上尝试 root。

  • 权限受限无法访问 /data:尝试 run-as <package>(如果应用签名允许),或寻找可利用的 debuggable app。

  • logcat 没有输出:检查是否有权限、日志级别是否被厂商限制(某些生产设备会限制 logcat 输出)。


推荐工具与配合使用的方法

  • Wireshark:分析通过 adb pull 拉下来的 pcap 文件。

  • apktool / jadx / jadx-gui / aapt:对拉下的 APK 做反编译/静态分析。

  • frida / gdb / strace:动态分析、hook(需要 root 或可调试应用)。

  • tcpdump(在设备上):做设备本地抓包(通常需要 push tcpdump 并具备权限)。

  • scrcpy:通过 adb 在电脑上实时显示并控制设备屏幕(对 UI 分析很方便)。


快速参考

把下面当成速查卡:

adb devices
adb -s <serial> shell
adb shell getprop
adb shell pm list packages -3
adb pull /sdcard/log.txt .
adb push mytool /data/local/tmp/
adb logcat -d > log.txt
adb forward tcp:8080 tcp:80
adb bugreport bugreport.zip
adb shell run-as com.example.app ls /data/data/com.example.app
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值