由于上学期间较忙,这篇文章拖了很久才开始写
破解环境
硬件:PN532+PL2303(就下面这个小玩意儿)
软件:MifareOneTool(Windows),Mifare classic tool(android)
驱动配置
在安装好PL2303的驱动后,把扫描速度改成115200
字典解密
然后连接PN532硬件,将卡放在PN532上。
这里吐槽一下,PN532硬件放在金属物品会被磁干扰。
再打开MifareOneTool进行破解,开始跑密钥。我跑了蛮久才跑出来的,耐心点。
值差异化
用MCT读取dump文件并保存密钥
然后去用一次水卡,让金额产生差异
用MCT再读一遍水卡,读取的时候选择之前保存的密钥文件
算法分析
发现只有前后发生变化,
经过分析,前四位为金额位,后两位为校验位,用于校验金额。
学校的算法是先把金额转成十六进制,然后进行前后位颠倒,校验位代数相减,差值为93
例如金额100.00元,将10000转为十六进制,结果是2710,再进行颠倒,数值变为1027,刷了一次水卡后剩余99.95元,转换后为0B27。接下来是校验位,经过多次刷卡后分析对比,代数相减,发现校验位的算法是这样的:将余额转为十六进制,例如100.00元十六进制2710,然后拆位转十进制相加,27转十进制为39,10转十进制为16,最后加上多次代数计算的结果93,最终结果为148,再将148转换为十六进制94,这就是校验位了。
结果
最后刷卡,美滋滋(刷一次会扣除0.045元,所以显示99.955)