科普:目前各种iPhone软件解锁的原理,以及理论上真正完美的解锁
科普:目前各种iPhone
软件解锁的原理,以及理论上真正完美的解锁作者:locomotive
因为最近才买的iPhone
,所以这几天把DEV TEAM
的WIKI
和hackint0sh.org
翻了个遍,补习知识。
目前中文社区上好像还没有人发过这样的帖子,我把这几天看到的总结一下,发一个科普帖。
所有的参考资料都来自DEV TEAM WIKI(
http://iphone.fiveforty.net/wiki)
和hackint0sh.org
,其实很多东西我是粗略的看了一下,以下文章如果有错误的地方,还麻烦指出。
------------------------------------
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
。
你可以这样想,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.com
,也就是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.com
推出的付费方案的话,我也不知道你将来是否能用官方的办法。我个人觉得:你的机器将来可能连升级1.1.2
或者更高级的firmware
都不行了,更别说解锁了,你唯一能希望的就是iPhoneSimFree.com
在解锁的时候备份了你的seczone
另外:
觉得自己运气实在太好的朋友,真的想要尝试猜测自己的NCK
的:
先刷回原厂firmware
(恢复一次即可),然后参考这个帖子:判断最近一次解锁是哪种方法 ,按照这个帖子的办法进入minicom
,在minicom
输入:
AT+CLCK="PN",0,"NCK
码"
NCK
码从00000000
到 99999999
,8
位
然后再用n000b
帖子中的办法判断是否已经解锁。
警告:这个办法完全完全完全是按照目前的知识得出来的,是否能成功,是否有危险,我完全不知道,如果你真的要尝试,那我先谢谢你为iPhone
机友作出的贡献,请在尝试后告诉我们你的壮烈经过。
警告:如果你尝试了超过NCK
计数器的次数还失败了,你的iPhone
很有可能就永远属于AT&T
了,啊门。
n000b2007-10-19 10:41
有关对被破坏的NOR进行修复的最新进展
l2v2eTR9x
更新:刚出现的修复过程尚不完善,有几个关键性的地方需要进一步分析。
*Z-G],wr;iN
更新:早些时候描述的内容有部分并不准确,不过这已经不重要了,重要的是根据进一步的实验,已经证实了以下信息:
1
、老版本anySIM
所进行的解锁是可逆的,之前被破坏的NOR
数据可以复原
-UCYF'P+yn‑l+F#YOer4D2
、IPSF
的解锁不可逆(除非有备份),假如iPhone
为了修复RSA
漏洞升级了bootloader
(迄今为止的所有升级都没有改变bootloader
),所有IPSF
解锁的机器将全部变砖,如果IPSF
之前没有备份utoken
,结果将可能是灾难性的
a
b)u!zj 3
、现在的anySIM 1.1
是最安全的方式,虽然不能抗升级,但是可以保证不变砖(除非程序上出现重大错误)
早些时候的内容:
;@"e1m;x:X1[+d]‑]:BN|0E&H6~V
抽点时间发布一些对NOR
损坏(老版本anySIM
、iUnlock
等软件解锁造成)的修复进展情况。抱歉不能答复大家的帖子。lBR2J dmK6tF2
令人可喜的是,已经找到seczone
的SHA-1
算法TEA
密钥(据称是奇怪的FFFFFFFFFFFFFFFF
)。seczone
是个保护得非常严密的区域,读取和写入都需要非常特殊的方式。这里存储了很多重要数据,比如IMEI
、NCK
计数、锁定表等等。之前硬件解锁的George Hotz
(IRC
人称geohot
)再次出马,加上Zibri
(精英人士,服务于为用户定制专用身份识别设备的公司)、Fred
(精英人士,写程序速度很快)的帮助,昨天已经可以用之前备份的NORdump
重写部分seczone
了。从现在掌握的信息来看,之前由anySIM
等造成的破坏可以修复,而且极有可能是对之前没有备份NORdump
的用户也可以恢复。
0S[i9}y-fSnC
的可写入意味着什么?
1
、之前损坏的NOR
有望恢复
(i!@kw _z L2
、有望实现真正的解所以那些受IMEI
错误困扰的朋友再耐心等待一下吧Q Qu2C‑AN
现在的解锁方法
2M,Rd'R!I!X.p$l ic 1
、修改seczone
的锁定表(locktable
),使手机真正解锁,之后再不受Firmware
升级影响(升级不会重写这部分区域,除非苹果刻意要这么干)。这种方法需要非常了解seczone
的格式,很容易出问题,搞不好就把NOR
数据破坏了。
0L$qG)t2
、给baseband
打补丁,跳过检查。这个方法实际上并没有解锁,只是“
欺骗”
已经解锁而已。当然,带来的副作用也是明显的,Firmware
一旦升级(就像1.0.2
到1.1.1
的升级一样),补丁就被清除了,iPhone
当然立即又回到锁定状态,除非再次打补丁。
$V
z1T`
z(anySIM
早期版本1.0.x
和现在最新版本1.1
都采用第二种方式。早期版本由于打补丁的位置欠妥,导致NOR
被无意中破坏(不是刻意要修改NOR
的,而是由于打补丁的位置不光是验证锁的时候被调用,其他时候也调用了,而且在几种不同的调用情况下要求的返回值不一样,补丁后统一返回了0
,所以把数据无意中破坏了);新版重新仔细选择了打补丁的位置,目前来看没有发现新版破坏NOR
的迹象。
IPSF
采用第一种方式,这也是为什么IPSF
解锁从1.0.2
到1.1.1
升级仍然有效的原因,但他们做的并不完美(看下面)。
2hg&e5LVhOu]IPSF
是不是真的可以抗升级?
-U‑E)b {.yhZ3l
由于对IPSF
的逆向工程进一步深化,现在对它的工作方法更加了解了。新的证据表明(如果我没有理解错的话),IPSF
利用了iPhone
的SHA-1
算法中的一个漏洞,从而用特殊方法可以写入,不过IPSF
同样将一部分token
清0
了。换句话说,IPSF
也破坏了部分NOR
,只是目前没有显现出来(想来这部分数据现在无关紧要)。如果哪一天苹果决定让这些被清除的数据代表某种状态的话,IPSF
的机器也一样变砖头,呵呵,是不是很有趣?
0E\#yRK3B,^‑v
有没有可能研制出100
%可升级(包括以后版本)的解锁?
ub6F q8Mx
只有当苹果官方发售了经过解锁的机器后才有可能。因为苹果可以轻易的判断出是否有解锁存在,而只要苹果愿意,它永远可以轻易的让解锁失效。一旦苹果官方发售经过解锁的机器,就完全可能仿制出一摸一样的机器状态,这时候靠软件就无法区分出来到底是官方解锁还是私下解锁,只有这时候才可能研制出100
%可升级的解锁。在此之前,苹果与破解者之间的猫捉老鼠游戏将一直进行下去,当然Cracker
始终扮演的是弱势的老鼠。
更新:刚做过测试,可以用打补丁(不修复NOR
损坏)的方法让baseband
可以正确返回原来的IMEI
,虽然这还不是恢复,不能升级Modem
,但至少可以用1.1.1 + 03.14.08_G
这种组合了,呵呵,耐心耐心。
判断最近一次解锁是哪种方法
判断最近一次解锁是哪种方法作者:n000b
注:对于经过多次解锁的机器,这个方法只能判定最后一次解锁用的方法。
这个方法的判定前提是机器当前处在解锁状态,刚买到机器的朋友可以参考这个方法知道商家是怎么解锁的。
先把解锁方法分个类:
早期解锁
包括:硬件解锁、anySIM 1.02
、iUnlock
、Unlock.app
、fast_unlock
IPSF解锁
专指SimFree
,http://www.iphonesimfree.com/
新版解锁
专指anySIM 1.1
下面这个方法是用来大致推断解锁方法的:
1
、SSH
登录到iPhone
2
、输入命令: 引用:
launchctl unload/System/Library/LaunchDaemons/com.apple.CommCenter.plist
关闭通信中心
3
、启动minicom
,然后在minicom
里面输入:引用:
AT+XSIMSTATE=1
记录下返回结果的+XLOCK
那一行,然后按Ctrl-A
,再按X
,退出minicom
4
、输入命令: 引用:
launchctl load /System/Library/LaunchDaemons/com.apple.CommCenter.plist
重新打开通讯中心,或者干脆重启iPhone
。
5
、用记录下来的+XLOCK
对比以下结果,可以大致确定解锁方法:引用:
早期解锁:
+XLOCK:"PN",4,0,"PU",5,0,"PP",5,0,"PC",5,0,"PS",5,0
引用:
IPSF
解锁:
+XLOCK:"PN",5,0,"PU",5,0,"PP",5,0,"PC",5,0,"PS",5,0
引用:
新版解锁:
+XLOCK:"PN",1,0,"PU",5,0,"PP",5,0,"PC",5,0,"PS",5,0
注:可能有极少数(尤其是解锁失败过工作不正常的)机器结果不同。b/d:i-fd/VwE6{