FreeBuf|用BurpSuit的Brida自定义插件搞定加密签名算法

Frida是一款非常强大的框架 , 其可向Windows、MacOS、Linux、iOS、Android , QNX的应用中注入Javascript , 进而拦截应用传输的数据 。 本文仅使用到其中少部分功能 , 更多可以参考Frida文档 , 强烈建议读者最好是在熟悉了其基本概念以及常用功能后再进行阅读 。 推荐两篇不错的译文:使用Frida配合Burp Suite追踪API调用;如何在iOS应用程序中用Frida来绕过“越狱检测”?大家在做渗透测试的时候有没有遇到这样的问题?当你要对一个协议的内容进行修改的时候 , 发现只要修改一个字节进行发送 , 服务器返回的结果就是错误的;用原始包进行重放操作就是没问题的 。
FreeBuf|用BurpSuit的Brida自定义插件搞定加密签名算法
本文插图
通过观察发现包头中有个sign字段对包中的内容进行校验 , 所以服务器才会返回错误的结果 。 看到这里聪明的你一定会想到 , 找到sign的算法 , 把sign字段计算出来不就可以了吗 。 但是 , 通过跟踪发现sign的计算方法 , 被放到了so文件中并且此段算法已经被VM了 , 没有这个能力还原算法还原朋友可以看看我这篇文章 。
山人自有妙招 , 今天这篇文章的就是告诉大家说应该怎么解决这个问题 。
下面截图是通过本文的方法的产出的结果 , 可以看到通过BurpSuit自动化的对有签名验证的协议进行批量测试 。
FreeBuf|用BurpSuit的Brida自定义插件搞定加密签名算法
本文插图

一、必备工具:操作系统: WIN10_X64
BurpSuit: 渗透神器 , 如果你还不知道这个 , 那么只能说明你不是圈内人 , 赶快去百度一下吧 。
Frida:
Frida是一款非常强大的框架 , 其可向Windows、MacOS、Linux、iOS、Android , QNX的应用中注入Javascript , 进而拦截应用传输的数据 。 本文仅使用到其中少部分功能 , 更多可以参考Frida文档 , 强烈建议读者最好是在熟悉了其基本概念以及常用功能后再进行阅读 。 推荐两篇不错的译文:使用Frida配合Burp Suite追踪API调用;如何在iOS应用程序中用Frida来绕过“越狱检测”?
Brida(Ver:0.3): BurpSuit的插件 , 这是此篇文章的重点 。
Brida是一款 Burp Suite 扩展 , 作为一座桥梁连接着Burp Suite以及Frida , 以帮助用户修改应用程序与后端服务器之间的通信数据为己任 。 在分析移动端应用时遇到应用使用随机密钥式对称加密 , 如果不知道其使用的密钥就无法篡改其通信数据 , 通过Burp也就无法对所有的交换数据进行更改了 , 于是Brida就这样出现在我们视野中 。
GitHub: https://github.com/federicodotta/Brida
Jadx(Ver:1.1.0):
一款免费的apk反编译软件 。
GitHub: https://github.com/skylot/jadx
Python2.7: 我使用的是Brida是v0.3版本的 , 所以只支持Python2 。
二、目标分析:1.静态分析 , 找到关键位置首先 , 找到要分析的APK , 用jadx载入进行反编译 , 查找sign算法的位置(至于如何查找算法不是本文的重点所以这里就不详细说查找的步骤了) , 找到算法call后发现如下:
tps.addHeaderParam(JNISecurity.signJava(sb.toString)继续跟进 , 发现是计算sign的函数在so文件中 , 用ida打开看看 , 发现用VM加密了 。
publicclassJNISecurity {privatestaticnativeStringsign(Stringstr);static{ System.loadLibrary("xxxx");}publicstaticStringsignJava(Stringstr) {Stringsign = sign(str);return""+ sign;} }虽然核心函数被VM加密了 , 我们看不到sign的算法是怎么实现的 , 但是我们可以调用这个so文件中的算法进行计算 , 只要把参数传对 , 不就可以让app帮我们计算了么?
2 还原参数算法确定想法以后 , 开始看参数是怎么形成的 。 通过jadx反编译 , 找到传参的地方如下:


推荐阅读