SuperAPI AI 工具集

reversing-react-native-apps

前端与建站

查看项目

更新于 10-16 02:28

技能介绍

用途:对 React Native 移动应用做逆向工程。当 jadx 只看到 ReactActivity、ReactNativeHost 而几乎没有业务逻辑,或 APK 内存在 assets/index.android.bundle、lib/*/libhermes.so,或 IPA 内含 main.jsbundle 时适用;用于查找 API 端点、密钥和业务逻辑,或对 JavaScript 层行为打补丁与挂钩。Flutter、Unity、原生 Java/Kotlin 或 C/C++ 原生模块应改用其他技能。

识别格式:解出 bundle 后用 file 与 xxd 看头部。可读 JS(var __BUNDLE_START、__d(function)为纯 JavaScript,可直接美化阅读,并常可检查是否误带 index.android.bundle.map。二进制且含 Hermes 魔数(c6 1f bc 03 小端)为 Hermes 字节码。

Hermes 字节码:HBC 版本嵌在头部,随 React Native 版本变化,是最大障碍。上游 hbctool 仅支持 HBC 59、62、74,其他版本会解析失败。先用 hbctool disasm 读版本再选工具:hbctool 可反汇编与重组(可打补丁重打包),hermes-dec 输出近似伪 JavaScript 但只读,hasmer 提供替代版本覆盖。全部拒绝时可从对应 React Native 版本构建匹配的 hermesc。字符串表通常完好,可先用 strings 配合 rg 直接找端点、密钥与开关。

运行时分析:Frida 常用于 RN,因为关注点在 JavaScript 调用原生的边界,可枚举 NativeModules、挂钩 ReactNative 桥或 TurboModule 分发,objection 亦可。可关注 fetch/XMLHttpRequest、OkHttp、AsyncStorage 读写及自定义 NativeModules。RN 使用平台 HTTP 栈,常规系统 CA 加代理与标准证书固定绕过可用;若拦截失败,应考虑原生模块中的证书固定。

常见问题:bundle 中的密钥与配置、客户端授权检查、AsyncStorage 默认不加密存凭证、权限过宽的自定义原生模块、以及发布版残留的 source map 与调试输出。

限制与注意:打补丁重打包需授权,可能触发完整性校验;Hermes 非加密,字符串表常直接泄露信息。仅限授权测试。