一、介绍

Android 调试桥(adb) 是一种功能多样的命令工具,它可以让你与设备进行通信adb 命令可用于执行各种设备操作(例如安装调试应用),并提供对 Unix shell(可用来设备运行各种命令)访问权限,它是一种 C/S 架构程序,包括以下三个组件

  1. 客户端 主要用于发送命令,adb client开发机器运行我们可以通过发出 adb 命令从命令行终端调用客户端,它主要的工作是解析push、shell、install 等命令的参数,做必要预处理然后转移为指令数据发送adb server
  2. 守护程序(adbd):运行Android设备(真机/模拟器) 后台的一个进程,它是由 init 进程启动的,并且系统一开机就已经启动,它的主要作用是处理来自 adb server 的命令行请求然后获取对应 Android设备信息,再将结果返回adb server
  3. 服务器:是运行开发机器上的一个后台进程,它有两个作用: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 socketremote socket,前者用于和 Client 通信,后者用与远端进行通信emulator(模拟器) 通过TCP,real device 则通过 usb服务器与所有设备均建立连接后,你便可以使用 adb 命令访问这些设备,由于服务器管理与设备的连接,并处理来自多个 adb 客户端的命令,因此你可以从任意客户端(或从某个脚本)控制任意设备。

举个例子:

  1. 我们通过 Android Studio 工具或者命令行界面直接或间接的调用某个 adb 命令,比如 adb install 或者 adb devices
  2. adb 进程会 fork 出一个子进程作为 adb server,而这个 fork 出的进程将常驻PC端,监听来自 Client 端的请求
  3. adb server查找当前连接的真机或者模拟器,并接收来自 Client 端发出的请求
  4. adb server处理请求:如果是本地能直接处理的请求比如:adb devices 就直接处理,如果是本地处理不了的请求就会转发连接的真机或者模拟器来进行处理,可以通过数据线和 TCP/IP方式通信
  5. 位于真机或者模拟器后台的 adbd 进程收到请求后,通过 JDWP 协议转发给对应的 Java 虚拟机进程处理
  6. adbd 将处理后的结果返回给 adb server
  7. adb server 再将结果返回给 Client,这时候我们就在命令行界面中看到展示结果

三、ADB 的配置

安装 AndroidStudio链接2023最新版Android逆向教程——第1天:Android Studio的安装与配置
安装完成 AndroidStudio 之后,找到 SDK 的目录,如下图所示:

D:develop_toolsAndroidSDKplatform-tools 路径配置环境变量中,我们即可使用 adb,如下图所示:

在控制台,输入 adb version,可以显示我们使用 adb 的版本及它的所处路径,如下图所示:
在这里插入图片描述

四、ADB 常见命令及选项

4.1 adb help/adb —help 查看帮助

在这里插入图片描述

4.2 adb version 显示 adb 版本及所在路径

在这里插入图片描述

4.3 adb devices 显示连接的设备列表

[-l] 列举所有设备,-l 表示长输出,包含设备名称信息。如下图所示:
在这里插入图片描述

4.4 adb push 文件路径 目标路径(以/开头) 推送电脑文件手机

在这里插入图片描述

4.5 adb pull 文件路径(手机) 本地路径(PC,可选) 拉取手机文件电脑

在这里插入图片描述

4.6 adb shell 进入手机的Linux控制台

在这里插入图片描述
adb -s 设备名 shell 多设备时,指定设备

4.7 adb install [-lrtsdg] <file&gt;(xxx.apk) 通过adb安装app

push this package file to the device and install it,参数说明如下:

  1. -l:直接锁定app
  2. -r:替换已存在的app,也就是说强制安装
  3. -t:允许安装测试
  4. -s:把app安装到sd卡上
  5. -d:允许降版本安装(只在针对调试版本app 有用)
  6. g:安装时获取所有权限(只有 6.0 系统可用)

在这里插入图片描述
安装成功之后,在手机查看,如下图所示:

adb uninstall 包名 通过adb卸载app,借助jadx工具查看App7的包名然后执行 adb uninstall 命令卸载App7,如下图所示:
在这里插入图片描述
卸载:
在这里插入图片描述
手机端再次查看App7发现不存在了,如下图所示:

adb uninstall -k <package_name&gt; 可选参数 -k 的作用为卸载软件但是保留配置缓存文件

4.8 adb startserver 确保启动 adb server

在这里插入图片描述

4.9 adb kill-server 停止 adb server

4.10 adb get-serialno 获取设备唯一序列号(如打卡app 通过该值判断是否重复打卡)

4.11 adb getstate 获取设备的状态

设备的状态有3种:device、offlineunknown,说明如下:

  1. device:设备正常连接
  2. offline:连接出现异常,设备无响应
  3. unknown:没有连接设备
    在这里插入图片描述

4.12 ADB 命令大全

https://blog.csdn.net/weixin_43847093/article/details/84673414

至此今天的学习就到此结束了,笔者在这里声明,笔者写文章只是为了学习交流,以及让更多学习安卓逆向的读者少走一些弯路,节省时间,并不用做其他用途,如有侵权,联系博主删除即可。感谢您阅读本篇博文,希望本文成为编程路上的领航者。祝您阅读愉快!


在这里插入图片描述

    好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
    如果我的博客对你有帮助、如果你喜欢我的博客内容,请 点赞评论收藏 一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看
编码不易,大家的支持就是我坚持下去的动力。点赞后不要忘了 关注 我哦!

原文地址:https://blog.csdn.net/xw1680/article/details/133853222

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_5067.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注