Skip to content

基本的过滤规则语法介绍

fang5566 edited this page Apr 7, 2024 · 3 revisions

修饰过滤

DOM 树示例:

<div id="unique-identifier" class="first-class second-class" data-storage="123-456">
<div class="first-class">
  • ## - 修饰规则必须包含该符号,表示这是修饰规则
  • ##div - 通过元素类型选择元素
  • ###unique-identifier - 通过 id## + # 选择元素,这样选择非常高效,因为页面就一个名为 unique identifier 的 id
  • ##.first-class - 通过 class## + . 选择元素,但会匹配所有包含相同 class 的其他元素,因此就要:
  • ##.first-class.second-class - 同时使用两个 class 只会选择上例中的第一行 DOM 元素

在多个 class 之间使用点号会自动在原先空格符号处分隔不同的 class 属性值。

通过属性选择元素:

  • ##[data-storage="123-456"] - 精确匹配
  • ##[data-storage^="123-"] - 从开头进行匹配
  • ##[data-storage$="-456"] - 从末尾进行匹配
  • ##[data-storage*="3-4"] - 从中间进行匹配
  • ##[id="unique-identifier"] 等同于 ###unique-identifier
  • ##[class="first-class"] 等同于 ##.first-class,但只会匹配上例中的第二行 DOM 元素 - class 属性是在字面上进行比较,不会在按照空格符号进行分隔。

详情请参见这里的文档

如何对付反广告过滤脚本

下面的步骤需要用到浏览器的开发者工具,包括调调试器。如果你不熟悉这些工具,不妨了解一下官方提供的文档:

Firefox:https://firefox-source-docs.mozilla.org/devtools-user/

Chrome:https://developer.chrome.com/docs/devtools/

你也可以到这里了解更多关于开发者工具的更多信息:https://devtoolstips.org/

你还需要熟悉 HTML、CSS 以及 JavaScript(为了看懂检测脚本)方面的知识。

具体步骤:

1、选取并查看反广告过滤的元素。记录下这些元素的 ID、class、其他属性(例如 hidden)、元素内的文本等等。

2、打开浏览器开发者工具,为 DOMContentLoaded(在 DOM Mutation 下)添加一个断点并重新载入该页面。通常这么做会在反广告过滤弹窗显示之前暂停调试器。如果没有暂停,你可以尝试使用 Script First Statement(在 Script 下)断点(但你或许稍后得重复点击暂停恢复按钮,以便在网站脚本执行之前跳过扩展脚本)。

3、调试器暂停后,移除该断点。重要提示:请勿恢复暂停的调试器,否则网站的检测脚本又会恢复运行。

4、选择 查看器 (Firefox) / 元素 (Chrome) 标签页,通过步骤1里记录的信息搜索对应的元素。

Chrome 魔法不显示搜索栏,请按 Ctrl+F 显示。 如果元素被 CSS(例如 display: none;)隐藏了,可以从右键菜单设置一个属性修改时的断点。这样元素显示的时候会暂停调试器,避免脚本修改元素属性(例如 class)让它在检测时重新显示。如果反广告过滤的元素完全不存在,请查找该元素的父元素,并设置一个子树修改时的断点(如果该父元素也不存在,那就找它的更上一级元素,以此类推)。这样就可以在元素插入到网页时暂停调试器。

5、现在你就可以随意恢复被暂停的调试器。

6、一旦网站检测的 uBO 并显示反广告过滤弹窗,浏览器就会在调试器里暂停检测代码。

7、有时,网站会用到诸如 jQuery 这样的库,调试器可能暂停的是这些库,而不是主脚本。这时你就得使用调试器的 Call stack 段落回到主脚本(提示:如果有“展开列”按钮,点击该按钮显示更多 call stack 里的脚本)。

8、使用浏览器源代码查看器的格式化代码功能(通过是像 {} 这样的按钮让你的源代码更美观。

9、如果代码看起来被混淆了,可以使用反混淆网站(请记住有些反混淆器无法支持所有脚本,即使它们用的是同样的混淆器进行混淆的)。

10、接下来你可以查看周围的其他代码。

顺便说一句:部分网站具有反调试功能,通过 JS 的 debugger 语句不断暂停调试器的运行。这种情况下,你可以开启 Deactivate breakpoints 选项 (Chrome)关闭 在调试器语句上暂停选项 (Firefox)

为了对付这些检测代码,你得熟悉过滤规则语法小脚本以及重定向资源

这里显示了我们是如何在规则列表里修复反广告过滤的问题,值得你学习。

Clone this wiki locally