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<base::TimeDelta> 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;
  }
  
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
paho.mqtt.embedded-c是一个用于开发嵌入式设备的MQTT C语言库。交叉编译是指在一台开发机上编译运行不同架构的目标设备上的程序。对于paho.mqtt.embedded-c的交叉编译,我们可以按照以下步骤进行: 1. 下载交叉编译工具链:根据目标设备的架构,从相应的厂商或开源社区下载对应的交叉编译工具链。这个工具链包含了可以在开发机上编译和调试目标设备上的程序所需的编译器、链接器和库文件。 2. 配置交叉编译环境:将下载的交叉编译工具链添加到开发机的环境变量中,以便可以在命令行终端中访问到这些工具。在Linux系统中,可以通过修改.bashrc或者.profile文件来添加环境变量。在Windows系统中,可以在系统设置中进行相应配置。 3. 下载paho.mqtt.embedded-c源代码:从paho.mqtt.embedded-c的官方仓库或者其他可信的源代码库中下载最新的版本。 4. 配置交叉编译参数:进入paho.mqtt.embedded-c源代码所在的目录,并按照目标设备的架构和交叉编译工具链的要求,配置交叉编译参数。这包括编译器路径、库文件路径、目标设备架构等。 5. 执行交叉编译命令:在命令行终端中执行交叉编译命令,将paho.mqtt.embedded-c源代码编译为目标设备可执行的二进制文件。这个命令通常使用交叉编译工具链提供的编译器和链接器,同时会指定一些编译选项,如优化级别、生成的目标文件名等。 6. 导出二进制文件:编译成功后,将生成的二进制文件导出到目标设备中,可以通过网络或者其他传输方式将其复制到目标设备的文件系统中。 通过以上步骤,我们可以将paho.mqtt.embedded-c库交叉编译为可以在目标设备上运行的程序。这样,我们就可以在嵌入式设备中使用MQTT协议进行通信了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王辉辉的猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值