100天精通Andriod逆向——第1天:ADB原理及其常用命令
Posted Amo Xiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了100天精通Andriod逆向——第1天:ADB原理及其常用命令相关的知识,希望对你有一定的参考价值。
目录
- 一、介绍
- 二、工作原理
- 二、ADB 的配置
- 三、ADB 常见命令及选项
- 3.1 adb help/adb --help 查看帮助
- 3.2 adb version 显示 adb 版本及所在路径
- 3.3 adb devices 显示连接的设备列表
- 3.4 adb push 文件路径 目标路径(以/开头) 推送电脑的文件到手机
- 3.5 adb pull 文件路径(手机) 本地路径(PC,可选) 拉取手机的文件到电脑
- 3.5 adb shell 进入到手机的Linux控制台
- 3.6 adb install [-lrtsdg] `(xxx.apk)` 通过adb安装app
- 3.7 adb start-server 确保启动 adb server
- 3.8 adb kill-server 停止 adb server
- 3.9 adb get-serialno 获取设备唯一序列号(如打卡app 通过该值判断是否重复打卡)
- 3.10 adb get-state 获取设备的状态
一、介绍
Android 调试桥(adb) 是一种功能多样的命令行工具,它可以让你与设备进行通信,adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令) 的访问权限,它是一种 C/S 架构 的程序,包括以下三个组件:
- 客户端: 主要用于发送命令,adb client 在开发机器上运行,我们可以通过发出 adb 命令从命令行终端调用客户端,它主要的工作是解析像 push、shell、install 等命令的参数,做必要预处理,然后转移为指令或数据,发送给 adb server。
- 守护程序(adbd): 是运行在 Android设备(真机/模拟器) 后台的一个进程,它是由 init 进程启动的,并且系统一开机就已经启动,它的主要作用是处理来自 adb server 的命令行请求,然后获取对应 Android设备的信息,再将结果返回给 adb server。
- 服务器:是运行在开发机器上的一个后台进程,它有两个作用:1、检测 USB 端口感知设备的连接和拔除,以及模拟器实例的启动或停止;2、将 adb client 的请求 通过 usb 或者 tcp 的方式发送到对应的 adbd 上。
二、工作原理
当我们启动某个 ADB客户端 时,客户端会先检查是否有 ADB服务器 进程正在运行。如果没有,它将启动服务器进程。服务器在启动后会与 本地TCP 端口 5037 绑定,并监听 ADB客户端 发出的命令,所有 ADB 客户端均通过端口 5037 与 ADB服务器 通信。然后,服务器会与所有正在运行的设备建立连接。它通过扫描 5555到5585之间 (该范围供前16个模拟器使用) 的奇数号端口查找模拟器。服务器一旦发现 ADB守护进程 (adbd),便会与相应的端口建立连接。
所有的 Client 通过 TCP 端口号5037 进行与 Server 通信,而 Server 创建 local socket 与 remote socket,前者用于和 Client 通信,后者用与远端进行通信,emulator(模拟器) 通过TCP,real device 则通过 usb。服务器与所有设备均建立连接后,你便可以使用 adb 命令访问这些设备,由于服务器管理与设备的连接,并处理来自多个 adb 客户端的命令,因此你可以从任意客户端(或从某个脚本)控制任意设备。
举个例子:
- 我们通过 android Studio 工具或者命令行界面直接或间接的调用某个 adb 命令,比如 adb install 或者 adb devices
- adb 进程会 fork 出一个子进程作为 adb server,而这个 fork 出的进程将常驻PC端,监听来自 Client 端的请求
- adb server查找当前连接的真机或者模拟器,并接收来自 Client 端发出的请求
- adb server处理请求:如果是本地能直接处理的请求比如:adb devices 就直接处理,如果是本地处理不了的请求就会转发给连接的真机或者模拟器来进行处理,可以通过数据线和 TCP/IP 的方式通信
- 位于真机或者模拟器后台的 adbd 进程接收到请求后,通过 JDWP 协议转发给对应的 Java 虚拟机进程处理
- adbd 将处理后的结果返回给 adb server
- adb server 再将结果返回给 Client,这时候我们就在命令行界面中看到展示结果了
二、ADB 的配置
安装 AndroidStudio,链接:2022年全网最细 AndroidStudio 安装配置学习笔记
安装完成 AndroidStudio 之后,找到 SDK 的目录,如下图所示:
将 C:\\Users\\13493\\AppData\\Local\\Android\\Sdk\\platform-tools
路径配置到环境变量中,我们即可使用 adb,如下图所示:
在控制台,输入 adb version,可以显示我们使用 adb 的版本及它的所处路径,如下图所示:
三、ADB 常见命令及选项
3.1 adb help/adb --help 查看帮助
3.2 adb version 显示 adb 版本及所在路径
3.3 adb devices 显示连接的设备列表
[-l] 列举所有设备,-l 表示长输出,包含设备名称等信息。如下图所示:
3.4 adb push 文件路径 目标路径(以/开头) 推送电脑的文件到手机
3.5 adb pull 文件路径(手机) 本地路径(PC,可选) 拉取手机的文件到电脑
3.5 adb shell 进入到手机的Linux控制台
adb -s 设备名 shell 多设备时,指定设备
3.6 adb install [-lrtsdg] <file>(xxx.apk)
通过adb安装app
push this package file to the device and install it,参数说明如下:
- -l:直接锁定app
- -r:替换已存在的app,也就是说强制安装
- -t:允许安装测试包
- -s:把app安装到sd卡上
- -d:允许降版本安装(只在针对调试版本的 app 有用)
- -g:安装时获取所有权限(只有 6.0 系统可用)
安装成功之后,在手机端查看,如下图所示:
adb uninstall 包名 通过adb卸载app,借助jadx工具查看App5的包名,然后执行 adb uninstall 命令卸载App5,如下图所示:
手机端再次查看App5发现不存在了,如下图所示:
adb uninstall -k <package_name>
可选参数 -k 的作用为卸载软件但是保留配置和缓存文件
3.7 adb start-server 确保启动 adb server
3.8 adb kill-server 停止 adb server
3.9 adb get-serialno 获取设备唯一序列号(如打卡app 通过该值判断是否重复打卡)
3.10 adb get-state 获取设备的状态
设备的状态有3种:device、offline、unknown,说明如下:
- device:设备正常连接
- offline:连接出现异常,设备无响应
- unknown:没有连接设备
以上是关于100天精通Andriod逆向——第1天:ADB原理及其常用命令的主要内容,如果未能解决你的问题,请参考以下文章
100天精通Andriod逆向——第6天:Andriod 开发入门
100天精通Andriod逆向——第6天:Andriod 开发入门
100天精通Andriod逆向——第5天:app逆向流程简介