Table of Contents
מבוא להנדסת Reverse Engineering
יישומי תוכנה הנדסיים הפוכה הם תהליך ממושמע של ארגון מרכיבים בינאריים של תוכנית כדי להבין את העיצוב, ההתנהגות שלה, ואת פרצות. עבור חוקרי אבטחה, אנליסטים זדוניים, מפתחי תוכנה, שליטה בטכניקות הנדסיות מתקדמות היא חיונית לגילוי ההיגיון הנסתר, עקיפה הגנה, ולהבטיח שלמות תוכנה.
הקרן: מושגי ליבה
לפני אימוץ טכניקות מתקדמות, הפיקוד המוצק של מושגי הנדסה הפוכה יסוד הכרחי.ניתוח בינארי כרוך בבדיקת קוד מכונה ברמת ההוראה, תוך תרגם באופן בלתי סביר את הקוד לשפה של האסיפה האנושית.וויכוח מאפשר אנליסט לעבור דרך ביצוע, לבדוק רישומים ומניפולציות על כלי זיכרון כגון FLT:0IDA ProFLT:1,LTF:2GIRDR:2GRIRXL) ו- CR.
ניתוח בינארי ודיסמברלי
ניתוח בינארי מתחיל עם ראשי קבצים מזהים (PE, ELF, Mach-O) ומיפוי קטעים (טקסט, .data, .rdata) . Disa להרכיבs להמיר קודים לאסיפה, אבל אימות ידני הוא לעתים קרובות נחוץ בגלל טכניקות אנטי-דיסמעוניות כגון cuaque predicates או קפיצה שולחנות. Analysts חייב גם לטפל בינארי שבו שולחנות סמל הוסרו; הכרה באמצעות ספריית IFly (I) הופך להיות תואם קריטי).
המונחים: Fundamentals
Debuggers לאפשר בדיקה רציפה. נקודות יכול להיות להגדיר על כתובות קוד, גישה זיכרון, או סינקלות. Tracing הוראה זרימה ו קידוד API שיחות מגלה כיצד תוכנית אינטראקציה עם מערכת ההפעלה. מודרני debuggers לתמוך נקודות מצב ו זכר מעקב תסריטי . Mastery של גישות סטטיות ודינמיות הוא תנאי העבודה מתקדמת.
שיטות ניתוח מתקדמות
(הניתוח הסטאטי התפתח הרבה מעבר לדיסבומביאלי של מתרגלים מתקדמים משתמשים בדלקומברים ששיחזרו קוד פסאודו-קוד ברמה גבוהה, המאפשר הבנה מהירה יותר של ההיגיון:0IDA Pro עם Hex-Rays decompilerpherpherph 1 ו-FLT:2Ghidra's decompilerph3 הם הכלים החזקים ביותר שניתן לטפל בהם.
טיהור ושיקום מסוג
(הההעברה לאחור לייצוג דמוי C. Analysts יכול אז מחדש משתנים, להגדיר מבנים, ולהוסיף הערות. Advanced Type שחזור משתמש ניתוח זרימת נתונים כדי להעדיף סוגים ספציפיים וגדלים מערך.לדוגמה, ב- C++ מכוונת להתנגדות C++ בינארי, שחזור לוחות ו- RTTI (Run-Time Type Information) דורש דפוסים מתאימים ו-Heists כמו FLTIFRMI מאפשר תהליך זה (TSD).
ניתוח הקצוב וגביע
Cross-references (xrefs) מראה שבו פריט נתונים או פונקציה נקרא, עוזר למפות את התוכנית זרימה.ניתוח סטטי מתקדם משתמש בגרפים שיחות וגרפים זרימה שליטה כדי לזהות קוד בלתי ניתן להחלפה, פונקציות מתות, או נקודות כניסה מוסתרות. תצוגות Graph יכולות להדגיש זיהומים זדוניים או נתיבים מותניים אשר ע"י עק בדיקות אבטחה.שלב גרף עם ניתוחים סטטיים בהבנה קודים גדולים, כגון תגליות פופולריות.
הוצאה להורג סמלית ו-SMT Solving
ביצוע סמלי מתייחס למשתנה כסמלים ולא ערכים קונקרטיים.כלים כמו FLT:0) AngrigtureFLT:1 ו-FLT:2TritonFLT 3 מאפשר לאנליסטים לחקור את כל נתיבי ביצוע אפשריים.טכניקה זו אינה ראויה לרישום, פגיעת ראייה, והפקה של קלטות שמגיעות לאזורים ספציפיים.
ניתוח דינמי מתקדם
ניתוח דינמי צופה התנהגות תוכנה במהלך ביצוע אמיתי שיטות מתקדמות ללכת מעבר פשוט לשלב כולל ניטור API, נפיחות, סחרחורת וקצבה ברמת הקרנל.
API Hooking and Interception
(הופנה מהדף בין מודולים.מסגרות כמו FLT:0DetoursFLT:1 (Microsoft), FLT:2FridaFLT 3, ו-FLT:4EasyHookigFLT:5 מאפשר אנליסטים לשנות או להזין שיחות API בזמן אמת.
ניתוח ריצה
(הופנה מהדף ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
« « Vulnerability Discovery
(הופנה מהדף Ö) היא טכניקה דינמית אוטומטית שמאכילה אקראית או מוטבעת לתוכנית כדי לגרום לתאונות. מטושטשת מתקדמת כמו FLT:0AFL +03FLT:1,FLT:2LibFuzzeruaFLT 3, ו-FLT:4HongzzFLT: 5 השתמש בכיסוי כדי להגיע לקוד עמוק יותר כאשר הנדסה הפוכה עשויה לשמש אנליסטים של קוד פתוח, באמצעות אנליסטים (Fvgzi)
זיכרון דומפינג ו-Forensic Analysis
(הופנה מהדף גרף) ,כל מערכת ההפעלה מגלה מבני נתונים פעילים, מיתרים מקודמים, וזרקו קוד. כלים כמו FLT:0VolatilityFLT:1 (לזיכרון גרעין) ו- (FLT:2Process Dumpers FLT 3:0) מסייע לחלץ תהליכים נסתרים.
סליחות ו-Unpacking
שיבוש ואריזות הם המכשולים העיקריים בהנדסה הפוכה.טכניקות מתקדמות של מוטציות לשחזר בהירות קוד מקוד מחוספס.
המונחים: control Flow
(הדגשה על כך) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
« « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « «
(חבילות כמו UPX, Themida, VMProtect מצפיפות או דחוס את הקוד המקורי. Advanced Unpacking כרוך בניהול בינארי עד נקודת הכניסה המקורית (OEP) הוא לא ארוז בזיכרון, ולאחר מכן לשפוך את התהליך. Analysts להשתמש בתסריטי debugger כדי להגדיר הפסקות חומרה על שיחות API ידועות (למשל, וירטואלית עבור ניתוח לא מתואם) עבור אנליסטים (Ftegecting) אנליסטים (Ricertecting) אנליסטים (Ricial (D) אנליסטים) אנליסטים (D) אנליסטים (D) אנליסטים (Ricecting) אנליסטים המבוססים על ידי אנליסטים (DPTNPTN) אנליסטים) אנליסטים) אנליסטים (D) אנליסטים (DPTNECTFteFteF) אנליסטים נדרשים לעתים קרובות אנליסטים (D) כדי אנליסטים על ידי אנליסטים (DPTNECTRecting) כדי אנליסטים (D) כדי אנליסטים (DPTN) כדי אנליסטים על ידי אנליסטים תחת מעקב מעקב אחר אנליסטים על ידי אנליסטים על ידי אנליסטים (DPTNPTN) אנליסטים תחת מעקב אחר אנליסטים תחת מעקב אחר אנליסטים לאחור על ידי אנליסטים (
המונחים: aobfus
ביצוע סמלי יכול לשמש כדי למקם את זרימת הבקרה הנכונה מן הענפים obfuscated.לדוגמה, חפיסת יכול לקפוץ לכתובת מגובשת המבוססת על שגרת זעזוע.על ידי ביצוע באופן סמלי את לולאת הפעוט, האנליסט מאלץ את הפתר לייצר את תוצאות הענף הנכון. גישה זו פועלת היטב עבור מכשולים ליניאריים אבל עם מאבקים גדולים או שינויים מצבניים.
זיכרון לרגישויות בהנדסת הפוכה
זיכרון לרגישויות הוא טכניקת חיתוך המסייעת הן ניתוח סטטי ודינמי. כאשר בינארי מגן על הנתונים הרגישים שלו באמצעות אחסון בלבד זיכרון (למשל, מפתחות הצפנה שלעולם אינם כתובים לדיסק), צילום זיכרון יכול לחשוף אותם.
ניתוח זיכרון קרנל
(ב) ⁇ ו- kernel-mode נהגים מסתירים תהליכים או קבצים מכלים של משתמשים-מו-de. Tools כגון FLT:0VolatilityFLT:1 ו-FLT:2Rekallibph 3 (חלק מקבוצת נתונים של קוד גרעין (EPROS, PEB) כדי לבודד אובייקטים נסתרים.
Heap and Stack Analysis
הערימה מכילה נתונים דינמיים כגון buffers פרוטוקולים, תצורה caches, או decodeed payloads. Analysts להשתמש בהרחבות debugger (למשל, FLT:0Windbg's!heapig's!heapFLT:1) או סורקי זיכרון כדי לחפש דפוסים.
YARA Rule Creation from Memory Patterns
ברגע שאנליסט מזהה חתימה זיכרון ייחודית – כגון רצף של הרכבה או פריסת מיתרים ספציפיים – הם יוצרים כללים של YARA לסרוק את זריקת הזיכרון.טכניקה זו משמשת בתגובה לאירוע לזיהוי מהיר של בינאריות זדוניים ידועים בכל נקודות הקצה.
אוטומציה ותסריטאי
הנדסה הפוכה מתקדמת מסתמכת במידה רבה על אוטומציה כדי להתמודד עם גודל ומורכבות.קראת סביבות בתוך כלים מאיצה ניתוח.
Python Scripting in IDA ו-Ghidra
(ה-IDA Pro (IDAPython) ו-Ghidra (Ghidra Python/Jython) תומכים בתסריט נרחב. Analysts לכתוב תסריטים כדי לשנות את הפונקציות בהתבסס על תבניות API, לחלץ מיתרים, לאתר קבועים קריפטוגרפיים, או לבזבז תהליך רב של בני זוג.לדוגמה, תסריט יכול לחצות את כל Xrefs ל- API ספציפי (למשל, GetcAddress) ולזהות זיהוי של מסד נתונים דינמי של Gdractions: 1.F.
Radare2 ו- r2pipe
(FLT:0Radare2FLT:1) הוא מסגרת הנדסית הפוכה מאוד תסריטי.הוא תומך צינורות קו פיקוד לתוכניות חיצוניות (r2pipe) ותסריט ב Python, Node.js, או Rust. Analysts להשתמש Radare2 כדי לחקות קוד, לנתח זרימה שליטה, ותיקונים שלה.
המונחים: CI-Style Analysis Pipelines
(הופנה מהדף ; לדוגמה, ניתוח עשרות אלפי דגימות קוד זדוני) דורש צינורות אוטומטיים.כלי כמו FLT:0Cuckoo SandboxirFLT:1 (עבור ניתוח התנהגותי) ו-FLT:2Virusua TotalFLT 3 אינטגרציה של מוצרי מזון למסד נתונים.
גבולות משפטיים ואתיים
הנדסה הפוכה מתקדמת אינה קיימת במסגרות משפטיות כגון חוק זכויות היוצרים של DMCA (Digital Millennium Copyright Act) בארה"ב והאיחוד האירופי, הוראת זכויות יוצרים לכפות הגבלות על ניתוק אמצעי הגנה טכנולוגיים.עם זאת, הנדסה לאחור עבור יכולת הדדית, מחקר אבטחה וגילוי פגיעוּת מוגנת לעתים קרובות תחת חריגים (למשל, סעיף 1201 פטורים).
גילוי אחראי
כאשר הנדסה הפוכה חושפת פגיעות, נורמות אתיות מכתיבות גילוי אחראי: פרטי ליידע את הספק לפני השחרור הציבורי.חוקרים מתקדמים משתמשים לעתים קרובות בפלטפורמות של גילוי Vulnerability (CVD) כגון FLT:0 HackeroneFLT 1 או FLT:2Zero Day Initiative (ZI)FLT 3 .
סליחות ו-Licensing
הנדסה הפוכה של תוכנה שהיא רק מורשה (לא נמכר) לעתים קרובות כרוך קריאת הסכמי רישיון למשתמש קצה (EULAs) כמה רשיונות אוסרים במפורש הנדסה הפוכה, למעט כאשר מותר על ידי החוק (למשל, רישיון קוד פתוח כמו GPL מעודד אותו). תוכנה מבוססת ענן (SaaS) מוסיף מורכבות נוספת: ניתוח תעבורת רשת הוא בדרך כלל חוקי, אך decompiling Customer-side קוד עשוי להפר תנאים אתיים ישירות בין חוקרי קוד מוסריים.
מקרים שימושיים
הנדסה הפוכה חיונית לניתוח קוד זדוני, מחקר פגיעות והתאמה של מערכת מורשת. בתחרויות אבטחה (CTFs), אתגרים הנדסיים לאחור לטפח פיתוח מיומנות ללא סיכון משפטי.מקצועים חייבים לפעול תמיד עם אישור - או על התוכנה שלהם, תחת תוכנית בוטה, או באישור מפורש של הבעלים.
הדרך Ahead
תחום ההנדסה לאחור ממשיך להתקדם עם טכנולוגיות מתפתחות.
Machine Learning-Assisted Reverse Engineering
רשתות נילי מאומנים לסווג פונקציות, להציע שמות משתנים, וקוד פענוח (Deobfuscate Code) כלים כמו FLT:0DomainNetveFLT 1 ו-FLT:2GitHub Coפיילוט (FLT 3) השלמת סגנון בעתיד שבו ניתוח סטטי הוא בעל רזולוציה למחצה.
שיטות ואימות
עבור תוכנה ביקורתית בטיחותית, הנדסה לאחור מגיבוי שיטות רשמיות יכול להוכיח נכונות או היעדר פרצות. כלים כמו FLT:0BAP (Binary Analysis Platform) LT:1 ו FLT:2SMACKFLT 3 לתרגם קוד בינארי לתוכניות חד-משמעיות, המאפשרים להוכיח את המשפט כדי לבדוק תכונות כמו "למצמץ על גדותיה יקר זה עדיין חישובים קטנים".
ניתוח מבוסס ענן
(ב) ,(ב) ,(ב) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
מסקנה
הנדסה הפוכה מתקדמת היא גם אמנות ומדע.זה דורש הבנה עמוקה של מערכות ברמה נמוכה, פתרון בעיות יצירתי, ומתודולוגיה קפדנית. על ידי שליטה בניתוח סטטי ודינמי, ציות, זיכרון, ואוטומציה, מתרגלים יכולים לפתוח את הסודות של אפילו את התוכנה המוגן ביותר. as איומים מתפתחים, כך גם צריך את הטכניקות - עושה למידה מתמשכת ופרקטיקה אתיתריתית, בין אם אתה מגן על מערכות, גילוי יכולות מתקדמות, רק הנדסת מכונות מתקדמות, או לוגיות מתקדמות, רק אקטיביות, או לוגיות מתקדמות.
(ב) [ה]] [ה]] [ה]] ב[[המאה ה'], [ה'] ב[[1924]], [[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]], [[1924]]]], [[1924]]]]]], [[1924]]]]]]]]]]]]]]]]]]]], [[1924]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]