【网络爬虫教学】虫师终极武器之Chromium定制开发系列(五)

Hi,大家好,欢迎大家观看由IT猫之家打造的【网络爬虫教学】虫师终极武器之Chromium定制开发系列教学文章的第五篇,如果您是第一次观看本系列教程,请先移步到这里看完前面的文章后再回来哦!大家在学习的过程中,有任何疑问可以留言或加入我们的QQ技术交流群进行探讨: 544185435

概述

在上一篇文章末尾,我给大家分享了如何随机化webgl接口(主要针对显卡型号)的方案,其实呢,只要掌握了这个,后面其他的都是一样道理的,我们只要照着葫芦画瓢就好,那么接下来我们一起来看看今天的任务吧,今天我们主要要实现:canvas、webAudio以及webRTC这三个接口的随机化,如果说谁是FP重点的检测对象,那么以上三个绝对是首选的。

关于canvas

Canvas意为“画布”,是H5首度引入的一种绘画标签,常用于网页中实时生成图像,并且可以操作图像的内容,基本上它是一个可以用JavaScript操作的位图,而多数情况下开发者们都利用它来绘制各种2D、3D图像,而作为H5的绘画API它也有一个输出字符串的接口,可直接将绘画的图片转化成base64,而canvas fingerprint 就是利用了这个接口计算出bs64然后再进行hash计算从而得出该指纹凭证。

关于webAudio

webAudio同样也是H5导出的API接口之一,它就像是web端的Audition,可用作音频处理,其功能非常强大,从音频剪辑、噪音处理,到音频合成,它都完全可以胜任,而它的指纹检测机制与Canvas类似,都是导出一个介质,Canvas导出的是图形,而webAudio则导出的是音频,同样,它们在同一机器上绘制的内容,出来的hash值都是一样的,所以该接口也是作为FP枚举的重要指标之一。

关于webRTC

webRTC为网页即时通讯协议( Web Real-Time Communication )的缩写,常用于实时语音视频通话等,是一个基于网页浏览器通信的API,通过该API,JavaScript可以轻松的实现网络视频通话这类的web应用开发,而webRTC大致可划分成 Network Stream API、 RTCPeerConnection、和Peer-to-peer Data 这三大类, 其中 RTCPeerConnection 标准协议在通信时表示一个本地与远端建立链接的对象,该对象提供了创建、保持、监控、与关闭等连接方法的实现,在通信的过程中,它有个方法可以直接暴露客户端IP真实地址,而FP利用该方法可以轻松取得客户端的真实IP地址,即使用了匿名的dai理,也无济于事。

Canvas接口随机化的实现

从上述介绍中我们可以得知,Canvas指纹是基于绘画的接口导出的字符串加密后得到的,那么,对于它的随机化,我们可以从它绘画的时候着手,或者在输出字符串的时候着手,这里我推荐使用前者。

FilStyle是Canvas的样式接口,它支持符合CSS3国际颜色值标准的有效字符串输入,而我们可以在该接口中实现样式的篡改从而达到每次绘画的结果都不一样的目的,我们可以预设一些颜色值让其在绘画时可自动选择:

// 这些 fillStyle 的值均为 '橙色'

ctx.fillStyle = "orange";

ctx.fillStyle = "#FFA500";

ctx.fillStyle = "rgb(255,165,0)";

ctx.fillStyle = "rgba(255,165,0,1)";

我们这里为了方便操作,采用了第三种方式,即:ctx.fillStyle = “rgb(255,165,0)”; 在渲染时,我们直接将网页(通常为JS)传入的Style,进行篡改,其中rgb值为随机0-255,那么最终的的绘画效果就是按实际产生的值对应的颜色为准,如果不想太过随机,那么大家可以先解析Style,然后再进行偏移量计算,比如每次随机增加0-5,这样对外观的影响不大,同时也起到了随机的作用。

留意框框里的颜色变化以及Signature的变化。

我们可以对比这两张图,不但颜色改变,其它值也跟着发生了本质的改变。

重构FillRect接口

我们说FillStyle是Canvas的样式接口,那么FillRect则为它的填充接口,同样,我们也可以重写这个接口实现随机化的目的,首先,我们从上图可以看出这个fillRect有四个参数,它们分别是坐标 + 尺寸,我们可以对这些值进行篡改,可以保留坐标值或尺寸值,只修改其中一个便可不需全部篡改,不过值得注意的是,修改该项会直接影响绘画的坐标、尺寸大小等,所以建议设置偏移值即可,如每次随机0-5之间的阈值。

webAudio 接口随机化的实现

webAudio 的随机化实现与Canvas类似,不过在实现Canvas随机化时,我们采用随机化RGB的形式实现,在音频的世界中,根本就没有颜色的说法,那么该如何去实现呢?

在webAudio中有个CreateBuffer接口可以创建一个临时的空白音频缓冲区域以便于用作音频填充,创建完毕后通过AudioBufferSourceNode接口来播放音频,照着葫芦来画瓢,既然Canvas可以在绘画时篡改颜色,那是不是我们也可以在创建音频的时候对音频进行处理呢,答案是肯定的。

从上图我们可以看到该接口有3个参数,并且都是纯数值的,所以我们只需在这着手即可实现随机化效果,由于我目前对音频方面的知识涉及不够深,采用的方式可能会直接影响音频的输出(即可能会对浏览器造成一定的影响),如果大家熟知这些API,可根据这些API去寻找相关的方法并将其重写即可。

var audioCtx = new AudioContext();

var buffer = audioCtx.createBuffer(2, 22050, 44100);

我们不妨看看上面这两句代码,它会得到一个立体声的音频片段,当它在一个频率为44100赫兹(这是目前大部分声卡处理声音的频率)的音频环境(AudioContext)中播放的时候,会持续0.5秒:22050帧 / 44100赫兹 = 0.5 秒。

编译完成后可以到:AudioContext指纹检测 进行指纹检测校验,由于我将三个参数都随机化了,所以导致绘画的图尺寸严重超出预期值,所以大家可以按需设定阈值。

WebRTC接口随机化实现

RTCIceCandidate.RTCIceCandidate作为webrtc子集,常用于获取本地客户端通信相关的信息,如客户端真实的IP地址等,其返回值为一个RTCIceCandidate对象,通常用作表示单个ICE候选对象。

candidate:735671172 1 udp 2113937151 172.30.23.16 60444 typ host generation 0 network-cost 999

在RTCIceCandidate对象中,有一个字符串类型的address,该项包含的地址为本机的IP地址,candidate则为对象子集字符串类型的导出,通常FP检测通过该属性取得IP地址,所以,我们只需篡改该属性即可达到ip随机化的目的,请注意,该项仅针对webrtc检测有效,实际握手IP仍然以实际使用的IP为准。

上图为模拟fp基于webrtc检测,注意观看IP的变化。

function getUserIP(onNewIP) { //  onNewIp - your listener function for new IPs

      //compatibility for firefox and chrome

      var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;

      var pc = new myPeerConnection({

        iceServers: []

    }),

    noop = function() {},

    localIPs = {},

    ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,

    key;

    function iterateIP(ip) {

        if (!localIPs[ip]) onNewIP(ip);

        localIPs[ip] = true;

    }

      //create a bogus data channel

    pc.createDataChannel("");

    // create offer and set local description

    pc.createOffer().then(function(sdp) {

        sdp.sdp.split('\n').forEach(function(line) {

            if (line.indexOf('candidate') < 0) return;

            line.match(ipRegex).forEach(iterateIP);

        });


        pc.setLocalDescription(sdp, noop, noop);

    }).catch(function(reason) {

        // An error occurred, so handle the failure to connect

    });

    //sten for candidate events

    pc.onicecandidate = function(ice) {

        if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;

        ice.candidate.candidate.match(ipRegex).forEach(iterateIP);

    };

}

// Usage

getUserIP(function(ip){

    alert("Got IP! :" + ip);

});

以上代码可以粘贴在chromium console里,方便我们测试。

总结

本文是本系列文章的第五篇,主要分享如何实现基于浏览器内核级别的接口随机化的思路,在本篇中,我们主要分析了canvas、webAudio、以及webrtc等这三大fp重点检测对象的主要构成以及接口篡改的一些小建议,以便于实现随机化的功能。


原文转至IT猫之家,转载请注明出处!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容