PracticU

דיבאג ב-Visual Studio

בלי כתוביותעם כתוביות
PracticU › קורס סייבר למתחילים - Hacking - בדיקות חוסן תשתיתי ופריצה ל-Windows 10/11 - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP › דיבאג ב-Visual Studio
מילון מושגים:
דיבאג - תהליך של איתור, הבנה ותיקון תקלות בקוד, לעיתים בעזרת כלי שמאפשר לעצור ולעקוב אחר ריצת התוכנית.
Visual Studio - סביבת פיתוח משולבת (IDE) של מיקרוסופט לכתיבה, ניפוי והרצה של קוד, בעיקר בשפות .NET.
וירוס - תוכנה זדונית שמשכפלת את עצמה ומתפשטת ממחשב למחשב, ועלולה לפגוע בקבצים או בפעולת המערכת.
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
תהליכון - יחידת ביצוע בתוך תהליך, המאפשרת להריץ כמה מהלכים במקביל ולחלוק את אותו זיכרון.
מעבד - יחידת העיבוד המרכזית של המחשב, שמבצעת את הפקודות של התוכניות ומנהלת את החישובים.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.

דיבאג ב-Visual Studio
ממשיכים מההרצאה הקודמת, שבה הוכן קובץ אקזה ב-C-Sharp שאנטיווירוס תופס, ועכשיו לומדים שיטה שיטתית לגלות בדיוק באיזו שורת קוד נמצאת ה"חותמת" שמפעילה את הזיהוי, ואיך לצפות בריצה שלה ברמת שפת המכונה.
כך מאתרים את השורה הבעייתית
1. פתיחת הפרויקט: פותחים את קובץ הסולושן שמאחד כמה פרויקטים, כאשר לכל אחד CSPROJ ואקזה משלו, ובוחרים לפתוח אותו ב-Visual Studio.
2. בדיקה ראשונית: מריצים סקאן על קובץ האקזה שנבנה ומוודאים שהאנטיווירוס תופס אותו.
3. מחיקה הדרגתית: מוחקים (Cut) חלק מהשורות, עושים Rebuild ליצירת אקזה חדש ומריצים סקאן נוסף - זה לא משנה שהתוכנה לא עובדת, המטרה רק לדעת אם הווירוס עדיין מזוהה.
4. חיתוך לפי חצי: אם המחיקה הראשונה לא עזרה, מוחקים כל פעם כחצי מהשורות שנותרו וממשיכים לבדוק, עד שמאתרים שורה ספציפית שמחיקתה מבטלת את הזיהוי.
5. אישור הממצא: מחזירים את השורה החשודה ומריצים סקאן שוב - האנטיווירוס תופס מחדש, כך שמתברר שהבעיה נמצאת בדיוק באותה שורה.
דיבאג בתוך הזיכרון
6. Step Into: מריצים Debug עם F11 שורה שורה, וצופים בחלון המשתנים איך באפר מתמלא במספרים (כגון 657) שמייצגים שפת מכונה.
7. כתובת זיכרון: אחרי הקצאת זיכרון למשתנה כתובת (ADDR), מעתיקים אליו את התוכן ומריצים אותו ב-Thread.
8. Disassembly: עומדים על הכתובת ועושים Go To Disassembly לצפייה בקוד המעבד, ועם Right Click מבקשים להציג Code Bytes - הבייטים הגולמיים (למשל fc 48 83 E4 F0 E8) עם הפירוש שלהם, כולל קריאה לפונקציה.
שימו לב
9. הגדרה שנשכחה: כדי לדבג קוד Native יש לסמן Enable Native Code Debugging במאפייני הפרויקט בלשונית Debugging - בלעדי זה הריצה בדיסאסמבלי מדלגת מהר מדי להספיק לעקוב.
10. כלי נוח יותר: לצורך עבודה בשפת מכונה מוזכר דיבאגר חיצוני, שנוח יותר מהדיבאגר המובנה של Visual Studio - הנושא של ההרצאה הבאה.
כך אפשר לבודד שורת קוד בעייתית בתוך קובץ שלם ולעקוב אחריה ברמת הביטים, לא רק ברמת קוד המקור.
השיעור הבא בקורס: ניתוח קוד סטטי - דִּיסְאָסֶמְבְּלֶר

פרקי ההרצאה: דיבאג ב-Visual Studio

  1. 00:00

    פתיחת הפרויקט ב-Visual Studio

  2. 00:40

    סולושן מול פרויקט

  3. 01:52

    בידוד השורה שהאנטיווירוס מזהה

  4. 04:48

    מעבר שורה שורה עם Step Into

  5. 05:42

    מעקב משתנים והצגת ערכים

  6. 06:40

    הקצאת זיכרון והרצת Thread

תמלול ההרצאה: דיבאג ב-Visual Studio

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

  1. 00:02

    שלום לכולם, בהרצאה הקודמת יצרנו את הפיילוד שלנו ב-C-Sharp ועכשיו אנחנו רוצים להתחמק מאנטיווירוסים. בואו נפעיל אותו, את ה-C-Sharp שלנו. נעשה פה התחל ל-Visual Studio.

  2. 00:18

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

  3. 00:29

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

  4. 00:50

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

  5. 01:04

    ומה הבעיה שלנו? שקובץ אק זה שלנו, האנטיווירוס תופס אותו. בואו נראה, נעשה פה סקן ואנחנו רואים שהאנטיווירוס תופס ואנחנו רוצים שהאנטיווירוס לא יתפוס אותו.

  6. 01:17

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

  7. 01:39

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

  8. 01:52

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

  9. 02:05

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

  10. 02:25

    קודם כל אני מתחיל מזה שאני מוחק נניח כמה שורות. בואו נראה כמה שורות יש פה. יש לנו פה אני עושה Control גלגלת רואה כמה שורות יש לנו פה ונניח אני מוחק נניח את כל השורות האלו אני עושה Right Click ועושה Cut מוחק אותם הופה עשיתי את זה פי שתיים יותר קצר לא משנה שהתוכנה לא תעבוד אני רוצה להעלות מה מפריע לאנטיווירוס שלי ואני עושה Rebuild בונה אותו מייצר קובץ אקזה קבצים

  11. 02:54

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

  12. 03:18

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

  13. 03:49

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

  14. 04:21

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

  15. 04:36

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

  16. 04:48

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

  17. 04:58

    הנה אנחנו מתחילים, הצהוב זה אומר השורה שאותה אנחנו מבצעים, כאן למטה יש את המשתנה, נניח שאנחנו עוקבים אחריו אז אני לוחץ debug עוד פעם f11 step into לעבור פקודה פקודה עכשיו אנחנו בפקודה הצהובה הזאת ופה למטה אני גם רואה את כל המשתנים שלו בזיכרון כרגע יש לו משתנה באף ריק כי עוד לא עשיתי את הפקודה

  18. 05:21

    אני עושה debug step into ועובר לפקודה הבאה עם f11 עכשיו יש לנו בתוך הבאף הזה את כל המספרים שלנו אנחנו יכולים לפתוח ולראות מה קורה לו 252, 72, אתם רואים הוא מציג לנו אותם בצורה רגילה שלנו, אנחנו יכולים לעשות לו פה XML Display והוא יציג לנו פה אותם ב-XFC48 כמו שאנחנו מכירים אותם.

  19. 05:49

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

  20. 06:13

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

  21. 06:40

    הקציב לו את האזור הזה, זה הפניה לשם. כרגע בזיכרון הזה אין כלום ומבצעים אליו קופי, ביצענו אליו קופי, העתקנו את כל התוכן ועכשיו יוצאים Thread.

  22. 06:53

    Thread זה למעשה להריץ את הכתובת הזאת בזיכרון,

לקורס המלא: קורס סייבר למתחילים אונליין

ההרצאה הקודמת: כתיבת C# wrapper סביב Meterpreter Payload

ההרצאה הבאה: ניתוח קוד סטטי - דִּיסְאָסֶמְבְּלֶר

הרצאות קשורות מקורסים אחרים

  • ריאקט דיבאג עם VS Code - Visual Studio Code
  • דיבאג בצד לקוח בתוך Visual Studio Code
  • הגדרות של Visual Studio
  • Docker & Visual Studio

קורסים נוספים במסלול

  • קורס SOC - מיישם הגנת סייבר
  • קורס פריצה ומבדקי חדירה לתשתית ארגונית - בדיקות חוסן מתקדמות ל-Active Directory - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס פריצה ומבדקי חדירה לאתרי אינטרנט - בדיקות חוסן לאתרים - Web Pentesting - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס סייבר והאקינג ל-Android - פריצה לטלפונים ואפליקציות אנדרואיד - בודק חוסן - Mobile App Pentesting