刚开始搞ios逆向分析的时候想找一个合适的测试机也是挺麻烦的,新买的设备不能越狱还贵,二手的设备一般又没有还原锁密码,后来终于从箱底找到了个iphone5,但是版本太老了,从appstore里安装的应用都提示不兼容“Download an older version of this app? The current version requires IOS 9.0 or later ...”,又不敢轻易升级,担心跟上一块从二手店里买的6s一样变砖(刷机后需要激活锁密码)。
后来查到可以在iTunes下载时抓包分析改下参数就可以从iTunes里下载到老版本的ipa文件,于是自己尝试了一下,好了,废话连篇。
1. mac安装Charles,并安装根证书授权,mac版和win不太一样的地方就是需要去“钥匙串访问”里授权。
2. 打开iTunes,去“appStore”里面搜索要下载的应用(以“facebook”为例),并点击下载,这时可以在Charles里看到类似 “https://p25-buy.itunes.apple.com” 的请求,然后对该请求下断点,同时因为这是条https请求,所以要将链接复制加入“SSL Proxying Setting”中。
3.等待应用下载完成后去iTunes的“资料库”中找到下载完成的应用,右键目标选择“在finder中显示”,然后在finder中将文件彻底删除,最后再次回到iTunes的appStore中搜索该应用再次下载该应用,此时会在第二步中下的端点处停下,第一次停下是发出Request请求,点击“Execute”,第二次停下是收到了Response回应,第二次停下时点击“Edit Response”,选择“XML Text”选项,可以看到如下内容,并保存下来。
```
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<plist version="1.0">
<dict>
... ...
... ...
<key>softwareVersionBundleId</key><string>com.facebook.Facebook</string>
<key>softwareVersionExternalIdentifier</key><integer>830380613</integer>
<key>softwareVersionExternalIdentifiers</key>
<array>
<integer>18372</integer>
... ...
... ...
<integer>2927134</integer>
<integer>2994689</integer>
<integer>3110723</integer>
<integer>3127322</integer>
<integer>3151184</integer>
<integer>3248735</integer>
<integer>3539776</integer>
<integer>3611071</integer>
<integer>3680022</integer>
<integer>3759852</integer>
<integer>3926286</integer>
<integer>4095539</integer>
<integer>4153214</integer>
<integer>4429604</integer>
<integer>4438870</integer>
<integer>4827909</integer>
<integer>5507927</integer>
<integer>5880588</integer>
<integer>9138323</integer>
<integer>10528067</integer>
<integer>11444640</integer>
<integer>11983243</integer>
<integer>12152835</integer>
<integer>12235437</integer>
<integer>12795110</integer>
<integer>13558845</integer>
<integer>13840059</integer>
<integer>13875036</integer>
<integer>14115688</integer>
<integer>14701724</integer>
<integer>15051581</integer>
<integer>15095799</integer>
... ...
... ...
</array>
<key>vendorId</key><integer>10684</integer>
<key>hasFamily</key><false/>
</dict>
</dict>
</dict>
</plist>
```
softwareVersionBundleId: 当前下载应用的Bundle ID;
softwareVersionExternalIdentifier: 值为“ 830380613”,与下面array中的数字一样表示版本序号。
4.如要下载版本序号为“ 14115688”的ipa文件,可以删掉下载的文件,再次点击下载应用,在发出Request请求时触发断点,点击“Edit Request”中的“XML Text”,其中的“appExtVrsId”的值就是当前正要请求下载的版本号,将之修改为我们想要的版本号,这里输入“ 14115688”,点击继续,等待下载完成即可得到目标ipa。【tip:下载即将结束时断点也会断下来,注意一下点击“Execute”即可】。
5.这里的“830380613”、“14115688”是和对应facebook210.0、Facebook197.0是相互对应的,这个也是可以查询到的:
在iTunes中查询应用时,单击目标应用下拉菜单,选择“复制链接”,
例如,facebook的链接是“https://itunes.apple.com/us/app/facebook/id284882215?mt=8”,提取其中的ID“ 284882215”,然后访问“https://api.unlimapps.com/v1/apple_apps/284882215/versions”,其中的“284882215”是我们替换掉的上面的ID,访问结果:
对比其中的版本号和ID即可选择我们想要的id。