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

浏览器指纹修改指南2024 - 分析Geolocation API实现(十)

时间:2024-11-01 17:45:09浏览次数:16  
标签:Geolocation last being Member 2024 修改 API position Geoposition

geolocation.h文件中,可以找到一个私有成员

  Member<GeoNotifierSet> one_shots_;
  Member<GeolocationWatchers> watchers_;
  // GeoNotifiers that are in the middle of invocation.
  //
  // |HandleError(error)| and |MakeSuccessCallbacks| need to clear |one_shots_|
  // (and optionally |watchers_|) before invoking the callbacks, in order to
  // avoid clearing notifiers added by calls to Geolocation methods
  // from the callbacks. Thus, something else needs to make the notifiers being
  // invoked alive with wrapper-tracing because V8 GC may run during the
  // callbacks. |one_shots_being_invoked_| and |watchers_being_invoked_| perform
  // wrapper-tracing.
  // TODO(https://crbug.com/796145): Remove this hack once on-stack objects
  // get supported by either of wrapper-tracing or unified GC.
  Member<GeoNotifierSet> one_shots_being_invoked_;
  HeapVector<Member<GeoNotifier>> watchers_being_invoked_;
  Member<Geoposition> last_position_;

这个last_position_就是返回位置的关键对象,通过这个对象获取到最后一次的位置并返回。

我们去.cc文件中查看修改这个对象的部分

OnPositionUpdated函数中对这个成员变量进行了修改,修改的值是通过传进来的参数result来获得的,如果我们想要修改这个值,需要拦截更新的部分,把它变成我们自定义的值。

last_position的类型

如果我们想要修改这个值,首先要搞清楚这是一个什么类型,我们从.h中可以获取到

Member<Geoposition> last_position_;

last_position_是一个Member<Geoposition>类型的对象。

详细分析一下其中的语法:

  1. Member:
    • Member 是一个模板类,用于管理指向垃圾回收堆(heap)中对象的指针。它确保这些对象在不再使用时能够被正确地回收。
    • 例如,Member<Geoposition> 表示一个指向 Geoposition 对象的指针,并且这个指针由垃圾回收机制管理。
  2. Geoposition:
    • Geoposition 是一个类,通常用于表示地理位置信息,包括经度、纬度、高度等。
  3. last_position_ 变量:
    • last_position_ 是一个 Member<Geoposition> 类型的成员变量,表示最后一次记录的地理位置信息。

所以我们需要找到Geoposition类的定义及构造方法,这样才能自定义出来一个新的对象。

Geoposition类

打开相同目录下的geoposition.h,查看与构造有关的代码。

构造需要一个GeolocationCoordinates类型的指针与一个EpochTimeStamp类型的时间戳,EpochTimeStamp我们可以通过blink层的静态方法ConvertTimeToEpochTimeStamp与base库中的time.h中的方法获得。

blink::ConvertTimeToEpochTimeStamp(base::Time::Now());

这样就可以获得当前时间的EpochTimeStamp类型的时间戳。

GeolocationCoordinates类

我们去相同目录下的GeolocationCoordinates.h中查看其成员与构造方法。

可以看到它是由传入七个对应的数值来进行构造,其中有一些可选项。

具体的对应的含义如下

  // 纬度
  double latitude_;
  // 经度
  double longitude_;
  // 海拔,可选
  std::optional<double> altitude_;
  // 精度
  double accuracy_;
  // 海拔精度,可选
  std::optional<double> altitude_accuracy_;
  // 方向,可选
  std::optional<double> heading_;
  // 速度,可选
  std::optional<double> speed_;

结语

通过本文的详细分析,我们已经了解了如何在Chromium源码中找到并修改Geolocation API的返回值。我们探讨了last_position_变量的类型和作用,并深入分析了Geoposition类和GeolocationCoordinates类的构造方法。通过这些知识,我们可以自定义地理位置信息,从而实现修改浏览器指纹的目的。

在下一篇文章中,我们将继续深入探讨如何具体实现这些修改,并提供详细的代码示例和操作步骤,帮助读者更好地掌握这项技术。敬请期待!

标签:Geolocation,last,being,Member,2024,修改,API,position,Geoposition
From: https://blog.csdn.net/qqyy_sj/article/details/143290899

相关文章