远程定位追踪联网车辆以及利用思路分析

2018-08-03 286215人围观 ,发现 12 个不明物体 无线安全漏洞

*本文原创作者:星空111,本文属FreeBuf原创奖励计划,未经许可禁止转载

废话:

暑假到了,在家闲着无聊,想着考个驾照吧,到了驾校后报了名,看着其他学员在模拟考试,车里面好像有个工控机,看到车刚压线了,那个工控机就发出声音”车轮扎道路边缘线,考试不合格”的语音 不一会儿,那个学员就从机房拿到了成绩单,突然感觉这玩意还挺有意思的 ,打算好好研究一下   于是我偷偷的拍了个照片,哈哈,如下所示:

然后整整花了一周时间在网上查了相关驾考整个通信系统的相关技术文章,简单总结如下:

1>定位原理:车辆要达到精准定位,需要场地安装基准站,车载需要安装移动站,并且调试基站和移动站同一频率;移动站有前后2个天线,前天线我用红色圆圈已经标记,前天线是代表车的航向;后天线是给车辆进行定位<偏东+偏北>。

2>地图采集:听驾校的技术人员说是用后天线,对场地的车道进行定点采集点位<偏东+偏北>,我估计是将这些点,制成地图,类似于高德地图那种。

3>车载与机房的通信分析:是基于C/S模式 ,那既然是客户端向服务端发起请求,那我也可以仿照车载给服务器端发起请求啊!将车载的数据发送给我!<类似于ARP欺骗>,这事儿也许就成了,有了思路,事情就好办了!思路如下:

1)抓包分析

2>)网络转串口

3>编写模拟轨迹的工具

3.具体过程

我不清楚通信是基于什么协议,所以我在不练车的时候,在驾校里面找了台空闲的电脑,想着肯定在同一个LAN中,打开我的宝贝<WireSharke>进行流量分析   如下所示:

发现居然是UDP请求包,正好可以用到我的利用思路,好鸡冻!众所周知,UDP是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去,同一个连接中的报文与前面或后面的报文都没有直接关系;这个协议,要是攻击无非2个,1>DOS攻击 ;2>UDP欺骗   本技术贴不讨论上述2种攻击手段!我简单介绍一下协议的实现流程:

Note:可见,UDP 的通信过程比 TCP 简单许多,Server少了监听与接受连接的过程,而Client端也少了请求连接的过程;Client只需要知道Server的地址,直接向其发送数据即可,而Server接收任何发往自家地址的数据,太不安全了!

车载与机房的通信我想应该是,移动站将实时获取的GPS数据通过交换机和工作在数据链路层的网桥分别发送到工控机和机房,目前机房获取的数据是网络数据,因为我编写的小工具是用串口通信的!那怎么转换为串口呢,我Google了一下,有一个转换神器如下所示

我选择UDP广播模式,需要添加虚拟串口,如下所示:

随便选择了1个串口,用来传输实时GPS数据,但是我不知道UDP的发送/接受地址和端口号???

还是得分析所抓到的数据包:

添加虚拟串口成功 !目前我电脑可以接受到车载发送的实时Gps数据,下一步要做的是将实时发到我电脑上的GPS数据与地图文件进行匹配,正所谓位置不是绝对了!位置都是相对的!

然后我用C#编写了一个小工具,可以将地图文件中的点,自动生成为车道,如下图所示


Note:小圆点在车道中不断行驶,是因为车载不断发送的实时GPS数据决定的!

定位与追踪完成。

*本文原创作者:星空111,本文属FreeBuf原创奖励计划,未经许可禁止转载

这些评论亮了

  • 星空111 (3级) 未知攻焉知防---独孤九剑 回复
    这个小工具的核心难题就是如何将GPS经纬度换算成X,Y坐标
    我将代码贴出来,分享给大家!
    /// <summary>
    /// GPS经纬度换算成x,y坐标
    /// </summary>
    /// <param name="l">精度</param>
    /// <param name="B">纬度</param>
    /// <param name="xc">X坐标</param>
    /// <param name="yc">Y坐标</param>
    public static void MCT84Bl2xy(double l, double B, out double xc, out double yc)
    {
    try
    {
    l = l * Math.PI / 180;
    B = B * Math.PI / 180;
    double B0 = 30 * Math.PI / 180;
    double N = 0, e = 0, a = 0, b = 0, e2 = 0, K = 0;
    a = 6378137;
    b = 6356752.3142;
    e = Math.Sqrt(1 - (b / a) * (b / a));
    e2 = Math.Sqrt((a / b) * (a / b) - 1);
    double CosB0 = Math.Cos(B0);
    N = (a * a / b) / Math.Sqrt(1 + e2 * e2 * CosB0 * CosB0);
    K = N * CosB0;
    double Pi = Math.PI;
    double SinB = Math.Sin(B);
    double tan = Math.Tan(Pi / 4 + B / 2);
    double E2 = Math.Pow((1 - e * SinB) / (1 + e * SinB), e / 2);
    double xx = tan * E2;
    xc = K * Math.Log(xx);
    yc = K * l;
    return;
    }
    catch (Exception ErrInfo)
    {
    }
    xc = -1;
    yc = -1;
    }
    )8( 亮了
发表评论

已有 12 条评论

取消
Loading...
css.php