שודד דאקס

איתור באגים באפליקציות אנדרואיד של צד שלישי

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

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

  • השתמש ב-Frida hooks כדי להדפיס ארגומנטים של פונקציה
  • תקן את האפליקציה כדי שיהיה ניתן לניפוי באגים
  • תקן את האפליקציה כדי לרשום את המידע הרגיש

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

פתרונות טובים יותר לאיתור באגים באפליקציות אנדרואיד של צד שלישי

אני מעריץ גדול של ה-Android Studio Debugger (JDWP מתחת למכסה המנוע), מכיוון שאתה יכול בקלות להגדיר נקודות עצירה, לשנות את הקוד ואפילו להוסיף לו היגיון, הכל בזמן ריצה, מה-IDE המועדף עליך.
למרבה הצער, על מנת לעשות זאת עליך לבצע קומפילציה מחדש של אפליקציות, ויש לכך סבירות גבוהה לכישלון.
מכיוון שהמכשיר שלי מושרש ומותאם מאוד החלטתי למצוא דרך להפוך את כל האפליקציות לניתנות לניפוי באגים.

מחקר AOSP

על מנת לנפות באגים באפליקציה, אנדרואיד סטודיו מתקשר עם האפליקציה באמצעות JDWP על תקשורת ADB כפי שמראה התרשים ברמה גבוהה מאוד:

AOSP JDWP וכיצד לנפות באגים בתרשים יישומי Android של צד שלישי

אם אתה מעוניין בהסבר מעמיק יותר על היישום, זה יום המזל שלך, כי מסיבה כלשהי, מישהו מהחבר'ה של AOSP כתב הודעה די הגונה בכתובת 

/מערכת/הליבה/ADB/jdwp_service.cpp 

מחקר נוסף של AOSP חשף את

DEBUG_ENABLE_JDWP

שאם מוגדר כדגל עבור zygote בעת אתחול אפליקציה חדשה, יהפוך את האפליקציה לניתנת לניפוי באגים.
יותר מעניינת היא הפונקציה "applicationDebuggerSystemProperty"

מחקר AOSP JDWP וכיצד לנפות באגים באפליקציות אנדרואיד של צד שלישי

כנראה שכבר יש תמיכה לצרכי איתור הבאגים שלי וכל מה שאני צריך לעשות הוא להגדיר את מאפיין המערכת ro.debuggable ל-1.

שינוי תמונת האתחול

ככל הנראה כל מאפייני המערכת של ro.* נמצאים תחת תמונת האתחול של המכשיר ולא ניתן להגדיר אותם באמצעות הפקודה הסטנדרטית "adb shell setprop".
גם remount לבד לא יעשה את העבודה.
ישנן שיטות ספציפיות למכשיר כיצד לבצע הבזק של תמונות אתחול ששונו, אך רובן אינן פשוטות ודורשות כמויות גדולות יחסית של ידע בתהליך האתחול של Android.
החלטתי למצוא גישה קלה יותר ולמזלי מישהו כבר בנה מודול magisk שעושה בדיוק את זה

הגדרות נסתרות

התקן אותו ותוכל לשנות את המאפיין מ-adb shell.

גם מאנדרואיד 10 ומעלה מערכת כשורש מיושם כך שאתה יכול פשוט לשנות למאפייני מערכת ro.* באמצעות mounts 

mount -o rw,remount /
vi /default.prop 
# replace ro.debuggable=0 ל-ro.debuggable=1 ב-/default.prop
אתחול מחדש 

Debugging

הכל ניתן לניפוי באגים עכשיו - פשוט השתמש ב- "attach debugger" (השתמש ב-Java רק אחרת זה נכשל)!

AOSP JDWP וכיצד לנפות באגים באפליקציות אנדרואיד של צד שלישי - איתור באגים

אם אתה רוצה לנפות באגים של smali ולא בקבצי Java - השתמש בתוסף הזה:
https://github.com/JesusFreke/smalidea

עבור לתוכן