Smitop·Jul 8,2020·3分钟最近阅读时,我正在使用Reddit上的一个页面(即主要重新设计的域名,而不是old.reddit.com),这时我看到来自Firefox的一个黄色条:
为什么Reddit要使用DRM?此弹出窗口出现在所有页面上,甚至在没有音频或视频的页面上也是如此。为了找出答案,我做了大量的源代码分析,找出了答案。
Reddit的源代码使用捆绑和缩小,但我可以推断,在./src/reddit/index.tsx中,有条件地将脚本加载到页面中。如果设置了SHOW_WHITE_OPS A/B测试标志,则它加载另一个脚本:https://s.udkcrj.com/ag/386183/clear.js.。该脚本加载https://s.udkcrj.com/2/4.71.0/main.js(尽管它似乎测试涉及使用空字节运行JSON.parse的浏览器错误,有时还加载https://s.udkcrj.com/2/4.71.0/JSON-main.js,但是我没有分析这个文件(尽管它看起来非常相似),如果由于另一个浏览器错误,!(";a";==";a";[0])的计算结果为TRUE,也不会执行任何操作)。
所有这一切的目的似乎既是为了指纹识别,也是为了防止广告欺诈。我已经确定udkcrj.com属于白色行动。我是从Reddit的功能旗帜的名字中推断出这一点的,并提到了White Ops,它是“BOT缓解、BOT预防和欺诈保护的全球领先者”。他们似乎是通过收集大量关于浏览器的数据,并对其进行分析来做到这一点的。我必须说,他们的系统相当令人印象深刻。
回到DRM问题,脚本似乎正在检查哪些DRM解决方案可用,但实际上并没有使用它们。然而,仅仅检查就足以触发Firefox显示DRM弹出窗口。具体地说,它查找Widevine、PlayReady、Clearkey和Adobe Primetime。
main.js做了很多其他有趣的事情,但是这些事情太多了,我已经单独写了一篇博文来介绍我找到的所有这些东西。以下是一些亮点:
包含似乎是Javascript Engine JIT漏洞/错误的内容,哈哈JIT GO brrrrr&34;出现在代码的一部分中,该代码似乎对数学运算进行了一些奇怪的操作。
具有对res://ieframe.dll/acr.js的模糊引用,可用于利用旧的Internet Explorer版本(我认为)。
检查在浏览器中实现的函数体是否包含[本机代码]当字符串化它的类似元时,它检查toString本身是否在本机代码中实现(尽管它没有深入到任何比数据更深的级别)