chromium随机WebGL
简介
WebGL(Web Graphics Library)是一种用于在浏览器中渲染3D图形的JavaScript API,俗称硬件显卡型号。WebGL指纹是一种通过浏览器对用户进行唯一标识的技术。它基于用户设备的硬件和软件信息,如GPU型号、驱动程序版本、操作系统等,创建一个唯一的标识符。这种指纹技术可以被用于用户跟踪、数据分析、以及数字广告定向投放等用途。
什么是WebGL指纹
您可以看到两种 WebGL 指纹:
- WebGL 报告
整个 WebGL 浏览器报告表的哈希值,其中包含上述所有 WebGL 功能和支持的扩展的列表。哈希取自支持的最高 WebGL 上下文转储。 - WebGL 图像
通过绘制 WebGL 渐变着色器创建的像素数组的哈希值。借鉴了Fingerprintjs2库的绘制功能,目前正在研究生成图像的唯一性百分比。
获取哈希的方法仅涉及 WebGL API,并且不依赖于浏览器在 toDataURL PNG 导出中的差异,因此此指纹在单个设备中的浏览器之间可能相似。
通过源码定位修改的地方
搜索前边的 unmasked vendor/和renderer ,修改厂商信息和显卡信息
定位在E:\chromium\src\third_party\blink\renderer\modules\webgl\webgl_rendering_context_base.cc
文件内
修改
- 准备随机显卡信息头文件
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int randomGPU(int x) {
return rand() % x;
}
String GetGPUList() {
srand((int)time(0));
String GPUList[] = {
"ANGLE (AMD, AMD, Radeon (TM) RX 470 Graphics Direct3D11 vs_5_0 ps_5_0, D3D11-27.20.1034.6)",
"ANGLE (Intel, Intel(R) HD Graphics 6000 Direct3D11 vs_5_0 ps_5_0, D3D11-20.19.15.5126)",
"ANGLE (NVIDIA, NVIDIA GeForce GTX 950 Direct3D9Ex vs_3_0 ps_3_0)",
"ANGLE (NVIDIA, NVIDIA Quadro P1000 Direct3D11 vs_5_0 ps_5_0)",
"ANGLE (NVIDIA, NVIDIA Corporation, GeForce GTX 950M/PCIe/SSE2, OpenGL 4.5 core)"
};
return GPUList[randomGPU(5)];
}
- 引入头文件到webgl_rendering_context_base.cc中
- 修改代码如下
- 修改效果如下