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

מה זה הנדסה הפוכה?

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

  • (FLT:0)Static AnalysisofLT:1 - בחינת הקוד בינארי ללא ביצועו. Disa להרכיבrs ו decompilers להפוך קוד מכונה לאסיפה או ייצוגים ברמה גבוהה, חשיפה לזרימת בקרה, תלות בנתונים, ומחרוזת משובצת.
  • (FLT:0) ניתוחי דידמטיקה (Dynamicment AnalysisFLT:1) - שמירה על התוכנית במהלך ביצוע. Debuggers, עוקבים ומסגרות כלי לכידת התנהגות במשרה רצופה, כגון הקצאת זיכרון, שיחות תפקוד ובקשות רשת.
  • (FLT:0)Hybrid AnalysisFLT:1 - שילוב שתי הגישות לממצאים חוצה-סוליים.לדוגמה, מפולת סטטית עשויה לייצר גרף זרימה חלקי, אשר לאחר מכן הוא מאושר ומעודן על ידי ניתוק דרך הקוד ב debugger.

הנדסה הפוכה היא בעלת ערך במיוחד כאשר קוד המקור המקורי אינו זמין - בין אם כי התוכנה היא קניינית, המקור אבד, או זה נכתב בשפה אשר מאגד קוד מכונה (למשל, C / C++, Rust, Go) הוא גם ממלא תפקיד מפתח בהבנה של ספריות צד שלישי, מערכות מורשת ופרויקטים נטושים.

התפקיד הקריטי של הנדסה הפוכה בוויכוח

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

מעקב אחר זיכרון שחיתות והתנהגות לא מוגדרת

(התעלומי זיכרון) – כגון buffer overflows, שימוש ללא תשלום, ושחרור כפול - הם קשים לשמצה לשחזר ולאבחון. debuggers ברמת המקור לעתים קרובות התרסקות או להציג נתונים מושחתים לפני שהסיבה השורש הוא גלוי.

תגיות קשורות Optimized Release

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

הבנה של צדדים שלישיים וסגור-מקור

(היישומים המודרניים תלויים במידה רבה בספריות של צד שלישי, שרבים מהם מחולקים כבתים בלבד.כאשר באג מתגלה בתוך ספרייה כזו – למשל, תאונת דרכים או דליפת זיכרון ב- SDK קנייני – המפתח אינו יכול לגשת למקור. הנדסה הפוכה מאפשרת להם למפות את הגרף או מבנה נתונים ספציפי, לזהות את התנאים המעוררים אותו, או לעבוד סביב הנושא או לספק דו"ח מפורט ל-F1:

המונחים: heisenbugs

[הההימים] – החרקים שנעלמו או משנים את ההתנהגות כאשר אתם מנסים להתבונן בהם – הם איסור על כל מפתח, הוספת הצהרה יומן או נקודת-הפסקה יכולים לשנות את התזמון מספיק כדי להסוות את מצב הגזע. טכניקות הנדסיות הפוכה כגון: FLT:0instruction- tracings-FLT:1 (באמצעות כלים כמו אינטל או ARM ETM) לוכדות לחלוטין, לא-in-in-inating גישה זו של שימוש בגרסאות של מערכת הפעלה נמוכה של שימוש ב-in-in-in-ination, לאחר מכן, לאחר מכן, לאחר מכן, לאחר מכן, הוא ביטוי של שימוש ב-inating של שימוש ב-inating של שימוש ב-inating c-inating של שימוש ב-inating cLT1.

אופטימיזציה באמצעות הנדסה הפוכה

אופטימיזציה ביצועים שואפת להפחית את זמן הביצוע, שימוש בזיכרון, צריכת חשמל, או I / O over. פרופילים יכול לזהות נקודות חמות בתפקוד או ברמת קו, אבל הם לא תמיד יכולים להסביר את FLT:0 למה FLT:1 נתיב קוד מסוים הוא איטי. הנדסה הפוכה מספקת את המיומנות הנדרשת כדי להבין אפקטים מיקרו-אסטרטגיים, החלטות מסובכות, ואלגוריתמים חוסר יעילות.

ניתוח קוד משולם לצווארי בקבוק

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

זיהוי פנים נסתרות ב- Language Runtimes

(ב) שפות מנוהלות כמו Java, C#, ו- Python מסתירות פרטים רבים מאחורי זמני הריצה שלהם, אספני אשפה, ובדיוק בזמן (JIT) מנדסים הפוכה יכול לחשוף פרטים בלתי צפויים: גישה לכאורה בלתי-מופת של רכוש ב- C# עשויה לכלול קריאה וירטואלית ובדיקת cacheupup; רשימה פשוטה של פיית' עשוי להקצות אלפי אובייקטים כמו: FLT5b:

אופטימיזציה של Legacy ו- Closed-Source

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

דוגמה: GPU Shader Optimization

בתכנות גרפיות, צללים נאספים עבור ארכיטקטורות GPU ספציפיות בריצה או לא מקוון.הדלפק של הנהג הוא קופסה שחורה.על ידי הפעלת לאחור של ההרכבה המאגדת (באמצעות כלים כמו FLT:0AMD Radeon GPU Analyzer מסגרת Analyzerplace FLT:1 או FLT:2NVidia NSightFLT 3), יכול לראות בדיוק כמה מפתחים כפולים, אשר מורידים, ולהפחית את הדחפים אלה, אשר משפרים את העלולים להיות, ולהפחית את הפחתת לשפוך.

כלים וטכניקות להנדסת מעוותת בוויכוח ואופטימיזציה

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

מפיצים ו Decompilers

  • (FLT:0GhidraphigFLT:1) - מסגרת הנדסה לאחור קוד פתוח מ-NSA.It כוללת decompiler רב עוצמה המייצרת קוד דמוי C מ x86, ARM, ואדריכלות רבות אחרות. אידיאלי עבור ניתוח סטטי ותסריט ניתוחים מותאמים אישית.
  • (FLT:0)IDA ProveFLT:1 - תקן הזהב להנדסה הפוכה מסחרית.הפיזור האינטראקטיבי שלה ו- cross-references הם מעודן עמוק.ה-Rays decompiler תוסף מספק דיפלומה באיכות גבוהה עבור x8648 ו- ARM.
  • (ב) ,0)HopperveFLT:1 - אלטרנטיבה סבירה יותר עבור macOS ולינוקס, עם ממשק נקי ויכולות פיזור הגון.

דינמי ניתוח וכלי רכב

  • (FLT:0)x64dbiggFLT:1 - קוד פתוח פופולרי עבור Windows, מצוין עבור התפוצצות המשתמש עם ממשק תסריט חזק.
  • (FLT:0)GDBIRLT:1 ; GNU Debugger, invaluable עבור לינוקס debugging.זה יכול להתחבר מטרות מרוחקות, עם תוספים (למשל, GEF, pwndbg), הופך להיות תחנת כוח הנדסה הפוכה.
  • (ב) ויקרא ויקרא י' (ב) ו':2 (ב) ויקרא לינוקס , ויקרא ויקרא ויקרא ויקרא ויקרא יט:2 ⁇ :55) ,5 יכול לפרופיל אירועים חומרה (cache Misses, mispredictions) אשר חושפים בקבוקי מיקרו-atan.
  • (ב) [15] , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (FLT:0 rrigmLT:1) - כלי הקלטה קל משקל שלוכד הוצאות לא קבועות, המאפשר לך לשחק באגגיה רץ קדימה ואחורה למצוא את ההוראה המדויקת שבה המדינה שונה.

פרופילים ומומחים מיוחדים

  • (ב) ויקרא: ויקרא: ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (FLT:0) כלי הביצועים של גוגל (gperftoolssrov)FLT 1:1 - CPU ו פרופילי הערימה עם ראש נמוך, שימושי לזיהוי פונקציות חמות ודפוסי הקצאת זיכרון.
  • (ב) [15] ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

ניתוח התנהגות ו Emulation

  • (ב) ויקרא:2 ויקרא:2 ויקרא:2 ויקרא:2 ויקרא יט): "הראויים אשר יאפשרו לכם לרוץ ולמכשיר בינאריות מבלי להוציאם להורגם באופן מקורי, שימושי לאנליזה של קוד מאדריכלות שונות או ארגזי חול.
  • (FLT:0)Fridaph1 (A) - ערכת כלי דינמית המזריקת JavaScript או Python לתהליכי ריצה, ומאפשרת לך לעבוד, לשנות טיעונים ולעקוב אחר ביצוע בזמן אמת.

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

שיקולים משפטיים ואתיים

הנדסה הפוכה קיימת בנוף משפטי מורכב.בעוד שהטכניקה עצמה אינה בלתי חוקית, היישום שלה לעתים קרובות מתערבב עם זכויות יוצרים, פטנט, וחוקים סודיים מסחריים סודיים.חוק זכויות היוצרים של Digital Millennium (DMCA) בארצות הברית כולל פטורים להנדסת חשמל הפוכה לצורך השגת יכולת הדדית, מחקר אבטחה ושימוש חינוכי.מדינות רבות יש הוראות דומות, אך את המשתנים חייבים לשקול את הפעולות הבאות:

הסכם רישוי ותנאים של שירות

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

קוד פתוח לעומת תוכנת פרופיל

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

גילוי אחראי

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

AI-Assisted Reverse Engineering

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

מגמות עתידיות בהנדסה הפוכה עבור דכאון ואופטימיזציה

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

AI-Powered Decompilation and Analysis

מודלים למידה עמוקה המוכשרים על מיליוני זוגות מקור-ביניים מתחילים לייצר קוד מחוספס, כי הוא הרבה יותר יקר מאשר קודים מבוסס דפוס מסורתי מבוסס דפוסים מבוססי-דמפוסים. כלים כמו FLT:0 Hex-Rays DecompilerphFLT 1 כבר לשלב AI heuristics; גרסאות עתידיות עשויות לשחזר שמות משתנים, הערות ואפילו אלגוריתמים ברמה גבוהה עם דיוק זה יהיה נמוך יותר עבור מהנדסים מקוד פתוח יותר כדי להבין.

דיון אוטומטי עם ביצוע סמלי

כלי ביצוע סמליים (למשל, FLT:0AngrtureFLT) 1:1, (FLT:2KLEEveFLT 3) באופן אוטומטי לחקור נתיבי ביצוע כדי למצוא קלטות אשר מעוררות באגים או להכות אזורי קוד ספציפיים.כאשר בשילוב עם הנדסה הפוכה, כלים אלה יכולים ליצור מקרים בדיקה כי התנגשויות קצה ללא בדיקה ידנית.

ענן והנדסת מובייל

כיישומים נעים לסביבות ללא שרת ולמכשירים ניידים, הנדסה הפוכה חייבת להתאים.שרת החוץ של Server עשויה להיות זמינה רק באמצעות תצפיות לקוח (למשל, תשובות API), בעוד יישומים ניידים יותר ויותר מובנים עם הגנה מסחרית (למשל, FLT:0DexGuardFLT:1 עבור אנדרואיד, LT2BitcodealphFalLT 3obconobcation עבור טכניקות אלה הם דינמית או לפתח בעיות דינמית).

הנדסה הפוכה

תכונות CPU חדשות כמו FLT:0 אינטגרטור TracecioFLT 1 ו- (FLT:2ARM Embedd Trace MacrocellFLT 3 לספק יומני הוצאה מפורט עם מינימלי מעל הראש.מתקנים אלה מאפשרים למהנדסים לאחור לבצע ניתוח לאחר המוות של מערכות ייצור, להקליט את זרם ההוראה המדויק שהוביל לכישלון.

מסקנה

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

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

(ב) [ה] [ה]] [ה]] [ה]] [ה]] [ה]]] [ה]]]] ב[[1924]], ב[[1924]], [[1924]],]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]]]]