-
声明:文章内容仅供学习参考,严禁用于商业用途,否则由此产生一切后果与作者无关,如有侵权请联系作者进行删除。
-
本文只是我简要的分析过程,以及一些重要点的记录,不涉及核心算法
该水一下自己的第二篇文章了。该网站的日志打印的挺让人头疼的,log日志断点加载也挺慢的,有时候还会导致浏览器崩溃啥的,我这边使用了override做了一个本地替换js,具体咋操作的可以自行百度操作。话不多说直接上日志分析。
这边只是简要记录一下我的分析流程,以防万一下次自己在分析的时候又要从头开始,具体实现相信对各位大佬来说不难吧。
逆推的时候发现ab是由这两个乱码相加,然后通过s4的码表得来的
第一个乱码蛮好弄的,它是由 三个 0-1之间的随机数,经过一系列位运算后得到的数组然后进行String.fromCharCode,最后相加得来的,根据上面打印的日志挨个分析就出来咯。
我们的重点是第二个乱码,第二个数组向上逆推一步发现是由 y 和 一串乱码两个参数得到的,我们可以根据断点的时机断进去查看是如何生成的。
它是由y的ascii码数121 和一个0-255的一个256位的数组进行一系列位运算操作后得到的一个全新的数组(留意一下 >256 后的处理),然后又是一顿稀奇古怪的操作。
稀奇古怪在对数组的取值和修改,然后将得到的数 和第二个参数的charCodeAt 做^运算,最后取它的 fromCharCode。
在逆推往上面看就是一个长数组得到的这个第二个参数了,至于是怎么得到的,依然是 fromCharCode。
我个人觉得重点就是这个大数组的生成了,我个人感觉还是蛮复杂的。
这里我有点脑袋缺根筋了,分析日志的时候没有接触过sm3算法,我跟进去分析了好久,后面百度了一下 [1937774191,1226093241,388252375,3666478592,2842636476,372324522,3817729613,2969243214]这个数组才发现原来是sm3。
大数组的推理我就直接正向来推了。
大数组 = 44位数组 + 长数组 + 一个值
先看看44位数组是怎么得来的?
url:url + 盐"cus" 通过sm3得到这个数组
data:这边请求传的data为空,也加盐"cus",通过sm3得到[136, 101,...]这个数组
主要是生成的这两个数组都只用到了两位数呀,
肯定是在戏弄我,等下分析错了还得推倒重新分析呢。
ua:
ua的第一步是得到一个乱码,然后通过这个乱码得到一个字符串,最后这个字符串又是通过一个sm3的算法又得到了一个数组,无独有偶,继续两个值。
具体的实现过程各位大佬可以通过断点或者日志去分析一下流程就出来啦。
关于这个44位数组的雏形还会用到 pageId,aid,两个不同的时间戳,还有一个环境字符串("...|Win32") 这样子的,还有一个前面传进来的 0,1,14(这里我其实一知半解的,关于这几个数咋来的有牛的大佬可以分享给小弟一下嘛),这些我就不去记录了,跟着日志走,啥都打印在里面了。
还要提一点的是 通过环境字符串得到的那个数组后续对拼接大数组的时候也会用到(也就是那个长数组拉)。
得到雏形后还有一个排序问题,直接断住这个逻辑点,然后吐出对应的取值下标,发现好几次都一样的,直接copy拿下。这里七里八里一搞得到了一个44位的数组
最后大数组 = 44位数组 + 环境字符串数组 + ?。
最后一位这个问号是由 44位数组 依次 ^ 过来得到的。
测试了一下,测试通过,嘻嘻嘻嘻。
至此我的分析也到此结束了,中间有分析错误的地方欢迎大佬们进行指正。