289 lines
7.8 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

**Adb 通常位于:**
```bash
#Windows
C:\Users\<username>\AppData\Local\Android\sdk\platform-tools\adb.exe
#MacOS
/Users/<username>/Library/Android/sdk/platform-tools/adb
```
**信息来源:** [**http://adbshell.com/**](http://adbshell.com)
# 连接
```
adb devices
```
这将列出连接的设备如果出现“_**未授权**_”这意味着您必须**解锁**您的**手机**并**接受**连接。
这向设备指示它必须在端口 5555 启动 adb 服务器:
```
adb tcpip 5555
```
连接到该IP和端口
```
adb connect <IP>:<PORT>
```
如果您在虚拟 Android 软件(如 Genymotion中遇到以下错误
```
adb server version (41) doesn't match this client (36); killing...
```
因为您尝试连接到不同版本的 ADB 服务器。只需尝试找到软件正在使用的 adb 二进制文件(前往 `C:\Program Files\Genymobile\Genymotion` 并搜索 adb.exe
## 多个设备
每当您发现 **多个设备连接到您的机器** 时,您需要 **指定要在哪个设备上** 运行 adb 命令。
```bash
adb devices
List of devices attached
10.10.10.247:42135 offline
127.0.0.1:5555 device
```
```bash
adb -s 127.0.0.1:5555 shell
x86_64:/ # whoami
root
```
## 端口隧道
如果 **adb** **端口** 仅在安卓设备的 **localhost****可访问**,但 **您可以通过 SSH 访问**,您可以 **转发端口 5555** 并通过 adb 连接:
```bash
ssh -i ssh_key username@10.10.10.10 -L 5555:127.0.0.1:5555 -p 2222
adb connect 127.0.0.1:5555
```
# 包管理器
## 安装/卸载
### adb install \[option] \<path>
```bash
adb install test.apk
adb install -l test.apk # forward lock application
adb install -r test.apk # replace existing application
adb install -t test.apk # allow test packages
adb install -s test.apk # install application on sdcard
adb install -d test.apk # allow version code downgrade
adb install -p test.apk # partial application install
```
### adb uninstall \[options] \<PACKAGE>
```bash
adb uninstall com.test.app
adb uninstall -k com.test.app Keep the data and cache directories around after package removal.
```
## 包
打印所有包,选项上只打印那些包名包含\<FILTER>文本的包。
### adb shell pm list packages \[options] \<FILTER-STR>
```bash
adb shell pm list packages <FILTER-STR>
adb shell pm list packages -f <FILTER-STR> #See their associated file.
adb shell pm list packages -d <FILTER-STR> #Filter to only show disabled packages.
adb shell pm list packages -e <FILTER-STR> #Filter to only show enabled packages.
adb shell pm list packages -s <FILTER-STR> #Filter to only show system packages.
adb shell pm list packages -3 <FILTER-STR> #Filter to only show third party packages.
adb shell pm list packages -i <FILTER-STR> #See the installer for the packages.
adb shell pm list packages -u <FILTER-STR> #Also include uninstalled packages.
adb shell pm list packages --user <USER_ID> <FILTER-STR> #The user space to query.
```
### adb shell pm path \<PACKAGE>
打印给定的 APK 的路径。
```bash
adb shell pm path com.android.phone
```
### adb shell pm clear \<PACKAGE>
删除与包相关的所有数据。
```bash
adb shell pm clear com.test.abc
```
# 文件管理器
### adb pull \<remote> \[local]
从模拟器/设备下载指定文件到你的计算机。
```bash
adb pull /sdcard/demo.mp4 ./
```
### adb push \<local> \<remote>
将指定文件从您的计算机上传到模拟器/设备。
```bash
adb push test.apk /sdcard
```
# 屏幕捕获/屏幕录制
### adb shell screencap \<filename>
拍摄设备显示的屏幕截图。
```bash
adb shell screencap /sdcard/screen.png
```
### adb shell screenrecord \[options] \<filename>
录制运行 Android 4.4 (API 级别 19) 及更高版本的设备显示。
```bash
adb shell screenrecord /sdcard/demo.mp4
adb shell screenrecord --size <WIDTHxHEIGHT>
adb shell screenrecord --bit-rate <RATE>
adb shell screenrecord --time-limit <TIME> #Sets the maximum recording time, in seconds. The default and maximum value is 180 (3 minutes).
adb shell screenrecord --rotate # Rotates 90 degrees
adb shell screenrecord --verbose
```
(按 Ctrl-C 停止录制)
**您可以使用 **_**adb pull**_ 下载文件(图像和视频)**
# Shell
### adb shell
在设备内部获取一个 shell
```bash
adb shell
```
### adb shell \<CMD>
在设备内执行命令
```bash
adb shell ls
```
## pm
以下命令在 shell 中执行
```bash
pm list packages #List installed packages
pm path <package name> #Get the path to the apk file of tha package
am start [<options>] #Start an activity. Whiout options you can see the help menu
am startservice [<options>] #Start a service. Whiout options you can see the help menu
am broadcast [<options>] #Send a broadcast. Whiout options you can see the help menu
input [text|keyevent] #Send keystrokes to device
```
# 进程
如果您想获取应用程序进程的 PID可以执行
```bash
adb shell ps
```
并搜索您的应用程序
或者您可以这样做
```bash
adb shell pidof com.your.application
```
它将打印应用程序的 PID
# 系统
```bash
adb root
```
以root权限重启adbd守护进程。然后您必须再次连接到ADB服务器您将成为root如果可用
```bash
adb sideload <update.zip>
```
闪存/恢复 Android update.zip 包。
# 日志
## Logcat
要**仅过滤一个应用程序的消息**,获取该应用程序的 PID并使用 grep (linux/macos) 或 findstr (windows) 来过滤 logcat 的输出:
```bash
adb logcat | grep 4526
adb logcat | findstr 4526
```
### adb logcat \[选项] \[过滤规范]
```bash
adb logcat
```
注意:按 Ctrl-C 停止监视
```bash
adb logcat *:V # lowest priority, filter to only show Verbose level
adb logcat *:D # filter to only show Debug level
adb logcat *:I # filter to only show Info level
adb logcat *:W # filter to only show Warning level
adb logcat *:E # filter to only show Error level
adb logcat *:F # filter to only show Fatal level
adb logcat *:S # Silent, highest priority, on which nothing is ever printed
```
### adb logcat -b \<Buffer>
```bash
adb logcat -b # radio View the buffer that contains radio/telephony related messages.
adb logcat -b # event View the buffer containing events-related messages.
adb logcat -b # main default
adb logcat -c # Clears the entire log and exits.
adb logcat -d # Dumps the log to the screen and exits.
adb logcat -f test.logs # Writes log message output to test.logs .
adb logcat -g # Prints the size of the specified log buffer and exits.
adb logcat -n <count> # Sets the maximum number of rotated logs to <count>.
```
## dumpsys
转储系统数据
### adb shell dumpsys \[options]
```bash
adb shell dumpsys
adb shell dumpsys meminfo
adb shell dumpsys battery
```
注意:一台启用了开发者选项的移动设备,运行 Android 5.0 或更高版本。
```bash
adb shell dumpsys batterystats collects battery data from your device
```
注意: [Battery Historian](https://github.com/google/battery-historian) 将这些数据转换为 HTML 可视化。 **步骤 1** _adb shell dumpsys batterystats > batterystats.txt_ **步骤 2** _python historian.py batterystats.txt > batterystats.html_
```bash
adb shell dumpsys batterystats --reset erases old collection data
```
adb shell dumpsys activity
# 备份
通过adb备份安卓设备。
```bash
adb backup [-apk] [-shared] [-system] [-all] -f file.backup
# -apk -- Include APK from Third partie's applications
# -shared -- Include removable storage
# -system -- Include system Applciations
# -all -- Include all the applications
adb shell pm list packages -f -3 #List packages
adb backup -f myapp_backup.ab -apk com.myapp # backup on one device
adb restore myapp_backup.ab # restore to the same or any other device
```
如果您想检查备份的内容:
```bash
( printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" ; tail -c +25 myapp_backup.ab ) | tar xfvz -
```
{{#include ../../banners/hacktricks-training.md}}