浅谈IC卡数据分析
Posted 编程小鱼酱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈IC卡数据分析相关的知识,希望对你有一定的参考价值。
文章目录
1.简单介绍
-
Mifare S50
简称M1,高频最常见的卡,每张卡独一无无二UID 号,可存储修改数据(学生卡,饭卡,公交卡,门禁卡)----国内大部分卡都是此卡 -
Mifare UltraLight
简称M0,高频低成本卡,出厂固化UID,可存储修改数据(地铁卡,公交卡)—谁碰谁死 -
Mifare UID(Chinese magic card)
简称UID 卡,高频M1 卡的变异版本,可修改UID,国外叫做中国魔术卡,可以用来完整克隆M1 S50 的数据 ----某宝上有售,用来做空白卡,复制体!!
CUID、FUID、SUID ------各种神奇的空白卡
EM4XX
简称ID 卡,低频常用固化ID 卡,出厂固化ID,只能读不能写(低成本门禁卡,小区门禁卡,停车场门禁卡)
T5577
简称可修改ID 卡,低频可用来克隆ID 卡,出厂为空卡,内有扇区也可存数据,个别扇区可设置密码。----可以理解为ID空白卡 复制体
HID Prox II
简称HID,低频美国常用的低频卡,可擦写,不与其他卡通用 ----厚卡,常见于签到卡
CPU卡
这个好像没有统一标准,里面是个FPGA,然后用的软核,里面自定义加密程序,还有有的声称是双CPU双位加密,充值用接触式,使用用非接触式,这个具体咋实现的就不清楚了-------很多省会城市的公交卡 、地铁卡用的是这种 ,还是谁碰谁死
2. IC卡详解
IC卡包括了ID卡,M1卡、CPU卡;ID卡指的是低频率的卡,读取的频率是不一样的。M1卡通常指的是恩智浦的S50芯片卡; CPU卡比ID卡和M1卡容量多、具有自动运算功能、还有安全性强的卡。
- 1、ID卡
全称为身份识别卡(Identification Card),是一种不可写入的感应卡,含固定的编号.卡号在封卡前写入后不可再更改,绝对确保卡号的唯一性和安全性.ID卡在弱电系统中一般作为门禁或停车场系统的使用者身份识别,因ID卡无密钥安全认证机制,且不能写卡,现在行业内的基本共识是ID卡不适合做成一卡通,也不合适做消费系统。 - 2、 IC卡又称集成电路卡。
它是在大小和普通信用卡相同的塑料卡片上嵌置一个或多个集成电路构成的。集成电路芯片可以是存储器或向处理器。带有存储器的IC卡又称为记忆卡或存储卡,带有微处理器的IC卡又称为智能卡或智慧卡。记忆卡可以存储大量信息;智能卡则不仅具有记忆能力,而且还具有处理信息的功能。IC卡可以十分方便地存汽车费、电话费、地铁乘车费、食堂就餐费、公路付费以及购物旅游、贸易服务等。 - 3、 M1卡
是指菲利浦下属子公司恩智浦出品的芯片缩写,目前都有国产芯片与其兼容,属于非接触式IC卡。M1卡,优点是可读可写的多功能卡,缺点是:价格稍贵,感应距离短,适合非定额消费系统、停车场系统、门禁考勤系统等。 - 4、CPU卡
CPU卡芯片通俗地讲就是指芯片内含有一个微处理器,它的功能相当于一台微型计算机。人们经常使用的集成电路卡(IC卡)上的金属片就是CPU卡芯片。CPU卡可适用于金融、保险、交警、政府行业等多个领域,具有用户空间大、读取速度快、支持一卡多用等特点,并已经通过中国人民银行和国家商秘委的认证。CPU卡从外型上来说和普通IC卡,射频卡并无差异,但是性能上有巨大提升,安全性和普通IC卡比,提高很多,通常CPU卡内含有随机数发生器,硬件DES,3DES加密算法等,配合操作系统即片上OS,也称COS,可以达到金融级别的安全等级。
3.M1卡详解
M1卡分为16个扇区,每个扇区4块(块0~3),共64块。第0扇区的块0(即绝对地址0块)用于存放厂商代码,已经固化,不可更改。
其他各扇区的块0、块1、块2为 数据块 ,用于存贮数据;块3为 控制块 ,存放密码A、存取控制、密码B,其结构如下:
4.常用读写设备介绍
此处不配图了
-
最流行的读卡器:ACR122
使用最多的读卡器,很流行,大抵是因为网络上流传了非常强大的GUI改卡读卡复制卡软件吧!某宝价格一百多,只能读取IC卡,不能读ID卡。
易用性:★★★★ -
旗舰级读卡器:Proxmark3
国外的开源硬件,由FPGA驱动。性能十分强大,集嗅探、读取、克隆于一体,IC卡和ID卡通杀,可以插电脑可以接电源,当然其价格也是十分的感人。
易用性:★★★ -
最便宜的读卡器:PN532
PN532由NXP出品,是一款高度集成的载波的13.56MHz传输模块,基于80C51内核有40KROM、1KRAM。某宝价格为几十元,非常便宜。只能用来读取IC卡,不能读取ID卡和CPU卡。
易用性:★★ -
全加密侦测神器:变色龙
变色龙是一款辅助解密设备,与常规的复制机不同的是,常规的复制机是在卡片上解密,变色龙是在刷卡机上侦测密码,变色龙本身没有写卡的能力,只能将侦测到的密码给122或者pm3等有解密功能的复制机使用。其优点如下:
1.变色龙侦测卡可破解Proxmark破解不开的国产全加密卡
2.可同时侦测多扇区密码!
3.可破解ACR122,Proxmark3,Icopy3等设备长时间破解不开的卡 -
ID、IC复制系列:iCopy3、100CD、29CD、16CD、06CD等
此类设备支持ID卡和IC卡读卡和写卡,但并不能对数据进行编辑。
5.滚码技术
随着时间的推移,科技也在不断的进步,众多公司在时间的与现实的推动下不断的提高与完善自家技术,从最开始的明码系统到暗码系统,再从暗码系统演变到滚码系统,每一次技术的更新与升级都提升了卡片安全性。
但俗话说:“魔高一尺,道高一丈”,技术的升级与破解一直是一个永恒的话题,技术的升级淘汰掉了更多的低端卡匠,但无疑同时增加的破解的难度。下面给大家简单分享一些滚动码的一些技术。
1. 滚动码技术是如何出现的?
最开始各大公司的卡片内数据都是以明码存放,例如楼层,户号,车位号,手机号,电梯到期时间等,由于卡内的到期时间是明码,用户直接可以修改,后来厂家发现这种漏洞以后,将卡内的这些信息加密处理,但在大神的面前,加密方法也被破解了,再此以后厂家发明了滚动码技术,判断是否为滚动码梯控其实很简单,某些大厂家的梯控都有自己的特征,直接就能看出来,如KD,HY,YH等,不知名的小厂梯控系统通过对比同一张卡两次刷卡的记录,也可以判断出来。
2. 常见的滚动方式
常见的滚动方式有校验从小数到大数,每次刷卡加一,或者从大数到小数每次减少,这种滚动方式常在次数卡上使用,还有公式滚动法,读取卡内的数据与校验,经过读头单片机计算以后,写入新的数据与校验,不同厂家的公式算法不一样。有些厂家的滚动还会以刷卡时间和公式进行滚动,但大同小异。
3. 滚动码的破解方法
滚动码技术的出现破解方法目前有如下几种
-
- 完整的破解了电梯的整套发卡梯控,找到算法,这种可以完美的对电梯卡进行延期等操作,只针对早期算法比较简单的滚动码,仅有软件计算,没有单片机计算的系统,目前新系统的算法不仅仅是软件计算还有发卡器内的单片机计算。
-
- 漏洞改法,通过更改控制位或者修改卡内某些地方的数据来压制卡内数据的滚动,这是利用了早期某些厂家的读头不会校验计算后的数据是否写入成功的漏洞。
-
- 初始码数据还原法,这种方法也属于漏洞改法的一种,利用了有些梯控厂家控制检测系统当识别到从未滚动过的卡(就是物业刚办的新卡)数据不会校验上次的逻辑漏洞,让卡内数据每次都是初始数据来对电梯读头进行欺骗,这时候的梯控读头已经修复检验写卡是否成功的漏洞,所以我们要让梯控读头完成一次完整的交互过程,完成以后我们在将卡内数据改回去即可,已经有厂家做出了这种还原卡,通过ariduino+pn532做离线写卡器实现。我们团队称这种卡为“处女卡”。
-
- 发卡器发卡,对于一些贼牛逼的厂家的算法无法破解,同时又采用由软件计算和发卡器内单片机双重计算的方式,针对这样的情况,我们使用同厂家同型号同版本的发卡器,通过修改发卡器发卡规则使得规则与物业的发卡规则相同来发卡,但是破解发卡规则是一个很大的工程,同时梯控厂家也不会向个人单独销售配套发卡器,所以这种方法只掌握在少数人的手中。
以上就是目前滚动码技术的基本简述
- 发卡器发卡,对于一些贼牛逼的厂家的算法无法破解,同时又采用由软件计算和发卡器内单片机双重计算的方式,针对这样的情况,我们使用同厂家同型号同版本的发卡器,通过修改发卡器发卡规则使得规则与物业的发卡规则相同来发卡,但是破解发卡规则是一个很大的工程,同时梯控厂家也不会向个人单独销售配套发卡器,所以这种方法只掌握在少数人的手中。
4.操作步骤
我买的PM5设备,这里我只说IC卡
1.把卡放到设备上
2.点击读取
3.读取成功导出dump文件(是一个二进制文件,网上有夏天和锤子软件可以读取)
我写了python脚本可以去读二进制和写二进制,可以结合我们的 BCompare.exe,进行比较
import struct
import os
#读取dump文件
def readBin(filepath):
binfile = open(filepath, 'rb') #打开二进制文件
size = os.path.getsize(filepath) #获得文件大小
line =0
strBin = []
for i in range(size):
data = binfile.read(16) #每次输出一个字节
line = line+1
if data == b'':
return strBin
strBin.append(data)
print(line,data)
binfile.close()
def writeBin(path,strBin):
with open(path, 'wb')as fp:
for x in strBin:
fp.write(x)
#写二进制
if __name__ == '__main__':
readfilepath="./42.dump"
writefilepath="./hexBin.dump"
strList = readBin(readfilepath)
writeBin(writefilepath,strList)
4.我们开始分析数据
5.IC卡日期格式
目前网上关于IC的数据分分析软件,主要集中是夏天和锤子软件。
软件卖的挺贵的,各种算法也是不公开的。
加了他们作者QQ要一下算法,居然要卖我十万!!!!。
愤怒之下,我尝试自己去解析了几种常见日期算法,供大家来学习,剩余几种我还没破译出来
序号 | 名称 | 十六进制 | 十进制 | 备注 |
---|---|---|---|---|
1.康拓系统时间 | 四位日期 4位1 | C79F | 2099.12.31 | 转2进制,1100 011 ,1100, 11111->99,12,31 |
2.立林日期 | 4位2 | E3FC | 2099.12.31 | 未破解 |
3 | 卡拉德日期 6位3 | 03A9E7 | 2099.12.31 | ???? |
4 | 明码日期6位 | 991231 | 2099.12.31 | 年.日.月 |
5 | 明码日期倒6位 | 311299 | 2099.12.31 | 日.月.年 |
6.富士通 | 暗码倒六位 | 1F0C63 | 2099.12.31 | 1F-0C-63转10进制31-12-99 |
7 | 暗码6位1 | 630C1F | 2099.12.31 | 63-0C-1F转10进制99-12-31 |
8 | 暗码6位2 | 833C1F | 2099.12.31 | 833-C-1F转10进制2099-12-31 |
9 | 暗码6位3 | 833CF8 | 2099.12.31 | 833-C-F8/8 |
10 | 明码正8位 | 20991231 | 2099.12.31 | 2099-12-31 |
11 | 明码倒8位 | 31129920 | 2099.12.31 | 31-12-9920 |
12 | 暗码8位1 | 14630C1F | 2099.12.31 | 14-63-0C-1F转10进制20-99-12-31 |
13 | 暗码8位2 | 08330C1F | 2099.12.31 | 0833-0C-1F转十进制2099-12-31 |
14 | 暗码倒8位1 | 1F0C6314 | 2099.12.31 | 1F-0C-63-14转10进制31-12-99-20 |
15 | 暗码倒8位2 | 1F0C3308 | 2099.12.31 | 1F-0C-3308->倒序1F-0C-0833转十进制31-12-2099 |
16 | 暗码倒8位3 | 33080C1F | 2099.12.31 | 3308-0C-1F->倒序0833-0C-1F转十进制2099-12-31 |
6.常见校验码
异或
异或取反
字节和
CRC-4/ITU
CRC-5/EPC
CRC-5/ITU
CRC-5/USB
CRC-6/ITU
…
自行百度吧~
7.楼层号表示
一般是用二进制,举例
FF 代表1~8层
F 代表1~4层
如果从负3层开始呢
F 代表-3~1层
FF 代表 -3~5层
数据有可能被反码/逆序 等
以上是关于浅谈IC卡数据分析的主要内容,如果未能解决你的问题,请参考以下文章