מילון מושגים:
Java - שפת תכנות עילית ומונחית עצמים, הרצה על מכונה וירטואלית (JVM) ומשמשת לפיתוח מגוון יישומים.
שם משתמש - מזהה ייחודי שמשתמש מזין כדי להזדהות במערכת, לרוב יחד עם סיסמה.
קוד מקור - הקוד שמפתחים כותבים בשפת תכנות, לפני הידור, המגדיר את פעולת התוכנה.
GitHub - שירות ענן לאחסון מאגרי קוד מבוססי Git, המאפשר שיתוף פעולה, מעקב גרסאות וניהול פרויקטים.
XML - שפת סימון לייצוג נתונים מובְנים בעזרת תגיות, המשמשת להחלפת מידע בין מערכות ולקובצי הגדרות.
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
חבילה - אוסף ארוז של קוד, ספריות או קבצים המופץ כיחידה אחת ומותקן בעזרת מנהל חבילות.
מעטפת - תוכנה שמפרשת פקודות של המשתמש ומעבירה אותן למערכת ההפעלה, למשל Bash או PowerShell.
הסבר על JADX
בשיעור זה ניכנס לקוד של אפליקציית הבנק הפרוצה בעזרת הכלי JADX, מפענח חינמי בעל ממשק גרפי שהופך קובץ APK של אנדרואיד לקוד Java קריא. נכיר את מבנה ה APK, את קובץ ההצהרות שלו, וננצל פרט חשוב שמתגלה בהצהרות כדי לדלג על מסך ההתחברות של האפליקציה בלי שם משתמש וסיסמה.
נושאי הסיכום המוצגים בשיעור:
1. המטרה והכלי: האפליקציה של הבנק הותקנה, אך אין לנו שם משתמש וסיסמה ואנחנו רוצים לעקוף את מסך ההתחברות. נשתמש ב JADX, מפענח חינמי עם קוד מקור גלוי שנמצא ב GitHub, שמייצר קוד Java מקורי מתוך APK של אנדרואיד.
2. הורדת הכלי: מורידים מהעמוד את הגרסה האחרונה של ה Release, שהיא קובץ ההרצה המוכן ולא את קוד המקור של הכלי עצמו, ומבין קבצי ה Assets בוחרים את הגרסה עם JRE מובנה, Java Runtime Environment, סביבת הרצת Java. ניסיון להפעיל את הגרסה החלקה מציג אזהרה על קובץ מהאינטרנט ומודיע שאין Java מותקן במחשב, ובמקום להוריד אותה מחלצים את הגרסה שכוללת את סביבת ה Java, והיא עובדת מיד.
3. פתיחת ה APK: בעזרת Open File פותחים את קובץ ה APK של האפליקציה, והכלי מציג שני עצים. אחד הוא הקוד עצמו, הפקודות שרצות, והשני הוא המשאבים, Resources, שבהם תמונות, צבעים, תפריטים וקובצי XML של הגדרות, שהם הצהרות ולא פקודות לביצוע.
4. קובץ ההצהרות AndroidManifest: בתוך המשאבים יושב קובץ XML חשוב במיוחד בשם AndroidManifest, שמערכת ההפעלה קוראת אותו כדי לדעת אילו הרשאות לתת לאפליקציה. בקובץ הזה מוצהר למשל על גלישה באינטרנט, כתיבה לכרטיס חיצוני, שליחת הודעות SMS, קריאת אנשי קשר, מצב הטלפון ויומני שיחות, וזהו מקור ההתראות המוכרות של בקשת הרשאות בהתקנה.
5. מבנה ה APK: כל הקבצים האלה ארוזים בתוך ה APK שמתנהג כמו קובץ zip, וכל תוכן האפליקציה, הקוד וההצהרות, יושבים בתוכו.
6. מהי Activity: בעולם האנדרואיד כל חלון שרואים נקרא Activity, וההצהרות מפרטות את כל החלונות שקיימים בתוכנה. על אחד מהם מוצהר מסך פעולה של MAIN LAUNCHER, והוא החלון שעולה כברירת מחדל בהפעלת האפליקציה, כאן מסך ההתחברות, וכך מזהים את חלון הפתיחה.
7. העניין שמתגלה: בהצהרות רואים גם חלונות נוספים, התחברות, העברת כספים, מה שקורה אחרי ההתחברות וצפייה בהעברות כספיות, וחלק מהם מוצהרים כ exported true. ההצהרה הזאת אומרת שמותר להפעיל את החלון הזה מבחוץ, וזו בדיוק נקודת התורפה, סביר להניח שהמתכנת שכח לסגור או עשה זאת בטעות, ואפשר לדלג ישירות אל חלון שאחרי ההתחברות בלי לעבור דרך מסך ההתחברות כלל.
8. רכיבים נוספים בהצהרות: מלבד חלונות מופיעים בהצהרות גם Provider, שהוא רכיב שמפיץ מידע אל אפליקציות אחרות שמבקשות אותו, ו Broadcast Receiver, שהוא המקבל של התראות והודעות המגיעות מבחוץ.
9. קריאת הקוד: הקוד של האפליקציה יושב תחת עץ המקורות, בתוך התיקייה ששמה הוא שם החבילה, Package, שהוא שם התוכנה, ולצידו קוד עזר של גוגל ושל ספריות התמיכה של אנדרואיד. שם נמצאים קבצי הקוד של חלון ההתחברות ושל החלון שאחרי ההתחברות, ואפשר לקרוא ולראות ממש איך האפליקציה עובדת.
10. הניצול בפועל: מעתיקים את שם החלון המוצהר, נכנסים בעזרת adb shell אל תוך המכשיר, ומבקשים ממנהל החלונות של אנדרואיד להפעיל חלון ספציפי, בצורה של שם החבילה, סלאש, שם החלון. בלי הסלאש ההפעלה נכשלת, ועם הסלאש החלון נפתח ישירות על מסך העברות הכספים, תוך דילוג מוחלט על ההתחברות. פתיחה רגילה של האפליקציה, להזכיר, מובילה אל מסך ההתחברות כרגיל.
11. המכשול הבא: עקפנו את ההתחברות, ועתה עולה בעיה אחרת, האפליקציה מזהה שהמכשיר פרוץ שורש ומציג התראה על מכשיר Rooted. בשיעור הבא נבין כיצד היא מזהה זאת וכיצד חוסמים את הזיהוי.
בשיעור זה פתחנו את ה APK בעזרת JADX, הכרנו את ההבחנה בין קוד למשאבים, את קובץ ההצהרות ואת ההרשאות שמוצהרות בו, גילינו חלונות מוצהרים כ exported שאפשר להפעיל מבחוץ, ובעזרת adb shell ומנהל החלונות דילגנו ישירות אל מסך העברות הכספים תוך עקיפת מסך ההתחברות. בשיעור הבא נעסוק בנושא התקנה של Frida.
SR12578HE