写在前面的破事
iphone 用了也 1 年多了, 3gs41 周前,各种升级,越狱,解锁都是用人家的,玩的有些腻了,闲的有些蛋疼,正好Limera1n 突降,虽然早已经 4.1 自制 4.1 也已经玩腻了,但还是想再次追求破处那一瞬间,但是我是日版,不能升级基带。但是用绿雨必然要用官方固件,看到小雨伞可以保护基带升级(没看到只支持 iphone4 ),就毅然的尝鲜了,更新中间没有产生 1005 错误,当时心一沉,等待 iphone 重新启动成功,看到雨伞中显示的基带版本 05.14.02 ,我也不知道为啥没有沮丧,嘴角竟然露出了一抹微笑,嘿嘿,这下好玩了……
抛砖引玉
我再这么 balabala 写下去,估计大家都来喷我了,开始正题了,首先我也一个程序员,别人能做到的事情,我们国人为什么不行呢,与其每天无聊的刷论坛等软解,不如去实际的去做点事情,由于之前没有接触过 mac 的开发。一切从零开始,经过了一周的调查研究,算是初有成果,我也不知道最终能不能解锁,但是研究,学习的过程就是另外一种收获吧。我这里把我了解到的东西,拿出来和大家分享,也算是抛砖引玉吧,还有很多棘手的课题要大家一起来协助解决。(由于个人知识有限,而且第一次接触 mac 的开发,所以必然有很多错误的理解,甚至是低级的,希望大家能够理解,并且及时指出,大家共同进步。)
软解的由来
软解顾名思义就是用软件的方法来解锁,为何 3G/3GS/4 要软解呢? 因为苹果为了应对 2G 的解锁,加入了很多的验证机制,基带的 BootLoader 需要通过 BootRom 的验证,基带内的程序,又要通过 BootLoader 的验证,而这个验证实在相应程序启动之前进行,所以任何关于 BootLoader 以及基带程序的修改都是不允许的。那么我们怎么解锁呢 ? 大概方法有三!
1、 使用一个特殊的 SIM 卡,保证它既可以通过苹果的认证,又能通过电信商验证。
3G 2.2 版本之前的卡贴,大概都是这个原理。通过苹果只验证两次 IMSI 漏洞。
详细请大家百度( iPhone sim 破解原理 )
2、 基带程序运行之后,找到一个漏洞,注入代码,修改解锁部分程序, ultraSn0w , BlackSn0w 都是利用这个原理。因为只是修改 ram 的破解,所以每次重启动,或者基带 reset 都需要重新注入代码。
3、 利用基带 BootLoader 的漏洞,降级基带的程序,然后通过 ultraSn0w 来解锁, 3G 的 5.8 版本的基带就存在这样的漏洞。但是这个只有一小部分机器可以受益。
AT 命令
没有什么意外,我们都是通过方法 2 进行解锁的,那么第二种方法是如何解锁的呢,和一般的 PC 漏洞攻击差不多,如果对方是封闭的那么我们一点办法没有,可是基带要和手机通信,所以我们就有机会,而基带和手机通信的方法就是 AT命令, AT 命令有很多,具体大家请百度,如果大家想要尝试 AT 命令也可以,需要在手机上装一个 minicom ,还需要MobileTerminal ,不过我建议大家装 openssh ,这样通过 putty 或者其他 SSH 客户端在电脑上操作很方便。
1) 先要用 minicom –s 进行设定
2) 修改 Serial Port setup 中的 Serial Deceive 为 /dev/tty.debug , Save setup as df1 ,然后选择 Exit ,进入命令模式。
3) 输入命令 AT 进行测试,个别时候不好用,可能是被其他设备占用,重新启动一般可以好用,建议卸载 ultraSn0w后进行尝试。
4) 输入 At 后,如果显示 OK ,则表示成功 (要不关闭飞行模式)
5) At+xgendata 获得基带的一些信息,其中我们可以看到基带版本号。
如果输入命令没有回显,我们可以先输入 ate1 回车,设置回显模式 ON ,再重新输入就可以看到我们输入的命令了。其他的命令还有很多,大家可以继续百度,一般的命令都是通用的。大家可以随便玩,万一哪个命令输入之后,导致基带 crash 了,一定要记下来,他有可能就是一个可利用的漏洞,嘿嘿 ~ ,不过不要轻易公布哦,让苹果知道了,他们可就补上了。
缓冲区溢出
什么是缓冲区溢出式攻击呢,其实是 CPU 架构加上 C 语言的弱边界检查,导致的代码注入式攻击,以前 windows 的冲击波等,都是利用这种漏洞进行攻击的。
具体的技术细节,大家可以参考如下连接,虽然是讲解 windows 上的溢出攻击,但是原理基本上是相同的。
http://www.vckbase.com/document/viewdoc/?id=1503 缓冲区溢出攻防 作者:局部变量
从 4.26.08 到 5.13.04 的基带解锁,其他都是一条 AT 命令完成解锁( ultraSn0w )
解锁我们只需要一条指令!!
以下的资料来源于大神们维护的 wiki ( http://theiphonewiki.com/wiki/index.php )
(英文好的可以自己浏览(需要翻墙),后续我会进行详细的解读)
4.26.08 : at+xlog=1,"dddddddddddddddddddddddddddd44445555PPPP"
d 都是填充数据,让基带程序的堆栈溢出,覆盖如下的寄存器
R4=4444 , R5=5555 , PC=PPPP
R4,5,6 是 ARM CPU 的寄存器, PC 是程序计数器,也就是说我们通过这样一个命令,可以改变程序的正常动作,而修改 PC 可以让程序跳转到我们想要跳转的地址。当然如上的命令并不是真正的解锁命令(真正的后续将进行详细的讲解)
5.11.07 , 5.12.01 , 5.13.04 ( ip4 : 1.59.00 ):
at+xapp="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4444555566667777PPPP"
其中 R7=7 ,其他的和 xlog 的如出一辙,这个漏洞可以保持 3 版本基带就是因为 Dev term 没有更早的放出漏洞的原因,才没有被修补,所以大家要理解为什么不能升级一个版本出一代解锁,漏洞是要保留的,都浪费掉了,以后有大的升级就不能及时解锁,这个就会更郁闷,所以还是管住自己的手才对。
5.14.02 :(主角登场了)
经过我的研究也发现了一个可以 crash 基带的命令,嘿嘿,暂时保密。目前还不能完全证明是否是可以溢出的漏洞,但是通过在 5.13.04 基带上验证,基本上可以和 xapp 效果类似。
超雪解锁代码解析
下面开始讲解核心部分之一,超雪的注入代码解析。
未完待续,敬请期待………………