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

引言

在前几篇文章中,我们已经详细探讨了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;// modifiedblink::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 endif (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修改方法。如果您在实际操作中遇到任何问题,欢迎随时与我们交流和讨论。让我们共同努力,提升浏览器隐私保护的技术水平。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/7886.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【微信小程序】基本语法

一、导入小程序 选择代码目录 项目配置文件 appid 当前小程序的 AppIDprojectname 当前小程序的项目名称 变更AppID&#xff08;视情况而定&#xff0c;如果没有开发权限时需要变更成个人的 AppID&#xff09; 二、模板语法 在页面中渲染数据时所用到的一系列语法叫做模板…

数据结构:顺序表

顺序表 顺序表的概念与结构静态顺序表动态顺序表 动态顺序表的实现SeqList.h的创建初始化动态顺序表&#xff08;LS_Init&#xff09;动态顺序表的销毁&#xff08;LS_Destry&#xff09;检查动态内存空间是否已满&#xff08;SL_CheckCapacity&#xff09;动态顺序表打印有效数…

MySQL_数据类型建表

复习&#xff1a; 我们昨天学习的知识都忘了嘛&#xff1f;如果忘了也不要担心&#xff0c;我来带大家来复习一遍吧&#xff01;&#xff01;&#xff01; 1.查看所有数据库 show databases;2.创建属于自己的数据库 create database 数据库名; 检查自己创建的数据库是…

PHP不良事件上报系统源码,医院安全不良事件管理系统,基于 vue2+element+ laravel框架开发

不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”&#xff0c;结合预存上百套已正在使用的模板&#xff0c;帮助医院从对护理事件、药品事件、医疗器械事件、医院感染事件、输血事件、意…

在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序

如果您有 Android 设备&#xff0c;您可能会将个人和专业的重要文件保存在设备的 SD 卡上。这些文件包括照片、视频、文档和各种其他类型的文件。您绝对不想丢失这些文件&#xff0c;但当您的 SD 卡损坏时&#xff0c;数据丢失是不可避免的。 幸运的是&#xff0c;您不需要这样…

实战:看懂并分析执行计划——Nested Loops (Inner Join)

这是执行计划中 Nested Loops 的详情信息,下面将逐行解释每个字段的含义,并提供优化思路。 Nested Loops 分析 Physical Operation: Nested Loops (Inner Join) 物理操作,表示这是一个嵌套循环连接(Nested Loops),用于执行 INNER JOIN。嵌套循环通常用于小数据集的连接…

Meta Llama3用于药物发现的微调、RAG 和提示工程-LLM保姆级资料

Meta Llama3用于药物发现的微调、RAG 和提示工程的使用指南&#xff1a;LLM微调的基本概念&#xff0c;每种微调方式的深入解读&#xff0c;2种生物医药领域的Llama3的微调应用。 LLM 如何微调LLMs&#xff1f;3种微调方式&#xff0c;什么时候&#xff1f;什么情况下该使用何…

如何通过 PXE 使用 UEFI 启动 Tiny Core Linux

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

根据关键字搜索商品API返回值解析:深入解析与代码实践

在电子商务和数据集成领域&#xff0c;API&#xff08;应用程序编程接口&#xff09;扮演着至关重要的角色。通过API&#xff0c;开发者可以访问和利用平台的数据资源&#xff0c;实现自动化和智能化的数据交互。本文将探讨如何根据关键字搜索商品API的返回值进行解析&#xff…

Python http打印(http打印body)flask demo(http调试demo、http demo、http printer)

文章目录 代码解释 代码 # flask_http_printer.pyfrom flask import Flask, request, jsonify import jsonapp Flask(__name__)app.route(/printinfo, methods[POST]) def print_info():# 分隔符separator "-" * 60# 获取请求头headers request.headers# 获取 JS…

「C/C++」C/C++ STL 之 迭代器

✨博客主页何曾参静谧的博客📌文章专栏「C/C++」C/C++程序设计📚全部专栏「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明「…

大模型微调,使用QLoRA和自定义数据集微调大模型(下)

4.8 数据预处理 在微调模型之前&#xff0c;我们不能直接使用原始数据集&#xff0c;需要将数据集中的提示转换成模型能够理解的格式。 为了使数据集适配微调流程&#xff0c;这里编写辅助函数来格式化输入数据集。具体来说&#xff0c;就是将对话摘要&#xff08;即提示-响应…

【NOIP普及组】质因数分解

【NOIP普及组】质因数分解 C语言代码C代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 已知正整数 n 是两个不同的质数的乘积&#xff0c;试求出较大的那个质数。 输入 输入只有一行&#xff0c;包含一个正整数…

js--高阶函数之参数归一化

一、前言 参数归一化&#xff1a;是我们软件开发里一个非常重要且实用的技巧&#xff0c;用的好极大简化代码同时提升代码的可阅读性和可维护性。以下我用日期格式化为例&#xff0c;演示一下参数归一化的技巧。 二、日期格式化实例 /*** 辅助格式化函数* param {string|functi…

均值、期望、方差、标准差与协方差:基础概念解析

均值、期望、方差、标准差与协方差&#xff1a;基础概念解析 在统计学和数据分析中&#xff0c;均值、期望、方差、标准差和协方差是描述数据分布和关系的基本工具。理解这些概念有助于我们更好地分析和处理数据。本文将详细讲解这些概念的定义、计算方法及其在实际应用中的意…

shell基础

一、理解bash基础 默认的Linux shell——Bash&#xff08;Bourne Again SHell&#xff09;可以通过命令控制系统&#xff0c;执行文件操作&#xff0c;或者启动应用程序。它可以在命令行上交互式使用&#xff0c;或者你可以创建一个包含多个shell命令的文件&#xff0c;并像启…

js树状结构,自叶到根统计各级数量

$($(".tree-item").get().reverse()).each(function () {let self $(this).find("span").text()let prev $(this).parent(".two").prevAll(".tree-item").find("span").text()self self ? self : 0prev prev ? prev :…

学习threejs,使用JSON格式保存和加载整个场景

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE toJSON()方法 二、&a…

论文1—《基于卷积神经网络的手术机器人控制系统设计》文献阅读分析报告

论文报告&#xff1a;基于卷积神经网络的手术机器人控制系统设计 摘要 本研究针对传统手术机器人控制系统精准度不足的问题&#xff0c;提出了一种基于卷积神经网络的手术机器人控制系统设计。研究设计了控制系统的总体结构&#xff0c;并选用PCI插槽上直接内插CAN适配卡作为上…

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“

SLF4J常见问题 导入依赖&#xff1a; <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency> <dependency><groupId>org.slf4j</groupId><arti…