文章总结: 本文介绍了利用Burp插件Brida结合Frida进行APP流量自动解密的实战方法。文章详述了环境搭建、插件配置、定位加密算法、编写JS脚本及集成Burp组件的流程。该方法能自动处理加解密,使测试人员能在Burp中直接对加密数据进行Fuzz测试,有效提升了复杂场景下的APP渗透测试效率。
综合评分: 90
文章分类: 移动安全,渗透测试,逆向分析,安全工具
Brida 实战:一键解密APP HTTPS流量
原创
vv7f
vv7f
0xSecurity
2026年2月2日 11:37
广东
1.1. 前言
在我们日常做 APP 安全测试过程中,经常会遇到数据包加密或者带有 sign 的场景,我们这时候就很难去直接下手,而一般做
法就是去逆向 APP ,然后分析源码,找到加解密算法或 sign 的算法,然后去编写脚本去进行 fuzz ,有时候还会遇到各种加壳混淆加固,非常麻烦,那么有什么办法能快速方便的辅助我们测试呢?下边便给出了解决方案,如何利用 Brida 解决复杂场
景下安全测试。
Brida 是 Burp 的一个插件,用来连接 Burp 和 Frida ( Frida 是一个轻量级的 hook 框架,得益于它动态和灵活的特性,在移动端安
全测试中非常常用),它自带了一些绕过安全特性的 hooks ,我们也可定义自己的 hook ,我们可以通过它去直接 hook 调用
APP 中的加解密或签名函数,进而完成我们各种 fuzz 测试。它能辅助我们完成一些复杂场景下的测试,极大的提升了效率。
1.2. 环境搭建
1. 本地安装 Frida 客户端环境
frida --version
查看 frida 版本信息
2. 手机中安装 Firda 服务端
https://github.com/frida/frida/releases
下载 firda-server 二进制文件(注意与本机安装的 firda 版本和手机 cpu 版本匹配)
查看 Android 手机设备设置:
getprop ro.product.cpu.abi
根据 cpu 版本型号下载对应的 firda-server
3. 使用 adb 将 frida-server 复制到手机中
pip install frida
pip install frida-tools
pip install Pyro
npm install frida-compile
- 启动 frida-server
5. frida 端口转发
1.3. Brida 安装和配置
1.3.1. 基础配置
BApp Store 安装 Brida 插件
adb root
adb push frida-server /data/local/tmp/
adb shell "chmod 755 /data/local/tmp/frida-server"
adb shell "/data/local/tmp/frida-server &"
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
Python binary path : python2.7 或 3.x ,取决于安装的版本Pyro host/port :启动 Pyro 服务器配置,默认 Pyro 服务器将在 localhost:9999 上启动, Pyro4 是 Brida 与 Frida 通信的中间件frida-compile path : Frida 编译器的二进制文件的路径Frida JS files folder :存放 fridaJS 的目录,先选择一个文件,然后点击 Create default js file ,会在选择目录下
生成默认相关的文件,不可删除Application ID (spawn) / PID (attach) :要 spawn 的应用程序 ID 或者 attach 的 PID
获取目标应用程序 ID ( spawn mode ):
Android
frida-ps -Uai
打开 AndroidManifest.xml ,查看 package 包名
IOS
frida-ps -Rai
PS :如果使用 frida gadget ,则 PID 为 re.frida.Gadget 不变
获取目标程序 PID ( attach mode ):
Android :
- 运行目标程序
- 执行以下命令:
frida-ps -U
IOS :
- 运行目标程序
- 执行以下命令:
frida-ps -R
1.3.2. Brida 的相关 JS 文件
当点击 Create default js file ,会在选择目录下生成以下默认相关的 4 个文件:
brida.js :该文件引入了其他 JS 文件的所有 hooks ,用户在此自定义编写的自己的 hooks/functions/exports 。bridaFunctions.js :包含了 Brida 各部件使用的所有 hooksandroidDefaultHooks.js :包含了大量 Android 用于处理和绕过一些常见安全特性的 hooks ,比如像 SSL Pinning 绕过、
root 检测绕过、指纹检测绕过等,可以在 Hooks and functions — Android 一栏确定是否 enable 。
iosDefaultHooks.js :包含了大量 IOS 用于处理和绕过一些常见安全特性的 hooks ,一样也是可以在 Hooks and functions — Android 一栏确定是否 enable 。
当我们分析一个新应用程序时,点击 Create default js file ,会将新的上述四个文件加载到目标目录
1.4. 案例 eseBrida 之加解密测试
可以看到传输请求与响应都做了加密处理,这里其实是采用了 AES 加密的方式,我们无法直接去测试。
我们这时就可以使用 Brida 辅助我们自动化加解密数据包,完成在 burpsuite 中的各种 fuzz 测试
Brida 实现后的效果如下:
下边讲一下具体过程
1.4.1. 开始分析
1.4.1.1. Configurations
Start Server 启动 Pyro4 服务器Spawn application/Complie & Spanwn 或者 Attach application/Compile & Attach (用于连接正在运行的应用)
连接远程目标应用,注意需要连接应用前编译我们的 JS 文件,不然不会生效。
如果修改了 JS 文件,需要点击 Compile & … 按钮
Load JS file 加载我们的 js 文件
在分析前我们可以先写一个测试脚本,先 save ,然在 Compile & reload JS 方可生效
1.4.2. 获取加解密调用的方法 / 密钥
1.4.2.1. 反编译获取
首先我们可以通过反编译的方式查看我们的加解密函数和密钥
可以看到请求中 username 参数和 password 均调用了 AesEncryptionBase64.encrypt 方法进行加密,响应则调用了 AesEncryptionBase64.decrypt 进行解密。
跟踪方法,我们可以看到使用了 AES/CBC/PKCS5Padding 的加密方式
并且可以找到硬编码的 key 和 iv
1.4.2.2. 利用 Brida 获取
这里我们也可以通过 Brida 自带的 hook 功能,去 hook crypto ,也可以很直观的去获取到加解密过程首先 spawn 到我们的目标程序
publicstaticfinalStringAesKey="9876543210123456";
publicstaticfinalStringAesiv="0102030405060708";
Graphical Analysis — Load tree ,可以显示目标应用程序的二进制文件,包含了运行时分析应用程序获得的数据、导
入导出库等等。
我们可以查看 javax.crypto 相关内容,查看其调用堆栈信息
根据堆栈信息也可以获取到加解密函数和相关密钥
1.4.3. 编写 JS
测试加密和解密:
// AesEncryptionBase64 encrypt
contextcustom1: function(message) {
varenc;
Java.perform(function() {
try {
varkey="9876543210123456";
vartext=message;
// hook class
varAesEncryptionBase64=Java.use('com.ese.http.encrypt.AesEncryptionBase64');
// hook method
enc=AesEncryptionBase64.encrypt(key, text);
console.log("Encrypt: "+text+"--->"+enc);
} catch (error) {
console.log("[!]Exception: "+error.message);
}
});
returnenc;
},
// AesEncryptionBase64 decrypt
contextcustom2: function(message) {
vartext;
Java.perform(function() {
try {
varkey="9876543210123456";
varenc=message;
// hook class
varAesEncryptionBase64=Java.use('com.ese.http.encrypt.AesEncryptionBase64');
// hook method
text=AesEncryptionBase64.decrypt(key, enc);
console.log("Decrypt: "+enc+"--->"+text);
returntext;
} catch (error) {
console.log("[!]Exception: "+error.message);
}
});
returntext;
}
1.4.4. 创建 IContextMenu
我们可以创建一个 IContextMenu 菜单项添加到 Burpsuite 右键菜单栏中
添加一个解密菜单,用于将选中的数据进行解密,弹框显示解密结果
效果如下:
添加一个加密菜单,用于将选中的数据进行加密,结果直接进行替换
1.4.5. 创建 IMessageEditorTab
创建一个 IMessageEditorTab ,用于显示 response 的解密内容
效果如下:
1.4.6. 创建 IHttpListener
该插件会处理我们 burpsuite 的所有响应和请求,可以直接调用 frida 相关参数来直接进行加解密,方便结合 Burpsuite 测试。
处理 request :
加密 username 字段:
加密 password 字段:
处理 response :
整体效果:
比如这里这里尝试爆破(无需任何其他设置):
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:0xSecurity vv7f
vv7f《Brida 实战:一键解密APP HTTPS流量》