python爬虫逆向 某数5代eval js以及cookie生成分析笔记

前言

准备工作和上一篇 4 代一致,这里就重复写了,点此可跳转链接

eval js 代码分析

hook cookie 确认生成cookie的函数位置

百度了一份 cookie 的 hook 代码,放到油猴中 hook,然后根据堆栈找到 cookie 生成的位置即可

(function() {
    'use strict';
    var cookieTemp = "";
    Object.defineProperty(document, 'cookie', {
        //hook set方法也就是赋值的方法
        set: function(val) {
            debugger;
            //这样就可以快速给下面这个代码行下断点
            //从而快速定位设置cookie的代码
            console.log('Hook捕获到cookie设置->', val);
            cookieTemp = val;
            return val;
        },
        //hook get方法也就是取值的方法
        get: function() {
            return cookieTemp;
        }
    });
})();

我的是在这里,每个人的都不太一样

image

进入到函数中,发现执行了这个5b(774, 1)函数cookie就被set了,那么cookie的生成逻辑就是在这个函数里了,接下来就是分析这个函数

image

cookie生成函数分析之时间戳

进入到这个5b(774, 1)函数中,往下拉,发现是个大的控制流

image

f11往下走,各种if判断后,到了一个新的循环

image

接着走,出现了一个类似时间戳的函数,后面两个值是不同位置生成的时间戳

image
image

至于这个_$ix,要自己看下是在哪生成的,虽然看着像时间戳,但是不是,是个加密生成的,我的是在这里

image
image

出现了一个判断变量,c3,每个人的都不一样,但是后面再看到这个变量都要知道,虽然没什么意义,但都是用来做控制流判断用的

image

一个变量赋值,把刚才类似时间戳的函数的值赋给了fH变量

image

到了这个函数,好像并没有什么意义,接着走

image

cookie生成函数分析之128位数组

创建了一个128位的空数组,核心加密的开始,注意这个BH变量,后面基本看到BH++都是在往数组中push数据

image

push的第一个数组,入口

image

接着走,这个值是ts里的

image

进入到函数内部,生成了一个16位数组

image

16位数组concat了几个值,这几个值的生成,可以参考上一篇rs4的文章,逻辑基本一值,

image
image

接着走,看到了BH++,push了第二个值,fH是之前类似时间戳的加密值

image

第三个值

image

第四个值

image

第五个值

image

第六个值

image

看到一个return后,结束这个循环,开始下一个,接着走,看到push了第七个值

image

至于这个1k变量是在哪生成的,搜索一下,发现是生成cookie函数之前就生成了

image

重新打上断点,刷新网页,进入到这函数中,按流程走,看到了这里,这就是第七个值的生成逻辑了

image
image

第8个值,至于生成位置,可以按照上面的逻辑分析下,不想分析的话,这个值可以针对这个网站写死

image

第九个值,会变动,但是好像不影响整体,可以直接写个0或者其他值,都可以

image

第十个值,我这里是个固定值3

image

第十一个值,这里的b9值写死为25165824,就可以

image

第十二个值

image

第十三个,有点特殊,先拿了一个变量占位,值为undefined

image
image

接着走,会经过几个类似这样的检测函数,对整体逻辑无意义,看看就好了

image

一直走直到这里停下,这里push了第十四个值

image
image

接着走,这里补上了第十三个值的空缺

image

然后取了128位数组有值的部分

image

最后return了值赋值给了Nt,至此,128位数组逻辑结束

image

cookie生成函数分析之cookie生成逻辑

接着f11,生成了一个32位数组,赋值给了Ha

image

接着走,生成了一个16位数组,赋值给了Nt,我这里有个坑,因为上面128位数组逻辑里最后一个值也是赋值给了Nt,因为变量作用域的不同,不能覆盖上面128位数组的值,这里如果和我一样的话,需要注意下

image

接着走,再次生成了一个16位数组,赋值给了Xb

image

创建了一个空数组,BH

image

然后循环针对上面的32和16位数组,对这个空数组进行push

image

然后return了这个数组BH,并赋值给了Xb

image
image

然后接着走,有个变量赋值

image

再接着走,这里有对128位数组的Nt和刚才上一步的变量操作的步骤

image

然后仍然是对Nt的操作

image

接着是对类似时间戳加密的变量的操作

image

对真正时间戳的操作

image

然后这里

image

这里

image

这里

image

还有这个循环,具体的值是什么可以自己断点看看,按F10或者F11一直走,都能遇到,如果遇不到,证明你跟错了,手动狗头,哈哈

image

这个是生成cookie的最后一个值

image

最后就是cookie的拼接了,到这里cookie生成的逻辑结束

image

本地执行

结果如下,没有问题,结束,撒花

image

小结

只要屁股坐不烂,结果总是能出来的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容