起因
由于宿舍楼下使用了刷脸测温的门禁系统,导致现在进入宿舍楼不需要使用之前的NFC卡片了。但是寝室门还是需要使用刷卡的。为了少带一张门禁卡出门,也为了减少丢卡、找卡地烦恼,所以决定对宿舍门禁添加指纹识别。
解决思路
本来想着使用步进电机直接模拟人手控制门把手,不过碍于步进电机难以在门上固定,电机力矩不够大,并且机械结构难以固定的问题,决定放弃使用电机直接控制门把手。
这里通过逆向门锁内部的协议,在不增加外部动力的情况下完成门锁的打开与关闭。
动手做
在拆开门锁之后,对门锁进行简单的分析:。
前期准备使用MCU模拟RFID输出信号,但是用示波器采集波形之后发现太复杂,由于太复杂也很难找到其中的变化,很难用MCU模拟,并且尝试多张卡片之后发现,每张RFID的输出信号都是不一样的最后被逼无奈之后更换方案。
选择使用读取EEPROM的数据进行数据分析。
通过查阅datesheet发现它是一颗64Kbit(8Kbyte)的EEPROM,使用IIC通信协议。
分析
不同卡片都可以开门,但是RFID输出信号不同,那么肯定经过板载的NXP MCU进行处理了数据,板载的NXP MCU又每次与EEPROM进行交互,那么有可能密钥就隐藏在这颗EEPROM中.如果我们修改EEPROM中的数据或者模拟与MCU进行交互就可以实现我伪造的卡片也可以开门了。
想起之前购买的简易逻辑分析仪.对MCU和EEPROM进行嗅探得到下面的数据
通过分析数据之后发现MCU与EEPROM 地址为0x50的地方交互特别频繁,并且经过大量的测试之后发现成功刷卡之后读取到的都是一个定值。
如果按照这样,只需要模拟返回固定值即可,但是在使用MCU模拟之后发现无法实现开机.在捣鼓了很久之后放弃了这个方案。
来到最后一个直接驱动电机的方案,也是最没有技术含量部分.不过还是有很多的坑在里面。
首先第一点,连接门锁有六根线,起初的想法是使用示波器采集六根线的电平变化从而了解每根线的功能。
观察电平的变化之后,排查出几根特殊的线。
发现A B和GG俩组线是连在一起的,并且K为3.3V,P为电源电压,G为Ground。信号线T在后面的测试中发现是检测门锁状态的线。
也就是说只要控制AB俩根信号线就可以完成模拟电机驱动了。
接下来使用示波器对AB采集波形。
在我使用MCU模拟这个信号之后发现门锁依然无法打开,在后面的排查中发现,在控制板上AB是并没有连接,短路的地方是在门锁内。按照这个思路,AB俩跟线应该是电机驱动信号的相位差.负责控制开门和关门的。
在接下来的实验中我对AB分开采集信号得到一组完美的脉冲波形。
两个信号之间相差了10s左右,并且发送了两组脉冲信号,因为这款门锁在10s后会自动上锁。
之后反推电路板上的驱动芯片,找到了驱动信号的协议。
接下里只需要使用MCU模拟驱动信号即可完成门锁的打开和关闭了。
离我们的指纹开锁只有一步之遥了。首先你得购买一个指纹模块,我这里使用的是FPC1020。在经过仔细阅读协议之后发现,每当识别到正确的指纹之后会返回一个特征值,只要在MCU上检测特定值即可判断输入的指纹是否正确 从而调用开锁函数。
目前已经使用Arduino设计了程序,完成了实际的测试。可以成功的与模块进行通信。并且可以实现正确指纹开锁,错误指纹无法开锁。这个设计的好处在于不改变传统刷卡开门的方案之后增加一种开锁的方式,实现了没带卡片也可以成功进屋。
本次逆向虽然没有从EEPROM成功,但是换了一种方案。
目前只是实现了DEMO,不过在接下来的时间里面会制作PCB,外壳等 并且增加一些功能,在接下来的文章里面会介绍本次项目中出现的一些问题。
本文始发于微信公众号(疯猫网络):自己动手DIY:给刷卡门锁添加指纹解锁
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论