安全测试常用 ADB 命令

news2025/1/12 10:57:32

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://www.coloradmin.cn/o/580105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多线程和多进程

线程和进程 最近经常看到多线程和多进程&#xff0c;这两个概念在某些方向还是很像的&#xff0c;但是进程和线程到底有啥联系&#xff0c;又有啥区别&#xff0c;很多人并没有完全弄明白&#xff0c;最近学操作系统的时候&#xff0c;老师经常叫线程为进程的进程&#xff0c;…

CMake之安装打包

目录 安装公共选项安装目标安装文件安装目录安装导出 导出问题 安装 install的用法 公共选项 install有多个签名&#xff0c;这些签名公用的选项有以下&#xff1a; DESTINATION&#xff1a;指定文件要安装的目录&#xff0c;可以是相对路径或绝对路径。 相对路径&#xff…

【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;并…

QT调用VS编译的RabbitMQ-C静态库

为此折腾两天&#xff0c;参考了不少大神的文章&#xff0c;再次标识感谢。把自己的一些思路简单记录下&#xff1a; https://blog.csdn.net/qq_70244454/article/details/128086920 https://blog.csdn.net/zjzytnn/article/details/70045247 把几个踩过的坑&#xff0c;记录…

【Python REST API】零基础也能轻松掌握的学习路线与参考资料

REST&#xff08;Representational State Transfer&#xff09;是一种基于HTTP协议的软件架构风格&#xff0c;用于构建分布式网络应用程序。Python是一种功能强大的编程语言&#xff0c;它具有丰富的库和框架&#xff0c;可以使用Python编写RESTful API。本篇文章将详细介绍Py…

[java安全]反射

文章目录 [java安全]反射定义反射的运用1、反射获取类对象1.1、Class.forName()1.2、Object.class1.3、obj.getClass() 2、反射获取成员方法2.1、getMethods()2.2、getDeclaredMethods()2.3、getMethod()2.4、getDeclaredMethod() 3、反射获取构造方法4、反射创建对象4.1、通过…

复习之Linux系统中的用户管理

1.用户及用户组的意义 在Linux中&#xff0c;用户&#xff08;User&#xff09;和用户组&#xff08;Group&#xff09;是管理系统权限和资源访问的重要概念。 &#xff08;1&#xff09;用户 用户是指系统中的一个身份标识&#xff0c;每个用户都有自己的用户名和密码。每个…

chatgpt赋能python:Python编程炒股软件:优秀的股票市场分析工具

Python 编程炒股软件&#xff1a;优秀的股票市场分析工具 Python 编程语言一直以来在数据分析和科学计算领域处于领先地位。由于它强大的数据处理能力和易于使用的编程语言特性&#xff0c;Python成为了许多股票市场分析工具的首选。 现在&#xff0c;越来越多的投资者使用Py…

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

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

Latex在同一figure中排版多张图片的方法

Latex在同一figure中排版多张图片的方法 主要使用了minipage&#xff08;子图&#xff09;语法。minipage可以嵌套&#xff0c;子图还可以分解为更多子图&#xff0c;功能很好玩&#xff0c;无聊可以自己试试。下面介绍几种常用效果的实现方法。 并排显示两张图&#xff0c;并…

StarRocks 中的数据模型和索引使用

一、StarRocks 数据模型 StarRocks 支持四种数据模型&#xff0c;分别是明细模型 (Duplicate Key Model)、聚合模型 (Aggregate Key Model)、更新模型 (Unique Key Model) 和主键模型 (Primary Key Model)。 1.1 明细模型 明细模型是默认的建表模型。如果在建表时未指定任何…

chatgpt赋能python:Python自动截屏教程

Python 自动截屏教程 介绍 Python 是一种高级程序设计语言&#xff0c;已广泛用于各种应用中&#xff0c;从 Web 开发到机器学习都有很多案例。其中&#xff0c;Python 的截屏功能得到了越来越多的关注&#xff0c;因为在很多应用场景中&#xff0c;自动截屏可以帮助我们更有…

【JVM】11. 垃圾回收及回收算法算法

文章目录 11.1. 垃圾回收概述11.1.1. 什么是垃圾&#xff1f;什么是垃圾&#xff1f; 11.1.2. 为什么需要GC11.1.3. 早期垃圾回收11.1.4. Java垃圾回收机制担忧GC主要关注的区域 11.2. 垃圾回收相关算法11.2.1. 标记阶段&#xff1a;引用计数算法方式一&#xff1a;引用计数算法…

C++数据结构:散列表简单实现(hash表)

文章目录 前言一、设计思想二、实现步骤1、定义节点2、定义Hash表类 三、数据示例总结 前言 散列表是一种常用的数据结构&#xff0c;它可以快速地存储和查找数据。散列表的基本思想是&#xff0c;将数据的关键字映射到一个有限的地址空间中&#xff0c;然后在该地址空间中存储…

Nacos源码-从Demo出发研究事件驱动与观察者模式的应用

在我们分析 Nacos 源码时&#xff0c;会看见大量的事件发布的动作&#xff0c;不管是客户端注册/下线、服务改变、服务订阅等等都是利用了事件发布。 下面我在自己的项目中&#xff0c;引入Nacos的依赖进行一个简单的demo的演示&#xff0c;我个人认为其和spring容器的listene…

Koa学习1:初始化项目

前言 作为前端开发者&#xff0c;最适合我们的后端就是node了&#xff0c;node的框架挺多的。选择Koa是因为国内用的挺多的、关于这方面的教程也很多、而且比较适合小项目。 学习教程是&#xff1a;【杰哥课堂】-项目实战-NodeKoa2从零搭建通用API服务 写这些文章&#xff0…

K8s in Action 阅读笔记——【5】Services: enabling clients to discover and talk to pods

K8s in Action 阅读笔记——【5】Services: enabling clients to discover and talk to pods 你已了解Pod以及如何通过ReplicaSets等资源部署它们以确保持续运行。虽然某些Pod可以独立完成工作&#xff0c;但现今许多应用程序需要响应外部请求。例如&#xff0c;在微服务的情况…

在Python中载入大量图片型数据集,与matlab结合使用时,如何解决RAM的占用爆炸性增长的问题

在Python中载入大量图片时&#xff0c;由于每张图片都会被转换成Numpy数组并存储在内存中&#xff0c;因此可能会导致RAM的占用爆炸性增长。为了减少RAM的使用&#xff0c;可以考虑采用以下方法&#xff1a; Python和Matlab结合使用。首先&#xff0c;可以使用Python的Pillow库…

【Linux】遇事不决,可先点灯,LED驱动的进化之路---1

【Linux】遇事不决&#xff0c;可先点灯&#xff0c;LED驱动的进化之路---1 前言&#xff1a; 一、最简单的LED驱动程序 1.1 字符设备驱动程序框架 1.2 程序实战 1.2.1 驱动程序&#xff08;led_drive_simple.c&#xff09; 1.2.2 应用程序&#xff08;led_test_simple.c…

C#,码海拾贝(25)——求解“三对角线方程组”的“追赶法”之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> /…