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连接

  1. 保证android设备处于正常开机状态。
  2. android设备的开发者选项和USB调试模式已开启。
  3. 设备驱动状态正常。
  4. 通过USB连接好电脑和设备后使用adb devices确认状态

3.3 无线连接

  1. 将android设备与运行adb的电脑连接在同一个区域网。
  2. 让设备在5555端口监听TCP/IP连接:adb tcpip 5555
  3. 找到设备的IP地址
  4. 通过IP地址连接设备:adb connect ip:5555
  5. 确认连接状态

4 adb命令

4.1 adb服务命令

  1. 查看adb版本:adb version
  2. 以root权限运行adb服务:adb root
  3. 关闭adb服务:adb kill-server
  4. 开启adb服务:adb start-server
  5. 指定adb-server运行端口(默认端口5037):adb -P 端口 adb-server

4.2 应用管理命令

  1. 安装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
  1. 卸载apk
    adb uninstall apk包名
    常用参数:
参数说明
-k卸载应用时保留数据和缓存目录

4.3 文件管理命令

  1. 导出设备文件到电脑
    adb pull <设备文件路径> [电脑存储路径]
  2. 导入电脑文件到设备
    adb push <电脑文件路径> [设备存储路径]

4.4 日志管理命令

Android系统的日志分为两部分:底层的Linux内核日志输出到/proc/kmsg, Android日志输出到/dev/log。Android的Log等级通常有六类,按照日志级别由低到高分别是:Verbose、Debug、Info、Warning、Error、Assert。

  1. 查看日志
    adb logcat
    常用参数:
参数日志格式说明
-vbrief显示优先级/标记和过程的PID发出的消息(默认格式)
-vprocess只显示PID
-vtag只显示优先级/标记
-vraw显示原始的日志消息,没有其他元数据字段
-vtime调用显示日期、时间、优先级/标签和过程的PID发出消息
-vthreadtime调用显示日期、时间、优先级、标签遗迹PID TID线程发出的消息
-vlong显示所有元数据字段与空白行和单独的消息
  1. 清空日志
    adb logcat -c
  2. 查看内核日志
    adb shell dmesg
  3. 收集日志数据,用于后续分析
    adb bugreport

4.5 查看设备系统信息命令

  1. 查看android系统版本
    adb shell getprop ro.build.version.release
  2. 查看设备内存占用
    adb shell dumpsys meminfo apk包
  3. 查看设备CPU
    adb shell dumpsys cpuinfo
  4. 查看gpu绘制分析
    adb shell dumpsys gfxinfo apk包
  5. 查看设备进程
    adb shell ps
  6. 查看实时资源占用
    adb shell top
  7. 查看设备电池信息
    adb shell dumpsys battery
  8. 查看电源管理信息
    adb shell dumpsys pwer
  9. 获取屏幕锁屏数据:
    adb shell dumpsys power | grep “mScreenOffTimeoutSetting”
    adb shell dumpsys power | findstr “mScreenOffTimeoutSetting”(windows)
  10. 查看设备型号
    adb shell getprop ro.product.model
  11. 查看屏幕分辨率
    adb shell wm size
    12. 查看屏幕密度
    adb shell wm density
  12. 查看显示屏参数
    adb shell dumpsys window displays
  13. 查看android版本
    adb shell getprop ro.build.version.release
  14. 查看android_id
    adb shell settings get secure android_id
  15. 获取android系统各个分区相关信息
    adb shell df
  16. 获取android系统当前状态相关信息
    adb shell dumpystate
  17. 获取设备序列号
    adb get-serialno
  18. 查看模拟器/设备当前状态
    adb get-state
  19. 查看系统通知
    adb shell dumpsys notification
  20. 查看无线网信息
    adb shell dumpsys WiFi | more
  21. 查看电话相关信息
    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表示基站相关信息。
  1. 获取手机运营商信息
    adb shell getprop gsm.operator.alpha
  2. 获取手机网络类型信息
    adb shell getprop gsm.network.type
  3. 自动化工具input命令
    adb shell input <参数>
参数说明
tap x y点击屏幕
keyevent 3HOME键
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 >输入文本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四儿家的小祖宗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值