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

举报
xianyuplus 发表于 2021/07/12 08:43:34 2021/07/12
【摘要】 今日网站aHR0cHM6Ly93d3cuZGlhbnBpbmcuY29tL3Nob3AvRzNybjh4bEtUR2Q1c0JZeQ==很久没有写 Js 逆向的技术文了,本来逻辑很清楚的文章磕磕绊绊的整的有点久抓包分析与加密定位没有登陆的某点评可以看到的信息不多,不过不妨碍我们研究探讨他的加密打开的网页,直接找到下面这个请求右边框选出来的就是要分析的加密参数了_token# 回顾下定位的几种...

今日网站

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

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

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。