שְׁאֵלָה:
פירוק בינארי באופן סטטי
EfForEffort
2013-03-21 09:24:09 UTC
view on stackexchange narkive permalink

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

איך אוכל ללכת סטטי לפרוק אותו? (עריכה: זאת אומרת, לפרוק אותו ללא כל גישה למכשיר המקורי.)

אתה יכול לנסות להריץ אותו עם אחד מאמולטורי מצב המשתמש שסופקו עם QEMU ... זה יעזור אם אתה יודע יותר על זה כנראה מפרק יעזור כמו IDA אולי זה אחד הסוגים שהגרסה החינמית יכולה לעבוד איתם. אני גם לא בטוח למה אתה מתכוון ב"פריקה סטטית "
אידה פרו ואמולטור Bochs נראה כמו דרך ללכת, עיין [כאן] (https://www.hex-rays.com/products/ida/support/tutorials/debugging_bochs.pdf) להדרכה.
@Remko: אבוי Bochs רק מחקה את x86 ולכן לא סביר שיעזור כאן
@cb88, יש לי עותק של IDA Pro. ומה שאני מתכוון זה שאני רוצה לפרוק את הסיסמה הבינארית אבל אין לי את המכשיר שאליו נועד במקור. נראה ש- QEMU + mipsel הוא הדרך ללכת; אני מוריד את debian-mipsel עכשיו.
סביר להניח שתוכלו לעשות זאת גם בשורש, עם גישי ג'נטו ואמולטור usemode של qemu סטטי, אם הדמיית מערכת ה- qemu מכושלת מדי או קשה להוציא מהם נתונים. http://www.gentoo.org/proj/en/base/embedded/handbook/?part=1&chap=5
ארבע תשובות:
ixje
2013-03-21 13:47:32 UTC
view on stackexchange narkive permalink

במהלך 30+ תוכנות הטמעה במכשירים שראיתי בעבר, לעתים רחוקות ראיתי אותם משתמשים במשהו קנייני. לעתים קרובות זה רק gzip / LZMA או דחיסה דומה בה הם משתמשים (אם כי לפעמים עם כותרות ששונו או הופשטו).

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

לבסוף תוכל לנסות לברר אם הם משתמשים באלגוריתם קנייני כלשהו או לחקות את האלגוריתם הזה באמצעות QEMU או gxemul או כתוב מדחיסת עצמך בשפה ברמה גבוהה יותר.

זה רעיון טוב. רצתי את binwalk ולא מצא שום דבר פרט לכך שהוא ELF (כלומר, הוא דיווח רק על איזה קובץ (1) דיווח). גם חיפוש סימנים לא מצא שום דבר. אני מניח שהצעד הבא הוא QEMU.
user1354557
2013-03-22 22:34:35 UTC
view on stackexchange narkive permalink

ב- The Ida Pro Book, כריס איגל מדגים שימוש בתוסף בשם ida-x86emu, שניתן להשתמש בו לפירוק סטריטי של קבצים בינאריים על ידי הדמיית ביצוע במאגר IDA . תבדוק את זה; זה קוד פתוח וזה די קל לשימוש.

למרבה הצער לא עוזר מכיוון שמדובר בבינארי MIPS = [
Ange
2013-03-26 21:17:16 UTC
view on stackexchange narkive permalink

מספר דרכים אפשריות:

  1. זיהוי החבילה

    • קבל חבילת סטנדרטים של הפלטפורמה שלך ( UPX למשל ), בדוק אם זה לא זה שבשימוש.
    • אם מדובר בחבילה רגילה, אז אולי כבר זכית, כפי שהוא עשוי להיות מתועד, או אפילו טוב יותר, כמו UPX, הוא יכול לפרוק את עצמו והוא קוד פתוח.
  2. זהה את האלגוריתם

    • אין כל כך הרבה אלגוריתמי חבילות טובים ונרחבים (NRV, LZMA, JCAlg, ApLib, BriefLZ). בדרך כלל ניתן לזהות אותם בקלות על פי גודל גופם או קבועיהם. (יישמתי כמה מהם בפייתון טהור ב- Kabopan)
    • אם תוכלו לזהות בקלות את אלגוריתם האריזה / ההצפנה, אז כנראה שתמצאו מימוש נקי לפריקה סטטית
  3. ללכלך את הידיים

    • אם אתה עדיין לא מכיר את האלגוריתם וזה כנראה באמת מותאם אישית, ואז קרא עוד Packer לאותה פלטפורמה (כלומר, קרא את UPX Mips בינארי ואת המקור שלה), כך שהוא יכול להכיר טריקים דומים (Packer) המשמשים בפלטפורמה שלך.
    • ואז חפש את אלגוריתם הדחיסה האפשרי (ככל הנראה חתיכת קוד למראה שונה, אנשים ש לעתים רחוקות מאוד מתעסקים איתם, ומיישמים מחדש את האלגוריתם בשפה המועדפת עליך, ומפרקים חיצונית (איתור פרמטרים, החלת אלגוריתמים, שינוי / שחזור בינארי)
  4. שיטה עצלה על ידי אכיפת ברוטו: לאלגוריתמים כמו ApLib אין כותרת או פרמטר (אפילו לא גודל): האלגוריתם רק דורש מצביע ל- comp מאגר essed, כך שלפעמים זה מספיק פשוט לנסות את זה בעיוורון בכל קיזוז של הבינארי שלך, ולבדוק אם אנחנו מקבלים מאגר מכובד מדחוס (לא קטן מדי, לא ענק + מלא 00s).

Rolf Rolles
2013-03-21 12:43:01 UTC
view on stackexchange narkive permalink

התשובה הכללית שלי תהיה "על ידי הדמיית פעולות לשינוי עצמי מול הבינארי הארוז". כך למשל, זה יקיף את הסרת הדחיסה שרוב החבילות מוסתרות תחתיה. פעולה זו תדרוש "מעקב סטטי" אחר זרימת הביצוע דרך ה- Packer, שהקוד שלה עשוי להיות בשינוי עצמי.

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



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