记某app使用autodecoder插件绕过加密数据包+重放防护
原文首发在:先知社区
https://xz.aliyun.com/t/16093
0x01、起因
某天大师傅dd我,帮忙看一眼某资产的app
下载下来看后,抓包,数据包加密了,并且存在sign+nonce+时间戳
虽然经常会去处理app的加密数据包,只会针对特定接口测试,手动生成sign去重放数据包
太懒了始终没整合进插件里自动替换测试过
趁这次机会精进一下autodecoder的插件使用
就是费脑子,一整个下午才搞定插件+接口,太菜了
0x02、经过
思路梳理
下载了ios和android两个版本的app,发现存在flutter,使用小黄鸟vpn模式抓包
经过抓包判定,发现该app的对抗策略ios远大于android,存在fingerprinthash,类似于风控
ios的object c逆向成本太高,放弃
数据包类似于这样
与其慢慢翻代码,不如偷点懒,果断启动算法助手,暴力hook全局算法
很幸运,这款app的算法没有在so层和js层,直接写在了java层
看一眼便知道了加密逻辑 && 密钥
至于为什么要用真机,因为有些app不但对root环境进行检查测(好绕),还会对虚拟机环境检测(难绕)
手动对照了几次,大致梳理了一下加密逻辑和生成sign的逻辑
通过源码对照,nonce为uuid,timestamp为正常时间戳
在ios和android上抓包验证,采用相同密钥均可以解密,证明思想和密钥无误
技术实现
这里采用f0ng师傅的autodecoder的burp插件
https://github.com/f0ng/autoDecoder
根据要求,我们实现的是自实现的接口加解密
配置如下图所示
为什么要勾上对数据包头进行处理。当你多阅读即便官方提供的模板源码,就明白了
如果不勾上,实际测试getheaders获得的所有数据都是空的
官方demo
https://github.com/f0ng/autoDecoder/blob/main/flasktestheader.py
ps:严重吸取教训,别自主主张,老老实实按demo来
先实现简单解密的路由接口
decrypt_aes_data为自定义函数,懂得都懂,师傅们凑合着写,不踩坑就行
再实现加密路由
修改post内容----》生成新的nonce+时间戳----》生成新的sign----》替换----》生成新的加密主体
踩坑点:
此处我们获取的json数据,有转义字符串,直接在python里aes解密会加上无关的东西
得先strip()一下
千万别用re模块自动去掉转义字符串!!!血泪教训
然后正则匹配里也自以为聪明的踩坑了,这里把大小写都加上了(尴尬)
为什么最终return的是enc_body,因为明文是给自己看的,服务端还是要密文
在接口测试中,成功加解密+实现sign/nonce/时间戳自动替换
0x03、结果
在burp的intruder的模块成功实现自动爆破,完事!
- 点赞
- 收藏
- 关注作者
评论(0)