5 Q" w( W- N7 X q/ R区尾的访问条件 }2 O3 E4 r& y; c
根据区尾(段 3)访问位的不同,访问条件可分为 “从不”、“密钥A”、“密钥B” 或“密钥A|B”(密钥A或密钥B),区尾的访问条件如下:: Y- }( s+ P. y% f/ ~; `
T% d; P$ Q! l5 _; E2 a, Z" _
* z8 q" D. h0 ~" _5 X6 O& `
- T( o6 L, y7 ~3 {5 G用灰色标明的行是密钥B可被读的访问条件,此时密钥B可以存放数据。$ K1 ?3 g8 G" v" P# e
例如:当段3的访问条件C13C23C33=100时,表示:密钥 不可读(隐藏),验证密钥B正确后,可写(或更改);访问控制位在验证密钥A或密钥B正确后,可读不可写(写保护);密钥B不可读,在验证密钥 B 正确后可写; . z8 ~% y5 m( D, _6 o又如:当段3的访问条件C13C23C33=110或者111时,除访问控制位需要在验证密钥A或密钥B正确后可读外,其他如访问控制位的改写,密钥 A,密钥 B 的读写权限均被锁死而无法访问;& J# t, o0 b* K) |( ?# m
: U' w- Q* z5 {3 f9 v# Z数据段的访问条件% Y, S. U; U: {0 }( l! A
根据数据段(段 0-2 访问位的不同,访问条件可分为 “从不”、“密钥A ”、“密钥B ” 或“密钥A|B”(密钥A或密钥B)。9 }, ^* Q* T; z
相关访问位的设置定义了该段的应用(或者说数据段类型)以及所支持的应用命令,不同的数据段类型可以进行不同的访问操作。 读/写段可以进行读操作和写操作。值段可以进行加、减、传送和恢复的值操作。 ! O+ p6 @5 i4 r/ j/ k4 F v其中一种情况中(001)只能对不可再充电的卡进行读操作和减操作,另一种情况中(110)使用密钥B可以再充电。 厂商段无论设置任何的访问位都只是只读的, 数据段的访问条件如下:, v1 [6 u5 k3 [1 T+ P1 O3 B5 e
+ q5 }5 J X$ @, s4 u$ f0 G / t( u, {0 d/ c9 D1 @' l9 w u, W6 w1 F* y9 b# O4 l
如果密钥B可以在相应的区尾被读出,它就不能用于确认(在前面所有表中的灰色行)。如果读卡器要用这些(带灰色标记的)访问条件的密钥B确认任何段,卡会在确认后拒绝任何存储器访问操作。7 V* q- ^9 Z& V* U/ _% Z* P) H$ v
! y" e4 b2 }5 J6 t3 K1 i
1.6.3 举例说明 1 r8 O8 ^5 Z. B# D, g) m9 u: R4 G5 {( N# }( [
Mifare S50出厂时,访问控制字节(字节6-字节9)被初始化为“FF 07 80 69”,KEY A和KEY B的默认值为“FF FF FF FF FF FF” ;! B: O. x6 \/ Y* ?3 S3 p; K9 M
字节6为FF,二进制为1111111;字节7为07,二进制为00000111;字节8为80,二进制为10000000,如下:$ ?) w2 `* t/ p. j6 D
3 z) d6 l1 I5 X9 ^% O
# }0 |# B# r# Z- u4 t+ }* e. E: }
/ V+ O$ a9 f: o3 \: E
对照前面的访问位在区尾的存储形式图,可得知访问控制位为: . \7 p" J% S: X" WC10C20C30=000;C11C21C31=000;C12C22C32=000;C13C23C33=001。6 ~( M1 `4 x3 h3 c. _2 h
2 C: Y( w- ]6 sC10C20C30、C11C21C31、C12C22C32对应数据段0、1、2,参考数据段的访问条件图即可得知该段三个数据区的访问权限;$ p+ V: `2 q9 O' R( {6 d/ v
C13C23C33对应区尾(段 3),参考区尾的访问条件图即可得知该段的访问权限; d5 y% N# P7 y$ g9 U" y! R ; B" Z2 R8 N( P7 v1 q块0控制位为:0 0 0 权限为:通过A或者B密码认证后可读,可写,可进行加值和减值操作;3 m4 Q& u: U, a6 t
块1控制位为:0 0 0 权限为:通过A或者B密码认证后可读,可写,可进行加值和减值操作;* P. G `5 z3 [ t
块2控制位为:0 0 0 权限为:通过A或者B密码认证后可读,可写,可进行加值和减值操作; ) X4 O( @/ j- a" t; ~块3控制位为:0 0 1 权限为:A密码不可读,验证A或者B密码后可改写A密码;验证A或者B密码后,可读可改写存取控制;验证A密码或者B密码后,可读可改写B密码;% k0 Z, l/ @8 j1 n
2 e! m1 r6 L& m9 Z- ~% k, B% F这样每次换算还是有点麻烦,可以使用M1 S50卡控制字节生成工具快速换算: # ]: h# ?# w; o2 y( h w3 J( y% o7 c# \
 : `! @% A0 a& y; m$ [2 u7 d! |9 J" k" B8 }: @# Q" e& i
最下面一行可以输入想解释的控制字,也可以根据上面的设置生成控制字; & C/ c0 M* R. [3 `最上面一行,左边是数据段0、1、2的访问控制位,右边是对应权限所需要的秘钥; ( Z' i, E9 R8 Y. ~中间的一行,左边是区尾的访问控制位,右边是对应权限所需要的秘钥; . o- e2 \2 c( F2 F# K' H. r; j* c+ f- I- x- T" t
1.7 非加密IC卡和加密IC卡$ ^% t- Q4 C) T
& O/ x! Z! S4 G; a( b6 A! k
非加密IC卡和加密IC卡的区别就是,非加密IC卡中所有扇区的KEYA和KEYB数值都是默认值FFFFFFFFFFFF;' ]6 j+ _" `8 o$ b5 M" a
而加密IC卡中,其中有扇区的KEYA和KEYB不等于FFFFFFFFFFFF,部分扇区加密的卡称半加密IC卡,所有扇区都加密的卡称全加密IC卡。/ v1 [) {' r. ^
9 q/ i/ R8 k6 \, t8 |$ F/ W一般的读卡器,像手机的NFC,是读不到IC卡的加密数据的,需要用专门的工具,比如Proxmark3读取。 , B0 X3 h+ W1 N* R- q/ ]; m4 |4 w! @8 w l/ Q1 k- q
对于IC卡,除了对卡上数据加密,还有滚动码加密、服务器数据验证等技术。# v% J' d. ^* f( v. m
因此,对IC卡的解密,更多的是门禁卡、签到卡、车库卡等的讨论,像公交卡、饭卡等涉及到资金问题的,基本都有服务器定期校验,得先搞定服务器再说,难度高还违法。 0 l1 O5 |. W) w2 {$ J- |/ t 7 z3 o8 p7 d% o/ Z参考资料: 0 \+ O5 F: v. j; L码农生活 篇二:IC卡门卡模拟探秘 1 s( l, J6 ^ u5 }, NIC卡简介【M1/S50,UID,CUID,FUID,UFUID复制卡介绍】6 e# [9 t1 |! L L8 ^* |$ N& P
谈谈 Mifare Classic 破解' Z# _. C5 N) T6 |3 Q- t) l
rfid-practice1 i( F( g% E5 _* Q. A5 D, F
Type A 卡存储结构与通信 / [! P" M( C* m# Z; c/ lProxmark3 Easy破解门禁卡学习过程 8 x- }3 E8 Z9 a1 {' ]- E& X+ h2 r+ l6 `! [" e. u
2. 手机NFC模拟加密门禁卡3 e/ {& v# w: n% V Y
2 ^; ~$ B' \% d) b
有了前面的知识,再来看现在我的加密门禁卡情况,手机能识别为加密卡,肯定是IC卡。8 v1 j7 n* R: \' ~/ R5 E' S7 K
& y6 u8 i. U: l+ Z$ |' y& w首先,加密卡在目前这个情况下是无法解密的,如果按照下面的操作失败,请参考下一章。 + b9 @+ i1 r% f C( S8 X8 ~部分门禁系统只认证IC卡的UID,利用这一情况,可以试试复制门禁卡的UID,看运气能否打开门。9 o( C) C8 k$ O, ^ l. `+ Z
# o7 Q# V) s s; P7 F在已root的情况下,直接使用APP NFC卡模拟 便可读取加密卡的UID和非加密数据、并写UID到手机NFC里。' N7 F0 w5 B& b
在未root的情况下,使用小米系统自带的门卡模拟功能,出于安全考虑,是不能对加密卡进行任何操作。手机的NFC,理论上可以读加密IC卡的UID,因此可以使用第三方软件MifareClassicTool读取UID,因为没有root,不能写手机NFC,但可以写IC卡,因此还需要一张CUID卡(不能使用UID卡),某宝上一块多一张,思路就是先读取加密卡的UID,再读取CUID卡的数据,然后将CUID卡的UID改为加密卡一样的UID,再将修改后的数据写回到CUID卡,最后用小米系统自带的门卡模拟功能,复制未加密的CUID卡即可。 , p9 a/ g- p3 g& P0 |7 ~: f+ o7 h. |' m# T* [ z
1.读取加密卡的UID' a! B- L! T+ }4 W- y( {# h
打开软件Mifare Classic Tool,将加密门禁卡放到手机的NFC感应区域,识别到IC卡后,点击“工具”->“显示标签信息”,可以看到加密门禁卡的8个数字,4字节的UID。 + F. Y( Q. y% s; r, N: \4 V8 e" f注意,在16进制里,每个数字为4位(2^4=16),8位(bits)为一字节(bytes),即两个数字组成一字节,这里8个数字,即为4字节(Bytes)。7 x$ O$ w) [( _8 p) n P! {
前8个数字,每个数字代表4位,8位为一字节,8个数字就是32位,即4字节 & E6 p5 g4 s: H接着打开“工具”->“BCC计算器”,输入UID,得到1位BBC(两个数字)校验数据。 : m, @, R+ W G( g+ [ 1 |; k* \4 m3 L: |: e& o; Q5 W, p: N4 @6 [3 t! H
' B4 N) s+ j' n. H3 a& n+ J& Y2.读取CUID卡数据 7 Q w F9 E3 H+ L将CUID卡放到手机的NFC感应区域,识别到IC卡后,点击“读标签”->“启动映射并读取标签”,即可得到CUID白卡的所有信息。) e. b) S3 a7 h
接着修改第一行的前10个数字,改为加密门禁卡的UID(8个数字)和BCC(2个数字),一共10个数字,并点右上角保存图标保存。8 f$ R* J% |0 K+ J- a L
# W0 q0 b$ I! r3 u* V & j. J' r' [6 Q* m# t. B$ d/ e& ?( e 6 S, |/ {" J' X# j! H1 E* _$ R: j3.写数据到CUID卡 W E. u* w+ i1 U5 ?
再将CUID卡放到手机的NFC感应区域,识别到IC卡后,点击“写标签”,勾选“写转储(克隆)”->“显示选项”->“高级:使能厂商块写入”。 4 N8 [: a# n* G3 G$ T9 p再点击“选择转储”,选择刚才保存的数据,点击“选择转储”。 9 E* \, t6 j! i7 A. ^4 ~+ {' Z3 Z* {: T3 i9 H! ?1 E- `
 : a8 K( U: W; l& ]2 e! S9 E% L& w K( X6 \# Y O% ]5 v
在弹出的选择写扇区界面,默认即可,点击“好的”,最后点击“启动映射并写转储数据”。 ! A8 [! c5 f' ^) E' L " y w- Z( G D7 \' ?, A* ~5 v5 \ Y9 b3 S
! Q& `/ h/ d- H/ Q1 E& I
4.NFC手机复制CUID卡) ]! n; @' }: P* D% h
最后,使用小米手机系统自带的门卡模拟功能,复制刚才写入新UID的CUID卡即可。 # a; u7 `; w& j! I9 {: |, p- }* h X1 H
接着,就看运气吧,我小区的门禁系统就只认UID,搞定。+ ?% B9 Z/ w! Q& F