注:此手段仅用于iOS开发技术交流,请勿用于商业及非法用途,如产生法律纠纷与本人无关。
作者最初研究这个的原因是,因为Xcode升级,出现了一些意想不到的bug,而排查、修复bug又太花时间,情况紧急。因为只需要替换地址和版本号,于是考虑采用更新旧安装包的方式。
需要准备的内容
- iOS安装包一个(ipa文件)
- 发布证书(导入在钥匙串中)
一般自己开发的都会有吧 - 描述文件
同上
原理
- ipa文件可以通过修改后缀名为zip解压,得到app的资源文件和一个可执行文件。
我们能修改的只有资源文件,比如plist,图片,多语言strings等,包括bundle里的资源文件。
如果是cordova项目有本地h5文件的,也可以替换(作者没有试过)
但是如果修改了里面的文件,再压缩改回去,这个安装包是没有办法安装的,因为签名验证不通过。
- 一般enterprise安装包和adhoc安装包在证书过期之后是需要重新打包/重签名的,过期的安装包重签名之后就可以重新使用了。
所以,我们可以通过修改资源文件,再将修改后的不可用的安装包通过重签名的方式使其可用
比如版本号,一般直接重签名的话,版本号是不会变的,但是有些分发平台要求新版本必须版本号+1(比如Air Watch),这样的话重签名的安装包是没有办法上传的。
而App版本号一般都放在Info.plist文件里,我们只需要修改这个文件里的版本号,重新压缩,改回ipa,再重签名,就能得到一个新版本的App了。
重签名工具(Github):iResign
关于App安全保护
鉴于以上操作可以修改App的资源文件,考虑安全的话,可以在打包前检测一下资源文件的md5,并将校验写到代码中,可以防止恶意修改,禁止启动app,甚至上报。
由于解压包可以查看资源文件,建议敏感信息(比如secret)不要直接放到资源文件里。
网友评论