Click here to Close
 
打印

[转载] 关于"处女"..

关于"处女"..

科普:目前各种iPhone软件解锁的原理,以及理论上真正完美的解锁
科普:目前各种iPhone软件解锁的原理,以及理论上真正完美的解锁作者:locomotive
因为最近才买的iPhone,所以这几天把DEV TEAMWIKIhackint0sh.org翻了个遍,补习知识。
目前中文社区上好像还没有人发过这样的帖子,我把这几天看到的总结一下,发一个科普帖。
所有的参考资料都来自DEV TEAM WIKI(http://iphone.fiveforty.net/wiki)hackint0sh.org,其实很多东西我是粗略的看了一下,以下文章如果有错误的地方,还麻烦指出。
------------------------------------
1iPhone的硬件
iPhone的硬件配置比较高,虽然卖得是比较贵,但是相对于Nokia N95之类的比起来,iPhone造价肯定比N95贵不少。
现在初步相信iPhoneCPU是一个Samsung S5L8900,这个CPU是具有A-GPS3G功能的(这是后话),但是iPhoneGSM模块采用了另外一个完全独立的系统,就是我们常说的baseband,这个baseband有自己的firmware(操作系统)和CPU(是一个S-GOLD2,西门子的手机也是采用这个CPU),而且,通俗点说,baseband还有自己的闪存用来记录目前baseband的状态,这个闪存被称为NOR,我们所说的seczone就在其中。这个baseband单独拆下来经过小改,也够当一个手机用了。
所以实际上iPhone是非常复杂的一个手机。我们每次所谓更新firmware,实际上是更新iPhonefirmware(就是OS X Darwin),而bbupdater则是更新basebandfirmware
你可以这样想,iPhone是一个电脑,这个电脑上插了一个联通CDMA卡,你使用电脑可以打电话发短信和上网,问题是联通CDMA卡被锁死了,只能上联通,如果要解锁,怎么办?通过修改电脑的操作系统(Windows XP)是不行的,因为控制在CDMA卡手里,所以你必须想办法通过Windows XP来修改CDMA卡上的系统,才能达到解锁的目的。
2,完美的解锁
有些人会问了,什么才是所谓的完美解锁?现在的解锁有什么不完美?
完美的解锁,就是真解锁,如果你的iPhone完美的解锁了,你的iPhone不需要任何打过补丁的baseband firmware,你的iPhone可以随着Applefirmware升级随时升级,不会有任何问题,而且,你的整个iPhone系统,就是Apple原汁原味的系统,没有任何改动!
就像软件的破解一样,完美解锁,就是注册码,软件还是那套软件,输入注册码后就注册了,完美,而目前的解锁,实际上都是注册机,把软件中的某些地方打了补丁。
那么,怎么样才能实现完美解锁?刚才我们提到了,iPhonebaseband的资料都存在NOR里,是的,NOR里保存了目前baseband的状态,其中就有目前iPhone的解锁状态,iPhone出厂的时候,都给锁在ATT的网络里了。
到这里有些人想问了:那么我们把这个状态改成解锁,不就完美了么,是的,但是,问题是:
1,只有通过basebandfirmware,也就是baseband的操作系统,才能读写NOR,而且NORseczone的控制及其严格,想要直接发指令写入,是不可能的。
2basebandfirmwareApple数字签名过的,意思就是说,只有Apple自己的1024位的私匙签名过的firmwarebaseband才会运行。
3,最重要的一点,我们不知道要往NOR seczone里面写入什么,才能解锁,因为NOR seczone里数据都是加密过的,不是0就是锁,1就是解锁这么简单,每台iPhoneNOR在加密前可以是一样的,但是加密后每台都是不一样的,而且这个加密机制,也只有通过Apple的私匙才能算出来。
那么,想要达到完美解锁,需要怎么做?
实际上,你可以通过iPhoneminicomiPhonebaseband发送指令,其中有一条指令,就是用来解锁的,而且我们明确知道这条指令是什么,就是:
AT+CLCK="PN",0,"xxxxxxxx"
注意到后面那8x了吗?那些x就是你的解锁码,unlock code,或者专业说法,叫做NCKNetwork 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 code123,它只知道如果别人告诉我123,我按照Apple的暗号算一下,如果算出来和"鸭子鸡鹅"一样,那么别人告诉我的code就是对的了。当然实际上这个过程不是这么简单,否则你一猜就能破译这个密码了,按照目前的计算机水平,把这个unlock code通过hash过的值逆算回来,几乎是不可能的。
那么,我们穷举行吗?不就是一个8位数嘛?我们从00000000试到99999999,总有一个对吧?这个方法理论上可以,但是实际上行不通,原因又两个:
1,按照粗略结算,关把这些1亿个指令发给iPhone尝试,就要35天,并且还不考虑iPhone算需要多久。
2,最关键的,iPhonebaseband NOR seczone中,有一个NCK计数器,一旦你尝试3-10次失败,你的baseband将会硬件烧死在AT&T上。
所以,目前来说,iPhone完美解锁,还没有,相信如果Apple不出大错误,也不会有,除非Apple到时候官方推出解锁,那才是完美解锁。
3,目前的解锁
目前iPhone上有3种软件解锁,分别是:
1iUnlock / Anysim 1.0.2 / iUnlock Reloaded 这些都是同一种,都是使用了iUnlock的核心代码。
2iPhoneSimFree.com,也就是IPSF提供的需要花钱购买的解锁。
3Anysim 1.1.1
3种解锁,都不是完美解锁!
目前相信,这3种方法的工作原理如下:
iUnlock
iUnlock通过直接在baseband firmware上打补丁(我不知道他们怎么跳过了苹果的签名检查,我知识不够),跳过了baseband firmware对的NOR token(这个token就是hash过的NCK挂钩的值)检查,然后发送AT+CLCKbaseband要求解锁,由于token的检查已经被跳过这个时候实际上发送什么NCK iPhone都会同意解锁,这样解锁后的baseband会修改seczone中的lockstate table,但是这么做的结果就是NOR中的数据不再是"合法"的了,因为我们根本不知道真正能够满足tokenNCK什么,只不过因为在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 iPhoneRSA算法的一个漏洞,一个很大的Bug,通过利用这个BUG,他们把NOR seczone中的token清零(全部清空),然后再构造一个特别的lockstate tableiPhone在启动校验token / locktable 合法性时候,因为这个BUG,导致这个全部是0token + locktable得以合法验证,所以iPhone认为这个机器是合法解锁的了。
这个bug1.1.1升级的时候苹果还没有补上,所以IPSF的机器在升级1.1.1之后可以继续保持unlock
但是,这么做的后果是不堪设想的!我上面说了,每个机器的token都不一样,每个iPhonetoken全世界唯一,除了苹果知道,没有人知道, IPSFiPhonetoken清零,目前在这个bug还没有补上的时候,IPSF解锁过的iPhone还能用,但是当苹果在修补这个漏洞后,要么就别升级,要么升级后IPSF iPhone就变废铁了,而且基本上无药可救。
Anysim 1.1.1
最新推出的Anysim 1.1.1应该是目前最好的软解,Anysim 111的原理和iUnlock不一样,Anysim 111完全不去动seczone里的tokenlockstate table,整个解锁过程不需要发送AT+XCLK指令,如果你解锁用minicom运行后就知道lockstate table还是锁住的状态,anysim 111用的是在baseband firmware上打补丁,跳过了所谓mnc检查(network check,实际是什么我也不是很明白)完全欺骗了iPhone,让iPhone认为自己解锁了。这个方法的好处就是:seczone完全没有动过,内容完全,之后如果Apple再升级baseband firmware,大不了我们的手机重新锁死,应该是不会再变砖了。
所以,目前所谓变处女"的方法,就是把iUnlock修改seczonelocktable重新改回来。至于IPSF解锁后破坏的seczone,就得听天由命了……
------------------------------------
1028日更新
------------------------------------
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,那么将来苹果推出官方解锁的时候,你是可以使用苹果官方的办法来解锁的,所需要的就是重新修复seczone1.02)或者重新刷回原厂baseband firmware1.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 999999998
然后再用n000b帖子中的办法判断是否已经解锁。
警告:这个办法完全完全完全是按照目前的知识得出来的,是否能成功,是否有危险,我完全不知道,如果你真的要尝试,那我先谢谢你为iPhone机友作出的贡献,请在尝试后告诉我们你的壮烈经过。
警告:如果你尝试了超过NCK计数器的次数还失败了,你的iPhone很有可能就永远属于AT&T了,啊门。
n000b2007-10-19 10:41
有关对被破坏的NOR进行修复的最新进展
l2v2eTR9x
更新:刚出现的修复过程尚不完善,有几个关键性的地方需要进一步分析。
*Z-G],wr;iN 更新:早些时候描述的内容有部分并不准确,不过这已经不重要了,重要的是根据进一步的实验,已经证实了以下信息:
1、老版本anySIM所进行的解锁是可逆的,之前被破坏的NOR数据可以复原
-UCY­F'P+yn‑l+F#YOer4D2IPSF的解锁不可逆(除非有备份),假如iPhone为了修复RSA漏洞升级了bootloader(迄今为止的所有升级都没有改变bootloader),所有IPSF解锁的机器将全部变砖,如果IPSF之前没有备份utoken,结果将可能是灾难性的
a
b)u!zj 3、现在的anySIM 1.1是最安全的方式,虽然不能抗升级,但是可以保证不变砖(除非程序上出现重大错误)
早些时候的内容:
;@"e1m;x:X1[+d]‑]:BN|0E&H6~V抽点时间发布一些对NOR损坏(老版本anySIMiUnlock等软件解锁造成)的修复进展情况。抱歉不能答复大家的帖子。­lBR2J dmK6tF2令人可喜的是,已经找到seczoneSHA-1算法TEA密钥(据称是奇怪的FFFFFFFFFFFFFFFF)。seczone是个保护得非常严密的区域,读取和写入都需要非常特殊的方式。这里存储了很多重要数据,比如IMEINCK计数、锁定表等等。之前硬件解锁的George HotzIRC人称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.21.1.1的升级一样),补丁就被清除了,iPhone当然立即又回到锁定状态,除非再次打补丁。
$V
z1T`
z(anySIM早期版本1.0.x和现在最新版本1.1都采用第二种方式。早期版本由于打补丁的位置欠妥,导致NOR被无意中破坏(不是刻意要修改NOR的,而是由于打补丁的位置不光是验证锁的时候被调用,其他时候也调用了,而且在几种不同的调用情况下要求的返回值不一样,补丁后统一返回了0,所以把数据无意中破坏了);新版重新仔细选择了打补丁的位置,目前来看没有发现新版破坏NOR的迹象。
IPSF采用第一种方式,这也是为什么IPSF解锁从1.0.21.1.1升级仍然有效的原因,但他们做的并不完美(看下面)。
2hg&e5LVhOu]IPSF是不是真的可以抗升级?

-U‑E)b {.yh­Z3l由于对IPSF的逆向工程进一步深化,现在对它的工作方法更加了解了。新的证据表明(如果我没有理解错的话),IPSF利用了iPhoneSHA-1算法中的一个漏洞,从而用特殊方法可以写入,不过IPSF同样将一部分token0了。换句话说,IPSF也破坏了部分NOR,只是目前没有显现出来(想来这部分数据现在无关紧要)。如果哪一天苹果决定让这些被清除的数据代表某种状态的话,IPSF的机器也一样变砖头,呵呵,是不是很有趣?
0E\#yRK3B,^‑v有没有可能研制出100%可升级(包括以后版本)的解锁?

ub6F q8M­x

只有当苹果官方发售了经过解锁的机器后才有可能。因为苹果可以轻易的判断出是否有解锁存在,而只要苹果愿意,它永远可以轻易的让解锁失效。一旦苹果官方发售经过解锁的机器,就完全可能仿制出一摸一样的机器状态,这时候靠软件就无法区分出来到底是官方解锁还是私下解锁,只有这时候才可能研制出100%可升级的解锁。在此之前,苹果与破解者之间的猫捉老鼠游戏将一直进行下去,当然Cracker始终扮演的是弱势的老鼠。


更新:刚做过测试,可以用打补丁(不修复NOR损坏)的方法让baseband可以正确返回原来的IMEI,虽然这还不是恢复,不能升级Modem,但至少可以用1.1.1 + 03.14.08_G这种组合了,呵呵,耐心耐心。


判断最近一次解锁是哪种方法
判断最近一次解锁是哪种方法作者:n000b

注:对于经过多次解锁的机器,这个方法只能判定最后一次解锁用的方法。
这个方法的判定前提是机器当前处在解锁状态,刚买到机器的朋友可以参考这个方法知道商家是怎么解锁的。
先把解锁方法分个类:
早期解锁
包括:硬件解锁、anySIM 1.02iUnlockUnlock.appfast_unlock
IPSF解锁
专指SimFreehttp://www.iphonesimfree.com/
新版解锁
专指anySIM 1.1
下面这个方法是用来大致推断解锁方法的:
1SSH登录到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{

TOP

很长   不知道跟处女什么事..

TOP

技术贴......
潜力贴留名
LS比我还快......

[ 本帖最后由 LK_Harry 于 2008-7-24 20:18 编辑 ]

TOP

恢复处女就是要恢复NOR计数器清零..早期的解锁.会使用NOR有记录这里说的很清楚....
BL 4.6的看不不用看,,
如果4.6真的想恢复..可以尝试降BL3.9用Ziphone ..命令行..Ziphone -R..(如果没有记错)

1.0.2的..如果担心直接Ziphone -R ,然后升级.用后期的解锁方法,,就永不担心这个问题了..

愚人之间,如有错误请指出..

[ 本帖最后由 阿哉 于 2008-7-24 20:23 编辑 ]

TOP

长知识了!

TOP

以前 1.02版本用老的anySIM 解锁 要处女下..
1.02升1.1.1的时候我搞过.. 前几天直接过渡到2.0

TOP

学习了,谢谢~~~~~~~~~~~~~~

TOP