第一步:获取脱壳的ipa包
1、越狱手机导出
2、各类网站上下载的ipa。
3、各类助手上下载越狱版ipa包
第二步:命令行实现重签名
1、 将ipa解压缩后前往.app所在的目录,输入
1
codesign -d -vv IpaDownloadTool.app
然后输出可执行文件的签名信息
1 2 3 4 5 6 7 8 9 10 11 12 13
Executable=/Users/tgkj/Downloads/Payload/IpaDownloadTool.app/IpaDownloadTool Identifier=cn.zxlee.IpaDownloadTool Format=app bundle with Mach-O universal (armv7 arm64) CodeDirectory v=20400 size=4444 flags=0x0(none) hashes=130+5 location=embedded Signature size=4798 Authority=iPhone Distribution: Siyuan Zhang (XW95KAQH96) Authority=Apple Worldwide Developer Relations Certification Authority Authority=Apple Root CA Signed Time=Aug 20, 2019 at 2:06:16 PM Info.plist entries=33 TeamIdentifier=XW95KAQH96 Sealed Resources version=2 rules=10 files=49 Internal requirements count=1 size=188
这里可以看到签名相关的信息
2、查看Mac本地的证书列表:
1
security find-identity -v -p codesigning
输出
1 2 3
57950B1A87C9A8E42F39B6E87EF37B34972FF4F4 "iPhone Distribution: Ji..... BE01D5144626C1DC4330FF66B0B8924DA13AA06B "iPhone Develo....
记下你要用来签名的证书双引号(包括双引号)中的字符串,一会儿会用到
3、确认ipa包是否已经脱壳,输入:
1 2 3
cd IpaDownloadTool.app otool -l IpaDownloadTool | grep crypt
输出
1 2 3 4 5 6
cryptoff 16384 cryptsize 376832 cryptid 0 cryptoff 16384 cryptsize 409600 cryptid 0
cryptid 为0 即为已脱壳,为1为加密状态。这里有两组数据是因为这是个支持两种CPU架构的可执行文件。可输入file IpaDownloadTool
查看可执行文件支持的架构
输出
1 2 3
IpaDownloadTool: Mach-O universal binary with 2 architectures: [arm_v7:Mach-O executable arm_v7] [arm64:Mach-O 64-bit executable arm64] IpaDownloadTool (for architecture armv7): Mach-O executable arm_v7 IpaDownloadTool (for architecture arm64): Mach-O 64-bit executable arm64
4、删除无法签名的插件文件:PlugIns文件夹、Watch文件夹 note:没有这2个文件夹跳过这步
5、对.app文件夹内的Frameworks文件夹中的每一个framework强制重签名
1
codesign -fs 步骤2中记下的证书信息 要签名的.framework
note:这里Frameworks要签名的直接跳过这步
6、将自己的描述文件名改为embedded.mobileprovision,并拖入到.app中,再将.app中info.plist文件里的Bundle identifier改成我们自己的BundleID
7、在.app同级目录下 新建一个entitlements.plist文件
1
touch entitlements.plist
在.app目录下查看描述文件内容:security cms -D -i embedded.mobileprovision
将Entitlements
节点下的
1 2 3 4
<dict> ... ... </dict>
复制粘贴到刚刚新建的entitlements.plist文件中
8、最后一步,对整个包签名,回到.app所在目录,输入
1
codesign -fs 步骤2中记下的证书信息 --no-strict --entitlements=entitlements.plist WeChat.app
9、打包
1
zip -ry IpaDownloadTool.ipa Payload
以上,就是通过命令行一步步的实现应用重签名。
用脚本实现签名
1、创建 appSign.sh 文件
2、拷贝一下内容到 appSign.sh
文件中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
#${SRCROOT} 它是工程文件所在的目录 TEMP_PATH="${SRCROOT}/Temp" #资源文件夹,我们提前在工程目录下新建一个APP文件夹,里面放ipa包 ASSETS_PATH="${SRCROOT}/APP" #目标ipa包路径 TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa" #清空Temp文件夹 rm -rf "${SRCROOT}/Temp" mkdir -p "${SRCROOT}/Temp" #---------------------------------------- # 1. 解压IPA到Temp下 unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH" # 拿到解压的临时的APP的路径 TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1") # echo "路径是:$TEMP_APP_PATH" #---------------------------------------- # 2. 将解压出来的.app拷贝进入工程下 # BUILT_PRODUCTS_DIR 工程生成的APP包的路径 # TARGET_NAME target名称 TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app" echo "app路径:$TARGET_APP_PATH" rm -rf "$TARGET_APP_PATH" mkdir -p "$TARGET_APP_PATH" cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH" #---------------------------------------- # 3. 删除extension和WatchAPP.个人证书没法签名Extention rm -rf "$TARGET_APP_PATH/PlugIns" rm -rf "$TARGET_APP_PATH/Watch" #---------------------------------------- # 4. 更新info.plist文件 CFBundleIdentifier # 设置:"Set : KEY Value" "目标文件路径" /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist" #---------------------------------------- # 5. 给MachO文件上执行权限 # 拿到MachO文件的路径 APP_BINARY=plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d>|cut -f1 -d<
#上可执行权限 chmod +x "$TARGET_APP_PATH/$APP_BINARY" #---------------------------------------- # 6. 重签名第三方 FrameWorks TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks" if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ]; then for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"* do #签名 /usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK" done fi
3、然后将 appSign.sh 直接丢到.xcodeproj同级目录 中
4、Xcode –> Build Phases –> New Run Script Phase
5、Run
note:这里Xcode编译可能会报的错
1: appSign.sh: Permission denied
解决办法:在终端上直接运行命令: chmod 777 appSign.sh
2: Xcode Internal launch error: process launch failed: Unspecified
网上找的重启手机,或者重新连接Xcode都没用。后面再找找答案
本文转载:https://juejin.im/post/5c460908f265da6167209b87
近期评论