เมื่อแอปพลิเคชันมีการลงนามรหัสส่วนใดของชุดแอพ. app ที่ครอบคลุมลายเซ็น


13

ใน Mountain Lion ฉันรู้ว่าแอปพลิเคชั่นบางตัวรวมถึงแอพพลิเคชั่นทั้งหมดใน Mac App Store ได้รับการเซ็นชื่อโดยผู้พัฒนาระบบดิจิตอลดังนั้นหากมีการแก้ไขลายเซ็นจะไม่ตรงกันและจะทำให้เกิดข้อผิดพลาดทุกประเภท จะเพิ่มระดับด้วยระบบปฏิบัติการรุ่นถัดไป ... )

คำถามของฉันคือส่วนใดของชุดแอป. app ที่ครอบคลุมลายเซ็น ถ้าอะไรในAppname.app/Contentsการเปลี่ยนแปลง (รวมทั้งเมตาดาต้าเช่นวันที่แก้ไขสำหรับContentsโฟลเดอร์) ไม่ว่าแบ่งลายเซ็นหรือไม่ มันเป็นแค่ไบนารีContents/MacOSหรือไม่? มีรายการ. plists รวมอยู่ในลายเซ็นหรือไม่ Resources? ในฐานะผู้ใช้ปลายทางฉันจะแฮ็คอะไร (ถ้ามี) โดยไม่ทำลายลายเซ็น


ดูเหมือนคุณจะต้องเริ่มการทดสอบและบอกกับเรา!
Adam Davis

ฉันสามารถและถ้าไม่มีใครรู้คำตอบฉันจะ แต่ถ้ามีคนทดสอบแล้วฉันไม่จำเป็นต้องบูรณาการล้อ
Daniel

1
ล้อนั่นอาจใช้การปรับปรุงบางอย่างโดยสิ้นเชิง ฉันคิดว่าต้องใช้สปินเนอร์โครเมี่ยมอย่างหนึ่ง
Adam Davis

คำตอบ:


14

TL; DR ขึ้นอยู่กับผู้พัฒนาที่จะเลือกว่าส่วนใดของแอพที่ลงชื่อและไม่ว่าการแก้ไขด้วยผลงานชิ้นนั้นจะส่งผลให้เกิดการกระทำใด ๆ เมื่อเปิดตัวแอพ คุณต้องใช้การทดลองและข้อผิดพลาดในการพิจารณาเป็นรายแอป

ส่วนใหญ่ขึ้นอยู่กับผู้พัฒนาที่จะตัดสินใจว่าส่วนประกอบใดในชุดแอปพลิเคชันของพวกเขาจะถูกแสดงในตราประทับที่ได้รับการลงนามก่อนที่พวกเขาจะส่งใบสมัครของพวกเขา สิ่งใดก็ตามในตราประทับที่มีการพิสูจน์การงัดแงะได้อย่างมีประสิทธิภาพเนื่องจากส่วนใหญ่ไม่สามารถแก้ไขสิ่งเหล่านี้ได้โดยไม่ต้องเปลี่ยนลายเซ็นแฮช แต่นั่นไม่ได้หมายความว่าคุณไม่สามารถเข้าไปยุ่งกับพวกเขาได้

คู่มือนักพัฒนา Appleได้กล่าวถึงสิ่งที่คุณควรเซ็น:

คุณควรลงชื่อทุกไฟล์ที่ปฏิบัติการได้ในผลิตภัณฑ์ของคุณรวมถึงแอพพลิเคชั่น, เครื่องมือ, เครื่องมือช่วยเหลือที่ซ่อนอยู่, ยูทิลิตี้และอื่น ๆ การเซ็นชื่อบันเดิลของแอปพลิเคชันนั้นครอบคลุมถึงทรัพยากร แต่ไม่รวมถึงคอมโพเนนต์ย่อยเช่นเครื่องมือและกลุ่มย่อย แต่ละรายการจะต้องลงชื่อด้วยตนเอง

หากแอปพลิเคชันของคุณประกอบด้วยส่วน UI ขนาดใหญ่ที่มีเครื่องมือช่วยเหลือตัวน้อยหนึ่งตัวหรือมากกว่าที่พยายามนำเสนอหน้าเดียวให้กับผู้ใช้คุณสามารถทำให้พวกเขาไม่สามารถแยกแยะการเซ็นชื่อรหัสได้ (คุณสามารถทำได้โดยตรวจสอบให้แน่ใจว่าพวกเขาทั้งหมดมีค่า CFBundleIdentifier เดียวกันใน Info.plist หรือโดยใช้ตัวเลือก -i ในคำสั่ง codesign เพื่อกำหนดรหัสเดียวกัน) ในกรณีนั้นองค์ประกอบโปรแกรมทั้งหมดของคุณมี เข้าถึงรายการพวงกุญแจเดียวกันและตรวจสอบเป็นโปรแกรมเดียวกัน ทำสิ่งนี้เฉพาะเมื่อโปรแกรมที่เกี่ยวข้องมีความหมายอย่างแท้จริงในการสร้างเอนทิตีเดียวโดยไม่มีการแยกความแตกต่าง

universal binary (บันเดิลหรือเครื่องมือ) จะมีลายเซ็นของแต่ละบุคคลที่ใช้กับแต่ละองค์ประกอบของสถาปัตยกรรมโดยอัตโนมัติ สิ่งเหล่านี้มีความเป็นอิสระและมักจะมีเพียงสถาปัตยกรรมดั้งเดิมในระบบของผู้ใช้ปลายทางที่ได้รับการตรวจสอบแล้ว

ในกรณีของแพ็คเกจตัวติดตั้ง (ชุด. pkg และ. mp4) ทุกอย่างจะถูกลงชื่อโดยปริยาย: ไฟล์เก็บถาวร CPIO ที่ประกอบด้วยส่วนบรรจุข้อมูล, ชุดเก็บถาวร CPIO ที่ประกอบด้วยสคริปต์ติดตั้งและรายการวัสดุ (BOM) แต่ละรายการจะมีแฮชที่บันทึกไว้ใน XAR ส่วนหัวและส่วนหัวนั้นจะถูกเซ็นชื่อ ดังนั้นหากคุณแก้ไขสคริปต์การติดตั้ง (ตัวอย่าง) หลังจากแพ็คเกจได้ลงนามแล้วลายเซ็นจะไม่ถูกต้อง

คุณอาจต้องการลงชื่อปลั๊กอินและไลบรารีของคุณ แม้ว่าจะไม่จำเป็นต้องใช้ในปัจจุบัน แต่จะมีในอนาคตและไม่มีข้อเสียในการมีลายเซ็นบนส่วนประกอบเหล่านี้

Codeign อาจเพิ่มลงในไฟล์เรียกทำงาน Mach-O ของคุณเพิ่มแอตทริบิวต์เพิ่มเติมหรือสร้างไฟล์ใหม่ในไดเรกทอรีเนื้อหาของบันเดิลของคุณ ไม่มีไฟล์อื่นของคุณถูกแก้ไข

นอกจากนี้จากที่นี่มันไม่จำเป็นต้องเป็นจริงว่ามีลายเซ็นไม่ถูกต้องสำหรับการประยุกต์ใช้วิธีการที่มันจะล้มเหลวในการเปิดตัว หน้าพูดว่า:

มันขึ้นอยู่กับระบบหรือโปรแกรมที่เปิดตัวหรือโหลดรหัสที่เซ็นชื่อเพื่อตัดสินใจว่าจะตรวจสอบลายเซ็นหรือไม่และหากเป็นเช่นนั้นเพื่อกำหนดวิธีการประเมินผลลัพธ์ของการตรวจสอบนั้น

แอปพลิเคชันอาจเลือกที่จะอนุญาตการแก้ไข

ทางออกที่ดีที่สุดของคุณคือวิธีการทดลองและข้อผิดพลาดกับแอปพลิเคชันที่คุณพยายามแก้ไข มันอาจใช้งานได้ ไม่มีคำตอบที่เป็นจริงที่สามารถให้ได้

หากแอปได้รับการลงนามคุณสามารถค้นหาContents/CodeResourcesไฟล์หรือ Contents/_CodeSignature/CodeResourcesไฟล์ในชุดรวม ไฟล์นี้แสดงรายการส่วนประกอบที่ลงนามทั้งหมดและค่าแฮชที่คาดไว้ในบันเดิล เป็นจุดเริ่มต้นที่ดีในการทำความเข้าใจว่าแอปพลิเคชันชิ้นใดที่นักพัฒนาเห็นว่าสำคัญพอที่จะคอยดูการเปลี่ยนแปลง


0

แม้ว่าคำถามจะอ้างถึง Mountain Lion เป็นพิเศษ แต่มีการเปลี่ยนแปลงที่สำคัญใน macOS รุ่นใหม่ บน macOS 10.11 ขึ้นไปลายเซ็นที่ไม่ครอบคลุมรหัสทั้งหมดจะถูกปฏิเสธ

ดูหมายเหตุทางเทคนิค TN2206 - ลงนาม MacOS รหัสในความลึก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.