硬件平台:HackRF One
软件平台:MAC运行环境搭建
系统平台:OS X 10.11 EI Capitan
GPS终端:One Plus手机,飞行模式,仅GPS定位,GPS test App
文章特点:根据网上的文章实验证明发现了问题总结归纳到此,针对以上环境担保100%成功。


0. GPS系统简介

GPS 系统本身非常复杂, 涉及到卫星通信等各个领域. 这里只是简单介绍一下. 我们通常所说的 GPS 全球定位系统是由美国国防部建造完成. 目前在太空中共有31颗卫星在同时运作. 一般我们需要至少4颗卫星来完成三角定位. GPS卫星同时发送民用L1和军用L2两种无线信号. 我们通常使用的是没有加密的L1民用 1575.42MHz 的超高频波段.

GPS 信号里包含了3种常用信息.

Pseudorandom code: 简单的ID 码, 用来识别每颗卫星.
Ephemeris data: 包含卫星的运行状态, 时间日期等信息. 这在通过卫星来定位起到非常重要的作用.
Almanac data: 包含有每颗卫星的轨道信息,以及卫星在某个特定时段将出现的具体位置.

内容摘自王康的PDF,下载地址见附录:

1) GPS定位原理

首先,让我们明确我们的需求。我们想要知道的是我们的位置坐标(x,y,z),如果从一个已知坐标(x1,y1,z1)的点A(这个点在现实情况下是卫星)广播一个信号,比如说光和声音或者电磁波,然后我们试着去测量信号发送至到达的时间差τ1(在gps系统中我们用的是电磁波,我们知道它的速度),然后我们就能得出下面的等式:

这个等式有3个未知变量,因此单单一个等式解不出来,我们可以再加两个已知位置的点(卫星),我们把它们记作(x2,y2,z2) 和 (x3,y3,z3),然后就是下面的方程组

现在我们就能解出我们的位置(x,y,z)了

但在工程应用中这样还不够。为了测量电磁波发送至到达的时间差τ1,需要在电磁波发送的时候写一个时间戳t1,然后是卫星上的时钟时间参考值,当信号到达我们这里时,我们提取出时间戳t1,然后计算t1和当地时间t2的差值来计算时间差τ1。然而当地时间和卫星时间并不是同步的,会出现一个时间偏移量∆t1,所以这个时间偏移量也要被考虑进去,于是修正后的方程式如下所示:

译者注:所以有4个变量,就需要4个卫星来创造4个等式啦,以下高等数学内容略,以上内容说明我们需要伪造至少4颗卫星的信号才能使gps定位

1. 下载编译gps-sdr-sim

因为我的OSX系统下使用MacPorts安装了gcc5,xcode默认安装的gcc是/usr/bin/gcc,所以直接make可能会提示找不到omp.h文件因为调用的是xcode的gcc(苹果xcode安装的gcc很多程序都无法成功编译),那么按照下面的步骤即可正常安装。

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

或者干脆sudo port select gcc mp-5再make就OK了

2. RINEX星历数据下载

ftp://cddis.gsfc.nasa.gov/pub/gps/data/daily/2016/brdc

找brdc0050.16n.Z 这样的文件,解压出来就是了

3. 生成GPS仿真数据

$./gps-sdr-sim -e brdc3540.14n -l 29.643598,91.101319, -b 

指定星历文件(可自行更新至最新的星历数据),设置经纬度(拉萨市),必须指定采样精度为8否则用hackRF one欺骗成功率不高,反正我指定16是没成功过(默认为16,乌云文章也是16但设备是bladeRF)

另外如果有其他目的也可以伪造一个动态的GPS数据样本,例如欺骗计步器,轨迹等

$./gps-sdr-sim -e brdc3540.14n -u circle.csv -b 

GPS-SDR-SIM 运行时间问题

默认情况下GPS模拟器只能连续工作5分钟左右. 通过查看源代码后, 我们可以发现这是因为程序默认设置导致. 在程序设计之初为了节省硬盘空间, 默认只生成了300秒左右的数据. 我们可以通过改动参数来延長工作時間. 但需要注意的是仅仅延長到15分鐘,數據便可達到5G大小.

4. HackRF发射GPS数据

$ hackrf_transfer -t gpssim.bin -f  -s  -a  -x  -R

指定GPS数据,指定频率为1575420000 即民用GPS L1波段频率,指定采样速率2.6Msps,开启天线增益,指定TX VGA(IF)为0(为了限制影响范围,最大为47慎用!!!),最后开启重复发射数据功能

手机终端1分40秒就可以被欺骗成功,这里有一个测试技巧,就是定模模式选仅GPS定位,不要用基站、WLAN定位,这样打开地图等软件就是伪造后的GPS坐标点。

效果如图所示:

附录:

https://www.blackhat.com/docs/eu-15/materials/eu-15-Kang-Is-Your-Timespace-Safe-Time-And-Position-Spoofing-Opensourcely-wp.pdf

HackRF实现GPS欺骗教程的更多相关文章

  1. 使用HackRF和外部时钟实现GPS欺骗实验

    本文内容.开发板及配件仅限用于学校或科研院所开展科研实验! 淘宝店铺名称:开源SDR实验室 HackRF链接:https://item.taobao.com/item.htm?spm=a1z10.1- ...

  2. hackrf GPS欺骗

    在对GPS欺骗之前,先对GPS的知识做一个简单的介绍 GPS 系统本身非常复杂, 涉及到卫星通信等各个领域. 这里只是简单介绍一下. 我们通常所说的 GPS 全球定位系统是由美国国防部建造完成. 目前 ...

  3. GPS欺骗(一)—无人机的劫持

    本文作者:唯念那抹瑞利蓝 今天我们所讲的是GPS欺骗的方式和简单的定义.让大家对GPS欺骗这个方面有所了解.GPS是全世界地一个卫星定位系统,由美国制造. 0×01 例子2011年伊朗劫持美国无人机 ...

  4. 狗汪汪玩转无线电 -- GPS Hacking

    狗汪汪玩转无线电 -- GPS Hacking Kevin2600 · 2015/12/09 10:12 0x00 序 GPS Hacking 在过去几年的安全会议上一直都是很受关注的议题. 但往往因 ...

  5. 玩转无线电 -- GPS Hacking (上)

    0x00 序 GPS Hacking 在过去几年的安全会议上一直都是很受关注的议题. 但往往因为内容太过学术化, 所需设备成本太高. 让许多感兴趣的朋友苦于无法入门. 直到GPS-SDR-SIM 这类 ...

  6. Python工具库分享

    漏洞及渗透练习平台: WebGoat漏洞练习平台: https://github.com/WebGoat/WebGoat webgoat-legacy漏洞练习平台: https://github.co ...

  7. Python渗透测试工具库

    漏洞及渗透练习平台 WebGoat漏洞练习平台: https://github.com/WebGoat/WebGoat webgoat-legacy漏洞练习平台: https://github.com ...

  8. github安全整理

    漏洞及渗透练习平台: WebGoat漏洞练习平台: https://github.com/WebGoat/WebGoat webgoat-legacy漏洞练习平台: https://github.co ...

  9. Python工具库(感谢backlion整理)

    漏洞及渗透练习平台: WebGoat漏洞练习平台: https://github.com/WebGoat/WebGoat webgoat-legacy漏洞练习平台: https://github.co ...

随机推荐

  1. [Tomcat] Tomcat远程调试

    如何用eclispe远程调试tomcat 关键步骤: 1)修改启动脚本startup.bat 复制startup.bat为startup-debug.bat,然后打开startup-debug.bat ...

  2. Scrum 项目5.0

    1.团队成员完成自己认领的任务. 2.燃尽图:理解.设计并画出本次Sprint的燃尽图的理想线.参考图6. 3.每日立会更新任务板上任务完成情况.燃尽图的实际线,分析项目进度是否在正轨.    每天的 ...

  3. LINUX&UNIX 安装vmware workstation10和centOS6

    大一下时,学习了linux&unix这门课程,全字符的操作,我对它并不是很感冒,不过,还是找学长安装过虚拟机和Linux系统,在考前利用它和putty进行复习.现在重装系统之后,各类软件,自然 ...

  4. 如何在linux系统下面编译C++(写给小白)(-1)

    首先 , 对于redhat,openSuse来说 ,C/C++的编译器已经集成了 大多数应该使用的是Ubuntu ,Ubuntu只有gcc(一个编译C语言的编译器), 因此还需要使用命令apt-get ...

  5. Java中Array的常用方法

    0.创建/声明一个数组 1 2 3 String[] aArray = new String[5]; String[] bArray = {"a","b",&q ...

  6. Hadoop概括——学习笔记<一>转

    前言 第一章主要讲的是hadoop基础知识.老师讲的还是比较全面简单的,起码作为一个非专业码农以及数据库管理人员,也能狗大致了解其特点 首先是概括图(以hadoop2.0为例)  一.Hadoop基础 ...

  7. SASS学习笔记2 —— 语法

    sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号:另一种是scss文件,这种和我们平时写的css文件格式差不多,使用大括号和分号.在此也建议使用后缀名为scss的文件,以避免sass ...

  8. [Js]JavaScript闭包和范围的快速测试

    1. if (!("a" in window)) { var a = 1; } alert(a); [分析]代码含义:如果window不包含属性a,就声明一个变量a并赋值为1 ①J ...

  9. TaskTracker启动过程源码级分析

    TaskTracker也是作为一个单独的JVM来运行的,其main函数就是TaskTracker的入口函数,当运行start-all.sh时,脚本就是通过SSH运行该函数来启动TaskTracker的 ...

  10. spring任务计划

    小组 第一次小组会议结果 贾川和刘三龙负责这些任务: 1:4.11 搭配开发必要的环境,vs2010 2:4.12学习windows界面开发的基本知识 3:4.13-4.15 和小组成员讨论软件界面的 ...