2011-04-25 59 views
7

Tệp thực thi của ứng dụng là byte-cho-byte giống hệt nhau khi ứng dụng được mua thông qua App Store và được cài đặt trên iPhone của người dùng, so với tệp thực thi gốc được gửi tới Apple trong gói ứng dụng gốc? Hoặc là nó khác nhau (ví dụ, với chữ ký bổ sung hoặc mã hóa)?Apple có sửa đổi các tệp thi hành ứng dụng iOS trên các ứng dụng được gửi tới App Store không?

Tôi chỉ quan tâm đến tệp thi hành, không phải toàn bộ gói ứng dụng.

Đặc biệt, sẽ mã như ...

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

... tính toán hash giống như tính toán băm bên ngoài của iPhone trên bản gốc, trình thực thi? Ví dụ, tính toán giá trị băm SHA256 như trên thì sử dụng "Xây dựng và Chạy" trong XCode để chạy trên iPhone đính kèm sẽ tạo ra kết quả tương tự như tính toán hàm băm SHA256 bằng cách chạy openssl sha256 MyAppExecutableFile từ thiết bị đầu cuối trong OS X. Điều này có nghĩa là hành vi cài đặt ứng dụng thông qua XCode không làm thay đổi tệp thi hành.

Câu hỏi của tôi là liệu điều này có giữ được khi ứng dụng được gửi đến App Store, đã mua và được cài đặt hay không.

Trả lời

17

Ứng dụng thực thi được mã hóa bởi Apple khi được phát hành trên App Store, vì vậy tự chạy kiểm tra trên nhị phân của riêng bạn không phải là một ý tưởng hay - bạn không thể biết kích thước tệp của mã nhị phân đã mã hóa trước—.

Hãy nhớ rằng, mã nhị phân luôn là vẫn được mã hóa trong hệ thống tệp và chỉ người dùng root iPhone mới có thể giải mã các tệp nhị phân này. Nếu bạn tải một ứng dụng từ App Store với iTunes, bạn có thể mở IPA trên PC hoặc Mac của bạn và thấy rằng những chương trình đang thực sự được mã hóa bằng cách chạy 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

Bạn đã kiểm tra .ipa hoặc bản thân ứng dụng? Tôi tin rằng Apple sẽ thêm một vài tệp vào .ipa khi nó được tải xuống, nhưng chúng không thể thay đổi chính ứng dụng vì điều đó sẽ làm mất hiệu lực ký mã được thực hiện khi biên dịch, ngăn ứng dụng chạy. – ughoavgfhw

+1

Tôi đã kiểm tra nhị phân bên trong gói ứng dụng/IPA. Apple thực sự có thể thay đổi ứng dụng mà không vi phạm các ứng dụng, kể từ khi chữ ký đi trong một tập tin riêng biệt bên trong gói ứng dụng. Họ chỉ có thể kiểm tra tính hợp lệ của chữ ký tại thời điểm gửi, sau đó loại bỏ nó, hơi thay đổi nhị phân vì bất kỳ lý do gì và sau đó ký tên với chứng chỉ chính của riêng họ. –

+1

Tôi đã nghe nói rằng ứng dụng trong gói IPA được lưu trữ mã hóa nhưng khi nó được "cài đặt" trên thiết bị, nó có thể được giải mã. (Rõ ràng đó là cách một số phần mềm "nứt" hoạt động - nó cài đặt ứng dụng, sau đó sao chép tập tin thực thi đã giải mã ra khỏi thiết bị.) Vì vậy, có lẽ nó sẽ trở lại bản gốc? Tôi tự hỏi nếu có bất kỳ cách nào để kiểm tra nếu đây là trường hợp. Tôi cho rằng bạn có thể ssh vào một iPhone jailbroken và sao chép các ứng dụng thực thi tắt của nó, sau đó xem phiên bản đó là giống hệt nhau? – JohnSpeeks

2

Ứng dụng này cũng được tước chữ ký của bạn và được ký bởi Apple. Điều này có thể được xác minh bằng cách chạy "codesign -vvvvd" trên nhị phân ứng dụng bạn gửi và so sánh nó với đầu ra của "codesign -vvvvd" của ứng dụng nhị phân bạn tải xuống từ cửa hàng.

Do đó, các băm sẽ không khớp.

Các vấn đề liên quan