Translated ['src/mobile-pentesting/android-app-pentesting/frida-tutorial

This commit is contained in:
Translator 2025-08-19 13:20:18 +00:00
parent a1bca06d09
commit 957dd40710

View File

@ -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}}