iOS应用重签名

2021-04-18  本文已影响0人  木扬音

签名与重签名

签名:原始数据 --> HASH --> 原来的证书加密
重签名:原始数据 -->HASH --> 现在的证书加密

注意:重签名后WeChat不能登录自己微信账号,不然会被封号

准备工作

越狱微信IPA包 密码:ws80
Myzip
iTerm2/终端
IPhone手机

我们将下载的砸过壳的微信IPA包通过Myzip解压

解压IPA

CodeSigna手动签名

终端命令
查看原始签名
codesign -vv -d Wechat.app
查看原始签名
列出钥匙串里可签名的证书
security find-identity -v -p codesigning
钥匙串里可签名的证书
查看可执行文件

otool -l查看Mach-O详细信息

cd WeChat.app
otool -l WeChat
image.png
开始重签名

需要重签名的文件

不能签名的文件

.framework重签名

我们使用哪个账号重签名,就要用对应的证书去创建描述文件
需要使用下面的方法依次遍历执行Framework文件夹中的.framework

codesign -fs "Apple Development: 1106903517@qq.com (XU65U3794Q)" andromeda.framework
.framework重签名

可执行文件重签名

创建描述文件
新建Xcode项目 信任证书

连接手机编译后,就会出现.app


image.png

显示.app包内容,里面就有描述文件


描述文件

然后我们运行成功后,描述文件就会安装到我们的手机上

替换BuildID

复制我们刚刚新建项目中的BuildID(aaa.WeChat1),然后打开WeChat包内容,找到打开Info.plist,替换里面的BuildID

替换BuildID
添加.plist
查看embedded.mobileprovision

复制embedded.mobileprovision文件中的

    <dict>

                <key>application-identifier</key>
        <string>BRLQDNZ4ST.aaa.WeChat1</string>

                <key>keychain-access-groups</key>
        <array>
                <string>BRLQDNZ4ST.*</string>
        </array>

                <key>get-task-allow</key>
        <true/>

                <key>com.apple.developer.team-identifier</key>
        <string>BRLQDNZ4ST</string>

    </dict>
![复制](https://img.haomeiwen.com/i16490557/2cd86410d919838c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

使用Xcode新建一个Entitlements.plist文件,将刚复制的内容粘贴进去
然后再将Entitlements.plist文件复制到下面目录下

Entitlements.plist
Mach-O和App签名

替换权限文件

codesign -fs "Apple Development: 1106903517@qq.com (XU65U3794Q)" --no-strict --entitlements=entitlements.plist WeChat.app
替换权限文件
安装重签名后WeChat

打开Xcode的Devices,点击+选择重签名后的WeChat

image.png
点击Open
image.png
点击Replace安装
image.png
image.png
运行调试WeChat

我们在手机上打开重签名后WeChat,在Xcode上选择Debug -- Attach to Process --- WeChat

运行
等待一会后,就可以进行调试界面
调试

shell脚本进行重签名

相关命令

Mac的文件属性

文件属性
文件类型和权限
文件类型和权限

XCode脚本重签名

新建一个XCode项目,在改项目目录下新建一个.sh文件和APP文件,
将未解压的砸壳WeChat放到APP文件夹中,.sh文件的脚本在文章末尾

image.png
连接手机,运行项目成功后,清空缓存
在新工程中将.sh文件放到Run Script下,记得给.sh文件运行权限
注意:如果是自己的IPA包,要删除info.plist文件中UISupportedDevices字段 image.png

重新运行就可以了,我们会发现重签名的WeChat就安装上了

脚本

# ${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
上一篇 下一篇

猜你喜欢

热点阅读