数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 5790|回复: 82

[Arduino] RFID-RC522模块高阶玩法:虚拟成HID键盘实现密码管理,在电脑上刷卡玩[原创]

[复制链接]
发表于 2023-8-3 03:25:51 | 显示全部楼层 |阅读模式
一切的起点,是手欠在某宝买了 RC522 射频读卡模块:



模块主控是 NXP 的 RC522(标准版) 或者 CV520(简版),内含一堆握手+通信协议,可以读写已知秘钥的 13.56MHz 射频卡。

13.56M 射频卡基本是兼容 MIFARE-1KB 协议,常见小区门禁卡就属于这类。外形则是千奇百怪:



入手读卡模块,本打算练习卡片访问编程,没想到后来一步步折腾成了物理密码器/大阵,特来分享下。


【硬件链路】

由于有 Arduino 库的加持,玩转 RC522 模块并非难事,只要连接物理 SPI 接口就能通信:



然而稍加调查,就发现了模块的险恶之处:仅支持 3.3v 供电及逻辑,在 5v-Arduino 的环境下基本全是坑。
3.3v供电还好解决,最麻烦的是数据口电平适配:串电阻钳位啥的,影响速度还不优雅。

转脸发现手头还有 GAL16V8,这个 CMOS-TTL 兼容的玩意最适合搞这个:



GAL16V8 的 IN/OLMC 为 5V-TTL 电平,高电位 3.5-4.0v,低电位 <0.8v,刚好适配 3.3v-CMOS 逻辑。

万用板走起来:



装好以后这就优雅多了:



至此 Arduino 已完成了和 RC522 的优雅连接,不需要难看的钳位电路以及额外飞线。


【基础软件】

Arduino 的 MFRC522 库已经非常完善,随便开一个示例就可以在现有硬件上读取卡片信息:



信息样式大致如此:



以 MIFARE-1KB 为例,全卡总计 16 个扇区(Sector),每个扇区包含 64 字节。
其中有 48 字节可用作扇区数据(内容任意,可修改),另 16 字节为扇区秘钥,用于给扇区加密。

在不加密/未锁死卡片的情况下,每张卡片功能上相当于一块“无线优盘”,特别适合离线存一些东西。
这也就给后续折腾埋下了伏笔。


【虚拟HID】

Arduino 底层有着近乎完美的硬件抽象层(HAL),使得高层只要遵循同样接口(例如SPI),就可以完美复用软硬件。



如图所示,硬件链路板如果接常规 Arduino-UNO,那就是一个基本的串口读卡器;
如果接带 USB 支持的 Arduino-Leonardo,那可以把读卡器和鼠标/键盘/U盘等等一系列 USB 设备揉在一起;
如果接带 2.4G-RF 支持的 ESP8266/32,那就是一个支持无线联网/蓝牙访问/小程序接入的IOT读卡器。

简直就是杂交获得遗传特性的翻版。

为了方便刷卡,选择了 USB 版本 Arduino-Leonardo,直接虚拟成一个 HID 键盘,而键盘动作存储于射频卡内。

系统的硬件(黑色)、软件(蓝色)框图如下:



在 Leonardo 当中运行 HID-Lib 形成一个虚拟的键盘,同时运行 SPI/MFRC522-Lib 形成对读卡器的访问。
而 GAL16V8 固件则相对简单,运行一个 Fuse-Wire 连线映射即可,将各 SPI 引脚正确映射到硬件板上。

至此基本折腾出了一个密码器的大阵原型:
某卡片里存储有密码字串,刷卡后 Arduino 获得上述字串,并通过虚拟 HID 键盘动作,向 Win10 实现按键敲击。


【效果】

将若干场景的密码写入不同卡片,就实现了密码的保存/管理。刷卡即手输密码。

固化了“Hello MyDigit”字串的卡,只要有个文本界面(例如记事本),刷卡就自动键入这一串:




固化了锁屏密码的卡(含回车键),刷卡即解锁 Win10 锁定:




固化了某宝账号/登陆码的卡,刷两次(第一次填充账号,第二次填充登陆码)即剁手:




于是大阵得成,阵眼施以相应符篆即召唤出日常密码,高效,可靠,优雅。




最后附上相应固件供参考:

Arduino 端:
GAL16V8 端:

链接:https://pan.baidu.com/s/1hcY0jfzjq_o15n17LzQZhg?pwd=1bye
提取码:1bye

-----------------------------------------------------------------------------------

以上,给 RC522 模块搞了套 GAL16V8 硬件链路,配合 Arduino-Leonardo 实现了 USB-HID 密码召唤大阵。
使用固化了特定文字的 RFID 符篆,即可轻松开启阵眼,实现笔记本电脑上刷卡解锁,刷卡剁手,刷卡....

最后祝大家刷卡愉快!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 9家元 +270 收起 理由
kkdkj + 30 謝謝分享
兔包公 + 30 優秀文章
fu691 + 30 謝謝分享
e.woods + 30 優秀文章
aping365 + 30 優秀文章
慕名而来 + 30 優秀文章
jf201006 + 30 謝謝分享
dz20062008 + 30 優秀文章
ww5223017240 + 30 優秀文章

查看全部打赏

本帖被以下淘专辑推荐:

发表于 2024-1-20 12:23:05 | 显示全部楼层
niu, 高级玩家太牛逼了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-26 15:35:54 | 显示全部楼层
xhonbi1979 发表于 2023-9-7 21:10
你这万用板很像洞洞板

就是自己画的拿去打样。反正钻孔不算钱
回复 支持 反对

使用道具 举报

发表于 2023-9-7 21:10:57 来自手机浏览器 | 显示全部楼层
你这万用板很像洞洞板
回复 支持 反对

使用道具 举报

发表于 2023-9-1 17:05:07 | 显示全部楼层
谢你的经验分享。
回复 支持 反对

使用道具 举报

发表于 2023-8-31 22:40:20 来自手机浏览器 | 显示全部楼层
不错,值得收藏学习。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-31 09:33:42 | 显示全部楼层
1325133 发表于 2023-8-25 22:14
有贼心,没贼的本事,单片机别说从入门到放弃了,完全就是门都找不到直接放弃 ...

单片机玩不溜,Arduino 也可以凑凑数嘛
回复 支持 反对

使用道具 举报

发表于 2023-8-25 22:14:59 | 显示全部楼层
t3486784401 发表于 2023-8-16 22:56
这是相当能折腾啊。都入手点阵了,不考虑单片机编个驱动啥的?

有贼心,没贼的本事,单片机别说从入门到放弃了,完全就是门都找不到直接放弃
回复 支持 反对

使用道具 举报

发表于 2023-8-17 16:53:53 | 显示全部楼层
专业文章,只能仰望了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-17 12:10:51 | 显示全部楼层
gamenesea 发表于 2023-8-17 09:39
做成指甲盖那么大就可以表演魔法了

突然想到了 30岁 的魔法师....
回复 支持 反对

使用道具 举报

发表于 2023-8-17 09:39:09 来自手机浏览器 | 显示全部楼层
做成指甲盖那么大就可以表演魔法了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-16 22:56:34 | 显示全部楼层
1325133 发表于 2023-8-16 22:43
逛破烂场时从一个ATM上拆了一个读卡模块,理论上来讲应该是可以读写13.5的卡的,只是没技术玩不转,只能扔 ...

这是相当能折腾啊。都入手点阵了,不考虑单片机编个驱动啥的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-16 22:55:20 | 显示全部楼层
孤云feng 发表于 2023-8-15 19:03
这可不敢存重要密码

密码存储在 RFID 卡当中,需要保管好这些卡片;

至于读卡器、USB 的安全性,就和普通键盘一样。
回复 支持 反对

使用道具 举报

发表于 2023-8-16 22:43:34 | 显示全部楼层
逛破烂场时从一个ATM上拆了一个读卡模块,理论上来讲应该是可以读写13.5的卡的,只是没技术玩不转,只能扔那吃灰。
后来公司又退役了一台RFID的验卡器具(已开好的卡,在上面刷一下,会显示对应的姓名、检测数据之类的玩意,用来减小办卡窗口压力的),里面也有这个模块,拆了搭配CH340再配合串口助手,刷卡无反应,还是玩不转,看中了上面那个16*64的LED单色点阵屏,想着配个LED控制器当个时钟用,结果最便宜的LED控制卡上只有12的接口,而这屏用的是08的接口,白白花了一个控制卡的钱
回复 支持 反对

使用道具 举报

发表于 2023-8-15 19:03:49 | 显示全部楼层
这可不敢存重要密码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-14 23:06:54 | 显示全部楼层
STC32位8051 发表于 2023-8-14 10:33
对的目前还没有 Arduino ,期待您开源!可以用汇编或C语言开发,建议使用C语言 ...

大概能猜到 STC 的瓶颈在哪里。

Arduino 最大的优势在于 C++ 抽象,使得很多库可以以高层抽象类甚至模板类的形式出现。
然而 STC-51 的结构就决定了,这个 CPU 对于 C++ 类支持很别扭,一个指针就能搞死很多应用(例如 SFR 不支持间接寻址)。

在我看来,如果 STC 能在软件上搞定一个 C++ 编译器,那么会形成质的飞跃。
建议 STC 加大类似投入,当然这可不是个人(也包括我)能完成的开源玩意,需要团队来搞。
回复 支持 反对

使用道具 举报

发表于 2023-8-14 15:13:31 | 显示全部楼层
真会玩。一般人玩不了。
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2023-8-14 10:33:14 | 显示全部楼层
t3486784401 发表于 2023-8-12 23:29
还是那个呼声:STC 啥时候加入 Arduino 支持?

一条这个支持,可比贴上百个 DEMO 程序还有分量。 ...

对的目前还没有 Arduino ,期待您开源!可以用汇编或C语言开发,建议使用C语言
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-12 23:29:36 | 显示全部楼层
coverme 发表于 2023-8-12 18:09
玩出高度 天际线

感谢支持!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-12 23:29:25 | 显示全部楼层
STC32位8051 发表于 2023-8-12 08:40
STC8H8K64U, STC32G12K128的 USB 库函数永远用最新的,可从这下载

还是那个呼声:STC 啥时候加入 Arduino 支持?

一条这个支持,可比贴上百个 DEMO 程序还有分量。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-20 20:03 , Processed in 0.655201 second(s), 15 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表