ic卡的加密和破解

话说IC卡的加密和破解这块的实战指南,其实没那么玄乎。咱们拿01场来说事儿,只要你手头有块德卡D3非接触式的IC卡读写器,还有个USB免驱的设备,再加上 VS2010 往上的开发环境,就都能按自己的需求把卡片给搞定。 首先得把M1卡的结构搞清楚。这张卡里一共有16个扇区,编号从0排到15。每个扇区里头又分4块,每块占16个字节,咱们读写的时候得拿块当最小单位。虽说想读取数据得先过密码这一关,得看你校验哪个扇区的密码才行。 绝对地址这块总共64个,算下来也就是0到63。具体咋算呢?就是扇区号乘以4。像0扇区的块0写的是厂商代码,这部分是固化的不能改。剩下的块0、块1、块2都是存数据的地方,最后一个块3是控制块,主要存密码A、存取控制和密码B。 操作起来其实也就五步闭环。先是调用 InitIC 进行初始化,然后寻卡 ReadIc。拿到物理卡号后,用卡号加上“ZMATRIX”再加上扇区号这串字符串,先做个MD5加密,取前面12位字符。接着把这12位字符串转成BCD码。最后把加密后的BCD码按M1卡控制块的格式填进块3里,这就算加载密钥完成了。写完了还得把串口关了 ExitIC。 举个核心函数的例子:比如寻卡这一步。定义个ReadIc函数,给个设备号icdev进去。函数里先初始化个变量st和icCardNo,还有个char数组str当缓冲区。再调用dc_card方法把物理卡号读出来存进icCardNo变量。如果读取成功返回DC_OK,那就直接返回卡号的字符串形式icCardNo.ToString(),要是失败了就返回空串。 后续的生成密钥、写入密钥这些步骤都差不多。都是按这个流程来实现的。