PHP: bool TermProc(AnsiString ProcName) { HANDLE hpr = NULL; HANDLE hProcessSnap = NULL; PROCESSENTRY32 pe32; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); pe32.dwSize = sizeof(pe32); if (Process32First(hProcessSnap, &pe32)) do if(AnsiString(pe32.szExeFile) == ProcName) { hpr = OpenProcess(PROCESS_TERMINATE,FALSE,pe32.th32ProcessID); TerminateProcess(hpr,0); return true; } while (Process32Next(hProcessSnap, &pe32)); CloseHandle (hpr); CloseHandle (hProcessSnap); return false; } P.S.: #include <Tlhelp32.h>
а то http://www.wasm.ru/article.php?article=hiddndt если надо могу на delphi код дать... ща поищу давно давно делал Code: /////////////////////////////////////////////////////////// function ProcessTerminate(dwPID:Cardinal):Boolean; var hToken:THandle; SeDebugNameValue:Int64; tkp:TOKEN_PRIVILEGES; ReturnLength:Cardinal; hProcess:THandle; begin Result:=false; // Добавляем привилегию SeDebugPrivilege // Для начала получаем токен нашего процесса if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken ) then exit; // Получаем LUID привилегии if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue ) then begin CloseHandle(hToken); exit; end; tkp.PrivilegeCount:= 1; tkp.Privileges[0].Luid := SeDebugNameValue; tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; // Добавляем привилегию к нашему процессу AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength); if GetLastError()<> ERROR_SUCCESS then exit; // Завершаем процесс. Если у нас есть SeDebugPrivilege, то мы можем // завершить и системный процесс // Получаем дескриптор процесса для его завершения hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID); if hProcess =0 then exit; // Завершаем процесс if not TerminateProcess(hProcess, DWORD(-1)) then exit; CloseHandle( hProcess ); // Удаляем привилегию tkp.Privileges[0].Attributes := 0; AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength); if GetLastError() <> ERROR_SUCCESS then exit; Result:=true; end; ///////////////////////////////////////////////////////////
SetWindowPos - интересная ф-ция (только taskmng равноправны ) У меня wasm неробит! забанили походу Да а на счет PID по Имени процесса или файла реально узнать?
Упс. А чтото вы все забыли один хороший способ. Связанный с приложениями отладчиками. В ключе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe прописать параметр Debugger указывающий на пусть в несуществующей проге или к проге которая ничего не делает или к своей. т.е. смысл в том, что при старте taskmgr.exe автоматически запустится прога указанная в параметре Debugger. таким образом наша прога получит управленяи первой. А настоящий диспечер задач незапустится И главное - это будет работать всегда почти. именно такой метод юзает ProcessExplorerNT чтобы запускаться вместо стандартного диспечера задач
procedure DestroyTaskMgr; var hwnd:THandle; begin hwnd := FindWindow(0,'Диспетчер задач Windows'); if hwnd = 0 then exit else SendMessage(hwnd,WM_SYSCOMMAND,SC_CLOSE,0); end; ЯП : Delphi Вот компромис.. Без запар и понятно как комнатные тапки...
2 iGlass 1) Если у меня не русская винда то пахать не будет. А делать поддержку для каждого языка - это тяжко 2) нужно постоянно в таймере гонять это 3) и главное - при юзанье любого альтернативного диспетчера задач, этот способ не будет работать
Интересно... И как же прописать ключ? Code: system("reg HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe А дальше как?" Да кстати slesh предложи вариант для скрывания процесса от taskmng
ищите процесс на который зарегана хоткей CtrlAltDel (вроде это кстати винлогон) хукайте обработчик и вот пожалуйста. еще кстати в реестре отрубается таскманагер, как в прочем и регедит и тд
2 cheater_man а ты попробуй снчало открыть этот ключ, а потом сам поймешь Вот reg файл для примера: Code: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe] "Debugger"="\"C:\\WINDOWS\\MYPROG.EXE\""
не все так просто))) http://wasm.ru/article.php?article=gui_subsystem Да при запуске он регистрирует эту комбинацию. И перехватить ее нельзя( обычными способами там защита стоит см. Руссиновича).
Удали эту ветку из реестра. Ага примерчик так ниче Прописал Code: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe] "Debugger"="\"C:\\WINDOWS\\SYSTEM32\\cmd.exe\"" [/QUOTE] Запускается cmd, но с именем taskmng.exe По идее если заблочить диспетчер, то уже от него необязательно скрывать процесс? И приведи нормальный пример скрытия екзешника от диспетчера, только не тот пример который из DelphiWorld
Я хз че пишу Что в голову приходит Банер + блокератор + кейлогер + еще что нибудь пока незнаю За одно вспомнить бейсиковский синтаксис, то наверное уже лет десять его невидел (пишу на PureBasic) Если надо потом когда допишу могу сорс выложить
Code: Немного теории Процесс Winlogon при загрузке создает окно "SAS window", которое регистрирует HOTKEY для Ctrl+Alt+Del (CAD) и Ctrl+Shift+Esc (CSE). Вот собственно и все. Перехват Для перехвата CAD (CSE) нам необходимо внедрить DLL в процесс Winlogon, сабклассить указанное окно, и обрабатывать сообщение WM_HOTKEY: // Новая оконная функция LRESULT WINAPI NewSASProc( HWND hSAS, UINT msg, WPARAM wParam, LPARAM lParam ) { if( WM_HOTKEY == msg ){ // Поймали HOTKEY CAD (CSE) - выводим сообщение на десктоп "Default" и затем выходим if( MAKELONG( MOD_CONTROL | MOD_ALT, VK_DELETE ) == lParam ){ MessageBoxEx( GetActiveWindow(), TEXT("Ctrl + Alt + Del"), TEXT("SAS Hook"), MB_DEFAULT_DESKTOP_ONLY, 0 ); return 0; } if( MAKELONG( MOD_CONTROL | MOD_SHIFT, VK_ESCAPE ) == lParam ){ MessageBoxEx( GetActiveWindow(), TEXT("Ctrl + Shift + Esc"), TEXT("SAS Hook"), MB_DEFAULT_DESKTOP_ONLY, 0 ); return 0; } } // Вызываем стандартный обработчик return CallWindowProc( g_OldSASProc, hSAS, msg, wParam, lParam ); } Функция DllMain: BOOL WINAPI DllMain( HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad ) { if( DLL_PROCESS_ATTACH == fdwReason ){ // Находим окно g_hSASwnd = FindWindow( TEXT("SAS Window class"), TEXT("SAS window") ); // Заменяем обработчик if( g_hSASwnd != NULL ) g_OldSASProc = (WNDPROC) SetWindowLong( g_hSASwnd, GWL_WNDPROC, (LONG) NewSASProc ); } if( DLL_PROCESS_DETACH == fdwReason ){ // Возвращаем обработчик if( g_hSASwnd != NULL ) SetWindowLong( g_hSASwnd, GWL_WNDPROC, (LONG) g_OldSASProc ); } return TRUE; } =) мб уже не актуально - не проверял