记某app使用autodecoder插件绕过加密数据包+重放防护

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 关注 | 1 打赏
  • 动动手指,沙发就是你的了!
登录 后跟帖