פתירת אתגר protostar | stack2!

פתירת אתגר protostar | stack2!

הכנה:

זהו ההמשך לפתירת אתגרי protostar, שפתרתי בפוסטים הקודמים.

לכן, רצוי לקרוא את 2 הפוסטים הקודמים לפוסט הנוכחי.

הפוסט הראשון, הפוסט השני.

אסביר לכם\ן על מושג שנצטרך בהמשך, שנקרא: משתנה סיביבתי.

משתנים סביבתיים הם דרך ליצור סביבה מוגדרת לתוכנה כלשהי בשלל.
למשל HOME וכדומה.. נוכל לראות אותם בפקודה "set".

נקרא את קוד המקור להלן:

לפי קוד המקור שקיבלנו, שימו לב לשלושה ערכים משעמעותיים לפתירת האתגר.
הראשון הוא buffer שמוגבל עד ל64 בייטים, השני הוא variable שאנו רואים שהוא שווה למשתנה הסביבתי GREENIE. בנוסף אנו רואים שבשורה 20, הערך variable מועתק לערך buffer שמוגבל ל64 בייטים.
הערך האחרון הוא modified, שנצטרך לשנות אותו לכתובת 0x0d0a0d0a בשביל לפתור את האתגר.
בגלל שbuffer, מוגבל ל64 בייטים. זאת אומרת ש64 בייטים, זה השטח בזיכרון שbuffer יכול להשתמש בו. אם הוא יעבור את ה64 בייטים הוא יוכל להגיע לחלקים שונים בזיכרון. וכמו כן לשכתב את modified.
מכיוון, ש variable יועתק לbuffer כפי שציינתי למעלה. נוכל לנסות לשנות את variable ליותר מ64 בייטים שיועתקו לbuffer וכך נוכל לשכתב את modified.
איך נשנה את  variable? נכריז על משתנה סביבתי בשם GREENIE ונציב את הערך שאנו רוצים שGREENIE יהיה שווה לו.
בעזרת הפקודה export, נוכל להכריז על משתנה סביבתי ולהציב אותו למה שנרצה.
כמובן שנכתוב את הכתובת בשיטת סידור הבייטים Little Endian. בגלל שמעבדי intelx86 משתמשים בשיטת סידור הבתים Little Endian.
תחילה נכריז על GREENIE, כמשתנה סביבתי.

מכיוון שאחרי 64 בייטים, ניתן לשכתב את modified. נציב את GREENIE כשווה ל64 בייטים ולאחר מכן הכתובת שאני רוצה שGREENIE יהיה שווה לה, בשיטת סידור הבתים Little Endian(כשהיא כתובה לאחור).

לאחר מכן נפעיל את התוכנה, ונסתכל אם הצלחנו.

קיבלנו הודעה שהצלחנו!
מקווה שנהנתם!

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *