שְׁאֵלָה:
העלאת בינאריות של כל קשת לשפת ביניים לניתוח סטטי
frogatto
2016-04-17 12:16:31 UTC
view on stackexchange narkive permalink

רקע

מכיוון שהכותרת מסבירה את עצמה, ברצוני לתרגם קבצים בינאריים מכל ארכיטקטורה (למשל x86, ARM, ARM Thumb) לשפת ביניים על מנת ליישם ניתוח סטטי בלתי תלוי בקשת. .

ליתר דיוק, עבודתי מוגבלת לאובייקטים המשותפים המסופקים בקבצי APK לפלטפורמת Android. הדרישות הבסיסיות שלי, שהייתי מצפה מה- IL לעמוד בהן, הן כדלקמן (למעשה המטרה שלי היא לחלץ זרמי מידע מקובץ .so נתון שסופק בקובץ APK).

  • חיתוך בינארי
  • PDG (CFG / DFG)
  • נתמך היטב על ידי התחזוקה שלו או הקהילה שלו

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

  • OpenREIL: מטרת פרויקט זה היא להעלות קבצים בינאריים תלויי קשת ל- REIL.
  • Barf Project: ניתוח בינארי עם קוד פתוח מרובה צורות ומסגרת הנדסה הפוכה
  • Capstone: מסגרת פירוק.
  • אפוס: כלי זה מתרגם קבצים בינאריים של כל קשת לקוד ביט LLVM שאינו תלוי בקשת. (פרויקט זה אינו ציבורי, ולכן אינני יכול להשתמש בו.)

שאלה

האם יש שם IL כלשהו בו אני משתמש לניתוח סטטי של תלוי קשת .so קובץ (בתוך ארכיון APK) על מנת לחלץ זרימות מידע? בעיקרון אני רוצה שיספק דרישות בסיסיות כגון חיתוך ו- PDG.

התוצאות כאן עשויות להיות מועילות: https://www.google.com/webhp?q="static"+"binary+rewriting"+OR+"binary+transformation"+OR+"binary+translation"+"intermediate"+OR+ "ייצוג מופשט +"
תוכל גם לנסות https://github.com/zaddach/libqemu, אם כי זה בשלבים מוקדמים.
אמנם לא שרירותי, נראה כי bap תומך בהרמת הזרוע וב- x86 עד bil.
חָמֵשׁ תשובות:
Jeff
2016-06-16 05:55:19 UTC
view on stackexchange narkive permalink

Radare2 עשוי להיות מה שאתה מחפש:

https://github.com/radare/radare2

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

joxeankoret
2016-08-17 18:12:33 UTC
view on stackexchange narkive permalink

ההמלצה שלי היא להשתמש ב- libVEX, מכיוון שזו ספריית קוד הביניים החזקה ביותר שאני מכיר. זה חלק מ- Valgrind ותומך בעומס של ארכיטקטורות. באפשרותך להשתמש ב- libVEX בתוכנית C / C ++ או לחילופין להשתמש בכריכות Python הנקראות PyVex.

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

בהצלחה!

האם VEX מטפל בחישובי דגלים כעת? הם משמיטים מידע סמנטי, והופכים אותו לבלתי אפשרי עבור מקרים מסוימים של ניתוח סטטי
כן, היא מבצעת חישובי דגלים וקוראת לפונקציות בדיקה פנימיות כדי לקבוע אם על פי הדגלים המתורגמים יש לקחת את הקפיצה או לא.
למרבה הצער, ווקס עדיין לא יכול לבטא את כל חישובי הדגל בתחביר משלו עדיין פונקציות עוזרות עצלות. : / לא תקבל מזה מידע סמנטי אלא אם תנתח את עצמך לבד.
אה, כן, זה נכון. עם זאת, אני לא מצליח להבין למה זה יכול לגרום לבעיות גדולות. האם תוכל בבקשה לתת לי דוגמה שבה הדגלים המחושבים של VEX + חישובים ידניים יכולים להיות בעייתיים? או שזה פשוט מעצבן כי אתה צריך להמציא את הגלגל מחדש?
זה יותר על המצאת הגלגל מחדש. VEX אכן פותר את פונקציות העוזר שלה באופן פנימי. מרבית הפרויקטים המשתמשים במידע זה (כמו אנגר) מיישמים מחדש את כל פונקציות העוזר.
ivg
2016-09-27 17:12:16 UTC
view on stackexchange narkive permalink

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

לייצוג הביניים שלנו יש סמנטיקה מוגדרת רשמית, והמעליות שלנו מאומתות באופן אינטנסיבי באמצעות מסגרת האימות שלנו. עד היום, המרימים שלנו תומכים בארכיטקטורות רבות - x86, x86-64, mips32, mips64, powerpc32, powerpc64 ו- armv7.

זה לא הוגן שלא להזכיר ספריות אחרות, לפחות Radare2 ו- Angr.

ייצוג הביניים של Radare2 נקרא ESIL. זה לא קריא לאדם (אלא אם כן אתה מתכנת Forth), אך הוא האמין שהוא יעיל. יש להם תמיכה בלפחות 5 ארכיטקטורות (ARM, x86, GameBoy ו- 8051).

Angr משתמש בספריית VEX (כלומר GPL'ed) עבור הרם, כך שיש להם תמיכה מחוץ לקופסה לחמש ארכיטקטורות (x86, arm, mips, ppc, s390). גם שפת ה- VEX אינה ניתנת לקריאה (למרות שהיא עדיין טובה יותר מ- ESIL) ומאבדת דיוק מסוים. השתמשנו ב- VEX בגלגולים קודמים של BAP, אך עברנו למרימים שלנו לפני שנים רבות.

Nordwald
2016-09-28 12:26:43 UTC
view on stackexchange narkive permalink

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

ישנם שני יוצאים מן הכלל הבולטים:

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

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

מכיוון שניתוח סטטי מצריך SMT במשך רוב הרמת הכבד שלו, נקטנו להמיר IRs לנוסחאות לוגיות והשתמשנו בהם כ סוג של ייצוג ביניים.

לדוגמא:

  pop eax  

שווה ל:

esp = esp -4

[esp - 4] = eax

היי נורדוולד, מותר לי לשאול אם העסקת את REIL בסופו של דבר? אם כן, כמה מאמצים נוספים צריכים להיעשות בכדי לגרום לזה לעבוד לביצוע סמלי (מכיוון שציינת פותר SMT)? תודה!
מגוון יישומי REIL כמו BARF כבר מכילים תרגום לפותר ההצהרות. רק תסתכל על הדוגמאות כאן: https://github.com/programa-stic/barf-project/tree/master/examples/scripts/x86
זה מצוין! תודה רבה על המשאב.
BTW: האם אוכל לשאול באיזה "חזית" אתה ממליץ להשתמש? יש לי את ה- IDA-Pro + Binnavi החדש ביותר ...
היי, אנו משתמשים כאן בפתרונות פנימיים מכיוון ש- CFG תקין הוא קריטי לניתוח זרימת נתונים, אך ייתכן שאתה בסדר באמצעות IDA. אני ממליץ להרחיק ממנו את הרמת הכבד (למשל להכין תוסף ייצוא).
Eric Hoang
2016-04-18 12:17:47 UTC
view on stackexchange narkive permalink

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



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