Uygulamalar kod imzalı olduğunda, .app paketinin hangi bölümleri imza içerir?


13

Mountain Lion'da, Mac App Store'daki tüm uygulamalar da dahil olmak üzere bazı uygulamaların geliştirici tarafından dijital olarak imzalandığını biliyorum, böylece değiştirilirlerse imza eşleşmeyecek ve her türlü hatayı (ve durumu) artıracaktır. işletim sisteminin bir sonraki sürümünde yükselecektir ...).

Sorum şu. İmzası .app paketinin hangi kısımlarını kapsıyor? Eğer her şey içinde Appname.app/Contents(modifiye tarih gibi meta veriler de dahil olmak üzere değişiklikleri Contentsklasöründe), bu mola imza yapar? Bu sadece ikili Contents/MacOSmi? .Plists imzaya dahil edilmiş mi? Resources? Son kullanıcı olarak imzayı bozmadan ne yapabilirim (varsa)?


Teste başlamanız ve bize söylemeniz gerekiyor gibi görünüyor!
Adam Davis

Yapabilirim ve eğer cevabı kimse bilmiyorsa, yapacağım, ama eğer birisi zaten test etmişse, tekerleği yeniden keşfetmem gerekmiyor.
Daniel

1
Yani tekerlek olabilir tamamen olsa bazı iyileştirmeler kullanabilirsiniz. Bir kere krom iplikçilerinin bir zorunluluk olduğunu düşünüyorum.
Adam Davis

Yanıtlar:


14

TL; DR Uygulamanın hangi parçalarının imzalandığını ve bu parçalara müdahale edip etmediğini uygulama başlatıldığında herhangi bir eylemle sonuçlanıp sonuçlanmayacağını seçmek geliştiriciye bağlıdır. Uygulama bazında anlamak için deneme yanılma yöntemini kullanmanız gerekir.

Uygulama paketindeki hangi bileşenlerin, uygulamalarını teslim etmeden önce imzalanan mühürde temsil edildiğine karar vermek, geliştiriciye bağlıdır. Mühürdeki her şey etkili bir şekilde kurcalamaya dayanıklıdır, çünkü hash imzalarını değiştirmeden bu şeyleri değiştirmek imkansızdır. Ama bu aslında onlarla kurcalamayacağınız anlamına gelmez.

Apple Geliştirici kılavuzunda aşağıdakileri imzalamanız gereken şeyler vardır:

Uygulamalar, araçlar, gizli yardımcı araçlar, yardımcı programlar vb. Dahil olmak üzere ürününüzdeki her yürütülebilir dosyayı imzalamanız gerekir. Bir uygulama paketini imzalamak kaynaklarını kapsar, ancak araçlar ve alt paketler gibi alt bileşenlerini kapsamaz. Bunların her biri bağımsız olarak imzalanmalıdır.

Uygulamanız, kullanıcıya tek bir yüz sunmaya çalışan bir veya daha fazla küçük yardımcı araç içeren büyük bir kullanıcı arabirimi parçasından oluşuyorsa, bunları tamamen aynı kod imzalama tanımlayıcısını vererek kod imzalama için ayırt edilemez hale getirebilirsiniz. (Bunların Info.plist'lerinde hepsinin aynı CFBundleIdentifier değerine sahip olduğundan emin olarak veya aynı tanımlayıcıyı atamak için codesign komutunda -i seçeneğini kullanarak yapabilirsiniz.) Bu durumda, tüm program bileşenlerinizde aynı anahtarlık öğelerine erişin ve aynı programla doğrulayın. Bunu yalnızca ilgili programların hiçbir ayrım yapılmadan tek bir varlık oluşturması gerekiyorsa yapın.

Evrensel bir ikili dosyaya (paket veya araç) otomatik olarak her mimari bileşene ayrı ayrı imzalar uygulanır. Bunlar bağımsızdır ve genellikle yalnızca son kullanıcının sistemindeki yerel mimari doğrulanır.

Yükleyici paketleri (.pkg ve .mpkg demetleri) durumunda, her şey dolaylı olarak imzalanır: Yükü içeren CPIO arşivinin, yükleme komut dosyalarını içeren CPIO arşivinin ve malzeme listesinin (BOM) her biri XAR'da kayıtlı bir karma içerir ve bu başlık da imzalanır. Bu nedenle, paket imzalandıktan sonra bir yükleme komut dosyasını (örneğin) değiştirirseniz, imza geçersiz olur.

Eklentilerinizi ve kitaplıklarınızı da imzalamak isteyebilirsiniz. Bu şu anda gerekli olmasa da, gelecekte olacak ve bu bileşenler üzerinde imzaya sahip olmanın bir dezavantajı yoktur.

Duruma bağlı olarak, codeign Mach-O yürütülebilir dosyanıza ekleyebilir, dosyaya genişletilmiş öznitelikler ekleyebilir veya paketinizin Contents dizininde yeni dosyalar oluşturabilir. Diğer dosyalarınızın hiçbiri değiştirilmedi.

Ayrıca buradan , bir uygulama için geçersiz bir imzaya sahip olmanın, uygulamanın başlatılamayacağı anlamına geldiği doğru değildir. Sayfa diyor ki:

İmzanın doğrulanıp doğrulanmayacağına karar vermek ve eğer varsa, bu doğrulamanın sonuçlarının nasıl değerlendirileceğini belirlemek, imzalı kodu başlatan veya yükleyen sistem veya programa bağlıdır.

Bir uygulama değişikliklere izin vermeyi seçebilir.

En iyi seçeneğiniz, değiştirmeye çalıştığınız herhangi bir uygulama için deneme yanılma yaklaşımıdır. Çalışabilir, olmayabilir. Verilebilecek her zaman doğru cevap yoktur.

Bir uygulama imzalanmışsa paketteki bir Contents/CodeResourcesdosyayı veya dosyayı arayabilirsiniz Contents/_CodeSignature/CodeResources. Bu dosya, imzalı bileşenleri ve paketteki beklenen karma değerlerini listeler. Bir geliştiricinin değişiklikleri izlemek için yeterince kritik gördüğü uygulamanın hangi parçalarını anlamaya başlamak için iyi bir yerdir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.