PDA

View Full Version : سوال: هوک کردن TerminateProcess



30yavash
سه شنبه 17 دی 1387, 11:53 صبح
با سلام.
چند روزی هست که دارم دنبال روش هوک کردن TerminateProcess می گردم ولی هیچ چیز بدرد بخوری پیدا نمی کنم. :عصبانی++:

در واقع من می خام با هوک کردن TerminateProcess یا NTTerminateProcess جلوی متوقف شدن برنامم رو بگیرم مثل Kaspersky ولی متاسفانه نمی دونم چطور باید این کار رو بکنم.
می دونم که باید با استفاده از SetWindowsHookEx و تعریف یک delegate تابع TerminateProcess رو کنترل کنم ولی طریقه نوشتن تابع کنترل کننده TerminateProcess رو بلد نیستم.

لطفا در این زمینه مرا راهنمایی کنید.
با سپاس

30yavash
جمعه 20 دی 1387, 09:50 صبح
حداقل یه dll بهم بدین که بتونم توی C# ازش استفاده کنم.
یا اینکه یک مقاله کامل(حتا انگلیسی) بهم معرفی کنید تا خودم بشینم بنویسمش.
هرچی توی نت گشتم چیز بدرد بخوری پیدا نکردم.
انگار تمام دنیا فقط به هوک کردن صفحه کلید و ماوس علاقه دارند!

Sajjad.Aghapour
جمعه 20 دی 1387, 13:33 عصر
یه سری به PInvoke.net بزنید.

30yavash
جمعه 20 دی 1387, 14:06 عصر
این سایت رو قبلا رفتم.
متاسفانه نگفته چطور باید TerminateProcess رو هوک کنی.
فقط گفته این طوری باید فراخوانیش کنی.

SMRAH1
جمعه 20 دی 1387, 14:19 عصر
سلام

کافیه توی MSDN دنبال SetWindowsHookEx یا Using Hooks بگردید.در هر حال فرایند hook کردن SysMessageProc یا KeyBoard یا .. با هم فرقی ندارند.فقط در پیاده سازی متفاوتند.

30yavash
جمعه 20 دی 1387, 16:49 عصر
بعد از بررسی مستندات msdn و pinvoke به این نتیجه رسیدم که .net به علت عدم توانایی در تولید کد native دی ال ال (dll) نمی تونه این تابع رو هوک کنه.(اصلا نمی تونه هیچ global هوکی رو به جز low levelها(ماوس و صفحه کلید)اجرا کنه)

مدرک:

you cannot implement global hooks in Microsoft .NET Framework except low level hooks. To install a global hook, a hook must have a native dynamic-link library (DLL) export to inject itself in another process that requires a valid, consistent function to call into. This requires a DLL export, which .NET Framework does not support. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically.
منبع:
http://www.pinvoke.net/default.aspx/user32.SetWindowsHookEx
بخش Notes

ظاهرا باید برم سراغ c++ یا دلفی

دوستان نظری دارند؟

30yavash
جمعه 20 دی 1387, 16:55 عصر
1-
جدای از بحث عدم توانایی C# که در بالا اشاره کردم.
یه چیز دیگه رو هم نفهمیدم و اون اینه که وقتی من تابع SetWindowsHookEx رو تعریف می کنم برای TerminateProcess نوع هوکم چیه؟
خودم فکر می کنم WH_SHELL باشه.
اگر این طوره حالا از کجا بتونم بستن پروسم رو هندل کنم؟چون WH_SHELL شامل اجرای پروسه هم می شه.

2-
یه سوال دیگه:
در زمینه هوک کردن system wide یعنی چی؟چه تفاوتی با User-Mode hooking داره؟

Amir Oveisi
جمعه 20 دی 1387, 21:18 عصر
http://www.codeproject.com/KB/threads/winspy.aspx

میتونین با ++VC یه dll درست کنید و از تو دات نت ازش استفاده کنید (در واقع با این کار پروسسی که عمل hook رو انجام میده اون فایل dll هست که native هم هست)
اگر بتونین با ++VC یه سرویس بسازید که hook کنه خیلی بهتره
تو این لینک توضیح داده

موفق باشید
jooje

saeghpc
یک شنبه 02 تیر 1392, 15:07 عصر
سلام دوستان چندسوالی داشتم :
1.من یک تابع از DLL های ویندوز (advapi32) را می خواهم HOOK کنم باید از SetWindowsHookEx حتما استفاده کنم یا روش های دیگری هم هست آخه چند کد دیدم از این تابع استفاده نکرده بودند.
2.یک کد بدست آوردم برای هوک کردن اما این خطای Error 2 error LNK2019: unresolved external symbol "public: __thiscall CAPIHook::~CAPIHook(void)" (??1CAPIHook@@QAE@XZ) referenced in function "void __cdecl `dynamic atexit destructor for 'g_OpenProcess''(void)" (??__Fg_OpenProcess@@YAXXZ)
دوستان می توانند راهنمایی کنند
3.کسی با کد های داخل سایت .MADshi.net توانسته تابعی را هوک کند اگر توانسته و امکان هست بذاره .