【问题标题】:HTML obfuscation using special fonts使用特殊字体的 HTML 混淆
【发布时间】:2022-04-27 18:50:29
【问题描述】:

我在浏览一个德国网站时注意到在初始页面加载期间页面上显示了一些不可打印的字符(如 ``)。因此,当页面仍在获取所有资源(尤其是字体)时,无法看到匹配分数。我通过禁用特定的 CSS 规则来模拟这种行为。

页面为每个显示分数的元素添加了一个数据混淆属性和一个类。

我为模拟页面加载而禁用的 CSS 规则在目标元素上设置了字体系列。字体似乎与 data-obfuscation 属性的值具有相同的名称,该属性似乎为所有受影响的元素共享。当我重新加载页面时,该值也会发生变化。

.results-c-7kwd95ci {
    font-family: font-7kwd95ci !important;
}

如果我启用此规则,分数可以正常查看

这是 CSS 文件

@font-face {
    font-family: font-7kwd95ci;
    src: 
        url('//www.fussball.de/export.fontface/-/format/woff/id/7kwd95ci/type/font') format('woff'),
        url('//www.fussball.de/export.fontface/-/format/ttf/id/7kwd95ci/type/font') format('truetype');
}

.results-c-7kwd95ci {
    font-family: font-7kwd95ci !important;
}

似乎该网站故意发送格式错误的 unicode 数据,这些数据只能由加载的字体呈现。由于将乐谱复制到剪贴板也只是复制了格式错误的数据。

这种混淆有名称吗?它是如何工作的?在没有浏览器自动化的情况下抓取数据时可以避免这种情况吗?从技术上讲,浏览器自动化也不适用于抓取,因为数据仍然格式不正确。

【问题讨论】:

  • 我不确定这是一个安全问题。这只是一个 HTML 便利功能。正如你所展示的,它被简单地绕过了。我认为这个词可能只是“编码”。
  • 您可以对编码算法进行逆向工程并编写相应的解码器。编码后的值与显示的字符串有什么关系?
  • 不一定是“格式错误”的 Unicode,它可能只是一个不寻常的代码点,例如一个私人使用的代码点。他们这样做是为了混淆还是仅仅为了定制设计是一个不同的问题……如果您知道它的含义,您应该能够读取该字符并将其映射到常规数字。 — 当然,如果每次加载页面时该映射都发生变化,那么该字体文件可能是动态生成的,以便每次都提供随机映射。那么是的,它是故意混淆的。
  • @deceze 似乎是这样。我猜他们有一些预定义的映射,并在每个请求中随机选择一个。特别是因为每个数字的代码点保持不变。例如,U+E69D 可能会映射到 1,直到重新加载站点并选择新的映射。字体文件似乎只包含从 0 到 9 的映射。所以也许如果我可以遍历字体文件中的每个字符,我可以反转映射。遗憾的是我不知道这些文件是如何工作的。
  • 字体文件在服务器上似乎是静态的,因为它们也有一个 ID。例如,在原始帖子中,ID 是 7kwd95ci

标签: javascript html obfuscation css fonts


【解决方案1】:

我发现这个noscrape npm 包似乎具有与字体混淆相同的逻辑。

当我需要将页面中的位置或日期复制到邮件中时,它也会困扰我:)

【讨论】:

  • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
猜你喜欢
  • 2019-01-22
  • 2013-08-23
  • 2019-03-20
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多