0x0 獲取
iTunes下載
現(xiàn)在iTunes已經(jīng)沒有下載ipa的功能了
第三方市場
目前大部分只能依靠第三方市場來下載,而且第三方市場的ipa其實有一個優(yōu)勢,大部分都是已經(jīng)脫殼的,省去一個步驟
OTA安裝的企業(yè)版app
這種就更好辦了
- 首先拿到ota的url,基本上是itms-service之類的scheme
- 查看里面的一個url=的參數(shù),就是plist配置的地址
- 下載或者查看這個plist,可以發(fā)現(xiàn)里面就有ipa的真正地址了
0x1 砸殼
如果你的包是appstore上的包,那么蘋果會加殼,我們需要先砸了
主流的砸殼基本上都是在手機(jī)上操作,所以大前提是你有一臺越獄的手機(jī)
現(xiàn)在我基本上都是第三方市場下載或者企業(yè)版證書的app,不過有興趣還是可以了解一下的
0x2 分析
一般我們逆向一個app,還是先把頭文件dump出來分析一下,主要還是利用 nygard/class-dump,具體用途看它的 readme 就差不多了
class-dump -H xxx.app -o /Users/Desktop/Header
如果有更深入的分析要求,可以利用hopper、ida分析,包括一些調(diào)用關(guān)系等
0x3 編寫dylib
當(dāng)目標(biāo)分析完成,需求確定之后,就可以開始編寫自己的dylib了
至于dylib的工程模板網(wǎng)上很多,可以參考 Xcode4.6創(chuàng)建和使用iOS的dylib動態(tài)庫
一個很常規(guī)的做法,就是隨便創(chuàng)建一個類,添加一個+ (void)Load作為你的代碼入口,或者在全局作用域上直接調(diào)用創(chuàng)建一個單例,如下
static Hacker *g_hacker = [Hacker sharedInstance]
@implementation Hacker
+ (instancetype)sharedInstance
{}
+ (void)load
{
// Setup my code here
}
@end
0x4 注入dylib
完成dylib后,需要把它掛到目標(biāo)app上,這里需要用到 optool 來給執(zhí)行文件添加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 重簽
萬事俱備,現(xiàn)在就只差如何安裝到你的手機(jī)上了
因為你下載的app經(jīng)過你的修改,你也沒有原來的證書可以打包,手機(jī)也不在原來的證書設(shè)備內(nèi),因為是無法安裝的,這時候需要重簽為你自己的證書,來允許安裝到你的手機(jī)上(未越獄)
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,這個工程可以自動搜索本機(jī)的證書和配置文件,如果不想編譯那么麻煩,也可以在releases里面直接下載編譯好的
這個工具有幾個缺點(diǎn)
- 不會實時監(jiān)測文件的變化,所以有變動證書相關(guān)文件,需要重啟app
- 因為Xcode的下載證書相關(guān),不會鑒別過期與否,有效與否,一腦子全部下下來,app本身也不會鑒別是否有效
- 在重簽后安裝不上的,需要人肉驗證上面兩步,嫌麻煩就整個文件夾刪了,到Developer確保證書沒問題,然后全部重新下下來
Provisioning Profiles 存放的目錄
~/Library/MobileDevice/Provisioning Profiles
0x6 參考
iOS Hacker 動態(tài)庫 dylib 注入
iOS Hacker 重簽名實現(xiàn)無需越獄注入動態(tài)庫 dylib
iOS Hacker dumpdecrypted脫殼
iOS app 逆向分析