本篇內容主要講解“怎么在IPA中重簽名iOS應用程序”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么在IPA中重簽名iOS應用程序”吧!
首先,我們手上需要有一個.ipa文件。你可以選擇使用frida-ios-dump或其他工具,這個看你個人喜歡,但最終我們得有一個可以使用得IPA文件。我們這里選擇使用的是OWASP iGoat-Swift。你可以直接點擊【這里】下載iGoat-Swift_v1.0.ipa,并完成IPA文件的“提取”。
接下來,我們使用ios-deploy來將應用程序加載到我們的測試設備上。但你如果現在嘗試側加載IPA文件的話,可能會失敗,因為此時提供的配置文件不會將我們的設備作為App運行的有效設備,因此我們才需要對目標App進行重簽名。
我們可以把IPA文件當作ZIP文件來進行解壓,不用去在意文件的擴展名,因為我們可以直接修改擴展名。
$ mv iGoat-Swift_v1.0.ipa iGoat-Swift_v1.0.zip$ unzip iGoat-Swift_v1.0.zip -d iGoat-Swift# this should create a directory iGoat-Swift with Payload inside
這里,我們需要弄清楚這個IPA文件需要哪些權限,因此我們需要先提取出這部分內容。
安裝在一臺蘋果設備上的每一個應用程序都需要一個配置描述文件,這些配置文件需要在蘋果的開發者門戶網站上創建。我們假設已經有了這樣一個文件了,那我們就要用我們的配置文件來替換掉當前IPA中的配置文件,但是現在我們需要查看當前的配置文件,并了解配置文件的要求,以此來創建我們的配置文件。
首先,我們需要從embedded.mobileprovision中提取出一個plist,我們的工作目錄為iGoat-Swift目錄:
iGoat-Swift
└── Payload
└── iGoat-Swift.app
然后再從應用程序Bundle中獲取到embedded.mobileprovision:
$ cd iGoat-Swift$ security cms -D -i Payload/iGoat-Swift.app/embedded.mobileprovision > provision.plist
我們可以用常用的文本編輯器打開plist文件,或者直接使用PlistBuddy來將plist中的所有授權域提取出來:
$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist | tee entitlements.plist$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist > entitlements.plist$ cat entitlements.plist
接下來,我們將看到下列信息:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>application-identifier</key> <string>6J6AZQ7T23.*</string> <key>com.apple.developer.team-identifier</key> <string>6J6AZQ7T23</string> <key>get-task-allow</key> <true/> <key>keychain-access-groups</key> <array> <string>6J6AZQ7T23.*</string> </array></dict></plist>
此時,我們已經知道了需要創建的授權內容了,其中:
get-task-allow:允許我們以調試模式運行App,當我們從Xcode中運行App時將會添加授權。
keychain-access-groups:允許我們App組之間共享鑰匙鏈對象。
當我們在Xcode中為keychain-access-groups選擇授予的權限時,application-identifier和com.apple.developer.team-identifier將會自動生成。
現在,創建一個空的Xcode項目,這個App的授權應該跟我們需要重簽名的App的授權內容相同。重簽名后的結果就是,我們將得到兩個功能相同但簽名不同的應用程序。
經過剛才的分析,我們已經知道了iGoat-Swift需要“keychain-access-groups”這個權限,然后需要在項目信息中的授權部分搜索并添加該權限。
接下來,構建并運行我們的空項目,在測試設備上運行了該App之后,你將會拿到一個包含了測試設備ID的有效配置描述文件。
現在,我們就可以將這個空的App從測試設備上刪除了,我們只需要用Xcode來創建正確的配置描述文件,然后用它來對iGoat-Swift App進行重簽名。
在Xcode的文件導航欄中,選擇“Product”,點擊目標App。然后檢查Xcode Inspector區域(在Xocde界面的右側面板),找到應用程序Bundle的路徑。
在應用程序Bundle中,我們將會看到“embedded.mobileprovision”,然后把配置描述文件拷貝到當前的工作目錄中:
$ cp PATH_YOU_GOT_FROM_XCODE/embedded.mobileprovision new_embedded.mobileprovision
我們可以根據這個配置描述文件來獲取到目標App所需的權限:
$ security cms -D -i new_embedded.mobileprovision > new_provision.plist$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' new_provision.plist | tee new_entitlements.plist
現在,我們可以移除之前的代碼簽名了:
$ rm -r Payload/iGoat-Swift.app/_CodeSignature
接下來,使用下列命令來訪問我們的配置描述文件(在鑰匙鏈Keychain中):
$ security find-identity -v -p codesigning
在獲取到所需信息之后,我們就可以對應用程序進行重簽名了:
$ codesign -f -s "Your Provisioning Profile (AAAAAA)" --entitlements new_entitlements.plist Payload/iGoat-Swift.app/$ codesign -f -s "Your Provisioning Profile (AAAAA)" --entitlements new_entitlements.plist Payload/iGoat-Swift.app/Frameworks/*$ codesign -f -s "Your Provisioning Profile (AAAA)" --entitlements new_entitlements.plist Payload/iGoat-Swift.app/iGoat-Swift
現在,我們使用重簽名的應用程序Bundle來生成一個新的IPA文件了:
$ zip -qr iGoat-Swift_v1.0.ipa Payload/
接下來,使用ios-deploy來將新生成的iOS應用程序部署到我們的測試設備上:
$ ios-deploy -b iGoat-Swift_v1.0.ipa
到此,相信大家對“怎么在IPA中重簽名iOS應用程序”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。