• 010.编译指纹浏览器-绕过常见无头检测


    修改webdriver

    • 打开文件 third_party\blink\renderer\core\frame\navigator.cc
    //bool Navigator::webdriver() const {
    //  if (RuntimeEnabledFeatures::AutomationControlledEnabled())
    //    return true;
    //
    //  bool automation_enabled = false;
    //  probe::ApplyAutomationOverride(GetExecutionContext(), automation_enabled);
    //  return automation_enabled;
    //}
    
    bool Navigator::webdriver() const {
      return false;
    }
    

    修改rtt

    • 打开文件 third_party/blink/renderer/modules/netinfo/network_information.cc
    //uint32_t NetworkInformation::rtt() {
    //  MaybeShowWebHoldbackConsoleMsg();
    //  std::optional override_rtt =
    //      GetNetworkStateNotifier().GetWebHoldbackHttpRtt();
    //  if (override_rtt) {
    //    return GetNetworkStateNotifier().RoundRtt(Host(), override_rtt.value());
    //  }
    //
    //  if (!IsObserving()) {
    //    return GetNetworkStateNotifier().RoundRtt(
    //        Host(), GetNetworkStateNotifier().HttpRtt());
    //  }
    //
    //  return http_rtt_msec_;
    //}
    
    uint32_t NetworkInformation::rtt() {
      return 150;
    }
    

    修改Notification.permission

    • 打开文件 third_party/blink/renderer/modules/notifications/notification.cc
    String Notification::PermissionString(
        mojom::blink::PermissionStatus permission) {
      switch (permission) {
        case mojom::blink::PermissionStatus::GRANTED:
          return "granted";
        case mojom::blink::PermissionStatus::DENIED:
          //return "denied";
          return "default";
        case mojom::blink::PermissionStatus::ASK:
          return "default";
      }
    
      NOTREACHED();
      //return "denied";
      return "default";
    }
    

    修改user-agent

    针对无头浏览器的HeadlessChrome:

    • 打开文件C:\src\chromium\src\headless\lib\browser\headless_browser_impl.cc
      修改:
    //const char kHeadlessProductName[] = "HeadlessChrome";
    const char kHeadlessProductName[] = "Chrome";
    
    

    针对无头的plugin检测

    • 修改third_party\blink\renderer\modules\plugins\navigator_plugins.cc
    // static
    //DOMPluginArray* NavigatorPlugins::plugins(Navigator& navigator) {
    //  return NavigatorPlugins::From(navigator).plugins(navigator.DomWindow());
    //}
    
    // static
    DOMPluginArray* NavigatorPlugins::plugins(Navigator& navigator) {
      DOMPluginArray* pluginsArray = NavigatorPlugins::From(navigator).plugins(navigator.DomWindow());
      pluginsArray->UpdatePluginData();
      return pluginsArray;
    }
    
    • 再修改 third_party\blink\renderer\modules\plugins\dom_plugin_array.cc
    void DOMPluginArray::UpdatePluginData() {
      if (should_return_fixed_plugin_data_) {
        dom_plugins_.clear();
        //if (IsPdfViewerAvailable()) {
          // See crbug.com/1164635 and https://github.com/whatwg/html/pull/6738.
          // To reduce fingerprinting and make plugins/mimetypes more
          // interoperable, this is the spec'd, hard-coded list of plugins:
          Vector<String> plugins{"PDF Viewer", "Chrome PDF Viewer",
                                 "Chromium PDF Viewer", "Microsoft Edge PDF Viewer",
                                 "WebKit built-in PDF"};
          for (auto name : plugins)
            dom_plugins_.push_back(MakeFakePlugin(name, DomWindow()));
        //}
        return;
      }
      
    
  • 相关阅读:
    对elementui中一个el-form-item中包含多个输入框或下拉框等的表单验证处理问题
    低代码助力生产管理:健康安全环境管理系统
    c 按位运算
    【强化学习】06 —— 基于无模型的强化学习(Control)
    嗯,倒数日,开发了一个多月的倒数日 桌面应用 上线啦,简单暴力的显示方式,专注于显眼
    16.2.2 创建存储函数
    关于请求和重定向的路径问题
    C++ malloc 与 new 的区别
    【html5期末大作业】基于HTML+CSS+JavaScript管理系统页面模板
    Spring Boot框架下实现Excel服务端导入导出
  • 原文地址:https://blog.csdn.net/w1101662433/article/details/139345179