前言
随着安全等级的提高目前金融、证券、保险类APP经常使用加密的请求和响应报文在公网传输数据,使用传统的frida转发到Burp的方式测试起来非常恼火,而且对于重放类问题基本上很难挖掘,本篇文章使用frida、frida RPC和burp插件联动的方式对加密报文进行明文抓包以解决不能重放的问题,希望能够解决各位在测试过程中遇到的APP加密报文明文抓包和重放的问题。
目标APP介绍
请求报文格式
1.抓取APP登录请求报文可知APP以POST方式传输json格式的请求报文数据,JSON格式字段data为加密数据,digest字段为签名。
![](upload/attach/202403/996427_8U8K3DKP8JGB4JQ.webp)
![](upload/attach/202403/996427_FCXSSEWPEGJA49J.webp)
![](upload/attach/202403/996427_XPD5ZWYEKBQCCTZ.webp)
2.请求报文中data字段以RSA APP本地私钥的方式加密传输。
![](upload/attach/202403/996427_C9A2N4CKPMJG4CY.webp)
3.请求报文中digest字段以SHA256withRSA本地私钥,对请求报文明文数据Base64编码字符进行加签。
![](upload/attach/202403/996427_KUUACEKDB6E2W5V.webp)
响应报文格式
1.APP本地拦截器XXXXXXXXInterceptor#intercept方法对响应参数data进行解密和digest参数验签。
![](upload/attach/202403/996427_N6GVYBSZ2ZKPBJW.webp)
![](upload/attach/202403/996427_22FEXQ888S24W6H.webp)
请求报文与响应报文加解密流程
请求报文加密流程
1.客服端发起请求加密流程如下图所示:
![](upload/attach/202403/996427_2V9DDK3N6RJG2SN.webp)
![](upload/attach/202403/996427_BYZCWMMFB42U9YX.webp)
响应报文解密流程
1.客服端接收响应加解密流程如下图所示:
![](upload/attach/202403/996427_F9SQ68FYWAN96MQ.webp)
![](upload/attach/202403/996427_U9QEFNRK5X38A5M.webp)
Hook抓包的缺陷
传统Hook抓包方式
1.通过Hook加密函数修改明文和Hook解密函数修改解密的方式修改请求和响应报文。
![](upload/attach/202403/996427_R3JA495XSB9S48E.webp)
![](upload/attach/202403/996427_Q3WMD5B8WQVWMVJ.webp)
![](upload/attach/202403/996427_XDMZNPN6TEJ9XEE.webp)
2.Hook转发Burp显示的请求报文。
![](upload/attach/202403/996427_7NWVPCNZP74R8VF.webp)
![](upload/attach/202403/996427_DGFAN7T263WG79K.webp)
3.Hook转发Burp显示的响应报文。
![](upload/attach/202403/996427_PR5FPQMYT5G843D.webp)
传统Hook抓包方式存在的缺陷
1.抓取到的请求和响应报文不直观,大多数情况下只知道参数不知道参数对应的请求URL。
2.无法对请求报文进行重放。
报文以RSA加密情况下明文请求包思路
使用通用加解密算法
1.加密流程如下:
①通过frida hook让加密函数不进行加密直接返回明文数据;
②通过Burp抓取请求报文抓取到的就是明文数据;
③通过Burp插件按照加密加强算法流程对明文数据加密加签然后将报文发送给服务器;
![](upload/attach/202403/996427_NZ4C2WPA628Q39B.webp)
2.解密流程如下:
①Burp收到服务器返回的加密加签数据,Burp插件进行解密得到明文数据;
②frida hook让解密函数直接接返回Burp插件解密后的数据;
③Burp返回明文数据APP显示;
![](upload/attach/202403/996427_V592VE6EV2GDXMV.webp)
使用自写加解密算法
1.加密流程如下:
①通过frida hook让加密函数不进行加密直接返回明文数据;
②通过Burp抓取请求报文抓取到的就是明文数据;
③Burp插件调用frida RPC请求APP加密函数对明文数据进行加密,得到加密加签后的请求密文数据;
④Burp插件RPC调用完成得到密文数据发送给服务器;
![](upload/attach/202403/996427_FA2CQ6BNYA73N6E.webp)
2.解密流程如下:
①Burp收到服务器返回的加密加签的密文数据;
②Burp插件调用frida RPC请求APP解密函数对密文数据进行解密得到解密后的明文数据;
③frida hook让解密函数直接接返回Burp插件调用RPC解密后的数据;
④通过frida hook让解密函数不进行解密直接返回明文数据;
![](upload/attach/202403/996427_RR9AVSJ6R6EY83T.webp)
实现过程
通用加密算法实现过程
1.加密流程实现过程如下:
①通过frida hook让加密函数不进行加密直接返回明文数据;
![](upload/attach/202403/996427_AFP8BW5JBBGEV8A.webp)
②通过Burp抓取请求报文抓取到的就是明文数据;
![](upload/attach/202403/996427_PB2ZF698XHEMWKE.webp)
③通过Burp插件按照加密加强算法流程对明文数据加密加签然后将报文发送给服务器;
![](upload/attach/202403/996427_U2YVH8CPWY7245W.webp)
![](upload/attach/202403/996427_PBD8K9NAU7UMXP4.webp)
![](upload/attach/202403/996427_635MGBWA8JB9K6W.webp)
![](upload/attach/202403/996427_H4NPNSWHXCW6CNQ.webp)
查看burp日志发送是已经是加密报文了
![](upload/attach/202403/996427_HUP2QMZJ7D76T3R.webp)
2.解密流程实现如下:
①Burp收到服务器返回的加密加签数据,Burp插件进行解密得到明文数据;
![](upload/attach/202403/996427_4CE4ZDRUKERBNUM.webp)
②frida hook让解密函数直接接返回Burp插件解密后的数据;
![](upload/attach/202403/996427_FWVZ65ZRX36V23C.webp)
③Burp返回明文数据APP显示;
![](upload/attach/202403/996427_M6M5A3QG6JYJ9KF.webp)
自写加密算法实现过程
1.加密流程如下:
①通过frida hook让加密函数不进行加密直接返回明文数据;
![](upload/attach/202403/996427_HXD7NEGFEV862W7.webp)
②通过Burp抓取请求报文抓取到的就是明文数据;
![](upload/attach/202403/996427_AEQNSZ2E945MW95.webp)
③Burp插件调用frida RPC请求APP加密函数对明文数据进行加密,得到加密加签后的请求密文数据;
![](upload/attach/202403/996427_8BKSWTP5T6GDD5A.webp)
④Burp插件RPC调用完成得到密文数据发送给服务器;
![](upload/attach/202403/996427_8ZHEUCFF7XJK49H.webp)
2.解密流程如下:
①Burp收到服务器返回的加密加签的密文数据;
②Burp插件调用frida RPC请求APP解密函数对密文数据进行解密得到解密后的明文数据;
![](upload/attach/202403/996427_AQ5XSN38KEWEH4G.webp)
③frida hook让解密函数直接接返回Burp插件调用RPC解密后的数据;
![](upload/attach/202403/996427_KRVM44T4T6Y274B.webp)
![](upload/attach/202403/996427_9HMFC4Y5F3TUD4U.webp)
![](upload/attach/202403/996427_JAEPEGFBP45A9GY.webp)
④通过frida hook让解密函数不进行解密直接返回明文数据;
![](upload/attach/202403/996427_TMEV4C9GU8CE6RS.webp)
![](upload/attach/202403/996427_U4P6GDU93673RUN.webp)
最终效果
报文历史记录、重放、爆破模块都可以正常使用,我们就能在明文下愉快地进行测试啦!!!!
![](upload/attach/202403/996427_RADSFCWJ38EE2ZU.webp)
![](upload/attach/202403/996427_RHHEGSKGD925PCY.webp)
![](upload/attach/202403/996427_N3A82UAYY8TW9RU.webp)
![](upload/attach/202403/996427_9E458S6T5XHE8XP.webp)
![](upload/attach/202403/996427_JD9QV4Q7KNMD4NV.webp)
总结
如上方法对于其他加密方式同样适用,而且不光是APP端Web端同样适用,希望各位能够举一反三。
下次分享不借助Burp插件只使用Frida+Frida RPC方式自行重放的方法敬请期待。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法