PracticU

איך לפרוץ ולשנות קובץ APK עם apktool

בלי כתוביותעם כתוביות
PracticU › קורס סייבר והאקינג ל-Android - פריצה לטלפונים ואפליקציות אנדרואיד - בודק חוסן - Mobile App Pentesting › איך לפרוץ ולשנות קובץ APK עם apktool
מילון מושגים:
קוד פתוח - תוכנה שקוד המקור שלה זמין לציבור לצפייה, לשימוש ולשינוי, לרוב לפי רישיון מתאים.
Java - שפת תכנות עילית ומונחית עצמים, הרצה על מכונה וירטואלית (JVM) ומשמשת לפיתוח מגוון יישומים.
רישיון - ההיתר החוקי להשתמש בתוכנה, הקובע את תנאי השימוש, מספר ההתקנות וזמן התוקף.
GitHub - שירות ענן לאחסון מאגרי קוד מבוססי Git, המאפשר שיתוף פעולה, מעקב גרסאות וניהול פרויקטים.
XML - שפת סימון לייצוג נתונים מובְנים בעזרת תגיות, המשמשת להחלפת מידע בין מערכות ולקובצי הגדרות.
תחביר - אוסף הכללים של שפת תכנות הקובעים כיצד לכתוב קוד תקין. הפרתם גורמת לשגיאת תחביר.
תעודה דיגיטלית - מסמך מוצפן שמאשר את זהותו של אתר או שרת וקושר אותו למפתח ציבורי, ומונפק על ידי רשות אישורים.
חתימה דיגיטלית - מנגנון מבוסס הצפנה שמוכיח את מקור המידע ושלא שונה בדרך, בעזרת המפתח הפרטי של החותם.

איך לפרוץ ולשנות קובץ APK עם apktool
בשיעור זה נעבור משינוי בזיכרון בעזרת Frida אל שינוי קבוע של הקוד עצמו. נשתמש בכלי apktool כדי לפרק את קובץ ה APK, לערוך את הקוד שלו בשפת smali כך שזיהוי המכשיר הפרוץ תמיד יחזיר שקר, ולבנות ממנו קובץ APK חדש לגמרי שמכיל את כל השינויים, בלי צורך להריץ פרידה בכל פעם.
נושאי הסיכום המוצגים בשיעור:
1. המטרה: עד כה שינינו את התנהגות האפליקציה בזיכרון בעזרת פרידה, ובכל הפעלה מחדש היה צורך להזריק שוב את הסקריפף. כעת רוצים קובץ APK פיזי חדש שמכיל את השינויים לצמיתות, אותו אפשר גם לחלק לאחרים.
2. הכנת הסביבה: מתחברים אל הטלפון, שנמצא במצב גשר ולכן נגיש מתוך המכונה הווירטואלית, בודקים בעזרת adb devices שהחיבור תקין, ומתקינים את קובץ ה APK המקורי, שמיד מציג את הודעת זיהוי השורש ומסרב לעבוד על טלפון פרוץ.
3. הכלי apktool: לשינוי קובץ APK משתמשים ב apktool, כלי ותיק, חינמי וקוד פתוח. הוא דורש Java, ובדיקת הגרסה מראה שאין Java במחשב, ולכן מורידים ומתקינים אותה מהאתר הרשמי, מאשרים את הרישיון ומסיימים את ההתקנה בלי הגדרות נוספות. חשוב לפתוח שורת פקודה חדשה אחרי ההתקנה, ואז פקודת הגרסה של Java עובדת.
4. התקנת apktool: מורידים מאתר הכלי את סקריפפ העטיפה ל Windows ושומרים אותו בשם apktool.bat, בתוך גרשיים כדי שהמערכת לא תוסיף לו סיומת טקסט, ומורידים מה GitHub את הגרסה האחרונה של קובץ ה jar ומחליפים את שמו ל apktool.jar. את שני הקבצים מציבים בתיקיית Windows או בכל מקום שנמצא ב PATH, כדי שהפקודה תהיה זמינה משורת הפקודה, והרצה מאשרת שהכלי עובד.
5. מהו smali: הכלי מבצע הנדסה לאחור לקובץ APK של אנדרואיד אל שפת smali, שהיא בעצם שפת האסמבלר של אנדרואיד, שפת המכונה שלו.
6. פעולת הפענוח: בתיקיית עבודה חדשה מריצים את apktool עם הפקודה של פענוח ואת שם קובץ ה APK. נוצרת תיקייה שמכילה את קובץ המניפסט, את תיקיית ה smali ואת המשאבים, קובצי ה XML של המחרוזות והגרפיקה וההגדרות של מה שמוצג על המסך.
7. מהו ה smali בדיוק: זה הקוד אחרי הנדסה לאחור. הכלי JADX שהכרנו מציג את הקוד ב Java, אך לא תמיד הוא מצליח להפוך את שפת המכונה חזרה לשפה עילית, במיוחד כשהוטמעו בו הגנות, ולכן הוא ממיר קודם כול אל smali ורק אז, כשהדבר אפשרי, אל Java.
8. ניווט אל הקוד: תיקיות ה smali משקפות את שם החבילה, מפלח אחר מפלח, ובתוכן נמצא קובץ ה smali של המחלקה C שעסקנו בה. אפשר להשוות אותו מול אותו קובץ כפי שמוצג ב JADX, שהרי זה בדיוק אותו קובץ ואותו תחביר, כולל המשתנים המקומיים שלו.
9. עריכת פונקציית A: בתוך הקובץ מחפשים את פקודות ההחזרה. ב smali, שקר הוא הערך אפס, ולכן לפני כל פקודת החזרה של משתנה מקומי מכניסים פקודת השמה שמכניסה אפס לתוכו, כך שבכל נתיב בקוד הערך שיוחזר יהיה אפס, כלומר שקר, במקום הערך שהיה שם קודם.
10. עריכת שאר הפונקציות: בפונקציית B מבצעים אותו דבר, ובפונקציית C גם כן, בכל נקודת החזרה מוסיפים השמה של אפס למשתנה שיוחזר. משנים רק את מה שצריך, ואפשר כמובן להוסיף שם פקודות נוספות לפי הצורך. אחר כך פותחים את הקובץ בעורך טקסט ומאמתים שכל נקודות ההחזרה מכילות אפסים.
11. בנייה מחדש: את קובץ ה APK המקורי כבר אין צורך לשמור והוא נמחק. מריצים את apktool עם פקודת הבנייה על תיקיית העבודה, ונוצרת בתוכה תיקיית הפצה שבה יושב קובץ ה APK החדש שנבנה מהקוד הערוך.
12. אימות התוצאה: משליכים את ה APK החדש אל JADX ופותחים אותו, ומתברר שבכל נקודות ההחזרה של המחלקה מוחזר שקר, בין אם ישירות ובין אם דרך תנאי ששני צידיו מחזירים שקר, ואין בקוד ולו אחת החזרה של אמת. בדיוק מה שרצינו.
13. המכשול בהתקנה: מנסים להתקין את הקובץ החדש בעזרת adb install ומתקבלת הודעת כישלון, כי לקובץ אין תעודה דיגיטלית, הוא אינו חתום, והמערכת מסרבת להתקין קובץ לא חתום. את החתימה על ה APK נעשה בשיעור הבא, ואז נתקין אותו ונראה את האפליקציה המתוקנת פועלת.
בשיעור זה הותקנו Java ו apktool, ה APK פורק לתיקיית עבודה עם מניפסט, smali ומשאבים, ערכנו את שלוש פונקציות בדיקת השורש בשפת ה smali כך שכל נתיבי ההחזרה שלהן מחזירים אפס, בנינו מהן קובץ APK חדש בתיקיית ההפצה, אימתנו ב JADX שאין בו החזרות של אמת, ונתקלנו בהתקנה שנכשלת מפני שהקובץ אינו חתום דיגיטלית. בשיעור הבא נעסוק בנושא חתימה דיגיטלית על קובץ APK עם jarSigner.
SR12592HE

פרקי ההרצאה: איך לפרוץ ולשנות קובץ APK עם apktool

  1. 00:00

    יצירת APK חדש קבוע

  2. 00:39

    בדיקת האפליקציה המקורית

  3. 01:34

    הכרת הכלי Apktool

  4. 02:13

    התקנת Java למכונה

  5. 03:30

    הכנת הכלי בתיקיית Windows

  6. 04:31

    פענוח ה-APK עם Decode

  7. 05:39

    סקירת תיקיות ה-APK

  8. 06:49

    חזרה על הפאץ' ב-Frida

תמלול ההרצאה: איך לפרוץ ולשנות קובץ APK עם apktool

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

  1. 00:02

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

  2. 00:16

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

  3. 00:29

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

  4. 00:41

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

  5. 01:00

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

  6. 01:18

    בשביל לשנות קובץ APK אנחנו נשתמש ב-APK-Tool שזה כלי ותיק שיודע לעשות את זה, זה חינמי, קוד פתוח, תכתבו בגוגל APK-Tool, יש מלא מקומות להוריד את זה, בואו נקרא איך משתמשים ב-APK-Tool.

  7. 01:34

    ומה הוא יודע לעשות אז קודם כל הוא דורש Java בוא נראה אם יש לנו פה Java נעשה Java מינוס ורז'ן נראה אם יש לנו כאן Java הנה אין לנו Java אוקיי אז אין לנו Java בוא נתקין Java בוא נתקין Java נעשה Java Download for Windows Java Download for Windows ונסכים לרישיון הנה יש לנו כובד Setup נעשה נקסט נקסט נקסט נתקין את Java אנחנו לא הולכים

  8. 02:05

    להגדיר שום דבר סיימנו עכשיו צריך לסגור את זה ולפתוח מחדש את ה-CMD זה מאוד מאוד חשוב לפתוח את ה-CMD מחדש אחרי ההתקנה בינתיים עד שאני מתקין אני אכתוב פה install Java אוקיי אנחנו מתקינים Java התקנו Java בואו נבדוק שזה עובד אני שם לכם את כל הפקודות שאני עושה שלא תהיו לחוצים להעתיק הנה אנחנו רואים Java version שימו לב פתחתי אותו מחדש יש לי Java מותקנת שזה נהדר עכשיו מה אנחנו

  9. 02:37

    צריכים לעשות אנחנו רוצים להתקין את ה-apk-tool בדקנו שיש לנו Java בוא נראה מה כתוב פה download windows wrapper script save as apk-tool.bat הוא רוצה שנשמור את הסקריפט הזה כ-apk-tool.bat עושים save as בתוך ה-download נעשה תיקייה חדשה אני אקרא לה apk-tool אוקיי והדבר היחיד שאני רוצה זה לשים ככה גרשיים

  10. 03:06

    כדי שהוא לא ישים נקודת טקסט מסביב. אז שמרנו את זה כ-apk-tool.bat. יפה מאוד. מה הלאה הוא רוצה? הוא רוצה שנוריד עכשיו את הגרסה האחרונה של apk-tool ונחליף לשם ל-apk-tool.jar.

  11. 03:23

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

  12. 03:37

    אוקיי, מה קורה כאן? מה הלאה? אחרי שמורידים צריך להחליף לזה שם. נעשה לו Keep שזה לא מסוכן, להחליף לזה שם. הוא רוצה שנוריד את הגרסה.

  13. 03:49

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

  14. 04:00

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

  15. 04:18

    העיקר שזה יהיה ב-Path, אני עושה לזה קופי, הולך לתיקיית Windows, שם אותם כאן, זה רק בשביל לא להיכנס למשתנה סביבה ולבדוק ולשנות שמה ולהריץ APK-Tool, זה הכל.

  16. 04:31

    בואו נראה שזה באמת עובד. כן, יש לנו APK-Tool עובד, שימו לב, אני כל פעם פותח CMD חדש כדי שמשתנה סביבה יתעדכנו. אוקיי, אז יש לנו APK טול שיודע לעשות Re-Engineering, הנדסה לאחור, ל-Android APK, לקובץ שמאלי. מה זה שמאלי?

  17. 04:52

    זה כמו אסמבלר של אנדרואיד. בואו ננסח את זה ככה, תכף נראה את זה. טוב, אז עדכנו את ה-APK טול, בואו נתחיל. דבר ראשון שאנחנו צריכים זה לפתוח אותו, לעשות לו Decode.

  18. 05:06

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

  19. 05:29

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

  20. 05:42

    אנחנו הולכים להריץ apk-tool-de-compile-de-code ואנחנו פותחים את ה-apk. ברגע שאנחנו פותחים את ה-apk, תסתכלו מה יקרה פה, נוצרה פה תיקייה ושימו לב מה הוא עושה back-smiling לכובד זה אומר עושה לו reverse engineering לשפת smiley עוד פעם שפת smiley זה למעשה

  21. 06:05

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

  22. 06:25

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

  23. 06:38

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

  24. 06:49

    לפני כן עשינו פאץ' בפרידה, אני מזכיר לכם רק מה עשינו, נכנסנו לקלאס C בתוך הפקאג' זה הפקאג' שלי, נכנסנו לקלאס C ובתוך קלאס E שינינו פונקציית A שתחזיר false,

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

ההרצאה הקודמת: פריצה של UnCrackable-Level1 - חלק 2

ההרצאה הבאה: חתימה דיגיטלית על קובץ APK עם jarSigner

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

  • איך לפרוץ wifi במחשב
  • איך לפרוץ סיסמה לשרת
  • Generate Signed APK
  • קובץ Manifest

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

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