本文作者:Hoki87

免責聲明:本文涉及的技術僅供安全學習和教學用途,禁止非法使用!!!


前言

現在生活中少不了各種卡,公交卡、地鐵卡、銀行卡、門禁卡等,它們都是什麼卡?ID卡?IC卡?另外帶NFC功能的手機也能刷卡使用,筆者通過本文科普一下關於卡的知識,另外文中還有門卡模擬等一系列乾貨,值友們要看到最後哦!!!

ID和IC

ID卡:全稱爲身份識別卡(Identification Card),是一種不可寫入的感應卡,含固定的編號,主要有臺灣SYRIS的EM格式、美國HIDMOTOROLA等各類ID卡,

IC卡:全稱集成電路卡(Integrated Circuit Card),又稱智能卡(Smart Card)。可讀寫,容量大,有加密功能,數據記錄可靠,使用更方便,如一卡通系統,消費系統等,目前主要有PHILIPS的Mifare系列卡

主要區別:ID卡不可寫入數據,其記錄內容(卡號)只可由芯片生產廠一次性寫入,開發商只可讀出卡號加以利用,無法根據系統的實際需要制訂新的號碼管理制度;而IC卡不僅可由授權用戶讀出大量數據,而且亦可由授權用戶寫入大量數據(如新的卡號,用戶的權限,用戶資料等),IC卡所記錄內容可反覆擦寫

IC卡由於其固有的信息安全、便於攜帶、比較完善的標準化等優點,在身份認證、銀行、電信、公共交通、車場管理等領域正得到越來越多的應用,例如二代身份證,銀行的電子錢包,電信的手機SIM卡,公共交通的公交卡、地鐵卡,用於收取停車費的停車卡、小區門禁卡等

接觸式和非接觸式IC卡

IC卡按結構分有:接觸式IC卡和非接觸式IC卡

接觸式IC卡,該類卡是通過IC卡讀寫設備的觸點與IC卡的觸點接觸後進行數據的讀寫

碼農生活 :IC卡門卡模擬探祕

接觸式IC卡和讀卡機

非接觸式IC卡,該類卡與卡設備無電路接觸,而是通過非接觸式的讀寫技術進行讀寫(例如RFID、NFC),其內嵌芯片除了CPU、邏輯單元、存儲單元外,增加了射頻收發電路。該類卡一般用在使用頻繁、信息量相對較少、可靠性要求較高的場合

碼農生活 :IC卡門卡模擬探祕

IC 白卡

碼農生活 :IC卡門卡模擬探祕

IC鑰匙扣

碼農生活 :IC卡門卡模擬探祕

IC滴膠卡

碼農生活 :IC卡門卡模擬探祕

IC手機貼

NFC是現在主流的非接觸式IC卡的讀卡技術,其全稱是近場通信(near field communication),是基於無線射頻識別RFID(Radio Frequency Identification)技術發展起來的一種近距離無線通信技術,與RFID一樣,NFC也是通過頻譜中無線頻率部分的電磁感應耦合方式傳遞,但兩者之間還是存在很大的區別。NFC的傳輸範圍比RFID小,RFID的傳輸範圍可以達到0~1m,但由於NFC採取了獨特的信號衰減技術,相對於RFID來說NFC具有成本低、帶寬高、能耗低等特點。

NFC技術主要特徵如下:

  • 用於近距離(10cm以內)安全通信的無線通信技術
  • 射頻頻率:13.56MHz
  • 射頻兼容:ISO 14443,ISO 15693,Felica標準
  • 數據傳輸速度:106kbit/s,212 kbit/s,424kbit/s

現在手機都包含NFC功能,其主板上嵌入了NFC模塊,具有三種功能模式:NFC手機作爲識讀設備(讀寫器)、NFC手機作爲被讀設備(卡模擬)、NFC手機之間的點對點通信應用

IC卡基礎知識

IC卡中最常見的是NXP Mifare系列卡,根據卡內使用芯片的不同,分爲

  • Mifare S50,簡稱M1卡,是最常見的卡,出廠固化UID,可存儲修改數據
  • Mifare UltraLight,簡稱M0卡,低成本卡,出廠固化UID,可存儲修改數據
  • Mifare UID Chinese magic card,簡稱UID卡,M1卡的變異版本,可修改UID,國外叫做中國魔術卡,可以用來完整克隆M1 S50卡的數據;但是現在新的讀卡系統通過檢測卡片對特殊指令的迴應,可以檢測出UID卡,因此可以來拒絕UID卡的訪問,來達到屏蔽複製卡的功能
  • 針對UID卡被屏蔽的問題,另外還有變異版本FUID卡和CUID卡,FUID卡的UID只能修改一次,起防屏蔽作用,專門對付物業升級的防復卡和防復讀頭;CUID卡則是針對FUID卡做的優化,支持UID號重複擦寫,無需鎖卡自動起防屏蔽作用

以標準M1卡爲例,其容量爲1K字節,總共分爲16個扇區,每個扇區分爲4個數據塊,每個數據塊16個字節

每個扇區中的塊按照0 ~ 3編號,第3個塊中包含KEYA(密鑰A)、控制位、KEYB(密鑰B),每個扇區可以通過它包含的密鑰A或者密鑰B單獨加密

0扇區0塊是特殊的數據塊,用於存放製造商代碼,包括芯片序列號UID,ATQA和SAK

非加密卡和加密卡的區別就是,非加密卡中所有扇區的KEYA和KEYB數值都是默認值FFFFFFFFFFFF;而加密卡中,其中有扇區的KEYA和KEYB不等於FFFFFFFFFFFF,部分扇區加密的卡稱半加密卡,所有扇區都加密的卡稱全加密卡

碼農生活 :IC卡門卡模擬探祕

M1卡數據結構

IC卡讀寫

設備

如果想讀取IC卡中的數據,需要通過支持讀卡技術(RFID、NFC)的硬件設備支持了,比如pn532、acr122u、proxmark3等,筆者使用的是Proxmark3,忽略性價比因素,相比於其它傻瓜式設備,proxmark3的功能更全面些,可玩性也更高,另外集成NFC模塊的手機也支持IC卡片的讀取

碼農生活 :IC卡門卡模擬探祕

Proxmark3

碼農生活 :IC卡門卡模擬探祕

讀取IC卡

Proxmark3是由Jonathan Westhues設計並且開發的開源硬件,其主要用RFID的嗅探、讀取以及克隆等的操作

碼農生活 :IC卡門卡模擬探祕

官方固件更新記錄:最近更新2019/03/15

除了官方軟件,還有其它大神的軟件:Proxbrute、EMV、Iceman

碼農生活 :IC卡門卡模擬探祕

筆者用的是冰人(iceman)固件

碼農生活 :IC卡門卡模擬探祕

冰人固件更新記錄:最近更新2019/03/06

讀卡方法:

用USB連接proxmark3後,安裝完驅動,可以在設備管理器中查看設備串口號

碼農生活 :IC卡門卡模擬探祕

串口識別COM4

打開PM3 Universal GUI軟件,選擇 COM4 連接proxmark3

碼農生活 :IC卡門卡模擬探祕

查看Proxmark3的固件版本,發送指令:

  • hw version
碼農生活 :IC卡門卡模擬探祕

已刷冰人固件

在IC卡感應位置放上IC卡

碼農生活 :IC卡門卡模擬探祕

然後讀取卡片信息,發送指令:

  • hf 14a info
碼農生活 :IC卡門卡模擬探祕

其實Proxmark3最重要的功能還支持獲取扇區的密鑰,從而獲取所有扇區的數據,這部分內容筆者本來有寫,而且是本文的主要內容,無奈值得買平臺對敏感信息審覈比較嚴格,筆者第一次的文章提交未通過,只好把大部分違規內容給刪除了,關於Proxmark3獲取密鑰的方法,值友們可以搜索其它平臺,有類似方法介紹

碼農生活 :IC卡門卡模擬探祕

在已知密鑰的情況下,通過密鑰將卡片數據讀出,保存在仿真器內存中,發送指令:

  • hf mf ecfill A 1

最後將仿真器內存中的卡片數據保存位文件TestData.eml,發送指令:

  • hf mf esave 1 TestData
碼農生活 :IC卡門卡模擬探祕

打開TestData.eml文件,可以看到所有扇區的數據都成功讀取

碼農生活 :IC卡門卡模擬探祕

寫卡方法:

寫UID卡:

準備一張UID卡,讀取卡片信息,其中Answers to magic commands: Yes表示這張卡是中國魔術卡(UID卡)

碼農生活 :IC卡門卡模擬探祕

寫數據到UID卡中,發送指令:

  • hf mf cload TestData
碼農生活 :IC卡門卡模擬探祕

讀出UID卡每個扇區中數據,以確認是否成功寫入,發送指令:

  • hf mf cgetsc n
碼農生活 :IC卡門卡模擬探祕

cloadcgetsc命令是專門針對UID卡的,換成其它類型卡比如CUID卡則無效

碼農生活 :IC卡門卡模擬探祕

寫CUID卡:

那麼寫CUID卡該如何操作呢?現在大部分門禁系統都加入了屏蔽系統,使用複製的UID卡會出現只能使用一次,下次刷卡無效的情況,而CUID卡防屏蔽解決了這個問題,所以筆者繼續研究如何寫CUID卡,寫CUID卡需要指令:

  • hf mf wrbl blknum A/B KEYA/KEYB 000102030405060708090A0B0C0D0E0F

麻煩的是該指令每次只寫1個塊的數據,而卡中總共64塊,所以需要執行64條指令,手動執行肯定比較耗時耗力,因此筆者寫了lua腳本(cuidwrite.lua)自動執行寫64塊的操作

碼農生活 :IC卡門卡模擬探祕

...

碼農生活 :IC卡門卡模擬探祕

CUID寫操作腳本執行

讀取CUID卡片信息,其中Answers to magic commands: NO,只有UID卡纔會返回YES

碼農生活 :IC卡門卡模擬探祕

手機NFC讀寫卡

手機中安裝MCT(mifare classic tool),無需root,可讀取mifare系列IC卡的數據

碼農生活 :IC卡門卡模擬探祕

碼農生活 :IC卡門卡模擬探祕

MCT讀取的數據

MCT寫卡需要數據和密鑰,可以只添加密鑰,然後利用密鑰直接讀取卡片數據

1)編輯/增加密鑰 :新建密鑰文件TestKey,進入密鑰編輯頁面,將密鑰數據從電腦上覆制然後粘貼進來

碼農生活 :IC卡門卡模擬探祕

2)讀取原卡數據:將原卡放在手機NFC感應區域,在MCT中選擇正確的密鑰TestKey,所有扇區數據就能成功讀取

碼農生活 :IC卡門卡模擬探祕

如果選擇不正確的密鑰,則無法讀取完整數據

碼農生活 :IC卡門卡模擬探祕

3)保存數據至轉儲文件

碼農生活 :IC卡門卡模擬探祕

4)數據寫入新卡:準備一張空白UID卡,識別卡片後,選擇密鑰文件和轉儲文件,選擇扇區,等待寫入完成即可

碼農生活 :IC卡門卡模擬探祕

這麼簡單就完事了,還是太天真?

重新讀取卡片數據確認,在MCT裏選擇比較轉儲功能,發現卡中0扇區0塊的數據與轉儲文件不同,這說明0扇區0塊的數據沒有成功寫入

碼農生活 :IC卡門卡模擬探祕

後來筆者研究了下,原來需要在寫轉儲時勾選 “高級:使能廠商塊寫入”選項,勾上這個選項後另外單獨寫一次0扇區

碼農生活 :IC卡門卡模擬探祕

但是反覆嘗試了UID卡,這種方法也無法寫入0扇區;嘗試了CUID卡,這種方法可以寫入0扇區

注:MCT方式只能寫CUID卡,用MCT寫卡沒有Proxmark3穩定,有時會出現寫壞鎖死CUID卡的情況

IC卡模擬(手機、手環)

MIUI門卡

小米MIUI推出了門卡模擬的功能,不僅可以將卡數據寫入到手機中,而且手環也可以,當然需要寫特殊手段,但是爲了安全考量,小米官方都不支持加密卡的模擬

筆者的小米MIX2板載NFC芯片是NXP 80T19

碼農生活 :IC卡門卡模擬探祕

NXP 80T19芯片其模擬的卡類型屬於NXP JCOP系列,Proxmark3的官方固件是不支持JCOP卡,後來筆者是刷了冰人固件才能正常識別MIX2模擬的門卡

NXP JCOP系列芯片卡是恩智浦NXP公司在高安全性的解決方案高性能產品。廣泛應用如銀行與金融,移動通信,公共交通,訪客訪問和網絡接入等領域。支持接觸式、非接觸式、支持接觸式與非接觸式讀寫,內含有一個JCOP版本操作系統,並提供40 k-80K字節EEPROM存儲器。NXP JCOP系列芯片卡出廠帶傳輸密鑰(Transport Key),需要經過初始化後,方可訪問卡片內置的COS系統,因爲此類芯片卡的安全系列非常高。

小米MIUI推出的門卡功能有兩個模式:模擬實體門卡和添加虛擬門卡

碼農生活 :IC卡門卡模擬探祕

模擬實體門卡

這個功能是將實體卡中的數據讀取出來,然後通過手機模擬實體卡,將卡模擬到手機後,可以只帶手機在刷卡機處刷卡,無需再另外帶實體卡,輕便出行。可讀取的門卡包括普通白卡、鑰匙扣之類的IC卡

碼農生活 :IC卡門卡模擬探祕

但是模擬的卡中不包括加密卡,如果卡被識別爲加密卡,則會提示“加密卡不支持模擬”

碼農生活 :IC卡門卡模擬探祕

非加密卡,可以成功模擬,模擬過程中需要證件和密碼認證,這功能必須進行安全因素的考量

碼農生活 :IC卡門卡模擬探祕

碼農生活 :IC卡門卡模擬探祕

手機放在IC卡感應器

碼農生活 :IC卡門卡模擬探祕

Proxmark3讀出的模擬門卡信息,UID與實體IC卡的相同

添加虛擬門卡

虛擬門卡可以根據場景開卡,選擇自定義空白卡,相當於由MIUI自動生成一張0扇區不可更改的IC卡,剩下的扇區數據可以隨意寫入。如果物業允許,在物業處開通虛擬門卡的權限即可,不過一般小區物業不會同意的

碼農生活 :IC卡門卡模擬探祕

虛擬門卡開卡

碼農生活 :IC卡門卡模擬探祕

Proxmark3讀取到的虛擬門卡信息,UID由MIUI自動分配

模擬加密卡

現實中有個需求就是,想把手上的IC卡寫到手機中,虛擬門卡是因其UID是由MIUI自動分配的,且生成後不可更改,虛擬門卡沒條件開通門禁系統權限的條件下,只能選擇模擬實體卡的功能了,但是模擬實體卡有個問題,前文中也提到過,現在使用的IC卡基本都是加密卡,模擬實體卡功能又不支持加密卡,那就沒有辦法了嗎?

答案是肯定的,可以模擬加密卡,前方高能!!!真正的乾貨來了!!!

模擬加密卡的思路:獲取加密卡數據 --> 只寫UID信息到實體UID白卡中 --> 模擬UID白卡 --> 往模擬卡中寫入加密數據

第一步:獲取加密卡數據

用Proxmark3獲取加密卡的密鑰,然後讀取所有加密數據(內容違規,已刪

碼農生活 :IC卡門卡模擬探祕

第二步:只寫UID信息到實體UID白卡中

Proxmark3上更換一張UID空白卡,然後寫0扇區0塊數據

碼農生活 :IC卡門卡模擬探祕

發送指令:

  • hf mf csetblk 0 7295B829760804000214F34CBDBE2F1D
碼農生活 :IC卡門卡模擬探祕

只寫了0扇區0塊的UID卡,因爲未寫加密數據,這張UID卡目前還是一張非加密卡

第三步:模擬UID白卡

手機上使用MIUI門卡的標準功能,模擬寫了0扇區0塊的UID卡

碼農生活 :IC卡門卡模擬探祕

這一步相當於已將加密卡的0扇區寫入到手機中

第四步:往模擬卡中寫入加密數據

手機切換到卡模式,然後放在Proxmark3感應區域

碼農生活 :IC卡門卡模擬探祕

用Proxmark3往手機的模擬門卡里寫入加密數據,發送指令:

  • hf mf restore 1 u 7295B829
碼農生活 :IC卡門卡模擬探祕

. . .

碼農生活 :IC卡門卡模擬探祕

1 ~ 63塊數據成功寫入

這一步寫入了1 ~ 63塊數據,但是0扇區0塊數據無法寫入,沒關係因爲0扇區0塊數據已經在第三步中寫入了

至此,所有扇區數據已寫入到手機中,加密卡模擬成功完成

手機中可以設定刷卡方式設置,選擇默認快捷卡片,只要靠近讀卡器,手機自動喚醒切換到卡模式,並且首選默認快捷卡片

碼農生活 :IC卡門卡模擬探祕

筆者模擬了公司門禁卡、小區物業門禁卡,加上MI Pay綁定的信用卡用於刷公交地鐵,出行基本就不用帶一堆卡了,一個手機全搞定

碼農生活 :IC卡門卡模擬探祕

碼農生活 :IC卡門卡模擬探祕

手環模擬

小米手環3 NFC版也可以通過相同方法模擬加密卡

碼農生活 :IC卡門卡模擬探祕

總結

關於模擬加密卡功能,科技方便生活,筆者只嘗試了小米系產品,另外華爲系也有類似的門卡功能,等筆者手上有華爲手機了另做嘗試,蘋果系則是要等iOS開方NFC權限,不知道紅年馬月了。

相關文章