Charles抓包iTunes实现旧版IOS软件安装
最近把尘封已久的iPhone4作为备用机启用,系统依然是“上一个世纪”的IOS6版本,APP Store里所有最新的软件都不提供下载了。好在一些用户量很多的软件,比如微信、QQ、淘宝等,有提供兼容IOS6的低版本下载。但是最近我发现,以前能下载的这些低版本的软件,现在APP Store一律下载超时或失败。想必,苹果是要对IOS6的设备赶尽杀绝了。
很后悔之前把iPhone4上所有的程序都删了,只留下了内置的程序,眼瞅着现在的iPhone4只能打打电话、发发短信和一台诺基亚功能机没什么区别了。想起以前,我在这台iPhone4上玩过的游戏,聊过的天,实在不胜唏嘘。难道就没有办法下载到旧版本的IOS软件了吗?上网搜索一番后发现,天不亡我,真的有办法突破iTunes的限制下载到低版本的软件,我跟着这篇教程撸了一遍,不敢相信的是,我的iPhone4又活了!下面总结一下搞机的心得。
安装抓包软件
首先我们需要一个抓包软件,用来捕获软件的下载地址。Mac上最著名的抓包软件应该就属Charles了吧,至于Windows我一般都是用Fiddler抓包。此次的抓包环境是在Mac上,所以我只会针对Charles进行展开。
我之前使用过Charles来抓安卓手机APP里的包,具体可以看一下这篇文章,MacOS下的抓包工具Charles处理Https请求。安装过程这里就跳过了。
抓取iTunes里下载的应用程序请求
要想抓取低版本的IOS应用程序,必须通过电脑上的iTunes来进行操作。先前我以为,只要在手机的APP Store里,抓到兼容版本的包,用电脑下载应该就能成功。但是当我用Charles抓取iPhone的网络请求时发现,在iPhone上浏览网页,Charles能抓取相应的包,但是在iPhone上打开APP Store,会立马弹出消息,无法连接APP Store。大概是有一层负载还是什么样子的,Charles无法抓取手机里的APP Store的请求。那怎么办呢?
其实抓不到手机上的APP Store的包,但是电脑上可以啊。打开iTunes,登录iTunes Store。然后点击自己的账户,选择已购项目。
从已购项目中挑选一个兼容IOS6版本的程序,那么如何得知程序是否兼容IOS6呢?要么以前你在IOS6上玩过这款APP,要么在手机APP Store中直接下载的时候,会弹出提示,是否下载一个兼容版本。以上两种就是判断某款APP是否有旧版的依据。
我以Beyond Ynth这款APP为例,这是我在iPhone4上唯一玩通关的一款游戏,也是我个人在iPhone上最爱的一款游戏。如果直接通过手机APP Store下载的话,提示超时或失败。因为这款APP我以前下载过,所以直接打开电脑上的iTunes里的已购项目,找到这款APP点击下载,等下载成功了之后,用手机连接电脑,然后点击同步,会提示Beyond Ynth这款游戏需要更高的IOS版本的支持。也就是说,我的iPhone的版本太低了,这款游戏需要更高的IOS版本才能安装。
Charles默认勾选了Mac OS X Proxy选项,通过该设置可以抓取Mac下的网络请求,iTunes也不在话下,无需其它任何配置。可以在Charles里看到,每次在iTunes里的网络请求,Charles里就会多出一条抓包记录。我们可以点击垃圾箱的按钮来清理不需要的抓包记录。
整个过程,我们只需要分三个步骤:
一、登录iTunes Store后,点击账户下的已购项目,
二、找到Beyond Ynth这款游戏后,先清除Charles里刚才抓取的不需要的请求,然后在iTunes里点击下载Beyond Ynth
三、切换回Charles,观察Charles抓取的下载APP的请求。
分析下载APP的抓包记录
可以看到https://p7-buy.itunes.apple.com
网址下的buyProduct
请求就是实际的购买APP的请求了。而我用红色标注的地方就是最关键的所在。
首先,我们要在iTunes里的App Store下下载Beyond Ynth这款游戏。
其次,在Charles里找到buyProduct
请求。
第三,切换回iTunes,停止刚才下载的Beyond Ynth(这一步可选)。
第四,点击Charles里的buyProduct
请求,找到Response
标签页,在其内容里找到array
的XML文。其中的integer
就是版本号了。默认下载会取最新的版本号,也就是最后一个integer
的值。
下载任意版本的IOS APP
上一个步骤后,我们拿到了Beyond Ynth这款游戏的所有版本号,接下来可以任意选择你想安装的版本了,我选了第一个,也就是该游戏上架APP Store后的第一个版本。下载的步骤如下:
一、右键buyProduct
请求,勾选Breakpoints
,也就是要打断点
二、重新在iTunes中,下载Beyond Ynth这款游戏
三、Charles会进入刚才打的断点,先点击Edit Request
标签页,然后点击Text
下标签,最后找到其内容里的string
的XML文,将值修改为刚才你要下载的版本号,点击Execute
按钮执行。
四、接下来还会进入一个断点,是关于返回的响应的,不用修改,直接点击Execute
按钮即可。
五、回到iTunes,看看你的APP Store中是不是已经开始下载APP了呢?恭喜你,这就是你要下载的APP的版本。
通过iTunes同步APP到手机
这一步我就不多描述了,只需要手机连接电脑,同步APP到iPhone不在话下。同步完成后,我又能玩上以前最爱的Beyond Ynth这款游戏了,这种破解快乐已经远远超过游戏本身。
总结
在体验了一把最老版本的Beyond Ynth在iPhone上的表现后,我仿佛体会到了当年刚用上iPhone玩这款游戏时候的丝滑感受,真的是流畅无比。虽然现在IOS6的表现,连上个网都费力,但是玩这些低版本游戏的时候,那是一点都不卡顿的。
为什么我非要折腾这些已经被时代抛弃了的机器?我完全可以在我的6SP上下载Beyond Ynth这款游戏,流畅度肯定比iPhone4上还要好。我只能说,这是一种情怀,一种怀念。当年在iPhone4上玩过的那些游戏,那些为了找限免游戏的日子,都是无比难忘的。现在我的6SP上已经没有任何游戏,但是iPhone4下我还是愿意玩一下的。
最后,有些低版本的APP,可能iPhone4可以安装,但已经无法登录了,比如百度云。所以不是每个低版本的APP都能正常使用,但不妨碍它存在于我的iPhone4上。如果有兴趣的话,可以把每个低版本的APP都装一遍,体会一下每个版本之间的差别,如果真的是闲的蛋疼的话。
补充
不是所有版本的iTunes都能够抓包,我的Mac上的iTunes版本是12.1.2.27。网友说iTunes版本不高于12.6.3.6最后一版都支持iOS11又带App Store。所以更高版本iTunes的朋友,可能该教程就不起作用了。