- 前提:越獄ipa包(可以在pp助手下載),Xcode员凝,真機(jī)
重新打包的過(guò)程大致是:
1.解壓ipa包
2.刪除extension和watch(如果有的話就刪除了 钞翔,因?yàn)閭€(gè)人賬號(hào)是不能給插件簽名的削彬,至于watch就不用用了嘛)
3.修改Info.plist文件,要保持目標(biāo)app包中Info.plist文件中的Bundle identifier和工程中的BundleID 一致
4.給macho文件添加執(zhí)行權(quán)限
5.重簽Frameworks(因?yàn)閄code運(yùn)行工程的時(shí)候是不會(huì)給frameworks重新簽名的)
大致的步驟就是以上幾點(diǎn)。接下來(lái)先給大家介紹一個(gè)用腳本快速重簽的方法
1.首先新建一個(gè)Xcode工程 在工程目錄下新建一個(gè)APP的文件夾1.png
2.在工程中新增一個(gè)腳本運(yùn)行 如圖
2.png
然后在腳本里粘入如下代碼
ASSETS_PATH="${SRCROOT}/APP"
TEMP_PATH="${SRCROOT}/temp"
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"
#刪除temp文件夾下的內(nèi)容 然后新建
rm -rf "${SRCROOT}/temp"
mkdir -p "${SRCROOT}/temp"
#-----------------------------
#1.解壓ipa 到temp下
unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
#拿到解壓的臨時(shí)的app路徑
TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")
#echo "路徑是:$TEMP_APP_PATH"
#-----------------------------
#2. 將解壓出來(lái)的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
# 設(shè)置 "Set : KEY Value" "目標(biāo)文件路徑"
#/usr/libexec
# CFBundleIdentifier
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"
#-----------------------------
#5. 給可執(zhí)行文件上執(zhí)行權(quán)限
#拿到macho 文件路徑
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`
#上權(quán)限
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
- 現(xiàn)在將你要重簽的ipa包放到工程下的APP文件夾下使兔,然后運(yùn)行就ok了。
注意: 這個(gè)只是一個(gè)簡(jiǎn)單的重簽藤韵,我拿微信試的ok虐沥,但是qq不行,大家也可以下載MonkeyDev進(jìn)行ipa重簽泽艘。
- 補(bǔ)充: 如果大家覺(jué)得每次都要復(fù)制這么多在工程中很復(fù)雜欲险,可以這么做:
1.新建一個(gè)shell.sh腳本文件,然后將上面那個(gè)腳本復(fù)制進(jìn)去匹涮。
2.我們?cè)诠こ讨型瑯有枰赽uile Phases中添加一個(gè)run script 天试,在里面寫(xiě)上你的shell.sh的路徑就ok啦,
3.最后然低,你還需要給腳本添加執(zhí)行權(quán)限喜每,cd 到腳本路徑下
$ chmod +x shell.sh
====================分割線==================
上面講了用腳本自動(dòng)重簽名,接下來(lái)說(shuō)一下用命令重簽
首先將我們的目標(biāo)ipa解壓脚翘,在Payload中拿出xxx.app文件 灼卢,xxx.app文件在下文中統(tǒng)稱為 目標(biāo)app
1.新建一個(gè)工程,用真機(jī)運(yùn)行一下来农,然后可以看見(jiàn)如下圖位置有一個(gè)autoSign.app的包
3.png
2.接著我們show in finder 鞋真。在文件中用目標(biāo)app
替換原來(lái)的autoSign.app包,注意:我們要把目標(biāo)app的名字改成autoSign.app的名字
3.現(xiàn)在我們已經(jīng)替換了app包了沃于,接著我們右鍵顯示包內(nèi)容涩咖,在包內(nèi)我們要做以下幾個(gè)事
1.修改Info.plist 中的Bundle identifier 海诲,這個(gè)Bundle Identifier必須和工程中的一致
2.刪除插件和watch包 刪除PlugIns文件夾和Watch文件夾(如果有的話就刪)
3.對(duì)framework進(jìn)行重簽名 首先用終端cd到
xxx/xxx.app/Framework
目錄下 。
用命令$ codesign -fs "iPhone Developer: XXX (Q6NXXXXX)" xxx.framework
其中 "iPhone Developer: XXX (Q6NXXXXX)" 是你要用的證書(shū)檩互。
ps: 查看證書(shū)命令$ security find-identity -p codesigning
4.手動(dòng)給macho文件添加執(zhí)行的權(quán)限
cd到目標(biāo)app路徑下 特幔,執(zhí)行命令$ chmod +x autoSign
,工程的macho文件和我們的工程是同名的闸昨,比如我的app叫autoSign.app ,那么macho文件叫autoSign蚯斯。將autoSign
替換成你的目標(biāo)app中的macho文件。
5.在次運(yùn)行你的工程
=================分割線======================
隨便說(shuō)說(shuō)饵较,我也不知道怎么分類了拍嵌。
- 配置文件相關(guān)
- cd 到配置文件路徑下
$ cd /Users/xxx/Library/MobileDevice/Provisioning\ Profiles
然后我們可以通過(guò)$ls
查看當(dāng)前文件夾下的文件列表 - 查看某個(gè)配置文件的具體信息
$ security cms -D -I xxx.mobileprovision
- cd 到配置文件路徑下
- 查看簽名信息
先解壓ipa包,然后cd到包里的Payload路徑下 循诉,然后執(zhí)行命令
$ codesign -vv -d xxx.app
我們拿出一小段來(lái)看
Executable=/Users/donkey/Desktop/微信-6.6.5(越獄應(yīng)用)/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
字段表面沒(méi)有簽名信息横辆。這是下載別人已經(jīng)砸過(guò)殼的應(yīng)用。大家可以自行對(duì)比一下正版的應(yīng)用
查看可執(zhí)行文件的加密信息 可以用這個(gè)用來(lái)看app包有沒(méi)有被加密
$otool -l WeChat | grep crypt
cryptid 0
說(shuō)明沒(méi)有加密cryptid 1
說(shuō)明加密全命令簽名茄猫,不通過(guò)Xcode那種 狈蚤。
1.需要修改描述文件的指向,先通過(guò)查看描述文件的命令打開(kāi)描述文件(配置文件)
2.取出下面一段生成一個(gè)Plist文件划纽,放在與目標(biāo)app同級(jí)
<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.簽名整個(gè)app
codesign -fs "iPhone Developer: xxx (Q6xxxxxx)" --no-strict --entitlements=en.plist xxx.app
PS: 之前的去插件脆侮、簽名framework、給macho文件權(quán)限依舊要做阿浓,然后才是第2點(diǎn)的修改描述文件他嚷,第3點(diǎn)的簽名整個(gè)app
4.將新簽名好的app打包成ipa ,cmd + shift +2
打開(kāi)設(shè)備芭毙,如下圖
================分割線====================
安裝好后進(jìn)行動(dòng)態(tài)的調(diào)試 Debug -> Attach to Process -> 你要調(diào)試的進(jìn)程