逆向 - 應用重簽名

方式1:Codesign重簽名

在iOS中挑胸,Xcode為我們提供了簽名工具谍椅,即codesign辰狡,通過一些命令即可完成重簽名迹蛤,如下所示

  • $security find-identity -v -p codesigning: 列出鑰匙串里可簽名的證書

  • $Codesign –fs “證書串” 文件名 :強制替換簽名

  • $Chmod +x 可執(zhí)行文件 : 給文件添加權限

  • $security cms -D -i ../embedded.mobileprovision :查看描述文件

  • $codesign -fs “證書串” --no-strict --entitlements=權限文件.plist APP包

  • $Zip –ry輸出文件 輸入文件 將輸入文件壓縮為輸出文件

如何獲取越獄手機的ipa包

  • 1谬晕、建立鏈接:sh usbConnect.sh

  • 2爹脾、連接手機:sh usbX.sh

  • 3岩遗、查看進程:ps -A

  • 4吩坝、篩選進程驾诈,找到微信進程:ps -A | grep WeChat

  • 5缠诅、拷貝:scp -r -P 12345 root@localhost:路徑 ./

  • 6、查看拷貝的app包:cd WeChat.app

  • 7乍迄、查看可執(zhí)行文件:otool -l WeChat | grep crypt (此時的cryptid 是 1管引,表示加密過的)

  • 8、查看app的權限:codesign -vv -d WeChat.app (有簽名權限)

準備工作

注:所需的資料可在這里獲取鏈接闯两,密碼:b66a
也可以通過iTunes 下載包

  • 1褥伴、準備一個微信的越獄包,這里準備的是通過MyZip解壓 微信-7.0.8.ipa

    • 其中的WeChat.app包含兩個東西:app + app簽名信息

      image
  • 2漾狼、查看app包的簽名信息(CMD+G): codesign -vv -d WeChat.app

    image
  • 3重慢、查看鑰匙串的證書:security find-identity -v -p codesigning

  • 4、查看可執(zhí)行文件詳細信息:otool -l WeChat > ~/Desktop/123.txt邦投。其中有cryptid加密id(0表示沒有使用加密算法)

codesign重簽名步驟

給應用重簽名的步驟如下:

  • 1伤锚、刪除插件和帶有插件的.app包(例如Watch、plugins)

  • 2志衣、對Frameworks里面的庫進行重簽名

  • 3屯援、給可執(zhí)行文件 +x(可執(zhí)行)權限

  • 4、新建一個空工程

  • 5念脯、添加描述文件(4中的空工程通過真機編譯得到狞洋,且要運行,因為需要將描述文件安裝到手機)

  • 6绿店、替換.app包中BundleID(.app包中info.plist文件的BundleID要和描述文件中的BundleID保持一致)

  • 7吉懊、通過授權文件(Entilements)重簽.app包、

    • 1)查看描述文件:$security cms -D -i embedded.mobileprovision

    • 2)將描述文件中Entilements 拷貝出來假勿,生成plist文件借嗽。(文件名稱entitlements.plist

    • 3)用權限文件簽名APP包: $ codesign -fs "Apple Development: XX(XX)" --no-strict --entitlements=entitlements.plist WeChat.app

  • 8、最后通過Xcode安裝

  • 注:mach-o最重要的兩塊:代碼塊 + 數據塊转培,其中加密主要是加密代碼

codesign重簽名演示
  • 前提:

    • 需要簽名:wechat可執(zhí)行文件(即Mach-O文件) + Frameworks

    • 需要刪除:Plugins(免費普通賬戶無法簽名恶导,可以刪除) + Watch(也無法簽名,刪除)

  • 1浸须、查看Frameworks惨寿,也是有簽名信息的:codesign -vv -d andromeda.framework

    image
  • 2邦泄、重簽名Frameworks:codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" andromeda.framework

?  Frameworks codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" andromeda.framework
andromeda.framework: replacing existing signature
?  Frameworks codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" mars.framework 
mars.framework: replacing existing signature
?  Frameworks codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" marsbridgenetwork.framework 
marsbridgenetwork.framework: replacing existing signature
?  Frameworks codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" matrixreport.framework 
matrixreport.framework: replacing existing signature
?  Frameworks codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" OpenSSL.framework 
OpenSSL.framework: replacing existing signature
?  Frameworks codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" ProtobufLite.framework 
ProtobufLite.framework: replacing existing signature

然后執(zhí)行退出 cd ..

  • 3、查看可執(zhí)行文件:ls -l WeChat
ls -l WeChat
-rwxr-xr-x@ 1 xxx  staff  126048560 10 16  2019 WeChat
  • 注:重簽名必須要有可執(zhí)行權限裂垦,即 - x

  • 4顺囊、新建一個工程,運行 蕉拢,進入得到的包中特碳,獲取Apple Development: 916770982@qq.com (565XXC9ZYA)對應的描述文件 ,例如 xxx xxx(Personal Team) 獲取可執(zhí)行文件中的描述文件企量,拷貝至WeChat包

  • 5测萎、描述文件和BundleID有關系亡电,需要修改WeChat的BundleID com.tencent.xinxxx.com.test

  • 6届巩、查看描述文件的權限:security cms -D -i embedded.mobileprovision

    image

    查看Entitlements(權限),是一個plist文件

    image

    將其拷貝至一個plist文件(名稱為entitlements,需要新建)(路徑:propertyList - open sourceCode - 拷貝 <dict></dict>)

    image

    將其拷貝至payload文件夾中

  • 7份乒、簽名app(即mach-o簽名):codesign -fs "Apple Development: xxxxxxxxx@qq.com (565XXC9ZYA)" --no-strict --entitlements=Entitlements.plist WeChat.app

  • 8恕汇、查看WeChat簽名:codesign -vv -d WeChat.app, 此時簽名信息已經替換

?  Payload codesign -vv -d WeChat.app
Executable=/Users/jiangshicheng/Desktop/邏輯進階IOS/逆向/010--應用重簽名原理/資料/微信-7.0.8/Payload/WeChat.app/WeChat
Identifier=com.jsc.weChatDemo
Format=app bundle with Mach-O thin (arm64)
CodeDirectory v=20400 size=972598 flags=0x0(none) hashes=30383+7 location=embedded
Signature size=4819
Authority=Apple Development: 916770982@qq.com (565XXC9ZYA)
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=Jun 2, 2021 at 2:36:45 PM
Info.plist entries=68
TeamIdentifier=99EJLR3Y3N
Sealed Resources version=2 rules=10 files=1470
Internal requirements count=1 size=184
  • 9或辖、安裝

    image
  • 10瘾英、調試:Debug - Attach to process - WeChat

Codesign重簽名缺點:過程太繁瑣

方式2:Xcode重簽名

下面我們通過Xcode來進行重簽名,步驟如下:

  • 1颂暇、刪除Plugins缺谴、Watch

  • 2、重簽名Frameworks

  • 3耳鸯、創(chuàng)建并運行一個空工程

  • 4湿蛔、修改Info.plist中的BundleID改為 空工程的BundleID

  • 5、利用修改后的app包县爬,替換空工程的app包

  • 6阳啥、直接運行

與CodeSign重簽名相比:少了其中的3(執(zhí)行文件權限)、5(添加描述文件)财喳、7(通過授權文件重簽.app包)

xcode重簽名演示

  • 1察迟、將product中的WeChat替換成 需要我們之前重簽名的WeChat

    image
  • 2、CMD+R再次運行

方式3:Shell腳本

shell重簽名演示

準備工作
首先跑一遍空項目獲得簽名信息

  • 項目中配置shell:Build Phase -> + Run Script耳高,會在編譯時執(zhí)行
    • ./ 表示工程目錄
    • SRCROOT (環(huán)境變量)-- 根目錄

shell重簽名演示

  • 1扎瓶、根目錄下創(chuàng)建shell文件: touch 123.sh

  • 2、添加執(zhí)行權限: chmod +x 123.sh

  • 3泌枪、Run Script 中直接執(zhí)行 123.sh :./123.sh

其中123.sh中的重簽名腳本如下所示概荷,主要有以下幾步:

  • 1、解壓IPATemp

  • 2工闺、將解壓出來的.app拷貝進入工程下

  • 3乍赫、刪除extensionWatchAPP瓣蛀,因為個人證書沒法簽名Extention

  • 4、更新info.plist文件 CFBundleIdentifier

  • 5雷厂、給Mach-O文件上執(zhí)行權限

  • 6惋增、重簽名第三方 FrameWorks

  • 7、替換簽名

# ${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" "目標文件路徑"
# PlistBuddy工具修改info.plist文件中的BundleID為工程的BundleID
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"

#----------------------------------------
# 5\. 給MachO文件上執(zhí)行權限
# 拿到MachO文件的路徑
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`
#上可執(zhí)行權限
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

#簽名 
#--force --sign 替換簽名
# EXPANDED_CODE_SIGN_IDENTITY 當前工程的證書
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
done
fi
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市像棘,隨后出現的幾起案子稽亏,更是在濱河造成了極大的恐慌,老刑警劉巖缕题,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件截歉,死亡現場離奇詭異,居然都是意外死亡烟零,警方通過查閱死者的電腦和手機瘪松,發(fā)現死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锨阿,“玉大人宵睦,你說我怎么就攤上這事∈睿” “怎么了壳嚎?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長末早。 經常有香客問我烟馅,道長,這世上最難降的妖魔是什么荐吉? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任焙糟,我火速辦了婚禮,結果婚禮上样屠,老公的妹妹穿的比我還像新娘穿撮。我一直安慰自己,他們只是感情好痪欲,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布悦穿。 她就那樣靜靜地躺著,像睡著了一般业踢。 火紅的嫁衣襯著肌膚如雪栗柒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音瞬沦,去河邊找鬼太伊。 笑死,一個胖子當著我的面吹牛逛钻,可吹牛的內容都是我干的僚焦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼曙痘,長吁一口氣:“原來是場噩夢啊……” “哼芳悲!你這毒婦竟也來了?” 一聲冷哼從身側響起边坤,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤名扛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后茧痒,有當地人在樹林里發(fā)現了一具尸體肮韧,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年文黎,在試婚紗的時候發(fā)現自己被綠了惹苗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殿较。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡耸峭,死狀恐怖,靈堂內的尸體忽然破棺而出淋纲,到底是詐尸還是另有隱情劳闹,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布洽瞬,位于F島的核電站本涕,受9級特大地震影響,放射性物質發(fā)生泄漏伙窃。R本人自食惡果不足惜菩颖,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望为障。 院中可真熱鬧晦闰,春花似錦、人聲如沸鳍怨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鞋喇。三九已至声滥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侦香,已是汗流浹背落塑。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工纽疟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人憾赁。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓仰挣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缠沈。 傳聞我的和親對象是個殘疾皇子膘壶,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容