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/frida-tutorial
This commit is contained in:
parent
a1bca06d09
commit
957dd40710
@ -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}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user