
הטקסט המלא של הדקות הראשונות בהרצאה «הרצת Payload מוצפן» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
טוב חברים אנחנו בהרצאה הקודמת יצרנו payload מוצפן עכשיו אנחנו רוצים לעשות תוכנה שפותחת את ההצפנה ומפעילה אותו שימו לב מה עשיתי פה בהגדרות של מכונה וירטואלית הוספתי לה קצת זיכרון שיהיה לה 8 ג'יגה רם למכונה וירטואלית וארבע מעבדים כדי שזה יזוז יותר טוב כמובן רק מי שיש לו 16 ג'יגה ומעלה יכול לשים למכונה וירטואלית 8 ג'יגה אחרת היא זזה יותר לאט מי שאין לו 16 ג'יגה
זיכרון אז הוא צריך לשים רק ארבע למכונה וירטואלית למכונה וירטואלית אל תביאו יותר מחצי ממה שיש לכם כי צריך גם למחשב הפיזי להשאיר זיכרון ויז'ול סטודיו 2019 אנחנו מפעילים אותו פותחים את הסולושן שלנו את הפתרון שלנו שהפתרון שלנו זה סתם שם כללי לאוסף של שתי תוכנות נפרדות
תוכנה אחת מצפינה שעשינו אותה בשיעור קודם בהרצאה קודמת ותוכנה שפותחת את ההצפנה ומריצה את ה-payload אז אנחנו עכשיו עוברים אליה עושים אותה כ-sets as start-up project הוא שחור בולט אותו נפעיל עם הפלייפו יופי נהדר איך אנחנו פותחים את ההצפנה קודם כל בוא נבטל את האנטיווירוס לפני שאנחנו מתחילים ב-manage settings פה
אני מבטל אותו שלא יפריע לנו ולא יציק לנו הוא כותב תדליק את האנטיווירוס אני אומר לו לא צריך תודה רבה לא רוצה להדליק אנחנו פה בתוכנה שנקראת mypayload.exe שהיא צריכה לפתוח את ה-payload המוצפן, את הסוס הטרויאני המוצפן.
זה הסוס הטרויאני המוצפן שלנו, צריך לפתוח אותו ולהריץ אותו. אז איך אנחנו נעשה את זה? קודם כל נכריז על משתנה עזר שהוא יהיה גם מערך של בתים, גם יהיה בית עם סוגריים מרובעים כאלו.
אתם רואים סוגריים מרובעים? זה אומר שזה מערך. אז אנחנו עושים משתנה חדש שיהיה גם מערך של בתים, זה נקרא לו בשם Decoded פתחנו את ההצפנה וישר ניתן לו הקצאה של זיכרון באיזה גודל באותו גודל כמו זה נכתוב buff.length שיהיה אותו גודל אני רואה פה שוויז'ואל סטודיו כל שנייה נתקע לי טוב נחכה לו אם
הוא יעצבן אותי נעבור לנוטפד פשוט במקום לכתוב את זה בוויז'ואל סטודיו באורך טקסט כזה יפה וחכם נכתוב את זה בנוטפד פשוט הבעיה בנוטפד שהוא לא יגיד לי אם אני אעשה טעות כתיב אבל יעבוד מהר, הוא כל כך חכם שהוא לא זז, כי הוא כל שנייה מנסה לנתח משהו.
אז ניתן לו עוד הזדמנות. אתם יודעים מה עד שהוא חושב, אני אלך פה ל-hard disk, אני אפתח את התיקייה עם ה-solution שלי, אלך ל-encryptor המצפין שעשינו במקור, אפתח את הקובץ תוכנה שלו, ואני צריך להעתיק את כל הלולאה הזאת שמצפינה, כי אנחנו הולכים לפתוח את ההצפנה, זה בדיוק
אותו דבר, רק במקום פלוס נעשה מינוס. זה בדיוק אותו אלגוריתם של הצפנה הוא גם זה שפותח אותה, רק במקום פלוס אנחנו עושים מינוס וזהו.
אז אני עושה פה קופי, מעתיק אותו ואני רוצה להכניס אותו לכאן. אני רואה שהוא עדיין תקוע לי. טוב חברים, נגמרה לי הסבלנות, הוויז'ול סטודיו הזה תקוע בגלל שיש לו שם באפר משתנה עם 200 אלף בתים.
אז אני עובר פה ל- notepad, בואו ניכנס לפרויקט mypayload, נפתח אותו עם notepad הכי פשוט בעולם ונכתוב קוד בתוך ה- notepad אני עושה פה enter מדביק את הלולאה שהצפינה אותו והלולאה הזאת שהצפינה אותו אנחנו עושים הפוך אנחנו עכשיו פותחים אותה עושים במקום פלוס מינוס זה בדיוק אותם תנאים האם זה מתחלק בשבע האם זה מתחלק בחמש
רק במקום פלוס מינוס וגם פה מבטלים את הכל מה שמעבר לשתי ספרות ומכניסים את התוצאה למשתנה decoded בתוך ה-decoded יהיה לנו כבר הכל פתוח בואו נבדוק שזה באמת עובד, שהוא לוקח את זה ופותח לו את ההצפנה.
ננסה בכל זאת לפתוח Visual Studio, אולי זה יעבוד לנו. כי אני רוצה לעשות דבאגר, אני רוצה לעצור אותו באמצע פעולה ולראות בזיכרון שהוא באמת הצליח לפתוח את ההצפנה.
אז אני הולך ככה, לקבוע שהפרויקט הזה הוא יהיה סטארט-אפ פרוג'קט. פה אני קובע שהוא יריץ אותו. אתם רואים, הוא נהיה פה בולד.
64 ביט, דיבאג. אנטיווירוס כרגע אמור להיות כבוי. הוא כבוי, נהדר, ואנחנו שמים פה ברק פוינט לפני הסוף, אני רוצה לראות שהמשתנה דקודד אכן פתח את הכל, ואני עושה פה סטארט, מריץ אותו, הנה הוא רץ, הגיע עד סוף התוכנית,
בואו נראה מה יש לנו בתוך דקודד, קודם כל כאן, בתוכנה הזאת שמצפינה מיינד קריפטור, זה המקור, אני שם אותו פה בצד ימין, זה המקורי, שימו לב, וזה אחרי הפתיחה של ההצפנה, אני עושה פה right click, quick watch, ורואה אם זה אותו דבר.
אני רואה שזה 4D, 4D, 5A, 5A. זה אומר שהוא הצליח לפתוח הצפנה כמו שצריך. 41, 52, אני רואה שהוא הצליח. אם אצלכם מספרים הם לא באקסה, אתם יכולים ללחוץ כפתור ימני ולהגיד לו להציג באקסה.
אתם רואים 77, 90, מה זה 77 באקסה? 4D, 5A. יופי, אני רואה שהוא הצליח לפתוח את ההצפנה כמו שצריך. החלק הזה הצלחנו.
אז יש לנו עכשיו את הסוס הטרויאני שלנו, את המטרפריטר שלנו בתוך משתנה Decoded, פתוח. מה שנשאר לנו כאן זה להריץ אותו. פה אנחנו נכתוב קוד שמריץ אותו, נעשה דיבאג סטופ דיבאגינג ונכתוב פה עכשיו משהו שיריץ את הדבר הזה.
אנחנו לא נשתמש בקודות של C-Sharp, אנחנו נשתמש בפונקציות שמגיעות כחלק ממערכת ההפעלה. זאת אומרת, אנחנו רוצים להשתמש ב-C-Windows-System32-Kernel32-DLL.
DLL זאת ספריית עזר שבתוכה יש המון פונקציות שאני יכול לקרוא להן ולהשתמש בהן. DLL זה למעשה ספרייה דינמית שכוללת את הפונקציות. עכשיו, אני בכוונה משתמש בהן כדי שהתוכנה שלי תהיה אוניברסלית, ולא רק בשפת C-Sharp, שאנחנו לא רוצים ללמוד את ה-C-Sharp עצמו, אלא להשתמש בפונקציות חיצוניות שזמינות לנו, לא משנה באיזה שפה נתכנת.
למעשה אנחנו משתמשים ב-DLL חיצוני. אנחנו צריכים קודם כל לייבא אותו ולייבא את הפונקציות שלו. בואו נעשה את זה. נעלה למעלה עד הסוף.
ולפני הפונקציית מיין שלנו, אתם רואים יש לנו פה פונקציית מיין שמופעלת אוטומט. מערכת ההפעלה מחפשת פונקציה בשם מיין ומפעילה אותו אוטומט.
הפונקציות שלנו הן נאספות במה שנקרא קלאס, מחלקה. מחלקה זה למעשה אוסף פונקציות שהן לוגית אותו דבר. נניח, יכולה להיות מחלקה של מכוניות, מחלקה של אנשים, או מחלקת עובדים, ובתוך כל מחלקה יש כל מיני פונקציות, והקוד עצמו של התוכנה, הפקודות, נרשמות רק בתוך הפונקציה.
זאת אומרת, הפקודות עצמן יושבות בתוך פונקציה, משהו צריך להפעיל את הפונקציה, ואת כל הפונקציות, או המתודות, כמו שקוראים להן לפעמים, הן נאספות ביחד ליחידה לוגית אחת שנקראת קלאס.
קלאס זה יחידה לוגית כמו מכונית אנשים ובתוך נניח מכונית יש כל מיני פונקציות סע קדימה סע אחורה ודברים כאלו. הקלאסים האלו בגלל שיש אותם המון אוספים אותם ביחד למרחב שמות name space זה מרחב שמות למעשה זה משהו שמחבר לתוכו כמה קלאסים אז יש מרחב שמות שזה הדבר הכי גבוה שקיים בתוכו יש כל מיני קלאסים כאשר קלאס זה יחידה לוגית אחת ובתוך קלאס יש פונקציות.
אז אנחנו צריכים פה בתוך הקלאס שלנו, לפני שמפעילים את הפונקציה כאן, אפשר דרך אגב לעשות עוד כמה פונקציות ואז פונקציה קוראת לפונקציה וכל מיני דברים כאלו.
כאן אנחנו לפני הפונקציה שלנו מייבאים פונקציות מתוך dll. במקום לכתוב אותם לבד, אנחנו מייבאים אותם. אז אנחנו כותבים פה dll.import תייבא לי פונקציה מתוך קרנל 32 dll, פונקציה בשם virtual allocation.
זאת פונקציה בתוך קרנל 32 שיודעת לתפוס חתיכת זיכרון, בעצם להקצות לי יחידת זיכרון וכשהיא מקצה לי יחידת זיכרון היא אומרת באיזה גודל אני רוצה אותה פונקציה הבאה שאני מייבא אותה קריאה thread היא למעשה מריצה את הקוד שבזיכרון מייצרת לי מיני תוכנית תהליכון
שמריץ לי את הקוד מייצר לי thread וזה מריץ לי אותו וזה סתם משתנה אני קראתי לו page execute read write זה סתם משתנה בזיכרון שהמספר שלו זה 40 באקסה סתם בא לי מספר 40 לשים בתא נפרד בזיכרון אני יכול לא לעשות את זה אבל ככה אני רוצה שיהיה לי יותר נוח להשתמש במספר 40 באקסה שיהיה לי יותר ברור בהמשך הקוד אתם תראו איך אני
אשתמש בדבר הזה הדבר היחיד שפה הדילל אימפורט הזה הוא לא מזהה אותו למה כי הקלאס הזה נשייך לניימספייס שנקרא סיסטם ראנטיים אינטר אופס זאת אומרת הוא לא יודע איפה הקלאס הזה ואני אומר תעשה לי יוזינג למעלה למעלה אתם רואים פה יוזינג תשתמש בניימספייס במרחב שמות נוסף הזה ואז הוא עושה לי פה יוזינג וכבר יודע למצוא את
הקלאס שנקרא dll import אתם רואים ה dll import הזה זה קלאס שלפני כן הוא לא ידע למצוא אותו כי הוא לא ידע איפה הוא נמצא עשיתי לו יוזינג והוא יודע למצוא אותו אז יש לנו פה למעשה יוזינגים בניימספייסים חיצוניים זה ניימספייס שלנו בתוך הניימספייס שלנו יש רק קלאס אחד בתוך בתוך הקלאס אחד שלנו יש פונקציה שנקראת virtual alloc שהבאנו אותה מ-dll חיצוני,
פונקציה create thread שהבאנו מ-dll חיצוני, פונקציית wait for object שהבאנו מ-dll חיצוני וסתם מספר 40 בזיכרון,