本文主要介紹重簽名
的幾種方式,以及如何對應用進行重簽名,
應用重簽名
從iOS逆向 09:應用簽名中可知,簽名
是指原始數據的Hash值解密
。那么重簽名
,顧名思義,就是指將原始數據的Hash值重新加密
。
本次介紹的應用重簽名方式
主要有以下幾種:
Codesign重簽名
Xcode重簽名
Shell腳本重簽名
下面來進行一一介紹
方式1:Codesign重簽名
在iOS中,Xcode為我們提供了簽名工具,即codesign
,通過一些命令即可完成重簽名,如下所示
$
security find-identity -v -p codesigning
: 列出鑰匙串里可簽名的證書$
Codesign –fs “證書串” 文件名
:強制替換簽名$
Chmod +x 可執行文件
: 給文件添加權限$
security cms -D -i ../embedded.mobileprovision
:查看描述文件$
codesign -fs “證書串” --no-strict --entitlements=權限文件.plist APP包
$
Zip –ry 輸出文件 輸入文件
將輸入文件壓縮為輸出文件
Codesign演示
如何獲取越獄手機的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、查看可執行文件:
otool -l WeChat | grep crypt
(此時的cryptid 是 1,表示加密過的)8、查看app的權限:
codesign -vv -d WeChat.app
(有簽名權限)
準備工作
注:所需的資料可在這里獲取鏈接,密碼: ch5c
-
1、準備一個微信的越獄包,這里準備的是通過
MyZip
解壓微信-7.0.8.ipa
- 其中的
WeChat.app
包含兩個東西:app + app簽名信息
準備工作-01
- 其中的
-
2、查看app包的簽名信息(CMD+G):
codesign -vv -d WeChat.app
準備工作-02 3、查看鑰匙串的證書:
security find-identity -v -p codesigning
4、查看可執行文件詳細信息:
otool -l WeChat > ~/Desktop/123.txt
。其中有cryptid
加密id(0表示沒有使用加密算法)
codesign重簽名步驟
給應用重簽名的步驟如下:
1、刪除插件和帶有插件的.app包(例如Watch、plugins)
2、對
Frameworks
里面的庫進行重簽名
3、給可執行文件
+x(可執行)權限
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可執行文件(即
Mach-O文件
) +Frameworks
需要刪除:
plugins
(免費普通賬戶無法簽名,可以刪除) +Watch
(也無法簽名,刪除)
-
1、查看Frameworks,也是有簽名信息的:
codesign -vv -d andromeda.framework
codesign重簽名演示-01 -
2、重簽名Frameworks:
codesign -fs "Apple Development: chenjialin1016@foxmail.com (C2893S7GXH)" andromeda.framework
codesign重簽名演示-02
然后執行退出cd ..
-
3、查看可執行文件:
ls -l WeChat
codesign重簽名演示-03- 注:重簽名必須要有可執行權限,即
- x
- 注:重簽名必須要有可執行權限,即
4、新建一個工程,獲取
chenjialin1016@foxmail.com (C2893S7GXH)
對應的描述文件 ,例如xxx xxx(Personal Team)
獲取可執行文件中的描述文件,拷貝至WeChat包
5、描述文件和BundleID有關系,需要修改WeChat的BundleID
com.tencent.xin
為xxx.com.test
-
6、查看描述文件的權限:
security cms -D -i embedded.mobileprovision
codesign重簽名演示-04
查看Entitlements
(權限),是一個plist文件
codesign重簽名演示-05
將其拷貝至一個plist文件(名稱為Entitlements
,需要新建)(路徑:propertyList - open sourceCode - 拷貝 <dict></dict>)
codesign重簽名演示-06
將其拷貝至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
, 此時簽名信息已經替換
codesign重簽名演示-07 -
9、安裝
codesign重簽名演示-08 10、調試:Debug - Attach to process - WeChat
Codesign重簽名缺點:過程太繁瑣
方式2:Xcode重簽名
下面我們通過Xcode來進行重簽名,步驟如下:
1、刪除Plugins、Watch
2、重簽名Frameworks
3、創建并運行一個空工程
4、修改
Info.plist
中的BundleID改為空工程的BundleID
5、利用修改后的app包,替換空工程的app包
6、直接運行
與CodeSign重簽名相比:少了其中的3(執行文件權限)、5(添加描述文件)、7(通過授權文件重簽.app包)
xcode重簽名演示
-
1、將product中的WeChat替換成 需要我們之前重簽名的WeChat
xcode重簽名演示-01 -
2、CMD+R再次運行
xcode重簽名演示-02
總結
重簽名:將原始數據的Hash值重新加密
-
Codesign重簽名步驟:
1、刪除插件和帶有插件的.app包(例如Watch、plugins)
2、對
Frameworks
里面的庫進行重簽名
3、給可執行文件
+x(可執行)權限
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安裝
-
Xcode重簽名步驟:
1、刪除Plugins、Watch
2、重簽名Frameworks
3、創建并運行一個空工程
4、修改
Info.plist
中的BundleID改為空工程的BundleID
5、利用修改后的app包,替換空工程的app包
6、直接運行