安全测试常用 ADB 命令

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

关于 adb 的详细用法,无论是 Android 官方站点还是其他博客已经有相当细致的描述,可以参考如下文章 。本篇博客是总结笔者在安全测试中,常用的 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 安全测试必不可少的基本技能。我们在这里只是阐述安全相关的一些测试命令,如果想了解更多,可以参考文章开头提到的官方和三方手册。

猜你喜欢

转载自blog.csdn.net/song_lee/article/details/129937308