使用SDR设备进行GPS信号欺骗的事情网上已经有很多教程了,主要是用到了一个开源项目点击打开链接
不过原版的gps-sdr-sim只能输出一个I/Q信号文件,然后再用相关的软件来把这个I/Q信号文件用SDR发射出去,没有办法实时的产生信号并发送出去,既然能够产生数据,说明肯定可以改成实时。搜索一下还真发现github上有个个人项目
https://github.com/gym487/gps-sdr-sim-realtime 它将gps-sdr-sim产生的数据用socket发送到一个特定的端口上,然后在grc中用TCP来接受这些数据,并通过Osmosdr Sink发射出去。原理很简单,相信你们也会知道怎么改。它还同时实现了一个从几个基于PyWeb的小型Web服务器来获得要伪造的GPS坐标数据,然后用Baidu地图接口实现可视化的地图位置更改,做的很简单,不过用来做测试还是没有问题的。
我已经做了一个分支到自己的github https://github.com/skyshell20082008/gps-sdr-sim-limeSDR
只需要
git clone https://github.com/skyshell20082008/gps-sdr-sim-limeSDR
cd gps-sdr-sim-limeSDR
make
即可看到生成的 gps-sdr-sim
首先运行grc流程图
gnuradio-companion tcp.grc
TCP Source 就是一个TCP Server 监听端口为2913端口,它会读取发送到这个端口上的GPS I/Q原始数据。点击运行,会进入等待状态
那么又谁来发送I/Q数呢,当然是之前编译的gps-sdr-sim。
不过先不急,由于gps-sdr-sim 还需要从一个本地http server 获取相应的gps坐标,所以先启动这个server,我们称为mapserver吧。
cd mapserver
python ./mapper.py 运行
在浏览器中输入http://127.0.0.1:8080/static/baidumap.html
打开我们的地图网页,这个时候你就可以点鼠标点击任意你想要的位置,当然点击一下就会更新数据了。
再看看mapper.py的执行终端是不是发生了变化了,gps坐标也在更新
说明没有问题。
最后就是要运行我们实时产生数据的gps-sdr-sim程序了。
执行
./gps-sdr-sim-e tro11110.17n -n 2913 -v -d 3600 -w
其中 tro11110.17n 为星历文件,我直接用作者下载的吧,当然也可以从NASA下载最新的星历文件,不过我只是搞个测试好玩,不麻烦了。
-n 是用来制定TCP Server接收方的端口, 我填grc 中 TCP Source设置的2913 -d 就是运行的时间了 3600秒 够了。
运行之后
grc 也有了反映,弹出了信号fft观看窗口。说明开始正式工作了。
信号已经通过 osmosdr sin ->limeSDR 发送出去了。
这个时候就要用手机来检测一下,不过由于现在采用的定位方式不仅仅是gps,还采用了很多辅助技术以及信号的甄别机制,所以要把手机调整到飞行模式,来测试,然后就等三四分钟,等待手机的更新吧。
再在地图上看看欺骗成功了没,百度地图是欺骗成功了,微信可能有检测机制,故没有成功。自己可以试试看,这篇就是一个简单的测试,希望只是用来交流,别去干违法的事。随意使用无线电频道可是违法的。今天就到此了吧,懒得发手机照片了。当初伊朗好像就是用gps伪造信号骗无人机的。当然你可别去骗民用无人机。