本次是APP的POST参数加密,逆向分析,还原
同样的,有图,有代码,不发APP
Fiddler抓到的包文
fd.jpg (51.66 KB, 下载次数: 0)
下载附件
2020-3-25 14:27 上传
发现一个奇怪的问题,PSOT的参数呢?这个是登录接口,正常会有账号密码参数的, POST数据长度 Content-Length:0 并且确实没有POST任何数据,是否很奇怪?
仔细看协议头部分,发现有个token字段,它的值比较长,那基本可以确认了,这里面的数据就是POST数据,
正常token字段,不都是用来校验,验证的吗?这里,程序员另辟蹊径,不按套路出牌,把数据放到协议头的token中,并且加密了.
首先我们仔细看这个token的结构,像是一个数组,更加确认了它不是一个正常token.
结构: [内容,内容]
data1.jpg (50.78 KB, 下载次数: 0)
下载附件
2020-3-25 14:30 上传
从token的数组内容上看,像是BASE64编码,我尝试了解码,解出来是乱码,果然没那么简单(这不废话吗,如果解码成功了,还分享个XX)
2话不说,开始APP反编译,文件结构分析,一系列操作
掏出ApkToolAid查壳,居然是360壳,这可有点难受了
不管它,直接反编译,看看成功否
jc.jpg (33.27 KB, 下载次数: 0)
下载附件
2020-3-25 14:38 上传
fby.jpg (48 KB, 下载次数: 0)
下载附件
2020-3-25 15:28 上传
成功了,看来运气不错
首先到反编译出来的目录下查看文件结构,喜闻乐见的 assets目录内有 index.android.bundle 文件,这个再第1饭里讲过了,ReactNative+NodeJS开发的APP标准特征
首先分析这个文件,看看有没有我们要的东西,没有时,再去查看反编译的安卓代码
把index.android.bundle改后缀名为 index.android.js,到自己习惯的JS代码编辑器里查看该文件,我用的vscode
搜索 token字样,搜索到300多个结果,一个个的看下去,定位到了名为 do_request的函数,看起来没错了
从函数的代码上分析 token来自参数 t ,
t 又从JSON对象转为字符串赋值给 0 ,
然后 this.fenduan(o)函数对 0 做了处理后返回给 c,
c 再次对象转字符串,赋值给了最终的 token
从上面的结果来看,t 和 c 就是关键了,首先要确定 t 传进来时,是什么样的内容,其次,分析this.fenduan 这个函数在干什么
js1.jpg (59.88 KB, 下载次数: 0)
下载附件
2020-3-25 14:49 上传
搜索 do_request 函数名,看看有哪些地方在调用,定位到 hhtc_request 函数,看到第2个参数 s 是一个标准的JSON对象赋值,并且是明文,那我们的重心就要放到 this.fenduan上去了
sj2.jpg (45.32 KB, 下载次数: 0)
下载附件
2020-3-25 14:58 上传
fenduan函数,分析一下这个函数在干什么
把参数 n 的内容做了个分割,
每80位长度,分割1次,赋值给了 s ,
然后把 s 加密,加密后的内容 push给了数组 0 ,最后返回0
那看来关键点就是 this.encrypt的加密方案了, this字段的意思是,当前JS文件,当前页面内,也就是说加密方案,就在当前的代码附近了
js3.jpg (16.4 KB, 下载次数: 0)
下载附件
2020-3-25 14:58 上传
代码附近上下找找,果然找到了 encrypt加密函数,和 decrypt解密函数
下面还有关键的 RSA加密公钥,私钥,看来没跑了,这个加密到这里,就完事了
BEGIN PUBLIC KEY 公钥
BEGIN PRIVATE KEY 私钥
rsa.png (38.56 KB, 下载次数: 0)
下载附件
2020-3-25 15:19 上传
正常来说,本地没有解密操作时,是不需要存放 私钥 的,只需要公钥加密即可
既然它有私钥,我们尝试对token解密一波,看看参数内容
自写解密工具,解密出来参数明文.
jm.jpg (30.13 KB, 下载次数: 0)
下载附件
2020-3-25 15:24 上传
易语言改的加密函数
e.jpg (29.15 KB, 下载次数: 0)
下载附件
2020-3-25 15:26 上传