DIY捕获Mifare加密密钥并自行复制IronLogic门电话密钥

当然,几乎不可能获取加密密钥并为内部通信复制Mifare密钥卡,但是组装这样的设备很有可能。 我不会在这里谈论Mifare是什么,而只讨论技术细节,我只想说说这种技术现在已被使用,例如在对讲机中,并且为了复制对讲机钥匙串,您需要知道关闭它的密码密钥。
注意! 本文仅用于教育目的。 我们提醒您,任何渗入信息系统的行为都可能受到法律的起诉。
许多对Mifare技术感兴趣的人可能拥有最简单的Mifare卡/密钥卡读卡器/写入器,其中包括PN532模块和USB-UART适配器:



通过简单且廉价的改进,可以将该设备捕获为
读取器身份验证数据,借助该数据可以计算出加密密钥,因此对于读取和复制来说是必需的。 也有用于此目的的市售设备-SMKey,Proxmark3,Chameleon等。 这些是具有许多功能的设备,方便但不便宜。

我提醒您注意,基于PN532模块和USB-UART适配器的类似“小绅士套装”,您可以选择更多的预算选项,该选项使您可以从Mifare阅读器(例如对讲机)捕获数据,并计算阅读器用来引用标签的加密密钥。

所开发的设备基本上具有廉价的,基于STM32F103C8T6处理器的“流行”调试板,也称为“ BluePill”,其中连接了PN532模块和USB-UART适配器。 本机通过USB-OTG电缆连接到Android上的智能手机。 所有这些都是通过跳线在没有焊接的情况下以模拟版本组装的,并且具有类似的内容,尽管这是无法代表的,但却可以正常工作:



组装图非常简单,并以文本形式表示:

PN532 _____STM32F103C8T6

SCK _____________________ PA5(SPI1_SCK)
MISO ____________________ PA6(SPI1_MISO)
MOSI ____________________ PA7(SPI1_MOSI)
SS ______________________ PB0(GPIO_OUTPUT)
SIGIN ___________________ PB11(TIM2_CH4)
SIGOUT __________________ PA12(TIM1_ETR)
SIGOUT __________________ PA0(TIM2_ETR)
VCC _____________________ + 5V
GND_____________________GND


USB-UART ________________ STM32F103C8T6

接收______________________ PA9(USART1_TX)
TX ______________________ PA10(USART1_RX)
+ 5V _____________________ + 5V
GND_____________________GND

重要! PN532接口开关必须设置为SPI模式! 您可以通过现有的USB-UART适配器使用FlashLoaderDemonstrator实用程序来刷新STM32。

这是从门电话阅读器模拟器(Arduino + PN532)捕获加密密钥的演示:


由于与该设备开发者一起工作的IronLogic(IL)阅读器正试图读取具有根据该标签的UID计算的加密密钥的标签,因此必须首先设置此UID。 您可以通过两种方式执行此操作-手动或从标记中读取。 之后,我们进行捕获并等待加密密钥的计算。

“经典记录”程序的下一个选项卡使用早期版本的IL读取器将副本复制到便宜的Mifare Classic空白中的功能。 此方法基于以下事实:授权后的IL读取器不是将标签的原始UID发送给对讲机,而是将记录在第一个块中的信息(通常与原始UID匹配)发送给对讲机。 为此,我们需要捕获并计算将用作空白的标签的密钥,用其关闭零扇区,并在该标签的第一块中写入用作原型的标签UID的四个字节。 为此,我们甚至不需要获取原始的加密货币密钥并删除其转储,就足以找出其UID,但这只有在原始数据是“原始”而不是副本的情况下才是正确的,那么您仍然必须阅读第一个块并且已经写入副本。 为了使它更清楚,请考虑以下示例-假设我们要复制UID为0xEBD52AC5的原始密钥,该密钥也写在原始密钥的第一块中,并在具有UID的常规Mifare Classic标签上,例如0x12345678。 为此,在一个由Shaitan-Mashina同志恰当地调用的设备的帮助下,我们找到了该UID和所需的特定对象(入口,住所...)的加密货币。 令加密密钥为0xABCDEF098765,然后按如下所示编辑副本转储的零扇区:



在第一个块中,我们写入原始0xEBD52AC5的UID,在第三个块中,为该工件找到的加密密钥的六个字节为0xABCDEF098765。 我们将转储写入空白,并获得对讲机密钥的副本。 像这样的SMKey可以将IronLogic的副本复制到常规的Mifare Classic中,而这正是该录制程序所做的。 在“代码”字段中,我们手动输入或从原始密钥读取4个字节的UID,该密钥将记录在副本的第一个块中。 我们启动,然后按照程序的提示进行操作。 首先,我们读取工件的UID,然后将设备带到对讲机并捕获身份验证数据。 计算完成后,程序将提供空白记录数据。 如果找到多个密码密钥,则在记录第一个选项后,将有机会验证收到的副本。 如果副本不合适,则应尝试使用下一个计算出的密钥,或擦除(还原)空白以备将来使用。 副本也可能不起作用,因为在副本的第一个块中编写的代码定义不正确-例如,如果您尝试编写的不是原始密钥卡的真实UID,而是使用上述方法制作的副本,那么在这种情况下,您不应使用UID标签和来自第一个块的数据,可在“复制扇区”部分中获得。

此方法也不适用于最新版本的IL阅读器软件。 在这种情况下,可以通过将整个第0个扇区(4个块)复制到一个工件上来进行复制,该工件允许您使用“复制扇区”应用程序部分记录第0个扇区。 在这里,我们还首先找到原始的加密货币密钥,读取其零扇区,然后写入空白。 由于手头缺少OTP和OTP-2.0空白,尽管较新版本的阅读器要求使用OTP-2.0,但到目前为止,仅在零空白上测试了此功能。

好吧,对于初学者来说-“ UID记录”应用程序部分允许您更改UID,恢复损坏的第0个块并将ZERO工件加密密钥重置为默认值。

所以-简要总结一下。 要制造这样的设备,我们购买或寻找PN532模块,任何USB-UART适配器FTDI,PL2303,CH340或CP2102,调试板STM32F103C8T6,一个半跳线,一个USB-OTG适配器以及带有OTG的Android智能手机(平板电脑)。 我们根据上图组装设备本身,将Flash * .bin与STM32文件一起安装,并从档案中安装* .apk应用程序
在智能手机上。 为了正确操作,默认情况下或通过手动选择,必须在连接USB-UART适配器时启动智能手机上的应用程序,否则该应用程序将无法访问该适配器。

我想对PN532模块说几句话-并非所有这些模块都“同等有用”! 在我购买的三个模块中(例如上面的照片),一个模块不读写标签,尤其是ZERO和OTP-2.0,但是它在对讲机阅读器的被动模式下正常工作,另一个模块的工作恰好相反,而另外三个模块则相反。标签和对讲机的处理能力较差(尽管比前两种差)。 也许我不走运,这批模块的质量并不是最好的,但是其他人对此表示抱怨。 但是-对某人来说很幸运。 我在说什么 PN532模块以稍有不同的布局出售,但价格较贵,但是据评论,它们没有以下问题:



如果有人碰到PN532,但不能很好地读写标签,我可以建议按照以下方案,在设备上增加一个RC522模块,这很值得,但可以完美地执行其功能:

RC522____________________STM32F103C8T6

RST ______________________ PB12(GPIO_OUTPUT)
SCK ______________________ PB13(SPI2_SCK)
MISO _____________________ PB14(SPI2_MISO)
MOSI _____________________ PB15(SPI2_MOSI)
SDA ______________________ PA8(GPIO_OUTPUT)
VCC ______________________ + 5V
GND______________________GND
在这种情况下,PN532仅在捕获来自读取器的数据时才能工作,并且处理标签的全部负担将落在RC522的肩上。

总之,我想说的是,该设备在实际条件下的性能仅在第一代IronLogic阅读器上进行了测试,没有ZERO,OTP,OTP-2.0滤波器。 其他版本根本无法访问,因此对于更现代的IL读取器,将需要软件开发,并且当然需要这些读取器。

封存

Source: https://habr.com/ru/post/zh-CN479370/


All Articles