利用Brida解密app传输加密算法
前言
对某app抓包时发现对请求都进行了加密,便对加密算法简单分析了下。
加密算法函数查找
目前很多app的算法都放在so文件里,最终调用的算法函数名称存在encrypt、decrypt关键字。此app使用360加固,在之前介绍过使用drizzleDumper脱掉360二代加固的壳。用sublime text打开反编译后的源码,全局搜索关键字”decrypt”。
看到很多地方调用了com.juxin.library.utils.JniUtil类,打开JniUtil类,看到函数调用了动态链接库(libJniDes.so),最终app调用加密算法的应该就是这个函数了。
Frida
为了证实app最终调用的算法函数,用frida hook加解密函数。 Frida是一款基于python + javascript 的hook框架,通杀android\ios\linux\win\osx等各平台,由于是基于脚本的交互,因此相比xposed和substrace cydia更加便捷。
安装和搭建Frida环境
首先要保证你的android手机已经root。通过pip安装frida:
pip install frida
下载frida-server:
frida_server的下载地址:https://github.com/frida/frida/releases
到android手机上并且运行
adb push frida-server /data/local/tmp/
adb shell
su
cd /data/local/tmp/
chmod 777 frida-server
./frida-server
转发android TCP端口到本地:
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
测试frida环境,如果出现android手机的进程列表说明搭建成功:
frida-ps -R
PID Name
frida-ps -U
-U 代表着 USB,并且让 Frida 检查 USB-Device,使用模拟器也会有这样的效果
hook android的java层函数
使用firda可以很方便hook android的java函数,如下所示hook函数名为com.juxin.library.utils.JniUtil的frida python脚本。
字符串str的值为burp抓到的返回数据包。
可以看到frida脚本已经成功调用了hook的函数,并返回bytes[]数据,可将bytes数组转成string字符串,方便查看,因为懒就不转换了。
Brida
Brida是一款 Burp Suite 扩展,作为一座桥梁连接着Burp Suite以及Frida,以帮助用户修改应用程序与后端服务器之间的通信数据为己任。在分析移动端应用时遇到应用使用随机密钥式对称加密,如果不知道其使用的密钥就无法篡改其通信数据,通过Burp也就无法对所有的交换数据进行更改了,于是Brida就这样出现在我们视野中。
Brida使用了 frida的功能,并且和 BurpSuite结合,可以在 BurpSuite中直接调用目标应用程序中的加/解密函数,而不用去逆向它,节省精力。
插件安装
安装 python 2.7 和 Pyro4 模块(可以使用 pip安装:pip install pyro4 )
下载 Brida_01.jar,并在 BurpSuite 中手动安装该 jar 包 下载地址:https://github.com/federicodotta/Brida/releases
Tips:插件安装,使用过程中出现了问题请查看插件的错误日志
插件的界面如下:
使用夜深模拟器(Android 4.4系统)测试Brida是遇到以下问题
“Java Api only partially available;please file a bug”,google后发现是Android 5.0以下版本存在bug,换成Android 5.0+系统真机测试,问题解决。
brida脚本编写
Frida js文件是最重要的内容,可参考官方js文件。
重点内容 rpc.exports的每一项是一个函数, : 前面的为函数名(全部为小写),比如 contextcustom1, 后面为函数的具体内容,rpc.exports中的函数都可以被 Brida调用。
contextcustom1 和 contextcustom2可以在 burp中使用右键调用,不能改他们的名字
函数接收的参数,和返回的数据都是以 16进制编码的,所以我们使用时要先对他们进行16进制解码,然后返回的时候在进行16进制编码。在上述脚本中包含了这些转换所需的函数,方便我们进行处理。
该脚本会被Frida注入到我们在 Brida中指定的进程中所以我们可以直接使用 Frida的 api。
测试apk的brida配置如下
Brida脚本代码如下
burp抓到的请求
用Brida解密后的内容
总结
使用该插件,我们在测试一些加密应用时提供另外一种节省精力的方法,我们可以直接调用应用中的方法,来对数据进行加/解密 ,而不用去逆向对应的方法。节省了测试人员的精力。
参考
[Android逆向之hook框架frida篇 - 简书] https://www.jianshu.com/p/ca8381d3e094
[联合Frida和BurpSuite的强大扩展–Brida] https://www.anquanke.com/post/id/86567