IC电话卡的原理与解密 写卡之家-技术论坛

来源:百度文库 编辑:神马文学网 时间:2024/04/28 22:26:49
IC电话卡的原理与解密
声   明
本资料仅从技术角度探讨和研究,由此引发的各种争议,如个人或集体利用本资料做任何不正当用途,作者和本站概不负责!!!
90年代的初期IC电话卡的出现,就已经取代了当时独霸一时的电话磁卡了,由于电话磁卡存在严重的安全性问题,所以推出不久就被黑客破解,所以讫今亦彻底淘汰了。几年前,在我得到第一张IC电话卡时就已被它的神秘产吸引了。其实只要你弄懂了片内的工作原理,电话IC卡和信用卡一样,就没有什么可神秘的了。
不过说来IC电话卡亦不算得很安全,因为片内的数据只要你用一个读写装置就可以读取了,就拿第一类卡片(中国 香港 澳门 德国 西班牙 希腊等国家)作一些叙述。IC电话卡实质是一个带串行输出的128位的EPROM,但是你不要以为了解它的工作原理,你就可以改写或重写片内的数据,那你就错了,因为片内的开始的64位已经写了保护,在出厂时已经编程而其的熔丝位已被加密了,所以你是无法更改片内的数据的,亦即IC电话卡的“神奇”之处了。而其它的后40位的计数单元是受内部逻辑控制的,在读写时卡片内只能作减法计数,不能作加法计数,直至存储单元内装入的预置值减到0为止,因为IC电话卡是一种一次性的计数卡片,所以卡片内的存储单元减至空,卡片也就用完了。因此你想用一般的IC电话卡打免费电话?嘿!那我告诉你--不要妄想了!!除非你能读懂本文介绍的内容,用单片机去做个仿真卡吧。
IC电话卡消费计数的单位价值是根据各种应用系统设定的,例如:30元面值的IC电话卡,对应的片内的存储单元的预置是#300,那每单位值就是0.1元了,IC电话机以每分钟产生一个扣费脉冲信号,扣费值是由当地IC电话管理系统设定的。一般是0.3元和0.8元,卡片内被减值是3次或8次了。而其它国家的IC电话卡也是如此(属于第一类卡而言,均属同等原理)。一般IC电话卡的引脚如(图一)所示:

(图一)
1:VCC-电源+5V 2:Resct-复位 3:Clock-时钟 4:NC-空 5:GND-地 6:NC-空 7:I/O-数据 8:NC-空
IC电话卡一般采用8脚封装和6脚封装,如果采用6脚封装的则无下面两个空脚。它的存储单元分布:64位EPROM(8字节)写保护区 芯片数据代码区 发行商数据代码区,40位EEPROM(5字节)预置值计数区24位为1(3字节)共16字节数据,如(图二)所示:

图二:
(注:本站不提供任何国家区码和数据代码)
IC电话卡的原理:
1:复位:
要使地址计数器复位“0”,先让Resct复位端由“0”变成“1”,然后跟着一个Clock脉冲从“0”变成“1”再降回“0”电平,Resct复位端再至“0”,把Clock脉冲包住,随着Reset端变低,地址0单元的数据从I/O上输出。对应 Clock端的每个脉冲,其上升沿使地址计数器增加。其下降沿使被选通地址单元的数据从I/O上输出。地址计数器增加到127后返回到0,如(图三)的时序图所示:

(图三)
2:写位:
在Reset和Clk端均为低的情况下,如果某地址单元允许写操作(64-103位,且该位必需为1),则Reset端上的一个脉冲(即从低到高再回低)将允许芯片进行位写操作。在紧跟着的时钟脉冲期间执行写操作,调整写操作维持时间至少10ms,在这个CLK脉冲期间,地址计数器不会增加,在CLK写脉冲下降沿,数据0从I/O端输出。从Reset脉冲的上升沿到CLK写脉冲的下降沿期间,I/O端的数据是无效的。在下一个才CLK脉冲,且Reset为低时,地址计数器又增1,并在下降沿时,把选通的地址单元的数据送到I/O端。如(图四)的时序图所示:

(图四)
3:字节擦除:
对位地址72-103的字节单元来说,只要在每个字节的前面一位进行一次正常的写操作,就可以对此字节后一字节进行字节擦除操作。也就是说,每向高一字节进行借位(即写一位0),紧接着的擦除时序可以对后一字节按字节擦除(即整个字节写1)。被擦除的字节总是比借位写的字节低一字节。从以下时序图可以看出,首先,完成一个“位写”操作,在CLK的写脉冲结束后,在CLK为低电平时,在发一个Reset脉冲即启动字节擦除操作。在第二个CLK脉冲完成字节擦除,脉冲维持时间整定为擦除周期时间(至少1ms)。芯片逻辑控制电路验证了借位写确已完成从“1”写“0”后,才擦除其低位字节。从Reset的上升沿到擦除操作的CLK脉冲的下降沿,I/O脚上的数据无效。地址计数器仍然停留在借位写的地址上。如(图五)的时序图所示:

(图五)
4:计数方法:
在67-103地址单元中分为5个不可重置8单元计数器,芯片初始化时,72-103地址单元所对应的4个较低的8单元计数器中可以放0到8个“1”而67-71地址单元所对应的第5个计数器可以放0到5个“1”。所谓计数一次,就是将一个单元从“1”写成“0”。一个计数器中8位全为“0”后,要计数,需借位操作,即将高位计数器的一位从“1”写成“0”而相应其低位计数器整个字节从“0”擦除成“1”。可见4个8单元计数器如此逐一递减,其最大计数为8的4次方=4096。第5个计数器中5个单元因处在最高位只能被写“0”无法擦成“1”。因此只能计数5次。故芯片总计数为5X4096=20480。当全部计数单元(地址67-103)都被写成“0”时,卡片就用完了,不过,芯片出厂初始化时,初置的计数值由国家不同和卡片面值不同而不同,如100元卡初置计数值为1000。如(图六)所示:


(图六)
你已了解IC电话卡的工作原理了,是不是觉得这一套系统很不安全呢?真是很容易被HACK。如果你是高手,你完全可以用仿真卡仿真它,这些仿真卡在瑞典、西班牙、法国、其他国家均已出现。如果你懂初步的电脑软件知识,懂得单片机的软硬件知识再加上一点小聪明的话,利用本文介绍的技术资料就足已能够仿真了。但是你必须将现行你想仿真国家IC卡片内信息用读卡器读得前8字节的数据,因为仿真时必须要知道的,后5个字节你从卡值按8进制即可推算出每一字节值,最后3字节不必理会了。对于二类卡不作介绍了。我是个菜鸟,本文纯粹是技术探讨,欢迎高手指正。不过我是个遵己守法的爱国主义者,如果你也是个菜鸟,我还是劝你不要对国内的IC卡有兴趣,后果你自己想想吧!_xyz