利用HackRF进行GPS定位欺骗
需要硬件设备
HackRF
HackRF 连接数据线
外部时钟模块(TCXO 时钟模块)
天线(淘宝套餐中的 700MHz-2700MHz 吸盘天线)
需要软件应用
- hackrf-tools
- Google Earth Pro
- gps-sdr-sim
- SatGen Trajectory Generation
操作流程概述
- 用 Google Earth Pro 制作运动轨迹坐标 kml 文件
- 前往 NASA 官网下载 GPS 导航电文
- 用 gps-sdr-sim 将 GPS 导航电文和运动轨迹坐标 kml 文件生成采样文件
- hackrf_transfer 发射 GPS 欺骗信号
运动轨迹坐标文件
Google Earth Pro 查看国内地图会存在火星偏移,即卫星图与显示地名、街道信息不对应,以卫星图为准!
启动 Google Earth Pro ,寻找需要模拟地点,点击添加路径:
用鼠标点击图上勾画出路径:
绘图完成并保存后,在 位置
可以找到保存的路径,右键将位置另存为
导出 kml 文件:
kml 文件内容展示:
NMEA文件
NMEA 是 GPS 导航设备统一的 RTCM 标准协议,包含坐标、海拔、时间轨迹。
将运动轨迹坐标 kml 文件导入 SatGen ,就会自动加载 kml 路径
调参拟合
调整参数将速度轨迹向真实情况进行拟合,SatGen 会模拟真实运动情况,如:拐弯减速、起步&结束停留……
1 | output 数据更新率 |
点击 Generate NMEA file
,即可生成标准的 NMEA 轨迹文件
GPGGA 格式,其内容定义如下:
绕圈轨迹制作
要制作绕圈跑的 NMEA 轨迹只需要画一圈,将 NMEA 文件内容复制粘贴即可:
1 | $GPGGA,090453.93,2306.36704898,N,11328.49988987,E,1,05,2.87,160.00,M,-21.3213,M,,*7C |
GPS导航电文
引用自:http://www.beidou.gov.cn/zy/kpyd/201710/t20171011_4597.html
GPS 卫星发送的导航电文是每秒50位的连续的数据流,每颗卫星都同时向地面发送以下信息:系统时间、时钟校正值、自身精确的轨道数据、其他卫星的近似轨道信息、电离层模型参数和世界协调时(UTC)数据等系统状态信息。
导航电文用于计算卫星当前的位置和信号传输的时间,从而使 GPS 接收机在接收导航电文后能确定自身的位置。
各个接收机厂商普遍采用统一的 RINEX 格式,RINEX 本质上是文本文件,RINEX 文件遵循标准的命名规则,具体如下图所示:
获取GPS导航电文
可以在 NASA 官网上获取 RINEX 格式的 GPS 导航电文,原 ftp 地址在 2020 年 10 月由于安全原因停止使用,现在下载地址:https://cddis.nasa.gov/archive/gnss/data/daily/ 。
武汉大学 IGS 数据中心也可以下载广播星历,数据延迟一天
http://www.igs.gnsswhu.cn/index.php/home/data_product/igs.html
打开选择最新的年份,然后滑到最底部的 brdc ,点开找最新的导航电文(n.gz
结尾):
例如:https://cddis.nasa.gov/archive/gnss/data/daily/2022/brdc/brdc0600.22n.gz
GPS导航电文定义
解压后可以用文本编辑器打开:
导航电文文件结果如图所示:
生成采样文件
利用 gps-sdr-sim 配合 GPS 导航电文和 NMEA 文件生成 HackRF 发射信号需要的采样文件。
1 | git clone https://github.com/osqzss/gps-sdr-sim.git |
修改动态模式时间上限
gps-sdr-sim 默认动态模式最大只能生成 300s ;静态模式 86400s (10Hz)。结合实际情况修改 gpssim.h
的 USER_MOTION_SIZE
实现自定义时间上限。
将 USER_MOTION_SIZE
调得比 NMEA 轨迹总耗时长 30s 以上。HackRF 开始发出信号,到手机 GPS 被欺骗需要一定时间(30s左右),所以时间上限比时间时间多加 30s ,让定位稳定被欺骗,以防在模拟定位与真实定位之间跳变
最终运行作用时长取决于较短的那个时间。假如轨迹总耗时 400s ,USER_MOTION_SIZE
定义动态模拟时间上限 300s ,最终运行 300s 。
1 | #3000 == 300s |
编译gps-sdr-sim
1 | gcc gpssim.c -lm -O3 -o gps-sdr-sim |
1 | 用法:gps-sdr-sim [选项] |
生成采样文件
1 | ./gps-sdr-sim -e <导航电文文件> -g <轨迹文件> -b 8 -o <输出二进制文件路径> |
-b 8
:降低输出文件大小。hackrf 支持的是8-bit的二进制文件,其他 sdr 查询 readme
发射GPS欺骗信号
hackrf-tools 安装
Mac brew 直接安装:
1 | brew install hackrf |
连接上 hackrf 之后,hackrf_info
查看连接是否成功:
安装外部TCXO(时钟晶振)
安装 TCXO 后,使用 hackrf_debug -–si5351c -n 0 -r
检查 TCXO 是否被识别和使用。输出 [0] -> 0x01
表示使用 TCXO,而 [0] -> 0x51
表示不使用 TCXO。
发射信号
来源:https://blog.csdn.net/qq_51663706/article/details/121274801
1 | hackrf_transfer -t gpssim.bin -f 1575420000 -s 2600000 -a 1 -x 20 -R |
- -t:信号采样文件(gps-sdr-sim 生成的 bin 文件)
- -f:频率赫兹;美国官方的GPS L1信号频段1575420000Hz
- -s:HackRF 采样速率 2.6Msps(其他 sdr 查看 readme )
- -a:放大器使能,接收/发射射频放大器:1=使能;0=禁用
- -x:增益分贝,TX VGA(中频)增益,0-47db;1dB步长
- -R:重复发射模式
其他方法
https://zhuanlan.zhihu.com/p/356119820
参考文章
https://forum.butian.net/share/230
https://www.cnblogs.com/k1two2/p/6387701.html
https://blog.csdn.net/qq_42652838/article/details/100128968
https://wooyun.js.org/drops/%E7%8B%97%E6%B1%AA%E6%B1%AA%E7%8E%A9%E8%BD%AC%E6%97%A0%E7%BA%BF%E7%94%B5%20--%20GPS%20Hacking%20(%E4%B8%8A%EF%BC%89.html
https://gpspatron.com/spoofing-a-multi-band-rtk-gnss-receiver-with-hackrf-one-and-gnss-jammer/