PracticU

פריצה של UnCrackable-Level2 עם GUI FRIDA

בלי כתוביותעם כתוביות
PracticU › קורס סייבר והאקינג ל-Android - פריצה לטלפונים ואפליקציות אנדרואיד - בודק חוסן - Mobile App Pentesting › פריצה של UnCrackable-Level2 עם GUI FRIDA
מילון מושגים:
GUI - ממשק משתמש גרפי: ממשק מבוסס חלונות, אייקונים וכפתורים, בניגוד לשורת פקודה טקסטואלית.
ספרייה - אוסף קוד מוכן, כמו פונקציות ומחלקות, שמפתחים משתמשים בו בתוכניותיהם במקום לכתוב הכול מחדש.
הוק - נקודת חיבור שמאפשרת להריץ קוד מותאם בשלב מסוים של תהליך. ב-React, מנגנון לניהול מצב ויכולות ברכיבים.
קומפיילר - תוכנה שממירה קוד מקור שנכתב בשפת תכנות לקוד שהמחשב יכול להריץ, ומדווחת על שגיאות תחביר.
root - משתמש העל במערכות Linux, בעל הרשאות מלאות לכל פעולה. גם הרמה העליונה בעץ של תיקיות או נתונים.
אתר אינטרנט - אוסף של דפים ומשאבים מקושרים המתארחים תחת כתובת אחת ומוגשים דרך דפדפן.
סקריפט - קובץ המכיל רצף פקודות שמבוצעות על ידי מפרש, לרוב כדי להפוך משימות לאוטומטיות.
DLL - קובץ ספרייה ב-Windows המכיל קוד ופונקציות שתוכנות שונות יכולות לטעון ולהשתמש בהן במשותף.

פריצה של UnCrackable-Level2 עם GUI FRIDA
בשיעור זה אנו סוף סוף מציצים בעזרת FRIDA אל תוך פונקציית השוואת המחרוזות שרצה בספרייה החיצונית של האפליקציה. אנו מריצים את שרת FRIDA בטלפון, עוקפים את חסימת הדיבאגינג בעזרת Spawn, מחליפים את פונקציית היציאה של המערכת, ובונים סקריפת הוק לפונקציה ה-Native שמדפיס את הפרמטרים שעוברים בה, עד שמגלים את הסיסמה הסודית של האפליקציה.
נושאי הסיכום המוצגים בשיעור:
1. המטרה ומבנה הפונקציה: אנו רוצים להציץ אל פונקציית השוואת המחרוזות. הפרמטר הראשון שהמהדר של Ghidra קרא לו הוא הקלט של המשתמש שמגיע מהמערכת, השני הוא הסוד, והשלישי הוא אורך ההשוואה, כאשר הפרמטרים ממוספרים מאפס.
2. שינוי שמות משתנים לסדר: בפענוח של Ghidra נותנים שמות משמעותיים למשתנים, כדי שיהיה סדר בראש ונדע בדיוק מה נכנס לפונקציה.
3. הפעלת שרת FRIDA בטלפון: התוכנה המקורית יוצאת מיד בגלל זיהוי ה-ROOT, ולכן מפעילים את שרת FRIDA בכוח עם הפעלה של השרת הקיים בלי להוריד גרסה חדשה, ורואים שהוא רץ.
4. התחברות לממשק הגרפי: מוודאים בעזרת פקודות ה-ADB שהטלפון מחובר, מריצים את הפקודה שמפעילה את הממשק הגרפי כאתר אינטרנט בפורט 5000 ומתחברים אליו.
5. Spawn במקום Attach: האפליקציה חסומה לדיבאגינג ולכן עבודה רגילה לא תצליח. Spawn עוקף את הבעיה כי FRIDA יושבת בתוך תהליך הזייגוטה הראשי שמשוכפל לכל התוכנות החדשות, וכך הסוכן נכנס לכל תהליך חדש כבר מההתחלה.
6. עקיפת פונקציית היציאה: בזמן ה-Spawn, עוד לפני ההפעלה, מחליפים בזיכרון של התהליך את פונקציית היציאה של מערכת ההפעלה במימוש שרק מציג הודעה, וכך מופיעה הודעת זיהוי ROOT אבל הלחיצה על אישור כבר לא סוגרת את התוכנה.
7. היכן מאתרים סקריפטים לספריות Native: בממשק הגרפי נכנסים למקטע טעינת הסקריפטים ומחפשים את מקטע הספריות ה-Native, שהן למעשה הספריות המקבילות לקבצי ה-DLL של לינוקס. המונח Enum משמעו איסוף מידע ו-Hook משמעו כניסה פנימה.
8. הטמפלייט להוק של פונקציה Native: משתמשים בטמפלייט מוכן, מכניסים למשתנה המיועד את שם הספרייה ואת שם הפונקציה הרצויה, והקוד מופעל עם זיהוי ההפעלה של הפונקציה, ואחריו עוברת השליטה לפונקציה המקורית.
9. הדפסת הפרמטרים בכניסה: הסקריפט מדפיס על המסך את שני הפרמטרים הראשונים שנכנסים לפונקציה, מוגבל בגודל עשרים ושלושה כי זה האורך שמושווה בפונקציה, ובלי האורך הזה התוכנה אפילו לא נכנסת אליה.
10. צמצום הפלט בעזרת תנאי: עם כניסה ראשונה מתגלה שהפונקציה נקראת המון פעמים והפלט מתמלא ברעש, ולכן מוסיפים תנאי שמדפיס רק כשהאורך הוא עשרים ושלושה והפרמטר הראשון שווה לקלט הידוע שאנו שולטים בו.
11. On Enter ו-On Leave: לא ניתן להציץ ממש לתוך גוף הפונקציה, אבל בעזרת ההוק אפשר לקלוט מה נכנס אליה שנייה לפני הקריאה ומה היא מוציאה שנייה אחרי שהיא נגמרת.
12. שמירת הסקריפט והרצה ראשונה: שומרים את הסקריפט בעורך טקסט עם הדגשת שפת ג'אווה, מריצים אותו ועוברים לחלון פלט הקונסולה, שם צריך קלט כלשהו באורך עשרים ושלושה תווים כדי להיכנס לפונקציה.
13. שדרוג הסקריפט עם משתני עזר: משדרגים את הסקריפט עם משתני עזר לקלט המשתמש ולמחרוזת הסודית, ומדפיסים רק כשהאורך תקין והקלט שווה לרצף הידוע, כדי לקבל הדפסה מדויקת של הסיסמה בלבד.
14. איפוס והרצה מחדש: בהרצה ראשונה רץ בטעות הסקריפט הקודם ויוצר בלאגן, ולכן סוגרים את האפליקציה, מתחברים מחדש, מבצעים Spawn עם עקיפת היציאה וטוענים את הסקריפט המתוקן.
15. גילוי הסיסמה הסודית: אחרי תיקון קטן של התנאי המדפיס מופיעה על המסך המחרוזת הסודית שהושוותה, זו התשובה הנכונה של האפליקציה, וניתן להקליד אותה ולאמת אותה בהצלחה.
בשיעור הבא נעסוק בנושא עקיפה של זיהוי ROOT ב-UnCrackable3.
בסוף השיעור הצלחנו להציץ לתוך הזיכרון של הפונקציה ה-Native של האפליקציה, לראות את הפרמטרים שעוברים בה ולחלץ מתוכם את הסיסמה הסודית, והסקריפט שבנינו ימתין לנו בשרת הקבצים.
SR12602HE

פרקי ההרצאה: פריצה של UnCrackable-Level2 עם GUI FRIDA

  1. 00:00

    הצצה לפונקציית ההשוואה

  2. 00:54

    זיהוי קלט המשתמש

  3. 01:32

    הפעלת שרת ה-Frida בטלפון

  4. 02:28

    התחברות לממשק RMS

  5. 03:27

    עקיפת היציאה האוטומטית

  6. 04:00

    סקריפטים לספריות Native

  7. 04:38

    תבנית הסקריפט ל-Hook

  8. 05:32

    הצפייה בפרמטרים בזיכרון

תמלול ההרצאה: פריצה של UnCrackable-Level2 עם GUI FRIDA

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

  1. 00:02

    שלום לכולם בהרצאה הזו אנחנו סוף סוף נציץ פנימה בעזרת פרידה לתוך הפונקציית סטרינג קומפר ונראה איזה סטרינג היא מעבירה שימו לב הסטרינג הראשון שלה זאת אומרת הארגומנט הראשון הפרמטר הראשון נקרא s1 ככה הדה קומפיילר של גידרה קרא לו והוא מגיע מתוך משתנה a0

  2. 00:27

    מה זה a0 זה מה שג'אווה מעבירה לבדיקה זה האינפוט של יוזר, אז אנחנו מקבלים ארגומנט ראשון שזה היוזר אינפוט, בואו נקרא לזה כאן, אפשר לקרוא לזה כאן rename variable user input, זה סתם בשבילי שאני, יהיה לי סדר בראש, אז user input שווה ל-get array מתוך משתנה

  3. 00:53

    0, למעשה הוא לוקח את ה-0 ומעביר אותו ל-user input וזה מה שמגיע ל-string compare, זה היוזר אינפוט. אחרי זה יש לנו כאן את הדבר הסודי הזה ואחרי זה את האורך הסטרינג לבדיקה אנחנו רוצים להציץ לארגומנט השני לפרמטר השני של פונקציה כדי לדעת מה קורה הם ממוספרים 012 איך נעשה את זה ככה קודם כל בטלפון

  4. 01:20

    אנחנו נפעיל את הפרידה סרבר כי שימו לב זאת תוכנה מקורית אתם רואים אני עושה אוקיי זה ישר יוצאת אנחנו מפעילים פרידה סרבר ריצ'ק פרידה סטטוס ו-Fore Start Existing Frida Server תכריח להפעיל, תפעיל בכוח, אל תוריד גרסה חדשה, תפעיל את מה שקיים, והוא מפעיל לי את ה-Frida, ואני רואה פה Running.

  5. 01:46

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

  6. 01:57

    אנחנו ב-CMD, קודם כל ככה. קודם כל אנחנו עושים ADB Connect ו-ADB Devices, בודקים שטלפון קיים ומחובר, כותבים פקודת RMS, שזה מפעיל לי את הממשק גרפי, את התוכנה, את אתר אינטרנט בפורט 5000, ואני מתחבר אליו.

  7. 02:17

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

  8. 02:28

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

  9. 02:57

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

  10. 03:24

    הא הא הא אני לא יוצא מכאן בקיצור ככה אנחנו עושים מפעילים לבד את התהליך ועוקפים את האקזיט ברגע שעשינו את זה יש לנו פה root detected אבל אוקיי לא יוצא החוצה מה המטרה שלנו כשאנחנו פה בפנים?

  11. 03:41

    אני מזכיר לכם להציץ פנימה לזיכרון של StringCompare. אז אנחנו הולכים ל-Freada Scripts, שימו לב, לואוד פרידה סקריפטס, ובלואוד פרידה סקריפטס למעלה מחפשים נייטיב.

  12. 03:54

    למה נייטיב? כי כל הספריות העזר הן נייטיב. enum, native, lib. native libraries זה בעצם ה-DLLים של לינוקס.

  13. 04:03

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

  14. 04:22

    כאן, בתוך משתנה native-lib, אני מכניס לאיזה ספרייה אני רוצה לעשות הוק, להיכנס פנימה. בתוך הספרייה יש הרבה פונקציות, אני רוצה את הפונקציה הזאת, StringCompare.

  15. 04:35

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

  16. 04:52

    מה אנחנו רוצים? מה אנחנו רוצים? אנחנו רוצים ככה, להדפיס על המסך ארגיומנט 0 וארגיומנט 1. נכון, להדפיס. אנחנו מגבילים בגודל ל-23, כי אנחנו יודעים שהגודל חייב להיות 23. אתם רואים פה?

  17. 05:09

    יש פה אפילו if. הוא לא ייכנס בכלל ל-StringCompare בלי גודל 23. הגודל המושווה בפונקציה זה 23. יופי. ואני גם מוסיף if.

  18. 05:21

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

  19. 05:35

    הארגומנט השני זה 0,

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

ההרצאה הקודמת: התקנת Ghidra ותוסף JNI

ההרצאה הבאה: עקיפה של זיהוי ROOT ב-UnCrackable3

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

  • בדיקות של GUI
  • מבוא ל-GUI ב-JMeter
  • בדיקות ממשק משתמש - GUI
  • OpenSSL GUI - IIS Windows 10 - חלק 1

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

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