PracticU

פריצה של UnCrackable-Level1 - חלק 2

בלי כתוביותעם כתוביות
PracticU › קורס סייבר והאקינג ל-Android - פריצה לטלפונים ואפליקציות אנדרואיד - בודק חוסן - Mobile App Pentesting › פריצה של UnCrackable-Level1 - חלק 2
מילון מושגים:
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
סיסמה - מחרוזת תווים סודית שמשמשת לאימות זהות המשתמש בעת כניסה למערכת. ככל שהיא ארוכה ומורכבת יותר, כך קשה יותר לנחש אותה.
ASCII - תקן לקידוד תווים שמייצג אותיות, ספרות וסימנים כמספרים, ומשמש בסיס לייצוג טקסט במחשב.

פריצה של UnCrackable-Level1 - חלק 2
הרצאה זו ממשיכה את פענוח אפליקציית האתגר UnCrackable Level 1, ומראה את הרעיון של "עטיפת" פונקציה קיימת כדי לתפוס את הערך שהיא מחזירה.
מה הרעיון
כשהערך הסודי לא מופיע בקוד בצורה ישירה אלא מוחזר מתוך פונקציה פנימית, אפשר - בעזרת Frida - להגדיר מחדש את אותה פונקציה כך שהיא עדיין קוראת לגרסה המקורית שלה (ולכן מתנהגת בדיוק כמו קודם), אבל לפני שהיא מחזירה תשובה, הקוד החדש גם מציג את הערך הזה על המסך.
התוצאה
כך מתגלה שהערך המוחזר אינו הסיסמה בצורתה הקריאה, אלא קודי ASCII (ייצוג מספרי של תווים), שצריך להמיר אותם חזרה לטקסט כדי לקבל את ה"סוד" הסופי.
למה זה חשוב
התרגיל מדגים עיקרון מרכזי בניתוח דינמי של אפליקציות: גם כשלא מבינים את הלוגיקה הפנימית של פונקציה, אפשר "להתבונן" בערך שהיא מחזירה בזמן ריצה בלי לשנות את ההתנהגות שלה, ולהשתמש בכך כדי לחשוף מידע שהמפתח ניסה להסתיר.
השיעור הבא בקורס: איך לפרוץ ולשנות קובץ APK עם apktool

פרקי ההרצאה: פריצה של UnCrackable-Level1 - חלק 2

  1. 00:00

    המטרה: לגלות הסוד

  2. 00:38

    איתור הפונקציה בקוד

  3. 01:31

    הכרת Java Perform

  4. 02:11

    יצירת הפניה לקלאס

  5. 02:46

    כתיבת מימוש חדש

  6. 03:22

    התאמת הפרמטרים למקור

תמלול ההרצאה: פריצה של UnCrackable-Level1 - חלק 2

הטקסט המלא של הדקות הראשונות בהרצאה «פריצה של UnCrackable-Level1 - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    שלום לכולם בהרצאה הזו אנחנו נפצח את הקוד הסודי מאחורי אפליקציית Uncrackable אני ממשיך את ההרצאה הקודמת שהייתה לנו וגילינו בהרצאה הקודמת שהתשובה מסתתרת מאחורי הפונקציה הזאת שאם נתפוס את הערך שהיא מחזירה הפונקציה הזאת נדע את התשובה הסופית את הקוד הסודי את הסיסמה הסודית פה תראו יש

  2. 00:26

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

  3. 00:38

    בואו נעשה קונטרול קליק ונראה. אתם רואים? פונקציה קוראים לה a. הפונקציית a יושבת בקלאס שקוראים לו a. וקלאס שקוראים לו a יושב בתוך פקאג'.

  4. 00:51

    אז אנחנו צריכים לתפוס אותו ולגלות מה הוא מחזיר פה. אני לא יודע מה הוא מחזיר, יש פה איזשהו אלגוריתם הצפנה.

  5. 00:59

    זה פחות מעניין אותי מה הוא עושה, העיקר מה הוא מחזיר. אוקיי, אז איך אנחנו נעשה את זה? אז אנחנו נעשה דבר כזה, אנחנו ניקח את השם של הפקקג', שם של קלאס, שם של זה, ונכתוב אותו מחדש ונתפוס אותו, תכף נעשה את זה.

  6. 01:16

    אז איך אנחנו מתחילים? קודם כל אני מזכיר לכם שיש לנו פקודה בפרידה שאומרת Java Perform תבצע משהו בג'אווה ואנחנו מעבירים לו את השם של הפונקציה והוא מבצע מה שאנחנו נגיד לו.

  7. 01:31

    צורת כתיבה אנחנו כותבים בשפת JavaScript, על עובדים ובאובייקטים של Java. אוקיי, אז אני מזכיר לכם מה היה לנו לפני כן, עשינו var class c ואמרנו לו תיתן לי פוינטר הפניה לזיכרון למקום שבו נמצא הקלאס הזה ואחרי שהיה לנו את ההפניה למקום הזה בזיכרון עשינו לו אימפלמנטציה מחדש לפונקציה מסוימת.

  8. 01:56

    אותו דבר אנחנו נעשה גם עכשיו, אנחנו נעשה גם עכשיו משתנה בשם aa-class ונגיד לו Java use ו-package כזה Class A, אוקיי?

  9. 02:08

    זאת אומרת, package כזה, שימו לב, השם של package מסתיים בנקודה A, ובפנים אנחנו לוקחים בתוך ה-package הזה את ה-class A. אז יוצא פעמיים A בסוף, נקודה A.

  10. 02:20

    לכן הוא נקרא AA, שם של package נקודה שם של class. אז יש לנו עכשיו פוינטר בזיכרון, הפניה בזיכרון, למקום שיש בו את ה-class הזה.

  11. 02:29

    מה אנחנו רוצים ב-class הזה? אנחנו רוצים בקלאס הזה לתפוס את הערך שהפונקציה הזאת מבצעת, כן? אנחנו רוצים לתפוס מה היא תעשה בסוף, מה היא מחזירה בסוף, הרי אנחנו צריכים את התשובה שלה, אוקיי? אנחנו צריכים את התשובה הזאת.

  12. 02:44

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

  13. 03:06

    זה קלאס, זה שם של פקאג', זה שם של קלאס וזה שם של פונקציה בתוך הקלאס. פשוט נתנו להם אותו שם אז זה מבלבל.

  14. 03:17

    מה עוד חשוב לציין? מה היא בדיוק מחזירה, מה היא מקבלת. זאת אומרת, ה-A החדשה זאת פונקציה שמקבלת שני ערכים.

  15. 03:26

    למה זה כזה חשוב? כדי שזה יהיה תואם למה שקורה כאן. כאילו פה, אתם רואים? פונקציית a מקבלת ערך אחד פסיק הערך שני, זה חייב להיות תואם, כי אני מחליף בזיכרון משהו, אז זה חייב לקבל אותו דבר ולהחזיר אותו דבר.

  16. 03:41

    אוקיי, אז יש לנו עכשיו את הקוד החדש שלנו פה, אנחנו נכתוב את הקוד החדש. עכשיו, אין לי כוח להעתיק את כל מה שהם עשו, אז אני עושה כזה דבר.

  17. 03:52

    אני קורא ל-a המקורית, לפונקציה המקורית, this מצביע לפונקציה המקורית, ל-a המקורי שלה, ומעביר לה את אותם הדברים שקיבלתי כאן. זאת אומרת, אני קורא לקוד המקור,

לקורס המלא: קורס האקינג לאנדרואיד אונליין

ההרצאה הקודמת: פריצה של UnCrackable-Level1 - חלק 1

ההרצאה הבאה: איך לפרוץ ולשנות קובץ APK עם apktool

הרצאות קשורות מקורסים אחרים

  • פריצה ל-SSH עם Hydra
  • XSS - פריצה לאתר עם Javascript
  • גילוי פריצה עם ETW - SilkETW
  • פריצה לאתר דרך כתובת URL

קורסים נוספים במסלול

  • קורס SOC - מיישם הגנת סייבר
  • קורס סייבר למתחילים - Hacking - בדיקות חוסן תשתיתי ופריצה ל-Windows 10/11 - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס פריצה ומבדקי חדירה לתשתית ארגונית - בדיקות חוסן מתקדמות ל-Active Directory - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס פריצה ומבדקי חדירה לאתרי אינטרנט - בדיקות חוסן לאתרים - Web Pentesting - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP