阅读 694

iOS逆向之旅(进阶篇) — 重签名APP(二)

使用Xcode进行重签名【这种方式就相对简单很多了】

步骤:

1.新建一个Xcode工程

2.从微信的ipa包解压后拿出.app文件,进行替换

image.png
3.接下操作该包

  • 删除PlugIns/Watch文件夹
  • 替换成自己的bundleid,找到info.plist进行修改

修改info.plist里面的Bundle ID 【这个Bundle ID 必须跟我们刚新建的工厂的Bundle ID一致】

image.png

  • 用证书重签名Framewroks下面的框架

签名动态库【这里需要把.app/Frameworks目录下的所有动态库进行签名】 codesign -fs "iPhone Developer: XXX (XXXXXXXX)" mars.framework codesign -fs "iPhone Developer: XXX (XXXXXXXX)" MMCommon.framework codesign -fs "iPhone Developer: XXX (XXXXXXXX)" MultiMedia.framework codesign -fs "iPhone Developer: XXX (XXXXXXXX)" WCDB.framework

4.Xcode运行,便可以把该WeChat跑到自己的手机上了

####使用XCode脚本自动签名 在项目下创建一个APP的文件夹,只要在哪个文件夹放置ipa包,就能制动重签名安装到自己的手机【仿照Monkey】 1.先将需要重签名的ipa包放置到APP目录下

image.png

2.往项目添加一个脚本文件

image.png

3.往脚本中写入自动化签名步骤

image.png

脚本信息(其实这些步骤都是我们手动签名做的事)

# ${SRCROOT} 这个是工程目录
TEMP_PATH="${SRCROOT}/Temp"
# 资源文件夹
ASSETS_PATH="${SRCROOT}/APP"
# ipa包路径
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"

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

# --------------------------------------
# 1. 解压IPA 到Temp下
# 解压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:$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
复制代码

####使用Monkeydev自动签名 #####步骤

image.png

  • 把砸了壳的IPA包放到Target目录下

image.png
直接运行就可以跑到我们的手机上了 #####Monkeydev的原理 我们到同样的地方就能发现,Monkeydev也有自己的脚本
image.png
里面也做了同样重签名的操作,这里有兴趣的自己去看,我就不多做解释了

【晚点我再把这几个项目的源码上传分享出来...】