در مورد مسئله Relocation یک بنده خدایی در جایی سوال پرسیده است، که در اینجا قصد دارم به این مسئله در حد سواد اندک و ناچیز خود یک پاسخ کوتاه بدهم و البته امیدوارم مبحث برای شما روشن شود. 

ببینید مبحث Relocation کاملا یک مسئله مهم است و همیشه هم با آن مخصوصا در هنگام مهندسی معکوس و تحلیل پکرها روبه‌رو خواهید شد. 

همانطور که در جلسه دوم ویندوز اینترنالز برای دانشجویان توضیح دادم، یک فایل PE هنگامیکه توسط لودر سیستم‌عامل ویندوز بخواهد بر روی حافظه ترسیم یا همان مپ شود، یک آدرس Prefered دارد که لودر در اولین تلاش خود، ماژول را در آن آدرس لود می‌کند. در حقیقت ممبر BaseImage حاوی این آدرس Prefered می‌شود.

حال خیلی مواقع رخ می دهد که ما وقتی می خواهیم یک ماژول را بارگذاری کنیم، ماژول دیگری در آن آدرس Prefered فایل جدید بارگذاری شده باشد. در این شرایط فایل جدید برای اینکه در حافظه مپ شود، لودر آدرس آن را Relocate می‌کند، یا تغییر می‌دهد.

این مسئله در گذشته بود، یعنی زمانی که هنوز چیزی به نام ASLR معرفی نشده بود. در گذشته فقط زمانی عمل Relocation توسط لودر سیستم عامل رخ می داد که ماژول دیگری در آن آدرس لود شده بود، اما اکنون هر بار که ماژولی بر روی حافظه بخواهد بارگذاری شود، لودر سیستم‌عامل با استفاده از الگوریتم‌های Pseduo Random Number Generator فایل را در یک آدرس غیرقابل پیش‌بینی لود می‌کند.

برای همین شما مشاهده می‌کنید که BaseImage فایل PE مثلا 400000 است، ModuleEntryPoint هم مثلا 1000 است، اما فایل هنگام بارگذاری در حافظه در آدرس مثلا 2100012 بارگذاری می‌شود.

با این مکانیزم هکر نمی‌تواند شلکد خود را اجرا کند و باید این مکانیزم امنیتی را دور بزند که البته دور زدن آن هم کار بسیار ساده و پیش پا افتاده‌ای است. 


@miladkahsarialhadi