mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's
This commit is contained in:
parent
5b9a9b7f8f
commit
598ae2c1d2
@ -337,6 +337,7 @@
|
||||
- [Manual DeObfuscation](mobile-pentesting/android-app-pentesting/manual-deobfuscation.md)
|
||||
- [React Native Application](mobile-pentesting/android-app-pentesting/react-native-application.md)
|
||||
- [Reversing Native Libraries](mobile-pentesting/android-app-pentesting/reversing-native-libraries.md)
|
||||
- [Shizuku Privileged Api](mobile-pentesting/android-app-pentesting/shizuku-privileged-api.md)
|
||||
- [Smali - Decompiling, Modifying, Compiling](mobile-pentesting/android-app-pentesting/smali-changes.md)
|
||||
- [Spoofing your location in Play Store](mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md)
|
||||
- [Tapjacking](mobile-pentesting/android-app-pentesting/tapjacking.md)
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Android Applications Basics
|
||||
|
||||
强烈建议您开始阅读此页面,以了解与Android安全性相关的**最重要部分和Android应用程序中最危险的组件**:
|
||||
强烈建议您开始阅读此页面,以了解与Android安全性和Android应用程序中最危险组件相关的**最重要部分**:
|
||||
|
||||
{{#ref}}
|
||||
android-applications-basics.md
|
||||
@ -13,18 +13,19 @@ android-applications-basics.md
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
这是您连接到Android设备(模拟或物理)的主要工具。\
|
||||
**ADB** 允许从计算机通过 **USB** 或 **网络** 控制设备。此工具使得**双向复制**文件、**安装**和**卸载**应用程序、**执行**shell命令、**备份**数据、**读取**日志等功能成为可能。
|
||||
**ADB** 允许从计算机通过 **USB** 或 **网络** 控制设备。此工具使得可以**双向复制**文件,**安装**和**卸载**应用程序,**执行**shell命令,**备份**数据,**读取**日志等功能。
|
||||
|
||||
查看以下[**ADB命令**](adb-commands.md)列表,以了解如何使用adb。
|
||||
|
||||
## Smali
|
||||
|
||||
有时修改**应用程序代码**以访问**隐藏信息**(可能是经过良好混淆的密码或标志)是很有趣的。然后,反编译apk、修改代码并重新编译可能会很有趣。\
|
||||
[**在本教程中**,您可以**学习如何反编译APK,修改Smali代码并使用新功能重新编译APK**](smali-changes.md)。这在**动态分析期间的几项测试中可能非常有用**。因此,**始终记住这个可能性**。
|
||||
有时修改**应用程序代码**以访问**隐藏信息**(可能是经过良好混淆的密码或标志)是很有趣的。然后,反编译apk,修改代码并重新编译可能会很有趣。\
|
||||
[**在本教程中**,您可以**学习如何反编译APK,修改Smali代码并使用新功能重新编译APK**](smali-changes.md)。这在**动态分析**期间作为几种测试的**替代方案**可能非常有用。然后,**始终记住这个可能性**。
|
||||
|
||||
## Other interesting tricks
|
||||
|
||||
- [在Play Store中伪装您的位置](spoofing-your-location-in-play-store.md)
|
||||
- [Shizuku特权API(基于ADB的非root特权访问)](shizuku-privileged-api.md)
|
||||
- **下载APK**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||
- 从设备提取APK:
|
||||
```bash
|
||||
@ -56,16 +57,16 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
|
||||
**Firebase**
|
||||
|
||||
特别注意**firebase URLs**,并检查其是否配置不当。[有关 Firebase 的更多信息以及如何利用它,请点击这里。](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
特别注意**firebase URL**,并检查其是否配置不当。[有关 Firebase 的更多信息以及如何利用它,请点击这里。](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
||||
### 应用程序的基本理解 - Manifest.xml, strings.xml
|
||||
|
||||
**检查应用程序的 _Manifest.xml_ 和 _strings.xml_ 文件可以揭示潜在的安全漏洞**。这些文件可以通过反编译器访问,或通过将 APK 文件扩展名重命名为 .zip 然后解压缩来访问。
|
||||
**检查应用程序的 _Manifest.xml_ 和 _strings.xml_ 文件可以揭示潜在的安全漏洞**。可以使用反编译器访问这些文件,或通过将 APK 文件扩展名重命名为 .zip 然后解压缩来访问。
|
||||
|
||||
**从 _Manifest.xml_ 中识别的漏洞包括:**
|
||||
|
||||
- **可调试应用程序**:在 _Manifest.xml_ 文件中设置为可调试(`debuggable="true"`)的应用程序存在风险,因为它们允许连接,可能导致被利用。有关如何利用可调试应用程序的进一步理解,请参考有关在设备上查找和利用可调试应用程序的教程。
|
||||
- **备份设置**:处理敏感信息的应用程序应明确设置 `android:allowBackup="false"` 属性,以防止通过 adb 进行未经授权的数据备份,特别是在启用 USB 调试时。
|
||||
- **备份设置**:对于处理敏感信息的应用程序,`android:allowBackup="false"` 属性应明确设置,以防止通过 adb 进行未经授权的数据备份,尤其是在启用 USB 调试时。
|
||||
- **网络安全**:_res/xml/_ 中的自定义网络安全配置(`android:networkSecurityConfig="@xml/network_security_config"`)可以指定安全细节,如证书固定和 HTTP 流量设置。一个例子是允许特定域的 HTTP 流量。
|
||||
- **导出活动和服务**:在清单中识别导出的活动和服务可以突出可能被滥用的组件。在动态测试期间的进一步分析可以揭示如何利用这些组件。
|
||||
- **内容提供者和文件提供者**:暴露的内容提供者可能允许未经授权访问或修改数据。文件提供者的配置也应仔细审查。
|
||||
@ -87,7 +88,7 @@ tapjacking.md
|
||||
|
||||
### 任务劫持
|
||||
|
||||
一个**活动**的**`launchMode`** 设置为**`singleTask`**,且未定义任何 `taskAffinity`,则容易受到任务劫持。这意味着,如果在真实应用程序之前安装并启动了一个**应用程序**,它可能会**劫持真实应用程序的任务**(因此用户将与**恶意应用程序**交互,以为自己在使用真实应用程序)。
|
||||
一个**活动**的**`launchMode`** 设置为**`singleTask`**,且未定义任何 `taskAffinity`,则容易受到任务劫持。这意味着,如果在真实应用程序之前安装并启动一个**应用程序**,它可能会**劫持真实应用程序的任务**(因此用户将与**恶意应用程序**交互,以为自己在使用真实应用程序)。
|
||||
|
||||
更多信息在:
|
||||
|
||||
@ -99,12 +100,12 @@ android-task-hijacking.md
|
||||
|
||||
**内部存储**
|
||||
|
||||
在 Android 中,**存储**在**内部**存储中的文件**设计**为仅由**创建**它们的**应用程序**访问。此安全措施由 Android 操作系统**强制**执行,通常足以满足大多数应用程序的安全需求。然而,开发者有时会使用 `MODE_WORLD_READABLE` 和 `MODE_WORLD_WRITABLE` 等模式来**允许**文件在不同应用程序之间**共享**。然而,这些模式**并不限制**其他应用程序(包括潜在的恶意应用程序)对这些文件的访问。
|
||||
在 Android 中,**存储**在**内部**存储中的文件**设计**为仅由**创建**它们的**应用程序**访问。此安全措施由 Android 操作系统**强制**执行,通常足以满足大多数应用程序的安全需求。然而,开发者有时会使用 `MODE_WORLD_READABLE` 和 `MODE_WORLD_WRITABLE` 等模式来**允许**文件在不同应用程序之间**共享**。然而,这些模式**并不限制**其他应用程序(包括潜在恶意应用程序)对这些文件的访问。
|
||||
|
||||
1. **静态分析:**
|
||||
- **确保**仔细审查 `MODE_WORLD_READABLE` 和 `MODE_WORLD_WRITABLE` 的使用。这些模式**可能会暴露**文件给**意外或未经授权的访问**。
|
||||
2. **动态分析:**
|
||||
- **验证**应用程序创建的文件上的**权限**。具体来说,**检查**是否有任何文件被**设置为全球可读或可写**。这可能构成重大安全风险,因为这将允许**任何安装在设备上的应用程序**,无论其来源或意图如何,**读取或修改**这些文件。
|
||||
- **验证**应用程序创建的文件上设置的**权限**。具体来说,**检查**是否有任何文件被**设置为全球可读或可写**。这可能构成重大安全风险,因为这将允许**任何安装在设备上的应用程序**,无论其来源或意图如何,**读取或修改**这些文件。
|
||||
|
||||
**外部存储**
|
||||
|
||||
@ -114,16 +115,16 @@ android-task-hijacking.md
|
||||
- 外部存储上的文件是**全球可读和可写**的。这意味着任何应用程序或用户都可以访问这些文件。
|
||||
2. **安全问题**:
|
||||
- 鉴于访问的便利性,建议**不要在外部存储上存储敏感信息**。
|
||||
- 外部存储可以被任何应用程序移除或访问,使其安全性降低。
|
||||
- 外部存储可以被任何应用程序移除或访问,从而降低安全性。
|
||||
3. **处理来自外部存储的数据**:
|
||||
- 始终对从外部存储检索的数据**执行输入验证**。这至关重要,因为数据来自不受信任的来源。
|
||||
- 强烈不建议在外部存储上存储可执行文件或类文件以进行动态加载。
|
||||
- 如果您的应用程序必须从外部存储检索可执行文件,请确保这些文件在动态加载之前**已签名并经过加密验证**。此步骤对于维护应用程序的安全完整性至关重要。
|
||||
- 如果您的应用程序必须从外部存储检索可执行文件,请确保这些文件在动态加载之前**经过签名和加密验证**。此步骤对于维护应用程序的安全完整性至关重要。
|
||||
|
||||
外部存储可以在 `/storage/emulated/0`、`/sdcard`、`/mnt/sdcard` 中访问。
|
||||
|
||||
> [!NOTE]
|
||||
> 从 Android 4.4(**API 17**)开始,SD 卡具有一个目录结构,**限制应用程序访问特定于该应用程序的目录**。这防止恶意应用程序获得对其他应用程序文件的读写访问。
|
||||
> [!TIP]
|
||||
> 从 Android 4.4(**API 17**)开始,SD 卡具有目录结构,**限制应用程序访问特定于该应用程序的目录**。这防止恶意应用程序获得对其他应用程序文件的读写访问。
|
||||
|
||||
**以明文存储的敏感数据**
|
||||
|
||||
@ -139,25 +140,25 @@ android-task-hijacking.md
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
```
|
||||
测试这个的一个好方法是尝试使用像 Burp 这样的代理捕获流量,而不在设备中授权 Burp CA。此外,您还可以使用 Burp 为不同的主机名生成证书并使用它。
|
||||
测试此项的一个好方法是尝试使用一些代理(如 Burp)捕获流量,而不在设备中授权 Burp CA。此外,您还可以使用 Burp 为不同的主机名生成证书并使用它。
|
||||
|
||||
### 破损的加密
|
||||
|
||||
**糟糕的密钥管理流程**
|
||||
|
||||
一些开发者将敏感数据保存在本地存储中,并使用在代码中硬编码/可预测的密钥进行加密。这是不应该这样做的,因为某些反向工程可能允许攻击者提取机密信息。
|
||||
一些开发人员将敏感数据保存在本地存储中,并使用在代码中硬编码/可预测的密钥进行加密。这是不应该这样做的,因为某些反向工程可能允许攻击者提取机密信息。
|
||||
|
||||
**使用不安全和/或过时的算法**
|
||||
|
||||
开发者不应该使用 **过时的算法** 来执行授权 **检查**、**存储** 或 **发送** 数据。这些算法包括:RC4、MD4、MD5、SHA1... 如果 **哈希** 用于存储密码,例如,应该使用抗暴力破解的哈希并加盐。
|
||||
开发人员不应使用**过时的算法**来执行授权**检查**、**存储**或**发送**数据。这些算法包括:RC4、MD4、MD5、SHA1……如果**哈希**用于存储密码,例如,应该使用带盐的抗暴力破解**哈希**。
|
||||
|
||||
### 其他检查
|
||||
|
||||
- 建议对 **APK 进行混淆**,以增加攻击者的反向工程难度。
|
||||
- 如果应用程序是敏感的(如银行应用),它应该执行 **自己的检查以查看手机是否已被 root** 并采取相应措施。
|
||||
- 如果应用程序是敏感的(如银行应用),它应该检查是否正在使用 **模拟器**。
|
||||
- 如果应用程序是敏感的(如银行应用),它应该 **在执行之前检查自身的完整性** 以确认是否被修改。
|
||||
- 使用 [**APKiD**](https://github.com/rednaga/APKiD) 检查构建 APK 时使用了哪个编译器/打包工具/混淆器。
|
||||
- 建议**混淆 APK**,以增加攻击者的反向工程难度。
|
||||
- 如果应用程序是敏感的(如银行应用),它应该执行**自己的检查以查看手机是否已被root**并采取相应措施。
|
||||
- 如果应用程序是敏感的(如银行应用),它应该检查是否正在使用**模拟器**。
|
||||
- 如果应用程序是敏感的(如银行应用),它应该**在执行之前检查自身的完整性**以确认是否被修改。
|
||||
- 使用 [**APKiD**](https://github.com/rednaga/APKiD) 检查构建 APK 时使用的编译器/打包器/混淆器
|
||||
|
||||
### React Native 应用程序
|
||||
|
||||
@ -177,17 +178,17 @@ react-native-application.md
|
||||
|
||||
### 超级打包应用程序
|
||||
|
||||
根据这篇 [**博客文章**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) 超级打包是一种将应用程序内容压缩为单个文件的 Meta 算法。该博客讨论了创建一个可以解压这些应用程序的应用的可能性……以及一种更快的方法,涉及 **执行应用程序并从文件系统中收集解压的文件。**
|
||||
根据这篇 [**博客文章**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/),超级打包是一种将应用程序内容压缩为单个文件的 Meta 算法。该博客讨论了创建一个可以解压这些应用程序的应用的可能性……以及一种更快的方法,即**执行应用程序并从文件系统中收集解压的文件**。
|
||||
|
||||
### 自动化静态代码分析
|
||||
|
||||
工具 [**mariana-trench**](https://github.com/facebook/mariana-trench) 能够通过 **扫描** 应用程序的 **代码** 来发现 **漏洞**。该工具包含一系列 **已知源**(指示工具 **用户控制的输入** 的 **位置**)、**汇**(指示工具 **危险** **位置**,恶意用户输入可能造成损害)和 **规则**。这些规则指示 **源-汇** 的 **组合**,表明存在漏洞。
|
||||
工具 [**mariana-trench**](https://github.com/facebook/mariana-trench) 能够通过**扫描**应用程序的**代码**来发现**漏洞**。该工具包含一系列**已知源**(指示工具**用户控制的输入**的**位置**)、**汇**(指示工具**危险**的**位置**,恶意用户输入可能造成损害)和**规则**。这些规则指示**源-汇**的**组合**,表明存在漏洞。
|
||||
|
||||
通过这些知识,**mariana-trench 将审查代码并找到可能的漏洞**。
|
||||
凭借这些知识,**mariana-trench 将审查代码并找到可能的漏洞**。
|
||||
|
||||
### 泄露的秘密
|
||||
|
||||
应用程序可能包含秘密(API 密钥、密码、隐藏的 URL、子域名……)在其中,您可能能够发现。您可以使用像 [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) 这样的工具。
|
||||
应用程序可能包含秘密(API 密钥、密码、隐藏的 URL、子域名……)在其中,您可能能够发现。您可以使用工具,例如 [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
|
||||
|
||||
### 绕过生物识别认证
|
||||
|
||||
@ -197,10 +198,10 @@ bypass-biometric-authentication-android.md
|
||||
|
||||
### 其他有趣的功能
|
||||
|
||||
- **代码执行**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||
- **发送短信**: `sendTextMessage, sendMultipartTestMessage`
|
||||
- **声明为 `native` 的本地函数**: `public native, System.loadLibrary, System.load`
|
||||
- [阅读此文以了解 **如何反向工程本地函数**](reversing-native-libraries.md)
|
||||
- **代码执行**:`Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||
- **发送短信**:`sendTextMessage, sendMultipartTestMessage`
|
||||
- **声明为 `native` 的本地函数**:`public native, System.loadLibrary, System.load`
|
||||
- [阅读此文以了解**如何反向工程本地函数**](reversing-native-libraries.md)
|
||||
|
||||
### **其他技巧**
|
||||
|
||||
@ -214,100 +215,100 @@ content-protocol.md
|
||||
|
||||
## 动态分析
|
||||
|
||||
> 首先,您需要一个可以安装应用程序和所有环境(主要是 Burp CA 证书、Drozer 和 Frida)的环境。因此,强烈建议使用一个已 root 的设备(无论是模拟的还是实际的)。
|
||||
> 首先,您需要一个可以安装应用程序和所有环境(主要是 Burp CA 证书、Drozer 和 Frida)的环境。因此,强烈建议使用已 root 的设备(无论是模拟的还是非模拟的)。
|
||||
|
||||
### 在线动态分析
|
||||
|
||||
您可以在 [https://appetize.io/](https://appetize.io) 创建一个 **免费账户**。该平台允许您 **上传** 和 **执行** APK,因此它对于查看 APK 的行为非常有用。
|
||||
您可以在 [https://appetize.io/](https://appetize.io) 创建一个**免费账户**。该平台允许您**上传**和**执行** APK,因此它对于查看 APK 的行为非常有用。
|
||||
|
||||
您甚至可以在网页上 **查看应用程序的日志** 并通过 **adb** 连接。
|
||||
您甚至可以在网页上**查看应用程序的日志**并通过**adb**连接。
|
||||
|
||||
.png>)
|
||||
|
||||
通过 ADB 连接,您可以在模拟器中使用 **Drozer** 和 **Frida**。
|
||||
通过 ADB 连接,您可以在模拟器中使用**Drozer**和**Frida**。
|
||||
|
||||
### 本地动态分析
|
||||
|
||||
#### 使用模拟器
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio)(您可以创建 **x86** 和 **arm** 设备,并且根据 [**这个**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**最新的 x86** 版本 **支持 ARM 库**,无需使用慢速的 arm 模拟器)。
|
||||
- [**Android Studio**](https://developer.android.com/studio)(您可以创建**x86**和**arm**设备,并且根据 [**此**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**最新的 x86** 版本**支持 ARM 库**,无需慢速的 arm 模拟器)。
|
||||
- 学习如何在此页面上设置:
|
||||
|
||||
{{#ref}}
|
||||
avd-android-virtual-device.md
|
||||
{{#endref}}
|
||||
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(免费版:**个人版,您需要创建一个账户。_建议 **下载** 带有_ _**VirtualBox** 的版本,以避免潜在错误。_)
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(免费版:**个人版,您需要创建一个账户。_建议**下载**带有_**VirtualBox**的版本,以避免潜在错误。_)
|
||||
- [**Nox**](https://es.bignox.com)(免费,但不支持 Frida 或 Drozer)。
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> 创建新模拟器时,请记住,屏幕越大,模拟器运行越慢。因此,如果可能,请选择小屏幕。
|
||||
|
||||
要在 Genymotion 中 **安装 Google 服务**(如 AppStore),您需要单击以下图像中红色标记的按钮:
|
||||
要在 Genymotion 中**安装 Google 服务**(如 AppStore),您需要单击以下图像中红色标记的按钮:
|
||||
|
||||
.png>)
|
||||
|
||||
此外,请注意在 **Genymotion 中的 Android VM 配置** 中,您可以选择 **桥接网络模式**(这在您将从不同的 VM 连接到 Android VM 时会很有用)。
|
||||
此外,请注意在 Genymotion 的**Android VM 配置中**,您可以选择**桥接网络模式**(如果您将从不同的 VM 连接到 Android VM 并使用工具,这将非常有用)。
|
||||
|
||||
#### 使用物理设备
|
||||
|
||||
您需要激活 **调试** 选项,如果您能 **root** 它,那就更好了:
|
||||
您需要激活**调试**选项,如果您能**root**它,那就更好了:
|
||||
|
||||
1. **设置**。
|
||||
2. (从 Android 8.0 开始)选择 **系统**。
|
||||
3. 选择 **关于手机**。
|
||||
4. 按 **构建号** 7 次。
|
||||
5. 返回,您将找到 **开发者选项**。
|
||||
2. (从 Android 8.0 开始)选择**系统**。
|
||||
3. 选择**关于手机**。
|
||||
4. 按**构建号** 7 次。
|
||||
5. 返回,您将找到**开发者选项**。
|
||||
|
||||
> 一旦您安装了应用程序,您首先应该尝试它并调查它的功能、工作原理,并与之熟悉。\
|
||||
> 我建议使用 MobSF 动态分析 + pidcat 进行此初步动态分析,这样我们就可以在 MobSF **捕获** 大量 **有趣的** **数据** 供您稍后查看的同时 **了解应用程序的工作原理**。
|
||||
> 我建议使用 MobSF 动态分析 + pidcat 进行此初步动态分析,这样我们就可以在 MobSF **捕获**大量**有趣的**数据时**了解应用程序的工作原理**,您可以稍后查看这些数据。
|
||||
|
||||
### 意外数据泄露
|
||||
|
||||
**日志记录**
|
||||
|
||||
开发者应谨慎公开 **调试信息**,因为这可能导致敏感数据泄露。推荐使用工具 [**pidcat**](https://github.com/JakeWharton/pidcat) 和 `adb logcat` 来监控应用程序日志,以识别和保护敏感信息。**Pidcat** 因其易用性和可读性而受到青睐。
|
||||
开发人员应谨慎公开**调试信息**,因为这可能导致敏感数据泄露。建议使用工具 [**pidcat**](https://github.com/JakeWharton/pidcat) 和 `adb logcat` 来监控应用程序日志,以识别和保护敏感信息。**Pidcat**因其易用性和可读性而受到青睐。
|
||||
|
||||
> [!WARNING]
|
||||
> 请注意,从 **Android 4.0 及更高版本** 开始,**应用程序只能访问自己的日志**。因此,应用程序无法访问其他应用的日志。\
|
||||
> 无论如何,仍然建议 **不要记录敏感信息**。
|
||||
> 请注意,从**Android 4.0 及更高版本**开始,**应用程序只能访问自己的日志**。因此,应用程序无法访问其他应用的日志。\
|
||||
> 无论如何,仍然建议**不要记录敏感信息**。
|
||||
|
||||
**复制/粘贴缓冲区缓存**
|
||||
|
||||
Android 的 **基于剪贴板** 的框架使应用程序能够实现复制粘贴功能,但也带来了风险,因为 **其他应用程序** 可以 **访问** 剪贴板,可能会暴露敏感数据。对于应用程序的敏感部分,如信用卡详细信息,至关重要的是 **禁用复制/粘贴** 功能,以防止数据泄露。
|
||||
Android 的**基于剪贴板**的框架使应用程序能够实现复制粘贴功能,但由于**其他应用程序**可以**访问**剪贴板,可能会暴露敏感数据。因此,至关重要的是**禁用敏感部分的复制/粘贴**功能,例如信用卡详细信息,以防止数据泄露。
|
||||
|
||||
**崩溃日志**
|
||||
|
||||
如果应用程序 **崩溃** 并 **保存日志**,这些日志可能会帮助攻击者,特别是当应用程序无法被反向工程时。为了降低此风险,避免在崩溃时记录日志,如果必须通过网络传输日志,请确保通过 SSL 通道发送以确保安全。
|
||||
如果应用程序**崩溃**并**保存日志**,这些日志可能会帮助攻击者,特别是当应用程序无法被反向工程时。为了降低此风险,避免在崩溃时记录日志,如果必须通过网络传输日志,请确保通过 SSL 通道发送以确保安全。
|
||||
|
||||
作为渗透测试者,**请尝试查看这些日志**。
|
||||
作为渗透测试者,**请查看这些日志**。
|
||||
|
||||
**发送给第三方的分析数据**
|
||||
|
||||
应用程序通常集成像 Google Adsense 这样的服务,由于开发者的不当实现,可能会 **泄露敏感数据**。为了识别潜在的数据泄露,建议 **拦截应用程序的流量** 并检查是否有任何敏感信息被发送到第三方服务。
|
||||
应用程序通常集成像 Google Adsense 这样的服务,由于开发人员的不当实施,可能会无意中**泄露敏感数据**。为了识别潜在的数据泄露,建议**拦截应用程序的流量**并检查是否有任何敏感信息被发送到第三方服务。
|
||||
|
||||
### SQLite 数据库
|
||||
|
||||
大多数应用程序将使用 **内部 SQLite 数据库** 来保存信息。在渗透测试期间,查看创建的 **数据库**、**表** 和 **列** 的名称以及所有保存的 **数据**,因为您可能会发现 **敏感信息**(这将是一个漏洞)。\
|
||||
数据库应位于 `/data/data/the.package.name/databases`,如 `/data/data/com.mwr.example.sieve/databases`。
|
||||
大多数应用程序将使用**内部 SQLite 数据库**来保存信息。在渗透测试期间,请**查看**创建的**数据库**、**表**和**列**的名称以及所有保存的**数据**,因为您可能会发现**敏感信息**(这将是一个漏洞)。\
|
||||
数据库应位于 `/data/data/the.package.name/databases`,例如 `/data/data/com.mwr.example.sieve/databases`
|
||||
|
||||
如果数据库保存机密信息并且 **加密** 但您可以在应用程序中 **找到** **密码**,这仍然是一个 **漏洞**。
|
||||
如果数据库保存机密信息并且是**加密的**,但您可以在应用程序中**找到**密码,这仍然是一个**漏洞**。
|
||||
|
||||
使用 `.tables` 枚举表,使用 `.schema <table_name>` 枚举表的列。
|
||||
|
||||
### Drozer(利用活动、内容提供者和服务)
|
||||
|
||||
来自 [Drozer 文档](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf):**Drozer** 允许您 **假设 Android 应用程序的角色** 并与其他应用程序交互。它可以做 **任何已安装应用程序可以做的事情**,例如利用 Android 的进程间通信(IPC)机制并与底层操作系统交互。\
|
||||
Drozer 是一个有用的工具,可以 **利用导出活动、导出服务和内容提供者**,正如您将在以下部分中学习的那样。
|
||||
来自 [Drozer 文档](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf):**Drozer** 允许您**假设 Android 应用程序的角色**并与其他应用程序交互。它可以执行**已安装应用程序可以做的任何事情**,例如利用 Android 的进程间通信(IPC)机制并与底层操作系统交互。\
|
||||
Drozer 是一个有用的工具,可以**利用导出活动、导出服务和内容提供者**,正如您将在以下部分中学习的那样。
|
||||
|
||||
### 利用导出活动
|
||||
|
||||
[**如果您想刷新 Android 活动的概念,请阅读此文。**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
还要记住,活动的代码从 **`onCreate`** 方法开始。
|
||||
还要记住,活动的代码从**`onCreate`**方法开始。
|
||||
|
||||
**授权绕过**
|
||||
|
||||
当一个活动被导出时,您可以从外部应用程序调用其界面。因此,如果一个包含 **敏感信息** 的活动被 **导出**,您可以 **绕过** **认证** 机制 **以访问它**。
|
||||
当活动被导出时,您可以从外部应用程序调用其屏幕。因此,如果导出一个包含**敏感信息**的活动,您可能会**绕过**访问它的**身份验证**机制。
|
||||
|
||||
[**了解如何使用 Drozer 利用导出活动。**](drozer-tutorial/index.html#activities)
|
||||
|
||||
@ -318,46 +319,46 @@ Drozer 是一个有用的工具,可以 **利用导出活动、导出服务和
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**注意**: MobSF 会将使用 _**singleTask/singleInstance**_ 作为 `android:launchMode` 的活动检测为恶意,但由于 [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750),显然这在旧版本(API 版本 < 21)中才是危险的。
|
||||
**注意**:MobSF会将使用_**singleTask/singleInstance**_作为活动中的`android:launchMode`视为恶意,但由于[this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750),显然这在旧版本(API版本<21)中才是危险的。
|
||||
|
||||
> [!NOTE]
|
||||
> [!提示]
|
||||
> 请注意,授权绕过并不总是一个漏洞,这取决于绕过的工作方式和暴露的信息。
|
||||
|
||||
**敏感信息泄露**
|
||||
|
||||
**活动也可以返回结果**。如果你设法找到一个导出且未保护的活动调用 **`setResult`** 方法并 **返回敏感信息**,则存在敏感信息泄露。
|
||||
**活动也可以返回结果**。如果您设法找到一个导出且未保护的活动调用**`setResult`**方法并**返回敏感信息**,则存在敏感信息泄露。
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
如果未防止 tapjacking,你可能会滥用导出的活动使 **用户执行意外操作**。有关 [**tapjacking 的更多信息,请查看链接**](#tapjacking)。
|
||||
如果未防止tapjacking,您可能会滥用导出活动使**用户执行意外操作**。有关[**tapjacking是什么的更多信息,请查看链接**](#tapjacking)。
|
||||
|
||||
### 利用内容提供者 - 访问和操纵敏感信息
|
||||
|
||||
[**如果你想刷新内容提供者是什么,请阅读此内容。**](android-applications-basics.md#content-provider)\
|
||||
内容提供者基本上用于 **共享数据**。如果一个应用程序有可用的内容提供者,你可能能够 **提取敏感** 数据。测试可能的 **SQL 注入** 和 **路径遍历** 也很有趣,因为它们可能存在漏洞。
|
||||
[**如果您想刷新内容提供者是什么,请阅读此内容。**](android-applications-basics.md#content-provider)\
|
||||
内容提供者基本上用于**共享数据**。如果一个应用程序有可用的内容提供者,您可能能够**提取敏感**数据。测试可能的**SQL注入**和**路径遍历**也很有趣,因为它们可能存在漏洞。
|
||||
|
||||
[**学习如何使用 Drozer 利用内容提供者。**](drozer-tutorial/index.html#content-providers)
|
||||
[**了解如何使用Drozer利用内容提供者。**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
### **利用服务**
|
||||
|
||||
[**如果你想刷新服务是什么,请阅读此内容。**](android-applications-basics.md#services)\
|
||||
请记住,服务的操作始于方法 `onStartCommand`。
|
||||
[**如果您想刷新服务是什么,请阅读此内容。**](android-applications-basics.md#services)\
|
||||
请记住,服务的操作始于方法`onStartCommand`。
|
||||
|
||||
服务基本上是可以 **接收数据**、**处理** 数据并 **返回**(或不返回)响应的东西。因此,如果一个应用程序导出了一些服务,你应该 **检查** 其 **代码** 以了解它在做什么,并 **动态测试** 以提取机密信息、绕过身份验证措施...\
|
||||
[**学习如何使用 Drozer 利用服务。**](drozer-tutorial/index.html#services)
|
||||
服务基本上是可以**接收数据**、**处理**它并**返回**(或不返回)响应的东西。因此,如果一个应用程序导出了一些服务,您应该**检查**代码以了解它在做什么,并**动态**测试以提取机密信息、绕过身份验证措施...\
|
||||
[**了解如何使用Drozer利用服务。**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **利用广播接收器**
|
||||
|
||||
[**如果你想刷新广播接收器是什么,请阅读此内容。**](android-applications-basics.md#broadcast-receivers)\
|
||||
请记住,广播接收器的操作始于方法 `onReceive`。
|
||||
[**如果您想刷新广播接收器是什么,请阅读此内容。**](android-applications-basics.md#broadcast-receivers)\
|
||||
请记住,广播接收器的操作始于方法`onReceive`。
|
||||
|
||||
广播接收器将等待某种类型的消息。根据接收器如何处理消息,它可能会存在漏洞。\
|
||||
[**学习如何使用 Drozer 利用广播接收器。**](#exploiting-broadcast-receivers)
|
||||
[**了解如何使用Drozer利用广播接收器。**](#exploiting-broadcast-receivers)
|
||||
|
||||
### **利用方案 / 深度链接**
|
||||
### **利用方案/深度链接**
|
||||
|
||||
你可以手动查找深度链接,使用像 MobSF 这样的工具或像 [这个](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) 的脚本。\
|
||||
你可以使用 **adb** 或 **浏览器** 打开声明的 **方案**:
|
||||
您可以手动查找深度链接,使用像MobSF这样的工具或像[this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py)这样的脚本。\
|
||||
您可以使用**adb**或**浏览器**打开声明的**方案**:
|
||||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
@ -407,19 +408,21 @@ SSL 钉扎是一种安全措施,应用程序将服务器的证书与存储在
|
||||
|
||||
针对**API Level 24 及以上**的应用程序需要修改网络安全配置以接受代理的 CA 证书。这一步对于检查加密流量至关重要。有关修改网络安全配置的说明,[**请参考此教程**](make-apk-accept-ca-certificate.md)。
|
||||
|
||||
如果**Flutter**被使用,您需要遵循[**此页面**](flutter.md)中的说明。这是因为,仅将证书添加到存储中是行不通的,因为 Flutter 有自己有效 CA 的列表。
|
||||
|
||||
#### 绕过 SSL 钉扎
|
||||
|
||||
当实施 SSL 钉扎时,绕过它成为检查 HTTPS 流量的必要条件。为此有多种方法可用:
|
||||
|
||||
- 自动**修改** **apk**以**绕过** SSLPinning,使用[**apk-mitm**](https://github.com/shroudedcode/apk-mitm)。此选项的最大优点是,您无需 root 即可绕过 SSL 钉扎,但您需要删除应用程序并重新安装新版本,这并不总是有效。
|
||||
- 自动**修改** **apk**以**绕过** SSL 钉扎,使用[**apk-mitm**](https://github.com/shroudedcode/apk-mitm)。此选项的最大优点是您无需 root 即可绕过 SSL 钉扎,但您需要删除应用程序并重新安装新版本,这并不总是有效。
|
||||
- 您可以使用**Frida**(下面讨论)来绕过此保护。这里有一个使用 Burp+Frida+Genymotion 的指南:[https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
- 您还可以尝试使用[**objection**](frida-tutorial/objection-tutorial.md)**自动绕过 SSL 钉扎**:`objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- 您还可以尝试使用**MobSF 动态分析**(下面解释)**自动绕过 SSL 钉扎**
|
||||
- 如果您仍然认为有一些流量未被捕获,您可以尝试**使用 iptables 将流量转发到 burp**。阅读此博客:[https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### 寻找常见的 Web 漏洞
|
||||
#### 寻找常见的网络漏洞
|
||||
|
||||
在应用程序中搜索常见的 Web 漏洞也很重要。有关识别和缓解这些漏洞的详细信息超出了本摘要的范围,但在其他地方有广泛的覆盖。
|
||||
在应用程序中搜索常见的网络漏洞也很重要。有关识别和缓解这些漏洞的详细信息超出了本摘要的范围,但在其他地方有广泛的覆盖。
|
||||
|
||||
### Frida
|
||||
|
||||
@ -437,7 +440,7 @@ SSL 钉扎是一种安全措施,应用程序将服务器的证书与存储在
|
||||
|
||||
检查应用程序是否在内存中存储不应存储的敏感信息,如密码或助记符。
|
||||
|
||||
使用[**Fridump3**](https://github.com/rootbsd/fridump3)可以转储应用程序的内存:
|
||||
使用[**Fridump3**](https://github.com/rootbsd/fridump3),您可以转储应用程序的内存:
|
||||
```bash
|
||||
# With PID
|
||||
python3 fridump3.py -u <PID>
|
||||
@ -474,7 +477,7 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
||||
|
||||
快照通常存储在: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android 提供了一种方法来 **通过设置 FLAG_SECURE** 布局参数来防止屏幕截图的捕获。使用此标志后,窗口内容被视为安全,防止其出现在屏幕截图中或在不安全的显示器上查看。
|
||||
Android 提供了一种方法来 **通过设置 FLAG_SECURE** 布局参数来防止屏幕截图的捕获。使用此标志,窗口内容被视为安全,防止其出现在屏幕截图中或在不安全的显示器上查看。
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -484,24 +487,24 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
|
||||
### 意图注入
|
||||
|
||||
开发人员经常创建代理组件,如活动、服务和广播接收器,处理这些意图并将其传递给 `startActivity(...)` 或 `sendBroadcast(...)` 等方法,这可能存在风险。
|
||||
开发人员经常创建代理组件,如活动、服务和广播接收器,这些组件处理这些意图并将其传递给 `startActivity(...)` 或 `sendBroadcast(...)` 等方法,这可能存在风险。
|
||||
|
||||
危险在于允许攻击者通过错误引导这些意图来触发未导出的应用组件或访问敏感内容提供者。一个显著的例子是 `WebView` 组件通过 `Intent.parseUri(...)` 将 URL 转换为 `Intent` 对象,然后执行它们,这可能导致恶意意图注入。
|
||||
|
||||
### 重要要点
|
||||
|
||||
- **意图注入** 类似于网络的开放重定向问题。
|
||||
- 利用涉及将 `Intent` 对象作为额外参数传递,这可能被重定向以执行不安全的操作。
|
||||
- 利用涉及将 `Intent` 对象作为附加项传递,这可能被重定向以执行不安全的操作。
|
||||
- 它可以将未导出的组件和内容提供者暴露给攻击者。
|
||||
- `WebView` 的 URL 到 `Intent` 的转换可能促进意外操作。
|
||||
- `WebView` 的 URL 到 `Intent` 转换可以促进意外操作。
|
||||
|
||||
### Android 客户端侧注入及其他
|
||||
|
||||
您可能对这种类型的漏洞有所了解。您必须特别小心 Android 应用中的这些漏洞:
|
||||
|
||||
- **SQL 注入:** 在处理动态查询或内容提供者时,确保使用参数化查询。
|
||||
- **JavaScript 注入 (XSS):** 验证任何 WebViews 的 JavaScript 和插件支持是否已禁用(默认情况下禁用)。 [更多信息在这里](webview-attacks.md#javascript-enabled)。
|
||||
- **本地文件包含:** WebViews 应禁用对文件系统的访问(默认情况下启用) - `(webview.getSettings().setAllowFileAccess(false);)`。 [更多信息在这里](webview-attacks.md#javascript-enabled)。
|
||||
- **JavaScript 注入 (XSS):** 验证任何 WebViews 的 JavaScript 和插件支持是否已禁用(默认情况下禁用)。 [更多信息请查看](webview-attacks.md#javascript-enabled)。
|
||||
- **本地文件包含:** WebViews 应禁用对文件系统的访问(默认情况下启用) - `(webview.getSettings().setAllowFileAccess(false);)`。 [更多信息请查看](webview-attacks.md#javascript-enabled)。
|
||||
- **持久性 Cookie:** 在多个情况下,当 Android 应用结束会话时,Cookie 并未被撤销,甚至可能被保存到磁盘。
|
||||
- [**Cookie 中的安全标志**](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
|
||||
@ -523,11 +526,11 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
注意,MobSF 可以分析 **Android**(apk)**、IOS**(ipa) **和 Windows**(apx) 应用程序(_Windows 应用程序必须从安装在 Windows 主机上的 MobSF 进行分析_)。\
|
||||
此外,如果您创建一个包含 **Android** 或 **IOS** 应用程序源代码的 **ZIP** 文件(转到应用程序的根文件夹,选择所有内容并创建一个 ZIP 文件),它也能够分析它。
|
||||
|
||||
MobSF 还允许您进行 **diff/比较** 分析,并集成 **VirusTotal**(您需要在 _MobSF/settings.py_ 中设置您的 API 密钥并启用它:`VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)。您还可以将 `VT_UPLOAD` 设置为 `False`,这样 **hash** 将被 **上传** 而不是文件。
|
||||
MobSF 还允许您进行 **diff/比较** 分析并集成 **VirusTotal**(您需要在 _MobSF/settings.py_ 中设置您的 API 密钥并启用它:`VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)。您还可以将 `VT_UPLOAD` 设置为 `False`,这样 **hash** 将被 **上传** 而不是文件。
|
||||
|
||||
### 使用 MobSF 进行辅助动态分析
|
||||
|
||||
**MobSF** 在 **Android** 的 **动态分析** 中也非常有用,但在这种情况下,您需要在主机上安装 MobSF 和 **genymotion**(虚拟机或 Docker 不会工作)。_注意:您需要 **先在 genymotion 中启动虚拟机**,然后 **再启动 MobSF。**_\
|
||||
**MobSF** 对于 **Android** 的 **动态分析** 也非常有帮助,但在这种情况下,您需要在主机上安装 MobSF 和 **genymotion**(虚拟机或 Docker 不会工作)。_注意:您需要 **先在 genymotion 中启动虚拟机**,然后 **再启动 MobSF。**_\
|
||||
**MobSF 动态分析器** 可以:
|
||||
|
||||
- **转储应用程序数据**(URLs、日志、剪贴板、您拍摄的屏幕截图、由 "**Exported Activity Tester**" 拍摄的屏幕截图、电子邮件、SQLite 数据库、XML 文件和其他创建的文件)。所有这些都是自动完成的,除了屏幕截图,您需要在想要截图时按下,或者您需要按 "**Exported Activity Tester**" 以获取所有导出活动的屏幕截图。
|
||||
@ -555,11 +558,11 @@ MobSF 还允许您加载自己的 **Frida 脚本**(要将您的 Frida 脚本
|
||||
- **搜索类模式**:按模式搜索类
|
||||
- **跟踪类方法**:**跟踪** 一个 **整个类**(查看该类所有方法的输入和输出)。请记住,默认情况下 MobSF 跟踪几个有趣的 Android API 方法。
|
||||
|
||||
一旦您选择了要使用的辅助模块,您需要按“**开始仪器化**”,您将看到所有输出在“**Frida 实时日志**”中。
|
||||
一旦您选择了要使用的辅助模块,您需要按“**开始仪器化**”,您将在“**Frida 实时日志**”中看到所有输出。
|
||||
|
||||
**Shell**
|
||||
|
||||
Mobsf 还为您提供一个带有一些 **adb** 命令、**MobSF 命令** 和常见 **shell** **命令** 的 shell,位于动态分析页面的底部。一些有趣的命令:
|
||||
Mobsf 还为您提供了一个带有一些 **adb** 命令、**MobSF 命令** 和常见 **shell** **命令** 的 shell,位于动态分析页面的底部。一些有趣的命令:
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
@ -570,19 +573,19 @@ receivers
|
||||
```
|
||||
**HTTP工具**
|
||||
|
||||
当http流量被捕获时,您可以在“**HTTP(S) Traffic**”底部看到捕获流量的丑陋视图,或在“**Start HTTPTools**”绿色按钮中看到更好的视图。从第二个选项中,您可以**发送** **捕获的请求**到像Burp或Owasp ZAP这样的**代理**。\
|
||||
当http流量被捕获时,您可以在“**HTTP(S) Traffic**”底部看到捕获流量的丑陋视图,或在“**Start HTTPTools**”绿色按钮中看到更好的视图。从第二个选项中,您可以**发送** **捕获的请求**到**代理**如Burp或Owasp ZAP。\
|
||||
为此,_打开Burp -->_ _关闭拦截 --> 在MobSB HTTPTools中选择请求_ --> 按下“**Send to Fuzzer**” --> _选择代理地址_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))。
|
||||
|
||||
完成MobSF的动态分析后,您可以按“**Start Web API Fuzzer**”来**模糊http请求**并寻找漏洞。
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> 在使用MobSF进行动态分析后,代理设置可能会配置错误,您将无法从GUI中修复它们。您可以通过以下方式修复代理设置:
|
||||
>
|
||||
> ```
|
||||
> adb shell settings put global http_proxy :0
|
||||
> ```
|
||||
|
||||
### 使用Inspeckage的辅助动态分析
|
||||
### 使用Inspeckage进行辅助动态分析
|
||||
|
||||
您可以从[**Inspeckage**](https://github.com/ac-pm/Inspeckage)获取该工具。\
|
||||
该工具将使用一些**Hooks**来让您了解**在进行动态分析时应用程序中发生了什么**。
|
||||
@ -617,7 +620,7 @@ reverse-apk relative/path/to/APP.apk
|
||||
|
||||
SUPER 是一个可以在 Windows、MacOS X 和 Linux 上使用的命令行应用程序,旨在分析 _.apk_ 文件以寻找漏洞。它通过解压 APK 并应用一系列规则来检测这些漏洞。
|
||||
|
||||
所有规则都集中在一个 `rules.json` 文件中,每个公司或测试人员都可以创建自己的规则来分析他们需要的内容。
|
||||
所有规则都集中在一个 `rules.json` 文件中,每个公司或测试人员可以创建自己的规则来分析他们需要的内容。
|
||||
|
||||
从 [download page](https://superanalyzer.rocks/download.html) 下载最新的二进制文件。
|
||||
```
|
||||
@ -657,7 +660,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA** 是一个 **M**obile **A**pplication **R**everse engineering 和 **A**nalysis Framework。它是一个将常用的移动应用程序逆向工程和分析工具整合在一起的工具,旨在帮助测试移动应用程序以应对 OWASP 移动安全威胁。其目标是使这一任务对移动应用程序开发人员和安全专业人员更加简单和友好。
|
||||
**MARA** 是一个 **M**obile **A**pplication **R**everse engineering 和 **A**nalysis Framework。它是一个将常用的移动应用程序逆向工程和分析工具整合在一起的工具,旨在帮助测试移动应用程序以应对 OWASP 移动安全威胁。其目标是使这一任务对移动应用程序开发者和安全专业人员更加简单和友好。
|
||||
|
||||
它能够:
|
||||
|
||||
@ -678,7 +681,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||
|
||||
来自 [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** 是一个开源命令行工具,用于缩小、优化和混淆 Java 代码。它能够优化字节码,并检测和删除未使用的指令。ProGuard 是免费软件,按照 GNU 通用公共许可证第 2 版分发。
|
||||
来自 [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** 是一个开源命令行工具,用于缩小、优化和混淆 Java 代码。它能够优化字节码,并检测和删除未使用的指令。ProGuard 是自由软件,按照 GNU 通用公共许可证第 2 版分发。
|
||||
|
||||
ProGuard 作为 Android SDK 的一部分分发,并在以发布模式构建应用程序时运行。
|
||||
|
||||
@ -691,12 +694,12 @@ ProGuard 作为 Android SDK 的一部分分发,并在以发布模式构建应
|
||||
- 将资源加载为 InputStream;
|
||||
- 将结果传递给继承自 FilterInputStream 的类以进行解密;
|
||||
- 进行一些无用的混淆,以浪费反向工程师几分钟的时间;
|
||||
- 将解密后的结果传递给 ZipInputStream 以获取 DEX 文件;
|
||||
- 将解密的结果传递给 ZipInputStream 以获取 DEX 文件;
|
||||
- 最后使用 `loadDex` 方法将结果 DEX 作为资源加载。
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard 逆转 Android 混淆工具执行的混淆过程。这使得进行多种安全分析成为可能,包括代码检查和预测库。**
|
||||
**DeGuard 逆转了 Android 混淆工具执行的混淆过程。这使得许多安全分析成为可能,包括代码检查和预测库。**
|
||||
|
||||
您可以将混淆的 APK 上传到他们的平台。
|
||||
|
||||
@ -706,11 +709,11 @@ ProGuard 作为 Android SDK 的一部分分发,并在以发布模式构建应
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
它是一个 **通用的 Android 去混淆器。** Simplify **虚拟执行应用程序** 以理解其行为,然后 **尝试优化代码** 使其表现相同,但更易于人类理解。每种优化类型都简单且通用,因此无论使用何种特定类型的混淆都无关紧要。
|
||||
它是一个 **通用的 Android 去混淆器。** Simplify **虚拟执行应用程序** 以理解其行为,然后 **尝试优化代码** 使其行为相同,但更易于人类理解。每种优化类型都是简单和通用的,因此无论使用何种特定类型的混淆都无关紧要。
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
APKiD 提供有关 **APK 制作方式** 的信息。它识别许多 **编译器**、**打包工具**、**混淆器** 和其他奇怪的东西。它是 Android 的 [_PEiD_](https://www.aldeid.com/wiki/PEiD)。
|
||||
APKiD 提供有关 **APK 是如何制作的** 信息。它识别许多 **编译器**、**打包工具**、**混淆器** 和其他奇怪的东西。它是 Android 的 [_PEiD_](https://www.aldeid.com/wiki/PEiD)。
|
||||
|
||||
### 手动
|
||||
|
||||
|
@ -0,0 +1,123 @@
|
||||
# Shizuku Privileged API
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Shizuku 是一个开源服务,**使用 `app_process` 启动一个特权 Java 进程**,并通过 Binder 暴露选定的 **Android 系统 API**。由于该进程以与 ADB 相同的 **`shell` UID 权限**启动,任何绑定到导出的 AIDL 接口的应用程序(或终端)都可以执行许多通常需要 **`WRITE_SECURE_SETTINGS`、`INSTALL_PACKAGES`、在 `/data` 内的文件 I/O** 等操作 – **无需获取设备的 root 权限**。
|
||||
|
||||
典型用例:
|
||||
* 从未 root 的手机进行安全审计
|
||||
* 移除预装软件 / 精简系统应用
|
||||
* 收集日志、Wi-Fi 密钥、进程和套接字信息以供蓝队/DFIR 使用
|
||||
* 从自定义应用或 shell 脚本自动配置设备
|
||||
|
||||
---
|
||||
## 1. 启动特权服务
|
||||
|
||||
`moe.shizuku.privileged.api` 可以通过三种不同方式启动 – 结果 Binder 服务在所有情况下表现相同。
|
||||
|
||||
### 1.1 无线 ADB (Android 11+)
|
||||
1. 启用 **开发者选项 ➜ 无线调试** 并配对设备。
|
||||
2. 在 Shizuku 应用中选择 **“通过无线调试启动”** 并复制配对代码。
|
||||
3. 服务在下次重启之前保持有效(无线调试会话在启动时清除)。
|
||||
|
||||
### 1.2 USB / 本地 ADB 一行命令
|
||||
```bash
|
||||
adb push start.sh \
|
||||
/storage/emulated/0/Android/data/moe.shizuku.privileged.api/
|
||||
|
||||
# spawn the privileged process
|
||||
adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh
|
||||
```
|
||||
相同的脚本可以通过 **network ADB** 连接执行(`adb connect <IP>:5555`)。
|
||||
|
||||
### 1.3 已获取 root 权限的设备
|
||||
如果设备已经获取了 root 权限,请运行:
|
||||
```bash
|
||||
su -c sh /data/adb/shizuku/start.sh
|
||||
```
|
||||
### 1.4 验证它是否正在运行
|
||||
```bash
|
||||
adb shell dumpsys activity service moe.shizuku.privileged.api | head
|
||||
```
|
||||
成功的启动返回 `Running services (1)` 以及特权进程的 PID。
|
||||
|
||||
---
|
||||
## 2. 从应用程序绑定
|
||||
第三方应用只需在其 `AndroidManifest.xml` 中包含以下内容:
|
||||
```xml
|
||||
<uses-permission android:name="moe.shizuku.manager.permission.API"/>
|
||||
```
|
||||
在运行时,他们获取了 binder:
|
||||
```java
|
||||
IBinder binder = ShizukuProvider.getBinder();
|
||||
IPackageManager pm = IPackageManager.Stub.asInterface(binder);
|
||||
```
|
||||
从此时起,应用程序可以调用任何**`shell`用户**可能调用的方法,例如:
|
||||
```java
|
||||
pm.installPackage(new Uri("file:///sdcard/app.apk"), null, 0, null);
|
||||
Settings.Global.putInt(resolver, Settings.Global.ADB_ENABLED, 1);
|
||||
```
|
||||
维护着一个超过 **170 个 Shizuku 启用应用程序** 的精选列表,地址在 [awesome-shizuku](https://github.com/timschneeb/awesome-shizuku)。
|
||||
|
||||
---
|
||||
## 3. Rish – 在 Termux 中的提升 shell
|
||||
Shizuku 设置屏幕显示 **“在终端应用中使用 Shizuku”**。启用它会下载 *rish* (`/data/local/tmp/rish`)。
|
||||
```bash
|
||||
pkg install wget
|
||||
wget https://rikka.app/rish/latest -O rish && chmod +x rish
|
||||
|
||||
# start elevated shell (inherits the binder connection)
|
||||
./rish
|
||||
whoami # ➜ shell
|
||||
id # uid=2000(shell) gid=2000(shell) groups=... context=u:r:shell:s0
|
||||
```
|
||||
### 3.1 有用的 rish shell 命令
|
||||
* 列出给定包的运行进程:
|
||||
```bash
|
||||
ps -A | grep com.facebook.katana
|
||||
```
|
||||
* 枚举监听套接字并将其映射到包(例如 **CVE-2019-6447 ES File Explorer**):
|
||||
```bash
|
||||
netstat -tuln
|
||||
for pid in $(lsof -nP -iTCP -sTCP:LISTEN -t); do
|
||||
printf "%s -> %s\n" "$pid" "$(cat /proc/$pid/cmdline)";
|
||||
done
|
||||
```
|
||||
* 转储每个应用程序的日志:
|
||||
```bash
|
||||
logcat -d | grep -iE "(error|exception)"
|
||||
```
|
||||
* 读取存储的 Wi-Fi 凭据(Android 11 及以上):
|
||||
```bash
|
||||
cat /data/misc/wifi/WifiConfigStore.xml | grep -i "<ConfigKey>"
|
||||
```
|
||||
* 批量卸载(示例):
|
||||
```bash
|
||||
pm uninstall --user 0 com.miui.weather2
|
||||
```
|
||||
|
||||
---
|
||||
## 4. 安全考虑 / 检测
|
||||
1. Shizuku 需要 **ADB 调试** 权限,因此 _开发者选项 → USB/无线调试_ 必须 **启用**。
|
||||
组织可以通过 MDM 或 `settings put global development_settings_enabled 0` 来阻止此操作。
|
||||
2. 该服务以 `moe.shizuku.privileged.api` 的名称注册自己。
|
||||
简单的 `adb shell service list | grep shizuku`(或端点安全规则)可以检测到它的存在。
|
||||
3. 功能仅限于 `shell` 用户已经可以做的事情 – 它 **不是 root**。
|
||||
需要 `system` 或 `root` 用户的敏感 API 仍然无法访问。
|
||||
4. 会话在重启后 **不会存活**,除非设备已获得 root 权限并且 Shizuku 被配置为启动守护进程。
|
||||
|
||||
---
|
||||
## 5. 缓解措施
|
||||
* 在生产设备上禁用 USB/无线调试。
|
||||
* 监控暴露 `moe.shizuku.privileged.api` 的 Binder 服务。
|
||||
* 使用 SELinux 策略(Android 企业)阻止未管理应用程序访问 AIDL 接口。
|
||||
|
||||
---
|
||||
## 参考文献
|
||||
|
||||
- [Blog – Shizuku: Unlocking Advanced Android Capabilities Without Root](https://www.mobile-hacker.com/2025/07/14/shizuku-unlocking-advanced-android-capabilities-without-root/)
|
||||
- [Shizuku 官方文档](https://shizuku.rikka.app/)
|
||||
- [awesome-shizuku – 支持的应用程序列表](https://github.com/timschneeb/awesome-shizuku)
|
||||
- [rish shell (特权反向 adb shell)](https://github.com/RikkaApps/Shizuku/blob/master/RISH.md)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
Loading…
x
Reference in New Issue
Block a user