随着国内版权环境走上正轨以及各公司日渐迫切的商业化需求,我们发现很多“良心”应用已经慢慢地变得不那么良心了。
这时候我们就需要回到应用的某个“良心”版本,对于安卓用户来说,安装一个历史版本很简单,只要搜到一个apk安装包就行了。然而iOS用户就没那么幸运了,正常情况下,从appstore下载的应用是应用的最新版本,无法指定版本。
既然说正常情况下,那是不是应该有非正常情况呢?
今天,给大家介绍一种使用iTunes下载iOS应用的任意历史版本的方法。操作在MacOS上进行,不过主要操作在windows上是一样的。
首先,我们需要两个工具:
1.抓包工具 charles
2.iTunes(这不废话么)
这两个工具的下载和安装就不多说了,网上教程有很多。
一、charles配置
1.检查charles 能否正常工作
首先退出所有代理软件,打开charles和浏览器,随便进入一个网站,观察 charles中是否出现访问记录,如果没有请检查所有代理是否已退出,包括浏览器的代理插件。同时确认chales菜单栏的proxy下的MacOS proxy前是否打勾。
2.配置charles https抓取支持
由于iTunes的访问请求都是https的,所以需要配置https支持。
首先安装charles的ssl证书,点击 Help -> SSL Proxying -> Install Charles Certificate
<br />
系统会自动打开钥匙串,找到下图中的三项:
默认情况下三项都带有红叉,也就是不被系统信任的。
我们右击证书,显示简介,在信任里将“使用系统默认”改为“始终信任”,然后关闭。过程中需要输入系统管理员密码,输入下就好了。
三项证书都修改完成后,关掉钥匙串。
二、iTunes准备工作
要想下载应用的历史版本,我们先要获得它的版本信息。这里我们以获取“追书神器” 2.25.1版本为例。
我们打开iTunes,在商店搜索“追书神器”并下载,当开始下载后停止下载,并连按“Delete”删除任务.
<br />
接着在charles里找到包含
/WebObjects/MZBuy.woa
的记录。
<br />
我们选中该行记录,并将filter下方的选项栏由overview
切换到contents
,发现下面的内容全是乱码。没关系,我们只需要再为charles配置下启用https抓包的站点。
先记录下我们刚抓到的记录中的Host,如图中的“p50-buy.itunes.apple.com”。接着打开charles菜单栏下proxy
里的SSL Proxying Settings
,勾上enable SSL Proxying
,点击下方"Add",在弹出框内填入Host及Port:443,单击OK保存退出。
<br />
完成上述工作后,为了防止混淆,我们使用charles中间一排按钮中的扫帚形状按钮清理下之前的记录。
<br />
重新在iTunes里下载追书神器,再次找到相关记录。这次contents
里终于不再是乱码了。
<br />
接下来是找到我们需要的版本信息了,"CMD + F"搜索
softwareVersionExternalIdentifiers
。
<br />
双击标红的那一行,会跳到我们所需的信息处。
图中一大串“<integer>xxxxxxxxxx</integer>”的项目就是应用在appstore中的版本id,从上到下版本由旧到新。我们需要将这些版本号记录下来。
三、修改请求参数下载应用指定版本
首先我们需要拦截iTunes的下载请求。在我们刚才的记录上右击,选择Breakpoints
,这样就添加了一个断点。
<br />
清理下记录,再次下载“追书神器”。这时请求会被拦截并hold住,charles也会自动弹出断点操作窗口,我们在这里编辑请求信息。
找到
appExtVrsId
项,将下面string内的值改为你要下载版本对应的版本id。比如我要下载的2.25.1版本对应的id是817743478,就改为817743478。
注意:版本对应的id可能需要多次尝试才能找到,这个没有捷径,只能一个一个试。
<br />
修改完成后点击下方的Execute,之后还会有一次来到断点,这次直接点击Execute。
打开iTunes,在你会发现下载的应用的版本已经是你指定的了,最后的工作就是安装到手机上了。
提示:不用的时候要关闭charles或取消之前设置的断点,否则每次iTunes下载应用的时候都会被拦截。