۱. هوک کردن با آفست (روش استاندارد)
فرض کنید در ابزاری مثل Ghidra یا IDA Pro دیدهاید که تابع بررسی لایسنس در آفست 0x5000 قرار دارد. برای هوک کردن آن در فریدا، باید ابتدا آدرس شروع کتابخانه را بگیرید و آفست را به آن اضافه کنید.
کد فریدا (محاسبه آدرس پویا):
javascript
Java.perform(function () {
var libName = "libnative-lib.so"
/* 1. پیدا کردن آدرس پایه کتابخانه در حافظه (این هر بار عوض میشه) */
var baseAddr = Module.findBaseAddress(libName)
if (baseAddr) {
console.log("[+] Base address of " + libName + ": " + baseAddr)
/* 2. محاسبه آدرس واقعی تابع با استفاده از آفست (مثلا 0x1A2B) */
/* آفست را از IDA/Ghidra به دست آوردهایم */
var funcOffset = 0x1A2B
var realAddr = baseAddr.add(funcOffset)
console.log("[*] Hooking function at: " + realAddr)
/* 3. هوک کردن آدرس محاسبه شده */
Interceptor.attach(realAddr, {
onEnter: function (args) {
console.log("Function called via offset hook!")
}
})
} else {
console.error("[-] Library not found: " + libName)
}
})مفهوم Pointer Arithmetic
در فریدا نمیتوانید مستقیما بنویسید base + 0x5000. باید از متد .add() استفاده کنید که مخصوص کار با پوینترهاست.