Skip to content

۵. خواندن و نوشتن باینری (Hex Dump) ​

گاهی اوقات داده‌هایی که رد و بدل می‌شوند متن نیستند (مثل کلیدهای رمزنگاری AES). در این حالت نمی‌توانیم از readUtf8String استفاده کنیم. باید حافظه را به صورت Hexdump ببینیم تا ساختار داده را درک کنیم.

کد فریدا (هکس دامپ حافظه):

javascript
var aesEncryptPtr = Module.findExportByName("libcrypto.so", "AES_encrypt")

Interceptor.attach(aesEncryptPtr, {
    onEnter: function (args) {
        console.log("[*] AES Encrypt called")
        
        /* آرگومان args[0] معمولا کلید یا دیتای ورودی است */        
        /* چاپ 64 بایت از حافظه برای دیدن محتوا */        
        console.log(hexdump(args[0], {
            offset: 0,
            length: 64,
            header: true,
            ansi: true
        }))
    }
})

خلاصه دستورات Interceptor ​

دستورکاربرد
Module.findExportByName(lib, func)پیدا کردن آدرس تابع از روی اسم
Module.getBaseAddress(lib)پیدا کردن آدرس شروع یک فایل .so
Interceptor.attach(ptr, callbacks)شروع عملیات هوک روی آدرس
args[i]دسترسی به آرگومان i-ام (در onEnter)
retvalدسترسی به مقدار برگشتی (در onLeave)
Memory.readUtf8String(ptr)خواندن متن از آدرس پوینتر
hexdump(ptr)نمایش محتویات حافظه به صورت Hex