安全测试常用 ADB 命令

news/2024/7/5 2:05:26

ADB,全称 Android Debug Bridge,即 Android 调试桥,是一个对 Android 开发人员和测试人员都必不可少的工具。adb 包含在 Android SDK 平台工具软件包中。可以使用 SDK 管理器下载此软件包,该管理器会将其安装在 android_sdk/platform-tools/ 下。如果需要独立的 Android SDK 平台工具软件包,请点击此处进行下载。

关于 adb 的详细用法,无论是 Android 官方站点还是其他博客已经有相当细致的描述,可以参考如下文章 。本篇博客是总结笔者在安全测试中,常用的 adb 命令。

  • Android 调试桥 (adb) (官方文档,可能需要科学上网)
  • ADB Usage Complete / ADB 用法大全

安全测试常用 ADB 命令

当前系统前台 Activity

用户当前的前台 Activity 即我们的栈顶 Activity

方法一

adb shell dumpsys activity activities | findstr mResumedActivity

方法二

adb shell dumpsys activity activities | grep mResumedActivity

输出

  mCurrentFocus=Window{86c6209 u0 shengivictor.androidcomm/com.example.shengivictor.androidcomm.MainActivity}

系统运行的所有 Activity

命令

adb shell dumpsys activity | findstr Run

输出

Running activities (most recent first):
        Run #0: ActivityRecord{8240a87 u0 shengivictor.androidcomm/com.example.shengivictor.androidcomm.MainActivity t577}
    Running activities (most recent first):
        Run #0: ActivityRecord{84a6505 u0 com.huawei.android.launcher/.unihome.UniHomeLauncher t1}
    Running activities (most recent first):
        Run #0: ActivityRecord{8240b83 u0 com.huawei.health/.MainActivity t581}

APK 安装路径

命令

adb shell pm path shengivictor.androidcomm

输出

package:/data/app/shengivictor.androidcomm-40RDkYJdHTo3JwTI8ohknA==/base.apk

应用安装文件目录说明

  • /system/app 存放 rom 本身附带的软件即系统软件;
  • /system/priv-app 存放手机厂商定制系统的系统级应用;
  • /data/app 存放用户自行安装的软件

请注意,以上目录存放的都只是应用的安装数据,包括 apk 和相应的 lib 库文件,而非应用存储数据的文件。应用实际存储的数据,一般放在其私有目录下 /data/data/com.kugou.android,只有 root 用户和 app 本身能够读写该目录。

/system/app 下的文件,普通用户无法自行卸载(利用 CVE-2022-20611 漏洞,普通用户可卸载系统应用),而 /data/app 下的文件,用户可以自行卸载。

有用的脚本:下载系统所有 APK 到本地

正在运行的 Services

命令

adb shell dumpsys activity services [<packagename>]

输出

Activity Resolver Table:
  Non-Data Actions:
      android.intent.action.MAIN:
        5b4cba8 org.mazhuang.guanggoo/.SplashActivity filter 5ec9dcc
          Action: "android.intent.action.MAIN"
          Category: "android.intent.category.LAUNCHER"
          AutoVerify=false

Registered ContentProviders:
  org.mazhuang.guanggoo/com.tencent.bugly.beta.utils.BuglyFileProvider:
    Provider{7a3c394 org.mazhuang.guanggoo/com.tencent.bugly.beta.utils.BuglyFileProvider}
#...

系统已定义的权限

命令

adb shell pm list permissions -f | grep -A4 ACCESS_NOTIFICATION_SERVICE

输出

+ permission:com.android.systemui.permission.ACCESS_NOTIFICATION_SERVICE
  package:com.android.systemui
  label:null
  description:null
  protectionLevel:signature|privileged

系统日志

命令

adb logcat [<option>]

输出

I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}

注意:上述命令每次重新运行,都会打印以前所有缓存的日志,可以通过 -c 选项清除缓存日志

adb logcat -c

其他日志存放路径

  • /data/system/dropbox/ 用于记录 Android 运行过程中,内核,系统进程,用户进程等出现严重问题时的 log
  • /data/tombstone 存放 Native 层崩溃日志

系统信息

系统架构

adb shell getprop ro.product.cpu.abi

Android 版本

adb shell getprop ro.system.build.version.release

其实这些信息都可以在 /system/build.prop 文件看到。

与应用交互(传递 intent)

利用 ADB 可以很方便的与四大组件进行通信(am命令)

command用途
start [options] 启动 指定的 Activity
startservice [options] 启动 指定的 Service
broadcast [options] 发送 指定的广播
force-stop 停止 相关的进程

1.拉起应用(Activity)

# 拉起应用
adb shell am start -n com.tencent.mm/.ui.LauncherUI
# 停止应用
adb shell am com.tencent.mm

2.拉起服务

adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService

3.发送广播

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

4.参数讲解

start [options] intent

  • -D:启用调试功能。
  • -W:等待启动完成。
  • --start-profiler file:启动性能剖析器并将结果发送至 file。
  • -P file:类似于 --start-profiler,但当应用进入空闲状态时剖析停止。
  • -R count:重复启动 Activity count 次。在每次重复前,将完成顶层 Activity。
  • -S:在启动 Activity 前,强行停止目标应用。
  • --opengl-trace:启用 OpenGL 函数的跟踪。
  • --user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行。

Intent

  • -a action 指定 intent 操作,如 android.intent.action.VIEW。只能声明一次。
  • -d data_uri 指定 intent 数据 URI,如 content://contacts/people/1。只能声明一次。
  • -t mime_type 指定 intent MIME 类型,如 image/png。只能声明一次。
  • -c category 指定 intent 类别,如 android.intent.category.APP_CONTACTS。
  • -n component 指定带有软件包名称前缀的组件名称以创建显式 intent,如 com.example.app/.ExampleActivity。
  • -f flags 向 setFlags() 支持的 intent 添加标记。
  • --esn extra_key 添加一个空 extra。URI intent 不支持此选项。
  • --es extra_key extra_string_value 以键值对的形式添加字符串数据。
  • --ez extra_key extra_boolean_value 以键值对的形式添加布尔值数据。
  • --ei extra_key extra_int_value 以键值对的形式添加整数型数据。
  • --el extra_key extra_long_value 以键值对的形式添加长整型数据。
  • --ef extra_key extra_float_value 以键值对的形式添加浮点型数据。
  • --eu extra_key extra_uri_value 以键值对的形式添加 URI 数据。

利用 ADB 的相关工具

scrcpy

scrcpy 通过 ADB 调试的方式来将手机屏幕投到电脑上,并可以通过电脑控制 Android 设备。支持 LinuxWindowsmacOS。在最新版 Android 系统上(API 30:Android 11)还支持 音频转发。

请添加图片描述

QtScrcpy

QtScrcpy 可以通过 USB / 网络连接 Android 设备,并进行显示和控制。无需root权限。也支持 LinuxWindowsmacOS。与 scrcpy 最大的不同之处在于,QtScrcpy 支持自定义按键映射

在这里插入图片描述

Android Device Monitor

Android SDK 提供的工具,用于查看Android 系统资源、APP 以及文件系统操作等。个人觉得挺好用,但是 Android Device Monitor 已在 Android Studio 3.1 中弃用,并已从 Android Studio 3.2 中移除

在这里插入图片描述
当然还有更多工具,不一一列举,绝大部分 Android 安全测试工具都会用到 ADB,这里只是列举了完全利用 ADB 实现的工具。

总结

ADB 是 Android 提供的原生工具,其实是一个功能强大的工具集,包含各个子二进制,分布在 Android 文件系统的各个位置。普通开发既可以利用 ADB 进行常规调试和测试,渗透人员也可以利用 ADB 进行安全测试。了解常用的 ADB 命令是 Android 安全测试必不可少的基本技能。我们在这里只是阐述安全相关的一些测试命令,如果想了解更多,可以参考文章开头提到的官方和三方手册。


http://lihuaxi.xjx100.cn/news/1178895.html

相关文章

RocketMQ 学习教程——(二)SpringBoot 集成 RocketMQ

文章目录 添加 RocketMQ 依赖消费者 ConsumerYAML 配置创建监听器消息过滤Tag 过滤 生产者 ProducerYAML 配置发送同步消息发送异步消息发送单向消息发送延迟消息发送顺序消息发送批量消息发送集合消息 添加 RocketMQ 依赖 在 Maven 仓库【https://mvnrepository.com/】中搜索 …

网络安全常用靶场推荐

sqli-labs sqli-labs包含了大多数的sql注入类型&#xff0c;以一种闯关模式&#xff0c;对于sql注入进行漏洞利用 下载地址&#xff1a;https://github.com/Audi-1/sqli-labs xss challenges xsschallenges是一个专对于XSS漏洞练习的在线靶场&#xff0c;包含了各种绕过&#…

【JVM】12. 垃圾回收相关概念

文章目录 12.1. System.gc()的理解12.2. 内存溢出与内存泄露内存溢出&#xff08;OOM&#xff09;内存泄漏&#xff08;Memory Leak&#xff09; 12.3. Stop The World12.4. 垃圾回收的并行与并发并发&#xff08;Concurrent&#xff09;并行&#xff08;Parallel&#xff09;并…

python常用知识梳理(必看篇)

下面小编就为大家带来一篇python常用知识梳理(必看篇)。小编觉得挺不错的&#xff0c;现在就分享给大家&#xff0c;也给大家做个参考。一起跟随小编过来看看吧 接触python已有一段时间了&#xff0c;下面针对python基础知识的使用做一完整梳理&#xff1a; 1&#xff09;避免…

[Nacos] Nacos Server处理订阅请求 (九)

文章目录 1.InstanceController#list()2.InstanceController#doSrvIpxt()3.总结 1.InstanceController#list() Nacos Server处理订阅请求 主要还是从请求中获取参数, 比如namespceId、serviceName、agent(指定提交请求的客户端是哪种类型)、clusters、clusterIP、udpPort(后续…

路径规划算法:基于入侵杂草优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于入侵杂草优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于入侵杂草优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

9. Linux下实现简单的UDP请求

本文简单介绍了UDP传输层协议&#xff0c;并在Linux下实现简单的socket通讯 一、UDP UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一种无连接的传输层协议&#xff0c;它不保证数据包的可靠性和顺序。UDP在IP协议的基础上增加了简单的差错…

LeetCode第347场周赛

2023.5.28LeetCode第347场周赛 A. 移除字符串中的尾随零 思路 从最后一位开始遍历&#xff0c;为0则跳过 代码 class Solution { public:string removeTrailingZeros(string num) {int i num.size() - 1;while (i > 0 && num[i] 0) i -- ;return num.substr(…