三天时间, 无线破解从入门到放弃

最近接了个奇怪的活儿, 有点儿偏门, 故事是这样的, 一个好哥们想破解一个无线的收发器, 我正好手上有个千年金刚钻:

三天时间, 无线破解从入门到放弃_第1张图片
一直在吃灰, 心想正好找机会玩玩.
于是让他们把东西发过来, 我瞅瞅先.
好家伙, 一上手让我心凉半截:
正面:


背面:

三天时间, 无线破解从入门到放弃_第2张图片
100%防破解的意思就是让人知难而退是么…
现在有两个方向, 一个打开包装, 看看里面什么情况, 一个是在外面抓包看看

三天时间, 无线破解从入门到放弃_第3张图片
首当其冲就是用我的hackrf one进行我臆想中的抓包, hacking…
结果我在433M, 315M搜索半天, 连个毛都抓不到, 搜索网络:
以下两个网站可能需要梯子.
https://github.com/merbanan/rtl_433
https://www.youtube.com/watch?v=Ms5r9o8P6N4&t=236s

三天时间, 无线破解从入门到放弃_第4张图片
这哥们一看就是个狠人…

发现个东西叫做电视棒, 配合rtl 433这个应用, 加上解码协议, 可以直接解码, 真可谓一步到位, 赶紧淘宝下单加美团跑腿, 在华强北买了个电视棒, 结果收到的时候, 是这样的…

三天时间, 无线破解从入门到放弃_第5张图片
我特么天线呢??? 后来一问卖家, 他说美团收货的时候打开检查了一下, 天线掉出来了, 他不知道, 后来在地上发现了…我操, 我还跑腿呢…白瞎了么不是…

不管了, 从外面先放一边, 先从里面, 两手都要抓, 两手都要硬…得到permission之后, 我拆开了这个简单的热塑封包装 ,里面其实就是一个mcu(下图红色圆圈), 一边点正面的断码屏, 一边驱动无线模块(黄色方框)

三天时间, 无线破解从入门到放弃_第6张图片
关键是这个黄色框的无线模块, 居然连丝印都不磨掉, 上面写300A
结合QFN16封装, 一通google, 发现是华普的CMT2300A这个收发器, 这个收发器居然支持的频率是213~960MHz的, 怪不得我在433附近找不到任何可能的信号呢.
通过查看datasheet, 我找到了无线收发的SPI的4个脚, 如上图, 拉好线, 插入我罗芬(逻辑分析仪), 我滴天…
这货没消停过啊…每20ms就有一次通讯.

三天时间, 无线破解从入门到放弃_第7张图片
接下来就结合华普的datasheet跟FIFO发射说明的文档(这些东西都是华普直接公开在官方网站上的)看看到底单片机跟2300A发了哪些指令, 做了哪些事.

先说明一下, 大约5年前, 在方案公司干的时候, 曾经接触过一个433防丢器的案子, 用的就是cmt的一个芯片, 具体是啥忘了, 但是一个是板载天线绕了一圈我印象很深, 才知道原来433的确可以板载, 一个就是它这个芯片可以脱离MCU使用, 只需要用他们的上位机软件写好寄存器即可, 还能对GPIO响应进行简单编程, 所以做一个防丢器, 甚至遥控车锁, 钥匙啥的, 是没问题的.
这个2300A是另一种情况, 由上位机通过SPI往芯片的寄存器直接写值, 具体的方法我研究了一整天, 总的来说有几点:

  1. 单片机会设置芯片的收发频率, 因为这个芯片支持的频率范围很宽, 单片机需要告诉2300A到底用什么频率通讯.
  2. 在中文的文档里面没有写得太清楚频率计算方法, 因为我如果要从外部破解, 肯定要知道通信频率才行, 但是有个英文的文档, 有详细的计算方法, 还挺不人性的… 但是结合example, SPI的抓包, 得出了发射频率大约是902M
  3. CMT2300a还有个调频的设置, 可以用MCU控制每次发送都使用不同的频率, 中间的间隔也是有个公式的, 由两个寄存器控制, 这里就不细说了, 总之每次发射都会在原来发射频率的基础上加上400K, 但是我发现了下面的一个问题.
  4. 虽然每次发送, 都会跳频, 但是我发现, 他每发送一次数据, 都会在所有频率都发送一遍, 这与我跟淘宝一个卖模块的卖家说的解决方法不太一样, 因为你在调频的情况下, 希望接收端每次都能接收到你从不同频率发过来的消息, 最好就是每次通讯都告诉对方你们下一次 通讯所使用的频率, 这样对方就会在那个频率等着你, 但是如果第一次就没法建立连接, 后面就没办法了, 所以我看到的这个全频道扫描的现象, 可能是因为我目前拆开的这个是个单一设备, 而不是配成一组且另一个也开机的设备, 我看到的过程可能是双方在握手之前的通讯, 握手之后, 就不用全频道发送了, 因为根据我的观察每次发送完数据, 接收方都会把数据进行一次回传, 相当于一个ACK的过程, 也可能在告诉发送方, 我已经知道你的下一次的发射频率了.
  5. 继续分析SPI上的罗芬的结果, 发现这还不是个简简单单的SPI, 还有点儿差异, 就是写寄存器的时候CS或者我以为是CS的引脚会拉低, 而在把数据写入发送FIFO buffer的时候, CS脚其实是拉高的, 所以他的datasheet把CS脚叫做CSB.
  6. 到这一步, 我还需要啥无线电波破解啊, 当然, 如果可以, 当作一种验证也不是不行. 我已经清楚看到他要发送的16byte了, 这个16byte的固定长度, 也是通过写寄存器的0x46 0x0F这个动作确定的,

三天时间, 无线破解从入门到放弃_第8张图片
CMT的FIFO文档说得很清楚:

三天时间, 无线破解从入门到放弃_第9张图片在这里插入图片描述
如果Node ID不存在, 而数据包为定长, 则数据长度为payload的值+1, payload的值是0x0F, 15+1 = 16

  1. 到这一步, 我已经知道MCU到底发送了啥给发射端了. 看下图, CSB拉高, 中间是数据, 下面是时钟, 数一数正好16个byte

三天时间, 无线破解从入门到放弃_第10张图片8. 但是兄弟们, 看到是16个字节的时候, 我的心就彻底凉了啊…用16个byte传输本来1个byte甚至4个bit就能传输完的数据, 这就没憋好屁啊…

接下来我怀着沉痛的心情, 把数据都收集起来, 用放到java里面对字符串进行了比对, 应证的以下几点:

  • 每次数据传输, 即便应该是同样的内容, 密文(我姑且就叫他密文吧)是不同的, 说明他可能把有效数据掺杂在随机种子数据中进行的加密.
  • 16个byte的加密方式可能是AES128bit, 即便知道密文跟明文的对应关系, 样本量也要非常大才能暴力破解出密钥, 更何况它可能已经加入了随机种子.
  • 这类加密做起来可能很简单, 就是在MCU刷入一个随机滚码作为密钥, 然后把成对或者成组的设备刷成同一个滚码, 就可以实现对称加解密了. 但是破解起来基本上是不可能的, 用人类能懂的语言就是, 用全国的1亿年的电力构成的算力才可以破解AES128.
    具体破解的不可能性参考下面的文章:
    https://www.sdnlab.com/21145.html

最后学到的东西, 跟未解之谜:

  • 学到了一点cmt2300a的用法, 寄存器写法, 跳频设置方法之类.
  • 学到了空中数据加解密的方法
  • 不知道是否存在握手过程, 以及握手之后, 跳频本身是否也是一种反监听的手段.

你可能感兴趣的:(mcu,射频工程,安全)