无线电
0
用SDR实时伪造GPS信号
radio 2017-5-1 00:16:20

用开源项目gps-sdr-sim就可以干这个:https://github.com/osqzss/gps-sdr-sim

不过原版的gps-sdr-sim只能输出一个I/Q信号文件,然后再用相关的软件来把这个I/Q信号文件用SDR发射出去。。没法实时地运行。。

于是fork过来改了一下,加了个用TCP流输出I/Q信号的功能,这样就能和Gnuradio的"TCP Source"连接起来,实时运行。。


不过这样显然不够过瘾,因为原来的gps-sdr-sim只能使用静态的坐标位置或者路径文件。。这样就没法实时改变位置了。。于是又加上了个http的接口,这样就能使用网页地图,想去哪就去哪:


用HackRF来发射,为了限制发射范围,关闭hackrf的RF放大,再加个20dB的衰减器:


使用外部TCXO时钟,要不然HackRF自带的振荡器频率不够准确,信号根本没法被接收。。


用手机接收:


大概一分钟多就能3D FIX了。。

去上海

去杭州

北京某某门

因为用的是十几天前的星历文件,所以GPS时间很显然是错的。。不过可以用-T选项来强制替换信号中的日期/时间来解决。。


下载:

gps-sdr-sim.zip9.46M40次

或者:https://github.com/gym487/gps-sdr-sim-realtime

使用方法:

先用Gnuradio运行tcp.grc(其中的sdr用的是设为hackrf的osmocom sink,需要换成自己的..)

然后参照README.md运行gps-sdr-sim(需要开启-n选项连接Gnuradio,开启-w选项连接地图服务器

例子:

./gps-sdr-sim -e tro11110.17n   -n 1234 -v -d 3600 -w

然后cd进入mapserver目录,

python ./mapper.py

运行地图服务器,访问 http://127.0.0.1:8080/static/baidumap.html 打开地图

然后就可以到处"旅游"啦~

单击地图移动位置


注:

百度地图上取到的坐标和实际坐标有几百米的偏差。。需要注意一下。。

[修改于 2 年前 - 2017-05-01 02:10:15]

2017-5-1 03:10:24
1楼
0
hhh  前段时间流行的pokemon go gps伪造,很多类似的文章。
另外感觉天线需要一个外壳。

[修改于 2 年前 - 2017-05-01 23:35:44]

2楼
0
话说GNU Radio开发有么有什么参考资料呢?
比如新开发一个硬件外设要和它对接,接口什么的~~~
radio(作者)
3楼
0
引用 ry7740kptv:
话说GNU Radio开发有么有什么参考资料呢?
比如新开发一个硬件外设要和它对接,接口什么的~~~
官方wiki?
https://wiki.gnuradio.org/index.php/Main_Page#Developing_GNU_Radio
4楼
0
引用 radio:
用开源项目gps-sdr-sim就可以干这个:<https://github.com/osqzss/gps-sdr-sim>
不过原版的gps-sdr-sim只能输出一个I/Q信号文件,然后再用相关……
用USRP B210回放,ublox NEO-6M NEO-8M 小米4 这些设备都无法接收
radio(作者)
5楼
0
引用 warmonkey:
用USRP B210回放,ublox NEO-6M NEO-8M 小米4 这些设备都无法接收
是不是没有用外部时钟源?
用了的话要注意下Gnuradio里的这个选项..275364


另外虽然没有用过USRP,但是貌似按照README的说法,USRP要用2.5MHz的采样率而不是默认的2.6MHz

HackRF and bladeRF require 2.6 MHz sample rate, while the USRP2 requires 2.5 MHz (an even integral decimator of 100 MHz).


所以要加个-s 2500000的选项并且把Gnuradio里的采样率也改过来..

[修改于 2 年前 - 2017-05-01 20:06:42]

6楼
0
看到了我局的天线23333
7楼
0
引用 radio:
官方wiki?
https://wiki.gnuradio.org/index.php/Main_Page#Developing_GNU_Radio
引用 radio:
官方wiki?
https://wiki.gnuradio.org/index.php/Main_Page#Developing_GNU_Radio
墙内表示比较痛苦。。。
与GNU Radio配套的好像有个gr-osmosdr,不过好像是Boost库写的,看不太懂。。。
8楼
0
引用 warmonkey:
用USRP B210回放,ublox NEO-6M NEO-8M 小米4 这些设备都无法接收
用B205mini+gps-sdr-sim配合自己写的轨迹生成器,iPhone/各种Android机器接收正常。。。而且发现iOS有偏心GPS时间的倾向,如果一旦被GPS欺骗了以后,很快系统时间就被改成GPS时间,而且关闭GPS欺骗,很长时间无法正常接收正常的GPS信号,时间也会很难改回来。
9楼
0
这个gps天线怎么调 3G的网分一直都调不好
2017-5-13 11:38:50
10楼
0
dc tone是自动bias消掉的吗
几年前那些库还不完善的时候 生成的流 看运气会有很高的dc tone,然后接收机就不认了,要手工修正
radio(作者)
11楼
0

dc tone是自动bias消掉的吗 几年前那些库还不完善的时候 生成的流 看运气会有很高的dc tone,然后接收机就不认了,要手工修正

dc tone是指频谱中间那个高高耸立的DC offset么?不清楚你用的库是是怎么样的。。我这个没有这样的现象。。从顶楼的频谱图也可以看出来。。 库源代码里生成I/Q信号有关的代码主要就这些:

每次循环把载波的相位步进一段,计算下一个采样点的信号:

chan[i].carr_phase += chan[i].carr_phasestep;

步进长度由卫星初始化时确定:

chan[i].carr_phasestep = (int)(512 * 65536.0 * chan[i].f_carr * delt);

步进时间delt为采样率倒数:

delt = 1.0/samp_freq;

载波频率的计算:

// Pseudorange rate.
	rhorate = (rho1.range - chan->rho0.range)/dt;

	// Carrier and code frequency.
	chan->f_carr = -rhorate/LAMBDA_L1;

由两次步进伪距的差值除以LAMBDA_L1(光速除以GPS L1的频率)得到。(产生多普勒偏移)

生成I/Q信号。。就是把数据比特和伪随机扩频序列还有增益分别和两路相差90度的载波信号乘到一起调制,然后把全部视野内的卫星信号叠加在一起:

					iTable = (chan[i].carr_phase >> 16) & 511;
					ip = chan[i].dataBit * chan[i].codeCA * cosTable512[iTable] * gain[i];
					qp = chan[i].dataBit * chan[i].codeCA * sinTable512[iTable] * gain[i];

					// Accumulate for all visible satellites
					i_acc += ip;
					q_acc += qp;

显然正常情况下大约正负10kHz的载波信号,与1.023MHz的伪随机序列相乘会产生上下两个边带共2.046MHz带宽的信号的。。不会只在直流上形成一个尖峰。 这种情况姑且胡乱推测一下,这种情况应该是bug导致生成了一个或者多个C/A码一直为0或1的卫星?

[修改于 2 年前 - 2017-05-13 13:15:09]

2018-7-29 00:40:26
12楼
0

谢谢楼主的帖子。当年实验室里一台GPS信号模拟发生器十几万,现在软件无线电就全搞定了。对了,楼主使用的安卓手机上定位的软件叫啥?

13楼
0

谢谢楼主的帖子。当年实验室里一台GPS信号模拟发生器十几万,现在软件无线电就全搞定了。对了,楼主使用的安卓手机上定位的软件叫啥?

radio(作者)
14楼
0
引用:iamapighhh 发表于13 楼的内容:
谢谢楼主的帖子。当年实验室里一台GPS信号模拟发生器十几万,现在软件无线电就全搞定了。对了,楼主使用.....

GPS Test

2018-12-16 22:32:10
15楼
0

话说必须要TCXO吗,最近用AD9363的平台试着发射,没有TCXO,频率定为GPS的L1,但是奇怪的是用手机无法接收到,手机为华为平台。用RTLSDR观测到是有信号发出的

radio(作者)
16楼
0
引用:smith 发表于15 楼的内容:
话说必须要TCXO吗,最近用AD9363的平台试着发射,没有TCXO,频率定为GPS的L1,但是奇怪.....

我用HackRF+安卓手机的测试结果是不用TCXO就无法被接收,用了就可以。。GPS接收机对信号频率准确性要求比较高,真正卫星上的信号是原子钟产生的,毕竟要用来进行多普勒/载波相位之类的测量。

[修改于 3 个月前 - 2018-12-16 22:47:04]

17楼
0

USRP B205mini 是内置TCXO,实测无需用外部ref也可以。没想到HackRF板载晶振差距这么大。

2019-3-14 17:22:25
18楼
0

您好,请问一下,我使用您的项目文件去操作,用的硬件是Bladerf,但是在实际操作中,发现并不能欺骗,如果用原始文件生成制定坐标的文件可以欺骗(排除硬件问题),但是利用您提供的项目文件产生实时文件的时候,并不能成功欺骗,而且我将TCP的文件保存下来,重新发射,也并不能欺骗,请问有什么需要注意的,或者不同的么。时钟已经改为default。

radio(作者)
19楼
0
引用:houjiezhuzi 发表于18 楼的内容:
您好,请问一下,我使用您的项目文件去操作,用的硬件是Bladerf,但是在实际操作中,发现并不能欺骗.....

 没有用过BladeRF,方便讲下你的具体配置么?

因为按照主贴的操作在实时模式下并不会产生任何输出文件,所以感觉可能是配置的问题。(例如用BladeRF时不要用原项目的脚本,而应该把GnuRadio中流图的sink配置为BladeRF)

[修改于 10 天前 - 2019-03-14 18:25:40]

20楼
0
引用:radio 发表于19 楼的内容:
 没有用过BladeRF,方便讲下你的具体配置么?因为按照主贴的操作在实时模式下并不会产生.....

pic

 

pic

 这是我的配置方案。

Bandwidth 改为2.5M(参考bladerf.script里发射设置)

Device number没有写,gnuradio会自动识别板子进行发射。

其余命令没有任何改动。

radio(作者)
21楼
0
引用:houjiezhuzi 发表于20 楼的内容:
  这是我的配置方案。Bandwidth 改为2.5M(参考blade.....

感觉可能还是配置上的问题?

从原理上来讲,只要网页地图上不动,生成的数据就和通常的静止坐标的模式没有任何区别,应该不会产生这种无法使用的现象。

建议用GnuRadio搭框图读取那个可以正常欺骗的文件,用这个配置的sink发射看看?

想参与大家的讨论?现在就 登录 或者 注册

Github  https://github.com/kccd/nkc.git

科创研究院 (c)2001-2019

蜀ICP备11004945号-2 川公网安备51010802000058号