PDA

View Full Version : Mask کردن یک API



بابک زواری
جمعه 31 تیر 1384, 14:57 عصر
آیا امکان Mask کردن یک API در ویندوز وجود دارد که با فراخوانی یک API یک API دیگه صدا زده بشه ؟

Inprise
شنبه 22 مرداد 1384, 14:03 عصر
بله ؛ و راه حل تا حد زیادی به صورت مسئله بستگی داره ؛ میشه از طریق دستکاری IAT ، یا بازنویسی آفستهای حاوی آدرس توابع در فضای پروسه ، یا حتی Hook توابع و rewrite کردن آدرس بازگشت ، فراخوانی یک API رو به فراخوانی API دیگه ای مبدل کرد . باید توضیح بیشتری در مورد صورت مسئله بدی تا جواب مناسب مشخص بشه

Best Programmer
شنبه 05 شهریور 1384, 01:54 صبح
بله ؛ و راه حل تا حد زیادی به صورت مسئله بستگی داره ؛ میشه از طریق دستکاری IAT ، یا بازنویسی آفستهای حاوی آدرس توابع در فضای پروسه ، یا حتی Hook توابع و rewrite کردن آدرس بازگشت ، فراخوانی یک API رو به فراخوانی API دیگه ای مبدل کرد . باید توضیح بیشتری در مورد صورت مسئله بدی تا جواب مناسب مشخص بشه

1: بازنویسی آفستهای حاوی آدرس توابع در فضای پروسه ?
در حالی که در protect mode هستیم چگونه میشود (شدنی که هست ولی من بلد نیستم)

برای اطلاعات کامل در این زمینه به آدرس زیر مراجعه کنید.
http://www.codeproject.com/system/hooksys.asp

Inprise
شنبه 05 شهریور 1384, 02:02 صبح
- راه حل Kernel Mode : تغییر CR0 و بازنویسی هر نقطه ای از حافظه
- راه حل User Mode : به تاپیک مربوط به Process Injection مراجعه کن . ساده ترین راه استفاده از یک Remote Thread است . DLL مورد نظرت رو به فضای آدرسی پروسه هدف تزریق میکنی و Hello world .

موفق باشی

Best Programmer
شنبه 05 شهریور 1384, 02:15 صبح
راه حل 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.

Inprise
شنبه 05 شهریور 1384, 02:20 صبح
- کد اولت درسته ؛ به عنوان یک کرنل ماژول کامپایلش کن و بعد از تغییر CR0 هر جا میخواهی بنویس .
- استاد یعنی چی ؟
- اون کلید رجیستری تو رو از انتخاب یکی از راههائی که گفتم بی نیاز نمیکنه . بهر حال یا باید با یک کرنل ماژول حفاظت حافظه رو غیر فعال کنی ، یا روی سطح کاربر ، کدت رو به پروسه تزریق کنی ؛ بعد از SP2 اون کلید جلوی نوشتن رو میگیره که البته با تغییر اون این مشکل هم حل میشه.

موفق باشی

hmm
شنبه 05 شهریور 1384, 08:11 صبح
میشه یه کم راجع به عملکرد کد اول توضیح بدین

Inprise
شنبه 05 شهریور 1384, 08:53 صبح
386 به بالا از سی و دوبیت رجیستر CR0 برای ذخیره فلگهای کنترل دسترسی به حافظه و همینطور Paging استفاده میکنه . روی Protected Mode دستکاری CR0 از ring3 ممکن نیست ؛ یه ماژول کرنل - ring0 - میتونه براحتی CR0 رو برای فعال یا غیر فعال کردن کنترل دسترسی به حافظه دستکاری کنه و بعد از اون امکان نوشتن بر یا خواندن از هر نقطهء حافظه بدون محدودیت امکان پذیره .