科普:⽬前各种iPhone软件解锁的原理,以及理论上真正完美
的解锁
<quote URL = "bbs.iphone/thread-32315-1-1.html">
因为最近才买的iPhone,所以这⼏天把DEV TEAM的WIKI和翻了个遍,补习知识。
⽬前中⽂社区上好像还没有⼈发过这样的帖⼦,我把这⼏天看到的总结⼀下,发⼀个科普帖。
所有的参考资料都来⾃DEV TEAM WIKI()和,其实很多东西我是粗略的看了⼀下,以下⽂章如果有错误的地⽅,还⿇烦指出。
------------------------------------
1,iPhone的硬件
iPhone的硬件配置⽐较⾼,虽然卖得是⽐较贵,但是相对于Nokia N95之类的⽐起来,iPhone造价肯定⽐N95贵不少。
现在初步相信iPhone的CPU是⼀个Samsung S5L8900,这个CPU是具有A-GPS和3G功能的(这是后话)
,但是iPhone的GSM模块采⽤了另外⼀个完全独⽴的系统,就是我们常说的baseband,这个baseband有⾃⼰的firmware(操作系统)和CPU(是⼀个S-GOLD2,西门⼦的⼿机也是采⽤这个CPU),⽽且,通俗点说,baseband还有⾃⼰的闪存⽤来记录⽬前baseband的状态,这个闪存被称为NOR,我们所说的seczone就在其中。这个baseband单独拆下来经过⼩改,也够当⼀个⼿机⽤了。
所以实际上iPhone是⾮常复杂的⼀个⼿机。我们每次所谓更新firmware,实际上是更新iPhone的firmware(就是OS X Darwin),⽽bbupdater则是更新baseband的firmware。加油稿运动会50字左右大全
你可以这样想,iPhone是⼀个电脑,这个电脑上插了⼀个联通CDMA卡,你使⽤电脑可以打电话发短信和上⽹,问题是联通CDMA卡被锁死了,只能上联通,如果要解锁,怎么办?通过修改电脑的操作系统(Windows XP)是不⾏的,因为控制权在CDMA卡⼿⾥,所以你必须想办法通过Windows XP来修改CDMA卡上的系统,才能达到解锁的⽬的。
2,完美的解锁
有些⼈会问了,什么才是所谓的完美解锁?现在的解锁有什么不完美?
完美的解锁,就是真解锁,如果你的iPhone完美的解锁了,你的iPhone不需要任何打过补丁的baseband firmware,你的iPhone可以随着Apple的firmware升级随时升级,不会有任何问题,⽽且,你的整个iPhone系统,就是Apple原汁原味的系统,没有任何改动!
就像软件的破解⼀样,完美解锁,就是注册码,软件还是那套软件,输⼊注册码后就注册了,完美,⽽⽬前的解锁,实际上都是注册机,把软件中的某些地⽅打了补丁。
那么,怎么样才能实现完美解锁?刚才我们提到了,iPhone中baseband的资料都存在NOR⾥,是的,NOR⾥保存了⽬前baseband的状态,其中就有⽬前iPhone的解锁状态,iPhone出⼚的时候,都给锁在ATT的⽹络⾥了。
到这⾥有些⼈想问了:那么我们把这个状态改成解锁,不就完美了么,是的,但是,问题是:
1,只有通过baseband的firmware,也就是baseband的操作系统,才能读写NOR,⽽且NOR中seczone的控制及其严格,想要直接发指令写⼊,是不可能的。
2,baseband的firmware是Apple数字签名过的,意思就是说,只有Apple⾃⼰的1024位的私匙签名过的firmware,baseband才会运⾏。3,最重要的⼀点,我们不知道要往NOR seczone⾥⾯写⼊什么,才能解锁,因为NOR seczone⾥数据都是加密过的,不是0就是锁,1就是解锁这么简单,每台iPhone的NOR在加密前可以是⼀样的,但是加密后每台都是不⼀样的,⽽且这个加密机制,也只有通过Apple的私匙才能算出来。
那么,想要达到完美解锁,需要怎么做?
实际上,你可以通过iPhone的minicom对iPhone的baseband发送指令,其中有⼀条指令,就是⽤来解锁的,⽽且我们明确知道这条指令是什么,就是:
AT+CLCK="PN",0,"xxxxxxxx"
注意到后⾯那8个x了吗?那些x就是你的解锁码,unlock code,或者专业说法,叫做NCK、Network Control Key,,这个key每个iphone都不⼀样,相信苹果应该是⽤某种随机机制⽣成了这些解锁码,然后和IMEI或者序列号挂钩,放在⾃⼰的数据库⾥,在将来,苹果官⽅提供解锁的时候,他们会通过你的IMEI或者序列号告诉你的unlock code,达到完美解锁。
但是你发送指令的时候,你的iPhone⼜怎么知道这个解锁码是对还是错的?如果iPhone需要知道对错,那么说明iPhone⾃⼰知道unlock code,所以我们能从iPhone⾥某个地⽅到这个code,然后完美解锁,对吗?不对!
实际上iPhone NOR上保存的,是这个code经过某个特殊的算法⽣成的⼀个hash值,hash(code) ,⽽这个算法是不可逆的(就像MD5)。
通俗点说,我们可以这么想,Apple教会了iPhone⼀套暗号,告诉iPhone 1 = 鸭⼦ 2 = 鸡 3 = 鹅,然后把暗号123这个unlock code编码成“鸭⼦鸡鹅"存放在Phone NOR⾥,这时候iPhone并不知道unlock
code是123,它只知道如果别⼈告诉我123,我按照Apple的暗号算⼀下,如果算出来和"鸭⼦鸡鹅"⼀样,那么别⼈告诉我的code就是对的了。当然实际上这个过程不是这么简单,否则你⼀猜就能破译这个密码了,按照⽬前的计算机⽔平,把这个unlock code通过hash过的值逆算回来,⼏乎是不可能的。
泰安名吃那么,我们穷举⾏吗?不就是⼀个8位数嘛?我们从00000000试到99999999,总有⼀个对吧?这个⽅法理论上可以,但是实际上⾏不通,原因⼜两个:
1,按照粗略结算,关把这些1亿个指令发给iPhone尝试,就要35天,并且还不考虑iPhone算需要多久。
2,最关键的,iPhone的baseband NOR seczone中,有⼀个NCK计数器,⼀旦你尝试3-10次失败,你的baseband将会硬件烧死在AT&T 上。
所以,⽬前来说,iPhone完美解锁,还没有,相信如果Apple不出⼤错误,也不会有,除⾮Apple到时候官⽅推出解锁,那才是完美解锁。
3,⽬前的解锁
⽬前iPhone上有3种软件解锁,分别是:
1,iUnlock / Anysim 1.0.2 / iUnlock Reloaded 这些都是同⼀种,都是使⽤了iUnlock的核⼼代码。
2,iPhoneSimFree,也就是IPSF提供的需要花钱购买的解锁。
3,Anysim 1.1.1
这3种解锁,都不是完美解锁!
⽬前相信,这3种⽅法的⼯作原理如下:
iUnlock
iUnlock通过直接在baseband firmware上打补丁(我不知道他们怎么跳过了苹果的签名检查,我知识不够),跳过了baseband firmware对的NOR 中 token(这个token就是hash过的NCK挂钩的值)检查,然后发送AT+CLCK给baseband要求解锁,由于token的检查已经被跳过这个时候实际上发送什么NCK iPhone都会同意解锁,这样解锁后的baseband会修改seczone中的lockstate table,但是这么做的结果就是NOR中的数据不再是"合法"的了,因为我们根本不知道真正能够满⾜token是NCK什么,只不过因为在baseband firmware上打了补丁,告诉baseband firmware不要检查这个token⽽已。
这么做过之后,你的baseband firmware就是打过补丁的了,不是苹果原来的baseband firmware了。
这也造成了后来的1.1.1升级,Apple升级了baseband firmware,结果不合法的lockstate table 导致了iPhone  -> 砖头。
iPhoneSimFree IPSF
最开始⼤家都认为IPSF的解锁是最完美的,也很多⼈认为IPSF的解锁就是完美解锁,因为IPSF的解锁过程需要联系他们的服务器,不少⼈相信他们通过⾛后门或者其他内奸⼿段,得到了Apple iPhone这个unlock code数据库,所以能够提供真解锁,现在⼴泛相信的是,这是⼀个天⼤的谎⾔。
根据DEV TEAM的研究,IPSF的解锁原理是:他们到了Apple iPhone中RSA算法的⼀个漏洞,⼀个很⼤的Bug,通过利⽤这个BUG,他们把NOR seczone中的token清零(全部清空),然后再构造⼀个特别的lockstate table。iPhone在启动校验token / locktable 合法性时候,因为这个BUG,导致这个全部是0的token + locktable得以合法验证,所以iPhone认为这个机器是合法解锁的了。
这个bug在1.1.1升级的时候苹果还没有补上,所以IPSF的机器在升级1.1.1之后可以继续保持unlock。
但是,这么做的后果是不堪设想的!我上⾯说了,每个机器的token都不⼀样,每个iPhone的token全世界唯⼀,除了苹果知道,没有⼈知道, IPSF把iPhone的token清零,⽬前在这个bug还没有补上的时候,IPSF解锁过的iPhone还能⽤,但是当苹果在修补这个漏洞后,要么就别升级,要么升级后IPSF iPhone就变废铁了,⽽且基本上⽆药可救。
Anysim 1.1.1
最新推出的Anysim 1.1.1应该是⽬前最好的软解,Anysim 111的原理和iUnlock不⼀样,Anysim 111完全不去动seczone⾥的token和lockstate table,整个解锁过程不需要发送AT+XCLK指令,如果你解锁⽤minicom运⾏后就知道lockstate table还是锁住的状态,anysim 111⽤的是在baseband firmware上打补丁,跳过了所谓mnc检查(network check,实际是什么我也不是很明⽩)完全欺骗了iPhone,让iPhone 认为⾃⼰解锁了。这个⽅法的好处就是:seczone完全没有动过,内容完全,之后如果Apple再升级baseband firmware,⼤不了我们的⼿机重新锁死,应该是不会再变砖了。
所以,⽬前所谓变“处⼥"的⽅法,就是把iUnlock修改seczone的locktable重新改回来。⾄于IPSF解锁后破坏的seczone,就得听天由命了……
------------------------------------
10⽉28⽇更新
就当是一场梦醒了很久还是很感动------------------------------------
anysim 1.1.1p
现在anysim出了1.1.1p,看google code上只有⼀个简短的说明:“fix the counter problem”,也就是说:“解决了计数器的问题”。
我也不明⽩这个到底是怎么回事,hackint0sh上曾经有讨论过anysim 111在更新了baseband firmware后,还是发送了XCLCK这个指令,⽽按照anysim 111的⼯作原理,这个指令完全不需要⽽且也完全不可能会成功。⽽且执⾏这个命令会增加⼀次NCK尝试解锁计数。据说是因为失误,在anysim 102 -> 111的时候这段代码忘记剔除了。
但是这个帖⼦当时就被骂是胡说⼋道,据说源代码上已经把调⽤标记了,不会再调⽤了,反正看到最后也是没有结果。⽽且也不能确定这个所谓的计数器,就是指NCK计数器。王瑞儿 夜火
马国明黄心颖分手我的看法是,你如果现在要解锁,就⽤anysim 1.1.1p吧,如果你已经⽤了anysim 1.1.1解锁,那也完全没有关系,反正NOR seczone完全可以重写(回复出⼚状态,恢复NCK解锁计数器为0),这个NCK计数器也就已经是⼀个摆设了(只要你不要没事就尝试解锁玩就⾏了,如果你没事就⼀直尝试⽤iUnlock发送XLCK指令玩,⼜没有刷回seczone,到时候NCK计数器超了,会发⽣什么事情我不知道)。
现在解锁了,将来是否能⽤苹果推出的官⽅解锁
如果你现在已经解锁了,并且解锁⼯具是⽤iUnlock 1.0.2 / anysim 1.0.2 / anysim 1.1.1 / anysim 1.1.1p,那么将来苹果推出官⽅解锁的时候,你是可以使⽤苹果官⽅的办法来解锁的,所需要的就是重新修复seczone(1.02)或者重新刷回原⼚baseband firmware(1.0.2 /
1.1.1)
如果你现在已经解锁了,并且解锁⼯具⽤的是iPhoneSimFree推出的付费⽅案的话,我也不知道你将来是否能⽤官⽅的办法。我个⼈觉得:你的机器将来可能连升级1.1.2或者更⾼级的firmware都不⾏了,更别说解锁了,你唯⼀能希望的就是iPhoneSimFree在解锁的时候备份了你的seczone
另外:
觉得⾃⼰运⽓实在太好的朋友,真的想要尝试猜测⾃⼰的NCK的:
先刷回原⼚firmware(恢复⼀次即可),然后参考n000b的这个帖⼦:,按照这个帖⼦的办法进⼊minicom,在minicom输⼊:
AT+CLCK="PN",0,"NCK码"
NCK码从00000000 到 99999999,8位
然后再⽤n000b帖⼦中的办法判断是否已经解锁。
警告:这个办法完全完全完全是按照⽬前的知识得出来的,是否能成功,是否有危险,我完全不知道,
如果你真的要尝试,那我先谢谢你为iPhone机友作出的贡献,请在尝试后告诉我们你的壮烈经过。
警告:如果你尝试了超过NCK计数器的次数还失败了,你的iPhone很有可能就永远属于AT&T了,啊门。人类能在地球上生活多久
<quote>