Logo
Overview
修改ios定位的几种方法

修改ios定位的几种方法

April 22, 2026
浏览量--

这两天在研究还能用webmux做多少事情。于是顺理成章的想到了改定位。经过一番调研知道有anygo/爱思提供了修改定位的功能。

Simulate Location

经过搜索发现爱思使用的是标准做法,苹果的官方修改方式:使用simulate location的lockdown服务可以修改模拟地址,但是这样修改能够被程序通过一个关键字(?具体是啥忘了,但是能够知道这个address是模拟的)

于是咱尝试在webmux里实现了一下。具体需要做什么:

第0步是打开开发者模式。

挂载DDI

首先是simulate location是一个”developer功能”,所以需要用一些办法挂载上Developer Disk Image。它提供了一系列的工具,包括debugserver等开发者需要用到的东西。

Before 17.0

在17.0之前,挂载DDI只需要发一个lockdown请求,然后把DDI和signature一起丢进去就好了。

17.0+

17.0之后,苹果收紧了挂载ddi的方式,大概操作流程变成了:

  1. 请求挂载设备SEP开一个nonce:(nonce是根据ddi特征(hash或者其他的东西)生成的一个key)
  2. 主机把这个nonce发送到苹果的服务器,返回一个ticket。
  3. 主机把ticket和镜像发回给设备。
  4. 挂载成功
💡

这样做的原因是之前的方式导致了一些奇怪的安全问题。

于是挂载之后我们就能愉快的尝试发请求了…

这里同样分为三个版本时期

Before 17.0

在17.0之前,location simulation是暴露在lockdownd中可以启动的com.apple.dt.simulatelocation。所以我们可以直接很方便简单的直接启动这个service,就可以愉快的发送经纬度坐标了。

After 17.0

这个时候苹果想了个奇怪的RemoteXPC方法用来调用位置修改:

需要启动”rsd”隧道才能使用。这里我们知道rsd隧道其实就是在之前usbmux基础上增加了一层ipv6封装。所以在web端我直接偷懒用了lwip开源版本,开启ipv6选项直接编译成wasm,美滋滋。

接下来是发XPC请求给这个service:com.apple.instruments.server.services.LocationSimulation 直接调用的是objc方法,比之前版本好一些,有两个方法可以调用了:simulateLocationWithLatitude:longitude:stopLocationSimulation

但是17.0-17.4和17.4+使用的rsd方式不同,所以应该算是两种不同做法。

下面是一个成功的瞬移示例(

iAP2 fake location

这种我觉得好天才啊,是看了anygo的代码才知道这种做法的。该他收90刀终身。

我们知道,苹果/现代设备获取定位的方式是基站+wifi+周围设备+gps,gps是最少用到的。绝大部分反馈来自wifi/周围设备。并且wifi/基站获取到的数据不被认为是完全真实的。

于是我们可以假装成周围设备,给iphone发送信息!

由于iphone更信任MFI认证设备的location,所以可以有这样一套流程:

  1. 前置配对操作RFCOMM
  2. iphone给我们的设备发送一个nonce
  3. 我们的设备(通过某种方法通过nonce认证)一般来说是MFI芯片+证书处理返回去一个response
  4. 建立一个可靠信道(类似tcp,有ack确认帧)
  5. 发送位置信息
  6. iphone修改自己的位置信息!

我认为AnyGo做的最天才的一件事是第二步!!!

在第二步时,它这样进行了一套操作:

  1. 发送enqueue:(用户邮箱,key,uuid)到云服务器,获取了芯片信息等。
  2. 发送certify:(刚刚的uuid,同样的email,key,以及签名信息,芯片信息),直接获取到响应的response,发回给设备!

这样一来,设备信任了我们的信源是一个MFI认证的苹果设备,从而信任我们共享的地址。从而能够优雅的修改真实地址,而不是模拟地址,从而能够打开我们需要的高血压功能。

这里还有一篇文章关于怎么获得iAP2的方法:

也还是挺有趣的,以后有机会复现下!。

💡

实际上绝大部分全网首发的开启apple watch高血压检测功能的方法都是anygo,但是却没人知道原理,当然也没人关心就是了。

评论加载中...