Если тебе надо: 1) чтоб процес был незаметный 2) чтоб не портил игру (файловый вопрос) 3) не давал играть есть простое решение - пишешь прогу (идея HoBleen (с) ) которая а) в цикле смотрит за процессами -> при обнаружении игры каждых 10 сек делает <WinExec("net.exe","send localhost Error")> б) называешь прогу svchost.exe в) кладешь ее в %system_root% г) прописываешь в автозагрузку P.S. Так как все у нас сейчас продвинутые стали, лучше писать не EXE а DLL и автозагрузку выполнить через HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify. Очевидный плюс - нигде не будет торчать левый процес P.P.S. западло делать нехорошо, но мы сейчас не про это
Угу . Еще можно изменить производителя dll на Microsoft Corporation. Мелкий трюк. Тогда при просмотре списка загруженных длл она не будет выделяться . А где можно глянуть хоть одну такую подгружающуюся заразу ? А то я в теории , в общем , все понимаю . А на практике еще не наблюдал . Она будет сильно отличаться от обычной длл'ы по ст-ре ?
хммм, а ты значит все библиотеки что експлорер себе подгружает знаешь ? у меня к примеру их 82 (модуля, точнее) А насчет разницы в структуре, так она даже проще в исполнении. Сам смысл который лежит здесь - к експлореру (если не ошибаюсь) будет при входе в систему (точнее сказать, не при входе, а при событиях указанных в ключе реестра, вход - один из частных случаев) подгружена библиотека и выполнена функция (та которая указана). Но на практике проще вообще не експортировать ничего, а выполнить свой код в DLL_ENTRY_POINT.
Ну я , допустим , не знаю . Но если я включу , к примеру , Sysinternals Autoruns , тогда увижу их все . И кроме того увижу поля Publisher и Description. Если там publisher у какой то dll'ы пустой , тогда я буду подозревать про нее нехорошее . "выполнить свой код в DLL_ENTRY_POINT." Это всмысле в Main ф-ции dll ? Я вот не соображу никак.Если мне надо , чтобы dll выполнялась долго и счастливо. Я могу просто добавить в main бесконечный цикл проверки того же CreateToolhelp32Snapshot ? Или не могу ? Загрузчик , по идее , выполняет все последовательно , т е пока не завершится main dll ки ,он не будет ничего дальше делать и все повиснет ?
Два дня пытаюсь заставить заработать . Чтобы просто выводил список процессов . Код (Text): .386 .model flat,stdcall option casemap:none include windows.inc include kernel32.inc includelib kernel32.lib .const sConsoleTitle db 'Process Application',0 .data ProcError db "CreateToolhelp32Snapshot function error",0 FirstError db "Process32First function error",0 HelloString db "Process List",0Dh,0Ah,0 .data? LastError dd ? .code Main PROC LOCAL hStdout :HANDLE LOCAL processes:PROCESSENTRY32 LOCAL hProcess:HANDLE invoke SetConsoleTitle, offset sConsoleTitle invoke GetStdHandle ,STD_OUTPUT_HANDLE mov hStdout,EAX ;invoke SetConsoleMode,hStdout,ENABLE_WRAP_AT_EOL_OUTPUT invoke WriteConsole,hStdout,offset HelloString,sizeof HelloString,NULL,NULL invoke CreateToolhelp32Snapshot,TH32CS_SNAPALL,0 .IF eax==INVALID_HANDLE_VALUE invoke WriteConsole,hStdout,offset ProcError,sizeof ProcError,NULL,NULL invoke ExitProcess,NULL .ENDIF mov hProcess,eax invoke Process32First,hProcess,addr processes .IF eax==FALSE invoke WriteConsole,hStdout,addr FirstError,sizeof FirstError,NULL,NULL invoke ExitProcess,0 .ENDIF invoke lstrlen,processes.szExeFile invoke WriteConsole,hStdout,processes.szExeFile,eax,NULL,NULL .WHILE LastError != FALSE invoke Process32Next,hProcess,addr processes mov LastError,eax .IF LastError != FALSE invoke lstrlen,processes.szExeFile invoke WriteConsole,hStdout,processes.szExeFile,eax,NULL,NULL .ENDIF .ENDW invoke CloseHandle,hProcess invoke CloseHandle,hStdout invoke ExitProcess,NULL Main ENDP end Main Нифига не выводит ( P.S.: Да , люди , как приаттачить фаил , не могу найти .
Код (Text): .386 .model flat, stdcall option casemap :none include windows.inc include kernel32.inc includelib user32.lib includelib kernel32.lib .const sConsoleTitle db 'Process Application',0 .data ProcError db "CreateToolhelp32Snapshot function error",0 FirstError db "Process32First function error",0 HelloString db "Process List",10,13,0 newLine db 10,13 .data? LastError dd ? .code Main PROC LOCAL hStdout :HANDLE LOCAL processes:PROCESSENTRY32 LOCAL hProcess:HANDLE LOCAL written : DWORD invoke AllocConsole invoke SetConsoleTitle, ADDR sConsoleTitle invoke GetStdHandle ,STD_OUTPUT_HANDLE mov hStdout,EAX invoke WriteConsole,hStdout,ADDR HelloString,sizeof HelloString-1,NULL,NULL invoke CreateToolhelp32Snapshot,TH32CS_SNAPALL,0 .IF eax==INVALID_HANDLE_VALUE invoke WriteConsole,hStdout,ADDR ProcError,sizeof ProcError,NULL,NULL invoke ExitProcess,NULL .ENDIF mov hProcess,eax invoke Process32First,hProcess,ADDR processes .IF eax==FALSE invoke WriteConsole,hStdout,ADDR FirstError,sizeof FirstError,NULL,NULL invoke WriteConsole,hStdout,ADDR newLine,2,NULL,NULL invoke ExitProcess,0 .ENDIF invoke lstrlen,ADDR processes.szExeFile invoke WriteConsole,hStdout,ADDR processes.szExeFile,eax,NULL,NULL xor eax,eax inc eax mov LastError,eax .WHILE LastError != FALSE invoke Process32Next,hProcess,ADDR processes mov LastError,eax .IF LastError != FALSE invoke lstrlen,ADDR processes.szExeFile invoke WriteConsole,hStdout,ADDR processes.szExeFile,eax,NULL,NULL invoke WriteConsole,hStdout,ADDR newLine,2,NULL,NULL .ENDIF .ENDW invoke CloseHandle,hProcess invoke CloseHandle,hStdout @circle: jmp @circle invoke ExitProcess,NULL Main ENDP end Main Это работает.
Пффф. Разгоняю пар из ушей . Во первых , респект тебе большой LB_K . По сути вышеизложенного . Коренное отличие углядел только в : invoke lstrlen,ADDR processes.szExeFile invoke WriteConsole,hStdout,ADDR processes.szExeFile,eax,NULL,NULL Т е process.szExeFile - string ?? Действительно работает (хотя и с нижеслед. оговорками ) . Но почему , я смекалку сломал , но не понял . Читаем msdn : szExeFile = Pointer to a null-terminated string that specifies the name of the executable file for the process. Это что , в msdn ошибка , или я неправильно слово pointer перевожу ? Главная грабля не в этом . И редактированный исходник и исходный , подправленный , работает только 1 раз в консоли . Потом начинают вылетать Process32First function error . :=\ Если подождать 2 мин снова работает. 1 раз ... И так постоянно. Плавающий баг , какой то .Или это в винде дело ? P.S: Пока еще с вами , пока еще в здравом уме ...
Имею заметить. Если кто будет заюзать , перед каждым вызовом Process32Next, Process32First обязательно записывать размер PROCESSENTRY32 в ее же. Т е вставить mov processes.dwSize,sizeof PROCESSENTRY32 Без этого оно работает через раз , почемуто . Отсылаю интересующихся к статье почтенного Cr4sh'a "Новые веяния в бэкдорах". http://www.sdteam.com/?tid=1723 Там почти такой же код.
Ну тогда уж так: Код (Text): .DO ;работаем как хотим с процессом invoke lstrlen,ADDR processes.szExeFile invoke WriteConsole,hStdout,ADDR processes.szExeFile,eax,NULL,NULL invoke WriteConsole,hStdout,ADDR newLine,2,NULL,NULL ;и переключаемся на след. процесс mov processes.dwSize,sizeof PROCESSENTRY32 invoke Process32Next,hProcess,ADDR processes .WHILE eax И красивее будет, и первый процесс тоже будет просмотрен в этом цикле.