1. 程式人生 > >逆向-002-iOS重簽名

逆向-002-iOS重簽名

在Windows環境下會有,靜默安裝。通過iOS應用重簽名(安裝app到手機上),蘋果簽名機制,防止未授權的應用進行安裝

①獲取應用ipa

②Codesign重簽名

③Xcode自動簽名

④Shell指令碼自動重籤

程式碼重籤第三方應用:加密之後不能進行 一些逆向的分析。越獄應用->一些砸過殼的。(注意這裡ipa是已經砸殼後的ipa)

簽名工具:codesign

1.檢視app的詳細資訊(bundleID, 編碼格式, 許可權:是否iPhone證書籤名過等), 以檢視App是否簽名

$codesign -d -vv WeChat.app

Identifier=com.tencent.xin
Format=app bundle with Mach-O universal (armv7 arm64)
CodeDirectory v=20500 size=1016155 flags=0x0(none) hashes=15872+7 location=embedded
Signature size=4390
Authority=Apple iPhone OS Application Signing
Authority=Apple iPhone Certification Authority
Authority=Apple Root CA
Info.plist entries
=56 TeamIdentifier=88L2Q4487U Sealed Resources version=2 rules=26 files=1018 Internal requirements count=1 size=96

2.檢視本電腦所有證書

$security find-identity -v -p codesigning

 1) 698A3D09E281F93B74C937B5490DB428CDE06F04 "iPhone Distribution: Migu Comic Co., Ltd. (7WHFE6ZA29)" (CSSMERR_TP_CERT_REVOKED)
 2) 2DED305CF5E5F83C6EA394D6D5B9B46F6A56F19F "iPhone Developer: huan Wang (V875LC2EQ8)" (CSSMERR_TP_CERT_REVOKED)

3.檢視App是否加密

1>重定向mach-o(放置程式碼的二進位制檔案),並在桌面生成檔案儲存 (加密可執行檔案)

$ otool -l WeChat > ~/Desktop/123.text

2>檢視App是否越獄

$otool -l WeChat | grep cryptid

正常App cryptid 架構  1

越獄版:   cryptid 架構 0

3>執行的時候是否需要解密:是

加密->加殼

解密->砸殼

砸殼:dump 從記憶體中拿出來 (越獄手機 )

簽名: 密碼學 HASH演算法 非對稱演算法 簽名機制越獄版:修改,除錯,加外掛

4.用Codesign對App進行重簽名

①(開啟越獄版WeChat.app,顯示包內容)刪除PlugIns、Watch資料夾(無法重簽名)

②重籤FrameWorks目錄下的所有庫(對Frameworks重簽名)

$codesign -fs "iPhone Developer: huan Wang (V875LC2EQ8)" ConfSDK.framework

ConfSDK.framework: replacing existing signature

③給可執行檔案執行許可權

$chmod +x WeChat

檢視可執行檔案: WeChat

$ls -l WeChat

-rwxr-xr-x  1 MengYu  staff  141838208  9 28 15:06 WeChat

拷貝Demo編譯的app包的embedded.mobileprovision描述檔案到WeChat的app包中

新建一個工程,新增bundleId,之後點選Product下的.app顯示包內容,找到embedded.mobileprovision.

拷貝此檔案到重簽名的資料夾裡面

修改bundleId(把xcode中Demo的BundleID賦值到Wechat的info.plist檔案的名字中)

⑥獲取描述檔案中的許可權檔案欄位Entitlements,生成entitlements.plist

檢視描述檔案:

$security cms -D -i embedded.mobileprovision

搜尋並複製:Entitlements 這個key和value

新建一個plist檔案,貼上進去,重新命名為entitlements.plist

⑦給整個App重簽名

找到entitlements.plist所在資料夾使用以下程式碼:

$codesign -fs "iPhone Developer: huan Wang (V875LC2EQ8)" --no-strict --entitlements=Entitlements.plist WeChat.app

WeChat.app: replacing existing signature

檢視簽名是否成功:

$codesign -d -vv WeChat.app

檢視Authority是否修改成功:

如果是自己的證書就表明簽名成功。

 

打包ipa並安裝App

建立一個Payload資料夾,把 WeChat.app放進去(PlayLoad和plist一個層級,WeChat.app在Payload裡面)

打包:

cd ..

$zip -ry WeChat.ipa Payload

程式設計成功為WeChat.ipa

開啟Xcode -> Command+Shift+2-> 點選新增:

對越獄App進行除錯

 XCode->debug -> Attach to Process -> Likely Targets

 通過斷點除錯, 注入程式碼,上線App沒有描述檔案,開發除錯才有描述檔案

 

二、利用Xcode重簽名三方應用

①新建同名工程

②修改info.plist

③幹掉該幹掉的(刪掉Watch和Plugins資料夾)

④重簽名Frameworks

⑤給可執行檔案執行許可權

$chmod +x WeChat

新建一個專案,build 一下,將Project.app ShowInFinder 

將上個路徑的WeChat.app替換

除錯:找到第二個Window iConsoleWindow

可以看到按鈕點選的事件執行的操作、注入程式碼(Framework),執行HOOK操作。

 

三、指令碼自動化簽名

①建立同名檔案

②新增以下指令碼程式碼

XCode->TARGET->Build Phases->點選+號->New Run Script Phase

# ${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