利用Brida解密app传输加密算法

frida -> brida -> android

Posted by zeroisone on November 12, 2017

利用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