hibalahrouf/Bypass-Root-Detection-sur-Android

GitHub: hibalahrouf/Bypass-Root-Detection-sur-Android

通过Frida动态插桩技术绕过Android RootBeer库的Root检测,系统对比了Medusa、Objection和纯Frida脚本三种方法的实战教程。

Stars: 0 | Forks: 0

# Root 检测绕过 — RootBeer 示例 通过动态插桩技术绕过 Android 上的 Root 检测。 探索了三种方法:**Medusa**、**Objection** 和 **Frida 纯脚本**。 ## 环境 | 工具 | 版本 | |-------|---------| | Python | 3.14.3 | | pip | 26.0.1 | | ADB | 1.0.41 | | Frida | 17.9.1 | | Objection | 1.12.4 | | Android Emulator | API 11 | ![环境](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/f19968d514154615.png) ## — Medusa Medusa 是一个基于 Frida 的模块化框架。它提供了开箱即用的“配方”,无需编写任何代码。 对于 RootBeer,我们从 Medusa 控制台加载 `rootbeer_detection_bypass` 模块。 **结果:** Java 层的绕过成功。SELinux 标志仍然为红色,需要通过 ADB 手动干预以强制其进入 Enforcing 状态。 ![Medusa 设置](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/b04555a50e154616.png) ## — Objection Objection 将 Frida 转化为一个交互式 shell。我们可以实时探索内存,列出类/方法并随时设置 hook。 ### 以 Spawn 模式启动 ``` objection -g com.scottyab.rootbeer.sample explore \ --startup-command "android root disable" \ --startup-command "android sslpinning disable" ``` `android root disable` 命令只需一条指令即可自动设置数十个 hook。我们通过 **Spawn** 模式注入,以便在首次检查之前就介入。 ![Objection Shell](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/37d2b3d491154617.png) **结果:** 所有 RootBeer 的检查项均显示为绿色,包括 SELinux。 ![Objection 100%](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/d1bfec069d154618.png) ### — 原生调用追踪 `frida-trace` 可用于隔离对 `fopen` 的调用,并确认该应用是否尝试打开系统文件(如 `/sbin/su`、`/system/bin/busybox`...)来检测 Root。 ## 🔧— Frida 纯脚本 这是技术性最强的实验:我们将编写自己的 JS 脚本,以了解 Medusa 和 Objection 在底层的运行机制。 ### `bypass_root_basic.js` — Java Hook 我们使用 `.overload()` 重写 RootBeer 库中的方法,以处理所有的方法签名。 ``` Java.perform(function() { var RootBeer = Java.use('com.scottyab.rootbeer.RootBeer'); var Build = Java.use('android.os.Build'); var Runtime = Java.use('java.lang.Runtime'); var SystemProperties = Java.use('android.os.SystemProperties'); var File = Java.use('java.io.File'); console.log('[*] MEGA-COMBINED BYPASS STARTING...'); // Toutes les méthodes de détection forcées à false var methods = [ 'detectTestKeys', 'detectRootManagementApps', 'detectPotentiallyDangerousApps', 'detectRootCloakingApps', 'checkForBinary', 'checkForSuBinary', 'checkForDangerousProps', 'checkForRWPaths', 'checkSuExists', 'isRooted' ]; methods.forEach(function(m) { try { RootBeer[m].overload().implementation = function() { return false; }; RootBeer[m].overload('java.lang.String').implementation = function(s) { return false; }; } catch(e) {} }); // Build.TAGS -> release-keys (pour TestKeys) try { Build.TAGS.value = "release-keys"; } catch(e) {} // SystemProperties -> neutralise debuggable/tags/secure SystemProperties.get.overload('java.lang.String').implementation = function(name) { if (name.includes("debuggable") || name.includes("tags")) return "0"; if (name.includes("secure")) return "1"; return this.get(name); }; // Runtime.exec -> bloque les commandes su/busybox/getprop Runtime.exec.overload('java.lang.String').implementation = function(cmd) { if (cmd.includes("getprop") || cmd.includes("su") || cmd.includes("busybox")) { console.log('[+] Blocked Runtime.exec: ' + cmd); return this.exec("echo release-keys"); } return this.exec(cmd); }; // File.exists -> su et busybox retournent false File.exists.implementation = function() { var name = this.getName(); if (name === "su" || name === "busybox") return false; return this.exists(); }; console.log('[+] ALL HOOKS INSTALLED - 100% GREEN TARGETED !'); }); ``` ![脚本 bypass_root_basic.js](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/884d17dd1e154620.png) ``` frida -U -f com.scottyab.rootbeer.sample -l bypass_root_basic.js ``` ![Frida 注入](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/49ba3c42a7154621.png) ### `bypass_native.js` — 绕过原生层检查 RootBeer 也使用了原生代码 (`RootBeerNative`)。我们在其执行前的 Java 层对其进行拦截。 ``` Java.perform(function() { console.log('[*] Tentative de bypass du code natif via Java...'); try { var RootBeerNative = Java.use('com.scottyab.rootbeer.RootBeerNative'); RootBeerNative.checkForRoot.implementation = function() { console.log('[+] Appel natif checkForRoot intercepté -> Retourne 0'); return 0; }; console.log('[+] Bypass natif installé avec succès !'); } catch(e) { console.log('[-] RootBeerNative introuvable : ' + e); } }); ``` ``` # 同时注入两个脚本 frida -U -f com.scottyab.rootbeer.sample -l bypass_root_basic.js -l bypass_native.js ``` ![Frida 双重绕过](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/a9f9e60cd2154622.png) **最终结果:所有检查均显示 NOT ROOTED ✅** ![最终结果](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/8c55247a5d154623.png) ## 工具对比 | 工具 | 优点 | 缺点 | 适用场景 | |-------|------|--------|-----------------| | **Medusa** | 快速,零代码 | 控制力较弱 | 快速批量分析 | | **Objection** | 实时探索,功能强大 | 预设脚本固定 | 应用程序渗透测试 | | **Frida 纯脚本** | 完全控制,定制化绕过 | 学习曲线较陡 | 高级研究 / 逆向工程 |
标签:Android安全, Android逆向, APP安全, Docker支持, Frida, Hook技术, Java Hook, Medusa, Native Hook, Objection, Root检测绕过, SELinux, 云资产清单, 反取证, 安全评估, 应用防护, 数据可视化, 数据展示, 移动安全测试, 移动应用安全, 红队, 绕过安全机制, 越狱检测绕过, 逆向工具, 逆向工程