HackRF实现GPS欺骗教程

硬件平台:HackRF One
软件平台:MAC运行环境搭建
系统平台:OS X 10.11 EI Capitan
GPS终端:One Plus手机,飞行模式,仅GPS定位,GPS test App
文章特点:根据网上的文章实验证明发现了问题总结归纳到此,针对以上环境担保100%成功。


0. GPS系统简介

GPS 系统本身非常复杂, 涉及到卫星通信等各个领域. 这里只是简单介绍一下. 我们通常所说的 GPS 全球定位系统是由美国国防部建造完成. 目前在太空*有31颗卫星在同时运作. 一般我们需要至少4颗卫星来完成三角定位. GPS卫星同时发送民用L1和军用L2两种无线信号. 我们通常使用的是没有加密的L1民用 1575.42MHz 的超高频波段.

GPS 信号里包含了3种常用信息.

Pseudorandom code: 简单的ID 码, 用来识别每颗卫星.
Ephemeris data: 包含卫星的运行状态, 时间日期等信息. 这在通过卫星来定位起到非常重要的作用.
Almanac data: 包含有每颗卫星的轨道信息,以及卫星在某个特定时段将出现的具体位置.

内容摘自王康的PDF,下载地址见附录:

HackRF实现GPS欺骗教程

1) GPS定位原理

首先,让我们明确我们的需求。我们想要知道的是我们的位置坐标(x,y,z),如果从一个已知坐标(x1,y1,z1)的点A(这个点在现实情况下是卫星)广播一个信号,比如说光和声音或者电磁波,然后我们试着去测量信号发送至到达的时间差τ1(在gps系统中我们用的是电磁波,我们知道它的速度),然后我们就能得出下面的等式:

HackRF实现GPS欺骗教程

这个等式有3个未知变量,因此单单一个等式解不出来,我们可以再加两个已知位置的点(卫星),我们把它们记作(x2,y2,z2) 和 (x3,y3,z3),然后就是下面的方程组

HackRF实现GPS欺骗教程

现在我们就能解出我们的位置(x,y,z)了

但在工程应用中这样还不够。为了测量电磁波发送至到达的时间差τ1,需要在电磁波发送的时候写一个时间戳t1,然后是卫星上的时钟时间参考值,当信号到达我们这里时,我们提取出时间戳t1,然后计算t1和当地时间t2的差值来计算时间差τ1。然而当地时间和卫星时间并不是同步的,会出现一个时间偏移量∆t1,所以这个时间偏移量也要被考虑进去,于是修正后的方程式如下所示:

HackRF实现GPS欺骗教程

译者注:所以有4个变量,就需要4个卫星来创造4个等式啦,以下高等数学内容略,以上内容说明我们需要伪造至少4颗卫星的信号才能使gps定位

HackRF实现GPS欺骗教程

1. 下载编译gps-sdr-sim

因为我的OSX系统下使用MacPorts安装了gcc5,xcode默认安装的gcc是/usr/bin/gcc,所以直接make可能会提示找不到omp.h文件因为调用的是xcode的gcc(苹果xcode安装的gcc很多程序都无法成功编译),那么按照下面的步骤即可正常安装。

$ git clone https://github.com/osqzss/gps-sdr-sim.git
$ cd gps-sdr-sim
$ gcc-mp- gpssim.c -lm -O3 -o gps-sdr-sim

或者干脆sudo port select gcc mp-5再make就OK了

2. RINEX星历数据下载

ftp://cddis.gsfc.nasa.gov/pub/gps/data/daily/2016/brdc

找brdc0050.16n.Z 这样的文件,解压出来就是了

HackRF实现GPS欺骗教程

3. 生成GPS仿真数据

$./gps-sdr-sim -e brdc3540.14n -l 29.643598,91.101319, -b 

指定星历文件(可自行更新至最新的星历数据),设置经纬度(拉萨市),必须指定采样精度为8否则用hackRF one欺骗成功率不高,反正我指定16是没成功过(默认为16,乌云文章也是16但设备是bladeRF)

另外如果有其他目的也可以伪造一个动态的GPS数据样本,例如欺骗计步器,轨迹等

$./gps-sdr-sim -e brdc3540.14n -u circle.csv -b 

GPS-SDR-SIM 运行时间问题

默认情况下GPS模拟器只能连续工作5分钟左右. 通过查看源代码后, 我们可以发现这是因为程序默认设置导致. 在程序设计之初为了节省硬盘空间, 默认只生成了300秒左右的数据. 我们可以通过改动参数来延長工作時間. 但需要注意的是仅仅延長到15分鐘,數據便可達到5G大小.

HackRF实现GPS欺骗教程

4. HackRF发射GPS数据

$ hackrf_transfer -t gpssim.bin -f  -s  -a  -x  -R

指定GPS数据,指定频率为1575420000 即民用GPS L1波段频率,指定采样速率2.6Msps,开启天线增益,指定TX VGA(IF)为0(为了限制影响范围,最大为47慎用!!!),最后开启重复发射数据功能

手机终端1分40秒就可以被欺骗成功,这里有一个测试技巧,就是定模模式选仅GPS定位,不要用基站、WLAN定位,这样打开地图等软件就是伪造后的GPS坐标点。

效果如图所示:

HackRF实现GPS欺骗教程

HackRF实现GPS欺骗教程

附录:

https://www.blackhat.com/docs/eu-15/materials/eu-15-Kang-Is-Your-Timespace-Safe-Time-And-Position-Spoofing-Opensourcely-wp.pdf

上一篇:历年至今TVB剧集目录(持续更新...我已看过的推荐)


下一篇:Root exploit for Android (adb setuid)