非越狱机通过Xcode对ipa进行重签名

  • 前提:越狱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的文件夹
非越狱机通过Xcode对ipa进行重签名_第1张图片
1.png

2.在工程中新增一个脚本运行 如图


非越狱机通过Xcode对ipa进行重签名_第2张图片
2.png

然后在脚本里粘入如下代码


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
  1. 现在将你要重签的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的包


非越狱机通过Xcode对ipa进行重签名_第3张图片
3.png

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.在次运行你的工程

=================分割线======================
随便说说,我也不知道怎么分类了。

  • 配置文件相关
    1. cd 到配置文件路径下
      $ cd /Users/xxx/Library/MobileDevice/Provisioning\ Profiles
      然后我们可以通过 $ls查看当前文件夹下的文件列表
    2. 查看某个配置文件的具体信息
      $ security cms -D -I xxx.mobileprovision
  • 查看签名信息
    先解压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同级

    
        keychain-access-groups
        
            5AGKMCU79F.*
        
        get-task-allow
        
        application-identifier
        5AGKMCU79F.*
        com.apple.developer.team-identifier
        5AGKMCU79F
    

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打开设备,如下图

非越狱机通过Xcode对ipa进行重签名_第4张图片
4.png
可以将ipa运行到手机上。

================分割线====================

安装好后进行动态的调试 Debug -> Attach to Process -> 你要调试的进程

你可能感兴趣的:(非越狱机通过Xcode对ipa进行重签名)