
הטקסט המלא של הדקות הראשונות בהרצאה «עקיפה של זיהוי ROOT בקבצי smali» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם בהרצאות הקרובות אנחנו נלמד איך לדבק איך להסתכל בתוך הזיכרון של קבצי dll של לינוקס של ספריות העזר לתוכנה הראשית בלינוקס הdll נקרא so קבצים עם סיומת so וזה למעשה libraries ספריות עזר לתוכנה הראשית ששם יש כל מיני פונקציות קוד והתוכנה הראשית משתמשת בספריות האלו לרוב משתמשים בזה כדי לא לרשום קוד פעמיים או שלוש או ארבע אותו
קוד שהיה כבר כתוב להשתמש בו שוב אז לוקחים קוד שרוצים למחזר אותו שמים אותו ב-DLL בליבררי בספריית עזר וכמה תוכנות יכולות להתחבר לאותה ספרייה וספריות העזר האלו אמרנו בווינדוס נקראות DLL בלינוקס ואנדרואיד הן נקראות SO והן נייטיב למה הן נייטיב כי הן לא כתובות בג'אווה הן כתובות בשפת C או C++ אבל לא ג'אווה למעשה הם בשפת מכונה כמו קובץ אגזה מקורי,
זאת אומרת שהוא מקומפל לשפת מכונה ולא לקוד אוניברסלי של Java, כי קוד של Java אפשר להריץ על כל סוגי המכונות, כי זה לא באמת שפת מכונה, כי יש JVM שמתרגם את השפה של Java למכונה ספציפית.
Native Libraries כבר כתובים בשפת המכונה הסופית, ולכן הם נקראים Native כי הם מותאמים למכונה ספציפית. בקיצור זה קבצים שהם כמו קבצי אקזה, כמו אסמבלר רגיל.
זה הקטע שלהם ואנחנו צריכים למצוא שם את הסוד שהרביעו לאתגר שלנו, תכף נגיע לזה. איך Java מתחברת לקבצים האלו ומשתמשת בפונקציות?
דרך Java Native Interface, GNI. Java Native Interface זה למעשה השיטה שבה Java תתחבר לקובץ בשפת מכונה ותדבר איתו. זה אינטרפייס, זה ממשק התחברות ביניהם ואנחנו נראה איך הוא עובד ונלמד לדבק ולקשר ולהיכנס לקרביים שלו.
למה זה חשוב? כי למדנו עד עכשיו איך להבין, לפתוח, לשנות את הקוד של Java, אבל לפעמים מה שאנחנו צריכים לא נמצא ב-Java אלא מוחבא בתוך ספריית עזר, ב-DLL, ב-Native Library.
אנחנו צריכים גם לדעת להיכנס לשם ולהוציא משם המידע. איך אנחנו נעשה את זה? אנחנו נעשה את זה דרך אתגר שנקרא Uncrackable Level 2. ב-Uncrackable Level 2 הם הרביעו את הסוד בתוך קובץ SO, בתוך ה-DLL, בתוך הליבררי, ואנחנו צריכים להוציא את זה משם.
איך מתחילים? מתחילים מזה שלוקחים ג'יני מושן, שזה סימולטור של טלפון במחשב הפיזי שלי, עשיתי לו איפוס, עשיתי פה, לקחתי ג'יני מושן במחשב הפיזי שלי, עשיתי עליו right click ולמטה פקטורי reset אולי תראו את זה אתם רואים פה עשיתי פקטורי reset עשיתי לו איפוס ועכשיו יש לנו טלפון נקי יפה מאוד דבר אחד מאוד מאוד חשוב שאני
אגיד לכם תיקחו טלפון או גרסה 87 או 11 12 אבל לא 9 ו-10 אסור שיהיה כתוב פה 9 ו-10 כי יש שם באגים ואני לא רוצה להיכנס יש בעיה עם שמאלי אם להציג את הערך של רג'יסטרי דרך דבאגר ואנחנו רוצים להשתמש בדבאגר בסמאלי ולכן עדיף לא לקחת גרסה 9 ו-10 הבעיה היא כשאנחנו עושים דיבאג לתוכנה לראות את הערכים של רגיסטרים של הזיכרון שלו
טוב אז איך אנחנו מתחילים אנחנו רוצים לפתור את האתגר הזה אנחנו כאילו לא יודעים כלום ואנחנו קודם כל נוריד אותו למכונה שלנו לוקחים הולכים לגוגל אתם יכולים לכתוב פשוט בגוגל Uncrackable Level 2 ולהיכנס ל-Gitab לקישור הראשון.
הנה יש לנו OWASP שזה הארגון העולמי של אבטחת מידע וכל מה שקשור לחורי אבטחה. קראגס מאתגרים שהם עשו. אנדרואיד Level 2, Uncrackable Level 2 ו-Download.
יש לכם פה גם קישור למי שנתקשה למצוא. שואו אינפולדר, אנחנו רואים פה שהוא ירד לי ואני עושה כאן CMD וכותב ADB Install ל-Uncrackable Level 2, הפעם אנחנו רוצים Level 2 רגע, רגע, רגע, הוא לא יתקין כי הוא לא יודע איפה הטלפון שלי שכחתי לחבר את הטלפון, בואו נבדוק מה ה-IP של הטלפון שלי אני מוריד את זה למטה, לוחץ לחיצה ארוכה כאן
לוחץ על הרשת ה-Wi-Fi שלי ורואה שהכתובת 174 נהדר, מתחבר לטלפון, ב-ADB Devices בודק שהטלפון עובד ועושה ADB Install דרך אגב, אין בעיה שיהיה בו זמנית מותקן גם גרסה הראשונה וגם הגרסה השנייה.
הנה, התקנו את האפליקציה, נהדר, ובואו נפעיל אותה. Root Detected, הוא מזהה שזה Root, ו-This is unacceptable, the app is now going to exit.
זה לא מקובל והאפליקציה תצא עכשיו, כי הוא זיהה שזה Root, היה לנו את זה גם בגרסה הקודמת, באתגר הראשון, נעשה אוקיי, והתוכנה יוצאת. זאת אומרת, כל פעם שמפעילים אותה, היא מזהה שיש Root ויוצאת.
מה אנחנו יכולים לעשות עם הדבר הזה? טוב, אז בואו נתחיל מזה שנזהה באיזה פונקציה נמצא ה-Root שלנו, איפה הדבר הזה נמצא. אז אנחנו ניקח את הקובץ שלנו, את ה-APK, ונזרוק אותו, נפתח אותו באמצעות ג'אדקס.
אפשר היה לפתוח סתם ג'אדקס ולהגיד לו File Open ל-APK או לזרוק את ה-APK על ג'אדקס, לא משנה. אנחנו מחפשים את ה-Root Detected סימן קריאה.
אני כותב כאן לחפש רות דטקטד סימן קריאה בדיוק ככה בתוך הקוד הנה הוא מצא לי ועשינו את זה בפעם שעברה מה שעשינו מצאנו שרות דטקטד אחרי האיף הזה נכנסנו לכל אחד מהפונקציות ושינינו בתוך הפונקציה הזאת שהם יחזירו פולס שלוש פונקציות אני רואה פה שאחרי שהוא מזהה את זה הוא שולח לפונקציית
a את המילה רות דטקטד ופונקציית a כנראה היא זאת שיוצאת החוצה בלחיצת אוקיי שימו לב מה קורה פה פה יש אותו מקרה של if משהו גם a up is debugable גם a זאת אומרת שיש לי כמה פעמים שקורה מצב שפונקציית a נקראת ויוצאת החוצה עכשיו פונקציית a היא כתובה בלי קלאס למה לפני השם אין קלאס כי זה בתוך אותו קלאס שלי זה נמצא איפשהו מעליי פה למעלה ואני רואה
פה מעליי גם פונקציית a אז פונקציית הa הזאת מקבלת איזשהו סטרינג עושה פה כל מיני דברים ובסוף יוצאת החוצה אנחנו יכולים לעשות קונטרול קליק וקופצים לזה.
אתם רואים בגלל שלא היה קלאס, כנראה שזה באותו קלאס. אז הפונקציית A הזאת מקבלת איזשהו סטרינג, איזשהו טקסט.
היא יוצרת חלון קופץ כזה שנקרא דיילוג בתוך משתנה קריאייט, זה החלון הזה. למעשה משתנה קריאייט עם החלון מקבל טייטל עם הכותרת שהגיעה, רוט דטקטד או דבאגר דטקטד.
יש פה איזשהו מסג' שמצטרף, יש פה בטאנס, כפתורים, וכשלוחצים על כפתורים תסתכלו הוא מייצר כפתור רק עם מילת אוקיי ויש פה ניו מה זה הניו הזה ניו זה קלאס חדש עקרונית שתדעו ניו זה קלאס מייצרים מופע חדש