- 文档
- 教程
- 网络安全
【免费下载链接】mastg
The OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.
本篇技术指南对应 OWASP Mobile Application Security Testing Guide (MASTG) 中的 MASTG-TECH-0006,讲解如何在 Android 安全测试中快速、准确地列出设备上已安装的应用并定位目标应用包名(Package Name / Application ID)。无论你是准备对目标 APK 做静态逆向,还是要通过 Frida 进行动态插桩,本文介绍的两条命令路径(Android 自带的
pm包管理器和 Frida 附带的frida-ps)都是你进入后续所有测试环节的第一步。读完本文,你将掌握pm list packages各常用参数组合、frida-ps -Uai的进程/应用双视角枚举方法,以及如何把包名、PID 与后续adb pull、Frida 注入工作流无缝衔接。
为什么先要"列出已安装应用"
在 MASTG 的 Android 测试方法论中,无论是静态分析还是动态分析,第一步几乎都是确认目标应用的包名(Package Name,即应用 ID)。原因很直接:
- 通过 ADB 拉取 APK、查看
pm path、执行dumpsys package时,全部以包名作为索引; - 使用 Frida 附加或启动进程时,
frida、frida-trace、Objection 等工具同样通过包名或进程名定位目标; - 面对"未知应用"(例如从设备上搜集出的可疑应用),包名是唯一稳定、可复现的标识符。
从源码结构看,MASTG 的所有 Android 测试用例(如 MASTG-TEST-0024)与技巧文档(如 MASTG-TECH-0003)都在开篇引用本技巧:先pm list packages找到包名,再pm path拿到 APK 路径,最后adb pull提取样本。可以说,本文介绍的枚举能力是整个 MASTG Android 章节的"入口操作"。
方法一:使用 Android 包管理器(pm)
pm(Package Manager)是 Android 系统自带的包管理命令,通过adb shell即可调用,无需 root、无需安装任何额外工具,适用于任何一台已开启 USB 调试(或网络 adb)的设备。
基础用法:列出全部已安装包
执行adb shell pm list packages会输出设备上所有应用的包名:
$ adb shell pm list packages package:sg.vantagepoint.helloworldjni package:eu.chainfire.supersu package:org.teamsik.apps.hackingchallenge.easy package:org.teamsik.apps.hackingchallenge.hard package:sg.vp.owasp_mobile.omtg_android输出格式固定为package:<包名>一行一个。上面的示例中可以看到 MASTG 仓库中出现的真实包名:
sg.vantagepoint.helloworldjni——对应 Samples/Android/01_HelloWorld-JNI 目录中的 JNI 示例应用(HelloWord-JNI.apk);sg.vp.owasp_mobile.omtg_android——MASTG 的官方测试应用(旧称 OMTG Android 应用);eu.chainfire.supersu、org.teamsik.apps.hackingchallenge.*——测试中常见的 root 管理工具与破解挑战类应用。
提示:在设备上应用较多时,可以用
grep过滤关键字,例如adb shell pm list packages | grep -i vantagepoint,这与 MASTG-TEST-0024 中推荐的pm list packages -f | grep -i <keyword>用法一致。
常用参数组合
pm list packages支持多个过滤参数,测试中最常用的有:
| 参数 | 含义 | 典型场景 |
|---|---|---|
-3 | 只显示第三方(非系统)应用 | 排除厂商预装应用,缩小目标范围 |
-f | 同时显示 APK 文件的完整路径 | 为后续adb pull提取 APK 做准备 |
-s | 只显示系统应用 | 分析系统组件或厂商应用 |
-e/-d | 只显示已启用 / 已禁用应用 | 检查应用状态 |
-i | 显示安装来源 | 审计应用来源 |
-u | 包含已卸载但保留数据的应用 | 检查数据残留 |
最实用的组合是-3 -f,一次性拿到"第三方应用 + APK 路径":
$ adb shell pm list packages -3 -f package:/data/app/sg.vantagepoint.helloworldjni-1/base.apk=sg.vantagepoint.helloworldjni package:/data/app/eu.chainfire.supersu-1/base.apk=eu.chainfire.supersu package:/data/app/org.teamsik.apps.hackingchallenge.easy-1/base.apk=org.teamsik.apps.hackingchallenge.easy package:/data/app/org.teamsik.apps.hackingchallenge.hard-1/base.apk=org.teamsik.apps.hackingchallenge.hard package:/data/app/sg.vp.owasp_mobile.omtg_android-kR0ovWl9eoU_yh0jPJ9caQ==/base.apk=sg.vp.owasp_mobile.omtg_android注意此模式下输出格式变为package:<APK 绝对路径>=<包名>,路径中的-kR0ovWl9eoU_yh0jPJ9caQ==是 Android 为每个应用随机生成的目录后缀,每次安装都可能不同,属于正常现象。
从包名到 APK 路径:pm path
如果已经知道目标包名,可以直接查询其安装路径。下面的结果与上面-3 -f输出中该包的记录完全一致:
$ adb shell pm path sg.vp.owasp_mobile.omtg_android package:/data/app/sg.vp.owasp_mobile.omtg_android-kR0ovWl9eoU_yh0jPJ9caQ==/base.apk拿到路径后即可用adb pull将 APK 提取到本地工作目录,这正是 MASTG-TECH-0003(Obtaining and Extracting Apps)中"从设备提取应用包"一节的标准三步流程:
adb shell pm list packages # 1. 找到包名 adb shell pm path <package name> # 2. 获取 APK 完整路径 adb pull <apk path> # 3. 拉取到本地关于adb pull的批量传输能力(例如整目录拉取)可进一步参考 MASTG-TECH-0002(Host-Device Data Transfer)。
进阶:与 aapt / dumpsys 联动
定位包名之后,测试用例中常用它对 APK 做进一步审计:
- 用 aapt 查看 APK 声明的权限:
aapt d permissions app-x86-debug.apk(工具位于 Android SDK 的 build-tools 目录); - 用
adb shell dumpsys package <包名> | grep permission查看已安装包的权限授予状态(分为declared permissions、requested and install permissions、runtime permissions三类)。
这两个联动操作在 MASTG-TEST-0024 中有完整示例,而该测试明确把pm list packages -f | grep -i <keyword>作为前置步骤引用本技巧,可见枚举包名是整个权限审计链的起点。
方法二:使用 frida-ps 枚举应用与进程
如果你的测试环境已经安装了 Frida(本地通过pip install frida-tools安装,设备端运行 frida-server,详见 MASTG-TOOL-0031 与 MASTG-TOOL-0001),那么frida-ps是比pm信息更丰富的一条枚举路径。
frida-ps 参数速查
| 参数 | 含义 |
|---|---|
-U | 连接当前通过 USB(或模拟器)连接的设备 |
-a | 只列出应用(Applications),即面向用户的 App 及其进程 |
-i | 包含已安装但当前未运行的应用 |
-D <id> | 指定某个设备(配合frida-ls-devices查看设备 ID) |
组合-Uai即可在 USB 设备上同时看到"正在运行的应用进程"与"已安装但未运行的应用":
$ frida-ps -Uai PID Name Identifier ----- ---------------------------------------- --------------------------------------- 766 Android System android 21228 Attack me if u can sg.vp.owasp_mobile.omtg_android 4281 Termux com.termux - Uncrackable1 sg.vantagepoint.uncrackable1输出四列含义如下:
- PID:进程 ID。正在运行的应用有具体数字;未运行的应用显示
-; - Name:设备上显示的应用名称(例如
Attack me if u can、Uncrackable1),Objection 等工具可以直接用它附加; - Identifier:即包名/应用 ID,是与
pm list packages输出互相印证的稳定标识。
与 pm 输出对照验证
对比两种方法的输出可以发现:frida-ps -Uai中的sg.vp.owasp_mobile.omtg_android(显示名Attack me if u can)与pm list packages中的package:sg.vp.owasp_mobile.omtg_android完全一致;Uncrackable1对应sg.vantagepoint.uncrackable1,即 MASTG 官方 Crackmes(Crackmes/Android 与 iOS 的 UnCrackable 系列)中的应用标识。两条独立路径交叉验证,可以确保你锁定的目标包名没有拼写错误。
为什么要记录 PID 与 Identifier
本技巧原文特别强调:记下 "Identifier" 以及(如果存在的)PID,后续会用到。原因从源码工具的使用方式中可以看得很清楚:
- Identifier 用于进程定位:Frida 工具链(
frida、frida-trace)普遍接受包名作为目标参数,例如frida -U com.android.chrome、frida-trace -U com.android.chrome -i "open"(见 MASTG-TOOL-0001)。包名在应用每次启动时保持不变; - PID 是瞬态值:应用每次重新启动 PID 都会变化,因此不建议把 PID 作为长期使用的定位依据,仅用于"此刻正在运行"的即时附加;
- Name 用于交互式工具:Objection 支持
objection -n "Attack me if u can" start这样的进程名连接方式(见 MASTG-TOOL-0029),所以显示名同样值得保留。
一个典型的动态分析开局流程是:
# 1. 枚举目标 $ frida-ps -Uai | grep -i owasp 21228 Attack me if u can sg.vp.owasp_mobile.omtg_android # 2. 用包名附加或启动进程 $ frida -U sg.vp.owasp_mobile.omtg_android # 附加到运行中的进程 $ frida -U -f sg.vp.owasp_mobile.omtg_android # 冷启动(spawn)并插桩两条路径如何选择
| 场景 | 推荐方法 | 理由 |
|---|---|---|
| 无 Frida 环境、纯 adb 静态分析 | pm list packages -3 -f+pm path | 零依赖,且直接给出 APK 路径,衔接adb pull |
| 确认包名与 APK 安装路径 | pm path <包名> | 最精确的单包查询 |
| 动态插桩前定位目标进程 | frida-ps -Uai | 同时给出 Name / Identifier / PID 三要素 |
| 交叉验证包名正确性 | 两种方法对照 | 输出互相独立,可防止识别错误目标 |
如果设备不可 root 又想用 Frida 做动态分析,还可以参考 MASTG-TOOL-0029 中基于 Objection 对 APK 重打包(嵌入 frida-gadget)的方案;此时你仍然需要先用pm list packages或frida-ps确认包名,才能对重打包后的 APK 进行安装与启动验证。
小结
adb shell pm list packages是 Android 原生的包枚举命令,-3 -f组合可过滤第三方应用并附带 APK 路径,pm path <包名>可单独查询安装路径,二者衔接adb pull即构成 MASTG-TECH-0003 的 APK 提取流程;frida-ps -Uai以应用视角枚举已安装应用,额外提供 Name 与 PID,可直接衔接frida、frida-trace、Objection 的动态插桩工作流;- 记录 Identifier 与 PID 是后续所有测试步骤的前提:包名用于稳定定位,PID 仅代表当下运行状态;
- 本技巧同时是 MASTG-TEST-0024 等测试用例的前置步骤,掌握它即可顺利进入权限审计、APK 逆向、Frida 插桩等后续 MASTG 测试环节。
- 文档
- 教程
- 网络安全
【免费下载链接】mastg
The OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.
相关推荐
OWASP MASTG 技术指南:枚举与提取 Android 应用运行时已加载的 Native 库(MASTG-TECH-0029)
OWASP MASTG 技术指南:枚举与提取 Android 应用运行时已加载的 Native 库(MASTG TECH 0029) 本文是 OWASP MAS
文档教程网络安全ZhiHuDaily-React-Native样式与动画实现:Flex布局与原生动画的完美结合
ZhiHuDaily React Native样式与动画实现:Flex布局与原生动画的完美结合 ZhiHuDaily React Native是一款使用Reac
OWASP MASTG 实战:用 Frida 验证 iOS 应用的虚拟设备检测逻辑(MASTG-DEMO-0131)
OWASP MASTG 实战:用 Frida 验证 iOS 应用的虚拟设备检测逻辑(MASTG DEMO 0131) 本文基于 demos/ios/MASVS
文档教程网络安全
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考