Resign .ipa

前言

我們都知道 iOS 是使用 ipa 檔案來安裝 app,而該如何換掉 ipa 裡頭的憑證呢?

解壓縮

首先,我們先將 Application.ipa 解壓縮,可以得到一個 PayLoad 的資料夾,裡頭包含著一個應用程式 Application

移除舊有的簽章

接著我們透過 terminal 來進行移除的動作

rm -rf PayLoad/Application/_CodeSignature

找出你打算簽章的 provisionprofile

你可以透過 Apple developer 的網頁直接下載,或是查看本機裡頭的檔案,路徑會是在:

~/資源庫/MobileDevice/Provisioning Profiles/

用 Finder 到那路徑之後,可以使用空白鍵來進行預覽,
透過名稱以及 SHA-1 來辨別。

嵌入 mobileprovision 到 app 之中

接著就複製並改名字放入 app 中

cp yourProvisionProfile.mobileprovision Payload/Application.app/embedded.mobileprovision

來製作簽章所需要的 entitlements.plist

先將 .mobileprovision 輸入成 profile.plist

security cms -D -i yourProvisionProfile.mobileprovision  > profile.plist

再來利用 profile.plist 輸出成 entitlements.plist

/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' profile.plist > entitlements.plist\

記得 App Bundle Identifier 得和簽章的名稱一致

/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier tw.Archie.Application" Payload/Application.app/Info.plist

就可以開始簽章了!

我們先透過 security 來找尋並複製剛剛 .mobileprovision 的 SHA-1

security find-identity -p codesigning -v

這邊記得要從 Frameworks 開始一個一個簽,再來才是 App 本身;
假設你的 mobileprovision SHA-1 為 B77ED97FBFC708A802BDB159CC2ED4E2A4472A09

codesign -f -s B77ED97FBFC708A802BDB159CC2ED4E2A4472A09 --entitlements entitlements.plist Payload/Application.app/Frameworks/someFramework.framework

一個一個簽章完之後,便可以簽署 app 了

codesign -f -s B77ED97FBFC708A802BDB159CC2ED4E2A4472A09 --entitlements entitlements.plist Payload/Application.app/Application

最後確認是否有簽對

我們可以透過 codesign 來查詢

codesign -vv -d Payload/Application.app

如果資訊都沒錯的話,就來輸出吧!🎉

zip -qr Resigned.ipa Payload

題外話,使用 Xcode 安裝

就在 Xcode 之中打開 Devices and Simulators 視窗,並將剛剛最後產出的 ipa 直接拖拉到你的裝置即可!

淺談 Android 的逆向工程

Android?

是的,這篇正是要寫有關於 Android 的逆向工程,儘管這也很可能是本站唯一一篇XD

起因

看到放在「Hack」的分類上,便可以得知,是因為想要修改遊戲參數而開始涉略⋯⋯
提到 Android 的遊戲開發方式,我們可以簡單地分為兩種類型:

  1. 以 Java 開發
  2. 以 Unity 開發

這篇主要會以 Java 開發的遊戲作為內容分享(因為我想改的遊戲是此類型XD)

先說結論

我目前還沒有修改成功,因為這款遊戲有對 apk 進行混淆的動作⋯⋯

以至於一時之間無法找到我需要的參數來做修改⋯⋯
不過,就先記錄一下如何走到看得到程式碼這一步!

使用到的工具

  1. Apk tool
  2. dex2jar
  3. jd-gui

Apk tool

apk tool 主要負責將 .apk 拆開來,在反編譯之後,可以看到一堆 .smali 及 resource 的相關檔案,
也是負責將修改完的檔案重新包回 apk 的工具。
而由於我沒有修改任何 Code,所以只有解出 .smali 和 resource,看看裡頭有什麼東西和圖片影音檔而已。

dex2jar 和 jd-gui

dex2jar 的功用在於將 .apk 轉成 .jar,配合 jd-gui 打開 .jar 來探究其 source code 內容是什麼。

流程總結

配合上述的三個工具,大概的流程應該是先以 dex2jar 和 jd.gui 來研究程式碼,
並使用 apk tool 拆開 .apk 後修改 .smali,最後重新打包成一個 .apk 安裝到模擬器或手機之中。
因為和 Android 不熟,所以只能進展到這邊就停下腳步⋯⋯
希望有經驗的高手們能夠給予一些協助及引導!

相關參考資料

  1. [Android] 人人都會的 apk 反編譯
  2. [教學] 手機遊戲 apk 檔修改基礎介紹與思路