在日常生活中,最常见的接触式磁卡就是西门子的SLE4442 4428卡
因为其价格低廉,操作简单,具有加密能力等优点,所以类似:电梯卡、驾校卡、电卡、水卡等等,很多使用的都是这种磁卡
本篇文章所指的接触式磁卡就是这两种磁卡
以下将通过接触式磁卡的特点来详细说明下磁卡密码的嗅探方法
卡片特点
数据存储
4442卡的存储区可保存256字节数据,密码区为3字节,默认密码为FF FF FF,错误计数为3次,数据地址为00-FF。
4428卡的存储区可保存1024字节数据,密码区为2字节,默认密码为FF FF,错误计数为8次,数据地址为00 00 - 03 FF。
错误计数即是卡片可以验证密码错误的次数,每错一次计数减1,直到错误计数为0卡片报废。但是在错误计数归零之前,如果你验证正确一次,那么计数就会被重置。
4442卡的错误计数和密码,一般存在另外的保护区中,平常读写时看不到。
4428卡的错误计数和密码,一般存在数据区的03 FD-03 FF中,通常为FF XX XX,平时读写时能够直接看到。
4442卡和4428卡的密码和错误计数,在未经过卡机验证的情况下,默认为00。在这个时候读取的话,什么都读不到。但是在卡机验证过密码,且密码验证正确的情况下,就会一直显示,直到卡片断电,而这个时候,我们就能直接通过读卡器读取卡片的密码。
芯片触点


八脚的4428以及六脚的4442卡的触点信息如上所示,其实两种卡片的触点基本一致,只不过4428多了c4、c8两个空接的脚
注意:只有了解清楚卡片触点位置和含义才能更方便地进行下面的嗅探,所以不要忽视这两张图
芯片通讯
市面上的接触式磁卡的通讯都是依靠电信号来传输的芯片上面的I/O和CLK两个触点,一个负责数据输入输出
一个负责时钟信号CLK一次起伏对应1bit的数据,对应的I/O如果是低位即为0,高位即为18bit合在一起看就组成了1Bytes的16进制数据,用来支持卡片和卡机之间的通讯就类似于
↓
此图片来自二狗的个人博客

嗅探方法
经过上面对于卡片特性的了解,我们可以通过磁卡的两种特性来获取卡片的密码
带电校验
在数据存储中,我们说到卡片的密码在未验证正确的时候,在卡片内是不显示的,此时无论用任何读卡器都无法获取密码
但是在验证正确之后就会一直保存在卡片里面,直到卡片断电才会消失因此我们可以使用外接电源来给卡片供电,让卡片在卡机里验证正确之后保持通电的状态,转移到读卡器里面,然后直接读取卡片的密码原理图如下↓
此图片来自二狗的个人博客

二狗设计了一张正反可插,尾部开孔可以连接杜邦线的模拟卡
就是图片上带金手指的电路板卡片和卡托的供电是使用的充电宝供电
在二狗的帮助下,我复刻出了和图中一样的一整套嗅探设备
但是上面的图片只是一个大致的设计思路,在实际操作中可以再进行一些完善
于是我在这个基础上面做了一定的修改
↓
将金手指板重新制作,后端换为8pin直排的端子台
给卡座重新设计了一套电路板,并且前端也使用了8pin直排的端子台,方便连接
电源换成了3V电子配合pw5100的5V升压芯片供电,给卡片提供了稳定的工作电压和电流
整体的pcb图、卡片开发手册以及升压芯片使用手册已经打包放在https://www.aliyundrive.com/s/Hpb8SautNYL 提取码:33wq
此方法整体所需的材料为:
MUP-C801卡托x1
8pin直排端子台x2
8pin直排端子线x1
3.3uh贴片电感x1
4.7nf贴片电容x1
22nf贴片电容x1
10uf贴片电容x1
3.3V2032电子和电子座x1
升压电路卡托底板x1
模拟卡x1
pw5100芯片
在上面的pcb图中,我当时为了省事没有标注清楚每个零件的位置
如果你看到pcb板之后不太清楚,请查看pw5100的开发手册
一共只有零零碎碎的几个零件,自己标记一下就行
ps:另留了两个空位在下方,可以自行加10Ω以下贴片电阻或者贴片灯珠,但要剩余的供电能够支撑起卡片的工作电压,或者考虑其他的3.3v升压电路芯片
注意:
本方法只是在提供嗅探的原理,以及一种可行方案,如果你有更好的办法,可以自行更换
此方法制作所需材料较多,但是制作完成后获取密码很简单,省去看电信号的时间
在焊接时,使用300-330℃热风枪以及焊锡膏,会使焊接更方便
截取电信号
在芯片通讯中,我们说到卡片和卡机之间的通讯是通过电信号来进行传输,那么就有了另一种方法来获取卡片的密码
通过逻辑分析仪来截取电信号,然后通过截取到的电信号来分析出卡片的密码原理图如下↓
此图片来自二狗的个人博客

这里推荐nanodla的逻辑分析仪,因为他的配套软件操作起来没有那么复杂,而且分别有typec口和usb口两个版本
类似如下↓

在连接逻辑分析仪时,我们需要连接卡托的3、5、7三个脚
3为卡片的CLK时钟信号,接在逻辑分析仪的CH0上面
5为卡片的GND电源地端,接在逻辑分析仪的GND上面
7为卡片的I/O信息输入输出,接在逻辑分析仪的CH1上面
在采样的时候,采样率选择为2MHZ,采样大小越大越好
在得到的结果中,我们寻找如下图结果,将得到的每8个bit从后往前重新排序,按照4个一组化为16进制数据

注意:寻找命令字的过程很漫长,你要从上千个bit里面寻找到自己需要的信息,是一件很不容易的事
但是还好,一般卡片信息的认证字会出现在较靠后的位置,因此你可以直接将每一次获得的电信号从后往前看,会节省很多时间
上面是4442卡的电信号,在整体的电信号中会出现三次,分别为0x33 0x01,0x33 0x02,0x33 0x03
如果是4428卡的电信号,则会出现两次,认证字和地址字也会改变
4428卡的认证字从11001100变为了10110011,也就是16进制0x33变为了0xcd↑(也可能是11001101,我已经忘记了,可以自行测试)
地址字变为0111 1111和1111 1111,也就是16进制0xFE,0xFF
另:截取电信号的方法虽然麻烦,但是在某些情况下比带电校验会好用一些
例如当你手里的磁卡,错误计数已经归零或者只有数据没有密码的时候
你就可以直接用锁死的老卡,或者将老数据写入使用默认密码的新卡
然后将这张卡放在卡托里用逻辑分析仪连接好,进行截取电信号,最后也能够得到卡片的密码
操作流程和上面一样
此方法整体所需材料为:
卡托底板x1
模拟卡x1
逻辑分析仪x1
测试夹x3
如果对4428和4442卡的认证字和地址字有任何疑问,可以自行寻找开发手册,或者查看分享链接中的开发手册
整体的pcb图、卡片开发手册以及升压芯片使用手册已经打包放在https://www.aliyundrive.com/s/Hpb8SautNYL 提取码:33wq
另:在上面的链接中,我放了一个使用delphi编写的dbmis6的电卡管理软件
如果你有兴趣,并且精通汇编语言的话可以研究一下
这里是分割线----------------------------------------------------------------------------------------------------------------------------感谢二狗对本篇文章提供的技术支持www.smileat.me ←进入二狗的世界,感受二狗的人生
另附上二狗的TG链接,有想了解的可以加入:TG Group invite link base64:aHR0cHM6Ly90Lm1lL2pvaW5jaGF0L2IwNGNmaEJuVFdBMU5HWTk=
(无法打开请自行魔法上网,没有魔法请自行联系霍格沃兹)