Skip to content

۵. استفاده از NativeFunction (اجرای توابع به صورت دستی) ​

این یکی از جذاب‌ترین قابلیت‌های فریداست. فرض کنید تابعی در لایه Native پیدا کرده‌اید که کارش رمزنگاری رشته‌هاست. به جای اینکه منتظر بمانید اپلیکیشن آن را صدا بزند، خودتان یک "پل" می‌سازید و آن تابع را مستقیما از داخل اسکریپت فریدا با ورودی‌های دلخواه اجرا می‌کنید.

این کار برای Brute-force کردن یا ساختن Decryptor اختصاصی فوق‌العاده است.

کد فریدا (ساخت پل و اجرای تابع):

javascript
/* ۱. پیدا کردن آدرس تابعی که می‌خواهیم دستی اجرا کنیم */
var funcAddr = Module.findExportByName("libnative-lib.so", "calculate_secret_code");

if (funcAddr) {
    /* ۲. تعریف ساختار تابع (خروجی، ورودی‌ها) */     
    /* مثلا تابعی که یک عدد می‌گیرد و یک عدد برمی‌گرداند: int func(int) */    
    var calculateSecret = new NativeFunction(funcAddr, 'int', ['int']);

    /* ۳. حالا می‌توانیم مثل یک تابع معمولی جاوااسکریپت آن را صدا بزنیم! */      
    console.log("[*] Manually calling calculate_secret_code...");
    var result = calculateSecret(1234); // ورودی دلخواه ما
    console.log("[+] Result from Native call: " + result);
    
    /* مثال برای Brute-force: */    
    /*
    for(var i=0; i<100; i++) {
        if(calculateSecret(i) == 999) console.log("Found key: " + i);
    }
    */
}

تفاوت مهم

Interceptor برای تغییر رفتار توابع موجود است، اما NativeFunction برای استفاده مستقل از پتانسیل‌های موجود در فایل‌های .so است.

هوک کردن توابع سیستمی غیرمستقیم (SVC Hooking) ​

در موارد بسیار نادر و امنیتی، اپلیکیشن‌ها به جای استفاده از توابع کتابخانه‌ای (مثل open)، مستقیما با دستورات اسمبلی SVC (Supervisor Call) با هسته لینوکس صحبت می‌کنند. در این حالت Interceptor.attach روی توابع معمولی جواب نمی‌دهد. راهکار در این سطح، استفاده از Stalker فریدا برای دنبال کردن دستور به دستور کد اسمبلی است (که یک مبحث فوق حرفه‌ای محسوب می‌شود).