一枚酸心果子

果子果子果子果子果子~~~

ADB命令实战指南:Android调试桥的实用技巧

ADB简介

什么是ADB

ADB(Android Debug Bridge)是Android SDK提供的一个命令行工具,主要功能:

  • 连接Android设备
  • 执行Shell命令
  • 文件传输
  • 应用管理
  • 调试支持

核心优势

  • 功能全面:涵盖设备管理、文件操作、应用调试等
  • 跨平台:支持Windows、macOS、Linux
  • 简单易用:命令行操作,学习成本低
  • 社区支持:文档完善,问题容易解决

ADB安装配置

1. 安装ADB

1
2
3
4
5
6
7
8
9
10
# Windows - 下载Android SDK Platform Tools
# 从 https://developer.android.com/studio/releases/platform-tools 下载

# macOS - 使用Homebrew
brew install android-platform-tools

# Linux - 使用包管理器
sudo apt-get install android-tools-adb
# 或
sudo yum install android-tools

2. 环境配置

1
2
3
4
5
# 添加到环境变量
export PATH=$PATH:/path/to/platform-tools

# 验证安装
adb version

3. 设备连接

1
2
3
4
5
6
7
8
# 查看连接的设备
adb devices

# 连接USB设备
adb connect 192.168.1.100:5555

# 断开设备
adb disconnect 192.168.1.100:5555

设备管理场景

场景1:设备状态检查

实际需求:检查Android设备连接状态和基本信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1. 查看所有连接的设备
adb devices
# 输出示例:
# List of devices attached
# emulator-5554 device
# 192.168.1.100:5555 device

# 2. 查看设备详细信息
adb -s emulator-5554 shell getprop ro.build.version.release
# 输出:11

# 3. 查看设备型号
adb shell getprop ro.product.model
# 输出:Pixel 4

# 4. 查看设备序列号
adb shell getprop ro.serialno
# 输出:HT7A1A123456

# 5. 查看设备状态
adb get-state
# 输出:device

场景2:设备重启和恢复

实际需求:设备出现问题时需要重启或恢复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1. 重启设备
adb reboot

# 2. 重启到Recovery模式
adb reboot recovery

# 3. 重启到Bootloader模式
adb reboot bootloader

# 4. 重启到Fastboot模式
adb reboot fastboot

# 5. 强制重启(设备无响应时)
adb kill-server
adb start-server

文件操作场景

场景3:文件传输

实际需求:在PC和Android设备之间传输文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 从PC推送到设备
adb push local_file.txt /sdcard/remote_file.txt

# 2. 从设备拉取到PC
adb pull /sdcard/remote_file.txt local_file.txt

# 3. 推送整个目录
adb push local_folder/ /sdcard/remote_folder/

# 4. 拉取整个目录
adb pull /sdcard/remote_folder/ local_folder/

# 5. 查看设备存储空间
adb shell df -h
# 输出示例:
# Filesystem Size Used Avail Use% Mounted on
# /dev/block/sda1 32G 15G 17G 47% /

场景4:文件管理

实际需求:管理Android设备上的文件和目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 列出目录内容
adb shell ls -la /sdcard/

# 2. 创建目录
adb shell mkdir /sdcard/new_folder

# 3. 删除文件
adb shell rm /sdcard/unwanted_file.txt

# 4. 删除目录
adb shell rm -rf /sdcard/unwanted_folder/

# 5. 复制文件
adb shell cp /sdcard/source.txt /sdcard/destination.txt

# 6. 移动文件
adb shell mv /sdcard/old_name.txt /sdcard/new_name.txt

# 7. 查看文件内容
adb shell cat /sdcard/config.txt

# 8. 搜索文件
adb shell find /sdcard -name "*.apk" -type f

应用管理场景

场景5:应用安装和卸载

实际需求:安装、卸载和管理Android应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 安装APK文件
adb install app.apk

# 2. 强制安装(覆盖现有应用)
adb install -r app.apk

# 3. 安装到指定位置
adb install -s app.apk

# 4. 卸载应用
adb uninstall com.example.app

# 5. 卸载应用并保留数据
adb uninstall -k com.example.app

# 6. 查看已安装的应用
adb shell pm list packages

# 7. 查看特定应用
adb shell pm list packages | grep example

# 8. 查看应用详细信息
adb shell dumpsys package com.example.app

场景6:应用调试

实际需求:调试Android应用,查看日志和状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 查看所有日志
adb logcat

# 2. 查看特定应用的日志
adb logcat | grep com.example.app

# 3. 查看错误日志
adb logcat *:E

# 4. 清除日志
adb logcat -c

# 5. 启动应用
adb shell am start -n com.example.app/.MainActivity

# 6. 停止应用
adb shell am force-stop com.example.app

# 7. 查看应用进程
adb shell ps | grep com.example.app

# 8. 查看应用内存使用
adb shell dumpsys meminfo com.example.app

系统调试场景

场景7:系统信息获取

实际需求:获取Android系统的详细信息和状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 1. 查看系统版本
adb shell getprop ro.build.version.release

# 2. 查看API级别
adb shell getprop ro.build.version.sdk

# 3. 查看设备信息
adb shell getprop ro.product.model
adb shell getprop ro.product.brand
adb shell getprop ro.product.manufacturer

# 3. 查看系统属性
adb shell getprop | grep ro.build

# 4. 查看网络信息
adb shell ifconfig

# 5. 查看进程信息
adb shell ps

# 6. 查看内存使用
adb shell cat /proc/meminfo

# 7. 查看CPU信息
adb shell cat /proc/cpuinfo

# 8. 查看存储信息
adb shell df -h

场景8:权限和Root操作

实际需求:获取Root权限并执行系统级操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1. 获取Root权限
adb shell su

# 2. 以Root身份执行命令
adb shell su -c "ls /data"

# 3. 修改文件权限
adb shell su -c "chmod 777 /data/local/tmp/file.txt"

# 4. 修改文件所有者
adb shell su -c "chown root:root /data/local/tmp/file.txt"

# 5. 挂载文件系统为可写
adb shell su -c "mount -o remount,rw /system"

# 6. 查看Root相关文件
adb shell su -c "ls -la /system/bin/su"
adb shell su -c "ls -la /system/xbin/su"

# 7. 检查Root状态
adb shell su -c "id"
# 输出:uid=0(root) gid=0(root) groups=0(root)

网络调试场景

场景9:网络配置和监控

实际需求:配置网络设置和监控网络流量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1. 查看网络接口
adb shell ifconfig

# 2. 查看路由表
adb shell ip route

# 3. 测试网络连接
adb shell ping 8.8.8.8

# 4. 查看网络统计
adb shell cat /proc/net/dev

# 5. 查看网络连接
adb shell netstat -an

# 6. 查看DNS设置
adb shell getprop net.dns1
adb shell getprop net.dns2

# 7. 设置代理
adb shell settings put global http_proxy 192.168.1.100:8080

# 8. 清除代理
adb shell settings delete global http_proxy

场景10:端口转发和代理

实际需求:设置端口转发和代理服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 端口转发
adb forward tcp:8080 tcp:8080

# 2. 查看端口转发
adb forward --list

# 3. 删除端口转发
adb forward --remove tcp:8080

# 4. 反向端口转发
adb reverse tcp:8080 tcp:8080

# 5. 查看反向端口转发
adb reverse --list

# 6. 删除反向端口转发
adb reverse --remove tcp:8080

# 7. 通过ADB连接设备
adb connect 192.168.1.100:5555

# 8. 断开ADB连接
adb disconnect 192.168.1.100:5555

安全测试场景

场景11:应用安全测试

实际需求:进行Android应用的安全测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1. 导出APK文件
adb shell pm path com.example.app
adb pull /data/app/com.example.app/base.apk

# 2. 查看应用权限
adb shell dumpsys package com.example.app | grep permission

# 3. 查看应用组件
adb shell dumpsys package com.example.app | grep -E "Activity|Service|Receiver"

# 4. 查看应用数据目录
adb shell ls -la /data/data/com.example.app/

# 5. 备份应用数据
adb backup -f backup.ab com.example.app

# 6. 恢复应用数据
adb restore backup.ab

# 7. 查看应用日志
adb logcat | grep -E "Security|Permission|Exception"

# 8. 监控网络流量
adb shell tcpdump -i any -w /sdcard/capture.pcap

场景12:系统安全检测

实际需求:检测Android系统的安全状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 1. 检查Root状态
adb shell su -c "id"
adb shell ls -la /system/bin/su
adb shell ls -la /system/xbin/su

# 2. 检查调试状态
adb shell getprop ro.debuggable
adb shell getprop ro.secure

# 3. 检查SELinux状态
adb shell getenforce
adb shell getprop ro.build.selinux

# 4. 检查系统完整性
adb shell su -c "ls -la /system/bin/ | grep su"
adb shell su -c "ls -la /system/xbin/ | grep su"

# 5. 检查应用签名
adb shell dumpsys package com.example.app | grep signatures

# 6. 检查系统更新
adb shell getprop ro.build.version.security_patch

# 7. 检查加密状态
adb shell getprop ro.crypto.state
adb shell getprop ro.crypto.type

# 8. 检查安全补丁
adb shell getprop ro.build.version.security_patch

高级技巧

场景13:批量操作

实际需求:对多个设备或应用进行批量操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1. 批量安装应用
for device in $(adb devices | grep device | cut -f1); do
adb -s $device install app.apk
done

# 2. 批量获取设备信息
for device in $(adb devices | grep device | cut -f1); do
echo "设备: $device"
adb -s $device shell getprop ro.product.model
done

# 3. 批量清理日志
for device in $(adb devices | grep device | cut -f1); do
adb -s $device logcat -c
done

# 4. 批量重启设备
for device in $(adb devices | grep device | cut -f1); do
adb -s $device reboot
done

场景14:自动化脚本

实际需求:创建自动化脚本来执行重复性任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash
# 自动化测试脚本

# 1. 检查设备连接
if [ $(adb devices | grep -c device) -eq 0 ]; then
echo "没有连接的设备"
exit 1
fi

# 2. 安装测试应用
echo "安装测试应用..."
adb install -r test_app.apk

# 3. 启动应用
echo "启动应用..."
adb shell am start -n com.test.app/.MainActivity

# 4. 等待应用启动
sleep 5

# 5. 执行测试
echo "执行测试..."
adb shell input tap 500 500
adb shell input text "test123"
adb shell input keyevent 66

# 6. 收集日志
echo "收集日志..."
adb logcat -d > test_log.txt

# 7. 清理
echo "清理..."
adb shell am force-stop com.test.app
adb uninstall com.test.app

常用脚本

1. 设备信息收集脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
# 设备信息收集脚本

echo "=== 设备信息收集 ==="

# 设备基本信息
echo "设备型号: $(adb shell getprop ro.product.model)"
echo "Android版本: $(adb shell getprop ro.build.version.release)"
echo "API级别: $(adb shell getprop ro.build.version.sdk)"
echo "设备品牌: $(adb shell getprop ro.product.brand)"
echo "制造商: $(adb shell getprop ro.product.manufacturer)"

# 系统信息
echo "Root状态: $(adb shell su -c 'id' 2>/dev/null && echo '已Root' || echo '未Root')"
echo "调试状态: $(adb shell getprop ro.debuggable)"
echo "SELinux状态: $(adb shell getenforce)"

# 存储信息
echo "存储信息:"
adb shell df -h

# 网络信息
echo "网络接口:"
adb shell ifconfig

# 进程信息
echo "运行进程数: $(adb shell ps | wc -l)"

2. 应用分析脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
# 应用分析脚本

APP_PACKAGE=$1

if [ -z "$APP_PACKAGE" ]; then
echo "用法: $0 <应用包名>"
exit 1
fi

echo "=== 分析应用: $APP_PACKAGE ==="

# 应用基本信息
echo "应用版本: $(adb shell dumpsys package $APP_PACKAGE | grep versionName)"
echo "应用权限:"
adb shell dumpsys package $APP_PACKAGE | grep permission

# 应用组件
echo "应用组件:"
adb shell dumpsys package $APP_PACKAGE | grep -E "Activity|Service|Receiver"

# 应用数据
echo "应用数据目录:"
adb shell ls -la /data/data/$APP_PACKAGE/

# 应用日志
echo "应用日志:"
adb logcat | grep $APP_PACKAGE

结语

ADB在实际应用中可以说是移动安全测试的”万能钥匙”,它的作用远不止简单的设备连接这么简单。

在移动安全测试中,ADB主要承担着设备管理、应用分析、文件操作、系统调试、网络分析和安全检测等六大核心功能。它能够快速检查设备状态、安装卸载应用、传输敏感文件、获取Root权限、配置网络设置,以及检查系统安全状态,为安全研究员提供了与Android设备交互的完整解决方案。

在实际工作场景中,ADB广泛应用于渗透测试、逆向分析、漏洞挖掘、应急响应和自动化测试等领域。无论是快速部署测试环境、提取分析APK文件、监控应用行为、进行安全评估,还是编写自动化脚本,ADB都是不可或缺的基础工具,让安全研究员能够高效地完成各种移动安全测试任务。

核心价值
ADB最大的价值在于它提供了与Android设备交互的标准化接口,让安全研究员能够像操作本地系统一样操作Android设备。无论是设备管理、应用分析还是安全测试,ADB都是不可或缺的基础工具。它虽然不是最炫酷的工具,但确实是最实用、最可靠的选择。

持续输出技术分享,您的支持将鼓励我继续创作!