Frida及Brida学习记录
2020-11-09 10:45:29 Author: xz.aliyun.com(查看原文) 阅读量:556 收藏

前言

之前看了ESE大表哥的Brida插件加解密实战,借用ESE表哥的资料的基础上对Frida和Brida插件的一些知识学习和使用做了一个简单的记录。

一、Frida

关于Frida的介绍和安装这里就不在重复阐述了,可以参考ESE表哥简述的这篇文章https://www.jianshu.com/p/c349471bdef7

1.1Frida使用

对于Frida的使用方法将以一个编写的DEMO来进行展示。在正式使用前需要解释下python下的frida模块的部分函数名的作用和意义。
Python的frida模块提供了frida使用的所有命令的接口函数,下面截图将解一下几个基本函数。第一个是frida.get_usb_device()函数,这个函数是用于获取相应的usb口连接的设备。这边有个坑,大家实体机的时候可能会碰到,取决于设备和数据线的性能,大家可以先踩坑,直接说可能映像不深(滑稽脸),如下图所示:

赋值的device为一个类对象,该类有如下的属性方法,其中最常用的是attach方法,通过attach方法获取session对象来附加到目标进程中:

attach方法使用返回一个类对象,该类有如下方法,还是挑一个最常用的create_script方法进行讲解,该方法用于创建js脚本代码并将代码注入到目标进程中:

调用create_script方法如下所示,script是frida.core.Script的一个对象常用on和load方法,就成功把js代码注入到com.android.chrome进程中了,如果进程调用open函数,就会通过js代码中的send函数发回message:


然后就是frida的相关HOOK脚本的编写,HOOK脚本的编写套路按下面截图所示就行,需要掌握一点javascript语法知识:

以上是frida模块使用的简单使用,下面开始介绍一下使用frida进行hook加解密方法,实验环境准备了一个简单的apk安装包“eseBrida.apk”和phpstudy搭建的服务端,进行通信演示。
在手机上安装了eseBrida.apk,PC端用phpstudy搭建了相应的服务端,尝试使用Burpsuit抓包看看相应的数据包内容,如下所示:
在DEMO的app中输入相应的用户名密码,点击登录使用BurpSuit查看发现请求包和响应包的数据都是加密的:


使用Jeb反编译相关apk的源码查找到在传送数据包时用于加解密的类方法,如下所示:

点击进入函数得到其调用的是这个包”com.ese.http.encrypt“下的AesEncryptionBase64类中的encrypt和decrypt,故根据上述信息编写相应用于加密解密的HOOK脚本,由上述JEB中加解密函数分析可以知道,app在调用加解密函数时会传入两个参数其中第一个即为key。利用此可以HOOK app中的加密方法直接打印出相应的加解密key,即使对代码做了混淆等也可以直接输出。调用加密方法的HOOK脚本如下所示:

然后启动在手机中启动frida-server,利用python的frida模块编写相应的进行hook交互的脚本,python脚本如下所示:

运行python的交互式HOOK脚本,在app中的登录框中输入相应的登录名和密码进行登录尝试,app客户端会调用上述的加密方法加密对输入的用户名和密码进行加密,HOOK方法直接HOOK到相应的加密方法,输出传入的key和加密参数以及加密结果,如下所示:

运行的python交互式HOOK加密函数的脚本输出结果如下所示:

同理HOOK解密函数,其HOOK脚本内容如下所示:

Python的交互式输出内容如下所示:

以上就是,Frida内容的简单介绍,下一章节就是Brida插件的使用介绍。

二、Brida

2.1 Brida插件使用准备

Brida上文也说到了是一个BurpSuit插件用于连接Frida和BrupSuit,对app进行HOOK其相关函数,重写该函数供BurpSuit进行例如解包拼包操作。该插件虽由java编写,但其核心功能即HOOK和app数据通信是用python来实现的,下载源码从源码中加载的python脚本文件可知,如下图所示:

查看java文件调用相应的python脚本内容,可以发现其主要依赖于pyro4和firda两个模块,如下图所示:

Frida模块上面已经说过即用来调用frida进行HOOK,Pyro4是python的RPC框架即远程过程调用,用Burpsuit的图形化按钮来调用HOOK脚本函数。
Burpsuit中导入安装Brida插件,由上分析可知插件要能正常使用必须依赖于python环境和python的frida、pyro4模块,故首先要安装好上述环境。导入插件,其展示界面如下所示:

Brida的界面如上所示,主要分为三个部分:console输出框用于输出插件启动,调用app,以及运行报错等信息:控制按钮用于用户启动\终止服务,启动或结束app,载入HOOK js脚本等作用;功能选项中最重要的就是configurations和Excute method两个,configurations为插件正常运行所需的环境参数配置,如下图所示:

其中选择连接方式就是PC机和手机使用USB线连的还是用远程端口转发的方式连的。查看插件源码也可以看到,当选择remote选项时即调用为python 中firda模块的get_remote_device()方法,local选项即调用了get_usb_device()的方法,脚本源码如下所示:

然后时Excute method功能选项,该功能是提供了一个能够执行HOOK脚本中定义函数的接口界面,如下图所示:

执行的结果输出至console输出台中。

2.2RPC HOOK脚本

由于此处Brida插件通过RPC的方式来调用Frida HOOK出的方法,故此处需要编写相应的rpc调用用于 hook js脚本,其基本格式在Brida源码中有相应的模板,在RPC函数中写相应的HOOK函数内容就行,如下图所示:

其中默认有四个定义函数分别对应Brida插件的四个快捷键,contextcustom1、contextcustom2用加密解密请求包,contextcustom3、contextcustom4用于加解密相应包:
对应于Brida的如下快捷键,如下所示:
在BurpSuit的Repeater中的请求包快捷如下图所示,Brida Custom1即对应contextcustom1,Brida Custom2即对应contextcustom2:

相应包也同理:

除了上述默认的函数外,也可以自己定义函数只是没有相关快捷键,可以在Brida插件中的Excute Method功能中调用执行,结果在console台上输出:

在使用Brida插件使用RPC调用HOOK函数输出到Burpsuit的界面中有一个需要注意的是,BurpSuit输入输出接口中的数据是以16进制编码后的字符串来传递的,因此RPC脚本中需要定义字符转16进制字符的函数和相应反转函数,这个在Brida给的脚本模板中有编写了相应的函数(转换函数只作用于默认快捷键函数)

如果为图片等字节流,可采用byte转成16进制函数,如下所示:

Brida使用

根据上述介绍,在Brida插件的configurations中输入相应的配置信息,包括系统python执行路径、rpc启动地址和端口、frida的HOOK脚本路径、app包名、获取方式,如下所示:

编写的相关HOOK脚本函数contextcustom1、contextcustom2,contextcustom3、contextcustom4同理如下所示:
加密函数:

解密函数:

点击start server 启动服务,在点击spawn application启动app,在点击reload JS将脚本导入Frida中进行HOOK,如下图所示:

Brida点击Spawn自动打开了相关app,在app中输入用户名、密码BrupSuit抓到相应数据包,发送至repeate如下所示:


选中要解密的内容,调用Brida custom2快捷键成功解密请求包内容,如下所示:

选中要加密的内容,使用Brida Custom1快捷键即调用加密函数将相应内容加密,如下所示:

加解密返回包也是同样的原理,如下所示:

参考链接


文章来源: http://xz.aliyun.com/t/8461
如有侵权请联系:admin#unsafe.sh