
הטקסט המלא של הדקות הראשונות בהרצאה «כתיבת סקריפט Frida עבור InsecureBank» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בהרצאה הזו אנחנו רוצים להתחיל לפרוץ כבר את האפליקציה על ידי פרידה ואני מזכיר לכם מה קרה, יש לנו פה את הטלפון שלנו, בתוך הטלפון שלנו אנחנו נכנסים פנימה וכותבים ADB Shell אנחנו בתוך הטלפון עצמו ואנחנו מריצים את המסך של פוסט לוגין של האפליקציה ועוקפים את הלוגין אבל מגיעים למצב שיש לנו פה Rooted Device אנחנו רוצים למצוא את
הקוד הזה של רוטד דיווייס ולהעיף אותו, שהוא לא ייזהה שזה מכשיר פרוץ. השאלה איך עושים את זה. אז בואו נעשה דבר כזה פשוט, ניכנס ונחפש איפה יש לנו את הרוטד דיווייס הזה, מה אנחנו רוצים לעקוף.
אז כדי לראות את הקוד יש לנו את האפליקציה עצמה, זאת האפליקציה, ויש לנו תוכנה שנקראת ג'אדקס. זוכרים את הג'אדקס? בואו ניכנס לג'אדקס ונפעיל את הג'אדקס גוי, לו בתוך זיפ, עשינו לו אנזיפ, הנה הוא Jadax גוי, בואי נשלח אותו בשורטקאט לשולחן העבודה שיהיה לנו קל, send to desktop והנה הוא, הנה הJadax שלי, אוקיי, בוא נפעיל את הJadax,
Jadax גוי, Jadax גוי הזה יפתח לי את הקובץ APK ויראה לי את הקוד מקור שלו, נותן לו את ה-APK מתוך תיקי הדאונלודס, את האפליקציה שלנו, אוקיי, פה בפנים אנחנו נפתח את ה-com, כי אנחנו הולכים לסורס קוד, לקוד מקור, לא לרסורסים.
רסורסים, אמרנו, זה מידע עזר, כמו קבצי XML, כמו מניפסט XML שדיברנו עליו. עכשיו אנחנו נכנסים לסורס קוד של אפליקציה שלנו, ובתוך הסורס קוד של האפליקציה אנחנו מחפשים פוסט לוגין, ובפוסט לוגין, זה הקוד של פוסט לוגין, אנחנו מחפשים איפה הוא מזהה שהמכשיר פרוץ.
כל אקטיביטי, פוסט לוגין יורש את האקטיביטי ומוסיף לו דברים. מה הוא מוסיף לו? און קליק, מה יקרה? און קליק, אנחנו יכולים לראות.
הנה, show root status, יש פה פונקציה שנקראת show root status. אנחנו יכולים לראות פה שהוא מפעיל את הפונקציה show root status, ובדיוק פה כתוב rooted device או device not rooted.
איך אני מזהה את זה? אני מסתכל פה, אתם רואים rooted device? אני מחפש את המילים האלו rooted device יכלתי דרך אגב לעשות search, פשוט לעשות חיפוש ולמצוא את זה קופי, יש פה search, אתם רואים חיפוש ואפשר היה פה בתוך החיפוש הזה אם אני לא מוצא אותו ככה בצורה פשוטה הנה הוא עושה לו decompiling כדי שיוכל לחפש
בכל הקבצים הוא עכשיו עושה decompiling, לפני כן הוא עשה לו decompilציה לפי הצורך בואו נחכה לו, הנה הוא סיים אנחנו עושים לו פסט, איפה אנחנו רוצים בתוך כל המקומות הנה מצא לי Root Devices ואנחנו יכולים לעשות דאבל קליק ולהגיע לאותו מקום.
אז יש פה זכוכית מגדלת ומחפשים את המידע שרוצים. שמים V לחפש בתוך קוד, הנה הוא מצא לי בתוך קוד, אני עושה דאבל קליק ומגיע לפה, הנה יש פה Rooted Devices.
בקיצור, איך הוא מזהה שזה Rooted? הוא עושה אם הפונקציה הזאת שנקראת Do Super User App Exist, פונקציה שהוא מפעיל אותה ומעביר לה את זה כפרמטר אנחנו יכולים לעשות פה דאבל קליק ולהיכנס לתוך הפונקציה הזאת גם כן אתם רואים אני עושה קונטרול קונטרול קליק הנה זאת הפונקציה הפונקציה
הזאת מחזירה בוליאן true או false זה השם שלה היא מקבלת איזשהו סטרינג ובודקת האם הקובץ הזה נמצא בארדיסק ומחזירה true או false ככה הם מסרו אותה דרך אגב אני רואה פה קצת צמצום הם מקבלים s אבל אבל אני לא רואה שהם משתמשים ב-S הזה.
אם אתם שואלים אותי, זה מתכנת לא הכי טוב בעולם, הוא היה צריך לקחת את ה-S הזה ולבדוק האם הקובץ הזה קיים ולא לכתוב אותו כאן. אתם רואים, הוא כתב אותו כאן בתוך הקוד בצורה שאי אפשר לשנות אותו.
הרעיון המקורי היה להעביר את הכתובת הזאת כפרמטר ולבדוק את הפרמטר. לא משנה, בקיצור הוא עשה פה פרמטר שהוא לא משתמש בו.
פחות חשוב לי, אני רוצה לדרוס את הפונקציה הזאת. בואו נעשה אחד חזרה, בואו נחזור אחד שמאלה. חזרנו חזרה לקוד הראשי, אז הקוד הראשי מפעיל את הפונקציה הזאת, מעביר לה את זה כפרמטר E, זוכרים פה, קונטרול קליק, כל מה שבסוגריים עובר אליה כפרמטר, כל הדבר הזה פה בין
הגרשיים עובר אליה כפרמטר, זה מגיע אליה כפרמטר S ולא עושים בו שימוש והוא בודק האם קובץ כזה וכזה קיים בארדיסק, מחזיר true אם קיים וfalse אם זה לא קיים. יפה.
או האיף הזה מתקיים כשאו הקובץ הזה קיים בארדיסק או הפונקציה הזאת מחזירה true אם חלק הזה או חלק הזה מחזיר אמת אז הוא נכנס לתנאי ומדפיס rooted device נעשה control click ונראה מה זה הפונקציה הזאת הפונקציה הזאת באה לבדוק האם קיים פה אתם רואים su או which האם קיימות כל מיני אפליקציות בארדיסק שהן רצות שמאפשרות לי להחליף
user אתם רואים הוא בודק את זה שהם פרוצסים בזיכרון טוב, פחות מעניין אותי, אני רואה שזאת הפונקציה שמחזירה true ו-false, בודקת בזיכרון דברים ואנחנו רוצים בעצם להוריד אותם.
בואו נראה מה אנחנו נעשה. אנחנו צריכים גם את זה להחליף וגם את זה להחליף. את שתי הפונקציות האלו להחליף אותם כדי שיחזירו תמיד false, ואם הם יחזירו תמיד false הוא ייכנס ויכתוב לי device not rooted.
כמובן שהייתי יכול להחליף מה שאני רוצה איך שאני רוצה. בואו נראה מה עשיתי פה. עשיתי פה סקריפט שנקרא Injection Script, שמה הוא עושה?
כתוב פה תדפיס במסך סטארט, סתם שנדע שהוא התחיל לעבוד, ואנחנו עושים פה פונקציה שנקראת בייפס, ומה הפונקציה הזאת עושה? הפונקציה הזאת, כשנפעיל אותה פה למטה, אתם רואים? פה למטה זה ההפעלה שלה, אתם רואים?
זאת אומרת, הבייפס הזה, הפונקציה הזאת, אנחנו נפעיל אותה פה למטה. אתם רואים? Java פרפורם בייפס. אני אומר לו, תפעיל את הפונקציה הזאת. ומה הפונקציה הזאת עושה?
היא קודם כל לוקחת Java use ומזהה את הקלאס שלי מזהה את המסך הזה זה הקלאס פוסט לוגין אתם רואים הקלאס פוסט לוגין נמצא פה בפנים בתוך הפקאג' הזה אז קודם כל אני אומר לו תקשיב תזהה את הקלאס ותמצא אותו Java use מוצא אותו ותשים אותו בתוך משתנה שנקרא מיי קלאס הוא לוקח את המיי קלאס הזה בזיכרון הוא זיהה אותו ומחליף בפנים את הפונקציה אתם רואים את הפונקציה הזאת does
אז s u exist עושה ל implementation ומגדיר אותה מחדש איך הוא מגדיר את הפונקציה הזאת כפונקציה שמקבלת פה משהו בסוגריים וכל מה שהיא עושה במסך היא פולטת במסך מילה bypass s u root check ומחזירה false זה הקוד החדש שיהיה במקום הקוד המקורי אותו דבר כאן לוקחים את המייקלאס בתוך הקלאס המקורי לוקחים את הפונקציה שרוצים להחליף זאת הפונקציה הזאת שרוצים להחליף אותה עושים לה אימפלימנטציה
חדשה יישום מחדש ומה היישום מחדש של הפונקציה הזאת שתקבל משהו ותדפיס משהו במסך ותחזיר false ראיתם פשוט מחזירה false זה כל מה שאני רוצה להזריק עכשיו כל הדברים האלו זה בעצם נעשה