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

咸鱼学Python

共 1473字,需浏览 3分钟

 ·

2021-07-06 14:50

点击上方“咸鱼学Python”,选择“加为星标
第一时间关注Python技术干货!

今日网站

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 逆向一直摸不着头绪可以使用超能力,扫描下方二维码,打钱就可以变强哦~

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

对了,看完记得一键四连,这个对我真的很重要,感谢你的慷慨~

浏览 47
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报