ADB介绍
1. ADB
adb全称(Android Debug Bridge),它是一个通用命令行工具,它可以做为Android与PC端连接的一个桥梁,所以adb又称为Android调试桥,是一个客户端-服务器端程序。ADB 可以直接操作管理手机模拟器或者真实的手机设备(如华为手机)。它的主要功能有:
- 运行设备的 shell(命令行)
- 管理模拟器或设备的端口映射
- 计算机和设备之间上传/下载文件
- 可以对设备的应用进行卸载安装等
- 在 App 遇到 ANR/Crash 等 bug 时,可以通过 ADB 来抓取日志
简而言之,ADB 就是连接 Android 手机与 PC 端的桥梁,用户可以通过adb在电脑上对Android设备进行全面操作。
3UK Penetration Test会检测adb是否为加密状态,一旦设备枚举出adb口后,是可以进行所有的adb操作,如安装和调试应用、操作文件的传输等,甚至可以通过adb去访问同一局域网内设备,这个很容易作为切入点破解侵入系统,对于系统安全存在极大风险。
1.1 运行架构
adb包含三个部分:
- adb client(客户端):client实际上就是shell控制台,通过Client发送命令给server。发送命令时,首先检测PC上有没有启动Server,如果没有Server,则自动启动一个Server,然后将命令发送到Server,并不关心命令发送过去以后会怎样。
- adb server(服务器):server是运行在主机上的一个后台进程,作用是检测USB端口何时连接或者移除设备,server还将adb client的请求通过USB或者TCP的发送发送到adbd上。
- adb demon(守护进程):运行在Android设备上的一个进程,作用是通过USB或者TCP连接到adb server,并且为运行在主机上的adb client提供一些服务。
当在电脑命令行窗口中输入adb 命令时,会先执行adb客户端,客户端拿到命令之后,会发送给adb服务端,server再将命令传给Daemon,最后在adb设备上执行。假如在adb设备上安装一个应用,会有一个返回信息,会将信息传递给adb服务器,adb 在给客户端,最后显示在命令行。
2 工作原理
首先用户启动一个adb客户端时,此客户端先检查是否存在已运行的adb服务器进程。如果没有,它将启动一个服务器进程,当服务器进程启动时,adb服务器就会绑定本地的TCP端口5037并监听adb客户端发来的命令,使用的adb客户端都使用端口5037与adb服务器进行对话的。接着服务器将所有运行中的模拟器或设备实例进行连接。它通过扫描所有5555到5585范围内的奇数端口来定位所有的模拟器或设备。一旦服务器找到了adb守护程序,将建立一个到该端口的连接。
客户端发送的命令分为三种:
- 不需要经过server处理就能成功的,如:adb version、adb help。
- 需要和server进行通讯,但不需要和demo通讯的命令,如:adb devices。
- 需要和demo进行处理的命令。
3 设备连接管理
3.1 查询已连接设备/模拟器
adb devices
输出状态:
- offline:表示设备未连接成功或无响应。
- device:设备已连接,
- no device:没有设备/模拟器连接
3.2 USB连接
- 保证android设备处于正常开机状态。
- android设备的开发者选项和USB调试模式已开启。
- 设备驱动状态正常。
- 通过USB连接好电脑和设备后使用adb devices确认状态
3.3 无线连接
- 将android设备与运行adb的电脑连接在同一个区域网。
- 让设备在5555端口监听TCP/IP连接:adb tcpip 5555
- 找到设备的IP地址
- 通过IP地址连接设备:adb connect ip:5555
- 确认连接状态
4 adb命令
4.1 adb服务命令
- 查看adb版本:adb version
- 以root权限运行adb服务:adb root
- 关闭adb服务:adb kill-server
- 开启adb服务:adb start-server
- 指定adb-server运行端口(默认端口5037):adb -P 端口 adb-server
4.2 应用管理命令
- 安装APK
adb install apk包名
常用参数:
参数 | 说明 |
---|---|
-r | 覆盖安装(保留数据) |
-d | 降级覆盖安装 |
-g | 赋予所有运行时权限 |
-l | 将应用安装到保护目录/mnt/asec |
-s | 将应用安装到sdcard目录 |
adb install安装原理过程:
- push apk文件到/data/local/tmp
- 调用pm install安装
- 删除/data/local/tmp下的对应apk
- 卸载apk
adb uninstall apk包名
常用参数:
参数 | 说明 |
---|---|
-k | 卸载应用时保留数据和缓存目录 |
4.3 文件管理命令
- 导出设备文件到电脑
adb pull <设备文件路径> [电脑存储路径] - 导入电脑文件到设备
adb push <电脑文件路径> [设备存储路径]
4.4 日志管理命令
Android系统的日志分为两部分:底层的Linux内核日志输出到/proc/kmsg, Android日志输出到/dev/log。Android的Log等级通常有六类,按照日志级别由低到高分别是:Verbose、Debug、Info、Warning、Error、Assert。
- 查看日志
adb logcat
常用参数:
参数 | 日志格式 | 说明 |
---|---|---|
-v | brief | 显示优先级/标记和过程的PID发出的消息(默认格式) |
-v | process | 只显示PID |
-v | tag | 只显示优先级/标记 |
-v | raw | 显示原始的日志消息,没有其他元数据字段 |
-v | time | 调用显示日期、时间、优先级/标签和过程的PID发出消息 |
-v | threadtime | 调用显示日期、时间、优先级、标签遗迹PID TID线程发出的消息 |
-v | long | 显示所有元数据字段与空白行和单独的消息 |
- 清空日志
adb logcat -c - 查看内核日志
adb shell dmesg - 收集日志数据,用于后续分析
adb bugreport
4.5 查看设备系统信息命令
- 查看android系统版本
adb shell getprop ro.build.version.release - 查看设备内存占用
adb shell dumpsys meminfo apk包 - 查看设备CPU
adb shell dumpsys cpuinfo - 查看gpu绘制分析
adb shell dumpsys gfxinfo apk包 - 查看设备进程
adb shell ps - 查看实时资源占用
adb shell top - 查看设备电池信息
adb shell dumpsys battery - 查看电源管理信息
adb shell dumpsys pwer - 获取屏幕锁屏数据:
adb shell dumpsys power | grep “mScreenOffTimeoutSetting”
adb shell dumpsys power | findstr “mScreenOffTimeoutSetting”(windows) - 查看设备型号
adb shell getprop ro.product.model - 查看屏幕分辨率
adb shell wm size
12. 查看屏幕密度
adb shell wm density - 查看显示屏参数
adb shell dumpsys window displays - 查看android版本
adb shell getprop ro.build.version.release - 查看android_id
adb shell settings get secure android_id - 获取android系统各个分区相关信息
adb shell df - 获取android系统当前状态相关信息
adb shell dumpystate - 获取设备序列号
adb get-serialno - 查看模拟器/设备当前状态
adb get-state - 查看系统通知
adb shell dumpsys notification - 查看无线网信息
adb shell dumpsys WiFi | more - 查看电话相关信息
adb shell dumpsys telephony.registry
相关内容含义:
名称 | 说明 |
---|---|
mCallState | 表示呼叫状态。0表示待机状态;1-表示来电未接听状态;2-表示电话占线。 |
mCallIncomingNumber | 表示最近一次来电的电话号码 |
mServiceState | 表示服务的状态;0-表示正常使用状态;1-表示电话没有连接到任何网络;2-表示电话只能拨打紧急呼叫号码;3-表示电话已关机。 |
mSignalStrength | 表示信号强度信息。 |
mMessageWaiting | 表示是否在等待无线电消息。 |
mCallForwarding | 表示是否启用呼叫转移。 |
mDataActivity | 表示无线数据通信情况。0-表示没有通话;1-表示正在接收IP PPP信号;2-表示正在发生IP PPP信号;3-表示正在发送和接收IP PPP信号。 |
mDataConnectionState | 表示无线数据连接情况;0-表示无数据连接;1-正在创建数据连接;2-表示已连接;3-表示挂起状态,已创建好连接,但是IP数据通信暂时无法使用。 |
mDataConnectionPossible | 表示是否有数据连接。 |
mDataConnectionReason | 表示数据连接的原因。 |
mDataConnectionLinkProperties | 表示数据连接的链路属性。 |
mDataConnectionNetworkCapabilities | 表示数据链路连接的能力。 |
mCellLocation | 表示基站相关信息。 |
- 获取手机运营商信息
adb shell getprop gsm.operator.alpha - 获取手机网络类型信息
adb shell getprop gsm.network.type - 自动化工具input命令
adb shell input <参数>
参数 | 说明 |
---|---|
tap x y | 点击屏幕 |
keyevent 3 | HOME键 |
keyevent 4 | 返回键 |
keyevent 5 | 打开拨号应用 |
keyevent 24 | 增加音量 |
keyevent 25 | 降低音量 |
keyevent 26 | 电源键 |
keyevent 27 | 拍照(需要在相机应用里) |
keyevent 64 | 打开浏览器 |
keyevent 82 | 菜单键 |
keyevent 85 | 播放/暂停键 |
keyevent 86 | 停止播放 |
keyevent 87 | 播放下一首 |
keyevent 88 | 播放上一首 |
keyevent 122 | 移动光标到行首或列表顶部 |
keyevent 123 | 移动光标到行末或列表底部 |
keyevent 126 | 恢复播放 |
keyevent 127 | 暂停播放 |
keyevent 164 | 静音 |
keyevent 176 | 打开系统设置 |
keyevent 187 | 切换应用 |
keyevent 207 | 打开联系人 |
keyevent 208 | 打开日历 |
keyevent 209 | 打开音乐 |
keyevent 210 | 打开计算器 |
keyevent 220 | 降低屏幕亮度 |
keyevent 221 | 提高屏幕亮度 |
keyevent 223 | 系统休眠 |
keyevent 224 | 点亮屏幕 |
keyevent 231 | 打开语音助手 |
text < content > | 输入文本 |