[Delphi] Скрыться из Диспетчера задач Всем добрый день.. Интересует собственно данная тема для Windows Vista | 7. Кто нибудь занимался таким? получалось? Для WinXP нашёл какой-то старый код, пока не проверял, но в инете все пишут что пашет на XP SP1, а на SP2+ уже нет. Дайте совет с чего начать, права на UAC получу без проблем, просто нужно скрыть процесс присутствия брута в диспетчере задач. Может быть кто-то владеет примера по данной теме??? На сколько это вообще реально в Vista | 7?
Это не тот ответ который бы я хотел услышать конечно. Хотелось бы подробнее. Например какими функциями? Где почитать, что почитать и с чего начать?!
инжект, на ассемблере все компактнее и проще для восприятия,как по мне) Code: program Project2; uses windows,TlHelp32,sysutils; type //создаем тип TMessageBox = function (hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall; // вся инфа содержится в записи,которую мы копирнем в процесс,передав указатель на нее PInject = ^TInject; // структура в которой инфа по функции( точка входа+параметры) TInject = record NMessageBox : TMessageBox; txt : array [0..255] of Char; //лучше задать статичный массив, что б не париться с ручным выделением памяти и т.п. Cap : array [0..255] of Char; end; function inject(inject: PInject): DWORD;stdcall; // внедряемая функа,в нее даем указатель на структуру begin inject.NMessageBox(0, PChar(@inject^.txt[0]), PChar(@inject^.cap[0]), 0); Result := 0; end; procedure Injectcode(PID: Cardinal); // почти то же что описано у Рихтера по инжекту длл var RemoteProcess : Cardinal; RemoteTId: DWORD; Data, Code : Pointer; InjRec : TInject; hUser32 : Cardinal; written : Cardinal; begin hUser32 := GetModuleHandle('user32.dll'); // подгружаем либу с функой и получаем ее адрес InjRec.NMessageBox := GetProcAddress(hUser32, 'MessageBoxA'); InjRec.Txt := 'I am inside of U!!!'; //ее текст InjRec.Cap := 'INJECTED'; // ее кэпшн RemoteProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID); // открываем процесс с опред. идентификатором Data := VirtualAllocEx( RemoteProcess, nil, SizeOf(TInject)+128, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE ); // в нем отводим место под код Code := Pointer(DWORD(Data) + SizeOf(TInject)); WriteProcessMemory(RemoteProcess, Data, @injrec, SizeOf(TInject), written); // записываем в уч. память столько то байтов WriteProcessMemory(RemoteProcess, Code, @inject, 128, written); CreateRemoteThread(RemoteProcess, nil, 0, Code, Data, 0, RemoteTId); // вызываем в удал. потоке CloseHandle(RemoteProcess); end; function GetPID(procname: String): integer; // вспомогательная функа для определения ПИДА по имени процесса var hSnap: Cardinal; ProcessEntry: TProcessEntry32; Finding: LongBool; begin Result := 0; procname := AnsiLowerCase(procname); hSnap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0); if hSnap = 0 then Exit; ProcessEntry.dwSize := SizeOf(ProcessEntry); Finding := Process32First(hSnap, ProcessEntry); while Finding do begin if procname = AnsiLowerCase(ExtractFileName(ProcessEntry.szExeFile)) then begin Result := ProcessEntry.th32ProcessID; Break; end; Finding := Process32Next(hSnap,ProcessEntry); end; CloseHandle(hSnap); end; var j:integer; begin j:=getpid('qip.exe'); // инжектимся в квип например,теперь ищи процесс программы :D injectcode(j); end.