PracticU

כתיבת סקריפט Frida עבור InsecureBank

בלי כתוביותעם כתוביות
PracticU › קורס סייבר והאקינג ל-Android - פריצה לטלפונים ואפליקציות אנדרואיד - בודק חוסן - Mobile App Pentesting › כתיבת סקריפט Frida עבור InsecureBank
מילון מושגים:
סקריפט - קובץ המכיל רצף פקודות שמבוצעות על ידי מפרש, לרוב כדי להפוך משימות לאוטומטיות.
root - משתמש העל במערכות Linux, בעל הרשאות מלאות לכל פעולה. גם הרמה העליונה בעץ של תיקיות או נתונים.
תהליך - מופע של תוכנה שרצה בזיכרון, עם הקוד, הנתונים והמשאבים שהוקצו לה על ידי מערכת ההפעלה.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.
לקוח - תוכנה או מחשב שפונים לשרת ומבקשים ממנו שירות או מידע, למשל דפדפן שמבקש דף אינטרנט.
שרת - מחשב או תוכנה שמספקים שירות למחשבים אחרים (לקוחות) ברשת, למשל אחסון קבצים, אתר אינטרנט או מסד נתונים, ומגיבים לבקשות שלהם.

כתיבת סקריפט Frida עבור InsecureBank
הרצאה זו מסבירה, בגובה המושג, מה עומד מאחורי טכניקת עקיפת בדיקת "מכשיר פרוץ" (root detection) באפליקציות אנדרואיד באמצעות הכלי Frida.
מה הרעיון
כלים כמו Jadx מאפשרים לקרוא את קוד המקור המפורק (decompiled) של אפליקציה ולזהות היכן בקוד נבדק אם המכשיר הוא Rooted. לרוב הבדיקה מתבססת על חיפוש קבצים או תהליכים האופייניים למכשיר פרוץ, ומחזירה True או False בהתאם.
מה עושה Frida
Frida מאפשרת להתחבר לאפליקציה בזמן ריצה ולהחליף את ההתנהגות של פונקציה מסוימת בתוך הזיכרון, בלי לשנות את קובץ ה-APK עצמו. כך אפשר לגרום לפונקציית הבדיקה להחזיר תמיד תשובה של "לא פרוץ", מבלי לגעת בקובץ המותקן.
למה זה חשוב
הטכניקה מדגימה חשיבות גדולה בבדיקות אבטחת אפליקציות: בדיקה המבוססת רק על לוגיקה בצד הלקוח (קוד שרץ על המכשיר) ניתנת לעקיפה, כי התוקף שולט על הזיכרון של המכשיר שלו. זה ממחיש למה הגנות אמיתיות צריכות להסתמך גם על בדיקות בצד השרת ולא רק על מה שקורה בטלפון.
שימו לב
הדוגמה מוצגת לצרכי לימוד על אפליקציית תרגול (InsecureBank), ואינה מדריך הפעלה.
השיעור הבא בקורס: התקנת שרת של InsecureBank v2

פרקי ההרצאה: כתיבת סקריפט Frida עבור InsecureBank

  1. 00:00

    חזרה על עקיפת הלוגין

  2. 00:42

    פתיחת ה-APK ב-JADX

  3. 01:41

    מציאת קוד הזיהוי של Root

  4. 02:34

    חיפוש המילים בקוד

  5. 03:29

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

  6. 05:36

    הפונקציות שיש לדרוס

  7. 06:13

    מבנה הסקריפט של Frida

  8. 06:53

    החלפת הפונקציה בזיכרון

תמלול ההרצאה: כתיבת סקריפט Frida עבור InsecureBank

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

  1. 00:02

    שלום לכולם, בהרצאה הזו אנחנו רוצים להתחיל לפרוץ כבר את האפליקציה על ידי פרידה ואני מזכיר לכם מה קרה, יש לנו פה את הטלפון שלנו, בתוך הטלפון שלנו אנחנו נכנסים פנימה וכותבים ADB Shell אנחנו בתוך הטלפון עצמו ואנחנו מריצים את המסך של פוסט לוגין של האפליקציה ועוקפים את הלוגין אבל מגיעים למצב שיש לנו פה Rooted Device אנחנו רוצים למצוא את

  2. 00:30

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

  3. 00:45

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

  4. 01:15

    Jadax גוי, Jadax גוי הזה יפתח לי את הקובץ APK ויראה לי את הקוד מקור שלו, נותן לו את ה-APK מתוך תיקי הדאונלודס, את האפליקציה שלנו, אוקיי, פה בפנים אנחנו נפתח את ה-com, כי אנחנו הולכים לסורס קוד, לקוד מקור, לא לרסורסים.

  5. 01:34

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

  6. 02:00

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

  7. 02:11

    הנה, show root status, יש פה פונקציה שנקראת show root status. אנחנו יכולים לראות פה שהוא מפעיל את הפונקציה show root status, ובדיוק פה כתוב rooted device או device not rooted.

  8. 02:26

    איך אני מזהה את זה? אני מסתכל פה, אתם רואים rooted device? אני מחפש את המילים האלו rooted device יכלתי דרך אגב לעשות search, פשוט לעשות חיפוש ולמצוא את זה קופי, יש פה search, אתם רואים חיפוש ואפשר היה פה בתוך החיפוש הזה אם אני לא מוצא אותו ככה בצורה פשוטה הנה הוא עושה לו decompiling כדי שיוכל לחפש

  9. 02:48

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

  10. 03:07

    אז יש פה זכוכית מגדלת ומחפשים את המידע שרוצים. שמים V לחפש בתוך קוד, הנה הוא מצא לי בתוך קוד, אני עושה דאבל קליק ומגיע לפה, הנה יש פה Rooted Devices.

  11. 03:19

    בקיצור, איך הוא מזהה שזה Rooted? הוא עושה אם הפונקציה הזאת שנקראת Do Super User App Exist, פונקציה שהוא מפעיל אותה ומעביר לה את זה כפרמטר אנחנו יכולים לעשות פה דאבל קליק ולהיכנס לתוך הפונקציה הזאת גם כן אתם רואים אני עושה קונטרול קונטרול קליק הנה זאת הפונקציה הפונקציה

  12. 03:44

    הזאת מחזירה בוליאן true או false זה השם שלה היא מקבלת איזשהו סטרינג ובודקת האם הקובץ הזה נמצא בארדיסק ומחזירה true או false ככה הם מסרו אותה דרך אגב אני רואה פה קצת צמצום הם מקבלים s אבל אבל אני לא רואה שהם משתמשים ב-S הזה.

  13. 04:02

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

  14. 04:15

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

  15. 04:25

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

  16. 04:46

    הגרשיים עובר אליה כפרמטר, זה מגיע אליה כפרמטר S ולא עושים בו שימוש והוא בודק האם קובץ כזה וכזה קיים בארדיסק, מחזיר true אם קיים וfalse אם זה לא קיים. יפה.

  17. 05:00

    או האיף הזה מתקיים כשאו הקובץ הזה קיים בארדיסק או הפונקציה הזאת מחזירה true אם חלק הזה או חלק הזה מחזיר אמת אז הוא נכנס לתנאי ומדפיס rooted device נעשה control click ונראה מה זה הפונקציה הזאת הפונקציה הזאת באה לבדוק האם קיים פה אתם רואים su או which האם קיימות כל מיני אפליקציות בארדיסק שהן רצות שמאפשרות לי להחליף

  18. 05:28

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

  19. 05:42

    בואו נראה מה אנחנו נעשה. אנחנו צריכים גם את זה להחליף וגם את זה להחליף. את שתי הפונקציות האלו להחליף אותם כדי שיחזירו תמיד false, ואם הם יחזירו תמיד false הוא ייכנס ויכתוב לי device not rooted.

  20. 05:55

    כמובן שהייתי יכול להחליף מה שאני רוצה איך שאני רוצה. בואו נראה מה עשיתי פה. עשיתי פה סקריפט שנקרא Injection Script, שמה הוא עושה?

  21. 06:04

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

  22. 06:20

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

  23. 06:31

    היא קודם כל לוקחת Java use ומזהה את הקלאס שלי מזהה את המסך הזה זה הקלאס פוסט לוגין אתם רואים הקלאס פוסט לוגין נמצא פה בפנים בתוך הפקאג' הזה אז קודם כל אני אומר לו תקשיב תזהה את הקלאס ותמצא אותו Java use מוצא אותו ותשים אותו בתוך משתנה שנקרא מיי קלאס הוא לוקח את המיי קלאס הזה בזיכרון הוא זיהה אותו ומחליף בפנים את הפונקציה אתם רואים את הפונקציה הזאת does

  24. 07:01

    אז s u exist עושה ל implementation ומגדיר אותה מחדש איך הוא מגדיר את הפונקציה הזאת כפונקציה שמקבלת פה משהו בסוגריים וכל מה שהיא עושה במסך היא פולטת במסך מילה bypass s u root check ומחזירה false זה הקוד החדש שיהיה במקום הקוד המקורי אותו דבר כאן לוקחים את המייקלאס בתוך הקלאס המקורי לוקחים את הפונקציה שרוצים להחליף זאת הפונקציה הזאת שרוצים להחליף אותה עושים לה אימפלימנטציה

  25. 07:31

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

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

ההרצאה הקודמת: כתיבת סקריפט Frida עבור UnCrackable

ההרצאה הבאה: התקנת שרת של InsecureBank v2

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

  • כתיבת סקריפט PowerShell - חלק 1
  • סקריפט עם לולאת for
  • הדגמה של סקריפט אמיתי
  • סקריפט פייתון ל-NETCONF

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

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