שְׁאֵלָה:
כאשר יישומים חתומים על קוד, אילו חלקים מחבילת .app מכסה החתימה?
Daniel
2012-03-28 18:14:46 UTC
view on stackexchange narkive permalink

ב- Mountain Lion אני יודע שחלק מהיישומים, כולל כל היישומים ב- Mac App Store, חתומים דיגיטלית על ידי המפתח, כך שאם הם ישתנו, החתימה לא תתאים והיא תעלה כל מיני שגיאות ( והמצב ידרדר עם המהדורה הבאה של מערכת ההפעלה ...).

השאלה שלי היא אילו חלקים מחבילת ה- .app מכסה החתימה? אם משהו ב Appname.app/Contents משתנה (כולל מטא נתונים, כמו התאריך שהשתנה עבור התיקיה Contents ), האם זה שובר את החתימה? האם זה רק בינארי ב- תוכן / MacOS ? האם הרשימות כלולות בחתימה? המשאבים ? כמשתמש קצה, מה אוכל לפרוץ (אם בכלל) מבלי לשבור את החתימה?

נשמע שאתה צריך להתחיל לבדוק, ולספר לנו!
אני יכול, ואם אף אחד לא יודע את התשובה, אדע, אבל אם מישהו כבר בדק, אני לא צריך להמציא את הגלגל מחדש.
הגלגל הזה יכול * להשתמש * בשיפורים מסוימים. אני חושב שסובבי כרום הם חובה, דבר אחד.
שתיים תשובות:
Ian C.
2012-03-28 19:48:18 UTC
view on stackexchange narkive permalink

TL; DR על המפתח לבחור אילו חלקים מהאפליקציה ייחתמו והאם התעסקות עם אותם חלקים תביא לפעולות כלשהן בעת ​​הפעלת האפליקציה. עליכם להשתמש בניסוי וטעייה בכדי להבין זאת על בסיס יישום אחר אפליקציה.

במידה רבה, על המפתח להחליט אילו רכיבים בחבילת היישומים שלהם מיוצגים ב- חותם שנחתם לפני שהם מגישים את בקשתם. כל דבר בחותם הוא למעשה חסין טמפר מכיוון שלרוב אי אפשר לשנות את הדברים האלה מבלי לשנות את חתימות החשיש שלהם. אבל זה לא אומר בעצם שלא תוכלו להתעסק איתם.

במדריך למפתחים של אפל יש את זה לומר על מה עליכם לחתום:

עליך לחתום על כל הפעלה במוצר שלך, כולל יישומים, כלים, כלי עזר מוסתר, כלי עזר וכו '. חתימה על חבילת יישומים מכסה את המשאבים שלה, אך לא את רכיבי המשנה שלה כגון כלים וחבילות משנה. יש לחתום על כל אחד מאלה באופן עצמאי.

אם היישום שלך מורכב מחלק ממשק משתמש גדול עם כלי עוזר אחד או יותר המנסים להציג פנים בודדות למשתמש, אתה יכול להפוך אותם ללא הבחנה לחתימת קוד. על ידי מתן לכולם אותו מזהה חתימת קוד בדיוק. (אתה יכול לעשות זאת על ידי לוודא שלכולם יש את אותו ערך CFBundleIdentifier ב Info.plist שלהם, או על ידי שימוש באפשרות -i בפקודה codesign, כדי להקצות אותו מזהה.) במקרה זה, לכל רכיבי התוכנית שלך יש גישה לאותם פריטי מחזיק מפתחות ותוקף כמו אותה תוכנית. עשה זאת רק אם התוכניות המעורבות אמורות באמת ליצור ישות אחת, ללא הבחנות.

בינארי אוניברסלי (צרור או כלי) מוחל באופן אוטומטי חתימות בודדות על כל רכיב ארכיטקטורה. אלה אינן תלויות, ובדרך כלל רק הארכיטקטורה המקומית במערכת של משתמש הקצה מאומתת.

במקרה של חבילות מתקינים (חבילות .pkg ו- .mpkg), הכל חתום באופן מרומז: בארכיון ה- CPIO המכיל את המטען, בארכיון ה- CPIO המכיל סקריפטים להתקנה ושטר החומרים (BOM) כל אחד מתועד ב- hash בכותרת ה- XAR, וכותרת זו בתורה נחתמת. לכן, אם תשנה סקריפט התקנה (למשל) לאחר חתימת החבילה, החתימה תהיה לא חוקית.

ייתכן שתרצה גם לחתום על התוספים והספריות שלך. למרות שזה לא נדרש כרגע, זה יהיה בעתיד, ואין חסרון שיש חתימות על רכיבים אלה.

בהתאם למצב, סימן קודי עשוי להוסיף לקובץ ההפעלה של Mach-O שלך, הוסף תכונות מורחבות אליו, או צור קבצים חדשים בספריית התוכן של החבילה שלך. אף אחד מהקבצים האחרים שלך לא שונה.

כמו כן מכאן זה לא בהכרח נכון שיש חתימה לא חוקית ליישום שמשמעותו שהוא לא יופעל. הדף אומר:

על המערכת או על התוכנית להפעיל או לטעון קוד חתום להחליט אם לאמת את החתימה, ואם כן, לקבוע כיצד להעריך את התוצאות של אימות זה.

יישום עשוי לבחור לאפשר שינויים.

הפתרון הטוב ביותר שלך הוא גישה לניסוי וטעייה בכל יישום שאתה מנסה לשנות. יכול להיות שזה יעבוד, אולי לא. אין תשובה אמיתית תמיד שניתן לתת.

אם אפליקציה הוחתמה אתה יכול לחפש קובץ תוכן / CodeResources או תוכן / _CodeSignature / CodeResources קובץ בחבילה. קובץ זה מפרט את כל הרכיבים החתומים ואת ערכי ה- hash הצפויים שלהם בחבילה. זה מקום טוב להתחיל להבין אילו חלקים ביישום מפתח רואה קריטי מספיק כדי לצפות בשינויים.

Gunnar
2017-02-03 18:10:25 UTC
view on stackexchange narkive permalink

למרות שהשאלה מתייחסת באופן ספציפי להר האריה, חל שינוי חשוב בגרסה החדשה יותר של macOS.ב- macOS 10.11 ואילך, חתימות שלא מכסות את כל הקוד נדחות.

ראה הערה טכנית TN2206 - עומק חתימת קוד macOS.



שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...