.cp77fk4r נכתב ע"י - Reversing
|---------------------------------------------|


:על סדר היום
.הקדמה - I
.מונחים - I.I-
.App1 - II
.App2 - III
.App3 - IV
.App4 - V
.App5 - VI
.סיכום - VII

:הקדמה - I
זהו שמה של הפעולה שתוכנות/אנשים מבצעים על אובייקטים מסוימים Reversing ,?Reversing מה זה בכלל
,בכדי לראות את ה"קוד" שלהם, אני כותב את המילה "קוד" בגרשיים, מפני שהפעולה הזאת לא מתבצעת רק על גבי תוכנות
.האובייקט יכול להיות שעון קיר, טרנזיסטור, צוללת גרעינית, או סתם צעצוע משוכלל, וכן, גם תוכנות
!למה מבצעים בכלל את הפעולה הזאת? למה אנחנו בכלל צריכים לראות את ה"קוד" של התוכנה? מפני שזה מעניין
.ומפני שאם נדע איך התוכנה בנויה- זה יוכל לעזור לנו לחשוב איך לעקוף אותה, או אפילו איך לשכלל אותה

:מונחים - I.I
.ישנם מספר מונחים שכדי לדעת לפני קריאת הטקסט
.או בעברית- "מקור", או בתכנות-"קוד מקור" הוא קוד התוכנה המקורי לפני הקימפול ,Source
זהו שמו של הכלי המבצע פעולה שלוקחת את הקוד מקור שנכתב בשפת עילית מסוימת, ויוצר בעזרתו קובץ בינארי שהמעבד ,Compiler
.מסוגל להבין ולהריץ, מיותר לציין שלכל שפת תכנות עילית - יש קומפיילר ("מהדר") משלה
.תוכנה המסוגלת לקחת קובץ מקומפל ולהציג אותו בבסיס הקסדצימלי, וככה להקל על עריכת הקובץ ,Hex(decimal) Editor
,לשפת מכונה, המעבד שלנו מסוגל להבין רק בינארית Assembly כלי המאפשר להמיר קבצים שנכתבו בשפת ,Assembler
אבל קשה מאוד ואף כמעט בלי אפשרי לכתוב תוכנית בבינארית, ולכן המציאו את האסמבלי, שפה שבא כל פקודה בבינארית מומרת למילה
למשל) שבכלל מקלות על המתכנת C או מספר תווים שמיוחסים אליה באסמבלי, וכך יותר קל לתכנת למעבד, כיום כבר ישנן שפות-עילית (כמו
.אבל עדיין משתמשים באסמבלי במקומות שהדייקנות והמהירות יפה להם
כלי המבצע את הפעולה ההפוכה מאסמבלר, בעזרתו נוכל להמיר קובץ שקומפל והומר מבינארית לשפת אסמבלי, אומנם ,Dis-Assembler
.הקריאה לא פשוטה, אך היא ללא ספק הרבה יותר מובנת מקריאת קובץ בינארי
היא הפעולה ליצירת תבנית מסוימת שתקשה על קריאת הקוד של הקובץ, היא מאפשרת לנו לדחוס את הקובץ בצורה מסוימת שבה ,Packing
נוכל להקשות על כל מי שינסה לקרוא את הקובץ שלנו או לבצע עליו דיסאסמבלינג, ישנם מספר רב מאוד של פאקרים(...), ולרב, כל פאקר מבצע
את הדחיסה באופן שונה, ולכן אם בוצע על תוכנה מסוימת פאקינג מסוים- נוכל לקורא את הקוד בצורה מובנת רק לאחר שנשתמש באנפאקר
.שמסוגל לפרוס את אותה הדחיסה ולהחזיר את הקובץ לתבניתו המקורית
ניתן לציין שלרב הם באים ככלי אחד,Packerהוא כלי המסוגל לפרוס את הדחיסה של ה UnPacker ,היא כמובן הפעולה ההפוכה ,Unpacking
.אבל זה ממש לא קבוע
תוכנה המסוגלת להריץ שורות בודדות של ישום מסוים, משתמשים בה לרב בכדי לנתח פעולה של תוכנית מסוימת בזמן ריצתה ,Debugger
.בזיכרון, וכך לראות את תפקודה בזמן שאנו צופים בשורות האסמבלי שלה, זהו אחד הכלים היותר חשובים לנו כרוורסרים

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

:קצת על האתר ,www.HackThisSite.org דבר ראשון, אני רוצה לציין שאת האתגרים שלכם, אני אקח מהאתר
.שהפנה אותי אליו) שנותן כל מני סוגים של אתגרים HLLהאתר הזה, הוא אחד מאתרי האתגרים היותר טובים שנתקלתי בהם (תודה רבה ל
:האתגרים מתחלקים לכמה קטגוריות
.(Basic Web Hacking) פריצה לעמוד מסוים- והשגת הסיסמא
.(Realistic Missions) פריצה לאתר מסוים וביצוע פעולה מסוימת
.(Encryption Challenges) אתגרי פענוח
.(Application Challenges)אתגרי רוורסינג
.(Programming Challenges) אתגרי תכנות
.(Hack This Site) וגם אתגר של לנסות לפרוץ את האתר עצמו

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

:App1 - II
(www.hackthissite.org/missions/application) Application Challenges אוקיי, תתחברו לאתר ותגיעו לעמוד של ה
.ותריצו אותו (App Challenge 1) תורידו בו את האתגר הראשון
סבבה, מה אנחנו רואים, אנחנו צריכים להכניס סיסמא נכונה, וללחוץ על הכפתור, אם הסיסמה נכונה- אנחנו נקבל הודעה מסוימת
.אם הסיסמה שגויה- אנחנו נקבל גם הודעה, אחרת, שתגיד לנו שהסיסמה לא נכונה
אוקיי, בגלל שזה השלב הראשון אפשר להניח שהם לא בנו את האתגר בזה בצורה הכי חכמה, ולכן יהיה פשוט לפתור את זה, תריצו את
.האפליקציה הזאת, תכניסו איזה סיסמה, ותלחצו על הכפתור לבדיקה, אנחנו נקבל איזה הודעת ארור, תרשמו את המילה הראשונה שלה
.עכשיו, בשביל לפצח את האתגר הזה, אנחנו לא צריכים לעשות הרבה, פשוט נשתמש בעורך ההקסדצימאלי שאנחנו כ"כ אוהבים
.בגלל הנוחות, אני ממליץ להשתמש בו במהלך הטקסט, כי עליו אני אתן את ההסברים JBrowse של Axe אני אישית מעדיף את
:אפשר להוריד אותו מפה

http://www.jbrowse.com/downloads/installAXE.exe

:אוקיי, פתחו את הישום

File=>Open=>app1win.exe

עכשיו, בכדי לדעת איפה בערך הסיסמה נמצאת, אנחנו צריכים לדעת איפה הבדיקה נמצאת, כשאני אומר בדיקה, אני מתכוון בדיקה למקום
שבו התוכנה בודקת אם הסיסמה שהמשתמש מכניס נכונה, זה משהו כמו משפט תנאי, שבו התוכנה מציבה את הסיסמה שהכנסנו מול הסיסמה
.האמיתית ובודקת אם הן שוות
.איך נמצא את הבדיקה הזאת? פשוט מאוד, אנחנו יודעים מה קורה אם הסיסמאות לא דומות- קופצת לנו הודעה עם המילה שאמרתי לכם לזכור
."A" != "a" בגלל שמדובר פה בעורך הקסדצימאלי, חשוב פה אם התווים הם גדולים או קטנים- כי כאן ,"Sorry" המילה היא
.אוקיי, פתחנו את האפליקציה הזאת בעזרת העורך ההקסדצימאלי, עכשיו נחפש את המילה שלנו בכל הטקסט שיש שם, קצת מבולגן, אבל חפיף
:כדי לבצע חיפוש של סטרינג מסוים, נלחץ על

Edit=>Find

"String" כתבו Typeשימו לב לאותיות הגדולות והקטנות), ב) Sorry כתבו "Search for" בתיבה
."Mark Matches" וסמנו את האפשרות
.Ok כעת לחצו על
אוקיי, אנחנו רואים את הודעת השגיאה שלנו, תעלו טיפה, תחפשו משהו שיכול להראות כמו הסיסמא, מצאם? סבבה, שם מתבצעת הבדיקה
.של התוכנה, עכשיו תפעילו שוב את האפליקציה, ותכניסו את הסיסמא- וואלה, עברנו את האתגר הראשון, אוקי-דוקי

:App2 - III
(www.hackthissite.org/missions/application) Application Challenges כמו קודם, תתחברו לאתר ותגיעו לעמוד של ה
.ותריצו אותו (App Challenge 2) תורידו עכשיו את האתגר השני
אוקיי, הוא ניראה אותו דבר, גם פה אנחנו צריכים לגלות את הסיסמה, סבבה, יש לנו גם רמז, כתוב שם שבשביל שהבדיקה תעבוד- אנחנו צריכים
להיות מחוברים לאינטרנט, זאת אומרת שהאפליקציה שלנו מקבלת את הסיסמה שלנו, נגשת לאיזה עמוד באינטרנט, ומשם מורידה את הסיסמה
.האמיתית ומשווה אותן, אם הן שוות- הצלחנו, אם לא- הודעת שגיאה
אוקיי, נפתח את העורך ההקסדצימאלי שלנו שוב, ונחפש הפעם את איפה שהתוכנה מתחברת לאינטרנט, ננסה לגלות לאיזה עמוד היא מתחברת, ואם
.יהיה לנו מזל- נוכל לגשת אליו ולדעת מה הסיסמה
."GET" בטקסט, אם לא נמצא אחד כזה, נחפש "Get" שהתוכנה מבצעת, מה נעשה? נחפש פשוט GETאוקיי, אנחנו צריכים לחפש את פקודת ה
סבבה, מצאנו את הפקודה, ווואלה! מה יש לנו אחריה? את הכתובת של העמוד שממנו היא לוקחת את הסיסמה, נפתח את הדפדפן שלנו- ונכנס לאותו
היא פשוט שורה שורה, ולכן הסיסמה Get עמוד, יש לנו כאן כמה סיסמאות, אנחנו כמובן יכולים לבדוק את כולן, אבל מי שיודע איך מתבצעת הפקודה
?תהיה הסיסמה הראשונה שיש שם, יאללה, נשמור ונריץ את הישום שלנו- ומצוין, הצלחנו עוד אחד, כיף אה

:App3 - IV
(www.hackthissite.org/missions/application) Application Challenges תתחברו שוב לאתר ותגיעו לעמוד של ה
.ותריצו אותו (App Challenge 3) תורידו הפעם את האתגר השלישי
מה יש לנו פה? ניראה אותו דבר, ממ.. לפי הרמז גם הוא מבצע בדיקה מסוימת עם עמוד באינטרנט, וממ... טוב, בואו ננסה לעשות את מה שעשינו עם
.האתגר השני, אם לא נצליח- נחשוב על דרך אחרת
!זאת כנראה הסיסמה ,"False" מצאנו? סבבה, בואו ננסה לגשת לעמוד ההוא, סבבה, בעמוד ההוא יש ,"GET" יאללה, נריץ שם חיפוש למילה
...בואו ננסה, נריץ את האפליקציה, נכניס את הסיסמה ו...לא, זה לא הסיסמה
.בואו ננסה לחשוב רגע מה האפליקציה שלנו בעצם עושה
.האפליקציה מקבלת סיסמה מהמשתמש(I
."False" ניגשת לאותו העמוד באינטרנט, ומקבלת את הערך(II
.משווה בין הסיסמאות(III
.אם ההשוואה מחזירה אמת- האפליקציה מחזירה לנו הודעת ברכה(III.I
.אם ההשוואה מחזירה שקר- האפליקציה מחזירה לנו הודעת שגיאה(III.I*
כסיסמה-אנחנו מקבלים הודעת ברכה, אבל.. לא, זה לא מה שקורה! מוזר ביותר.. כנראה שהאפליקציה False אוקיי.. זאת אומרת שאם נכניס את המילה
:בנויה בצורה אחרת, בצורה כזאת
.האפליקציה מקבלת סיסמה מהמשתמש(I
.מבצעת השוואה עם סיסמה שקיימת אצלה(II
.אם ההשוואה מחזירה אמת-האפליקציה מחזירה הודעת ברכה(III.I
.אם ההשוואה מחזירה שקר-האפליקציה מתחברת לאותו העמוד ומחזירה את הערך שכתוב בו(III.I*

.אוקיי.. זאת אומרת ש...ישנם כמה דרכים לפתור את האתגר הזה, אני אסביר את ההכי פשוטה
.Falseל Trueאנחנו יכולים לגשת ולפתוח את התוכנה בעורך ההקסדצימאלי שלנו, ולשנות את התנאי, פשוט נחליף בין ה
:מה זה ייתן לנו? זה ייתן לנו שהתוכנה תפעל בצורה הבאה
.האפליקציה מקבלת סיסמה מהמשתמש(I
.מבצעת השוואה עם סיסמה שקיימת אצלה(II
.אם ההשוואה מחזירה שקר-האפליקציה מחזירה הודעת ברכה(III.I
.אם ההשוואה מחזירה אמת-האפליקציה מתחברת לאותו העמוד ומחזירה את הערך שכתוב בו(III.I*

זה אחלה של דבר! כי אם נצליח לגרום לאפליקציה שלנו לרוץ בצורה הזאת, אנחנו נוכל להכניס כל מחרוזת שקיימת (חוץ מהסיסמה האמיתית) ונקבל
.את הודעת הברכה!, יאללה, נגש לעבודה
שבה GETפתחו את האפליקציה בעורך הטקסט שלנו ותחפשו את המקום שבו היא מבצעת את הבדיקה ע"י חיפוש המקום שבו היא מבצעת את פקודת ה
.מהעמוד "False" היא מקבלת את הערך
"True "במקומה תכתבו את המילה ,"False" עכשיו, תעלו קצת למעלה, ואנחנו רואים את ההודעה שגיאה שלנו, ומעליה אנחנו רואים את המילה
.(יש 5 תווים "False" יש רק 4 תווים ובמילה "True" יש רווח אחד, זה מפני שלרב יש בדיקה של גודל התוכנה- ובמילה True של המילה eשימו לב שאחרי ה)
המקורי- הוא לא אמור להיות ממש רחוק, כמה שורות למעלה, כשתמצאו אותו תערכו אותו True סבבה, אחרי העריכה הזאת נעלה עוד למעלה, ונחפש את ה
.שהתו החמישי ידרוס שטח שקיים בתוכנה שלנו- אל תצרו תו חדש!) ותשמרו את האפליקציה*) "False"ל
עכשיו תריצו את האפליקציה, תכניסו כל מחרוזת שאתם רוצים שאתם בטוחים שהיא לא הסיסמה המקורית ו..וואלה! פתרנו עוד אתגר! אני ממש מתחיל
.=) להנות מכל העסק

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


:App4 - V
.תריצו אותו וניראה מה יש לנו ,(App Challenge 4)יאללה, תתחברו לאתר, ובאותו מקום תורידו את האתגר הרביעי
...אוקיי, המטרה היא כמו שאפשר לנחש- ללחוץ על אחד הכפתורים, תנסו לשחק עם זה קצת, אולי תצליחו ללחוץ על הכפתור
.VisualBasic נכון, אי אפשר ללחוץ באמת על הכפתור... בשביל לפתור את האתגר הנחמד הזה, אנחנו צריכים טיפה ידע בשפת התכנות
אוקיי, לפני שאנחנו נגשים לפתור את האתגר הזה, אנחנו צריכים לנסות ולראות איך בנו את התוכנה הזאת, אחרי שנדע איך בנו אותה- אולי
.נצליח להתמודד עם האתגר
אוקיי, אנחנו רואים שהאתגר משתמש פה רק בשני לחצנים, לא משהו מסורבל, עכשיו, הם בנו את הישום ככה שרק לחצן אחד יכול להיות נגיש
.וכשהעכבר עובר מעל הלחצן הנגיש- הוא מיד הופך ללא נגיש, ולחצן השני נהיה נגיש
.מכאן אפשר לדעת, שלא משנה כמה אנחנו מהירים- אנחנו לא נצליח בעזרת העכבר לפתור את האתגר הזה
אוקיי, מה עוד אפשר לעשות? לאתגרים האלה אין הרבה פתרונות, והפתרון אמור לקפוץ לכם לראש ישר כשאתם רואים אחד כזה, אם עדיין לא
.עליתם על רעיון מסוים, לא נורא, אני אסביר איך אפשר לעבור אתגר כזה, וככה תלמדו להבא
?File,Edit ?בכדי לקרוא את הטקסט הזה, אתם משתמשים בדפדפן מסוים, נכון? סבבה, תסתכלו שניה על התפריט שיש לו, מה יש לכם שם
במקלדת שלכם, מה השתנה? מתחת לאות מסוימת בכל מילה נוצר קו, מה הוא Altזה לא משנה כ"כ, תסתכלו על המילים האלה ותלחצו על ה
כשאני לוחץ על ה ,Notepad מסמל? יפה, הוא מסמל את המקש קיצור דרך לאותו כפתור, בכדי לכתוב את הטקסט הזה אני משתמש בעורך הטקסט
זה יבצע בדיוק את אותו האפקט כמו אם אני אגיע לשם Alt+Fאם אני אלחץ על ,File של המילה Fנוצר לי קו מתחת ל Alt
.File עם העכבר והקליק על המילה
...סבבה, הכל טוב ויפה, אבל.. למה אני לעזאזל מספר לכם את זה? עדיין לא הבנתם? אוקיי
ו...שום Altאנחנו יכולים להשתמש במקש קיצור דרך בשביל ללחוץ על הכפתור שיש לנו באתגר! סבבה, נפתח את האתגר שלנו, נלחץ על
קו לא מופיע.. ברור ששום קו לא מופיע! אתם חושבים שהם היו עושים לנו את החיים כ"כ קלים? אנחנו צריכים לעשות שיהיה מקש קיצור דרך
.לאותו הכפתור! פאק.. איך עושים דבר כזה? אנחנו צריכים את הקוד של האתגר.. תחשבו שוב, בדיוק בשביל זה יש לנו את העורך ההקסדצימאלי
כבר יודע מה אני הולך לכתוב, ומי שלא- לא נורא VisualBasic אוקיי, אז יש לנו את הפתרון.. אנחנו רק צריכים דרך... אני מאמין שמי שיודע
.תמשיכו לקרוא
אנחנו צריכים ליצור כפתור רגיל, ואיפה שאנחנו ממלאים את הטקסט VisualBasicאם אנחנו רוצים לעשות כפתור שיהיה לו מקש קיצור דרך ב
שאמור להיות על אותו הכפתור אנחנו ממלאים את הטקסט כרגיל חוץ ממשהו אחד קטן, לפני התו שאותו אנחנו רוצים כמקש קיצור דרך אנחנו
."&" צריכים לשים את התו
וואלה, אחלה של דבר, מפה הדרך כבר ברורה, אנחנו פשוט פותחים את אתגר בעזרת העורך ההקסדצימאלי שלנו, נגשים לחפש את הטקסט שכתוב
לנו על הכפתור ופשוט נוסיף לפני האות שאנחנו רוצים שתהווה לנו כקיצור דרך את התו"&", תזכרו שאם אנחנו מוסיפים תו- אנחנו חייבים למחוק
.תו במקומו בכדי שאם קיימת בדיקת גודל, אסור שישתנה משהו
יש שתיים כאלה! אחד לכל כפתור, אפשר לערוך את שניהם, ככה שלא משנה איזה כפתור יהיה נגיש, אנחנו) "Click Me"אוקיי, נחפש את הטקסט
.(&Lick Me-אנחנו נוכל כל הזמן לפנות אליו מהקיצור דרך) וכשנמצא אותו/אותם נערוך אותם לטקסט שמכיל את התו "&", (לדוגמא
ו..מה אנחנו רואים? יש קו או אין קו? סבבה Altיאללה, אחרי שערכנו- נשמור ונריץ את האתגר אחרי השיפוצים שלנו, סבבה עכשיו נלחץ על
!ותקפוץ לנו הודעת הברכה Alt+Lעכשיו נלחץ על

:App5 - VI
.(App Challenge 5) אוקיי, זהו האתגר החמישי והאחרון לטקסט הזה, יאללה תתחברו לאתר ותורידו את האתגר החמישי
.בואו נריץ את האפליקציה הזאת, אנחנו צריכים להכניס סיסמה, תמציאו משהו ותכתבו, רק בכדי שניראה איך זה פועל, סבבה קיבלנו את הודעת השגיאה
ממבט ראשון, מה שאפשר לראות זה שפשוט- התוכנה מקבלת סיסמה מהמשתמש- ומשוואה אותה עם סיסמה שקיימת אצלה, אם הסיסמה נכונה אנחנו
.מקבלים הודעת ברכה, ואם הסיסמה לא נכונה- אנחנו מקבלים הודעת שגיאה, סבבה
.Debuggerבואו נכיר כלי חדש שיכול לעזור לנו בקטעים כאלה- ה
מהו דיבאגר? דיבאגר זהו כלי שמסוגל לקבל קובץ בינארי מהמשתמש ולהציג אותו בשפת אסמבלי, אוקיי, עד פה הוא מאוד דומה לדיסאסמבלר, אבל
,הדיבאגר שונה מאוד מהדיסאסמבלר, בתוכנה אחת, התכונה החשובה ביותר של הדיבאגר- הוא מסוגל להריץ את התוכנה לפי שורות הקוד- אחת אחת
.והמשתמש יכול לסמן לו מתי ובאיזה שורה הוא רוצה שהתוכנה תעצור ותחכה
,ובזמן שהוא עושה את זה, אנחנו גם רואים מה קורה עם אותו הקובץ, ואנחנו גם רואים את השורות שהדיבאגר מריץ, זה מאוד עוזר בכדי לבצע רורסינג
.ואפילו עוזר מאוד כשמדובר באתגרים כמו מה שיש לנו היום

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

http://home.t-online.de/home/Ollydbg/download.htm

.יאללה, נגש לעבודה! תפתחו את האפליקציה שלנו בעזרת הדיבאגר שיש לכם על המחשב
.שזה איפה שאנחנו רואים את הקוד באסמבלי ,Mainכמו שאתם רואים, הוא מחולק לכמה חלונות, יש לנו את ה
.שזה איפה שאנחנו יכולים לראות את מצב האוגרים בזמן הרצת התוכנה ,Registers יש לנו את ה
.שהתוכנה משתמשת, ולידו יש לנו את החלון שמראה לנו מה יש באותם כתובות זיכרון Dumpיש לנו את החלון שבו אנחנו רואים את כל ה
.פעם אחת ותעבירו לחלון של האתגר "Play"אוקיי, בואו ונריץ את האתגר שלנו- תלחצו על ה
הוא מבקש סיסמה, אבל לפני שנכניס סיסמה, אני רוצה להסביר מה אנחנו עושים עכשיו, אנחנו רוצים לנסות למצוא איפה בזיכרון האפליקציה שלנו
.שומרת את הסיסמה המקורית שלה, כי אם נדע איפה היא שומרת אותה- נוכל לגשת לשם- ולראות את הסיסמה
.תכניסו את הסיסמה ותלחצו על אנטר ,"ILoveGoogle" אוקיי, בואו נכניס סיסמה שנזכור, נכניס למשל
!BreakPointsאוקיי, לא נעים, התוכנה נסגרה ולא הספקנו לראות מה הלך, זאת אומרת שאנחנו נהיה חייבים להשתמש ב
הן אותן הנקודות האלה שדיברתי עליהן קודם- שבעזרתם אנחנו יכולים לעצור את הרצת הקובץ בנקודה מסוימת ואז להתחיל לחקור BreakPoints
.את הקוד, זה דבר שמאוד עוזר, ואנחנו נשתמש בהן היום
אוקיי, נלחץ עכשיו על הכפתור של "הרץ להתחלה" (שני ראשי חצים פונים לכיוון שמאל), ודבר ראשון- נבדוק איפה התוכנית מתחילה לרוץ, איך
ששומר את הכתובת של הפקודה לביצוע, נסתכל עליו בתחילת התוכנית וניראה שהוא IPאנחנו יכולים לבדוק דבר כזה? פשוט מאוד ע"י הסתכלות באוגר
מצביע על הכתובת00401220, אוקיי, נגש אל המיקום הזה, לפני שנריץ את האפליקציה שוב, נסתכל טיפה מסביב, אנחנו יכולים לראות למשל
.שב00401022 האפליקציה שלנו טוענת את הטקסט שביקש ממנו להכניס סיסמה
בואו ונציב ברייקפויינט בשורה שבה האפליקציה טוענת את הטקסט של הבקשת סיסמה, בכדי להציב ברייקפוינט פשוט סמנו את המקום שבו אתם רוצים
.Fבכדי להוריד אחת כזאת, פשוט גשו אליה- ותלחצו שוב על2 ,F2 להציב אחת כזאת ותלחצו על
.זאת אומרת שהיא לא מחכה לקלט מסוים - "Pause"אוקיי, האפליקציה שלנו הפסיקה לרוץ בברייקפוינט שלנו ובצד ימין למטה כתוב שהיא במצב
אוקיי, אז עצרנו אותה מוקדם מדי, בואו ונשתמש בטריק מאוד ישן ונחמד, אני לא יודע מה השם הרשמי שלו, אבל בקהילה שבה למדתי את זה קראו לו
?שדה מוקשים, אנחנו פשוט נעשה שהעשר שורות הקרובות יהיו ברייק-ליין (שורות שיש בהן ברייקפויינט) מה זה יעזור לנו - "Mine Field"
.זה יעזור לנו- כי ככה נוכל לדעת איפה השורה שבה האפליקציה מחכה לקלט
.אם אחרי עשר ברייק ליין אנחנו רואים שהתוכנית עדין עוצרת ולא מחכה לקלט- נוסיף עוד קצת ברייק ליינס, זה לא אמור להיות רחוק
!עד שהתוכנה לא ממשיכה לרוץ- שם היא מבקשת קלט "Play" פשוט תציבו הרבה ברייק ליין ואחרי שתגמרו להציב אותן- פשוט תלחצו הרבה על
.00401054 :אוקיי, עכשיו, אחרי שביצענו את התרגיל הזה, מצאנו שהשורה שבה האפליקציה שלנו מחכה לקלט היא
סבבה, עכשיו, מה זה נותן לנו? אז ככה, אנחנו עכשיו יודעים איפה התוכנית מקבלת את הסיסמה שלנו, אנחנו צריכים לעבוד רק עוד טיפה בכדי לדעת מתי
היא ניגשת לסיסמה ששמורה אצלה בשביל להשוות, וככה נוכל לדעת מה הסיסמה האמיתית! אוקיי, לפני שנכניס את הסיסמה- נציב ברייקפוינט בשורה
.שמתחת לשורה שמבקשת את הסיסמה, בכדי שנוכל להכניס סיסמה מבלי שהאפליקציה תבצע את הבדיקה, היא פשוט תקבל את הסיסמה ותחכה לנו שם
אוקיי, עכשיו, אחרי שהאפליקציה קיבלה את הסיסמה שלנו, היא אמורה להשוות אותה עם הסיסמה ששמורה אצלה, זאת אומרת שהיא צריכה לגשת
שבעזרתה היא מאכסנת אותה, אנחנו צריכים לחפש עכשיו שורה שבה Mov לאיפה שהסיסמה שמורה ולהוציא אותה משם- זאת אמורה להיות פקודת
שבה שמורה הסיסמה שלנו, אוקיי, איך נעשה את זה? פשוט נסמן את השורה שבה (Stack) והאפליקציה נגשת למחסנית Mov יש פקודת
ובחלון שמתחת לחלון Mov האפליקציה מקבלת את הסיסמה שלנו, ונתחיל לרדת עם החצים שורה שורה, עד שניראה שורה, שהפקודה בה היא פקודת
.מצוינת איזו כתובת מסוימת של תחילת המחסנית, במקרה שלנו זאת השורה הראשונה.. אבל זה לא מחייב Main
אוקיי, אז יש לנו את הכתובת של המחסנית- אנחנו יכולים פשוט ללחוץ על איפה שהיא מסומנת ואז ללחוץ עליה עם הכפתור הימני של העכבר, ולבחור את
.Dumpאוקיי, עכשיו נעבור לחלון של ה ,"Follow address in dump"
"g...ppinrtripowe" אוקיי, נסתכל בכתובת ששם מתחילה המחסנית- נחפש טקסט מסוים, שהוא יכול להיות הסיסמה, הטקסט היחידי שניראה הגיוני הוא

.אוקיי, ננסה את הסיסמה, ומשום מה- היא לא נכונה, איפה טעינו? לא טעינו, פשוט מאוד- שכחנו משהו קטן אחד
אלה ראשי תיבות של המילים ?Lifo מה זה !Lifoהסיסמה שלנו שמורה בתוך מחסנית, במה מיוחדת המחסנית מכל איזור זיכרון אחר? שבה הקלט נכנס כ
Mov המידע האחרון שנכנס למחסנית- יוצא הראשון! מה הכוונה? זאת אומרת שיש לנו את הסיסמה ביד, אבל שימו לב שהפקודת "Last In- First Out"
ששולפת בייט בייט Mov שלנו- שולפת בבייטים, זאת אומרת ארבעה תווים כל פעם, וזאת אומרת שהסיסמה גם הוכנסה בצורה כזאת שכשהפקודת
.מהמחסנית תשלוף אותה- היא תהיה הסיסמה המקורית, ולכן עכשיו היא מבולגנת
אז זאת אומרת שאנחנו צריכים לקחת את ארבעת האותיות הראשונות- ולשים אותם בסוף, ואת ארבעת הבייטים השניים- לשים ארבע לפני הארבע
:האחרונים, נעשה את זה בשלבים
g...ppinrtripowe :המחרוזת שלנו היא
:נפריד כל ארבע תווים

g... ppin rtri powe

:עכשיו, נחליף בין הבייט הראשון- לבין הבייט האחרון
(!שימו לב שאנחנו רק משנים את סדר הבייטים! ולא את סדר התווים עצמם)

powe ppin rtri g...

:ובין הבייט השני לשלישי

powe rtri ppin g...

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

:סיכום - VII
אוקיי, לקח לי הרבה מאוד זמן לכתוב את הטקסט הזה כי בהתחלה לא הייתי סגור על איך שאני רוצה להעביר אותו, חשבתי בהתחלה להעביר
עקרונות ולשים מדי פעם כל מני דוגמאות פה ושם, ואחרי שכתבתי כמה פרקים חשבתי לעצמי שזה ממש טיפשי, כי לא לומדים ככה כלום, וזה
סתם מבלבל, ואז ערכתי וסדרתי הכל וזה מה שיצא אני מאוד מקווה שלמדתם, ושהטקסט עניין אתכם, ושהכי חשוב- נהנתם, כי "אם זה לא
כיף, אז מה זה שווה בכלל?!" חח, אני אולי אכתוב טקסט נוסף לטקסט הזה, אולי על יותר רמה, ועולי על צדדים אחרים בנושא, אני עוד לא
יודע, ועוד משהו שרציתי להגיד זה שלכל אתגר שנתתי פה היה יותר מפתרון אחד, לא הבאתי כמה פתרונות בכדי לא לבלבל אתכם ולנסות
.להשאיר אתכם על קו רציף אחד, אבל כל אחד כאן יכול לפעול באיזה דרך שהוא רוצה, העיקר זה להפעיל את הדמיון, זה הכי חשוב
.יאללה, אני זזתי, תשנו טוב, מחר צריך לקום מוקדם




.cp77fk4r - שלכם תמיד, באש ובמים



|--------MADE BY cp77fk4r aka 3gGDr0pp3r aka eXt4zZa aka Empty0pagE--------|