iOS逆向之代碼簽名(九)

代碼簽名過程

App包上傳到AppStore的簽名過程

1、App上傳到AppStore之前已經用私鑰對App進行了簽名;
2、iPhone手機從AppStore下載App,手機會對下載下來的包用手機里面內置的公鑰進行解密校驗。

iPhone里面內置的公鑰是在操作系統里面,隨著操作系統下發的手機的

Mac電腦、蘋果服務器、蘋果手機之間的交互

Mac電腦、蘋果服務器、蘋果手機之間的交互.png

1、Mac電腦通過鑰匙串->證書助理->從證書機構頒發證書生成一個CSR文件,這個文件的本質是存儲的公鑰,此操作會生成一對公鑰和私鑰,可用如下命令查看CSR文件的信息

$openssl asn1parse -i -in CertificateSigningRequest.certSigningRequest

2、將CSR文件上傳到蘋果服務器,蘋果服務器會生成一個證書,證書下發到Mac電腦和私鑰進行關聯;蘋果服務器還會將Provision profile文件也下發到Mac電腦,這個文件里面記錄了設備IDs、AppID、Entitlement權限

證書及私鑰.png

3、從Mac電腦運行生成的App包,里面會有源碼、MachO執行文件、App簽名信息、描述文件,其實就是用Mac電腦里面的私鑰對App進行了簽名

4、App安裝到手機,手機里面內置在操作系統里面的公鑰會對App的簽名信息進行解密校驗,通過即可安裝打開

在簽名過程中需要用到的常用命令

查看描述文件信息:
$security cms -D -i 描述文件路徑

查看APP的簽名信息
$codesign -vv -d APP路徑

查看本機所有證書
$security find-identity -v -p codesigning

查看可執行文件的加密信息!
$otool -l WeChat | grep crypt

簽名
$codesign -fs "證書" 需要簽名的文件

對三方App進行代碼重簽名

一、手動簽名

微信重簽名步驟:

1、干掉插件Plugins文件夾里面的內容;
2、Watch 直接干掉;
3、對 Frameworks 進行簽名;

$codesign -fs "證書" 需要簽名的文件

4、給可執行文件執行權限;

$chmod +x WeChat

5、拷貝Provision profile描述文件;
6、修改info.plist 的 Bundle identifier;
7、生成plist的權限文件(Entitlements.plist);

使用**$security cms -D -i 描述文件路徑**查看描述文件信息,拷貝Entitlements里面的
<dict>
        <key>keychain-access-groups</key>
        <array>
            <string></string>
        </array>
        <key>get-task-allow</key>
        <true/>
        <key>application-identifier</key>
        <string></string>
        <key>com.apple.developer.team-identifier</key>
        <string></string>
        <key>aps-environment</key>
        <string>development</string>
    </dict>

8、簽名整個APP!

$codesign -fs "iPhone Developer: WenHan Li (6ZBE4C573L)"  --no-strict --entitlements=en.plist WeChat.app

9、打包其實就是一個zip

$zip -ry WeChat.ipa Payload

二、利用Xcode重簽名

1、新建一個工程,然后執行build,讓Products文件夾下面的app變黑;
2、拷貝微信的app文件包到新建工程,替換新工程里面的app文件包,包名稱保持一致;
3、干掉插件Plugins文件夾里面的內容;
4、Watch 直接干掉;
5、對 Frameworks 進行簽名;

$codesign -fs "證書" 需要簽名的文件

4、給可執行文件執行權限;

$chmod +x WeChat

5、修改info.plist 的 Bundle identifier;
6、Xcode運行。

三、腳本自動化重簽名

# ${SRCROOT} 為工程文件所在的目錄
TEMP_PATH="${SRCROOT}/Temp"
#資源文件夾,放三方APP的
ASSETS_PATH="${SRCROOT}/APP"
#ipa包路徑
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"



#新建Temp文件夾
rm -rf "$TEMP_PATH"
mkdir -p "$TEMP_PATH"

# --------------------------------------
# 1. 解壓IPA 到Temp下
unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
# 拿到解壓的臨時APP的路徑
TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")
# 這里顯示打印一下 TEMP_APP_PATH變量
echo "TEMP_APP_PATH: $TEMP_APP_PATH"

# -------------------------------------
# 2. 把解壓出來的.app拷貝進去
#BUILT_PRODUCTS_DIR 工程生成的APP包路徑
#TARGET_NAME target名稱
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
echo "TARGET_APP_PATH: $TARGET_APP_PATH"

rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH/"

# -------------------------------------
# 3. 為了是重簽過程簡化,移走extension和watchAPP. 此外個人免費的證書沒辦法簽extension

echo "Removing AppExtensions"
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/Watch"

# -------------------------------------
# 4. 更新 Info.plist 里的BundleId
#  設置 "Set :KEY Value" "目標文件路徑.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"

# 5.給可執行文件上權限
#添加ipa二進制的執行權限,否則xcode會告知無法運行
#這個操作是要找到第三方app包里的可執行文件名稱,因為info.plist的 'Executable file' key對應的是可執行文件的名稱
#我們grep 一下,然后取最后一行, 然后以cut 命令分割,取出想要的關鍵信息。存到APP_BINARY變量里
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`


#這個為二進制文件加上可執行權限 +X
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
#遍歷出所有動態庫的路徑
for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
do
echo "????????????FRAMEWORK : $FRAMEWORK"
#簽名
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
done
fi

# ---------------------------------------------------
# 7. 注入我們編寫的動態庫
echo "開始注入"
# 需要注入的動態庫的路徑  這個路徑我就寫死了!
#INJECT_FRAMEWORK_RELATIVE_PATH="Frameworks/libHankHook.dylib"
#
## 通過工具實現注入
#yololib "$TARGET_APP_PATH/$APP_BINARY" "$INJECT_FRAMEWORK_RELATIVE_PATH"
echo "注入完成"
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容