*原创作者:ZMOM,本文属FrBuf原创奖励计划,未经许可禁止转载
无线遥控器(无线电遥控器)在我们生活中非常常见,应用于各种场景,方便着用户的使用。不过大多数还是用于安防方面的,比如:遥控报警器、电动卷帘门、电动伸缩门、遥控电开关、无线遥控门铃……
1、无线遥控器简介无线遥控器从安全角度看大致分为两类,一类是最普遍的固定码遥控器,特点是廉价、应用广泛、市场大、用户多;另一类是滚动码遥控器,特点是价格较贵、相对比较安全、用于汽车安全防盗等安全要求较高的地方。
固定码遥控器有很多种编码方式,国内常见的是3态8位的编码或者厂商出厂时烧录的随机码。
滚动码这里不做讲解,我都还得到这类遥控器,滚动码相对来说比较安全,但也并非绝对安全,你的汽车用到就是滚动码遥控器,然而盗贼在N年前就能买到干扰破解你汽车防盗的设备了。
无线遥控器从信号调制方式可以大致分成OOK和FSK两种方式,当然这只是常见的,还有其他的信号调制方式。
2、三态八位遥控器3态8位遥控器是我们常见的遥控器,它属于固定码遥控器。在电瓶车防盗器、电动卷帘门、电动伸缩门、遥控电开关、无线遥控门铃这些应用中都能见到这种遥控器,因为这种遥控器很廉价。
2.1什么是三态八位遥控器?3态8位遥控器顾名思义,它有3种码位状态8个码位。二进制是由0和1组成的,所以2位(bit)长的二进制有4种可能性,3态8位遥控器使用的是这其中的3种这是3态。
8位是指有8个编码位,每个编码位可使用3态中的任意一种,所以是2*8=16总共16位(bit)长的二进制,但是常见的无线遥控器是的数据长度是24位(bit),因为后8位(bit)是定义按键值的(如果你对信号解码出来的是25位(bit)长,你可以除去末尾的0;如果是25位(bit)长,末尾的是1这可能是你解码错了)。
常见的4键遥控器的的每个键值都是出厂就固定了的,分别是00000000
2.2厂商烧录的固定码如果你的固定码遥控器解码后的二进制中有一对10码(注意是一对,前一对的后1跟后一对的前0组成的10是不算的)这说明你的遥控器不属于3态8位遥控器,是厂商出厂时烧录的固定码,这种遥控器的后8位(bit)按键值也不一定是标准的4种可能性。
这类固定码遥控器的接收端一般都是学习行的,会有一个学习键。
作用是配对新的遥控器,如果当前遥控器坏了,你可以买个同类型的遥控器,长按学习键再按遥控器,就可以学习到新遥控器的编码的信息,这样你就能继续使用了。
2.3辨别是否是三态八位辨别是否是3态8位遥控器最靠谱的方法就是拆开来看PCB板子,有3排8列焊盘的肯定是,否则就不是,使用3态8位拨码开关的也是。
2.4三态八位遥控器编码国内常见的编码方法都是直接焊接PCB上的焊盘,极少使用拨码开关,节省成本?当然你也能买到3态8位的拨码遥控器。
从上图中可以看出总共有3排8列焊盘,这也就是3态(上中下)8位的定义方式。中间的一排连接的是芯片的引脚,当芯片的一个引脚与High焊接上后产生的编码是11与Low焊接上后产生的编码是00不焊接的默认编码是01。
编码是成对的,遥控器上是这个编码,接收器上也得是这个编码否则是没法使用的。
3、分析安全缺陷从上文中我们知道了遥控器的二进制编码长度是24位(bit),前16位(bit)是由3态8位编码方式定义的,后8位(bit)是厂商固定死的的按键值。
一个遥控器上的每个按键的前16位(bit)都是一样的,后8位(bit)是不一样的,就4种可能性。假设如果每个按键都是没有规律的随机码,那么你想通过暴力穷举出正确的编码,你需要尝试2^24=总共种可能性。
假设后8位(bit)是固定的4种可能性,前16位(bit)是随机的,那你只需要尝试前16位(bit)的所有可能性在拼接上后8位(bit)的固定值,你需要尝试2^16=^8=每个按键总共种可能性。
由于3态8位里是没有10码的,所有你需要尝试的次数是3^8=每个按键总共种可能性。
知道了暴力穷举攻击需要尝试的次数后我们再来算一下需要的时间,我对一个普通的遥控器做信号发送的采集,10秒钟时间内我在接收端收到一百零几次遥控信号,也就是说一分钟至少可以发送(尝试)个可能性。
尝试24位(bit)长度的所有组合所需的时间是/=分钟左右,大概20天不到。
尝试16位(bit)长度一个按键的所有组合所需的时间是/=分钟左右,大概一个多小时。尝试3态8位一个按键的所有组合所需的时间是/=11大概11分钟左右!!
那么SamyKamkar在8秒内打开车库门的OpnSsam项目是怎么做到的?首先SamyKamkar的那个车库门的遥控器并非是3态8位的,编码长度好像只有12位(bit),2^12=总共种组合。
最关键是遥控设备的接收端使用的是移位寄存器,所以使用DBruijn序列即可在非常短的时间内完成所有可能性的尝试。
但我们常见的3态8位遥控设备的接收端用得并非是移位寄存器,所以没法使用DBruijn序列实现暴力穷举攻击。
检测接收端是否使用了移位寄存器的一个方法是在正确的编码前加个0。如果使用了移位寄存器,那么会跳过错误的一个位(bit)检查下一个正确的,并给予响应。如果没使用移位寄存器,那么什么反应都没有,因为你发送的这个编码是错误的。
4、制作Hacking硬件从上面理论分析中我们知道了这种遥控设备所存在的其中一个缺陷,要尝试利用这个缺陷实现对设备的攻击方法不止一种。
你可以抱着你的笔记本和SDR设备去攻击它,或者我们尝试制作自己的便捷式硬件来利用这个缺陷实现对设备的攻击。
这个我们使用Arduino和RF模块实现攻击功能。
使用Arduino是因为廉价、易上手,当然你有能力的话也可以使用其他单片机去实现,或者自己设计电路,使用更好的CC芯片去实现RF功能。
4.1硬件列表ArduinoProMicro
MHz或MHz无线模块
轻触按钮
10K电阻
面包板
面包板跳线
4.2硬件连接方式4.3功能代码/*BrutForcAttack4^8RmotControl