1、前言
因项目需要,需将一台带有GPS定位的设备将其定位至某地区,模拟在该地区下的真实运行情况。
2、什么是GPS欺骗
GPS欺骗是指:为误导指定区域内的GPS导航定位信号,发射与真实GPS信号具有一定相似性的伪导航信号,迫使相关用户接收终端接收解算此类伪导航信号,从而在隐蔽条件下使得用户得到了虚假的位置、速度和时间信息并无法有效察觉。
GPS欺骗可分为静态GPS欺骗和动态GPS欺骗。
静态GPS欺骗是一种通过修改、模拟或屏蔽GPS信号,误导设备在静态状态下的定位系统的攻击。
动态GPS欺骗强调了不仅仅关注设备的静态位置,还关注设备运行过程中动态地影响其定位。这种攻击方式可能导致更严重的后果。
3、利用USRP模拟发射GPS信号
3.1、实验环境
硬件:一台USRP B200-mini-i、GPS信号接收器、国产某品牌手机P30 Pro
软件:USRP B200所需环境、Google Earth Pro、u-center、SatGenNMEA、卫星伴侣APP等
3.2、实验准备
安装USRP的相关驱动,安装u-center软件,安装Google Earth Pro软件,安装卫星伴侣APP等。
3.3、Linux下模拟静态GPS欺骗
git clone https://github.com/osqzss/gps-sdr-sim.git
cd /gps-sdr-sim
gcc gpssim.c -lm -O3 -o gps-sdr-sim
生成GPS卫星信号文件,其中brdc0010.22n是星历文件。
./gps-sdr-sim -e brdc0010.22n -l 30.xxxxxx,120.xxxxxx,100 -d 600 -s 2500000 -T now
执行完毕后会生成一个gpssim.bin文件。
详细参数说明:
用法:gps-sdr-sim [选项]
选项:
-e <gps_nav>用于GPS星历表的RINEX导航文件(必填)
-u <user_motion>用户动作文件(动态模式)
-g <nmea_gga> NMEA GGA流(动态模式)
-c <位置> ECEF X,Y,Z,以米为单位(静态模式),例如3967283.15,1022538.18,4872414.48
-l <位置> Lat,Lon,Hgt(静态模式),例如30.286502,120.032669,100
-t <日期,时间>场景开始时间YYYY / MM / DD,hh:mm:ss
-T <日期,时间>将TOC和TOE覆盖到方案开始时间
-d <欺骗时间>持续时间[秒](动态模式最大值:300静态模式最大值:86400)
-o <输出> I / Q采样数据文件(默认值:gpssim.bin;使用 - 用于stdout)
-s <频率>采样频率[Hz](默认值:2600000)
-b <iq_bits> I / Q数据格式[1/8/16](默认值:16)
-i禁用航天器场景的电离层延迟
-v显示有关模拟频道的详细信息
发射生成的卫星信号文件:
sudo python3 gps-sdr-sim-uhd.py -t gpssim.bin -s 2500000 -x 80
在等待2~3分钟后,u-center收到GPS信号:
存在的问题:我在虚拟机Ubuntu下发射模拟GPS信号,使用上述命令,存在卫星信号不稳定情况,可能是哪个参数没有调好。
3.4、Windows下模拟实时动态GPS欺骗(稳定)
环境:windows 10
下载kobekobe的带ui界面的gps-sim项目,进入win64-release目录,运行gps-sim.exe
点击启动
出现此界面表示正在发射模拟信号,此时u-center中收到信号:
拿出手机,打开飞行模式,关闭蓝牙、Wifi,重启一下,打开卫星伴侣APP,查看卫星信号,一开始卫星信号是灰色的表示不可用,在等待两分钟左右后,成功上线。
点击定位查看经纬度是否已经定位到指定位置并可能按轨迹路线移动,此时把位置关闭,连上Wifi(加载地图资源用,位置不关好像会飘回到原地),点击地图查看所在地区(好像是小日子那里一所大学(手动滑稽))。
4、轨迹文件制作
4.1、从Google Earth 上规划路线生成kml文件
这里直接引用大神的步骤即可。
启动 Google Earth,调整视野,寻找到需要制作轨迹的位置,然后点击工具栏上的添加路径:
在地图上,点击勾画出一个运动轨迹,起点和终点最好很靠近,避免终点突然跳到起点:
为路径起名,点击确定后,它就会出现在左侧的位置列表之中,在上面点击右键,选择”将位置另存为”,将之保存为 kml 文件:
保存后的 kml 文件,是不能够直接使用的,它本质上只是一种包含路径中关键坐标点的格式,并不包含实际运动轨迹中加速,减速,静止这样的数据,我们要对其进行转换。
转换格式需要用到 SatGenNMEA软件,SatGenNMEA软件在win64-release就有了。
打开 SatGenNMEA软件,将数据更新频率设置为10hz,其他的都用默认参数就行,如果觉得起步停留时间80S太长了也可以把起步停留时间改短一点,20S应该就可以了。然后点击”Load KML file”,加载GOOGLE EARTH制作的kml路径,然后点击”Generate NMEA file”,即可生成标准的 NMEA 轨迹文件,好了这个文件就可以在gps-sim里面使用了。
在启动gps-sim.exe时轨迹文件选择刚保存的.txt文件即可,其中文件内容格式如下:
4.2、使用gps轨迹录制软件现场刻录轨迹
插上GPS接收器去室外边移动边采集并生成轨迹文件。
5、结语
智能手机不保证一定能定位成功,有些可能带了防止欺骗技术,另外很多手机都使用多方位定位,例如Wifi、基站、蓝牙等。
使用其他SDR应该也可以发射模拟信号,例如HackRF、PlutoSDR(已验证)等。
附星历文件下载地址:ftp://igs.gnsswhu.cn/pub/gps/data/daily,据说使用最新的星历文件可提高欺骗成功率。
最后提别提醒:
请勿将该技术用于非法用途!!!
请勿将该技术用于非法用途!!!
请勿将该技术用于非法用途!!!
重要的事情说三遍!
此外,不用时请及时关闭发射模拟信号,以免造成不良影响。