007.指纹浏览器编译-随机plugins指纹

一、什么是plugins指纹

  • “Plugins 指纹”(browser plugin fingerprinting)是一种在线追踪技术。
  • 它根据已安装的插些信息,汇总起来创建出一个独特的指纹。
  • plugins指纹唯一性不是特别高,需要配合其他指纹一起使用。

二、如何获取自己的plugins指纹

  • 有攻才有防,先看看网站是如何通过js获取你的plugins指纹的。
  • 将下面的代码复制到F12控制台,就可以获取显示你的plugins指纹了
async function sha256(message) {
    // 把字符串转换为Uint8Array
    const msgBuffer = new TextEncoder().encode(message);
    // 计算散列值
    const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
    // 转换为数组
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    // 转换为16进制字符串
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    return hashHex;
}

function getPluginsString() {
    if (navigator.plugins === undefined || navigator.plugins.length === 0) {
        return 'no plugins'; // 指示没有插件或无法访问插件信息
    }
    var pluginsString = [];
    
    // 遍历插件列表
    for (var i = 0; i < navigator.plugins.length; i++) {
        var plugin = navigator.plugins[i];
        var pluginString = plugin.name + '::' + plugin.description + '::' + plugin.filename;
        var mimeTypes = [];
        
        // 遍历并列出每个插件支持的MIME类型
        for (var j = 0; j < plugin.length; j++) {
            var mimeType = plugin[j];
            mimeTypes.push(mimeType.type + '~' + mimeType.suffixes);
        }
        
        // 如果有MIME类型,添加至插件信息字符串中
        if (mimeTypes.length > 0) {
            pluginString += '::' + mimeTypes.join(',');
        }
        
        // 将完整的插件信息字符串加入列表中
        pluginsString.push(pluginString);
    }
    
    // 返回一个总的插件信息字符串,用分号隔开各插件
    return pluginsString.join(';');
}

var pluginsFingerprint = getPluginsString();
//这个字符串可以用作插件指纹的一部分

sha256(pluginsFingerprint).then(hash => console.log(hash));
  • 输出:
e336f0bfce56a91fd1fd0a88530f3bf323ad23cf6155769cc89b09092880cde9

三、chromium编译-随机plugins指纹

  • 首先假设你已经编译成功了,我也在第一篇文章写了如何编译chromium的大概流程。
  • 打开源码 third_party/blink/renderer/modules/plugins/dom_plugin.cc
1.头部加上(随便加在一个#include后面)
#include <random>
#include <string>
2.找到下面的代码
String DOMPlugin::description() const {
  return plugin_info_->Description();
}
替换为
int getRandomIntForFoo8Modern() {
    static std::mt19937 generator(static_cast<unsigned long>(time(NULL))); // 静态以确保只初始化一次
    std::uniform_int_distribution<int> distribution(0, 9);
    return distribution(generator);
}
String DOMPlugin::description() const {
  //return plugin_info_->Description();
  String tmp = plugin_info_->Description();
  return tmp + String(std::to_string(getRandomIntForFoo8Modern()));
}

此处原理是给每个plugin的description末尾加个随机数,实现hash的指纹随机
在这里插入图片描述

3.编译
ninja  -C  out/Default chrome
  • 编译后每次刷新时plugins指纹都是随机的了。

四、在线指纹验证网站:

  • https://abrahamjuliot.github.io/creepjs/
  • https://ip77.net/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王辉辉的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值