首页 > 代码库 > 破解mifare Classic(M1)非接触式射频IC卡--Mifare crack Hack
破解mifare Classic(M1)非接触式射频IC卡--Mifare crack Hack
最近对NFC有点感兴趣,找资料时发现mifare Classic的卡已经被破解了(包括s50、s70),从网上下了Mifare crack Hack开始啃,一个LFSR(线性反馈位移寄存器)就把我弄晕了,文章中说三步认证中第一步卡产生32位随机数时由于卡中只有一个16位的LFSR所以通过这个32位随机数的前16位就能确定后16位。
Since nonces are 32 bits long and the LFSR has a 16 bit state, the ?rst half of nT determines the second half. This means that given a 32 bit value, we can tell if it is a proper tag nonce,
这个通过查LFSR的相关资料已经弄懂了,一个n位的LFSR,只要获得连续2n位的输出就能通过方程组解出这个LFSR的生成多项式( 文章中直接给出了这个多项式:x^16 +x^14 +x^13 +x^11 +1),即破解了这个LFSR,可以推算出以后的所有输出了,也就是说文章中的这句话是基于这个32位的随机数是一个连续的2n位输出,(这充分说明设计卡的家伙根本就是一个跟我一样不了解LFSR的家伙啊……根本是个硬伤嘛)
文章中给出了一个 0x4297c0a4 不过我怎么算也没能用一半算出另一半来……
光说不练假把式,昨天一咬牙一跺脚入手了一块PN532开发板,看了几天的PN532C106 Application Note、User Manual,感觉这个芯片还行。关键是只有这个芯片的开发板比较便宜……穷啊,ACR122u都买不起,更别说神奇Proxmark3了,玩硬件就是砸钱啊
说说这两天的收获。一开始看PN532支持卡模拟方式,把我乐的不行,又能当读卡器又能模拟卡,太实惠了,后来看手册才发现,单独的PN532只支持模拟标准的ISO 14443-4协议的卡,Mifare Classic(M1)是自己实现的私有协议,最高兼容到14443-3还是部分兼容。不过既然M1已经破解了,等板子到手后可以研究一下能不能自己写代码模拟一个M1卡,目前还是抱有一丝希望的。
破解M1卡,如果有一张可以改UID的 特种卡 那真是利器了,不过淘宝卖的太贵了100一张,是普通卡价格的100倍~!太坑爹了。于是我开始考虑可不可以把一张普通M1卡改造成特种卡。通过看资料得知M1的UID如同普通资料一样放在了0区,只是这个区的控制块权限改成了不能写(即使知道密码A、B也不能写),而且0区还存有制造商数据。单独为0区改电路是很麻烦的,由此推测,硬件上所有区应该都是相同的逻辑,只是在 M1卡芯片封装 前直接操作EEROM将UID和制造商、控制块权限数据写入使0区变为只读。 一知半解害死人,0块的只读应该不是控制块控制的,事情没那么简单,还是用PN532模拟靠点谱,最大的问题是timing(时序?) 看了网上一些帖子询问误操作控制块导致某个区锁死(变成跟0区一样只读)的解决办法,回答都是换新卡,也就是无解。所以,如果能找到一种绕过控制块权限的办法重写控制块便有可能将一张普通卡改造成特种卡,而且再也不用担心误操作锁死,可以随心所欲的写卡了。
不过,是否能找到这种方法呢?机会应该是十分渺茫的,这可真算得上Hardware Hacking了。溢出一个芯片?呵呵,听着都像神话,如何可以绕过控制块权限那连密码验证都绕过了,控制块应该是核心技术了难度可想而知,不过我们可以降低一下难度。非全加密的M1卡可以通过mfoc迅速解出所有扇区密码,应用的原理应该是Wirelessly Pickpocketing a Mifare Classic Card里的嵌套认证攻击,通过已知密码获得其他扇区密码的其中32位(密码一共6字节48位),穷举剩余16位,基本秒杀。略看了mfoc的源码,包含了很多m1白卡的默认密码 FFFFFFFFFFFF、A0B0C0D0E0F0等等,应该是利用这些扇区的密码充当一直扇区密码来破解的。全加密卡可以用mfcuk(注意不是mfuck,第一次看到这个程序时记成mfuck了,于是后来Google的时候怎么都找不到这个程序了,我还以为这么快就被和谐了呢)先破解出一个扇区的密码再用mfoc加速破解其他密码,原理也是猜的,应该是Wirelessly Pickpocketing a Mifare Classic Card里的Varying the reader nonce方法,这个方法应该是时间、空间效率最高的而且对设备要求不高。
于是我的目标成了在已知A、B密码的情况下绕过控制块权限改写控制块内容