逆向-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