Skip to content

۴. تغییر رشته‌ها در حافظه Native ​

در لایه جاوا، تغییر یک رشته ساده است. اما در C/C++، رشته‌ها پوینترهایی به حافظه هستند. شما نمی‌توانید فقط مقدار یک پوینتر را عوض کنید؛ چون ممکن است طول رشته جدید بیشتر باشد و باعث کرش شود. روش صحیح: اختصاص حافظه جدید، نوشتن رشته جدید در آن و جایگزین کردن پوینتر اصلی.

کد فریدا (تغییر آرگومان متنی):

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

Interceptor.attach(openPtr, {
    onEnter: function (args) {
        var path = Memory.readUtf8String(args[0]);
        console.log("[*] Original path: " + path);

        if (path.indexOf("test_file.txt") !== -1) {
            /* ۱. اختصاص حافظه جدید برای رشته جدید */           
            var newPath = "/sdcard/hacked.txt";
            var newPathPtr = Memory.allocUtf8String(newPath);

            /* ۲. جایگزین کردن پوینتر آرگومان اول با آدرس حافظه جدید */             
            args[0] = newPathPtr;
            
            console.log("[+] Path redirected to: " + newPath);
        }
    }
});