|
IC電話卡的原理與解密
IC電話卡的原理與解密 聲 明 本資料僅從技術(shù)角度探討和研究,由此引發(fā)的各種爭議,如個人或集體利用本資料做任何不正當(dāng)用途,作者和本站概不負(fù)責(zé)。。 90年代的初期IC電話卡的出現(xiàn),就已經(jīng)取代了當(dāng)時獨霸一時的電話磁卡了,由于電話磁卡存在嚴(yán)重的安全性問題,所以推出不久就被黑客破解,所以訖今亦徹底淘汰了。幾年前,在我得到第一張IC電話卡時就已被它的神秘產(chǎn)吸引了。其實只要你弄懂了片內(nèi)的工作原理,電話IC卡和信用卡一樣,就沒有什么可神秘的了。 不過說來IC電話卡亦不算得很安全,因為片內(nèi)的數(shù)據(jù)只要你用一個讀寫裝置就可以讀取了,就拿第一類卡片(中國 香港 澳門 德國 西班牙 希臘等國家)作一些敘述。IC電話卡實質(zhì)是一個帶串行輸出的128位的EPROM,但是你不要以為了解它的工作原理,你就可以改寫或重寫片內(nèi)的數(shù)據(jù),那你就錯了,因為片內(nèi)的開始的64位已經(jīng)寫了保護(hù),在出廠時已經(jīng)編程而其的熔絲位已被加密了,所以你是無法更改片內(nèi)的數(shù)據(jù)的,亦即IC電話卡的“神奇”之處了。而其它的后40位的計數(shù)單元是受內(nèi)部邏輯控制的,在讀寫時卡片內(nèi)只能作減法計數(shù),不能作加法計數(shù),直至存儲單元內(nèi)裝入的預(yù)置值減到0為止,因為IC電話卡是一種一次性的計數(shù)卡片,所以卡片內(nèi)的存儲單元減至空,卡片也就用完了。因此你想用一般的IC電話卡打免費電話?嘿!那我告訴你--不要妄想了。〕悄隳茏x懂本文介紹的內(nèi)容,用單片機(jī)去做個仿真卡吧。 IC電話卡消費計數(shù)的單位價值是根據(jù)各種應(yīng)用系統(tǒng)設(shè)定的,例如:30元面值的IC電話卡,對應(yīng)的片內(nèi)的存儲單元的預(yù)置是#300,那每單位值就是0.1元了,IC電話機(jī)以每分鐘產(chǎn)生一個扣費脈沖信號,扣費值是由當(dāng)?shù)豂C電話管理系統(tǒng)設(shè)定的。一般是0.3元和0.8元,卡片內(nèi)被減值是3次或8次了。而其它國家的IC電話卡也是如此(屬于第一類卡而言,均屬同等原理)。一般IC電話卡的引腳如(圖一)所示:
(圖一) 1:VCC-電源+5V 2:Resct-復(fù)位 3:Clock-時鐘 4:NC-空 5:GND-地 6:NC-空 7:I/O-數(shù)據(jù) 8:NC-空 IC電話卡一般采用8腳封裝和6腳封裝,如果采用6腳封裝的則無下面兩個空腳。它的存儲單元分布:64位EPROM(8字節(jié))寫保護(hù)區(qū) 芯片數(shù)據(jù)代碼區(qū) 發(fā)行商數(shù)據(jù)代碼區(qū),40位EEPROM(5字節(jié))預(yù)置值計數(shù)區(qū)24位為1(3字節(jié))共16字節(jié)數(shù)據(jù),如(圖二)所示: 圖二: (注:本站不提供任何國家區(qū)碼和數(shù)據(jù)代碼) IC電話卡的原理: 1:復(fù)位: 要使地址計數(shù)器復(fù)位“0”,先讓Resct復(fù)位端由“0”變成“1”,然后跟著一個Clock脈沖從“0”變成“1”再降回“0”電平,Resct復(fù)位端再至“0”,把Clock脈沖包住,隨著Reset端變低,地址0單元的數(shù)據(jù)從I/O上輸出。對應(yīng) Clock端的每個脈沖,其上升沿使地址計數(shù)器增加。其下降沿使被選通地址單元的數(shù)據(jù)從I/O上輸出。地址計數(shù)器增加到127后返回到0,如(圖三)的時序圖所示:
(圖三) 2:寫位: 在Reset和Clk端均為低的情況下,如果某地址單元允許寫操作(64-103位,且該位必需為1),則Reset端上的一個脈沖(即從低到高再回低)將允許芯片進(jìn)行位寫操作。在緊跟著的時鐘脈沖期間執(zhí)行寫操作,調(diào)整寫操作維持時間至少10ms,在這個CLK脈沖期間,地址計數(shù)器不會增加,在CLK寫脈沖下降沿,數(shù)據(jù)0從I/O端輸出。從Reset脈沖的上升沿到CLK寫脈沖的下降沿期間,I/O端的數(shù)據(jù)是無效的。在下一個才CLK脈沖,且Reset為低時,地址計數(shù)器又增1,并在下降沿時,把選通的地址單元的數(shù)據(jù)送到I/O端。如(圖四)的時序圖所示:
(圖四) 3:字節(jié)擦除: 對位地址72-103的字節(jié)單元來說,只要在每個字節(jié)的前面一位進(jìn)行一次正常的寫操作,就可以對此字節(jié)后一字節(jié)進(jìn)行字節(jié)擦除操作。也就是說,每向高一字節(jié)進(jìn)行借位(即寫一位0),緊接著的擦除時序可以對后一字節(jié)按字節(jié)擦除(即整個字節(jié)寫1)。被擦除的字節(jié)總是比借位寫的字節(jié)低一字節(jié)。從以下時序圖可以看出,首先,完成一個“位寫”操作,在CLK的寫脈沖結(jié)束后,在CLK為低電平時,在發(fā)一個Reset脈沖即啟動字節(jié)擦除操作。在第二個CLK脈沖完成字節(jié)擦除,脈沖維持時間整定為擦除周期時間(至少1ms)。芯片邏輯控制電路驗證了借位寫確已完成從“1”寫“0”后,才擦除其低位字節(jié)。從Reset的上升沿到擦除操作的CLK脈沖的下降沿,I/O腳上的數(shù)據(jù)無效。地址計數(shù)器仍然停留在借位寫的地址上。如(圖五)的時序圖所示:
(圖五) 4:計數(shù)方法: 在67-103地址單元中分為5個不可重置8單元計數(shù)器,芯片初始化時,72-103地址單元所對應(yīng)的4個較低的8單元計數(shù)器中可以放0到8個“1”而67-71地址單元所對應(yīng)的第5個計數(shù)器可以放0到5個“1”。所謂計數(shù)一次,就是將一個單元從“1”寫成“0”。一個計數(shù)器中8位全為“0”后,要計數(shù),需借位操作,即將高位計數(shù)器的一位從“1”寫成“0”而相應(yīng)其低位計數(shù)器整個字節(jié)從“0”擦除成“1”?梢4個8單元計數(shù)器如此逐一遞減,其最大計數(shù)為8的4次方=4096。第5個計數(shù)器中5個單元因處在最高位只能被寫“0”無法擦成“1”。因此只能計數(shù)5次。故芯片總計數(shù)為5X4096=20480。當(dāng)全部計數(shù)單元(地址67-103)都被寫成“0”時,卡片就用完了,不過,芯片出廠初始化時,初置的計數(shù)值由國家不同和卡片面值不同而不同,如100元卡初置計數(shù)值為1000。如(圖六)所示:
(圖六) 你已了解IC電話卡的工作原理了,是不是覺得這一套系統(tǒng)很不安全呢?真是很容易被HACK。如果你是高手,你完全可以用仿真卡仿真它,這些仿真卡在瑞典、西班牙、法國、其他國家均已出現(xiàn)。如果你懂初步的電腦軟件知識,懂得單片機(jī)的軟硬件知識再加上一點小聰明的話,利用本文介紹的技術(shù)資料就足已能夠仿真了。但是你必須將現(xiàn)行你想仿真國家IC卡片內(nèi)信息用讀卡器讀得前8字節(jié)的數(shù)據(jù),因為仿真時必須要知道的,后5個字節(jié)你從卡值按8進(jìn)制即可推算出每一字節(jié)值,最后3字節(jié)不必理會了。對于二類卡不作介紹了。我是個菜鳥,本文純粹是技術(shù)探討,歡迎高手指正。不過我是個遵己守法的愛國主義者,如果你也是個菜鳥,我還是勸你不要對國內(nèi)的IC卡有興趣,后果你自己想想吧!
|