数码之家

 找回密码
 立即注册
搜索
查看: 4006|回复: 82

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

[复制链接]
发表于 2023-8-3 03:25:51 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

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

x
一切的起点,是手欠在某宝买了 RC522 射频读卡模块:

img1a.JPG

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

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

img1b.png

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


【硬件链路】

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

img2a.png

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

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

img2b.png

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

万用板走起来:

img3a.png

装好以后这就优雅多了:

img3b.JPG

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


【基础软件】

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

img4.png

信息样式大致如此:

img5.png

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

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


【虚拟HID】

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

img6.png

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

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

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

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

img7.png

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

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


【效果】

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

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

eff1.gif


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

eff2.gif


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

eff3.gif


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

img8.png


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

Arduino 端: PiccKeybrd-v2.0.zip (42.36 KB, 下载次数: 1)
GAL16V8 端: 16V8_WireFW.zip (9.19 KB, 下载次数: 1)

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

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

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

最后祝大家刷卡愉快!


打赏

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

查看全部打赏

本帖被以下淘专辑推荐:

发表于 2023-8-3 04:16:23 | 显示全部楼层
玩玩可以,好像没啥实际意义
回复 支持 1 反对 0

使用道具 举报

发表于 2023-8-3 07:36:23 来自手机浏览器 | 显示全部楼层
楼主发的帖子质量真高
回复 支持 反对

使用道具 举报

发表于 2023-8-3 08:20:29 来自手机浏览器 | 显示全部楼层
相当于“门禁”了。那么问题来了
为什么不在不同扇区放不同的密码,一张卡可存好多密码;
如果不加密的话,我是不是使用RC522可以看到楼主的密码了
回复 支持 反对

使用道具 举报

发表于 2023-8-3 08:29:44 | 显示全部楼层
研究的很好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-3 08:34:11 来自手机浏览器 | 显示全部楼层
ww5223017240 发表于 2023-8-3 04:16
玩玩可以,好像没啥实际意义

所以说专用于 刷卡玩
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-3 08:34:31 来自手机浏览器 | 显示全部楼层
wfzdm 发表于 2023-8-3 07:36
楼主发的帖子质量真高

感谢支持!
回复 支持 反对

使用道具 举报

发表于 2023-8-3 08:37:26 | 显示全部楼层
jf201006 发表于 2023-8-3 08:20
相当于“门禁”了。那么问题来了
为什么不在不同扇区放不同的密码,一张卡可存好多密码;
如果不加密的话, ...

在不同扇区放不同的密码,读取时怎么知道使用哪个密码?

打赏

参与人数 1家元 +6 收起 理由
jf201006 + 6 歡迎探討 历遍所有

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2023-8-3 08:38:03 | 显示全部楼层
这个技术含金量太高了,。

  一时间难以消化哟。。
  感谢楼主分享。。
回复 支持 反对

使用道具 举报

发表于 2023-8-3 08:38:13 | 显示全部楼层
这个高级,要是设备在小巧一些就更好了
回复 支持 反对

使用道具 举报

发表于 2023-8-3 08:39:23 | 显示全部楼层
那个刷2次的是不是可以一次解决
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-3 08:40:18 来自手机浏览器 | 显示全部楼层
jf201006 发表于 2023-8-3 08:20
相当于“门禁”了。那么问题来了
为什么不在不同扇区放不同的密码,一张卡可存好多密码;
如果不加密的话, ...

存太多密码,半天刷不出想要的。所以只存相关的,例如账号和密码,填写时快速连刷就有了。

这个当然是明文咯,只比写在本子上多一层卡片外壳。

打赏

参与人数 1家元 +6 收起 理由
jf201006 + 6 認真回帖

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2023-8-3 10:11:29 | 显示全部楼层
万物都可DIY    ‘表’有点多。。。
回复 支持 反对

使用道具 举报

发表于 2023-8-3 10:50:26 | 显示全部楼层
公交卡能复制到小卡里面吗,现在学生卡都是发行的大卡,携带不方便
回复 支持 反对

使用道具 举报

发表于 2023-8-3 11:24:07 | 显示全部楼层
手里有一个这种模块,因为摸不着头绪就一直没能上手,感谢楼主的分享。
回复 支持 反对

使用道具 举报

发表于 2023-8-3 11:29:02 | 显示全部楼层
手头有块RC522 射频读卡模块,但用商家提供的例程玩不了,不知道在哪里出问题。
回复 支持 反对

使用道具 举报

发表于 2023-8-3 11:47:21 | 显示全部楼层
贴是好帖,无奈不懂
回复 支持 反对

使用道具 举报

发表于 2023-8-3 13:06:03 来自手机浏览器 | 显示全部楼层
Windows好像有自带的支持“智能卡”的功能吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-3 13:14:12 | 显示全部楼层
lishibai 发表于 2023-8-3 08:38
这个高级,要是设备在小巧一些就更好了

主要占空间的是 RC522 天线以及底层的 Leonardo.

实际上类似于个 USB 读卡器,能嵌到键盘里就好了:有精力手敲,没精力刷卡
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-3 13:15:14 | 显示全部楼层
szb314 发表于 2023-8-3 08:39
那个刷2次的是不是可以一次解决

理论上可以,不过输太快了容易被某宝拦截。

切换用 Tab,确认用 Enter
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-6-2 16:35 , Processed in 0.546001 second(s), 17 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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