JS逆向与算法分析
实战路线预览
本文带大家从混合App Web层抓包分析,到算法混淆破解/追踪,最后用Frida-RPC直接生成加密签名,完成一套通用的混合App逆向闭环,解决加密参数无法还原的痛点。
1. 混合应用(Hybrid App)抓包
混合应用的核心是WebView+原生容器,Web层走HTTP/S可抓包,原生层调用硬件或做本地逻辑,WebView之间用Bridge桥接。这类应用的抓包调试,关键是拿到WebView的访问权。
1.1 核心架构扫盲
常见Hybrid框架与通信方式
简化版Bridge通信示例
先看一眼混合应用的内部数据传递逻辑,方便后续Hook定位:
1.2 Chrome DevTools远程调试
调试Web层最直接的工具就是Chrome DevTools,但目标App必须开启WebView调试模式——如果没开,我们可以用Frida临时补上!
前置检查
- Android设备/模拟器已开启「USB调试」
- 电脑已安装ADB、Chrome(建议最新版,兼容新版DevTools Protocol)
- 已拿到目标App的包名(用
adb shell dumpsys window | grep mCurrentFocus快速查看)
三步开启调试
临时开启调试的Frida脚本:
运行方式:
1.3 WebView调试进阶:必用的两个技巧
1. 全局Hook抓包(绕开WebView禁用代理/缓存)
有些App会通过系统设置禁用WebView的HTTP/S代理,或者把请求藏在WebWorker里Network面板看不到——这时候直接在DevTools的「Sources → Snippets」注入Hook脚本就行:
2. 一键搜索算法关键词
抓包后会发现加密参数(比如sign、token、auth),接下来要快速找到生成这些参数的代码:
- 步骤1:打开DevTools「Sources → Search in Files」(快捷键
Ctrl+Shift+F/Cmd+Option+F) - 步骤2:输入核心关键词(按优先级排序):
- 加密参数名:
sign、calcSign、generateSignature - 加密库调用:
CryptoJS、AES、MD5、SHA - 字符串编码:
Base64、encodeURIComponent(二次加密常用)
- 加密参数名:
- 步骤3:点击结果中的文件,右键「Reveal in Navigator」定位到混淆代码,右键「Deobfuscate source」自动格式化
2. Frida-RPC调用技术
如果遇到混淆太彻底无法还原的JS代码,或者加密逻辑放在原生层.so库,最好的办法就是直接调用App内部已经有的算法函数——Frida-RPC能帮你把这些函数“导出”到Python/Node.js的外部脚本里。
2.1 快速搭建RPC服务
1. Frida侧JS脚本(导出函数)
假设我们已经找到了生成API签名的原生Java类com.target.app.util.SecurityUtils,有个静态方法calcApiSign(Map<String, String> params),现在把它导出:
2. Python侧客户端(调用RPC)
写个简单的Python封装类,以后可以复用在所有混合App逆向项目里:
总结
本文整理了一套轻量级、高复用的混合App逆向方案:
- 抓包调试:用Frida临时开启WebView调试,配合全局Hook脚本抓全所有请求
- 算法定位:用DevTools关键词搜索,结合调用栈追踪找到入口
- 快速调用:如果代码太复杂,直接用Frida-RPC导出内部函数,外部脚本一键生成加密参数
如果遇到加壳的.so库,可以进一步结合Unidbg模拟Native执行;如果是WebAssembly,可以用wasm-decompile反编译后分析。

