- 前提:越狱ipa包(可以在pp助手下载),Xcode,真机
重新打包的过程大致是:
1.解压ipa包
2.删除extension和watch(如果有的话就删除了 ,因为个人账号是不能给插件签名的,至于watch就不用用了嘛)
3.修改Info.plist文件,要保持目标app包中Info.plist文件中的Bundle identifier和工程中的BundleID 一致
4.给macho文件添加执行权限
5.重签Frameworks(因为Xcode运行工程的时候是不会给frameworks重新签名的)
大致的步骤就是以上几点。接下来先给大家介绍一个用脚本快速重签的方法
1.首先新建一个Xcode工程 在工程目录下新建一个APP的文件夹
2.在工程中新增一个脚本运行 如图
然后在脚本里粘入如下代码
ASSETS_PATH="${SRCROOT}/APP"
TEMP_PATH="${SRCROOT}/temp"
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 工程生成包的路径
#TARGET_NAME
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
#echo "app路径是:$TARGET_IPA_PATH"
rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH"
#-----------------------------
#3. 删除extension和watch
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/watch"
#-----------------------------
#4. 修改 info.plist
# 设置 "Set : KEY Value" "目标文件路径"
#/usr/libexec
# CFBundleIdentifier
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"
#-----------------------------
#5. 给可执行文件上执行权限
#拿到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.重签名第三方app 第三方的frameworks
TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ] ; then
#echo "六六六:$FRAMEWORK";
for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
do
#echo "包的路径:$FRAMEWORK"
#签名
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
done
fi
- 现在将你要重签的ipa包放到工程下的APP文件夹下,然后运行就ok了。
注意: 这个只是一个简单的重签,我拿微信试的ok,但是qq不行,大家也可以下载MonkeyDev进行ipa重签。
- 补充: 如果大家觉得每次都要复制这么多在工程中很复杂,可以这么做:
1.新建一个shell.sh脚本文件,然后将上面那个脚本复制进去。
2.我们在工程中同样需要在buile Phases中添加一个run script ,在里面写上你的shell.sh的路径就ok啦,
3.最后,你还需要给脚本添加执行权限,cd 到脚本路径下
$ chmod +x shell.sh
====================分割线==================
上面讲了用脚本自动重签名,接下来说一下用命令重签
首先将我们的目标ipa解压,在Payload中拿出xxx.app文件 ,xxx.app文件在下文中统称为 目标app
1.新建一个工程,用真机运行一下,然后可以看见如下图位置有一个autoSign.app的包
2.接着我们show in finder 。在文件中用目标app
替换原来的autoSign.app包,注意:我们要把目标app的名字改成autoSign.app的名字
3.现在我们已经替换了app包了,接着我们右键显示包内容,在包内我们要做以下几个事
1.修改Info.plist 中的Bundle identifier ,这个Bundle Identifier必须和工程中的一致
2.删除插件和watch包 删除PlugIns文件夹和Watch文件夹(如果有的话就删)
3.对framework进行重签名 首先用终端cd到
xxx/xxx.app/Framework
目录下 。
用命令$ codesign -fs "iPhone Developer: XXX (Q6NXXXXX)" xxx.framework
其中 "iPhone Developer: XXX (Q6NXXXXX)" 是你要用的证书。
ps: 查看证书命令$ security find-identity -p codesigning
4.手动给macho文件添加执行的权限
cd到目标app路径下 ,执行命令$ chmod +x autoSign
,工程的macho文件和我们的工程是同名的,比如我的app叫autoSign.app ,那么macho文件叫autoSign。将autoSign
替换成你的目标app中的macho文件。
5.在次运行你的工程
=================分割线======================
随便说说,我也不知道怎么分类了。
- 配置文件相关
- cd 到配置文件路径下
$ cd /Users/xxx/Library/MobileDevice/Provisioning\ Profiles
然后我们可以通过$ls
查看当前文件夹下的文件列表 - 查看某个配置文件的具体信息
$ security cms -D -I xxx.mobileprovision
- cd 到配置文件路径下
- 查看签名信息
先解压ipa包,然后cd到包里的Payload路径下 ,然后执行命令
$ codesign -vv -d xxx.app
我们拿出一小段来看
Executable=/Users/donkey/Desktop/微信-6.6.5(越狱应用)/Payload/WeChat.app/WeChat
Identifier=com.tencent.xin
Format=app bundle with Mach-O universal (armv7 arm64)
CodeDirectory v=20200 size=503759 flags=0x0(none) hashes=15735+5 location=embedded
Signature size=4297
Authority=(unavailable)
Info.plist=not bound
TeamIdentifier=88L2Q4487U
Sealed Resources version=2 rules=19 files=822
Internal requirements count=1 size=96
Authority
字段表面没有签名信息。这是下载别人已经砸过壳的应用。大家可以自行对比一下正版的应用
查看可执行文件的加密信息 可以用这个用来看app包有没有被加密
$otool -l WeChat | grep crypt
cryptid 0
说明没有加密cryptid 1
说明加密全命令签名,不通过Xcode那种 。
1.需要修改描述文件的指向,先通过查看描述文件的命令打开描述文件(配置文件)
2.取出下面一段生成一个Plist文件,放在与目标app同级
<dict>
<key>keychain-access-groups</key>
<array>
<string>5AGKMCU79F.*</string>
</array>
<key>get-task-allow</key>
<true/>
<key>application-identifier</key>
<string>5AGKMCU79F.*</string>
<key>com.apple.developer.team-identifier</key>
<string>5AGKMCU79F</string>
</dict>
3.签名整个app
codesign -fs "iPhone Developer: xxx (Q6xxxxxx)" --no-strict --entitlements=en.plist xxx.app
PS: 之前的去插件、签名framework、给macho文件权限依旧要做,然后才是第2点的修改描述文件,第3点的签名整个app
4.将新签名好的app打包成ipa ,cmd + shift +2
打开设备,如下图
================分割线====================
安装好后进行动态的调试 Debug -> Attach to Process -> 你要调试的进程