1、获取应用的IPA

a、打开爱思助手,链接手机,点击引用游戏,搜索想要的APP

Ios反编译ipa包_重签名

b、在下载界面点击打开文件夹,拿到IPA文件

Ios反编译ipa包_Ios反编译ipa包_02

c、解压IPA包,将IPA包换成zip包,然后在进行解压。

Ios反编译ipa包_描述文件_03

2、开始反编译IPA包

a、查看包信息,进入Payload文件目录,比如执行该命令:codesign -d -v WeChat.app 或者 codesign -d -vv WeChat.app

Ios反编译ipa包_重签名_04


Ios反编译ipa包_重签名_05

b、执行命令,列出钥匙串里可签名的证书:security find-identity -v -p codesigning

Ios反编译ipa包_重签名_06

c、我们先进入.app包里面去,执行命令查看是否加密:otool -l WeChat | grep crypt
如果cryptid等于0表示不加密,可以重签名。
如果cryptid等于1表示加密,不可以重签名。(一般越狱包是不加密的

Ios反编译ipa包_描述文件_07


Ios反编译ipa包_重签名_08

d、重新前面Frameworks文件夹里面的文件,切到Frameworks文件夹,执行命令一个一个签名。
比如:codesign -fs "Apple Development: Brian Gasparini (QG5XRSP5T6)" Adjust.framework

Ios反编译ipa包_重签名_09

e、去拿描述文件,比如

Ios反编译ipa包_描述文件_10


Ios反编译ipa包_Ios反编译ipa包_11

f、修改越狱包里面的info.plist文件的 Bundle identifier 为拉进来的描述文件的Bundle identifier

Ios反编译ipa包_描述文件_12

g、开始查看一下描述文件里面的内容,里面的权限内容需要用到,执行命令查看:security cms -D -i embedded.mobileprovision 创建一个plist文件,名字命名为:entitlements.plist

Ios反编译ipa包_重签名_13

h、将描述文件和entitlements.plist 拉进去。然后执行命令:codesign -fs "证书串" --no-strict --entitlements=权限文件.plist APP包
比如:codesign -fs "Apple Development: Brian Gasparini (QG5XRSP5T6)" --no-strict --entitlements=entitlements.plist TemplateRoy.app
然后查看是否签名成功

Ios反编译ipa包_重签名_14


Ios反编译ipa包_重签名_15


Ios反编译ipa包_描述文件_16

i、重新打包。切到Payload的目录,输入命令:zip -ry 输出文件 输入文件 将输入文件压缩输出文件,打包成功会生成一个IPA文件包,这就可以安装了

Ios反编译ipa包_重签名_17

j、然后用xcode安装就可以了。点击+号,然后选择IPA包进行安装

Ios反编译ipa包_重签名_18

3、利用Xcode调试第三方应用

a、创建一个和第三方一样的包名,比如WeChat,然后重签名Framework文件夹,上面的d步骤,然后在info.plist文件换Bundle identifier 上面的 f 步骤
b、然后换一下.app 文件,将第三方的放进去里面进行替换,然后运行项目工程

Ios反编译ipa包_Ios反编译ipa包_19

4、自动化脚本重签名Xcode调试第三方应用

a、创建一个和第三方一样的包名,比如TemplateRoy,然后将脚本文件夹拉进工程目录,里面有脚本和第三方IPA文件

Ios反编译ipa包_ide_20


Ios反编译ipa包_Ios反编译ipa包_21

b、在xcode中把脚本写进去进行执行,直接运行工程就可以了

Ios反编译ipa包_重签名_22

c、shell脚本文件

#资源目录,里面放的是ipa包
ASSETS_PATH="${SRCROOT}/SignatureShell/"
#ASSETS_PATH=""
#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