Skip to content

۳. سناریو عملی: شکار Root Detection (خواندن آرگومان‌ها) ​

بسیاری از مکانیزم‌های تشخیص روت، سعی می‌کنند فایل‌هایی مثل /system/bin/su را باز کنند تا ببینند وجود دارد یا نه. این کار معمولا با تابع سیستمی open در کتابخانه libc.so انجام می‌شود. ما می‌توانیم این تابع را هوک کنیم و ببینیم اپلیکیشن دنبال چه فایلی می‌گردد.

از آنجایی که آرگومان اول open مسیر فایل (رشته متنی) است، باید با Memory.readUtf8String آن پوینتر را به متن تبدیل کنیم.

کد فریدا (مانیتورینگ فایل‌ها):

javascript
var openPtr = Module.findExportByName("libc.so", "open")

Interceptor.attach(openPtr, {
    onEnter: function (args) {
        /* آرگومان اول تابع open، مسیر فایل است (char *pathname) */        
        /* ما آدرس حافظه (Pointer) را می‌خوانیم و به رشته تبدیل می‌کنیم */        
        var path = Memory.readUtf8String(args[0])
        
        if (path.indexOf("su") !== -1 || path.indexOf("Superuser") !== -1) {
            console.warn("[!] ROOT DETECTION DETECTED!")
            console.warn("App is trying to check: " + path)
            
            /* حمله پیشرفته: تغییر مسیر به یک فایل بیخطر! */            
            /* var safePath = "/system/bin/safe_file" */            
            /* this.context.r0 = ... (مبحث پیشرفته تغییر آرگومان) */            
        }
    },
    onLeave: function (retval) {
        /* کاری با خروجی نداریم */        
    }
})