签名与重签名
签名
:原始数据 --> HASH --> 原来的
证书加密
重签名
:原始数据 -->HASH --> 现在的
证书加密
注意:重签名后WeChat不能登录自己微信账号,不然会被封号
准备工作
越狱微信IPA包 密码:ws80
Myzip
iTerm2/终端
IPhone手机
我们将下载的砸过壳的微信IPA包通过Myzip
解压

CodeSigna手动签名
终端命令
- codesign -vv -d 查看原始签名
- security find-identity -v -p codesigning 列出钥匙串里可签名的证书
- Codesign -fs “证书串” 文件名 强制替换签名
- Chmod +x 可执行文件 给文件添加权限
- security cms -D -i ../embedded.mobileprovision 查看描述文件
- codesign -fs "证书串”--no-strict --entitlements=权限文件.plist APP包
- Zip -ry 输出文件 输人文件 将输人文件压缩为输出文件
查看原始签名
codesign -vv -d Wechat.app

列出钥匙串里可签名的证书
security find-identity -v -p codesigning

查看可执行文件
otool -l
查看Mach-O详细信息
cd WeChat.app
otool -l WeChat

开始重签名
需要重签名的文件
-
WeChat
可执行文件 -
Frameworks
文件夹里面的.framework
文件
不能签名的文件
-
PlugIns
里面的文件(是不能用免费证书签名的),所有不用管它,可以直接删除,不会印象可执行文件的执行 -
Watch
文件里的也是不能重签名的,直接删除,也不会有啥影响
.framework重签名
我们使用哪个账号重签名,就要用对应的证书去创建描述文件
需要使用下面的方法依次遍历执行Framework
文件夹中的.framework
codesign -fs "Apple Development: 1106903517@qq.com (XU65U3794Q)" andromeda.framework

可执行文件重签名
创建描述文件


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

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

然后我们运行成功后,描述文件就会安装到我们的手机上
替换BuildID
复制我们刚刚新建项目中的BuildID(aaa.WeChat1),然后打开WeChat包内容,找到打开Info.plist
,替换里面的BuildID

添加.plist

复制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>

使用Xcode新建一个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

点击Open

点击Replace安装


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

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

shell脚本进行重签名
相关命令
-
source FileName
- 在
当前shell
环境中读取并执行FileName中的命令 - 命令可以强行让一个脚本去立即影响当前的环境(一般用于加载配置文件)。命令会强制执行脚本中的全部命令,而
忽略文件的权限
。
- 在
-
bash FileName、 $zsh FileName
- 重新建立一个
子shell
,在子shell中执行脚本里面的句子。
- 重新建立一个
-
./FileName
- 读取并执行文件中的命令。但有一个前提,脚本文件
需要
有可执行权限。
- 读取并执行文件中的命令。但有一个前提,脚本文件
Mac的文件属性

文件类型和权限

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

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

重新运行就可以了,我们会发现重签名的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
网友评论