首页 > 其他分享 >浏览器指纹修改指南2024 - 命令行控制SpeechVoice指纹(七)

浏览器指纹修改指南2024 - 命令行控制SpeechVoice指纹(七)

时间:2024-10-10 08:50:13浏览次数:3  
标签:pre std SpeechVoice pos 指纹 2024 str fake voice

引言

在前几篇文章中,我们深入探讨了如何通过修改Chromium源码来定制化SpeechVoice,从而实现浏览器指纹的修改。这些方法虽然有效,但对于一些用户来说,直接修改源码可能显得过于复杂和繁琐。

为了简化这一过程,本篇文章将介绍如何通过命令行来自定义浏览器指纹。通过命令行工具,您可以更加便捷地进行配置和修改,无需深入了解源码的具体实现细节。这不仅能大大提高效率,还能降低出错的风险。

接下来,我们将详细讲解如何使用命令行工具来实现对SpeechVoice的定制化处理,帮助您更好地保护隐私,避免被网络追踪。让我们开始吧!

1.注册命令行参数

在使用命令行参数时,我们需要先在文件中注册相应的关键字来告诉程序需要读取这些命令行参数,具体见前面的修改电池API的文章,这里我们只讲修改的方法

1.1 修改content/public/common/content_switches.h

在该文件中添加上我们自定义命令行参数的名称声明

CONTENT_EXPORT extern const char kSpeech[];

1.2 修改content/public/common/content_switches.cc

在该文件中添加上自定义命令行参数的具体字段

const char kSpeech[] = "speech-voice";

1.3 修改content/browser/renderer_host/render_process_host_impl.cc

我们在该文件的void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer中添加如下代码,说明要将这个参数传递给渲染进程

    switches::kSpeech,

2.规定参数格式

我们规定传入两个SpeechVoice,具体需要的值为namelangis_localis_default,用|来分隔属性,用逗号分隔每一项,可以自己规定任何格式,可以解析即可,这里我们选择上述的组织方式,例如

"Google Bahasa Indonesia|id-ID|1|1,Google italiano|it-IT|1|0"

3.解析参数

对应的我们需要获取到参数并进行解析

#include "base/command_line.h"
// 获取命令行参数
  std::string speech_str = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("speech-voice");
  // 解析命令行参数,将Google français|fr-FR|1|1,Google हिन्दी|hi-IN|1|0分割成对应大小的数组
  std::vector<std::string> fake_str_vec;
  // 寻找,分割的位置并将其分割
  size_t pos = 0;
  size_t pre_pos = 0;
  while ((pos = speech_str.find(",", pre_pos)) != std::string::npos) {
    fake_str_vec.push_back(speech_str.substr(pre_pos, pos - pre_pos));
    pre_pos = pos + 1;
  }
  // 对每一个分割的字符串进行处理
  for(std::string str: fake_str_vec) {
    // 寻找|分割的位置并将其分割
    size_t pos = 0;
    size_t pre_pos = 0;
    std::vector<std::string> fake_str;
    while ((pos = str.find("|", pre_pos)) != std::string::npos) {
      fake_str.push_back(str.substr(pre_pos, pos - pre_pos));
      pre_pos = pos + 1;
    }

然后将对应的解析出来的进行再次的解析并构造

// 对分割的字符串进行处理
    mojom::blink::SpeechSynthesisVoicePtr fake_voice = mojom::blink::SpeechSynthesisVoice::New();
    fake_voice->name = WTF::String::FromUTF8(fake_str[0]);
    fake_voice->voice_uri = WTF::String::FromUTF8(fake_str[0]);
    fake_voice->lang = WTF::String::FromUTF8(fake_str[1]);
    fake_voice->is_local_service = fake_str[2] == "1";
    fake_voice->is_default = fake_str[3] == "1";
    voice_list_.push_back(
        MakeGarbageCollected<SpeechSynthesisVoice>(std::move(fake_voice)));
  }
  // 提前通知并返回
  VoicesDidChange();
  return;
  // 完成伪装

4.完整代码

void SpeechSynthesis::OnSetVoiceList(
    Vector<mojom::blink::SpeechSynthesisVoicePtr> mojom_voices) {    
  voice_list_.clear();
  
  // 获取命令行参数
  std::string speech_str = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("speech-voice");
  // 解析命令行参数,将"Google Bahasa Indonesia|id-ID|1|1,Google italiano|it-IT|1|0"分割成对应大小的数组
  std::vector<std::string> fake_str_vec;
  // 寻找,分割的位置并将其分割
  size_t pos = 0;
  size_t pre_pos = 0;
  while ((pos = speech_str.find(",", pre_pos)) != std::string::npos) {
    fake_str_vec.push_back(speech_str.substr(pre_pos, pos - pre_pos));
    pre_pos = pos + 1;
  }
  // 对每一个分割的字符串进行处理
  for(std::string str: fake_str_vec) {
    // 寻找|分割的位置并将其分割
    size_t pos = 0;
    size_t pre_pos = 0;
    std::vector<std::string> fake_str;
    while ((pos = str.find("|", pre_pos)) != std::string::npos) {
      fake_str.push_back(str.substr(pre_pos, pos - pre_pos));
      pre_pos = pos + 1;
    }
    // 对分割的字符串进行处理
    mojom::blink::SpeechSynthesisVoicePtr fake_voice = mojom::blink::SpeechSynthesisVoice::New();
    fake_voice->name = WTF::String::FromUTF8(fake_str[0]);
    fake_voice->voice_uri = WTF::String::FromUTF8(fake_str[0]);
    fake_voice->lang = WTF::String::FromUTF8(fake_str[1]);
    fake_voice->is_local_service = fake_str[2] == "1";
    fake_voice->is_default = fake_str[3] == "1";
    voice_list_.push_back(
        MakeGarbageCollected<SpeechSynthesisVoice>(std::move(fake_voice)));
  }
  // 提前通知并返回
  VoicesDidChange();
  return;
  // 完成伪装


  for (auto& mojom_voice : mojom_voices) {
    voice_list_.push_back(
        MakeGarbageCollected<SpeechSynthesisVoice>(std::move(mojom_voice)));
  }
  VoicesDidChange();
}

5.编译并检测

.\out\vs_dev\chrome.exe --speech-voice="Google Bahasa Indonesia|id-ID|1|1,Google italiano|it-IT|1|0"

去检测站查看

结果如我们传入的值一样

证明我们的修改成功

结语

本文介绍了一种通过命令行参数来自定义Chromium浏览器SpeechVoice指纹的方法。这种方法相比直接修改源码更加灵活和便捷,使得用户可以更轻松地保护自己的隐私和避免被网络追踪。

通过本文的方法,用户可以轻松地通过命令行参数来设置自己想要的SpeechVoice配置,从而实现对浏览器指纹的有效控制。这为用户提供了一种简单而强大的工具,使其能够更好地保护自己的在线隐私。

需要注意的是,虽然这种方法相对简单,但仍然需要重新编译Chromium。对于那些希望更深入地了解和控制浏览器行为的用户来说,这是一个很好的起点。

最后,我们鼓励读者在实际应用中进行更多的尝试和探索。通过不断的实践和创新,我们可以开发出更多保护用户隐私的方法,为构建一个更安全、更尊重隐私的互联网环境做出贡献。

标签:pre,std,SpeechVoice,pos,指纹,2024,str,fake,voice
From: https://blog.csdn.net/qqyy_sj/article/details/142811936

相关文章

  • 浏览器指纹修改指南2024 - 修改SpeechVoice指纹(六)
    1.引言在前两篇文章中,我们详细介绍了SpeechVoice在浏览器指纹中的重要性,并通过分析Chromium源码,找到了与SpeechVoice相关的关键实现文件和函数。通过这些分析,我们已经为后续的源码修改工作打下了坚实的基础。在本篇文章中,我们将正式进入源码修改的实战环节。我们将一步步指导......
  • (2024已成功)pytorch安装初学者踩过的坑
    pytorch的教学视频年头已久,而软件的版本都更新很快,于是很容易配置环境出错。这里博主分享自己踩到的坑一开始配置环境便是分水岭的第一步,大家一定要自己上手做一遍,毕竟配置环境是python学习中永远绕不开的问题了!一、没有下cuda导致pytorch无法下载gpu版本照着小土堆的视频在......
  • 2024初秋集训——提高组 #34
    A.庸医题目描述有\(N\)个医生,第\(i\)个医生建议你在\([L_i,R_i]\)天中吃\(x_{i,1},x_{i,2},\dots,x_{i,K_i}\)种药各一粒。第\(i\)种药每粒需要\(c_i\)元。如果多个医生让你吃同一种药,那么你只需吃一粒。你认为其中有一位庸医,所以对于每个医生求出按照除去他外的医......
  • 2024.10.9
    完善由合同来直接生成制令的代码publicvoidinsertOrdersByContract(Contractscontract){//查询刚刚插入的合同contract=contractsMapper.selectContractsList(contract).get(0);//1.根据合同生成唯一的总制令Ordersorders=newO......
  • 20222414 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    实验目的本次实践的对象是一个名为pwn1的linux可执行文件。该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码......
  • 2024-10-9
    form表单实操点击查看代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Docume......
  • #20222309 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1、直接修改程序机器指令,改变程序执行流程2、通过构造输入参数,造成BOF攻击,改变程序执行流3、注入Shellcode并执行2.实验过程1、直接修改程序机器指令,改变程序执行流程将pwn1改名为pwn20222309-1,并运行打开文件打开文件为乱码按esc键,输入:%!xxd进入十六进制......
  • coreldraw2024注册机和破解补丁百度网盘
    ###......
  • cdr2024序列号和密钥激活码cdr2024序列号和激活码是多少?
    ###......
  • js学习 -2024/10/9
    今天学习了js中的一些知识DOM通过document.get...函数获取元素对象可以查阅h3school资料找对象的函数,操作对象,//根据id获取元素对象//letid=document.getElementById('back');//id.src="../img/02.png";//根据标签获取元素对象vardivss=document.getElement......