chromium修改canvas指纹
简介
Canvas 指纹的原理主要基于 HTML5 Canvas 元素的渲染行为和性能差异。当浏览器渲染 Canvas 元素时,会涉及到图形渲染引擎的工作,
而不同浏览器、不同操作系统甚至不同设备的图形渲染引擎实现方式和性能特征可能会有细微差异,
这些差异可以用来生成一个唯一的标识符,也就是 Canvas 指纹
canvas指纹的生成过程大致如下:
- 绘制图形:通过 JavaScript 脚本在网页上创建一个 Canvas 元素,并使用 Canvas API 绘制一些图形、文字或者图像等。
- 获取像素数据:使用 Canvas API 中的像素数据获取方法(如 getImageData)获取 Canvas 元素中绘制的图形的像素数据。
- 图形渲染差异:浏览器渲染 Canvas 元素时可能会存在一些微小的差异,这些差异可能源自于不同浏览器、不同操作系统或者不同设备之间的图形渲染引擎实现方式、渲染算法等。这些差异可能包括像素颜色值、像素填充方式、抗锯齿处理等。
- 生成指纹:根据获取到的像素数据中的渲染差异,进行一系列的处理和计算,生成一个唯一的标识符,即 Canvas 指纹。
Canvas 指纹并非是一个完美的识别和跟踪用户的方法,它可能受到浏览器配置、隐私设置、Canvas API 的变化等因素的影响,导致生成的指纹不稳定或者失效。因此,在使用 Canvas 指纹时,需要考虑到其局限性,并与其他识别和跟踪技术结合使用,以获得更准确和可靠的结果。
修改chromium源码
- 首先我们通过fingerprintjs源码,查看下生成canvas的源码
我们通过 web开发指指南看下这个fillRect这个函数的参数详解
那我们可以通过随机x,y,width,height来随机改掉这个
我们先准备一个C++ 里边获取随机种子函数
#include <iostream>
#include <cstdlib>
#include <ctime>
int randomFillRect() {
return rand() % 10;
}
int getRandomInt() {
srand((int)time(NULL));
return randomFillRect();
}
把我们写好的随机种子函数,新建一个头文件引入项目中
我们通过打开E:\chromium\src\third_party\blink\renderer\modules\canvas\canvas2d\base_rendering_context_2d.cc
文件,修改如下
接下来我们开始编译
autoninja -C out\Default chrome
接下来我们看看效果:每次刷新指纹都会改变