快装、快用、搜苹果等实现签名非越狱安装App Store ipa 安装

大侠们,不久前突然看到快装、快用、搜苹果等号称正版非越狱安装IPA等软件,我研究了一下,基本看起来是重新签名了IPA,研究了半天,用的个人证书签了半天也没有实现。
基本采用的是codesign这个工具,到最后,软件同步上的时候能启动,但是到了启动画面就闪退了,坛子中有研究这个玩意儿的么?
说说他们是怎么解决的,没实现的也看看,说说自己的想法,一起讨论讨论。

闪退是因为授权不对。。。

那你玩儿过这个没?
我也知道不对,但是也不知道该怎么签名才对了。基本步骤是
1.拷贝mobileprovision;
2.用codesign签名;
3.打包安装。
启动以后就闪退了。

我猜的,大概的原理应该差不多,但细节不一定都对:
不越狱往里面写文件不复杂,只要调用iTunes的接口的就可以了,参照iFunbox及各种助手。但是iOS对代码是要校验的,写进去的东西如果跟本机存放的证书不符,是无法运行的,程序会闪退。快用的原理是把快用本地的证书和程序一起写到用户的iOS里去,而且这里的程序是正版的。简单来说,就是这样:快用下载收费app → 调用iTunes接口提取本地证书及ipa → 证书及ipa从快用服务器传到客户端 → 客户端调用iTunes接口将证书及ipa导入用户手机。这个过程相当于用户把手机插到快用服务器上同步了一次,快用做的工作是把这个本地同步的过程给远程化了

iOS对代码是要校验的,写进去的东西如果跟本机存放的证书不符,是无法运行的,程序会闪退。
我是用开发者证书自己的mobileprovision来签的名,然后也能安装上,但是运行到启动页面(貌似没有加载完毕)的时候就闪退了。

快用的原理是把快用本地的证书和程序一起写到用户的iOS里去,而且这里的程序是正版的。简单来说,就是这样:快用下载收费app → 调用iTunes接口提取本地证书及ipa → 证书及ipa从快用服务器传到客户端 → 客户端调用iTunes接口将证书及ipa导入用户手机。这个过程相当于用户把手机插到快用服务器上同步了一次,快用做的工作是把这个本地同步的过程给远程化了。

这里我是直接下载的App Store里面的ipa,然后解包,塞真机测试证书,打包的。然后手动同步,最后就闪退。我把我操作的代码发上去,你看看大概步骤,我感觉跟你说的也差不多。

2 个赞

基本对ipa(App store 正常下载)的操作,解包、重新签名、在打包的操作如下:

#!/bin/sh

#获取第一个参数,也就是要用于重新签名的IPA名称,带后缀.ipa
OLD_IPA=$1
#获取第二个参数,也就是重新签名之后的IPA名称,不带后缀
NEW_IPA=$2

#所用的Provisioning Profile文件
RESIGN_PROVISION=“.mobileprovision"
#所用的证书名称
RESIGN_CERT="

#你的IPA解压之后,在Payload文件里面的那个文件夹名称后缀是.app
APPNAME=“亚马逊”
#解压IPA,并记录log
unzip $OLD_IPA > resign.log
#删除原来的签名和mobileprovision文件
rm -r “Payload/$APPNAME.app/_CodeSignature”
rm -r “Payload/$APPNAME.app/embedded.mobileprovision”

#拷贝新的profile文件
cp “$RESIGN_PROVISION” “Payload/$APPNAME.app/embedded.mobileprovision”

#重新签名
/usr/bin/codesign -f -s “$RESIGN_CERT” --resource-rules “Payload/$APPNAME.app/ResourceRules.plist” “Payload/$APPNAME.app”

echo “$RESIGN_CERT”

#压缩IPA
zip -qr “$NEW_IPA.ipa” Payload

rm -r “Payload”

我不知道我了解的对不对,据说是签了企业开发正帐号的签名,企业开发真帐号是可以无限安装的

原理就像@snakeninny说的那样,就是购买正版应用,然后模拟iTunes的授权过程,@xingbei说的企业版证书其实现在也有这样做的,但是这样做的会有问题,就是推送和内购无法实现,现在这类不越狱免费装的还有衍生出各种做法,就是直接给用户一个AppleID和对应密码,但是这个AppleID只能购买免费应用,里面没有充值金额的,不过这种做法还是比较小众的,一般做法就是购买正版应用,然后模拟iTunes的授权过程。

我记得有个签名工具,可以直接对应用进行重新签名的,你可以试下,具体是什么工具,我也忘记了,如果你用那个签完名能安装,不闪退的话,那就说明你代码可能少了哪个步骤了。
不越狱免费装的原理不是像你说的那样重新签名的,就是花真金白银购买正版应用,然后模拟iTunes的授权过程的。

嗯嗯,这个企业账号无限装是对的,但是他的安装包也要经过处理,我现在想到的处理办法就只有重新签名,但是现在签出来不对。

签名工具叫iresign,我试过了,还是闪退的。现在情况是,别人没有发到App Store的ipa我拿来重新签名是可以的,但是App store里面的签出来就闪退。

我看他们都还是模拟安装过程的,你知道模拟安装是怎么回事么?
你说的账号这个问题貌似没有看到过,账号跟自己申请一个账号貌似没有区别。

模拟安装过程没错,就像你iTunes上登陆你购买应用的那个账户,然后授权,进行同步的时候就能把已购买的应用同步到你的机子上一样,那些公司的做法就是逆向出授权的这一过程,把购买应用的账号所对应的授权文件通过调用授权接口写入设备,这样用这个账号购买的应用在这台机子上就不会出现闪退的情况。

问下:
1·我怎么找到这个购买应用所对应的授权文件?
2·怎么通过授权接口(或者授权接口是什么)导入设备啊?

我试过你这种方式,是可以安装成功的。闪退的情况有很多。
你的mobileprovision里的Bundle ID是否通用的?或者和你要签名的ipa的Bundle ID是否一致?
你的mobileprovison里是否添加了你的设备的UDID?
你是用的是什么类型的证书?developer还是distribution?

你试着对越狱过的APP签名,然后安装在未越狱机器上,这样一般是可以的。。。
要不然,通过appstore下载app到本地,通过OTA发布安装,但会提示登录appstore或是闪退。

你好 snakeninny
按照你说的我是否可以理解为 拿到ipa之后用企业证书重签名,然后放到自己的服务器上面供大家下载?

企业证书重新签名过后,原来的那层签名还在不在?如果原来那层签名还在的话就不行。
你可以把证书理解成钥匙,ipa中的签名是锁:一把锁配一把钥匙,原来的锁还在,你就要用原来的钥匙先开锁;至于你自己给它加锁配钥匙,对原来的锁是不影响的

嗯大概了解。
我的想法是itunes下载app 通过破壳拿到ipa 这个时候的签名是已经被去掉了的
还是需要手动去掉?

砸壳之后应该就已经去掉了,手动自动只是过程,无所谓,结果是对的就行了。你可以试试砸壳后把整个App给搬到/Applications/下,看看App能不能正常运行,可以的话应该就没问题了