From 957dd4071047f95568c4d6d25ec556b9211c7de4 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 19 Aug 2025 13:20:18 +0000 Subject: [PATCH] Translated ['src/mobile-pentesting/android-app-pentesting/frida-tutorial --- .../frida-tutorial/owaspuncrackable-1.md | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md index 1ca15b9d4..3ba65f4b6 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md @@ -5,14 +5,14 @@ --- -**这是文章的摘要**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\ +**这是帖子摘要**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\ **APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk) ## 解决方案 1 基于 [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1) -**Hook \_exit()**\_ 函数和 **decrypt function** 以便在你按下验证时在 frida 控制台打印标志: +**Hook _exit()** 函数和 **decrypt function** 以便在你按下验证时在 frida 控制台打印标志: ```javascript Java.perform(function () { send("Starting hooks OWASP uncrackable1...") @@ -115,4 +115,54 @@ return false send("Hooks installed.") }) ``` +--- + +## 解决方案 3 – `frida-trace` (Frida ≥ 16) + +如果您不想手动编写钩子,可以让 **Frida** 为您生成 Java 存根,然后进行编辑: +```bash +# Spawn the application and automatically trace the Java method we care about +aadb shell "am force-stop owasp.mstg.uncrackable1" +frida-trace -U -f owasp.mstg.uncrackable1 \ +-j 'sg.vantagepoint.a.a.a("[B","[B")[B' \ +-j 'sg.vantagepoint.a.c!*' \ +--output ./trace + +# The first run will create ./trace/scripts/sg/vantagepoint/a/a/a__B_B_B.js +# Edit that file and add the logic that prints the decrypted flag or +# returns a constant for the root-checks, then: +frida -U -f owasp.mstg.uncrackable1 -l ./trace/_loader.js --no-pause +``` +使用 Frida 16+ 生成的存根已经使用现代 **ES6** 模板语法,并将与内置的 *QuickJS* 运行时编译 – 您不再需要 `frida-compile`。 + +--- + +## 解决方案 4 – 使用 Objection 的单行命令 (2024) + +如果您安装了 **Objection >1.12**,您可以通过单个命令转储标志(Objection 在内部包装了 Frida): +```bash +objection -g owasp.mstg.uncrackable1 explore \ +--startup-command "android hooking watch class sg.vantagepoint.a.a method a \n && android hooking set return_value false sg.vantagepoint.a.c * \n && android hooking invoke sg.vantagepoint.a.a a '[B' '[B'" +``` +* `watch class` 打印 AES 例程返回的明文 +* `set return_value false` 强制每个 root / debugger 检查报告 *false* +* `invoke` 允许你直接调用方法而无需按 **Verify**。 + +> 注意:在 Android 14 (API 34) 上,你必须以 *spawn* 模式运行 Objection/Frida (`-f`),因为 *attach* 被 2024 年 10 月引入的 **seccomp-bpf** 限制阻止。 + +--- + +## 现代 Android 备注 (2023 - 2025) + +* **libsu 5.x** 和 **Zygisk** 隐藏 *su* 相当好;然而,如果文件 `/system/bin/su` 存在,Level 1 中基于 Java 的检查仍然会失败。确保启用 **denylist** 或者简单地用 Frida 钩住 `java.io.File.exists()`。 +* Frida 16.1 修复了由 Google 的 *Scudo* 分配器引起的 **Android 12/13** 崩溃。如果你看到 `Abort message: 'missing SHADOW_OFFSET'`,请升级 Frida(或使用预构建的 17.0 夜间版)。 +* 因为 Play Integrity 在 2023 年取代了 SafetyNet,一些较新的应用调用 **com.google.android.gms.tasks.Task** API。Level 1 不这样做,但这里展示的相同钩住策略有效 – 钩住 `com.google.android.gms.safetynet.SafetyNetClient` 并返回伪造的 *EvaluationType*。 + +## 参考 + +* Frida 发布公告 – "Frida 16.0 (2023-04-02): Android 12/13 可靠性修复 & spawn API 彻底改造" +* Objection 1.12 – "仅 spawn 模式适用于 Android 14" (BlackHat USA 2024 演讲幻灯片) + + + {{#include ../../../banners/hacktricks-training.md}}