为何完全模拟设备已几乎不可能了?

如果你看过昆汀·塔伦蒂诺导演的电影《无耻混蛋》,那么你肯定记得这一场景:酒桌上,由于无意间做出的一个手势,乔装成纳粹军官的英国间谍最终被识破其间谍身份。 

尽管他身着纳粹军装,讲着德语,但是,这一细节出卖了他:他的手指。当他要求酒保再多上3品脱啤酒时,他伸出了他的食指,中指和无名指,而德国人通常会伸出拇指,食指和中指来表示数量3。桌上的一名纳粹军官注意到了这一细节,马上断定他是英国间谍。 

小细节引发的致命危险 

忽略某些细节将导致致命的失误,这同样适用于网上工作者。如果你忽视了某些看似无足轻重,实则至关重要的细节,那么你可能已经轻易地卸下了你的伪装,暴露了你真实的身份。 

在这篇文章中,我们将带你一探设备侦测的究竟,你将深入了解到为何设备模拟已几乎不可能。 

在开始前,我们需要快速了解一下为什么系统会侦测你的设备——这也是为什么人们尝试设备模拟的原因。 

忽略某些细节将导致致命的失误,这同样适用于网上工作者。如果你忽视了某些看似无足轻重,实则至关重要的细节,那么你可能已经轻易地卸下了你的伪装,暴露了你真实的身份。 

在这篇文章中,我们将带你一探设备侦测的究竟,你将深入了解到为何设备模拟已几乎不可能。 

在开始前,我们需要快速了解一下为什么系统会侦测你的设备——这也是为什么人们尝试设备模拟的原因。 

为什么系统会侦测我的设备? 

在浏览器起步之初及随之而来的“浏览器战争”时代,五花八门的浏览器意味着网站的开发者需要对网站访客所使用的浏览器,以及浏览器供应商进行侦测,从而调整和优化网站在不同浏览器上的响应机制,这仅仅是技术上的需要。

我们的老朋友–用户代理字符串,就是那个时代留下的产物。但如今,侦测和反侦测技术也已今非昔比。 

作为侦测方,大部分网站通过侦测机制来服务他们的用户。例如,Netflix支持数百种视频格式,这些视频可以在不同屏幕分辨率的设备上被播放,包括移动设备和智能电视。没有侦测机制,这将不可能实现。 

同样,我们也知道很多公司会为PC端设备提供功能齐全的产品,但却只为移动端设备提供功能有限的版本。

那么,为什么人们需要模拟设备呢? 

这正是我们需要讨论的问题,而问题的答案就在于问题本身:人们想要获取更多某种设备的参数,或者他们想打破所谓的“设备犹太区”(例如,他们不想因为自身使用的是移动设备而受到网站的某些限制)。同样,因为网站对不同的设备类型有着不同的安全标准,而网络不法分子正好可以利用这一特性为他们服务。 

某些网站并不会对移动设备设置Captcha验证,即便移动设备上某些特定的速率已经超过网站允许;又如,某企业只为使用某些设备类型的用户提供商品或者商品折扣。由此种种,导致人们开始想尽办法进行设备模拟。 

“军备竞赛”:侦测和反侦测 

如今,设备侦测方和设备伪装方的较量已然成为了一场“军备竞赛”。这场竞赛扩大了人们对高端技术,如机器学习和人工智能领域的投资力度。然而某些特定的方法却被人忽视,如谷歌的设备分类方法,Picasso——我们稍后会简明扼要地对此进行讨论。请记住:永远不要忽视这些细节,否则你的伪装将被立马识破。 

为什么设备伪装不尽人意? 

从最初的修改浏览器用户代理到更加先进的伪装技术,设备伪装可以通过很多种方式实现——这也意味着会有很多种侦测手段。 

你真的在使用移动设备吗?

许多人天真地认为设备伪装就像修改用户代理一样简单,我们想对这些人说:“嘴上说说很简单,请拿出证据来” 

例如,一些机构宣称他们可以伪装移动设备,可实际上只要在网站上进行测试,他们就会立刻露馅。原因在于他们没有模仿移动设备的具体特征,例如触屏控制。 

在触屏手机大行其道的时代,你能想象如今还有人还在使用不支持触屏功能的移动设备吗? 

答案是否定的。

网站会运用如下代码对你的设备进行测试,检查你的设备是否支持触屏功能: 

var touch_capable = ( 'ontouchstart' in window ) ||

          ( navigator.maxTouchPoints > 0 ) ||

          ( navigator.msMaxTouchPoints > 0 );

if(touch_capable) {

  alert("Supported");

} else {

alert("Not Supported");

}

我们在上文提到过,设备参数信息在设备伪装中是至关重要的。如果你宣称你的手机型号是iPhone 6,那么你需要知道iPhone 6的参数信息,至少你应该知道iPhone 6的屏幕大小。 

你见过屏幕分辨率为1920×1080的iPhone 6吗?——我们没见过,网站的侦测系统也没见过。 

另一个例子:如果你在Navigator.platform网站上进行测试,测试结果显示你使用的是MacBook,任何人都不会觉得奇怪。 

但是你见过同时运行Mac OS和Windows操作系统的MacBook吗?

在进行设备伪装时,往往有更多的细节被忽视。如果你在移动设备上使用浏览器,那么你肯定知道移动设备的浏览器窗口大小是无法被调整的。移动浏览器被开启之后就会被自动最大化,并且会覆盖整个屏幕。这也就意味着在侦测机制下,浏览器窗口的X值和Y值应固定为0,否则…… 

关于设备参数的话题我们还可以进行下去,但是是时候“微笑”一下了。

表情符号:你的表情是否已经将你出卖?

不知道你是否注意到:即使用同一种方法输入表情符号,在不同的设备上显示出来仍会有所不同。

我们用微笑这个表情符号举例,看看在不同设备上所显示的结果:

源自: Emoji Unicode characters for use on the web

假设你说自己的设备是安卓系统,侦测机制就会获取你设备上表情符号的哈希值,并与原生安卓系统上同一表情的哈希值进行比对,如果结果不一致,那么网站就会认为你是伪装的。是不是很神奇呢? 

微笑这个表情符号的Unicode编号为U+1F600。网站在使用这个编号显示你的表情符号的同时,给你的设备添加一个特定的值,让你区分于其他人。 

下图展示了U+1F600在不同设备上的哈希值:

在Windows 10上,同一表情符号在不同版本的谷歌浏览器则显示出相同的哈希值,这些哈希值通过sha256计算得出: 

你的浏览器字体一致吗?

任意系统都有预安装的字体,其中某一字体被用做默认的系统字体。例如,iOS 13上预安装了Academy-Engraved-LET-Plain-1.0字体,而macOS Catalina系统上则预安装了Al Bayan Bold字体,两种操作系统上所支持的字体并不一样。 

同样,Tahoma字体是Windows XP的默认系统字体,但是从Windows Vista开始,系统默认字体变更为Segoe UI字体。微软在近期的Windows 10支持的字体列表中添加了如下注释:

“请注意:并非所有的桌面端字体都会被非桌面端的Windows 10系统所支持,这些非桌面端系统包括Xbox,HoloLens和SurfaceHub等。” 

侦测机制会对电脑的字体进行检测,如果系统字体缺少了列表内的某些字体,那么网站将判定你为非正常用户。 

硬件安全方法——物理不可克隆函数

针对这一点,我们进行了多项测试,发现了一些问题,有些问题确实会让你的伪装立刻失效,但是要解决其中一些问题却并非难事。比如,你可以通过改写浏览器及其搭载的字体、表情符号和二进制相关的特征来解决这些问题,但是这将花费大量的时间和成本。 

但是,所有的坏事都有好的一面。

2006年,谷歌反滥用团队的一名成员艾莉·伯斯汀公开发表了一篇名叫《Picasso》的文章,该文细致地介绍了谷歌是如何应对谷歌商店内的设备伪装问题的。 

Picasso通过一些渲染操作对浏览器的设备进行分类,而这些渲染操作高度依赖 浏览器操作系统和图形硬件。通过初始化哈希种子,每一次轮询时,Picasso都会随机在画布上创建几何符号。 Picasso会对种子、轮询和几何符号宽度及高度进行分析,最后获得由不可克隆特征,如操作系统和图形硬件所产生的图形输出。“伪装者”们无法逃避Picasso的检测,除非他们能够复现Picasso的算法流程。 

Picasso所使用的伪代码,摘自艾莉·伯斯汀所发表文章 

然而,如果不能从真实设备上获取到预先计算好的某些参数,Picasso也仅仅是一个数据库罢了。但是,这一数据库将在接下来进行设备验证时发挥重要的参考作用。   

我们注意到了Picasso工作时的一些重要特征。比如,它通过HTML Canvas完成图像和动画绘制。人们倾向于认为Canvas被用来提高指纹的熵值和独特性。我们Multilogin的工程师在几年前就测试证明:Canvas并不能提高指纹的独特性;相反的,如果不同设备具有相同的“元素”,如硬件,那么他们的Canvas哈希值将保持一致。

谷歌团队在2006年运用了Canvas的这一特性,进行设备侦测,从而辨别哪些是伪装的设备。

同一图片分别在真实的和伪装的iPhone设备上用Safari浏览器显示,渲染效果大相径庭

尽管2006年至今已有很长一段时间,但是Cloudflare采用了这一技术。每当我们谈及他们的市场份额有多大时,Picasso无疑是我们绕不开的话题。 

尽管反设备侦测的一方也掌握了一个由真实设备获取的预计算哈希值组成的数据库 ,他们的设备及操作系统的伪装也难以逃脱Picasso的侦测。难道你觉得谷歌和 Cloudflare没有掌握着足够的数据来鉴别设备的真实性吗?

结论:“要么看起来像你,要么像你看起来一样” 

要么看起来像你,要么像你看起来一样——诗人鲁米的这句话给了我们启发。一直以来,我们建议用户尽可能使用与其本地操作系统相匹配的浏览器配置文件设置。 

尽管Multilogin已经采取了一系列措施,如自动分配对应操作系统所支持的字体,默认展示设备的真实的Canvas指纹等,而设备伪装的最终理念应该是尽可能的保持真实。在创建配置文件时,选择与你的本地操作系统相匹配的浏览器配置文件设置并不会引起侦测机制的警觉;相反,如果侦测机制检测到伪装的操作系统和实际操作系统有所出入,那么很有可能你已经“暴露”了! 

伪装的精髓在于悄无声息地融入人群之中。而从设备伪装的角度来看,正如鲁米所说的,我们给你的建议是:要么看起来像你,要么像你看起来一样。 

关注我们,方便快捷地获取我们的最新资讯!

你可能感兴趣的:(为何完全模拟设备已几乎不可能了?)