以下是重构后的内容:
1. 获取应用的IPA文件
a. 打开爱思助手,连接手机,点击引用游戏,搜索想要的APP
b. 在下载界面点击打开文件夹,获取IPA文件
c. 解压IPA包,将IPA包转换为zip包,然后进行解压。
2. 开始反编译IPA包
a. 查看包信息,进入Payload文件目录,例如执行以下命令:codesign -d -v WeChat.app 或者 codesign -d -vv WeChat.app
b. 执行命令,列出钥匙串里可签名的证书:security find-identity -v -p codesigning
c. 首先进入.app包里面,执行命令查看是否加密:otool -l WeChat | grep crypt
如果cryptid等于0表示不加密,可以重签名。
如果cryptid等于1表示加密,不可以重签名。(一般越狱包是不加密的)
d. 重新编辑Frameworks文件夹里面的文件,切换到Frameworks文件夹,逐个执行签名命令。例如:codesign -fs "Apple Development: Brian Gasparini (QG5XRSP5T6)" Adjust.framework
e. 获取描述文件,例如
f. 修改越狱包里面的info.plist文件的 Bundle identifier 为拉进来的描述文件的Bundle identifier
g. 查看描述文件里面的内容,注意里面的权限信息,执行命令查看:security cms -D -i embedded.mobileprovision
创建一个plist文件,命名为:entitlements.plist
使用以下命令将描述文件和entitlements.plist拉进去并签名:codesign -fs "证书串" --no-strict --entitlements=权限文件.plist APP包
例如:codesign -fs "Apple Development: Brian Gasparini (QG5XRSP5T6)" --no-strict --entitlements=entitlements.plist TemplateRoy.app
最后查看是否签名成功。
、重新打包。首先,切换到Payload目录,然后输入以下命令:zip -ry 输出文件 输入文件。这将把输入文件压缩为输出文件,打包成功后会生成一个IPA文件包,接下来就可以安装了。
j、接下来,使用Xcode进行安装。点击Xcode中的"+"号,然后选择刚刚生成的IPA文件进行安装。
3、利用Xcode调试第三方应用
a、创建一个与第三方应用相同的包名,例如WeChat。然后按照上述步骤重签名Framework文件夹。在info.plist文件中更换Bundle identifier。
b、接着,替换一下.app文件,将第三方应用放入其中并替换现有内容。然后运行项目工程。
4、自动化脚本重签名Xcode调试第三方应用
a、创建一个与第三方应用相同的包名,例如TemplateRoy。然后将脚本文件夹拖放到工程目录中,该文件夹包含脚本和第三方IPA文件。
b、在Xcode中编写脚本并执行。直接运行工程即可。
c、Shell脚本文件
以下是重构后的代码:
```bash
# 资源目录,里面放的是ipa包
ASSETS_PATH="${SRCROOT}/SignatureShell/"
# temp目录,放置解压的APP
TEMP_PATH="${SRCROOT}/Temp"
# 目标的ipa包路径
TARCET_IPA_PATH="${ASSETS_PATH}*.ipa"
# 清空Temp文件夹
rm -rf "${TEMP_PATH}"
# 创建Temp文件夹
mkdir -p "${TEMP_PATH}"
# -------解压缩--------
unzip -oqq "${TARCET_IPA_PATH}" -d "${TEMP_PATH}"
# 解压的临时APP路径
TEMP_APP_PATH=$(set -- "${TEMP_PATH}/Payload/*.app"; echo "$1")
echo "临时路径:$TEMP_APP_PATH"
# 拷贝APP路径
TARGET_APP_PATH="${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app"
# 拷贝APP
cp -rf "${TEMP_APP_PATH}/" "${TARGET_APP_PATH}"
# 强制非必要文件删除
rm -rf "${TARGET_APP_PATH}/PlugIns"
rm -rf "${TARGET_APP_PATH}/Watch"
# 修改info.plist,通过PlistBuddy修改
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER)" "${TARGET_APP_PATH}/Info.plist"
# 重签第三方的Frameworks
TARGET_FRAMEWORKS_PATH="${TARGET_APP_PATH}/Frameworks"
for FRAMEWORK in "${TARGET_FRAMEWORKS_PATH}"* do
/usr/bin/codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" "${FRAMEWORK}"
done
```