前言我们一般用的手机sim卡里面有三组数值是关键的:IMSI、ICCID和ki,有了这三组数值,你的sim卡就能被复制。市面上卖的一卡多号其实就是通过读取sim卡这三组数值,将他们写到一张特殊的卡上,从而达到复制的目的。IMSI和ICCID可以直接读取,ki却是加密的。下面简单讲讲GSM加密:GSM的加密系统里面大致涉及三种算法,A3、A5、A8,这些并不特定指代什么算法,只是给出算法的输入和输出规范,以及对算法的要求,GSM对于每种算法各有一个范例实现,理论上并没有限制大家使用哪种算法。但是世界上的设备商和运营商都是很懒得沟通的,看到既然有了范例实现,就都拿来用了,于是全世界的SIM卡破解的方法都一样。说到这里就不能不简单介绍一下SIM卡,SIM卡是一种智能卡片,里面有个非常简单的CPU和一点NVRAM,可以存储和读出数据,还可以进行一些运算。卡里面有很多内容,不过只介绍和加密相关的。每张SIM卡里面一般都存着一个全球唯一的标志号,叫做IMSI,这个是用来唯一标识你SIM卡的,手机在开机时候会从卡里面读出这个号发给移动网络,移动那里有一个很大的数据库,描述了IMSI和手机号的对应关系,于是网络就知道你的手机号是多少了(如果你手机卡丢了去补,新补来的卡IMSI和原有的不同,而移动数据库那里将你原来的手机号指向新的IMSI,旧的卡就再也不能用了)除了IMSI,还有16个字节的密钥数据,这个数据是无法通过
SIM 卡的接口读出的,通常称为Ki,Ki在移动网络那边也保存了一份。在手机登录移动网络的时候,移动网络会产生一个16字节的随机数据(通常称为RAND)发给手机,手机将这个数据发给SIM卡,SIM卡用自己的密钥Ki和RAND做运算以后,生成一个4字节的应答(SRES)发回给手机,并转发给移动网络,与此同时,移动网络也进行了相同算法的运算,移动网络会比较一下这两个结果是否相同,相同就表明这个卡是我发出来的,允许其登录。这个验证算法在GSM规范里面叫做A3,m=128
bit,k=128 bit,c=32
bit,很显然,这个算法要求已知m和k可以很简单的算出c,但是已知m和c却很难算出k
。A3算法是做在SIM卡里面的,因此如果运营商想更换加密算法,他只要发行自己的SIM卡,让自己的基站和SIM卡都使用相同的算法就可以了,手机完全不用换。在移动网络发送RAND过来的时候,手机还会让SIM卡对RAND和Ki计算出另一个密钥以供全程通信加密使用,这个密钥的长度是64
bits,
通常叫做Kc,生成Kc的算法是A8,因为A3和A8接受的输入完全相同,所以实现者偷了个懒,用一个算法同时生成SRES和Kc。在通信过程中的加密就是用Kc了,这个算法叫做A5,因为A5的加密量很巨大,而且SIM卡的速度很慢,因此所有通信过程中的加密都是在手机上面完成的,这样一来,除非天下所有GSM手机都至少支持一种相同的A5算法,否则就没法漫游了,这时候运营商和设备商的懒惰又体现出来了,全世界目前只有一种通用的A5算法,没有其他的,这个算法就是和Kc
的8字节序列进行简单的循环XOR,再和报文序号做个减法。现在说说为啥手机卡可以被复制。从前面的介绍里面我们知道,要完成一次登录过程,IMSI和Ki是必不可少的,A3算法也需要知道,这其中IMSI是直接可读的,但是A3算法和存在你的卡里面的数据,都是不知道的,手机只是简单的把RAND给SIM卡,SIM卡把算好的数据返回。实际设备中使用的A3算法被作为高级商业机密保护起来。但是世界上没有不透风的墙,在1998还是1999年的时候,有人从哪里偷到了几页纸的相关文档,然后把这文档输入了电脑。后来这个文档落到了加州伯克力几个教授手里面。这个文档里面缺少一些东西,而且还有写错的地方,这几个教授们拿一个SIM卡比对了一阵子,把缺的补上了,错的也给修正了,于是这个算法就成为了世人皆知的秘密。这个算法又被叫做Comp128,他同时生成SRES和Kc。光有了算法还是不能够得到在SIM卡里面保存的Ki,理论上面是可以把SIM卡拆了,然后把芯片接到特殊设备上面来读出Ki,但是这个听起来就像用小刀在硬盘上面刻操作系统一样不靠谱。于是很多有志之士就开始了对Comp128
算法的攻击,在一开始大家想到的肯定是穷举,不过这个GSM的设计者也想到了,SIM
卡里面有个逻辑是一共只能查询2^16次左右,之后卡会自杀,让破解者啥都得不到。因此研究者们试图在可以接受的次数之内通过构造特定明文和分析输出秘文来分析出Ki的值,结果还真被大家发现出来了一些。IBM的一个小组甚至用6次查询就可以彻底解出Ki,当然现在外面卖的那种机器肯定没有这么牛。随着时间的推移,针对Comp128的破解算法越来越成熟,SIM复制设备也越来越多,运营商们终于坐不住了。很多运营商都开始发行Comp128
v2加密算法的卡了。Comp128
v2算法是GSM协会在v1被攻破以后,迅速在v1上面修改得来的结果,据说比较好的解决了v1算法中的弱点,当然,这个算法像v1一样,还是不公布于众的,而且到现在也没有人公布出来。这样一来,基本就没法解了。中国的运营商同样也遇到了SIM卡被复制问题,这里我主要讲讲中国移动。大约从2005年下半年发行的卡开始,已经不能直接用simscan等软件读出ki,但是,这并不是真正v2卡。有消息指出,v2卡虽然解决了能被复制的漏洞,但是兼容性和稳定性方面不尽人意。聪明的中国移动当然不会不管这个问题,它在成熟的v1卡基础上,自己做了小小的修改,巧妙的躲避了simscan等软件的扫描,达到不被复制的目的。这种卡我们暂时称作v0卡。v0卡是中国移动自己设计出来,据说是改变了原来ki的配对规律,使常规的扫描无法读出ki。本文的核心内容,就是讲述如何读出v0卡的ki。正文解卡之前应该做好一些准备,比如一台运行良好的电脑,能和电脑连接并运行正常的读卡器等等。在开始之前,建议关闭不需要的程序,否则可能影响解卡。
下载本文后面提供的附件,需要的软件都包括在里面。首先,运行sim卡ki分析器1.3,这个版本是经过破解和修改的,目前效果最好:选择正确的com口和速度后,点连接。
如果连接正常,会出现ATR=的字样。点读卡,程序开始工作。出现正在读取分析SIM卡信息……的字样,次数会在不停的跳动。注意:com口和速度因人而异,大家可以慢慢尝试,直到连接成功。I/O延时可以填入05-99的数字,理论上数字越大,速度越慢,也可以自己尝试。卡有计数那里一般不管。成功运行后,我们就开始等待。等待的时间非常长,从几个小时到几十天都有可能。这个过程对CPU的要求较高,请不要做其他的事,推荐晚上睡觉时运行。
程序支持断点扫描,如果你扫描过程中停止了,下次扫描时会出现:选择是就可以继续扫描。漫长的等待后,如果“出现此为V1卡,请用simscan破解!”,那么请使用simscan或者woronscan扫描,这种卡是老的v1卡,100%能破解。
到这里为止,你已经不需要再看下面的了。一般来说,v0卡一般要扫描30w次以上才可能出结果。当程序有结果时,可能会出现下面的情况:出现这个,可以恭喜你了,程序已经帮你解出1组ki,可以说你已经成功了一半。下面要做的事,就是用woronscan解出剩下的。你可以跳过下面的部分。直接阅读woronscan部分。当然,并不是人人都有这么好的运气,你可能像我一样,出现下面的结果:到这里,也可以说成功了部分。下面将讲述从程序生成的文件中找出rand。在相同的目录下面,你会发现有一个alg.tmp文件,可能是几兆甚至几十兆大小。我们用十六进制工具打开它。这里我用的是ultraedit。
找出从头开始数的第六个字节:这里是B7。
然后找出最后的12个字节:这里是BD B2 B5 17 5A 00 00 1B 78 31 E8 58。
下面说说这12个字节的意思:
第一个BD表示rand对应的ki在哪一组,BC是0 pair,BD是1 pair,BE是2
pair,依次类推。
第二第三个B2 B5表示加密的rand1。
第四第五个17 5A表示加密的rand2。
后面的00 00 1B 78 31 E8 58是特征码,不变的,不用管它。接下来是用我的程序,把加密的rand解密成真实的rand。启动程序后,出现下面的界面:把刚刚得到的数据填入,点计算,就可以得到真实的rand:有了真实的rand,离成功又近了一步。下面把rand计算成ki。这是一个穷举的过程,对CPU的运算能力要求非常高。如果CPU的运算能力越强大,时间越短。
填入上面得到的数据就可以开始计算了:程序一般在几个小时内解出ki,若解不出,请更改R/N为0、1、2、3、4、5、6、7再计算,或者更改起始1为00到FF。
计算成功后,程序会告诉你一对ki和所在的组:到这里已经成功了一半,剩下的就是用woronscan解出剩下ki。现在来讲讲woronscan解剩下的ki。首先必须知道ki的配对关系。这里声明一下,我这篇文章讲的第几组、第几列等等的,都是从0开始计算。
下面提供一个关键的规律表:
拥有第0对KI时,解剩下的KI顺序为:4,2,6,1,5,3,7
拥有第1对KI时,解剩下的KI顺序为:5,3,7,0,4,2,6
拥有第2对KI时,解剩下的KI顺序为:6,0,4,1,5,3,7
拥有第3对KI时,解剩下的KI顺序为:7,1,5,0,4,2,6
拥有第4对KI时,解剩下的KI顺序为:0,2,6,1,5,3,7
拥有第5对KI时,解剩下的KI顺序为:1,3,7,0,4,2,6
拥有第6对KI时,解剩下的KI顺序为:2,0,4,1,5,3,7
拥有第7对KI时,解剩下的KI顺序为:3,1,5,0,4,2,6下面以我的卡来讲讲整个过程:
注意,woronscan也同样需要设置com口和速度,这里就不详细讲了。
我的ki是第1组的00A0,填入woronscan中,点计算:很快计算出了结果:
Calculating data for 3R attack….
Found data: common=71 first=04A2 second=2FAF
Finding 3R attack collision…
3R attack collisions found…used 308 steps
3R attack 12 possible pairs found
Possible Pair 24CF
Possible Pair 2AD0
Possible Pair 365E
Possible Pair 5BD0
Possible Pair 6D9B
Possible Pair 7123
Possible Pair 7B23
Possible Pair 869B
Possible Pair 8CF9
Possible Pair 8DCF
Possible Pair AB5E
Possible Pair FAF93R attack
failed…
这里的Possible Pair是可能配对,我们需要全部的测试。
根据上面的规律表,下面一组是第五组,将24CF填入第五组计算:如果是错误的,将出现这样的结果:
Calculating data for 3R attack….
Found data: common=7B first=03D9 second=F76A
Finding 3R attack collision…
3R attack collisions found…used 512 steps
3R attack 0 possible pairs found
3R attack failed…
我们就这尝试下一组可能的解2AD0。因为我已经知道答案,所以我直接用正确那组6D9B填进去计算,可以得出如下结果:
Calculating data for 3R attack….
Found data: common=41 first=0108 second=8086
Finding 3R attack collision…
3R attack collisions found…used 468 steps
3R attack 4 possible pairs found
Possible Pair 00A0
Possible Pair 00CC
Possible Pair F128
Possible Pair F1D03R attack
failed…
看到了吗?里面有一组Possible
Pair是00A0,也就是最开始那对,所以这个结果是正确的。
将刚刚00A0重新填到第1组,然后继续计算:将会出现这样的结果:
Calculating data for 4R attack….
Found data: common=2F first=0044 second=323F third=8D00
Finding 4R attack collision…
Used 146 steps for 4R attack
4R attack 8 collisions found…
final calculating pairs by 4R attack…
2302 0017
23FC 0017Found by 4R attack 3 pair=FFFF
程序已经给出了下面可能的解,2302、23FC和0017。根据上面的配对规律,下面测试的是第3组,讲2302填到第三组点计算:出现这样的结果:
Calculating data for 3R attack….
Found data: common=64 first=1C75 second=AA00
Finding 3R attack collision…
3R attack collisions found…used 512 steps
3R attack 0 possible pairs found
3R attack failed…
这说明这个解是错误的,如果正确,将出现这样的结果:
Calculating data for 3R attack….
Found data: common=46 first=01C4 second=3456
Finding 3R attack collision…
3R attack collisions found…used 254 steps
3R attack 4 possible pairs found
Possible Pair 7124
Possible Pair 8129
Possible Pair 9F29
Possible Pair D324
3R attack failed…很明显,程序由给出了下面的解。根据上面的规律表,将这四个可能的解分别填到7组,如果错误,出现这样的结果:
Calculating data for 5R attack….
Found data: common=BF first=0044 second=323F third=8D00
forth=2E00
Finding 5R attack collision…
Used 512 steps for 5R attack
5R attack collision not found..failed…
否则出现这样的:
Calculating data for 5R attack….
Found data: common=BF first=0044 second=323F third=8D00
forth=1700
Finding 5R attack collision…
Used 502 steps for 5R attack
5R attack 8 collisions found…
final calculating pair by 5R attack…
AF5E 0000 FFCD
0004
AFA2 0000 FFCD 00045R calc. time 1.502
Found by 5R attack 0 pair=FFFFFFFF很明显,程序已经给出了下面的5个可能的解。根据规律,继续填入0组,计算得出:
Calculating data for 3R attack….
Found data: common=21 first=012B second=36A6
Finding 3R attack collision…
3R attack collisions found…used 332 steps
3R attack 4 possible pairs found
Possible Pair 29C2
Possible Pair 75BB
Possible Pair 7EC2
Possible Pair BBBB3R attack
failed…很明显,又有了下面的可能性,如果是错误的,将不会给出下面的结果。
根据规律,分别将给出的4组可能解填到第4组,计算得出:
Calculating data for 4R attack….
Found data: common=136 first=0418 second=44E4 third=0000
Finding 4R attack collision…
Used 278 steps for 4R attack
4R attack 8 collisions found…
final calculating pairs by 4R attack…
3BE3 003C
Found by 4R attack 2 pair=FFFF
很明显,这已经是答案了,因为给出了下面的答案。
继续将这两组可能的解填入第2组:点计算,很快出现如下结果,成功啦!
Finding last pair by brute force…
Found by brute force the 6 pair=1FF6
最后一组,也就是第六组,已经出来了!到这里为止,八组ki已经完全解出。剩下的就是写进你的一卡多号里面。这里补充讲讲有了ki如何生成simmax的dat文件。
首先将将原来的sim卡插入读卡器,并和电脑连接好。
运行压缩包里面的dump_dat:点读取旧的SIM卡。如果一切顺利,大约需要20秒。
然后就可以点击生成不包括ki的dat文件。选择保存位置后可以给dat文件加个密码,如果不需要密码,直接点确定。
这样我们就生成了一个不包括ki而包括其他所有信息的dat文件。
接下来就是将ki写入dat文件,运行write_ki2dat:在Ki那一行把你的ki写进去,注意不包括空格。
然后点存档就成功保存了。
接下来就是把这个dat文件写入你的一卡多号里面。关于woronscan部分,可能解释的不是特别的清晰,这里送大家一个教程,讲的详细很多,可以参考一下:
http://www.live-share.com/files/234604/sim.rar.html后记一直就想写这篇文章,一直定不下心来写。刚好最近写了个相关的程序,反正都要写说明,就干脆写一篇完整的攻略吧。写这篇文章参考了很多别人的作品,特别是感谢领易网的laoqian777和turkey2k6。目前根据我这篇说明,中国移动v0的卡完全能够破解,解不出来的,多数都是时间问题,坚持吧!今天只是简单的写了一下,以后我还会慢慢的完善的。争取成为sim卡ki扫描破解权威教程。http://lgmcn.ys168.com/

点击下载本文提到的所有软件(20070707更新)