داینامیک اینوکیشن (Dynamic Invocation)

به روشی گفته می‌شه که توش برنامه‌نویس یا مهاجم، یک تابع API (مثل توابع ویندوز) رو مستقیم از طریق import در جدول Import Address Table (IAT) صدا نمی‌زنه، بلکه:
آدرس تابع رو در زمان اجرا به‌دست میاره (مثلاً با GetProcAddress)،
یا از روی نام DLL به‌صورت دستی بارگذاری و resolve می‌کنه (مثلاً با LoadLibrary)،
یا حتی با تکنیک‌های پیشرفته‌تر، کل DLL رو از حافظه رمزگشایی و اجرا می‌کنه، بدون اینکه اصلاً فایل واقعی بارگذاری بشه.
چرا این کارو می‌کنن؟
برای دور زدن ابزارهای امنیتی. چون:
این EDR یا آنتی‌ویروس معمولاً بررسی می‌کنه ببینه برنامه‌ای مثل malware.exe توی IAT خودش چه توابع مشکوکی مثل CreateRemoteThread, VirtualAlloc, WriteProcessMemory و... داره یا نه.
اما اگه این توابع مستقیم در IAT نباشن و فقط در زمان اجرا و به‌صورت پویا resolve بشن، ابزارهای signature-based خیلی سخت‌تر می‌تونن اونو شناسایی کنن.
یه مثال ساده:
فرض کن یه برنامه می‌خواد VirtualAlloc رو صدا بزنه. حالت عادی:
#include <windows.h> VirtualAlloc(...); // این مستقیم توی IAT ثبت می‌شه
اما با
Dynamic Invocation:
FARPROC pVirtualAlloc; HMODULE hKernel32 = LoadLibraryA("kernel32.dll"); pVirtualAlloc = GetProcAddress(hKernel32, "VirtualAlloc"); pVirtualAlloc(...); // صدا زدن به‌صورت پویا
توی حملات پیشرفته‌تر:
گاهی حتی اسم توابع هم رمزنگاری شده یا مبهم‌سازی (obfuscate) می‌شن و بعد در زمان اجرا رمزگشایی می‌شن تا تحلیل‌گرها و ابزارها نتونن راحت بفهمن چه توابعی قراره استفاده بشن.

#آکادمی_روزبه

Comments

Be the first to add a comment