آیا امکان Mask کردن یک API در ویندوز وجود دارد که با فراخوانی یک API یک API دیگه صدا زده بشه ؟
آیا امکان Mask کردن یک API در ویندوز وجود دارد که با فراخوانی یک API یک API دیگه صدا زده بشه ؟
بله ؛ و راه حل تا حد زیادی به صورت مسئله بستگی داره ؛ میشه از طریق دستکاری IAT ، یا بازنویسی آفستهای حاوی آدرس توابع در فضای پروسه ، یا حتی Hook توابع و rewrite کردن آدرس بازگشت ، فراخوانی یک API رو به فراخوانی API دیگه ای مبدل کرد . باید توضیح بیشتری در مورد صورت مسئله بدی تا جواب مناسب مشخص بشه
1: بازنویسی آفستهای حاوی آدرس توابع در فضای پروسه ?نوشته شده توسط Inprise
در حالی که در protect mode هستیم چگونه میشود (شدنی که هست ولی من بلد نیستم)
برای اطلاعات کامل در این زمینه به آدرس زیر مراجعه کنید.
http://www.codeproject.com/system/hooksys.asp
- راه حل Kernel Mode : تغییر CR0 و بازنویسی هر نقطه ای از حافظه
- راه حل User Mode : به تاپیک مربوط به Process Injection مراجعه کن . ساده ترین راه استفاده از یک Remote Thread است . DLL مورد نظرت رو به فضای آدرسی پروسه هدف تزریق میکنی و Hello world .
موفق باشی
راه حل Kernel Mode : تغییر CR0 و بازنویسی هر نقطه ای از حافظه.
mov ebx, cr0; to receive current state Cr0push ebx; to save it(him)
and ebx, ~0x10000; to reset WP bats
mov cr0, ebx; to switch off write protection
استاد میتونیم این کاروهم انجام بدیم؟
Disable protection of a kernel image through the registry. For this purpose it is necessary to create in a HKLM\SYSTEM\CurrentControlSet\Control\S essionManager\Memory Management key REG_DWORD parameter with name EnforceWriteProtection and value 0.
- کد اولت درسته ؛ به عنوان یک کرنل ماژول کامپایلش کن و بعد از تغییر CR0 هر جا میخواهی بنویس .
- استاد یعنی چی ؟
- اون کلید رجیستری تو رو از انتخاب یکی از راههائی که گفتم بی نیاز نمیکنه . بهر حال یا باید با یک کرنل ماژول حفاظت حافظه رو غیر فعال کنی ، یا روی سطح کاربر ، کدت رو به پروسه تزریق کنی ؛ بعد از SP2 اون کلید جلوی نوشتن رو میگیره که البته با تغییر اون این مشکل هم حل میشه.
موفق باشی
میشه یه کم راجع به عملکرد کد اول توضیح بدین
386 به بالا از سی و دوبیت رجیستر CR0 برای ذخیره فلگهای کنترل دسترسی به حافظه و همینطور Paging استفاده میکنه . روی Protected Mode دستکاری CR0 از ring3 ممکن نیست ؛ یه ماژول کرنل - ring0 - میتونه براحتی CR0 رو برای فعال یا غیر فعال کردن کنترل دسترسی به حافظه دستکاری کنه و بعد از اون امکان نوشتن بر یا خواندن از هر نقطهء حافظه بدون محدودیت امکان پذیره .