Khi các ứng dụng được ký mã, phần nào của gói .app sẽ bao gồm chữ ký?


13

Trong Mountain Lion, tôi biết rằng một số ứng dụng, bao gồm tất cả các ứng dụng trên Mac App Store được nhà phát triển ký điện tử, để nếu chúng được sửa đổi, chữ ký sẽ không khớp và nó sẽ gây ra tất cả các loại lỗi (và tình huống sẽ leo thang với phiên bản tiếp theo của hệ điều hành ...).

Câu hỏi của tôi là những phần nào của gói .app bao gồm chữ ký? Nếu bất cứ điều gì trong Appname.app/Contentsnhững thay đổi (bao gồm siêu dữ liệu, giống như ngày sửa đổi cho Contentsthư mục), làm thế phá vỡ chữ ký? Có phải nó chỉ là nhị phân trong Contents/MacOS? Là .plists bao gồm trong chữ ký? Cái Resourcesgì? Là người dùng cuối, tôi có thể hack gì (nếu có gì) mà không phá vỡ chữ ký?


Âm thanh như bạn cần để bắt đầu thử nghiệm, và nói với chúng tôi!
Adam Davis

Tôi có thể, và nếu không ai biết câu trả lời, tôi sẽ, nhưng nếu ai đó đã thử nghiệm, tôi không cần phải phát minh lại bánh xe.
Daniel

1
Bánh xe đó hoàn toàn có thể sử dụng một số cải tiến, mặc dù. Tôi nghĩ rằng spinners chrome là phải, cho một điều.
Adam Davis

Câu trả lời:


14

TL; DR Tùy thuộc vào nhà phát triển chọn những phần nào của ứng dụng được ký và việc có hay không can thiệp vào những phần đó dẫn đến bất kỳ hành động nào khi ứng dụng được khởi chạy. Bạn phải sử dụng bản dùng thử và lỗi để tìm ra nó trên cơ sở từng ứng dụng.

Phần lớn tùy thuộc vào nhà phát triển quyết định thành phần nào trong gói ứng dụng của họ được thể hiện trong con dấu được ký trước khi họ giao ứng dụng của họ. Bất cứ điều gì trong con dấu đều có thể chống giả một cách hiệu quả vì hầu như không thể sửa đổi những điều này mà không thay đổi chữ ký băm của chúng. Nhưng điều đó không thực sự có nghĩa là bạn không thể can thiệp vào chúng.

Hướng dẫn dành cho nhà phát triển của Apple có điều này để nói về những gì bạn nên ký:

Bạn nên ký tên mọi thực thi trong sản phẩm của mình, bao gồm các ứng dụng, công cụ, công cụ trợ giúp ẩn, tiện ích, v.v. Việc ký một gói ứng dụng bao gồm các tài nguyên của nó, nhưng không bao gồm các thành phần phụ của nó như các công cụ và các gói phụ. Mỗi trong số này phải được ký độc lập.

Nếu ứng dụng của bạn bao gồm một phần UI lớn với một hoặc nhiều công cụ trợ giúp nhỏ cố gắng hiển thị một mặt cho người dùng, bạn có thể làm cho chúng không thể phân biệt được với việc ký mã bằng cách cung cấp cho chúng tất cả số nhận dạng ký mã chính xác. (Bạn có thể làm điều đó bằng cách đảm bảo rằng tất cả chúng đều có cùng giá trị CFBundleIdentifier trong Info.plist của chúng hoặc bằng cách sử dụng tùy chọn -i trong lệnh Codeign, để gán cùng một mã định danh.) Trong trường hợp đó, tất cả các thành phần chương trình của bạn có truy cập vào cùng các mục móc khóa và xác nhận là cùng một chương trình. Chỉ làm điều này nếu các chương trình liên quan thực sự có nghĩa là tạo thành một thực thể duy nhất, không có sự phân biệt nào được thực hiện.

Một nhị phân phổ quát (gói hoặc công cụ) tự động có chữ ký riêng được áp dụng cho từng thành phần kiến ​​trúc. Chúng là độc lập và thường chỉ có kiến ​​trúc gốc trên hệ thống của người dùng cuối được xác minh.

Trong trường hợp gói gói cài đặt (gói .pkg và .mpkg), mọi thứ đều được ký ngầm: Kho lưu trữ CPIO chứa tải trọng, kho lưu trữ CPIO chứa tập lệnh cài đặt và hóa đơn vật liệu (BOM) đều có băm được ghi trong XAR tiêu đề và lần lượt tiêu đề đó được ký. Do đó, nếu bạn sửa đổi tập lệnh cài đặt (ví dụ) sau khi gói đã được ký, chữ ký sẽ không hợp lệ.

Bạn cũng có thể muốn đăng nhập các trình cắm và thư viện của mình. Mặc dù điều này hiện không bắt buộc, nhưng nó sẽ có trong tương lai và không có bất lợi nào khi có chữ ký trên các thành phần này.

Tùy thuộc vào tình huống, Codeign có thể thêm vào tệp thực thi Mach-O của bạn, thêm thuộc tính mở rộng vào tệp đó hoặc tạo tệp mới trong thư mục Nội dung của gói. Không có tập tin nào khác của bạn được sửa đổi.

Cũng từ đây , không nhất thiết phải có chữ ký không hợp lệ cho một ứng dụng có nghĩa là nó sẽ không khởi chạy. Trang nói:

Tùy thuộc vào hệ thống hoặc chương trình đang khởi chạy hoặc tải mã đã ký để quyết định xem có xác minh chữ ký hay không và nếu có, để xác định cách đánh giá kết quả xác minh đó.

Một ứng dụng có thể chọn để cho phép sửa đổi.

Đặt cược tốt nhất của bạn là cách tiếp cận thử và sai với bất kỳ ứng dụng nào bạn đang cố gắng sửa đổi. Nó có thể làm việc, nó có thể không. Không có câu trả lời luôn luôn đúng có thể được đưa ra.

Nếu một ứng dụng đã được ký, bạn có thể tìm Contents/CodeResourcestệp hoặc Contents/_CodeSignature/CodeResourcestệp trong gói. Tệp này liệt kê tất cả các thành phần đã ký và giá trị băm dự kiến ​​của chúng trong gói. Đây là một nơi tốt để bắt đầu hiểu những phần nào của ứng dụng mà nhà phát triển thấy đủ quan trọng để theo dõi các thay đổi.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.