image.png (53.32 KB, 下载次数: 1)
下载附件
2024-11-29 20:32 上传
如上面的箭头所示,上一篇帖子中的所谓信息提取还是伪造,主要还是伪造多个相同的副本,比如去伪造同样ID和飞行姿态的机器发射出的信号。 对方可能能检测到的就是多个相同的副本,会让人感觉迷惑,但是还是很容易就被识别出异常。因为现实中不可能存在太多的相同身份ID和飞行信息的机器出现在同一个位置附近。 那么下来就要看怎么来解这个里面的信道编码了。信道编码其实和软件加壳的主要目的是类似的,一个是保护信息安全,另一个最重要的作用就是提升纠错能力。因为无线传输是很不可靠的,空中的无线电干扰是比较多的,经常容易某些Bit位出错。如果不加信道编码的话,就相当于信息在空中裸奔,一旦一个Bit出错,整条信息就完蛋了。 我们举个最简单的例子来说明信道编码的好处,就拿最简单编码方式就是重复编码,就是把一个bit信息重复N次来提升可靠性,这是最简单最原始的信道编码。比如N=8的时候:本来我要发送的信息是 0101 ,那么经过信道编码之后就是00000000 11111111 00000000 11111111, 经过无线电传输到接收方,结构由于干扰,可能出错了几个Bit,收到的bit信息变成了 01001000 11101111 0010000 111011111. 虽然错了几个Bit,但是根据多数判决法则,则第一个8位包含的0最多,那么就判决为0, 第二个就判决为1, 同理,此时信息就恢复为正确的 0101了。 假设你不知道双方采用的是重复编码而且N=8,那么即使你检测到一串很长的码流,你也不知道原始信息是啥。 那么在信道最恶劣的情况下,可能采用这种方法也会导致出错,那么怎么判断我收到的信息到底是正确的,还是错误的呢,到这个层面通常会在原始信息后面再额外加几个bit作为校验位,通常采用CRC校验的方式。也就是当你收到这些信息之后,用一套双方约定的校验算法校验一个结果,如果和预期的校验位一致,那么就代表信息传输成功。 如果你是破解者,也是当你检测到的数据包中的CRC校验结果一致的时候,你才能被认为是成功的,否则可能就是还是没有解密成功。 经过前段时间的积累和进一步研究,终于搞清楚了数据包解信道编码的方法,在这里把关键性的步骤给大家分享一下,涉及太细节的东西大家自行琢磨即可。不提供具体的方法,但是总体思路是可以参考的。 如下是总体流程
image.png (54.51 KB, 下载次数: 1)
下载附件
2024-11-29 20:33 上传
image.png (42.25 KB, 下载次数: 1)
下载附件
2024-11-29 20:34 上传
image.png (44.09 KB, 下载次数: 0)
下载附件
2024-11-29 20:34 上传
其中可以看到由于此系列无人机采用了非常简单的诸如0x12345678作为初始gold序列的初始值,就像是设置了一个简单密码一样,而且反交织器采用3GPP 公开的参数,这都是相对容易被破解的地方。希望厂家后续可以涉及出更私密的信道编码方式。 下面对于其中的主要步骤中涉及到技术规范原理简单解释一下:
QPSK 解码后的信息,QPSK是以2Bit为单位解码的,分别是00,11,10,11. 转换为int型就是 0,3,1,2这种数字
image.png (159.66 KB, 下载次数: 0)
下载附件
2024-11-29 22:42 上传
然后将这些数字还原为二进制Bit
image.png (27.17 KB, 下载次数: 0)
下载附件
2024-11-29 22:44 上传
image.png (16.98 KB, 下载次数: 0)
下载附件
2024-11-29 22:46 上传
Gold序列的产生方法,3GPP 36.211规范给出了产生的公式。大家可以从网上找到很好的示例程序,或者依照这个公式做一个。初始值就是里面的x1(n), n=1,2,3....
image.png (71.89 KB, 下载次数: 0)
下载附件
2024-11-29 20:35 上传
image.png (17.76 KB, 下载次数: 0)
下载附件
2024-11-29 23:15 上传
剩下的步骤就是对这一长串的01bit信息进行信道解码操作了。
关于有用信息的提取,对于turbo编码器来说,一路信息流会被编码为3路信息,假设原始信息长度K,其中一路是原始信息,另外两路信息用于辅助译码,可以理解为校验纠错信息。 如果要设计一个完整的Turbo译码器,需要这三路信息都要考虑,以增加译码的可靠性。但是一个最简单的译码器就是可以直接只取有用信息,这样的话其实就是要求采集的信息所在信号要足够好,这样不借助校验纠错也能确保有较大成功率。所以在这里可以采用我流程图中的方式,找到特定的偏移量只取systematic stream。也可以借助网上的信息自行设计一个完整的turbo解码器。 此处而言
image.png (91.76 KB, 下载次数: 0)
下载附件
2024-11-29 20:35 上传
解交织器(interleaver):交织器的目的就是打乱信息的传输顺序,比如原来要传输 1,2,3,4,现在变成3,4,2,1 , 所以采用解交织器用于恢复原始的信息顺序。参考的算法来源于 3GPP 36.212的如下章节:
image.png (65.3 KB, 下载次数: 0)
下载附件
2024-11-29 20:36 上传
image.png (52.53 KB, 下载次数: 0)
下载附件
2024-11-29 20:36 上传
此处交织和解交织是用的同一把钥匙,操作是类似的。 CRC采用的是CRC-16算法,算法的关键参数是CRC多项式0x11021和CRC初始值0x3692。大家可以采用Python或者其他语言轻松的搞定这一部分。 对于解交织后的信息进行CRC信息计算。 将计算出的结果和CRC字段的值进行比对,一致的话,代表解码正确了。就可以进行其他信息的解密了。至于CRC字段在哪里,下面会给出来具体的定义。 如下是给出的一个实例概览,各个字段的起始bit位置和结束bit位置都给出了相关的定义,采用相关的定义制作了基于URH的协议解码器,结构如下图,供参考,比如PacketLength是从第1个bit开始到第8个bit结束,也就占用了8bit。 无人机机身的序列号SerialNumber是从第57个bit开始到第184个bit结束。
image.png (41.93 KB, 下载次数: 0)
下载附件
2024-11-29 20:36 上传
image.png (26.17 KB, 下载次数: 0)
下载附件
2024-11-29 20:37 上传
我们来看一个具体的实例,比如下面的解码后的bit流。 可以看到
image.png (45.71 KB, 下载次数: 0)
下载附件
2024-11-29 20:37 上传
无人机的飞行经度,纬度转换为十进制有符号32位整数之后需要再除以174533就是真正的无人机位置信息。 高度是转换为16位有符号数之后除以3.281得到高度信息。 航向信息是16位有符号整数。
image.png (24.91 KB, 下载次数: 0)
下载附件
2024-11-29 20:38 上传
另外还有两个比较重要的字段分别是机型信息(Device Type),这个数字是一个8bit无符号整数, 比如这里如果是58,对应的机型就是Mavic Air 2, 如果是53就是Mavic Mini。还有一个就是uuid,这个也是一个唯一的身份识别码。长度由uuidLength字段指示,比如如果是这个字段指示是19, 那么后面跟着的19个字节就是这个uuid的ASCII码。 对于前面提到的CRC 校验结果,就放到了随之而后的2个字节(16位)中了。
image.png (21.91 KB, 下载次数: 0)
下载附件
2024-11-29 20:38 上传
至此,解码过程就完全搞定了。 那么既然知道了解码的方法,那么下来伪造身份的方法也就显而易见了,比如编辑好的字段,直接修改为你想要的值,最后将CRC_Packet按照修改好的值进行重新填充就好了。
比如如下配置就可以将deviceType从00到FF(255)都遍历一个遍,产生众多组不同机型的信息,有些机型信息可能是未定义的,也就是无中生有和有中生有。
image.png (83.58 KB, 下载次数: 0)
下载附件
2024-11-29 20:39 上传
附录:若干种已知机型信息汇总
image.png (20.35 KB, 下载次数: 0)
下载附件
2024-11-29 21:28 上传
好了,无人机的研究部分也就暂时告一段落,对于真正伪造目前只是在原理上是可以说的通的,仅供大家学习。希望大家不要轻易尝试,我也不会真的去尝试的。学习为主,祝大家学习的开心。