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
|
brew install android-platform-tools
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
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
| adb devices
adb -s emulator-5554 shell getprop ro.build.version.release
adb shell getprop ro.product.model
adb shell getprop ro.serialno
adb get-state
|
场景2:设备重启和恢复
实际需求:设备出现问题时需要重启或恢复
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| adb reboot
adb reboot recovery
adb reboot bootloader
adb reboot fastboot
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
| adb push local_file.txt /sdcard/remote_file.txt
adb pull /sdcard/remote_file.txt local_file.txt
adb push local_folder/ /sdcard/remote_folder/
adb pull /sdcard/remote_folder/ local_folder/
adb shell df -h
|
场景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
| adb shell ls -la /sdcard/
adb shell mkdir /sdcard/new_folder
adb shell rm /sdcard/unwanted_file.txt
adb shell rm -rf /sdcard/unwanted_folder/
adb shell cp /sdcard/source.txt /sdcard/destination.txt
adb shell mv /sdcard/old_name.txt /sdcard/new_name.txt
adb shell cat /sdcard/config.txt
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
| adb install app.apk
adb install -r app.apk
adb install -s app.apk
adb uninstall com.example.app
adb uninstall -k com.example.app
adb shell pm list packages
adb shell pm list packages | grep example
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
| adb logcat
adb logcat | grep com.example.app
adb logcat *:E
adb logcat -c
adb shell am start -n com.example.app/.MainActivity
adb shell am force-stop com.example.app
adb shell ps | grep com.example.app
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
| adb shell getprop ro.build.version.release
adb shell getprop ro.build.version.sdk
adb shell getprop ro.product.model adb shell getprop ro.product.brand adb shell getprop ro.product.manufacturer
adb shell getprop | grep ro.build
adb shell ifconfig
adb shell ps
adb shell cat /proc/meminfo
adb shell cat /proc/cpuinfo
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
| adb shell su
adb shell su -c "ls /data"
adb shell su -c "chmod 777 /data/local/tmp/file.txt"
adb shell su -c "chown root:root /data/local/tmp/file.txt"
adb shell su -c "mount -o remount,rw /system"
adb shell su -c "ls -la /system/bin/su" adb shell su -c "ls -la /system/xbin/su"
adb shell su -c "id"
|
网络调试场景
场景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
| adb shell ifconfig
adb shell ip route
adb shell ping 8.8.8.8
adb shell cat /proc/net/dev
adb shell netstat -an
adb shell getprop net.dns1 adb shell getprop net.dns2
adb shell settings put global http_proxy 192.168.1.100:8080
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
| adb forward tcp:8080 tcp:8080
adb forward --list
adb forward --remove tcp:8080
adb reverse tcp:8080 tcp:8080
adb reverse --list
adb reverse --remove tcp:8080
adb connect 192.168.1.100:5555
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
| adb shell pm path com.example.app adb pull /data/app/com.example.app/base.apk
adb shell dumpsys package com.example.app | grep permission
adb shell dumpsys package com.example.app | grep -E "Activity|Service|Receiver"
adb shell ls -la /data/data/com.example.app/
adb backup -f backup.ab com.example.app
adb restore backup.ab
adb logcat | grep -E "Security|Permission|Exception"
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
| adb shell su -c "id" adb shell ls -la /system/bin/su adb shell ls -la /system/xbin/su
adb shell getprop ro.debuggable adb shell getprop ro.secure
adb shell getenforce adb shell getprop ro.build.selinux
adb shell su -c "ls -la /system/bin/ | grep su" adb shell su -c "ls -la /system/xbin/ | grep su"
adb shell dumpsys package com.example.app | grep signatures
adb shell getprop ro.build.version.security_patch
adb shell getprop ro.crypto.state adb shell getprop ro.crypto.type
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
| for device in $(adb devices | grep device | cut -f1); do adb -s $device install app.apk done
for device in $(adb devices | grep device | cut -f1); do echo "设备: $device" adb -s $device shell getprop ro.product.model done
for device in $(adb devices | grep device | cut -f1); do adb -s $device logcat -c done
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
if [ $(adb devices | grep -c device) -eq 0 ]; then echo "没有连接的设备" exit 1 fi
echo "安装测试应用..." adb install -r test_app.apk
echo "启动应用..." adb shell am start -n com.test.app/.MainActivity
sleep 5
echo "执行测试..." adb shell input tap 500 500 adb shell input text "test123" adb shell input keyevent 66
echo "收集日志..." adb logcat -d > test_log.txt
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都是不可或缺的基础工具。它虽然不是最炫酷的工具,但确实是最实用、最可靠的选择。