0x0 擷取
iTunes下載下傳
現在iTunes已經沒有下載下傳ipa的功能了
第三方市場
目前大部分隻能依靠第三方市場來下載下傳,而且第三方市場的ipa其實有一個優勢,大部分都是已經脫殼的,省去一個步驟
OTA安裝的企業版app
這種就更好辦了
首先拿到ota的url,基本上是itms-service之類的scheme
檢視裡面的一個url=的參數,就是plist配置的位址
下載下傳或者檢視這個plist,可以發現裡面就有ipa的真正位址了
0x1 砸殼
如果你的包是appstore上的包,那麼蘋果會加殼,我們需要先砸了
主流的砸殼基本上都是在手機上操作,是以大前提是你有一台越獄的手機
現在我基本上都是第三方市場下載下傳或者企業版證書的app,不過有興趣還是可以了解一下的
0x2 分析
一般我們逆向一個app,還是先把頭檔案dump出來分析一下,主要還是利用 nygard/class-dump,具體用途看它的 readme 就差不多了
class-dump -H xxx.app -o /Users/Desktop/Header
如果有更深入的分析要求,可以利用hopper、ida分析,包括一些調用關系等
0x3 編寫dylib
當目标分析完成,需求确定之後,就可以開始編寫自己的dylib了
一個很正常的做法,就是随便建立一個類,添加一個+ (void)Load作為你的代碼入口,或者在全局作用域上直接調用建立一個單例,如下
static Hacker *g_hacker = [Hacker sharedInstance]
@implementation Hacker
+ (instancetype)sharedInstance
{}
+ (void)load
{
// Setup my code here
}
@end
0x4 注入dylib
完成dylib後,需要把它挂到目标app上,這裡需要用到 optool 來給執行檔案添加LoadCommand
git clone –recursive https://github.com/alexzielenski/optool.git
cd optool
xcodebuild -project optool.xcodeproj -configuration Release ARCHS=”x86_64” build //編譯
/path/to/optool install -c load -p “@executable_path/yourdylib.dylib” -t /yourexefile
如果不放心,可以用Mach-O Viewer,或者otool來檢驗一下
otool -L yourexefile
0x5 重簽
萬事俱備,現在就隻差如何安裝到你的手機上了
因為你下載下傳的app經過你的修改,你也沒有原來的證書可以打包,手機也不在原來的證書裝置内,因為是無法安裝的,這時候需要重簽為你自己的證書,來允許安裝到你的手機上(未越獄)
iOSResigner
// 檢視你電腦目前的證書
security find-identity -v -p codesigning
// resign
./iOSResigner --ipa="Debug/test.ipa" --identity="iPhone Developer: xxx yyy (9J4EHR5R28)" --provision="cert/dev.mobileprovision" --output="out/test_resigned.ipa"
如果有需求修改裡面的東西再重新打包的話
cd inside-folder
zip --symlinks -r -q ../abc.ipa *
或者
xcrun -sdk iphoneos PackageApplication
-v ./PaulTest.app
-o ./paultest_yk_ume_release.ipa
iOS App Signer
這裡介紹一個更好使的開源工具 iOS App Signer,這個工程可以自動搜尋本機的證書和配置檔案,如果不想編譯那麼麻煩,也可以在releases裡面直接下載下傳編譯好的
這個工具有幾個缺點
不會實時監測檔案的變化,是以有變動證書相關檔案,需要重新開機app
因為Xcode的下載下傳證書相關,不會鑒别過期與否,有效與否,一腦子全部下下來,app本身也不會鑒别是否有效
在重簽後安裝不上的,需要人肉驗證上面兩步,嫌麻煩就整個檔案夾删了,到Developer確定證書沒問題,然後全部重新下下來
Provisioning Profiles 存放的目錄
~/Library/MobileDevice/Provisioning Profiles
0x6 參考