
הטקסט המלא של הדקות הראשונות בהרצאה «פריצה של UnCrackable-Level3» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, אנחנו רוצים לגלות את הסטרינג הסודי ניתחנו את הקוד הזה של פונקציית בר שמשווה לנו האם התוצאה של היוזר פה למעלה היא נכונה או לא והגענו למצב שהסוד הגדול שמור בתוך init secret string בתוך הפונקציה שהיא מאתחלת את המשתנה הזה אבל אחרי שנתפוס אותו פה ביציאה זה לא מספיק לנו
כי צריך לקחת ולעשות לו קצור עם המפתח הסודי ורק כשנעשה קצור אנחנו נדע את התשובה הנכונה כי היא זאתי שמושווית פה ל-user input. אז בשביל שנגלה את הדבר הזה, את ה-key אנחנו יודעים כי הוא מהותחל ב-Java, ראינו שזה מילת פיצה כמה פעמים. השאלה זה, מה זה ה-secret string הזה?
ויש לנו פונקציה שמאתחלת אותו. בואו ניכנס אליה ונראה. הנה הוא עושה את ה-compiling ובואו נראה את הפונקציה הזאתי. A1 זה בעצם ה-secret string שלי, זה האזור בזיכרון שלו.
הרי זה מה שהעברנו לו, נכון? secret string זה הכתובת בזיכרון. אוקיי אז נעשה פה rename ונקרא לזה secret string address אוקיי ואני רואה פה תסתכלו על הבר הזה פה תראו תראו איזה ערוך זה וואי וואי וואי וואי וואי וואי וואי וואי יש פה מלא מלא פעולות שהם עושים אין לי מושג מה הם עושים בוא נלך לסוף הופה פה אני רואה שהוא לוקח את הריזולט מכניס את הכתובת התחילתית
ועושה כל מיני פעולות ומחזיר את הריזולט זה הריזולט שחוזר חזרה אז אנחנו יכולים לתפוס אותו פה ביציאה אבל אם תסתכלו טוב טוב בקוד הם לא משתמשים במה שהפונקציה מחזירה הם משתמשים ב-Secret String עצמו זה אומר שמה שחשוב לי זה הערך של ה-Secret String הזה ביציאה שלו אוקיי אז איך אנחנו נתפוס את זה אז אנחנו עושים
דבר כזה שמים את זה פה צד ימין ואנחנו צריכים לתפוס את הפונקציה הזאת עושה דאבל קליק מגיע לכאן, עושה לדבר הזה Synchronize with IWA, הנה שזה וזה יהיה מסונכרן, תחזור חזרה לכאן, הנה זאת הפונקציה שאנחנו רוצים להבין מה קורה, אני בא לפה לוחץ רווח,
רואה את זה בצורה אחרת, ומה שרציתי כל הזמן הזה לגלות, את הכתובת הזאת. את הכתובת, איפה מתחילה הפונקציה? כי אני צריך להתחבר אליה ואין לה שם.
למה אין לה שם? כי היא לא באקספורטס, פה באקספורטס אין אותה, נכון? כי היא יסודית, היא פנימית, זו פונקציה פנימית, אין לה שם.
אז אפשר לזהות אותה רק לפי המספר הזה. השם הזה שאתם רואים כאן, זה אני המצאתי לו את השם הזה, נכון? תכניס מבחינתם אין לו שם. אז אני לא יכול להיתפס לשם, אני חייב להיתפס לכתובת, וכבר ראינו איך עושים את זה, נכון?
אז אנחנו רואים ש-00fa זה בעצם הכתובת שאנחנו רוצים לתפוס אותה. אז מה אנחנו עושים? בואו נלך לכאן, וכמו שעשינו פה אנטי דיבאג אופסט נכון ונתפסנו לכתובת מסוימת ואז עשינו לה ריפלייס אנחנו נעשה משהו דומה אוקיי אז פה יש לנו משתנה פרוטקט סיקרט אופסט שזה זה ואנחנו לוקחים את כתובת הבסיס
זוכרים יש לנו כתובת בסיס פה חישבנו לאן הוא התאין את המודול שלנו ולכתובת בסיס מוסיפים את האופסט שלנו זה אומר ההזזה ומקבלים את הכתובת של הפונקציה הזאת שמאתחלת את ה-Secret String.
זאת הכתובת שאליה אנחנו רוצים להתחבר. הפעם אני לא רוצה לעשות Replace, אני רוצה לעשות Attach. למה אני רוצה לעשות Attach? כי אני רוצה להתחבר אליה.
זוכרים, כמו שעשינו לפני כן? אני רוצה לעשות Attach כמו שעשינו פה למעלה. זוכרים שעשינו פה לפני ה-Replace, היה לנו פה Attach. אינטרספטור Attach ומתחברים לאיזושהי כתובת ותופסים ערך בכניסה, ביציאה יופי אז מה אני רוצה לעשות פה אני עושה attach לכתובת הזאת בזיכרון בכניסה אני תופס את הארגומנט הראשון שמועבר עליה נכון arg
זה 0 שזה בעצם ה-secret string שלי וזה secret memory address secret string memory address פה בתוך arg 0 הזה יושב הערך הזה שמועבר לנו כאן בסוגריים סיקרט סטרינג אדרס הסיקרט סטרינג אדרס הזה הוא מועבר בסוגריים זה ארג אפס ואז אני עושה משתנה משלי ששומר את הערך פה זה הסוד הגדול ששמור ואני נכנס לתוך הפונקציה
הזאת זאת אומרת אני בכניסה אליה תופס אותו אחרי שאני בכניסה תפסתי אותו אני ביציאה יכול להשתמש בזה להציץ מה יש בפנים איך אני אציץ אני יכול לעשות דבר כזה אני פשוט עושה ממורי read בייט הרי אני קורא מתוך הכתובת הזאת ששמרנו בצד בכניסה אנחנו במעמד היציאה בליב כשאנחנו יוצאים אנחנו עושים ממור ריד הרי בייט אנחנו קוראים מתוך הזיכרון 24 טבים ופה יישב הסוד הגדול זה למעשה
הרגע הזה שנגמרת פונקציית ההתחול והוא חוזר חזרה לקוד נכון הרי בסוף של הפונקציית התחול כאן הוא חוזר להלאה אז אני תופס אותו פה ביציאה כשהוא יוצא מפונקציית יעד חו"ל ויש לו פה את ה-Secret String המלא הזה.
ה-Secret String הזה עבר לו בכניסה והוא הוסיף לו מידע ואחרי זה משתמשים בו, אז אני תופס אותו ביציאה. איך עשיתי את זה שוב?
שוב אני מראה לכם, בכניסה תפסתי את הארגס 0, את הכתובת, ושמרתי אותה בצד ב-dis נקודה. למה דיס נקודה? שיהיה זמין ברמת ה-Object ולא רק ברמת פונקציה כדי שאני אוכל בפונקציה אחרת גם לתפוס אותו ואז אני תופס אותו כאן ביציאה, leave ואומר לו תקרא מתוך התא הזה בזיכרון 24 תווים ואז הוא קורא לי 24 תווים
ואת ה-24 תווים הוא מכניס לכאן פה יושב הסוד הגדול טוב עכשיו אנחנו יכולים להדפיס אותו דרך אגב אנחנו גם יכולים להדפיס זיכרון אולי אני אלמד אתכם גם איך להדפיס משהו מתוך זיכרון יכלתי פה לפני כן לפני שאני תופס אותו להראות לכם אני יכול לעשות console log תדפיס לי במסך אי אפשר סתם להדפיס סיקרט ממורי
אדרס את הכתובת הזאת בזיכרון נכון למה כי צריך להדפיס את זה בצורה הקסה אז יש לנו פונקציה שנקראת אקס דאמפ אנחנו מעבירים לה מה להדפיס ואיך אני אומר לה תדפיס 24 בלי הדרים וניסיון לתרגם את זה לסימנים של אנסי אנסי זה אסקי טייבל אולי זה באסקי אז אני יכול לנסות