iOS应用重签名

签名与重签名

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

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

准备工作

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

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

解压IPA

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
image.png
开始重签名

需要重签名的文件

  • WeChat可执行文件
  • Frameworks文件夹里面的.framework文件

不能签名的文件

  • PlugIns里面的文件(是不能用免费证书签名的),所有不用管它,可以直接删除,不会印象可执行文件的执行
  • Watch文件里的也是不能重签名的,直接删除,也不会有啥影响

.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://upload-images.jianshu.io/upload_images/16490557-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脚本进行重签名

相关命令

  • source FileName

    • 当前shell环境中读取并执行FileName中的命令
    • 命令可以强行让一个脚本去立即影响当前的环境(一般用于加载配置文件)。命令会强制执行脚本中的全部命令,而忽略文件的权限
  • bash FileName、 $zsh FileName

    • 重新建立一个子shell,在子shell中执行脚本里面的句子。
  • ./FileName

    • 读取并执行文件中的命令。但有一个前提,脚本文件需要有可执行权限。

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、越狱版应用重签名(正版的需要砸壳,这个以后介绍) 应用重签名需要以下几个步骤: 删除插件和带有插件的.app包...
    绿叶竹林阅读 1,498评论 0 1
  • 本文我们将重签名一个App,实现将他人的App安装到自己手机上,然后进行部分的调试工作。 需要准备的资料: 1、安...
    裸奔的蜗牛z阅读 1,219评论 1 0
  • 前言 在逆向过程中,当我们对IPA包发生改动时,就需要对IPA包进行重新签名,才可以重新安装到我们的iOS设备中。...
    jackss阅读 991评论 0 0
  • 七律·长征作者: 毛泽东红军不怕远征难,万水千山只等闲。五岭逶迤(wēi yí)腾细浪,乌蒙磅礴(páng bó)...
    冰雨9527阅读 823评论 0 0
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,617评论 0 11