030.随机指纹chromium编译-修改windows操作系统版本

发布于:2024-12-07 ⋅ 阅读:(123) ⋅ 点赞:(0)

一、目标:

  • 1.了解js是如何获取windows版本的。
  • 2.如何从c++层面修改chromium源码,修改win系统版本

二、js是如何获取windows系统版本:

  • 将下面的js复制到F12控制台
async function detectWindowsVersion() {
  let userAgent = navigator.userAgent;
  if (/Windows NT 10.0/.test(userAgent)) {
  
     ua = await navigator.userAgentData.getHighEntropyValues(["platformVersion"])
     
       if (navigator.userAgentData.platform === "Windows") {
         const majorPlatformVersion = parseInt(ua.platformVersion.split('.')[0]);
         if (majorPlatformVersion >= 13) {
           return "Windows 11";
          }else if (majorPlatformVersion > 0) {
            return "Windows 10";
          }
       }

  } else if (/Windows NT 6.3/.test(userAgent)) {
    return "Windows 8.1";
  } else if (/Windows NT 6.2/.test(userAgent)) {
    return "Windows 8";
  } else if (/Windows NT 6.1/.test(userAgent)) {
    return "Windows 7";
  } else if (/Windows NT 6.0/.test(userAgent)) {
    return "Windows Vista";
  } else if (/Windows NT 5.1|Windows XP/.test(userAgent)) {
    return "Windows XP";
  } else {
    return "未知";
  }
}
let version = await detectWindowsVersion();
console.log(version)

  • 输出:
Windows 11

注释:js获取win系统版本分为2部分:
1是win10之前的版本区分,通过navigator.userAgent中的NT版本数字来区分,
2是win10和win11的区分,通过navigator.userAgentData来区分

三、修改源码:

  • 前面的博客写了如何编译chormium,这里假设你都已经是个编译成功了

由于现在用户基本都是Win10+了,我这里只提供Win10和Win11随机切换的源码修改。

1.打开 \third_party\blink\renderer\core\frame\navigator_ua.cc
  • 找到源码:
  ua_data->SetPlatform(String::FromUTF8(metadata.platform),
                      String::FromUTF8(metadata.platform_version));
2.替换为:
  //ua_data->SetPlatform(String::FromUTF8(metadata.platform),
                       //String::FromUTF8(metadata.platform_version));
  // 开始更改======================== 
  base::CommandLine* base_command_line = base::CommandLine::ForCurrentProcess();
  

  int seed = 123123123;
  if (base_command_line->HasSwitch("fingerprints")) {
      std::istringstream(base_command_line->GetSwitchValueASCII("fingerprints")) >> seed;
  }
  int platfrom_v = 7;
  if (base_command_line->HasSwitch("fingerprints")) {
    platfrom_v = seed % 7 + 10;
  }
  ua_data->SetPlatform(String::FromUTF8(metadata.platform), String::FromUTF8(std::to_string(platfrom_v) + ".0.0"));
  // 结束更改========================  

注意:这里platfrom_v的随机取值范围是7~16,大于12为Win11,反之则为Win10

3.编译
ninja -C out/Default chrome

四、感想

  • 大佬们有经验也都不愿意开源,好多小伙伴也都是在默默单干,哎。

网站公告

今日签到

点亮在社区的每一天
去签到