pa包重签名的方法有以下几种:
1. 修改ipa包后缀为.zip,然后解压得到app资源包。
2. 终端命令:$unzip /.../xx.ipa解压到当前目录。
3. 通过security命令,从embedded.mobileprovision文件中生成一个完整的plist文件。具体操作命令:security cms -D -i /../embedded.mobileprovision > entitlements_full.plist。
4. 获取其中的Entitlements字段。具体操作命令:/usr/libexec/PlistBuddy -x -c 'Print:Entitlements' entitlements_full.plist > entitlements.plist。
为什么要重签名?
1. 没有源代码的情况下,对某个应用进行资源修改,修改后,假如要想让APP能正常运用,该APP肯定要重新签名之后压缩成ipa!
2. 如果你想让你的APP不经过苹果审核,就可以私自发布到HTTPS服务器上,不越狱也能安装,且没有设备台数限制,那么你就要把个人开发者签名,替换成企业开发者In-House证书签名,之后OTA发布就行了。
3. 一个开发者的应用,需要在另一个开发者帐号下发布到App Store。上传的ipa包,是重签名后的包。
4. 过期或者失效签名的应用,正常使用需要重新签名。
如何重签名?工具准备:
1. codesign的命令行工具来实现重签名(自带)。
2. 有效证书和描述文件(xxx.mobileprovision)及对应的Bundle identifier。
3. 重签名的ipa包(App Store下载的包需要砸壳)。
解压ipa包:
方式一:修改ipa包后缀为.zip,然后解压得到app资源包。
方式二:终端命令:$unzip /.../xx.ipa解压到当前目录。
、将生成的文件放置一旁,下面的重签名步骤会用到。
4、替换Bundle identifier:
a. 在APP包中找到info.plist文件,在目录下查找plist即可。
b. 修改info.plist中的Bundle identifier:将其更改为重签名证书对应的Bundle identifier。
5、重签名:
a. 将上面生成的entitlements.plist文件写入。
b. 执行以下命令进行重签名操作:
/usr/bin/codesign --continue -f -s "证书" --entitlements "entitlements文件" "需要签名的app文件"
一般操作示例:/usr/bin/codesign --continue -f -s "iPhone Distribution: ShenZhen Chmtech Science & Technology Co.,Ltd." --entitlements "/.../entitlements.plist" "/.../xxoo.app"
6、将.app资源包拖入iTunes,即可得到ipa包。如果苹果去掉了iTunes应用模块,可以使用脚本进行打包。首先进入脚本存放目录,创建一个名为package.sh的文件,并给予执行权限:
```
$cd /脚本存放目录
$touch package.sh
$chmod +x ./package.sh
```
7、将下面的代码复制到脚本中,并根据实际情况修改下面三处的文件路径:
```
#!/bin/sh #默认填入数据,不填可以不用管 appNameStr="替换为你app的包名"
#eg. Sky appOriginPathStr="替换为你app文件的绝对路径" #eg. xxx/Sky.app appIconPathStr="图标文件绝对路径"
```
请根据提供的内容完成内容重构,并保持段落结构:
```bash
eg. xxx/Icon.png
if [ "$1" ]; then
appNameStr="$1"
fi
if [ "$2" ]; then
appOriginPathStr="$2"
fi
if [ "$3" ]; then
appIconPathStr="$3"
fi
appName=${appNameStr}
appDetailName="${appName}.app"
appPayloadName="${appName}/Payload"
appCopyToPayloadPath="${appPayloadName}/${appDetailName}"
appOriginPath="${appOriginPathStr}"
appIconPath="${appIconPathStr}"
if [ ! -x "$appOriginPath" ]; then
echo "打包路径不存在"
fi
```
以下是重构后的脚本:
```bash
#!/bin/bash
appName="xxx"
appPayloadName="xxx"
appDetailName="xxx"
appOriginPath="xxx"
appCopyToPayloadPath="xxx"
appIconPath="xxx"
exit_status=0
if [ -x "$appName" ]; then
rm -rf "$appName"
echo "Remove folder $appName"
else
echo "folder $appName does not exist"
fi
echo "make dir $appName"
mkdir "$appName"
mkdir "$appPayloadName"
if [ -x "$appDetailName" ]; then
echo "Remove file $appDetailName"
rm -rf "$appDetailName"
fi
echo "copy $appDetailName ..."
cp -r "$appOriginPath" "$appDetailName"
echo "copy $appName to payload" #替换xxx为app名称
cp -r "$appDetailName" "$appCopyToPayloadPath"
echo "copy icon to iTunesArtwork"
cp "$appIconPath" "${appName}/iTunesArtwork"
cd "$appName"
echo "start zip..."
zip -r "${appName}.ipa" Payload iTunesArtwork
exit_status=$?
```
执行以下脚本,即可得到您所需的重签名的iOS签名包:
```
./package.sh 你的app的包名
```
接下来,您需要提供以下信息:
- `.app`文件的绝对路径
- 图标文件的绝对路径(可选,如果您没有提供)
完成以上步骤后,您将在App Store上找到已重签名的包,并在iTunes上下载生成的.ipa文件。
解压下载的.ipa文件:
```bash
unzip your_downloaded_file.ipa -d your_desired_directory
```
然后,切换到解压后的app包目录,检查是否已加密:
```bash
cd your_unzipped_directory/Payload/YourApp.app/
otool -l YourApp.app/YourApp | grep -B 2 crypt
```
如果输出中包含`crypt`,则表示该应用程序已加密;如果输出中包含`0`,则表示该应用程序未加密。
接下来,使用APP砸壳和class-dump工具进行砸壳操作。一般的纯OC项目都可以被破解。破译后,您会得到一个名为`xxoo.decrypted`的文件。将此文件重命名为`xxoo`(去掉后缀),然后用`xxoo`替换app包中的二进制文件(得到解密后的包)。最后,再次按照上述签名流程进行操作即可。