什么是 ADB?
ADB(Android Debug Bridge)是 Android 设备的“万用遥控器”。它由三部分组成:客户端(你在电脑上运行的 adb 命令)、守护进程(adb server,运行在电脑上)、设备端守护进程(adbd,运行在 Android 设备上)。
通过 ADB,你可以在电脑上列设备、打开设备 shell、推/拉文件、安装/卸载应用、查看日志、抓包等。对于 IoT 渗透测试工程师来说,很多基于 Android 的智能设备(智能摄像头、智能音箱、路由器等)都可以用 ADB 做大量枚举与测试。
如何准备与连接
-
在电脑安装 ADB:通常需要安装 Android SDK 平台工具(只需要 adb/fastboot 两个可执行文件即可)。
-
在设备上启用“USB 调试”:通常是「设置 → 关于手机 → 连续点“版本号”开启开发者选项 → 开发者选项里打开 USB 调试」。(IoT 设备可能有不同方式,或需要串口/串口命令开启)
-
通过 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 su或adb 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.model、ro.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 流程
-
确认连接方式:USB、串口、以太网(设备可能暴露 ADB over TCP)或调试端口。先
adb devices确认序列号/网络地址。 -
枚举系统信息:
getprop、uname -a、cat /proc/version、dumpsys。确定 Android 版本、内核、厂商定制。 -
查看启动/服务:
ps、netstat(或ss)、dumpsys activity services,确认运行的守护进程与监听端口。 -
查看包与应用:
pm list packages -3、拉取 APK(通常在/data/app或/system/app),导出后做静态分析(查 Manifest、签名、debuggable)。 -
拉取配置/凭证/日志:尝试拉取
/data/misc/wifi/*.conf、应用数据库(需权限)和日志(/data/log、logcat)。注意:非 root 设备可能受限。 -
网络与中间人测试:用
adb forward将设备本地服务映射到测试机,或者把设备流量导到你控制的抓包代理来检测明文凭证。 -
检查持久化/更新机制:分析 OTA 升级流程、固件写入位置、是否存在不安全的升级口令或未签名固件更新。
-
尝试权限提升(仅在授权测试时):查看是否存在
adb root、debuggable 应用或可滥用 su binary,或利用旧漏洞(需审慎、合法)。 -
生成证据与报告:用
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



8884

被折叠的 条评论
为什么被折叠?



