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包中的二进制文件(得到解密后的包)。最后,再次按照上述签名流程进行操作即可。