本文主要介紹重簽名
的幾種方式厘惦,以及如何對(duì)應(yīng)用進(jìn)行重簽名值依,
應(yīng)用重簽名
從之前《iOS逆向應(yīng)用簽名》中可知疾宏,簽名
是指原始數(shù)據(jù)的Hash值解密
黍特。那么重簽名
,顧名思義们颜,就是指將原始數(shù)據(jù)的Hash值重新加密
吕朵。
作為一個(gè)開發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要窥突,這是一個(gè)我的iOS開發(fā)交流群:130 595 548努溃,不管你是小白還是大牛都?xì)g迎入駐 ,讓我們一起進(jìn)步阻问,共同發(fā)展N嗨啊(群內(nèi)會(huì)免費(fèi)提供一些群主收藏的免費(fèi)學(xué)習(xí)書籍資料以及整理好的幾百道面試題和答案文檔!)
本次介紹的應(yīng)用重簽名方式
主要有以下幾種:
Codesign重簽名
Xcode重簽名
Shell腳本重簽名
下面來進(jìn)行一一介紹
方式1:Codesign重簽名
在iOS中称近,Xcode為我們提供了簽名工具第队,即codesign
,通過一些命令即可完成重簽名刨秆,如下所示
<article class="_2rhmJa" deep="5"security find-identity -v -p codesigning`: 列出鑰匙串里可簽名的證書
<article class="_2rhmJa" deep="5"Codesign –fs “證書串” 文件名` :強(qiáng)制替換簽名
<article class="_2rhmJa" deep="5"Chmod +x 可執(zhí)行文件` : 給文件添加權(quán)限
<article class="_2rhmJa" deep="5"security cms -D -i ../embedded.mobileprovision` :查看描述文件
<article class="_2rhmJa" deep="5"codesign -fs “證書串” --no-strict --entitlements=權(quán)限文件.plist APP包`
<article class="_2rhmJa" deep="5"Zip –ry 輸出文件 輸入文件` 將輸入文件壓縮為輸出文件
Codesign演示
如何獲取越獄手機(jī)的ipa包
1凳谦、建立鏈接:
sh usbConnect.sh
2、連接手機(jī):
sh usbX.sh
3衡未、查看進(jìn)程:
ps -A
4尸执、篩選進(jìn)程,找到微信進(jìn)程:
ps -A | grep WeChat
5缓醋、拷貝:
scp -r -P 12345 root@localhost:路徑 ./
6如失、查看拷貝的app包:
cd WeChat.app
7、查看可執(zhí)行文件:
otool -l WeChat | grep crypt
(此時(shí)的cryptid 是 1送粱,表示加密過的)8褪贵、查看app的權(quán)限:
codesign -vv -d WeChat.app
(有簽名權(quán)限)
準(zhǔn)備工作
注:所需的資料可關(guān)注公眾號(hào):編程大鑫 獲取
-
1、準(zhǔn)備一個(gè)微信的越獄包,這里準(zhǔn)備的是通過
MyZip
解壓微信-7.0.8.ipa
-
其中的
WeChat.app
包含兩個(gè)東西:app + app簽名信息
-
-
2脆丁、查看app包的簽名信息(CMD+G):
codesign -vv -d WeChat.app
3世舰、查看鑰匙串的證書:
security find-identity -v -p codesigning
4、查看可執(zhí)行文件詳細(xì)信息:
otool -l WeChat > ~/Desktop/123.txt
槽卫。其中有cryptid
加密id(0表示沒有使用加密算法)
codesign重簽名步驟
給應(yīng)用重簽名的步驟如下:
1冯乘、刪除插件和帶有插件的.app包(例如Watch、plugins)
2晒夹、對(duì)
Frameworks
里面的庫(kù)進(jìn)行重簽名
3、給可執(zhí)行文件
+x(可執(zhí)行)權(quán)限
4姊氓、新建一個(gè)空工程
5丐怯、添加描述文件(4中的空工程通過真機(jī)編譯得到,且要運(yùn)行翔横,因?yàn)樾枰獙⒚枋鑫募惭b到手機(jī))
6读跷、替換.app包中
BundleID
(.app包中info.plist文件的BundleID要和描述文件中的BundleID保持一致)-
7、通過授權(quán)文件(Entilements)重簽.app包禾唁、
1)查看描述文件:
$security cms -D -i embedded.mobileprovision
2)將描述文件中Entilements 拷貝出來效览,生成plist文件。(文件名稱
entitlements.plist
)3)用權(quán)限文件簽名APP包:
$ codesign -fs "Apple Development: XX(XX)" --no-strict --entitlements=entitlements.plist WeChat.app
8荡短、最后通過Xcode安裝
注:mach-o最重要的兩塊:
代碼塊 + 數(shù)據(jù)塊
丐枉,其中加密主要是加密代碼
codesign重簽名演示
-
前提:
需要簽名:wechat可執(zhí)行文件(即
Mach-O文件
) +Frameworks
需要?jiǎng)h除:
plugins
(免費(fèi)普通賬戶無法簽名,可以刪除) +Watch
(也無法簽名掘托,刪除)
-
1瘦锹、查看Frameworks,也是有簽名信息的:
codesign -vv -d andromeda.framework
-
2闪盔、重簽名Frameworks:
codesign -fs "Apple Development: chenjialin1016@foxmail.com (C2893S7GXH)" andromeda.framework
然后執(zhí)行退出
cd ..
-
3弯院、查看可執(zhí)行文件:
ls -l WeChat
- 注:重簽名必須要有可執(zhí)行權(quán)限,即
- x
- 注:重簽名必須要有可執(zhí)行權(quán)限,即
4泪掀、新建一個(gè)工程听绳,獲取
chenjialin1016@foxmail.com (C2893S7GXH)
對(duì)應(yīng)的描述文件 ,例如xxx xxx(Personal Team)
獲取可執(zhí)行文件中的描述文件异赫,拷貝至WeChat包
5椅挣、描述文件和BundleID有關(guān)系,需要修改WeChat的BundleID
com.tencent.xin
為xxx.com.test
-
6祝辣、查看描述文件的權(quán)限:
security cms -D -i embedded.mobileprovision
查看
Entitlements
(權(quán)限),是一個(gè)plist文件將其拷貝至一個(gè)plist文件(名稱為
Entitlements
贴妻,需要新建)(路徑:propertyList - open sourceCode - 拷貝 <dict></dict>)將其拷貝至payload文件夾中
7、簽名app(即mach-o簽名):
codesign -fs "Apple Development: xxxxxx@foxmail.com (C2893S7GXH)" --no-strict --entitlements=Entitlements.plist WeChat.app
-
8蝙斜、查看WeChat簽名:
codesign -vv -d WeChat.app
名惩, 此時(shí)簽名信息已經(jīng)替換 -
9、安裝
10孕荠、調(diào)試:Debug - Attach to process - WeChat
Codesign重簽名缺點(diǎn):過程太繁瑣
方式2:Xcode重簽名
下面我們通過Xcode來進(jìn)行重簽名娩鹉,步驟如下:
1攻谁、刪除Plugins、Watch
2弯予、重簽名Frameworks
3戚宦、創(chuàng)建并運(yùn)行一個(gè)空工程
4、修改
Info.plist
中的BundleID改為空工程的BundleID
5锈嫩、利用修改后的app包受楼,替換空工程的app包
6、直接運(yùn)行
與CodeSign重簽名相比:少了其中的3(執(zhí)行文件權(quán)限)呼寸、5(添加描述文件)艳汽、7(通過授權(quán)文件重簽.app包)
xcode重簽名演示
-
1、將product中的WeChat替換成 需要我們之前重簽名的WeChat
-
2对雪、CMD+R再次運(yùn)行
總結(jié)
重簽名:將原始數(shù)據(jù)的Hash值重新加密
-
Codesign重簽名步驟:
1河狐、刪除插件和帶有插件的.app包(例如Watch、plugins)
2瑟捣、對(duì)
Frameworks
里面的庫(kù)進(jìn)行重簽名
3馋艺、給可執(zhí)行文件
+x(可執(zhí)行)權(quán)限
4、新建一個(gè)空工程
5迈套、添加描述文件(4中的空工程通過真機(jī)編譯得到捐祠,且要運(yùn)行,因?yàn)樾枰獙⒚枋鑫募惭b到手機(jī))
6桑李、替換.app包中
BundleID
(.app包中info.plist文件的BundleID要和描述文件中的BundleID保持一致)-
7雏赦、通過授權(quán)文件(Entilements)重簽.app包、
1)查看描述文件:
$security cms -D -i embedded.mobileprovision
2)將描述文件中Entilements 拷貝出來芙扎,生成plist文件星岗。(文件名稱
entitlements.plist
)3)用權(quán)限文件簽名APP包:
$ codesign -fs "Apple Development: XX(XX)" --no-strict --entitlements=entitlements.plist WeChat.app
8、最后通過Xcode安裝
-
Xcode重簽名步驟:
1戒洼、刪除Plugins俏橘、Watch
2、重簽名Frameworks
3圈浇、創(chuàng)建并運(yùn)行一個(gè)空工程
4寥掐、修改
Info.plist
中的BundleID改為空工程的BundleID
5、利用修改后的app包磷蜀,替換空工程的app包
6召耘、直接運(yùn)行