2011-04-25 88 views
7

是一個應用程序的可執行文件的字節爲字節時,應用程序通過App Store購買並安裝在用戶的iPhone相同,相比於原來的應用程序包提交給蘋果公司原來的可執行文件?或者它是不同的(例如,有額外的簽名或加密)?Apple是否修改提交給App Store的應用程序上的iOS應用程序可執行文件?

我只關心的可執行文件,而不是整個應用程序包。

特別是,將這樣的代碼......

int main(int argc, char* argv[]) { 
    FILE* file = fopen(argv[0], "rb"); 
    // Read entire contents of executable file; calculate a hash value 
    // ... 
    fclose(file); 
} 

...計算相同的哈希作爲計算原始的iPhone以外的哈希,提交可執行?

例如,如上所述計算SHA256散列,然後使用XCode中的「Build and Run」在附加的iPhone上運行,產生與從OS X中的終端運行openssl sha256 MyAppExecutableFile來計算SHA256散列完全相同的結果。這意味着通過XCode安裝應用程序的行爲不會改變可執行文件。

我的問題是,是否只有當應用提交到App Store,購買和安裝這仍然成立。

回答

17

可執行的應用程序是由蘋果公司時,在App Store上發佈了加密,所以自運行你自己的二進制文件的校驗和是不是一個好主意 - 你可以不知道高級 - 加密的二進制文件的大小。

請注意,二進制總是在文件系統中保持加密狀態,只有iPhone root用戶可以解密這些二進制文件。如果你從App Store下載的應用程序與iTunes,您可以將您的PC或Mac上打開IPA和看到的二進制文件確實通過運行otool加密:

otool -l <app binary> | grep cryptid 
crypt id 1 
(a value of cryptid 1 means the app is encripted) 

otool -l <app binary> | grep cryptsize 
12345678 
(size of the encrypted segment) 
+0

你檢查的.ipa或應用程序本身?我相信Apple在下載時會向.ipa添加一些文件,但它們不能更改應用程序本身,因爲這會使編譯時執行的代碼簽名無效,從而阻止應用程序運行。 – ughoavgfhw 2011-04-26 04:20:00

+1

我檢查了IPA /應用程序包內的二進制文件。 Apple確實可以在不中斷應用程序的情況下更改應用程序,因爲簽名位於應用程序包內的單獨文件中。他們可能會在提交時檢查簽名的有效性,然後丟棄它,無論出於何種原因稍微修改二進制文件,然後用自己的主證書籤名。 – 2011-04-26 04:34:32

+1

我聽說IPA軟件包中的應用程序已加密存儲,但是當它在設備上「安裝」時,它可能會被解密。 (顯然,這就是一些「破解」軟件的工作原理 - 它安裝應用程序,然後將解密後的可執行文件複製到設備上。)或許它會恢復到原始狀態?我想知道是否有任何方法可以測試這種情況。我想你可以ssh進入一個越獄iPhone並複製應用程序的可執行文件,然後看它與哪個版本是相同的? – JohnSpeeks 2011-04-26 13:30:55

2

的應用也剝奪你的簽名和由Apple簽名。這可以通過在您提交的應用程序二進制文件上運行「codesign -vvvvd」並將其與您從商店下載的應用程序二進制文件的「codesign -vvvvd」的輸出進行比較來驗證。

因此哈希將不匹配。

相關問題