66
77数据无价的时代,爬虫与反爬的对抗已经进入白热化状态,其中Cookie反爬是` 最常见之一 ` 的反爬类型, 网站方通过混淆得亲妈都不认识的JS代码设置Cookie(通常是浏览器指纹、请求时必须带上的Cookie之类的),
88面对请求时必须要带上但是又不知道在哪里生成的Cookie, 你在几万行混淆的亲妈都不认识的JS屎海中苦苦挣扎希望能找到生成Cookie的地方(要是逆向思路不科学兴许还会呛上几口...),
9- 甚至几度想找个借口骗自己放弃,或者要不干脆用Selenium之类的浏览器模拟方式算了? 怂个球,此脚本就是来助你一臂之力的!
10- (你我都知道,这段只是撑场面的废话,你可以略过,如果你没有不幸读完的话...)
9+ 甚至几度想找个借口骗自己放弃,或者要不干脆用Selenium之类的浏览器模拟方式算了? 怂个球,此脚本就是来助你一臂之力的! (你我都知道,这段只是撑场面的废话,你可以略过,如果你没有不幸读完的话...)
1110
1211### 脚本功能
1312
8887
8988如果您觉得自动更新太烦,或者有其它的顾虑,可以在这里复制本脚本的代码:
9089
91- [ https://github.com/CC11001100/crawler- js-hook-framework-public /blob/master/001-cookie-hook/ js-cookie-monitor-debugger-hook.js ] ( https://github.com/CC11001100/crawler- js-hook-framework-public /blob/master/001-cookie-hook /js-cookie-monitor-debugger-hook.js )
90+ [ https://github.com/CC11001100/js-cookie-monitor-debugger-hook /blob/main/ js-cookie-monitor-debugger-hook.js ] ( https://github.com/CC11001100/js-cookie-monitor-debugger-hook /blob/main /js-cookie-monitor-debugger-hook.js )
9291
9392review确认没问题之后在油猴的管理面板添加即可。
9493
@@ -154,8 +153,7 @@ debuggerRules
154153
155154这个变量是一个数组类型,里面存放着一些规则条件,来决定什么情况下会进入断点。
156155
157- 注意,这是一个数组,数组中的规则是或的关系,触发Cookie修改事件时,
158- 会顺序匹配每条规则, 只要有一条规则匹配成功就会进入一次断点。
156+ 注意,这是一个数组,数组中的规则是或的关系,触发Cookie修改事件时, 会顺序匹配每条规则, 只要有一条规则匹配成功就会进入一次断点。
159157
160158### 5.2 常用配置方式(简化的配置规则)
161159
@@ -191,28 +189,21 @@ const debuggerRules = [/foo.+/];
191189
192190![ ] ( images/README_images/5415caa1.png )
193191
194- 修改完` debuggerRules ` 数组要注意按Ctrl+S保存脚本,然后因为油猴是在页面加载的时候注入JS代码的,
195- 所以要刷新页面重新注入,当刷新页面的时候就自动进入了断点:
192+ 修改完` debuggerRules ` 数组要注意按Ctrl+S保存脚本,然后因为油猴是在页面加载的时候注入JS代码的, 所以要刷新页面重新注入,当刷新页面的时候就自动进入了断点:
196193
197194![ ] ( images/README_images/47c3b465.png )
198195
199- 上图的红色框A中是专门传进来的一些变量,通过将鼠标移动到这些变量上查看值,
200- 我们能够大概知道当前断点的一些情况:
196+ 上图的红色框A中是专门传进来的一些变量,通过将鼠标移动到这些变量上查看值, 我们能够大概知道当前断点的一些情况:
201197
202198![ ] ( images/README_images/0cf06995.png )
203199
204- 然后就是红色框B,我们打Cookie断点就是为了追踪调用栈定位生成Cookie的地方,
205- 红色方框内是本脚本的调用栈,有很明显的` userscript.html ` 标识,
206- 忽略此部分的调用栈即可。
200+ 然后就是红色框B,我们打Cookie断点就是为了追踪调用栈定位生成Cookie的地方, 红色方框内是本脚本的调用栈,有很明显的` userscript.html ` 标识, 忽略此部分的调用栈即可。
207201
208202然后追溯调用栈,能够看到设置Cookie的地方:
209203
210204![ ] ( images/README_images/33dc63f1.png )
211205
212- 当然看这个栈对我们没用,我们要做的就是逐步往前定位,
213- 直到定位到真正生成Cookie的地方,但是呢,本脚本只能帮你打个断点,
214- 后面星辰大海的征程就要靠你自己啦!
215-
206+ 当然看这个栈对我们没用,我们要做的就是逐步往前定位, 直到定位到真正生成Cookie的地方,但是呢,本脚本只能帮你打个断点, 后面星辰大海的征程就要靠你自己啦!
216207
217208#### 5.2.2 Cookie名字和事件结合
218209
@@ -283,8 +274,7 @@ Cookie发生了变化细分为增加Cookie、删除Cookie、更新已有的Cooki
283274
284275#### 增加Cookie事件
285276
286- Cookie之前在本地不存在,这是第一次添加。 有可能是第一次访问这个网站
287- ,也有可能是清除了Cookie重新访问,或者是每次访问网站都会生成新的Cookie,
277+ Cookie之前在本地不存在,这是第一次添加。 有可能是第一次访问这个网站 ,也有可能是清除了Cookie重新访问,或者是每次访问网站都会生成新的Cookie,
288278甚至可能是网站自己的代码把Cookie删了重新添加,这都会触发增加Cookie事件。
289279
290280比如执行下面的代码,这里为了保证Cookie之前不存在,在cookie的名字中加了时间戳:
@@ -297,24 +287,21 @@ document.cookie = "foo_" + new Date().getTime() + "=bar; expires=Fri, 31 Dec 999
297287
298288![ ] ( images/README_images/10ea2db6.png )
299289
300-
301290#### 更新Cookie事件
302291
303292当一个Cookie在本地已经存在,然后又尝试为它设置值,就会触发更新Cookie事件。
304293
305294比如下面的代码:
295+
306296``` js
307297document .cookie = " foo_10086=blabla; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/" ;
308298document .cookie = " foo_10086=wuawua; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/" ;
309299```
310300
311- 第一条设置Cookie的语句会触发Cookie新增事件,
312- 第二条设置Cookie的语句因为要设置的Cookie已经存在了,
313- 所以触发了Cookie更新事件。
301+ 第一条设置Cookie的语句会触发Cookie新增事件, 第二条设置Cookie的语句因为要设置的Cookie已经存在了, 所以触发了Cookie更新事件。
314302
315303![ ] ( images/README_images/fa06f80c.png )
316304
317-
318305#### 删除Cookie事件
319306
320307如果前端开发者在设置Cookie的时候,给了一个早于当前时间的expires, 则意味着要删除这个Cookie,比如一种常见的删除Cookie的方式:
@@ -328,9 +315,7 @@ document.cookie = "foo=; expires=" + expires + "; path=/"
328315
329316![ ] ( images/README_images/35720fae.png )
330317
331- 由上面也可以看出来,触发Cookie删除事件纯粹是检测expires,
332- 并不会真的去检查这个Cookie之前是否存在。
333-
318+ 由上面也可以看出来,触发Cookie删除事件纯粹是检测expires, 并不会真的去检查这个Cookie之前是否存在。
334319
335320### 5.5 控制事件类型断点是否开启的标志位
336321
@@ -386,14 +371,21 @@ consoleLogFontSize
386371
387372设置了Cookie并且立刻就重定向到了新的页面,对于这种操作,有可能会Hook不到,这是油猴脚本的问题,如果坚持要Hook, 可以采用挂代理将本脚本注入到这个URL的响应的头部。
388373
374+ # 八、实战示例
375+
376+ 此页面下是一些使用此脚本逆向的实战例子汇总:
377+ [ 点我进入导航页] ( docs )
378+
379+ # 九、其它
389380
390- # 八、其它
391381本项目拆分自:
392- ``` text
393- https://github.com/CC11001100/crawler-js-hook-framework-public/tree/master/001-cookie-hook#%E7%9B%91%E6%8E%A7%E5%AE%9A%E4%BD%8Djavascript%E6%93%8D%E4%BD%9Ccookie
394- ```
382+ [ https://github.com/CC11001100/crawler-js-hook-framework-public/tree/master/001-cookie-hook#%E7%9B%91%E6%8E%A7%E5%AE%9A%E4%BD%8Djavascript%E6%93%8D%E4%BD%9Ccookie ] ( https://github.com/CC11001100/crawler-js-hook-framework-public/tree/master/001-cookie-hook#%E7%9B%91%E6%8E%A7%E5%AE%9A%E4%BD%8Djavascript%E6%93%8D%E4%BD%9Ccookie )
383+
384+ 更改了namespace,可能安装量要清零了,截图纪念下,截止到目前(2022-7-29 21:40:01)安装量破三百了,感觉对于这么窄领域的一个小工具来说很不容易了...
395385
396- # 九、感谢支持
386+ ![ image-20220729214105718] ( README.assets/image-20220729214105718.png )
387+
388+ # 十、感谢支持
397389感谢热心网友反馈问题,谢谢支持。
398390
399391<div >
@@ -416,7 +408,3 @@ https://github.com/CC11001100/crawler-js-hook-framework-public/tree/master/001-c
416408 </ul>
417409</div >
418410
419-
420-
421-
422-
0 commit comments