上次说到HackRF One模拟遥控钥匙开灯关灯,实际上HackRF One几乎可以模拟我们能见到的各种射频遥控物品。不错,就如你想的那样——你家车库的遥控门、单位气派的遥控门,还有你心爱的汽车遥控钥匙——统统可以用电脑来控制,而且还很简单。大家可以用自己家的东西做实验,千万不要影响到别人哦。这次我要聊聊上次想到的GPS的问题,伪造的GPS信号能不能骗过百度地图,微信定位。
GPS导航系统是以全球31颗定位人造卫星为基础,向全球各地全天候地提供三维位置、三维速度等信息的一种无线电导航定位系统。要伪造GPS信号,只需要了解一点点有关卫星定位、导航的知识就可以了——不用多,只要一点点的皮毛知识即可。一般我们需要至少4颗卫星来完成三角定位(如下图).我们通常使用的是没有加密的L1民用 1575.42MHz 超高频波段.
哇,有序实数组,是不是倍感亲切呀!再看下去,你会更觉得熟悉!
首先,我们的地球是个圆球(请不要抬杠,我听说过地球近似的椭球形。我还听说过她是个梨形的,这里们近似看作圆球),我在地球上的每个位置的坐标A(x,y,z)[这三个分别是经纬度和海拔高度],如果从一个位置准确的卫星Satellites 1(x1,y1,z1)发送一个电磁波信号,然后我们度着去测量信号发送至到达的时间差T1,然后在空间中我们就能根据高间中两点的距离公式得到下列等式:
(c是光速)
从我们高中生的角度来看,要准确地解得我们的位置,我们至少需要三个方程。天主的卫星很多,所以我们很容易就会得到
现在,我们就能解出我们的位置坐标(x,y,z)了。
但是在实际中,这样还是够的。为了测量电磁波发送至到达的时间差T,我们还需要一颗卫星。所以就要4个卫星来建立4个等式。
————综上所述,我们需要伪造至少4颗卫星的信号才能使我们的手机“准确”定位。
现在开始进入实践。从网上下载相关软件
$ git clone https://github.com/osqzss/gps-sdr-sim.git
$ cd gps-sdr-sim
$ gcc-mp-5 gpssim.c -lm -O3 -o gps-sdr-sim
(说明,需要自己先install git,然后才能安装。不出意外系统应该安装好gcc了)
现在最重要的是找到RINEX星历数据。国内网上能找到的,都是下面这个版本(如下图):
我告诉大家,这个已经过期作废了。详情,请看官网公告:
哈哈,不要问我怎么上的官网。我说了,你也不一定会——为此我特地买了个美国IP,做了个VPN服务器 (其实也很简单,CSDN网上都有教程,2008系统,只傻瓜按步骤设置就行了。临时一用,不谈什么安全不安全的)。不多说了,看官方最新的RINEX说明
CSDN上也提供了RINEX命名规则,大家可以参考一下:
这个星历文件到底长什么样子?下面就给大家看看最新的
现在一切准备就绪,我们可以生成GPS仿真数据了。嗯,我们去哪里呢?蒙古,怎么样?打开百度地图找到乌兰巴托的坐标
记下坐标(107.165233,47.815345)——这个只是经纬坐标,我们还要上网查一下它的海拔,然后估计一个数据就差不多了,比如海拔1357就蛮好的。这里友情提示,gps-sdr-sim 命令中的经纬坐标和百度里提供的对换一下(可能是因为外国人我们的使用习惯不一样吧)
现在可以生成GPS数据了(如下图)
我生成的数据文件名是wulanbatuo.bin,下面只要用它来完成发射就可以了
用hackrf_transfer发射电磁波,稍等一会儿就可以看到效果了(如下图,不多说了):
写在最后,我想位置考勤如单单看GPS信息,这个方法肯定是可以通过的。但是如果辅助用通信信号基站信息的话,我觉得难度就大了
——不过,话又说回来,基站发射的不也是无线电波吗?如此一来,只是增加了一点难度而已。