Python 爬虫进阶必备 | 某众点评 Web 加密参数 _token 逻辑分析
共 1473字,需浏览 3分钟
·
2021-07-06 14:50
今日网站
aHR0cHM6Ly93d3cuZGlhbnBpbmcuY29tL3Nob3AvRzNybjh4bEtUR2Q1c0JZeQ==
很久没有写 Js 逆向的技术文了,本来逻辑很清楚的文章磕磕绊绊的整的有点久
抓包分析与加密定位
没有登陆的某点评可以看到的信息不多,不过不妨碍我们研究探讨他的加密
打开的网页,直接找到下面这个请求
右边框选出来的就是要分析的加密参数了_token
# 回顾下定位的几种方法
1、直接检索方法,适用于参数名未混淆,简单粗暴
2、xhr 请求可以使用 xhr 断点,简单便捷有一定局限性
3、查看 Initiator 调用栈,通用方法,需要一定的耐心分析堆栈实用万能
拢共就上面几种方法,不熟悉的可以多尝试尝试
我们用第三种分析堆栈的方法,可以定位到下面的 Js 逻辑的位置
可以看到请求都会从这里过一手
116
行是没有_token
的
118
行就出现了_token
的值
所以经过117
行就生成了_token
的值
加密逻辑分析
重新加载,进入117
行函数h
的逻辑
现在这方法的返回值的地方打上断点,免得放跑了逻辑
经过单步分析可以知道
r 是将参数 e 中的参数名和参数值进行 & 拼接
主要的逻辑还是在 i.reload
里
继续单步调试发现在iP.sign
前的逻辑又是对参数的解析,把上一步&
拼接好的参数又变成了键值对的形式,在js
中是解析成了一个对象
之后将这个对象传入iJ
方法中,这里就是_token
的部分逻辑了
进去可以看到,ck
是将参数key
排序,这样方便后端校验,同样的参数能得到同样的加密结果,之后又把上面的对象拆开变成参数名=参数
并用&
拼接
“反正就是来来回回的拆装拆装
然后才真正进入加密的逻辑
var iI = function(jc) {
jc = cD.deflate(JSON.stringify(jc));
jc = iD(jc);
return jc
};
第一步是将数据压缩(defalte是一种基于zlib的压缩算法)
第二步是将第一步的结果 base64
然后返回加密的结果
之后重新回到上层iP.cts
这里重新给参数cts
赋值,这时候这里的iP
是下面这样的形式
“注意_token 是 iI(iP) 的结果
为了验证上面的分析内容,我们写一段代码验证下
既然_token
的逻辑我们知道了,那就拿一段_token
测试下,看能不能还原成上面的iP
结果测试结果和浏览器一致,解压一次数据中包含的sign
需要再过一次逻辑就可以得到明文了。
对了,如果你的 Js 逆向和 App 逆向一直摸不着头绪可以使用超能力,扫描下方二维码,打钱就可以变强哦~
好了,今天的文章就到这里了,咱们下次再会~
对了,看完记得一键四连,这个对我真的很重要,感谢你的慷慨~