本文为看雪论坛优秀
看雪论坛作者ID:星舆实验室 文章
在前两篇侠盗猎车系列文章中, 我们介绍了固定码逆向分析的思路和原理。感兴趣的同学可去(https://bbs.pediy.com/thread-269716.htm和(https://bbs.pediy.com/thread-270069.htm) 复习一波。
相对传统不可更改的固定码而言, 这大大提升了无线门锁的码位空间。以下是分别代表了3段不同拨码位的信号频谱图, 可以看出这3段信号的后半部分完全相同。
0x01 爆破
在捕捉到无线门锁的信号后, 还可以通过URH进行可视化分析。如下图门锁遥控信号的固定码一览无余。
前面提到过此款无线门锁的拨码变化空间有限, 所以可以在分析完信号结构后生成所有可能的排列组合, 通过URH的Fuzzing 功能对门锁进行爆破攻击。
以下是URH爆破无线门锁指令演示视频 (https://www.youtube.com/watch?v=xuIouejbXss)
0x02 De Bruijn 序列
在举个例子我们用二进制数列来分别表示1,2,3,4:
现在假设密码是111111000000。我们首先尝试0111111000000 这12bits数列, 这显然不对, 但如果目标系统用shift register, 我们则无需在尝试另一组12bts数列, 因为shift register 每次仅向前移动1bit 变为111111000000, 密码正确。
0x03 总结
0x04 文献
在上篇侠盗猎车系列文章中, 我们介绍了滚动码的基础,以及通过爆破的手段打开门锁。在这篇文章中我们将了解更多滚动码的细节以及漏洞CVE-2021-46145的发现过程。
0x01 滚动码
抓包分析后我们可以得知VW系采用OOK 调制模式, 通过Manchester 编码对数据解码。
而每段有效的数据都会以 10101000 作为起始sync-word。
305-312字节则为相应的操作指令。如00011100 为开门, 00101010 为关门, 01000110则为开启后备箱指令。数据图中的标蓝部分为VW系钥匙的滚动码部分。
这里我们可以通过python脚本或URH 自带的比对功能, 对不同指令间的滚动码部分进行比对分析。
除了大众系以外还有Microchip出产的HCS系列芯片在RKE钥匙中广为流行。其使用的便是私有协议KEELOQ。
Keeloq 数据结构共有66bits包含了28bits的系列号, 32bits的滚动码, 以及4bits 的按键功能码和2bits状态码。所采用的编码格式为PWM。
通过RTL_433自带的解码插件成功解码出设备ID号以及滚动码。跟我们手动抓包分析后得出的结果相吻合。
众多钥匙体算法中还有很多其他类型, 比如Hitag也是常见的算法之一。想要熟悉每一套算法, 都需要我们进行大量的分析比对。
例如以下是一款2015年福特汽车的钥匙信号。每一串指令都有相同但又不同之处, 因为缺少官方文档, 所以这里我们只能大胆假设小心求证。可以看到从1-26字节都是值为0的引导码。
0x02 CVE-2021-46145
根据滚动码的设计原理, 通常我们是无法使用简单的回放攻击打开车门。但是如果我们把过期的开门指令按特定顺序重新排列并发送, 令人意外的是本田汽车的同步计数器竟回滚了, 也意味着之前过期的开门指令又复活了。
很神奇但也很有趣对吗, 那么除此之外是否还有其他方式, 可以破解滚动码的密钥呢? 敬请期待侠盗猎车-玩转滚动码(下)
0x03 文献
https://bbs.pediy.com/thread-269716.htm
https://bbs.pediy.com/thread-270069.htm
https://bbs.pediy.com/thread-270866.htm
https://www.cvedetails.com/cve/CVE-2021-46145
看雪ID:星舆实验室
https://bbs.pediy.com/user-home-937445.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!
原文始发于微信公众号(看雪学苑):侠盗猎车—玩转滚动码