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

作者: 叮噹貓の神 分类: Chromium二次开发,软件开发 发布时间: 2019-12-29 15:51

Hi,大家好,欢迎大家观看由IT猫之家打造的【网络爬虫教学】虫师终极武器之Chromium定制开发系列教学文章,本系列课程主要围绕部分无法通过解密JS来实现的加密而编写,大家在学习过程中,有任何疑问可以留言或加入我们的QQ技术交流群进行探讨: 544185435

Chromium

开发初衷

之所以要撰写这一系列文章,主要是想开发出一套安全系数高的匿名浏览器产品,当然这不仅仅是为了裹上一层壳然后拿去欺骗大家,我的目的是打造一款虫师们专属的高匿浏览器,用以抗衡臭名远扬的FP指纹检测机制,如果您此前还不知晓FP指纹是什么,可以前往:fingerprintjs2 了解,总的来说呢,这是一套专门针对客户端作检测的浏览器脚本,与常规的检测不同的是,它主要针对各方面的特征进行多维度检测,就好比我们人类,我们有五官,眼睛、鼻子、耳朵、嘴巴、舌头等重要的属性,当然这些属性是每个人天生就具备的,但我们每个人的指纹都不一样,仅仅通过指纹我们就能很准确的辨别出某个人,事实上FP检测机制就是采用了相似的技术,我们都知道JS作为一种前端脚本语言,它的权限其实是非常小的,甚至也不具备获取客户端系统信息的能力,而通过使用FP检测机制便可巧妙的避开浏览器的安全机制,通过浏览器提供的现有接口遍历其各种属性,从而计算出一串固有的指纹,而该指纹正常情况下无论你换浏览器版本还是使用别的浏览器,出来的结果都会是一样,意思是说,你就是化成灰它也认得你,事实上这种技术近些年被广泛运用到了第三方广告联盟之中,当然也有许许多多的网站为了辨别出访问者是否为本人而非爬虫,也大量的运用到了该技术,而我们开发的这款浏览器主要是用于针对这些固有的属性进行一系列重构,使其每次获取的指纹都不一致,进而提高被识别的风险!

Fingerprintjs - 指纹检测

编译要求

开发这套浏览器我们需要先取得Chromium的源代码,从而构建出Chromium的原型,我们再从中进行改造,进而完成二次开发的需求,但二次开发Chromium或编译它是有门槛的,首选,我们需要熟悉CPP这门语言,其次,编译Chromium对硬件的要求也特别高,有多高呢?根据官方文档的介绍,我们需要准备:64位操作系统Win7或更高(本教程均在Windows10 x64位操作系统中完成)、8-16G甚至更高容量的内存 、需要配备NTFS格式的磁盘分区,并且,该分区的可用空间不得低于100GB,FAT32格式的分区将不适用,因为大部分单文件都大于4G,远远超过FAT32的支持、下载安装官方指定的Visual Studio版本,据最新文档要求使用 Visual Studio 2017(>= 15.7.2)或 2019(>= 16.0.0) 我强烈的推荐大家购置SSD硬盘,因为效率会高很多,如果说编译Chromium需要一天,那么SSD会帮你缩短至少半天时间。

构建编译环境

在完成上述的步骤后,我们还需要在VS相应的版本中安装CPP桌面环境开发 + 以MFC开头的所有支持组件,除此之外,我们还需要为系统安装 10.0.18362 或更高版本的Windows 10 SDK,SDK可以单独安装,也可以在VS安装包里选择安装,值得注意的是,我们安装的SDK默认是没有安装调试工具的,所以我们还需要通过以下步骤来安装它:打开控制面板 –> 程序 –> 程序和功能 –> 找到并选择您安装好的SDK开发工具包 –> 更改 –> 选择change点击下一步 –> 勾选 Debugging Tools For Windows –> 点击Change;等待安装完毕后关闭即可,或者您也可以单独下载安装Windows10的基于 10.0.18362 版本的SDK,并使用其来安装调试工具。

安装SDK与C++桌面开发环境

下载depot-tools并配置环境变量

depot-tools 是由谷歌提供的一款用于拉取与管理Chromium的强大工具,我们后期将会通过它来管理与更新chromium版本,值得注意的是,我们下载该工具后,务必要使用解压工具进行解压到目录中,而非通过系统自带的提取工具进行提取,该工具默认不会提取隐藏的文件,压缩包里包含了.git的隐藏文件,主要用以更新自身文件版本,不过我们仍然可以通过使用提取全部来将其提取。

depot-tools管理工具

如图我们将下载后的文件提取到任意目录,这里我建议大家解压到与chromium源码同一磁盘中,当然,也不限制解压的位置,之后,我们需要为 depot-tools 配置环境变量,我们按键盘上的:win + PauseBreak键(如果您的键盘支持)或打开控制面板 –> 系统和安全 –> 系统,打开系统属性页面,它看起来像这样:

系统属性页面

我们点击面板左侧的高级系统设置,然后再点击环境变量(N) 进入环境变量面板。

打开环境变量窗口
环境变量面板

我们在系统变量下点击新建(W)按钮,创建一个系统环境变量,变量名为:dptool 变量值为:您解压该工具的完整路径,这里我使用的是:C:\depot_tools\ 大家按实际情况填写即可。

找到path系统变量

找到名为Path的系统变量,然后点击编辑(I)按钮。

引用环境变量

打开编辑面板后,我们点击新建按钮,并以两个百分号%将刚刚创建的系统变量进行包裹,它看起来像这样:%deptool%,然后点击上移(U)请确保它排在第一位,务必要保证它排在其它python版本之前,因为这将导致无法正常使用!

添加GYP_MSVS_VERSION与DEPOT_TOOLS_WIN_TOOLCHAIN系统变量

另外,我们以上述方式在新建一个名为:DEPOT_TOOLS_WIN_TOOLCHAIN 的系统变量,其变量值为 0,再新建一个名为: GYP_MSVS_VERSION 的系统变量,其值为:2019,前者用于告诉 depot_tools 当前使用本地安装的VS版本进行编译,默认情况下尝试使用谷歌内部版本,而后者则告诉 depot_tools 要使用本地的2019版本的VS进行构建,如果您的是2017则变量值为2017,按需填写即可。

打开命令行键入命令gclient

当完成上述的配置后,我们可以按键盘上的win + r键然后按回车后打开CMD窗口,输入gclinet,如无意外则会返回一堆参数,如果大家看到的是该命令不是系统命令之类的提是,表示你当前的环境变量没有正确配置,需重新配置一遍。

链接失败gclient命令返回

配置全局代理

按照上述流程走,正常情况下是没有任何问题的,但有一个非常重要的问题,是非常非常非常重要的问题,我们都知道,谷歌服务在国内是被受到限制的,所以想要在国内构建Chromium我们还需要配备一个能访问到境外的网络,当然这个大家得自行解决了,建议大家在路由器端部署全局畅(dai)游(li),这可以让我们在构建时省去很多的麻烦,相信我,单独在机器上配置的畅(dai)游(li)器在拉取Chromium时将会是一个非常烦躁的过程……

纸飞机 - 畅游无界限

纸飞机 – 畅游无界限,您值得拥有!强烈推荐大家使用蓝色的小飞机,大家认准囖,之所以推荐大家使用它,因为它是基于Socks5协议,支持多种类型的加密协议,并且,它支持跨平台,兼容性特别好,最重要的一点是,它可以自动分流,当访问的网站为国内站点时,使用本地网络,而访问国外站点时则自动切换到国外的节点,而当下,有许许多多的路由器是支持使用这款小飞机的,所以如果您的浏览器也支持,强烈的推荐您使用!

为 depot_tools 配置代理

如果您不想通过路由器设置或路由器不支持,那么我们也可以为 depot_tools 单独的指定代理方式,但在获取Chromium过程中,可能会遇到无法拉取部分源码的问题,当然,这些问题在后面如果有遇到,我也会持续分享给大家,并讲解如何解决这些问题!

以管理员身份打开命令行工具,并设置代理

我们以管理员身份打开命令行工具,这里我们按win + x 在弹出的菜单中,选择Windows PowerShell(管理员)(A),大家也可以使用CMD,但同样请务必以管理员模式打开,然后输入:netsh winhttp set proxy 127.0.0.1:1080 (这是小飞机的机场地址,请自行设置为您的机场地址),设置成功则会出现:当前的….

netsh winhttp reset proxy

当我们不再需要使用飞机的时候,要记得关闭机场哦,否则可能会影响上网呢,重置命令为:netsh winhttp reset proxy

为python与git配置代理

同时,我们还需要为python与git配置代理哦,指令为:

#设置python代理
set http_proxy=http://127.0.0.1:1080
set https_proxy=https://127.0.0.1:1080
set socks5_proxy=socks5://127.0.0.1:1080
#设置git代理
git config --global http.proxy 'http://127.0.0.1:1080'
git config --global https.proxy 'https://127.0.0.1:1080'
#取消git代理设置
git config --global --unset http.proxy
git config --global --unset https.proxy
再次执行gclient命令

待一切配置完毕后,再此执行gclient命令,我们会发现,这一次很快就返回了结果,同时再也看不到443错误了,表示当前环境已经全部配置完成,如果您的还是不行,可以检测下是否为小飞机的问题,或者机场端口是否正确!

git config --global user.name "itmaohome"
git config --global user.email "[email protected]"
git config --global core.autocrlf false
git config --global core.filemode false
git config --global branch.autosetuprebase always

如果大家是初次使用git,则还需为git创建一个账户,由于我这里之前已经拉取过chromium源码,所以并不是第一次使用,所以就不作演示了,大家以管理权限打开命令行输入上述指令即可。

拉取Chromium源代码

拉取Chromium

至此,我们已完成所有的配置信息,并且已经将环境搭建完毕,接下来我们创建一个目录用于获取Chromium,我在D盘创建了个ChromiumSource的目录,该目录用于存放Chromium源码(请注意,磁盘空间务必大于40GB)由于Chromium的源代码是非常大的,完整拉取可能需要100G或以上的空间,所以我们只拉取最新的版本,在拉取指令中添加–no-history即可过滤以往版本,拉取指令为:fetch chromium –no-history 如无意外,它拉取下来的文件大小大约22GB左右,如果中间被中断或宕机了,可以在开机后通过命令行输入gclient async进行任务同步。

执行gclient async同步或拉取最新任务

从上述fetch指令中我们可以看到,我电脑本地已经存在分支,所以无法使用fetch拉取,所以我可以通过gclient async进行同步任务,事实上gclient async也可以用于增量更新Chromium版本,因为Chromium的更新速度是非常的快的,基本每天都在更新,所以你会发现,当前的Chromium版本远比Chrome的版本高出许多,而后期,我们要做版本更新也可以通过该指令更新即可。那么接下来就是漫长的等待时刻啦,拉取过程取决于本地网速,快则2个小时,慢则半天到一天都有可能,等下载完毕后我们便可看到目录中多了如下文件:

Chromium拉取完成

总结

以上为本篇文章的所有内容,首先我给大家分享了开发这款浏览器的缘由,而后,我也详细的为大家讲解了如何去一步一步的搭建Chromium编译环境,以及如何获取源码等,这都是必经的过程,没有任何的捷径,这也变相在告诉大家,其实要开发一款浏览器是真的很不容易,那么下篇开始我们将正式踏如浏览器开发之旅,欢迎大家继续参阅!

知识共享许可协议 本文遵循 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议。未经本站授权仅允许进行复制或转载,禁止二次利用,版权归IT猫之家所有!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!