首页 > 其他分享 >浏览器指纹修改指南2024 - 修改Geolocation API指纹(十一)

浏览器指纹修改指南2024 - 修改Geolocation API指纹(十一)

时间:2024-11-04 12:20:33浏览次数:3  
标签:MakeGarbageCollected Geolocation 指纹 blink 修改 std error position

引言

在前几篇文章中,我们已经详细探讨了Geolocation API的定义、作用及其在浏览器指纹中的重要性,并深入分析了Chromium源码中Geolocation API的实现位置和修改方法。通过这些分析,我们为后续的修改工作奠定了坚实的基础。

在本篇文章中,我们将继续深入探讨如何具体实现对Geolocation API返回值的修改。我们会提供详细的代码示例和操作步骤,帮助读者更好地掌握这项技术。通过这些修改,读者将能够自定义地理位置信息,从而有效地保护用户的隐私,避免被追踪和识别。

修改源代码

上一篇文章中,我们定位到了OnPositionUpdated函数中,我们在这里需要构造一个新的Geoposition对象的指针,然后将其赋值给last_position_变量。

1.1blink::MakeGarbageCollected讲解

在构造时我们会使用到blink::MakeGarbageCollected

blink::MakeGarbageCollected 是 Chromium 项目中用于创建垃圾回收对象的一个方法。这个方法主要用于 Blink 引擎中的对象管理,确保对象在不再使用时能够被垃圾回收机制正确回收。

方法定义

blink::MakeGarbageCollected 的定义通常如下:

template <typename T, typename... Args>
T* MakeGarbageCollected(Args&&... args){
    returnnew (AllocateObject<T>()) T(std::forward<Args>(args)...);
}
返回值

该方法返回一个指向新创建的垃圾回收对象的指针。具体来说,它返回一个类型为 T* 的指针,其中 T 是你要创建的对象的类型。

1.2 修改步骤讲解

我们先构造出来一个GeolocationCoordinates*,然后使用其来构造Geoposition,具体步骤如下:

  1. 构造GeolocationCoordinates
blink::GeolocationCoordinates* new_coordinates =
      blink::MakeGarbageCollected<blink::GeolocationCoordinates>(
          -23.1454, 26.8441, std::nullopt, 30.0, std::nullopt, std::nullopt,
          std::nullopt);
  1. 构造Geoposition
blink::Geoposition* new_position =
      blink::MakeGarbageCollected<blink::Geoposition>(
          new_coordinates,
          blink::ConvertTimeToEpochTimeStamp(base::Time::Now()));
  1. 赋值并通知更改
  last_position_ = new_position;
  PositionChanged();
  return;

这样就完成了更改。

完整代码

更改后的完整代码如下:

void Geolocation::OnPositionUpdated(
    device::mojom::blink::GeopositionResultPtr result) {
  disconnected_geolocation_ = false;



  // modified
  blink::GeolocationCoordinates* new_coordinates =
      blink::MakeGarbageCollected<blink::GeolocationCoordinates>(
          -23.1454, 26.8441, std::nullopt, 30.0, std::nullopt, std::nullopt,
          std::nullopt);
  blink::Geoposition* new_position =
      blink::MakeGarbageCollected<blink::Geoposition>(
          new_coordinates,
          blink::ConvertTimeToEpochTimeStamp(base::Time::Now()));
  last_position_ = new_position;
  PositionChanged();
  return;
  // modify end



  if (result->is_position()) {
    if (!ValidateGeoposition(*result->get_position())) {
      return;
    }
    last_position_ = CreateGeoposition(*result->get_position());
    PositionChanged();
  } else {
    DCHECK(result->is_error());
    const auto& geoposition_error = *result->get_error();
    GeolocationPositionError* position_error =
        CreatePositionError(geoposition_error);

    auto* context = GetExecutionContext();
    DCHECK(context);
    if (!geoposition_error.error_technical.empty()) {
      context->AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
          mojom::blink::ConsoleMessageSource::kNetwork,
          mojom::blink::ConsoleMessageLevel::kError,
          geoposition_error.error_technical));
    }

    if (position_error->code() == GeolocationPositionError::kPermissionDenied) {
      position_error->SetIsFatal(true);
    }
    HandleError(position_error);
  }
  if (!disconnected_geolocation_)
    QueryNextPosition();
}

我们选择在返回之前提前拦截并返回,不对原有逻辑进行修改。

测试功能

我们编译一下并测试功能是否可用。

启动后打开Geolocation API - BrowserLeaks来测试一下是否如我们修改的一样。

可以看到返回值和我们的修改值一样,这样就完成了修改。

结语

通过本文的详细讲解和代码示例,我们成功实现了对Geolocation API返回值的修改。通过构造新的GeolocationCoordinatesGeoposition对象,并将其赋值给last_position_变量,我们能够自定义地理位置信息,从而有效地保护用户的隐私,避免被追踪和识别。

在实际操作中,我们不仅需要理解代码的实现细节,还需要掌握如何在不同场景下应用这些技术。通过不断地实践和测试,我们可以确保修改的有效性和稳定性。

希望本文能够帮助读者更好地理解和掌握Chromium指纹技术中的Geolocation API修改方法。如果您在实际操作中遇到任何问题,欢迎随时与我们交流和讨论。让我们共同努力,提升浏览器隐私保护的技术水平。

标签:MakeGarbageCollected,Geolocation,指纹,blink,修改,std,error,position
From: https://blog.csdn.net/qqyy_sj/article/details/143481334

相关文章

  • ts系统 打包的时候 报错js没有类型 修改方案 新建.d.ts文件
    ts系统打包的时候报错js没有类型修改方案新建.d.ts文件原因在goview系统里面,添加了一个@/api/data.js,因为之前的代码都是js,所以就cv过来了,今天打包说类型不是any类型,等等。。报错的行为import{api}from'@/api/data.js'意思说这个导出的api函数,没有定义数据类型解......
  • PbootCMS如何在网站管理后台增加点击数自定义修改功能
    修改方法:模板增加点击数输入框:修改文件:APPs/admin/view/default/content/content.html搜索 {if([$mod])},在其下方添加:<divclass="layui-form-item"><labelclass="layui-form-label">浏览量</label><divclass="layui-input-block&......
  • 基于形态学处理的指纹识别matlab仿真
    基于形态学处理的指纹识别matlab仿真1.算法描述指纹识别的一般步骤为指纹采集、预处理、特征点提取、特征点匹配。指纹分为螺旋形、弓形、环形。指纹的处理效果影响着后面特征点的提取和识别效果,所以图像的预处理占有重要的地位。指纹采集一般有专业的设备,所以这一步骤一搬不......
  • 重新修改conda的配置
    一、背景&解决策略在使用环境时,有时候需要修改一下关于conda的位置,例如文件移动等,这个时候就需要重新配置conda的环境。1.修改.bashrc中的文件首先修改.bashrc中的配置重点是下面的这个,其他的都是默认的不用管#>>>condainitialize>>>#!!Contentswithinthisblockare......
  • 《漫威复仇者联盟》游戏辅助工具修改器风灵月影版操作教程详解
    《漫威复仇者联盟》是一款基于漫威超级英雄的第三人称动作冒险游戏,玩家可以操控各种超级英雄完成任务和挑战。风灵月影版的修改器为这款游戏提供了多种便捷功能,帮助玩家更轻松地探索游戏世界,提升游戏体验。以下是《漫威复仇者联盟》游戏辅助工具修改器风灵月影版的操作教程详解......
  • LeetCode 3165.不包含相邻元素的子序列的最大和:单点修改的线段树(动态规划)
    【LetMeFly】3165.不包含相邻元素的子序列的最大和:单点修改的线段树(动态规划)力扣题目链接:https://leetcode.cn/problems/maximum-sum-of-subsequence-with-non-adjacent-elements/给你一个整数数组nums和一个二维数组queries,其中queries[i]=[posi,xi]。对于每个查......
  • Mybatis修改
    1.删除一个点击查看代码voiddeleteById(intid);<deleteid="deleteById">deletefromtb_brandwhereid=#{id};</delete>@TestpublicvoidtestDeleteById()throwsIOException{//接收参数intid=6;......
  • Mybatis添加&修改
    一添加点击查看代码voidadd(Brandbrand);<insertid="add"useGeneratedKeys="true"keyProperty="id"><!--主键返回-->insertintotb_brand(brand_name,company_name,ordered,description,status)values(#{br......
  • docker对nginx.conf进行修改后页面无变化或页面报错
    可能是因为没有重启nginx容器可以执行dockerrestartnginx重启nginx试试引入了其他的配置文件本人安装的是docker默认的nginx,自带了一个default.conf的配置文件,并且在nginx.conf中还引入了这个文件,后面我还对nginx.conf添加了一个server并且端口号都是80,在打印dockerl......
  • 查看SQL Server数据库修改了哪些内容
    ---1查询数据库最近执行的语句SELECTTOP1000ST.textAS'执行的SQL语句',QS.execution_countAS'执行次数',QS.total_elapsed_timeAS'耗时',QS.total_logical_readsAS'逻辑读取次数',QS.total_logical_writesAS'......