Skip to content

۳. هوک کردن آدرس‌های دلخواه (Instruction Hooking) ​

گاهی نمی‌خواهید کل یک تابع را هوک کنید؛ بلکه می‌خواهید فقط یک خط خاص از کد اسمبلی را هوک کنید (مثلا دقیقا بعد از یک دستور CMP یا LDR). شما می‌توانید به هر آدرسی در حافظه کد، Interceptor را متصل کنید، به شرطی که آن آدرس شروع یک دستور معتبر باشد.

کد فریدا (هوک کردن یک خط اسمبلی):

javascript
/* فرض کنید می‌خواهید آفست 0x1234 را هوک کنید که وسط یک تابع بزرگ است */
var base = Module.findBaseAddress("libnative.so");
var targetInst = base.add(0x1234);

Interceptor.attach(targetInst, {
    onEnter: function (args) {
        console.log("[*] Reached the specific instruction at 0x1234");
        
        /* نمایش تمام رجیسترها در این لحظه برای تحلیل */        
        /* console.log(JSON.stringify(this.context)); */
    }
});

نکته حیاتی (Alignment)

در معماری ARM، آدرس‌ها باید تراز (Align) باشند. در ARM64 آدرس‌ها مضربی از ۴ هستند. اگر آدرس اشتباهی بدهید، اپلیکیشن بلافاصله کرش می‌کند.