iOS 重签名(Xcode)

本文介绍, 借助 xcode 对越狱 app 进行重签名! 相比手动签名, 缩减了一部分工作!

    1. 将破壳 .ipa文件解压, 然后将.app文件 copy 到制定目录下, 备用.(本文采用微信测试)
    1. 删除 .app中扩展文件
      本包中有 watch, plugin两个插件文件夹, 直接将文件夹移除!
    1. .app文件中的 framework 进行手动重签名
      wx.png
    1. 利用Xcode新建项目, 预先在手机上运行一次, 保证新建项目可用.
    • 4.1 修改WeChat.appInfo.plist文件的Bundle identifier与新建工程中Bundle identifier一致!
    • 4.2 将新建工程中的 .app文件 替换为准备好的 WeChat.app.
    1. 运行 xcode, 将重签名的app 安装到手机上, 现在就可以喝啤酒了!
      🍺🍺🍺🍺🍺

相比上篇 手动签名 , 这个就简单多了!

plus:
还可以使用 shell 脚本重签 app!

  • 在 xcode 中build phase 添加脚本.
# ${SRCROOT} 为工程文件所在的目录
 TEMP_PATH="${SRCROOT}/Temp"
#资源文件夹,放三方APP的
ASSETS_PATH="${SRCROOT}/APP"
#ipa包路径
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"

#新建Temp文件夹
  rm -rf "$TEMP_PATH"
  mkdir -p "$TEMP_PATH"

# 1. 解压IPA 到Temp下
unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
# 拿到解压的临时APP的路径
TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")
# 这里显示打印一下 TEMP_APP_PATH变量
echo "TEMP_APP_PATH: $TEMP_APP_PATH"
# -------------------------------------
# 2. 把解压出来的.app拷贝进去
#BUILT_PRODUCTS_DIR 工程生成的APP包路径
#TARGET_NAME target名称
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
echo "TARGET_APP_PATH: $TARGET_APP_PATH"

rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH/"

# -------------------------------------
# 3. 为了是重签过程简化,移走extension和watchAPP. 此外个人免费的证书没办法签extension

echo "Removing AppExtensions"
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/Watch"

# -------------------------------------
# 4. 更新 Info.plist 里的BundleId
#  设置 "Set :KEY Value" "目标文件路径.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"

# 5.给可执行文件上权限
#添加ipa二进制的执行权限,否则xcode会告知无法运行
#这个操作是要找到第三方app包里的可执行文件名称,因为info.plist的     'Executable file' key对应的是可执行文件的名称
#我们grep 一下,然后取最后一行, 然后以cut 命令分割,取出想要的关键信息。存到APP_BINARY变量里
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`

#这个为二进制文件加上可执行权限 +X
chmod +x "$TARGET_APP_PATH/$APP_BINARY"

# -------------------------------------
# 6. 重签第三方app Frameworks下已存在的动态库
TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];
then
#遍历出所有动态库的路径
for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
do
echo "🍺🍺🍺🍺🍺🍺FRAMEWORK : $FRAMEWORK"
#签名
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY"     "$FRAMEWORK"
done
fi

# ---------------------------------------------------
# 7. 注入我们编写的动态库
echo "开始注入"
# 需要注入的动态库的路径  这个路径我就写死了!
#INJECT_FRAMEWORK_RELATIVE_PATH="Frameworks/libHankHook.dylib"

## 通过工具实现注入
#yololib "$TARGET_APP_PATH/$APP_BINARY"     "$INJECT_FRAMEWORK_RELATIVE_PATH"
echo "注入完成"
  • 将破壳的.ipacopy 到工程的 App 目录下, 选择真机直接运行.🍺🍺🍺🍺🍺
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容