Python 爬虫进阶必备 – 某众点评 Web 加密参数 _token 逻辑分析

这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战

今日网站

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需要再过一次逻辑就可以得到明文了。

好了,今天的文章就到这里了,咱们下次再会~

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享