Posts Reverse Enginering with Frida Scripting basics [Android]
Post
Cancel

Reverse Enginering with Frida Scripting basics [Android]

Introduction :

السلام عليكم مع تطور تطبيقات الجوال في الحماية من العبث فيها يصعب على مختبرين الإختراق في تخطي بعض الحمايات مثل الحماية من الروت أو ال SSL pinning
فا الأغلب يستخدم برامج جاهزة ولكن في التطبيقات الواقعية يختلف السناريو فا من المهارات الأساسية فهم التطبيق وتحليل طريقة عمله ولكن اليوم راح نتكلم عن مشروع جبار وهو Frida وراح نتكلم أيضاً كيف نفهم التطبيق من حيث السورس كود مثل : الكلاسات , الدوال المسوؤلة عن هذي الحمايات بعد ذلك ننشئ سكربتات بالجافا سكربت ونتخطى هذي الحمايات ب Frida .

What is frida:

ماهو Frida بكل بساطة هو مشروع للتحليل الديناميكي تستطيع من خلاله حقن اكواد جافا سكربت داخل التطبيق للتحكم في تصرفاته للاطلاع أكثر عن Frida تجد تعريفه في الموقع الرسمي هنا :
1
https://frida.re/

Frida Scripting:

بعد فهمنا لطريقة عمل Frida بنتكلم شوي عن Frida Scripting قوة فريدا في ال Api الخاص بها والي منها راح نكتب فيها سكربتات خاصه فينا بحسب فهمنا للتطبيق المراد عمل له هندسة عكسية , فا في مثالنا اليوم بيكون عن تطبيقات الأندرويد لأجل كذا راح نستختدم ال Java Api الخاص ب فريدا وهنا شرح بعض الأساسيات :
1
2
https://frida.re/docs/javascript-api/#java

Note we will write our script in “javascript”

في مثالنا اليوم راح نطبق على تخطي حماية الروت فا راح نفتح التطبيق في محاكي عليه روت ونشوف وش راح يطلع لنا :

centered image

مثل ماتشوفون طلعت لنا رسالة أن الجهاز عليه روت ومنها ماراح يشتغل التطبيق , فالجميل فالموضوع هنا راح نستغل الرسالة علشان نعرف الدالة المسوؤلة عن حماية الروت ولازم نفهمها كويس علشان نتخطها طبعاً ماراح أتطرق لطريقة فك التطبيق وماراح أشرح جميع الخطوات لكن راح أرفق جميع الادوات المستخدمة في هذا الشرح وعليك بالبحث ^^.

Hard code:

بعد ماعرفنا أن التطبيق مايقبل أي جوال عليه روت نشيك على السورس كود ونشوف وش طلع لنا :

centered image

بمعنى أخر راح يكون الشرط كتالي خلونا نحلله حبه حبه :
1
2
3
4
5
6
7
8
9
        if (c.a() || c.b() || c.c()) {
            a("Root detected!");
        }
        if (b.a(getApplicationContext())) {
            a("App is debuggable!");
        }
        super.onCreate(bundle);
        setContentView(2130903040);
    }
حن الي يهمنا السطر الأول مثل ماهو واضح فالشرط الي فوق نلاحظ عملية المقارنة في c.a و c.b و .c.c و c عبارة عن كلاس اذا ضغطنا عليه راح يحولنا لمكان الكلاس ونشوف وش طلع لنا :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package sg.vantagepoint.a;

import android.os.Build;
import java.io.File;

/* loaded from: UnCrackable-Level1-dex2jar.jar:sg/vantagepoint/a/c.class */
public class c {
    public static boolean a() {
        for (String str : System.getenv("PATH").split(":")) {
            if (new File(str, "su").exists()) {
                return true;
            }
        }
        return false;
    }

    public static boolean b() {
        String str = Build.TAGS;
        return str != null && str.contains("test-keys");
    }

    public static boolean c() {
        for (String str : new String[]{"/system/app/Superuser.apk", "/system/xbin/daemonsu", "/system/etc/init.d/99SuperSUDaemon", "/system/bin/.ext/.su", "/system/etc/.has_su_daemon", "/system/etc/.installed_su_daemon", "/dev/com.koushikdutta.superuser.daemon/"}) {
            if (new File(str).exists()) {
                return true;
            }
        }
        return false;
    }
}
لاحظو الكلاس c فيه ثلاث دوال من السطر 7 إلى 22 فالدوال كالأتي a , b , c فالدالة a مثلاً يتأكد من الروت عن طريق امر su والدالة c تتأكد من مسارات البرامج الي تفعل الروت فالجهاز لكن لو نلاحظ كل الكلاسات نوعها boolean فا معناها انها ترجع true أو false فا لو نشوف الدالة الأولى والثانيه كلها ترجع true فا راح نسوي هوك بسيط ونخلي هذي الدوال ترجع false بدال true علشان نسوي Bypass للدالة هذي ونتخطى حماية الروت فا راح ننشئ سكربت بسيط بالجافا سكربت وراح يكون كتالي :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Java.perform(()=>{
    const rootcheck = Java.use("sg.vantagepoint.a.c");
    rootcheck.a.implementation = function(){
        console.log("--Bypass done -- ");
        return flase;
    }
    

    rootcheck.b.implementation = function(){
        console.log("--Bypass done -- ");
        return false;
    }

    rootcheck.c.implementation = function(){
        console.log("--Bypass done -- ");
        return false;
    }
});

Note To Learn more about Frida-Scripting Here : https://frida.re/docs/javascript-api/#java

والحين راح نجرب السكربت على التطبيق فالبداية نستخرج البندل الخاص بالتطبيق عن طريق :

Note you sholud run frida-server first in you emulator

1
2
frida-ps -Uai 

الحين نجرب السكربت عن طريق الأمر هذا :
1
2
frida-ps -U - f owasp.mstg.uncrackable1 -l rootcheckBypass.js

بعد مانطبق الأمر ننتظر لين يفتح التطبيق بعدين نتكتب في موجه الأوامر %resume وراح يطلع لنا الرسالة الي كتابنها فالسكربت :

centered image

وبعد ما نطبق الأمر راح نشوف أن السكربت تخطى حماية الروت مثل ماتشوفون هنا :

centered image

Some advice:

شرحنا قوة فريدا مع جافا سكربت وتأثيرها على تصرف التطبيق ولكن حبيت أنوه في الأمثلة الواقعية كا مختبر إختراق ماراح يكون السناريو سهل مثل كذا مثلاً في بعض الحالات التطبيق يسوي كراش من قبل لايفتح اصلاً فا هنا صعب أنك تستخدم فريدا ولها طرق تخطي أخرى نتكلم عنها في مواضيع أخرى أن شاء الله , الي حاب اوصله أنك تستفيد من هذي الأساسيات المهمه ولاتطبق تطبيق أعمى وهذي بعض النصائح .
  • Learn javascript basics
1
https://www.w3schools.com/js/
  • Learn Java
1
https://www.w3schools.com/java/default.asp
  • Learn how to Build you first App and try hook function you creat
1
https://www.youtube.com/watch?v=fis26HvvDII
  • Read about Frida [Java Api ] and you use it in your javascript hook
1
2
https://frida.re/docs/javascript-api/#java

Tools

  • UnCrackable-Level1
    1
    
    https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk
    
  • dex2jar
    1
    
    https://github.com/pxb1988/dex2jar
    
  • jadx
    1
    
    https://github.com/skylot/jadx
    
  • frida
    1
    
    https://frida.re
    
  • Nox emulator
    1
    
    https://www.bignox.com/
    

References:

  • https://frida.re/docs/javascript-api/#java

  • https://www.youtube.com/watch?v=fis26HvvDII

  • https://www.w3schools.com/java/default.asp

  • https://www.w3schools.com/js/

  • https://www.youtube.com/watch?v=KeWcZ-Dd6tA&t=490s

Author:

Twitter :

1
https://twitter.com/xcode0x
This post is licensed under CC BY 4.0 by the author.
Contenido

Tags