۴. تغییر رشتهها در حافظه 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);
}
}
});