欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 伪造GPS信号多种方式尝试-HackRF

伪造GPS信号多种方式尝试-HackRF

2025/6/19 16:19:24 来源:https://blog.csdn.net/qq_39673370/article/details/148749375  浏览:    关键词:伪造GPS信号多种方式尝试-HackRF

请在法律允许范围内复现本文内容, 复现后果作者不予承担

  • 参考

    • 车联网安全之GPS欺骗 - FreeBuf网络安全行业门户

硬件平台

  • HackRFOne, 外部TCXO时钟模块, 40MHz-6GHz 拉杆天线

静态模拟

  • 使用项目

    • gps-sdr-sim-GPS信号仿真器

Clone 项目, 然后编译

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

HackRFOne 配置

  • HackRFOne 安装好外部TCXO时钟模块

    • 判断是否安装正确

      • hackrf_debug --si5351c -n 0 -r 
        
      • 如果输出 [ 0] -> 0x01

使用 gps-sdr-sim 生成二进制GPS数据

  • ./gps-sdr-sim -e [GPS 星历文件] -l [坐标] -b [二进制数据类型] -o [输出文件, 默认为gpssim.bin]
    
    • -e GPS星历文件路径

      • 可以直接使用项目自带的星历, 也可以最新的广播星历
    • -l 经纬度坐标

      • 纬度, 经度, 高度
    • -b 二进制数据类型

      • 使用 HackRF 的话就填写 8

      • 使用 bladeRF 的话, 就填写 16

  • 比如

    • gps-sdr-sim -e brdc1660.25n -l 39.91232019878092,116.3910017124552,46 -b 8 -o gpssim.bin
      
  • 然后就会生成一个 gpssim.bin 文件

使用 HackRFOne 发射 GPS 信号

  • hackrf_transfer -t [GPS信号文件, 即gpssim.bin] -f [中心频率] -s [采样率] -a [是否开启功放] -x [发射功率] -R
    
    • -t GPS信号文件

      • 使用之前生成的 gpssim.bin 文件
    • -f 中心频率, 单位 Hz

      • 指定频率为 1575420000 即民用GPS L1波段频率
    • -s 采样率, 单位 Hz, 4/8/10/12.5/16/20 MHz,默认 10 MHz

    • -a 设置功放 ( 1 表示开启, 0 表示关闭)

    • -x 指定发射功率, 开启天线增益

      • 指定TX VGA(IF)为0、10、20不等(为了限制影响范围, 最大为47, 尽量不要使用)
    • -R 重复发送模式(默认为关闭)

      • 不过值得注意的是, 虽然是重复发送, 但是只做不到连贯的, 结束一轮后会断开信号, 然后再重新发送
  • 比如

    • hackrf_transfer -t gpssim.bin -f 1575420000 -s 2600000 -a 1 -x 20 -R
      

动态模拟

使用 Google Earth 绘制路径

注意

  • Google Earth Pro 查看国内地图会存在火星偏移,即卫星图与显示地名、街道信息不对应, 应该以卫星图为准

  • 绘制好路径后, 选择导出为 kml文件
    • 这个时候, 文件中只有路径每个点的信息

kml文件 转为 NMEA文件

  • 这里需要使用 SatGen, 把谷歌地图生成的 kml文件 导入进去, 然后再进行导出为 NMEA文件

    • 这个是官网下载的较新版本, 不过一次只能导出120s的路径

      • 这个版本可以不使用 Google Earth 直接在软件上面标记路径

        • 不过要注意的是, Google Earth 的坐标与国内的坐标有稍微偏差, 可以选择Bing地图
      • image.png

    • 这个版本的就没有限制, 但是速度快仿真出来似乎有点问题

      • image.png

修改 gps-sdr-sim-GPS 的修改动态模式时间上限并编译

  • gcc gpssim.c -lm -O3 -o gps-sdr-sim -DUSER_MOTION_SIZE=3600
    
    • USER_MOTION_SIZE 单位是 秒(s)

生成 GPS 信号模拟文件

  • gps-sdr-sim -e [星历文件] -g [NMEA文件] -b 8
    

使用 HackRF 发射伪造 GPS 信号

  • hackrf_transfer -t gpssim.bin -f 1575420000 -s 2600000 -a 1 -x 20 -R
    
    • 参数跟静态的是一样的

实时动态伪造

使用项目

  • gym487/gps-sdr-sim-realtime: Realtime gps-sdr-sim with TCP stream output that can connect to gnuradio or anything else…

搭建实时发射平台

  • 使用软件 GNURadio, 我这里使用的是3.10版本(或许你需要一点使用 GNURadio 的基础)

  • 如果使用低版本, 直接使用上述项目中的 tcp.grc 就可以了

  • 但是如果跟我一样使用较新的版本, 这需要把原本接收 IQ数据 的模块, 调换为新版的 TCP Source

    • 配置如图

      • image.png
  • 整体上看是这样的, 挺简单的

    • image.png

搭建实时获取位置平台

  • 在 gym487/gps-sdr-sim-realtime: Realtime gps-sdr-sim with TCP stream output that can connect to gnuradio or anything else… 中, 进入 mapper 文件夹

  • 首先安装 python 依赖

    • pip install web.py
      
  • 然后启动地图服务

    • python mapper.py
      
    • image.png

  • 然后就可以点击地图改变位置, 具体操作逻辑, 自己尝试一下就懂了

  • 然后点击 Start

    • 地图服务就会向 127.0.0.1:5678 发送坐标信息, 就是 Start 上的信息

搭建 GPS-SDR-SIM

  • 上面我们只是搭建了发射信号和获取位置的平台, 但是位置要转为发射的IQ数据, 这就需要 GPS-SDR-SIM

  • 先编译 GPS-SDR-SIM

    • gcc gpssim.c -lm -O3 -o gps-sdr-sim -DUSER_MOTION_SIZE=3600
      
      • 同样需要修改 USER_MOTION_SIZE, 来增长模拟时间
  • 然后就是启动 GPS-SDR-SIM

    • ./gps-sdr-sim -e brdc1660.25n -w 5678 -n 1234
      
      • -e 对应着 星历

      • -w 对应着 搭建实时获取位置平台 发送数据的端口

      • -n 对应着 GNURadio 监听IQ数据的端口


  • 完事具备, 把三个服务都启动了, 就可以实时伪造GPS信号了, 不过欺骗还是需要等待 30s 左右, 而且延迟有 2-3s

如果出现超链接无法正确跳转或格式错误, 请前往原文链接查看

热搜词