
הטקסט המלא של הדקות הראשונות בהרצאה «ניתוח קוד סטטי - דִּיסְאָסֶמְבְּלֶר» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם בהרצאה הזו אנחנו סוף סוף נעקוף את האנטיווירוס בואו נפעיל ויז'ואל סטודיו שהתקנו ואני מזכיר לכם שמצאנו שורה שהאנטיווירוס מזהה אותה כווירוס משהו שגורם לו לחשוב שזה וירוס אני זוכר שהסתיימה במספר 26 זאת השורה הייתה מה זאת אומרת שאם אני מוריד את השורה הזאת אני לא יודע מה
המשמעות שלה עדיין עוד מעט אנחנו נגלה מה המשמעות ואיך אפשר להתחכם עם האנטיווירוס אז אם אני מוריד את השורה הזאת אז האנטיווירוס לא מזהה אותי בוא נעשה בדיקה זאת שוב כרגע יש לנו את כל הקוד עם השורה הזאת שזה קוד בשפת מכונה זה מספרים באקסה שהם בשפת מכונה שהם נכנסים למשתנה בשם באף וממנו נוצרת תוכנה תהליך שרץ זה למעשה פקודות בשפת מעבד בשפת מכונה הרבה
פעמים קוראים לזה שפת אסמבלר אוקיי אוקיי, אז אנחנו פה בפנים, נכנסים ל-X64, אתם רואים כתוב פה X64, אז גם פה X64. דיבאג, בואו נעשה את זה, בואו נעשה את זה דיבאג.
אני מוחק את הכל, מקמפל את זה, עושה ריבילד, מייצר מכל הפקודות ב-C-Sharp קובץ אקזה, כל הקובץ בשפת מכונה, כי מה שהיה לי עד עכשיו, היה לי רק קטע אחד בשפת מכונה, ולמטה כל מיני פקודות שהן לא בשפת מכונה, אלא ב-C-Sharp רגיל.
למעשה שישו הפרגיל עטף את הבלוק עם הפקודות בשפת מכונה ואת הבלוק הזה הוא טוען לכתובת בזיכרון ומייצר ממנה Thread. זאת הקצאת תחום זיכרון חדש, זה העתקה של כל המשתנה באף הזה לכתובת הזאת והפקודה האחרונה מייצרת לנו Thread, למעשה תוכנה שרצה בזיכרון ולמעשה מריץ את הקוד הזה ומייצר ממנו Thread.
Thread זה תהליכון שרץ בזיכרון. כל תוכנה מורכבת מהרבה תהליכונים קטנים שרצים במקביל, למעשה זה קוד.
קוד הזה בשפת מכונה, ובהעתקה לכתובת חדשה, כי בכתובת המקורית אי אפשר להריץ אותו, אז צריך להעתיק אותו לכתובת חדשה ולתת לו הרשעת ריצה, בגלל זה אנחנו מעתיקים אותו.
אז אנחנו מעתיקים אותו לכתובת חדשה, נותנים לכתובת הזאת הרשעת ריצה, ולא סתם איזשהם נתונים, אלא ממש מותר גם לעשות אקזיקיוט על הכתובת הזאת.
זאת הכתובת אדרס, מעתיקים אליה את הקוד המקורי הזה, זה הקוד המקורי באף, מעתיקים אותו לאדרס. אחרי שהעתקנו אותו, אנחנו לוקחים על הכתובת הזאת, שמותר להריץ ממנה, יוצרים Thread, תהליך שרץ ומבצע את הפקודות.
איזה פקודות? הפקודות האלו בשפת מכונה. מה הבעיה? הבעיה שאחת הפקודות, או אחת השורות, האנטיווירוס מזהה אותה כמסוכנת שזאת השורה הזאת בואו תראו אנחנו עוד פעם הופכים את הכל את כל הקוד של התוכנה לשפת מכונה פה למטה אתם יכולים לראות גם שאחד succeeded זה אומר שהוא הצליח ואומר איפה הוא יצר לי את הקובץ
מוחקים את כל קבצי העזר אנחנו יכולים להריץ ולבדוק שזה באמת עובד בוא נריץ הנה אנחנו רואים שזה באמת עובד בוא נראה שהסשן נפתח לנו שהחיבור הצליח פה בקאלי אני צריך להפעיל MSF קונסול מינוס Q שלא יציג לי את כל הבלוק היפה של Welcome שייכנס בשקט בצורה שקטה ומינוס X שיריץ בפנים את כל הפקודות האלו בתוך ה-MSF קונסול שיריץ את הפקודה של הנדלר שיאזין יאזין
ל-X64 רוורס HTTPS זה ה-IP של המכונה הזאת זה הפורט של המכונה הזאת אם מישהו מתחבר תמשיך להאזין יכול להיות שעוד מישהו יתחבר ואחרי החיבור תקודד את השלב השני.
אתם רואים יש פה סלאש? הסלאש הזה אומר שהחיבור מתבצע בשני שלבים. השלב הראשון שהוא הקצר, שזה מה שאנחנו רואים בשפת מכונה שמה, ואחרי החיבור הקצר הזה הוא מעביר את כל הקוד הזדוני לקליינט, זה השלב השני.
המטרה של זה שאצל קליינט יהיו רק כמה שורות קוד בודדות, תסתכלו. אתם רואים, אין פה הרבה פקודות, זה אולי נראה לכם הרבה, אבל זה כלום.
המסה הענקית מגיעה אחרי זה. אז ככה אני יודע שזה בעצם שני שלבים עם הסלאש הזה ואת השלב השני הוא מקודד כדי שהאנטיווירוס לא יעלה אלינו בשלב השני ומקודד אותו עם המקודד הזה.
זה כמו להציג מידע בצורה שונה, זה לא הצפנה, שימו לב הצפנה בניגוד לקידוד, בהצפנה יש מפתח סודי, בקידוד אין מפתח סודי, זה פשוט הצגה שונה של אותו המידע רק שהאנטיווירוס לא יעלה עליי.
על כל זה דיברנו לפני כן ואני מריץ אותו כג'וב מאחורה כדי שהממשק יהיה לי פנוי הנה הוא רץ בוא נראה שיש לי באמת ג'ובים שרצים ברקע כן יש לי את המאזין הזה שכרגע בנינו הוא באמת הצליח לרוץ הנה הוא רץ ועד עכשיו אף אחד לא התחבר אליי נכון מאוד התוכנה כבר יצא עד שדיברנו למה כי יש לה פה זמן המתנה השורה האחרונה אומרת
תמתיני לחיבור אם אף אחד לא מתחבר תצאי בוא נריץ את זה עוד פעם אנחנו מריצים את האקזה פה כמו קובץ אקזה ורואים שיש לנו פה סשן אני עושה טאב, ללחוץ טאב בסוף, סשן אחד, זה אומר חיבור אחד הצליח, ואני יכול לעשות סשן אחד ולהיכנס לתוך החיבור הזה, ועכשיו אני מול הלקוח היחיד שיש לי, ויכול להריץ עליו את הפקודות.
אני עושה בקגראונד, חוזר חזרה למשחק הרגיל שלי, ובסשנס, במטה ספלויט, אני רואה את הסשנים המחוברים. אתם יכולים לראות פה ששלב השני מעביר לו את המידע, זה נקרא סטייג'ינג x64 payload.
סטייג' זה למעשה דו שלבי, והוא מעביר לו, תראו כמה בתים, 200 אלף בתים הוא מעביר לו, 200 אלף 308. בגלל זה חילקנו הכל לשני שלבים, שיהיה לנו קל לעבוד עם השלב הראשון.
אני רואה גם שיש לו בעיה בקידוד. נטפל בכל הבעיות אחרי זה. אנחנו רוצים להצליח להתחמק מאנטיווירוס, נכון? אנחנו רואים שהתוכנה עובדת, נהרוג את כל ה-sessionים ונעשה אקזיט.
אני בינתיים פה עוד לא מפעיל את המאזין, זה לא משנה לי, אני רוצה להתחמק מהאנטיווירוס. מה הבעיה שלי? הבעיה שלי שפה בסקן הוא מזהה אותי כווירוס. אני עושה לו רימוב והוא מוחק לי את הקובץ אקזה הזה.
למה הוא מזהה לי את הזה? בגלל השורה הזאת, ה-26. אם אני אעשה פה שני סלאשים, אני אהפוך את זה לצבע ירוק, זה אומר הערה כאילו שהוא התעלם מהקוד הזה כאילו הוא לא קיים.
זה הערת טקסט בשבילי, אז בזמן שהוא הופך אותו לאקזה הוא מתעלם מהשורה הזאת, זה סתם כדי לא למחוק.
יכלתי למחוק אותה וזהו. אני עכשיו אעשה סקן ועכשיו הוא כבר לא מזהה אותה. אז אנחנו יודעים שפה השורה. עכשיו נשאר לנו לגלות מה זה השורה הזאת ואיך מתגברים עליה.
אי אפשר סתם למחוק שורה בקוד כי היא עושה משהו, לא? אז אנחנו נשאיר את השורה הזאת וננסה להבין מה היא אומרת. יש לנו שתי שיטות איך להבין מה זה השורה הזאת.
השיטה הראשונה זה לקחת ולהעתיק את זה לדיסאסמבלר. דיסאסמבלר זה איזשהו אתר אינטרנט או איזושהי תוכנה שמבינים את המשמעות של הקודים האלו של שפת מכונה.
אז בואו נעתיק את זה, נעשה לזה קופי, נלך לאתר אינטרנט שמבין את זה, כמו פה, האתר הזה שיודע לעשות דיסאסמבלר.
זה אומר, אתה מכניס לו פה את השורות קוד בשפת מכונה, והוא הופך את זה למשהו שאתה יכול לקרוא אותו, לשפת אסמבלר, ואתה קובע לו האם זה תקן 32 ביט או 64 ביט.
אנחנו עובדים ב-64. הבעיה שצריך להוריד אפסים, יש שם הרבה אפסים בהתחלה, וזה מבלבל אותו. אתם רואים? 0x הזה מבלבל אותו.
X אפשר להשאיר, רק את ה-0 חייבים להוריד. אז אני אעשה פה Replace ואני אחליף 0X ברווח, פשוט רווח. הופה, נהיה לי הכל רווחים.
פסיקים אפשר להשאיר, אני גם אעיף את הפסיקים. והשארתי רק את המספרים עצמם. אנחנו עושים לזה copy-paste ו-disassembler ב-64, כי זה ככה יצרנו את ה-payload הזה ב-64.
הנה הפירוש שלו. ומה אנחנו מחפשים? שורה, שורה הזאת אנחנו מחפשים אותה. 6E, 65, 74, הנה זה זה, אתם רואים? 65, הנה 6E, בואו נסתכל טוב טוב מה קורה פה, אנחנו צריכים להבין את זה.
זה נקרא ניתוח סטטי מה שאני עושה, אחרי זה