常用 ADB 命令大全

常用 ADB 命令大全

ADB (Android Debug Bridge) 是一个功能强大的命令行工具,可让您与模拟器实例或连接的 Android 设备进行通信。它是 Android 逆向工程中最基础也是最重要的工具之一。


设备连接与管理

基本设备操作

命令描述
adb devices列出所有连接的设备
adb devices -l列出所有连接的设备及其详细信息(型号、传输方式等)
adb -s <序列号> <命令>向指定设备发送命令(多设备时必须指定)
adb -d <命令>向唯一连接的 USB 设备发送命令
adb -e <命令>向唯一运行的模拟器发送命令
adb kill-server终止 ADB 服务器进程
adb start-server启动 ADB 服务器进程

无线调试

命令描述
adb tcpip 5555将设备 adbd 切换到 TCP 模式(端口 5555)
adb connect <IP>:5555通过 WiFi 连接到设备
adb disconnect <IP>:5555断开指定的无线连接
adb disconnect断开所有无线连接
adb pair <IP>:<端口>Android 11+ 无线配对(需要配对码)

无线调试步骤(传统方式)

  1. USB 连接设备,确认 adb devices 可见
  2. 执行 adb tcpip 5555
  3. 查看设备 IP:adb shell ip addr show wlan0
  4. 拔掉 USB,执行 adb connect <设备IP>:5555

Android 11+ 无线调试

  1. 设备开启 开发者选项 -> 无线调试
  2. 点击 使用配对码配对设备,获取配对地址和配对码
  3. 电脑执行 adb pair <IP>:<配对端口>,输入配对码
  4. 配对成功后执行 adb connect <IP>:<连接端口>

设备重启与信息

命令描述
adb reboot正常重启设备
adb reboot bootloader重启到引导加载程序 (Bootloader/Fastboot)
adb reboot recovery重启到恢复模式 (Recovery)
adb reboot sideload重启到 Sideload 模式(用于刷机)
adb root以 root 权限重启 adbd 服务(仅 userdebug/eng 版本)
adb unroot以普通权限重启 adbd 服务
adb shell getprop ro.product.model获取设备型号
adb shell getprop ro.build.version.release获取 Android 系统版本
adb shell getprop ro.build.version.sdk获取 SDK 版本(API Level)
adb shell getprop ro.product.cpu.abi获取 CPU 架构
adb shell getprop ro.debuggable查看系统是否为可调试版本
adb shell wm size获取屏幕分辨率
adb shell wm density获取屏幕像素密度 (DPI)
adb shell getprop列出所有系统属性

应用管理

安装与卸载

命令描述
adb install <apk路径>安装应用
adb install -r <apk路径>重新安装应用(保留数据)
adb install -t <apk路径>允许安装测试包(test-only APK)
adb install -g <apk路径>安装并授予所有运行时权限
adb install -d <apk路径>允许降级安装(版本号更低)
adb install-multiple <apk1> <apk2>安装 Split APK(多个 APK 文件)
adb uninstall <包名>完全卸载应用
adb uninstall -k <包名>卸载应用但保留数据和缓存

包管理 (pm)

命令描述
adb shell pm list packages列出所有已安装的包名
adb shell pm list packages -f列出所有包名及其 APK 路径
adb shell pm list packages -3只列出第三方(用户安装的)应用
adb shell pm list packages -s只列出系统应用
adb shell pm list packages <关键词>按关键词过滤包名
adb shell pm path <包名>获取指定应用的 APK 路径
adb shell pm dump <包名>查看应用的完整信息
adb shell pm clear <包名>清除应用所有数据和缓存
adb shell pm disable-user --user 0 <包名>禁用应用(免 root 冻结)
adb shell pm enable <包名>启用被禁用的应用

权限管理

命令描述
adb shell pm grant <包名> <权限>授予指定权限
adb shell pm revoke <包名> <权限>撤销指定权限
adb shell pm list permissions -g列出所有权限组
adb shell dumpsys package <包名>查看应用详细信息(含已授权限)

Activity 管理 (am)

命令描述
adb shell am start -n <包名>/<Activity>启动指定 Activity
adb shell am start -D -n <包名>/<Activity>以调试模式启动 Activity
adb shell am start -a android.intent.action.VIEW -d <URL>使用浏览器打开 URL
adb shell am startservice -n <包名>/<Service>启动指定 Service
adb shell am broadcast -a <action>发送广播
adb shell am force-stop <包名>强制停止应用
adb shell am set-debug-app -w <包名>设为调试模式(启动时等待调试器)
adb shell am clear-debug-app清除调试应用设置
adb shell dumpsys activity top查看当前 Activity 栈信息

文件传输

基本操作

命令描述
adb push <本地路径> <远程路径>将文件/目录从电脑推送到设备
adb pull <远程路径> [本地路径]将文件/目录从设备拉取到电脑
adb shell ls -la <路径>列出文件详细信息(含权限、大小)
adb shell cp <源路径> <目标路径>在设备上复制文件
adb shell mv <源路径> <目标路径>在设备上移动或重命名文件
adb shell rm <文件路径>在设备上删除文件
adb shell mkdir -p <路径>在设备上创建目录(含中间目录)
adb shell chmod <权限> <路径>修改文件权限

逆向工程常用文件路径

路径说明
/data/data/<包名>/应用私有数据目录
/data/data/<包名>/shared_prefs/SharedPreferences(XML 配置文件)
/data/data/<包名>/databases/SQLite 数据库文件
/data/data/<包名>/cache/应用缓存目录
/data/data/<包名>/files/应用内部文件目录
/data/data/<包名>/lib/应用 Native 库(so 文件)
/data/app/<包名>*/APK 安装目录
/data/local/tmp/临时文件目录(所有用户可写)
/sdcard//storage/emulated/0/外部存储根目录
/sdcard/Android/data/<包名>/应用外部存储目录
/system/app/系统预装应用目录
/system/framework/系统框架 JAR 文件
/proc/<PID>/maps进程内存映射
/proc/<PID>/status进程状态信息

Shell 命令

dumpsys(系统服务信息)

命令描述
dumpsys activityActivity 管理器状态
dumpsys package <包名>应用详细信息(版本、权限、签名等)
dumpsys meminfo <包名>应用内存使用情况
dumpsys cpuinfoCPU 使用情况
dumpsys battery电池状态信息
dumpsys wifiWiFi 状态信息
dumpsys window displays屏幕显示信息
dumpsys netstats网络流量统计

settings(系统设置)

命令描述
settings list global列出所有 global 命名空间设置
settings list secure列出所有 secure 命名空间设置
settings get global http_proxy获取当前 HTTP 代理设置
settings put global http_proxy <IP>:<端口>设置全局 HTTP 代理
settings delete global http_proxy删除全局 HTTP 代理
settings get secure android_id获取 Android ID

input(输入模拟)

命令描述
input text '<文本>'输入文本(不支持中文)
input keyevent <按键码>发送按键事件
input tap <x> <y>模拟单击
input swipe <x1> <y1> <x2> <y2> [时长ms]模拟滑动
input keyevent --longpress <按键码>模拟长按

常用按键码

按键码说明按键码说明
3HOME4BACK
24音量+25音量-
26POWER82MENU
66ENTER67DEL (退格)
187APP_SWITCH224WAKEUP

截屏与录屏

命令描述
adb shell screencap /sdcard/screenshot.png截屏保存到设备
adb exec-out screencap -p > screenshot.png截屏直接输出到电脑
adb shell screenrecord /sdcard/demo.mp4录制屏幕视频(Ctrl+C 停止)
adb shell screenrecord --time-limit 10 /sdcard/demo.mp4录制 10 秒屏幕视频

日志与调试

Logcat 基础

命令描述
adb logcat实时打印设备日志
adb logcat -c清除旧的日志缓存
adb logcat -d输出当前日志到屏幕并退出
adb logcat -b <缓冲区>查看指定缓冲区(main/system/crash/events)
adb logcat -b all查看所有日志缓冲区
adb logcat -v threadtime显示日期、时间、PID、TID
adb logcat -f /sdcard/log.txt将日志输出到设备上的文件
adb logcat -t 100只输出最近 100 条日志

Logcat 过滤

命令描述
adb logcat *:E只显示 Error 及以上级别
adb logcat *:S <标签>:<优先级>按标签和优先级过滤
adb logcat -s <标签>只显示指定标签的日志
adb logcat --pid=<PID>只显示指定进程的日志

日志优先级(由低到高):V(Verbose) < D(Debug) < I(Info) < W(Warning) < E(Error) < F(Fatal) < S(Silent)

示例adb logcat *:S MyApp:D 只显示 MyApp 标签 Debug 及以上日志;adb logcat --pid=$(adb shell pidof com.example.app) 按进程过滤。

崩溃与 ANR 分析

命令描述
adb logcat -b crash查看崩溃日志缓冲区
adb logcat -b crash -d输出崩溃日志并退出
adb shell cat /data/anr/traces.txt查看 ANR traces(需要 root)
adb pull /data/anr/拉取所有 ANR trace 文件
adb bugreport <输出路径>生成完整 Bug 报告

调试相关

命令描述
adb jdwp列出可调试的 Java 进程 PID
adb forward tcp:<本地端口> jdwp:<PID>转发 JDWP 调试端口
adb shell ps -A列出所有进程
adb shell cat /proc/<PID>/maps查看进程内存映射
adb shell top -n 1查看 CPU/内存占用快照
adb shell strace -p <PID>跟踪进程系统调用(需要 root)

网络调试

端口转发

命令描述
adb forward tcp:<PC端口> tcp:<设备端口>PC 端口转发到设备端口
adb forward tcp:8080 localabstract:<socket名>转发到设备抽象 Unix socket
adb forward --list列出所有端口转发规则
adb forward --remove-all移除所有转发规则
adb reverse tcp:<设备端口> tcp:<PC端口>反向转发:设备端口 -> PC 端口
adb reverse --list列出所有反向转发规则
adb reverse --remove-all移除所有反向转发规则

正向转发 vs 反向转发

  • adb forward:PC 上访问某端口时,流量转发到设备。常用于连接设备上的调试服务。
  • adb reverse:设备上访问某端口时,流量转发到 PC。常用于让设备连接 PC 上的本地服务。

抓包代理设置(Burp Suite / Charles)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 设置全局 HTTP 代理
adb shell settings put global http_proxy <PC_IP>:8080

# 查看当前代理设置
adb shell settings get global http_proxy

# 删除全局代理
adb shell settings delete global http_proxy

# 删除代理后重启网络使其生效
adb shell svc wifi disable && adb shell svc wifi enable

完整抓包步骤

  1. PC 上启动 Burp Suite / Charles,监听 0.0.0.0:8080
  2. 设置设备代理:adb shell settings put global http_proxy <PC_IP>:8080
  3. 将 CA 证书推送到设备并安装(HTTPS 抓包需要)
  4. Android 7.0+ 需额外配置 network_security_config.xml 或 root 安装系统级证书
  5. 完成后清除代理:adb shell settings delete global http_proxy

网络状态

命令描述
adb shell ip addr查看 IP 地址信息
adb shell ip route查看路由表
adb shell netstat -tlnp查看监听的 TCP 端口
adb shell ping <地址>测试网络连通性
adb shell svc wifi enable/disable开启/关闭 WiFi
adb shell svc data enable/disable开启/关闭移动数据

逆向工程常用组合

提取 APK

1
2
3
4
5
6
7
# 通过 pm path 获取路径后 pull
adb shell pm path com.example.app
# 输出: package:/data/app/com.example.app-xxxx/base.apk
adb pull /data/app/com.example.app-xxxx/base.apk ./app.apk

# 一行命令提取
adb pull $(adb shell pm path com.example.app | sed 's/package://') ./app.apk

提取应用数据

1
2
3
4
5
6
7
8
9
# 需要 root 权限
adb pull /data/data/com.example.app/shared_prefs/ ./shared_prefs/
adb pull /data/data/com.example.app/databases/ ./databases/

# 无 root 时使用 run-as(仅限 debuggable 应用)
adb shell run-as com.example.app cat databases/app.db > app.db

# 使用 adb backup(部分应用可能禁止备份)
adb backup -f backup.ab -noapk com.example.app

设置可调试模式

1
2
3
4
adb shell am set-debug-app -w com.example.app       # 启动时等待调试器附加
adb shell su -c "resetprop ro.debuggable 1"          # 修改属性(需 root + Magisk)
adb shell su -c "stop; start"                        # 重启 zygote 使其生效
adb jdwp                                             # 列出所有可调试进程 PID

安装系统级 CA 证书(HTTPS 抓包)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 需要 root,适用于 Android 7.0+ 抓取 HTTPS 流量
openssl x509 -inform DER -in cacert.der -out cacert.pem
HASH=$(openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1)
cp cacert.pem ${HASH}.0

adb push ${HASH}.0 /sdcard/
adb shell su -c "mount -o rw,remount /system"
adb shell su -c "cp /sdcard/${HASH}.0 /system/etc/security/cacerts/"
adb shell su -c "chmod 644 /system/etc/security/cacerts/${HASH}.0"
adb shell su -c "mount -o ro,remount /system"
adb reboot

查看当前 Activity

1
2
3
adb shell dumpsys activity activities | grep mResumedActivity  # 当前前台 Activity
adb shell dumpsys activity top | head -30                      # Activity 完整信息
adb logcat -s ActivityManager:I | grep -E "START|LAUNCH"       # 实时监控启动

Root 环境命令

基本 Root 操作

命令描述
adb shell su在 adb shell 中获取 root 权限
adb shell su -c '<命令>'以 root 身份执行单条命令
adb shell id查看当前用户 UID/GID 信息

文件系统挂载

命令描述
mount -o rw,remount /system将 /system 重新挂载为可读写
mount -o ro,remount /system将 /system 恢复为只读
mount -o rw,remount /挂载根目录为可读写(Android 10+)
cat /proc/mounts查看所有已挂载的文件系统

注意:Android 10+ 使用动态分区和 system-as-root,/system 可能需要通过 Magisk overlay 方式修改。

SELinux 命令

命令描述
getenforce查看当前 SELinux 模式
setenforce 0设置为 Permissive(宽容模式)
setenforce 1设置为 Enforcing(强制模式)
dmesg | grep avc查看 SELinux 拒绝日志

逆向工程中的 SELinux

  • Frida 附加进程等注入操作在 Enforcing 模式下常会失败
  • 临时关闭:su -c "setenforce 0" 可解决大部分 SELinux 拦截问题
  • Magisk 通常自动处理 SELinux 策略,但某些操作可能仍需手动设置

Magisk / KernelSU 命令

命令描述
magisk -v查看 Magisk 版本
magisk --denylist ls列出 DenyList 中的应用
magisk --denylist add <包名>将应用添加到 DenyList
magisk --denylist rm <包名>将应用从 DenyList 移除
magiskpolicy --live "allow <规则>"动态添加 SELinux 策略
resetprop <属性名> <值>修改系统属性(包括只读属性)
resetprop --delete <属性名>删除系统属性
ksud --version查看 KernelSU 版本
ksud module list列出 KernelSU 已安装的模块

自动化脚本

批量提取第三方 APK

1
2
3
4
5
6
7
#!/bin/bash
mkdir -p ./extracted_apks
for pkg in $(adb shell pm list packages -3 | sed 's/package://'); do
    apk_path=$(adb shell pm path "$pkg" | sed 's/package://' | tr -d '\r')
    echo "[*] 提取: $pkg"
    adb pull "$apk_path" "./extracted_apks/${pkg}.apk" 2>/dev/null
done

清除应用数据并重启

1
2
3
4
5
6
#!/bin/bash
PKG=${1:?"用法: $0 <包名>"}
adb shell am force-stop "$PKG"
adb shell pm clear "$PKG"
LAUNCHER=$(adb shell cmd package resolve-activity --brief "$PKG" | tail -1 | tr -d '\r')
adb shell am start -n "$LAUNCHER"

Frida 注入一键启动

1
2
3
4
5
6
7
8
9
#!/bin/bash
PKG=${1:?"用法: $0 <包名> [脚本路径]"}
SCRIPT=${2:-""}
# 启动 frida-server(如果尚未运行)
if ! adb shell "su -c 'ps -A'" | grep -q frida-server; then
    adb shell "su -c '/data/local/tmp/frida-server -D &'" && sleep 2
fi
adb shell am force-stop "$PKG"
[ -n "$SCRIPT" ] && frida -U -f "$PKG" -l "$SCRIPT" --no-pause || frida -U -f "$PKG" --no-pause

常用单行命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 获取当前前台应用包名
adb shell dumpsys activity activities | grep mResumedActivity | awk '{print $4}' | cut -d'/' -f1

# 快速提取当前前台应用的 APK
pkg=$(adb shell dumpsys activity activities | grep mResumedActivity | awk '{print $4}' | cut -d'/' -f1)
adb pull $(adb shell pm path $pkg | sed 's/package://') ./${pkg}.apk

# 获取应用的 UID / 签名信息 / 权限
adb shell dumpsys package com.example.app | grep userId
adb shell dumpsys package com.example.app | grep -A 1 "Signatures"
adb shell dumpsys package com.example.app | grep -A 100 "requested permissions:" | grep "android.permission"

# 查看应用是否可调试
adb shell dumpsys package com.example.app | grep "flags=" | head -1

# 获取设备 WiFi IP 地址
adb shell ip addr show wlan0 | grep "inet " | awk '{print $2}' | cut -d'/' -f1

# 列出设备上所有监听的端口
adb shell su -c "ss -tlnp"

提示:本文中的 Shell 命令(如 am, pm, dumpsys 等)需要在 adb shell 环境中执行,也可以直接使用 adb shell <命令> 格式从电脑端调用。需要 root 权限的命令需要先执行 su 或使用 su -c '<命令>' 形式。

如果这篇文章对你有帮助,请我喝杯咖啡吧~
+5 支付宝支付宝
+5 微信微信