
הטקסט המלא של הדקות הראשונות בהרצאה «עקיפה של הגנת Anti-Debugging עם IDA» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בהרצאה הקודמת פתחנו בעיידה את הקובץ libfoo.so את הספרייה החיצונית ל-APK שלנו, פתחנו ואנחנו רוצים לתפוס אותו בזמן עבודה, אנחנו רוצים לדבג אותה כדי להציץ פנימה בזיכרון ולראות מה הסוד שלה, איפה מוחבאת הסיסמה.
שמנו פה breakpoint, דרך אגב איך ידעתי להגיע לכתובת F60? באתי ל-views, open sub views ויש פה exports, מייצאת הספרייה הזאת האקספורטס הזה כתב לי שיש פה שתי פונקציות שמייצאים ואני מעוניין בפונקציית בר בכתובת f60 אני עושה דאבל קליק מגיע לכאן ושמתי פה ברקפוינט עברנו זריז על כל מיני פקודות וראינו פה קול לסטרינג קומפר שזה הכי מעניין אותנו להשוות שני סטרינגים
אוקיי אז איך אנחנו מחברים את העאידה לטלפון הטלפון שלנו הוא חיצוני יש לנו פה דבאגר סלאק דבאגר בואו נבחר לדוגמה, יש לנו gdb דבאגר, לינוקס דבאגר, רימוט לינוקס דבאגר נעשה.
אוקיי, נעשה אוקיי. עכשיו, אחרי שבחרנו דבאגר, כל התפריט נפתח לנו, ובתפריט הזה יש לנו פה process options, אפשרויות, ובאפשרויות אנחנו צריכים להגיד לו לאיזה IP להתחבר, מה ה-IP של הטלפון הזה.
בואו נראה מה ה-IP של הטלפון הזה, אני עושה לחיצה ארוכה על Wi-Fi ומחפש את ה-IP שלו. 10.10.102.174, הוא מתחבר ל-IP הזה בפורט 2.3.9.4.6, אני שומר את זה as default, יופי, ועכשיו אני רוצה להגיד לו, תקשיב, אתה תתחבר לי לאפליקציה הזאת שעובדת, אני רוצה לחבר אותך ולחקור את האפליקציה.
אז אני עושה דבאגר, attach to process, תתחבר ל-process, עובד, ב-IP ההוא שציינתי לך, אני עושה לו את touch process והוא לא מצליח להתחבר, למה הוא לא מצליח להתחבר?
כי אין לו שם בפנים את הסוכן, אתם רואים הוא כותב לי פה 10, 100, 102, 174, בפורט 2394 לא יכול להתחבר, no connection, למה? כי אין לי את הסוכן ההוא, אני צריך שם איזשהו סוכן סודי שיעזור לי, אז זה נקרא Android Debugger Server, שרת שיעבוד בתוך הטלפון הזה, אוקיי, או בלינוקס המרוחק, שיהיה לי שם סוכן משלי.
אז אני הולך לתיקיית עאידה פרו, מחפש דבאג SRV, דבאג סרבר. יש פה כל מיני סרברים ל-Mac, ל-Windows, Windows Remote, ואני צריך פה אנדרואיד x86.
אנדרואיד x86 זה בדיוק מה שאני צריך, יש גם אנדרואיד רגיל, אבל אני צריך אנדרואיד למעבד x86. נהדר, זה יהיה הסוכן שלי בפנים. בואו נזרוק אותו פנימה, נעשה פה cnd ונעשה דבר כזה ניקח את השם של הקובץ שלנו ונעשה כזה דבר adb-connect קודם כל נתחבר אליו התחברנו נבדוק שאנחנו אכן מחוברים אכן מחוברים
נעשה פוש לקובץ הזה העתקנו אותו לתיקיית temp שם בפנים וניכנס לתיקיית temp הזאת adb-shell אני בתוך הטלפון עכשיו cd-tmp אני נכנס פנימה אני בתוך הטלפון נושא ls-l אני רואה את הקובץ שלי זה הקובץ שזרקתי פנימה אבל יש לו רק הרשאות read אתם רואים רק read יש לו אני צריך פה execute שנוכל להריץ אותם אז אני עושה פקודת change mode פלוס x מוסיף x לקובץ android x68 נעשה עוד פעם ls-l ורואים שלקובץ שלי הופיע הx
פה אתם רואים זה הרשאות של root של היוזר הזה זה הרשאות של הקבוצה גם היא נקראת רוט וזה הרשאות של כל מי שלא יוזר ולא קבוצה הזאת. אוקיי, בקיצור יש לכולם הרשאות אקזיקיוט ועכשיו נשאר לנו רק להריץ אותו.
אנחנו עושים פה אנדרואיד x86 והנה הוא מתחיל להאזין בפורט שלנו listening on, הוא מאזין בכל כתובות הIP שיש בטלפון הזה על פורט 23946. יופי.
מה עוד יכולנו לעשות? יכולנו לצאת מהטלפון לחלוטין לחצי ctrl+c, יצאתי חזרה לווינדוס שלי ואני יכול להריץ פקודת ADB Shell וישר להגיד לו מה להפעיל ADB Shell וישר תפעיל את הקובץ כאילו אני לא חייב לעשות Shell ידנית ושם בפנים לעשות אלא ישר תפתח CMD בתוך הטלפון ותריץ שם את הפקודה הזאת והזאת זאת גם אפשרות אותו דבר הנה הוא
בתוך הטלפון מאזין אחרי שיש לנו בתוך הטלפון את הסוכן שלנו אנחנו יכולים לחזור ולעשות את touch to process עכשיו הוא מראה לי את כל מה שקיים בתוך הטלפון אתם רואים את כל הפרוצסים שקיימים בטלפון אני עושה search ומחפש Uncrackable ואני רואה פה שניים זה מעניין למה יש שניים למרות שהפעלתי אחד כשאני רואה שמשהו מופעל פעמיים כנראה שזה טריק שמונע
מהדיבאגר להתחבר הוא מייצר את עצמו עוד פעם והשני מתחבר לראשון חזרה והמטרה שאני לא יוכל להתחבר לראשון שתבינו מה שקרה פה זה טריק ידוע תכף אני אראה לכם זה נקרא אנטי דיבאגר טריק מה הטריק האפליקציה מייצרת לעצמה קופי והקופי הזה מתחבר חזרה כאילו זה דבאגר לאפליקציה הראשונה ואז אף אחד אחר
לא יכול להתחבר כי רק דבאגר אחד יכול להיות מחובר לאפליקציה אז אם אני עכשיו אנסה להתחבר כנראה לכאן אני אקבל סירוב אני עושה הנה the debugger cannot attach to the selected process הוא לא יכול להתחבר למה כי שמה כבר תפוס בטח אבל אם אני אתחבר לשני זה לא יעזור לי touch to process אם אני אתחבר לשני השני דווקא
לשני לדעתי אני אוכל להתחבר אני עושה אוקיי הנה הוא מתחבר הוא שואל אותי תגיד לי הליפפו שרץ שמה זה אותו ליפפו שרץ אצלך אני עושה לו כן זה אותו אחד זה אותו ליפפו למרות ששמה ופה פה אצלי במסך ומה ששם זה אותו דבר ואל תשאל אותי יותר תעשה תמיד שזה אותו דבר והוא מסנכרן אותי לשמה הנה הוא עובד אני יכול לעשות פה play והקוד רץ כי איכשהו מחבר את
הדבאגר, הוא עושה לו סטופ, הקוד רץ, אני יכול לעשות וריפאי, הכל עובד, רק מה, הוא לא עוצר לי בנקודת העצירה, בברקפוינט הוא לא עוצר לי.
למה הוא לא עוצר לי בברקפוינט שלי? כי אני מחובר לתהליך השני והקוד רץ בתהליך הראשון, הוא למעשה מונע ממני. אוקיי, אז מה אפשר לעשות?
אז אם אנחנו מפעילים את זה, אנחנו צריכים עכשיו להתגבר על הבעיה הזאת שזה אנטי דיבאגינג, אנחנו לא מצליחים להתחבר עם הדבאגר, בואו נראה שזה באמת ככה, בואו נאשר את התיאוריה שלי שזה באמת, זאת הסיבה האמיתית ולא משהו אחר.
הדבאגר פה כבר לא מעניין אותי כרגע, אני עוצר אותו. למה הוא לא מעניין אותי? כי כרגע יש לי בעיות אחרות.
מה אני רוצה? אני רוצה ADB של להיכנס לתוך הטלפון. הנה אני בתוך הטלפון. עכשיו בתוך הטלפון אני מריץ פקודות PS מינוס A. תראה לי את כל הפרוצסים בזיכרון.
הנה הוא מראה לי את כל התוכנות שרצות בזיכרון, זה כמו Task Manager בווינדוס ואני עושה לו Grap Uncrackable 2. טוב, בואו נעתיק את זה מכאן כי אין לי כוח לכתוב.
Grap Uncrackable 2 ואני רואה שבאמת יש לי פרוצס 3097 Uncrackable 2 ו-3113. אני חושד שפה חסומה האופציה של דיבאג. בואו נראה. תזכרו שאחד 3097 והשני 3113. אוקיי, אז אנחנו ניכנס פנימה לתוך התיקייה שנקראת PROC 3097. מה זה התיקייה הזאת?
זה למעשה כמו Task Manager שמוצג בצורת קבצים. כשאומרים בלינוקס הכל קבצים, מתכוונים שאפילו Task Manager, כל הפרוצסים הם כמו קבצים.
אז יש לנו פה תיקייה לתהליך 3097, שזה זה. ושימו לב, דרך אגב, התהליך 3113, מי האבא שלו? האבא שלו זה 3097. זאת אומרת, ה-3097 הזה יצר את זה.
אוקיי, אז אנחנו בראשון. מה אנחנו יכולים לראות פה בתוך ה-Task Manager הזה, בתוך ה-Process הזה? תיקיית פרוקס, זו תיקייה דינמית כאילו.
קבצים, אנחנו רואים פה הרבה הרבה קבצים, שמייצגים כל מיני מידע על התהליך הזה. לדוגמה, מה יש לנו בתוך Maps? סתם דוגמה, בואו נעשה פה cut Maps. אנחנו רואים את כל מיפויי בזיכרון של כל מה שקורה לו בזיכרון של התהליך הזה.
מה שמעניין אותי יותר זה ספריית פו ואני אומר לו תראה לי את כל המיפויים רק את המילת פו ואנחנו רואים פה שיש לנו ממופה לזיכרון של התהליך הזה פו x86 ככה אני יודע שזה מה שהתהליך הזה משתמש בו בפו x86 ולא באיזושהי גרסה אחרת ככה ידעתי על מה להסתכל איפה לשנות
אז יכלתי לעשות את זה בהתחלה להריץ את זה ולחקור את התהליך סתם אני חוקר תהליך אז אמרנו ps גיליתי את המספר שלו עשיתי cut לקובץ Maps, מצאתי שזה x86.
עכשיו יש גם עוד קובץ שנקרא סטטוס. תסתכלו, יש פה כל מיני קבצים, אז יש פה קובץ שנקרא סטטוס. בואו נעשה cut לסטטוס הזה, ואנחנו רואים פה הרבה מידע על התהליך הזה, ומה שמעניין אותי זה נקרא, לדוגמה, threads, כמה תהליכונים רצים במקביל בתוך הזיכרון, בתהליך הראשי הזה, בתוכנה הראשית הזאתי.
זה מה שעניין אותי. טרייס ספיד, טרייס ספיד זה מהדבאגר. הדבאגר זה 3113. אז עוד פעם, הבנתם שלתהליך הזה מחובר הדבאגר. אז אני מזכיר לכם מי זה 3113 הזה.
PS-A Grap Uncrackable 2. ואנחנו רואים ש-3113 מחובר כדבאגר ל-30.97. איך אני יודע? כי בתיקיית 30.97 אני עושה cut לסטטוס ומגלה שטרייס ספיד 3113.
זה תהליך שלושים תשעים ושבע יצר לעצמו בין שלוש אחד אחד שלוש וזה האבא שלו ושלוש אחד אחד שלוש אז זה יתחבר חזרה לאבא ונהיה דבאגר ואז אני לא יכול להתחבר. מה אנחנו עושים?
אנחנו צריכים להוציא את הפקודה שמחברת אותו כדבאגר להוציא את הפקודה הזאת. שימו לב הכל קורה כבר לא בג'אווה הכל קורה בתוך קובץ SO הזה כן? בתוך הרמה של ה-Native Library, בתוך ה-DLL.
אוקיי, אז אנחנו צריכים לחפש, לא ב-Jadex, אלא כבר כאן, Jadex כבר לא מעניין אותנו יותר, לחפש כאן איפה הסיפור הזה קורה.