Member
Статус: Не в сети Регистрация: 29.12.2004 Откуда: Москва
Заранее прошу прощения за глупый вопрос. Есть Delphi 7, есть программа - нужно, чтобы программа могла уходить в фоновый режим и её не было бы видно через диспечер задач, ну и соответственно в панели задач тоже. Уже чего только не пробовал ничего не помогает.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Galllich Если ты работаеш под Win2k/XP то никак ты не спрячеш программу от просмотра в Task Manager. В старых системах это можно было сделать (я имею ввиду win9x)
Member
Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
Ray Adams
Цитата:
Если ты работаеш под Win2k/XP то никак ты не спрячеш программу от просмотра в Task Manager
А вот и неправда, мона Видел дллу которая это делает, правда делает очень топорно т.е. просто отлавливает момент когда прога заносится в список процессов и киляет эту строку
Цитата:
ну и соответственно в панели задач тоже
Ну это элементарно
1. Project -> View sourse
2. Допиши то, что помечено "<-"
Код:
program Project1;
uses Forms, Windows, // <- Unit1 in 'Unit1.pas' {Form1};
{$R *.res} var // <- EStyle : integer; // <- begin Application.Initialize; // Добавить -> EStyle:=GetWindowLong (application.Handle, GWL_EXSTYLE);
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
А я просто процитирую FAQ:
Цитата:
Этот вопрос меня уже достал, он задаётся на всех программистских форумах, поэтому я выкладываю solution. Листинг библиотеки (nthide.dll), которая будет выполнять нужную нам функцию:
getnextpidstruct: mov ebx, esi cmp dword ptr [esi],0 je quit add esi, [esi] mov ecx, [esi+44h] cmp ecx, mypid jne getnextpidstruct mov edx, [esi] test edx, edx je fillzero add [ebx], edx jmp onceagain
fillzero: and [ebx], edx jmp onceagain
quit: mov Result, eax end
procedure InterceptFunctions; var hSnapShot: THandle; me32: MODULEENTRY32; begin addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation'); hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId); if hSnapshot=INVALID_HANDLE_VALUE then exit; try ZeroMemory(@me32,sizeof(MODULEENTRY32)); me32.dwSize:=sizeof(MODULEENTRY32); Module32First(hSnapShot,me32); repeat ReplaceIATEntryInOneMod('ntdll.dll',addr_NtQuerySystemInformation,@MyNtQuerySystemInfo,me32.hModule); until not Module32Next(hSnapShot,me32); finally CloseHandle(hSnapShot); end; end;
procedure UninterceptFunctions; var hSnapShot: THandle; me32: MODULEENTRY32; begin addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation'); hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId); if hSnapshot=INVALID_HANDLE_VALUE then exit; try ZeroMemory(@me32,sizeof(MODULEENTRY32)); me32.dwSize:=sizeof(MODULEENTRY32); Module32First(hSnapShot,me32); repeat ReplaceIATEntryInOneMod('ntdll.dll',@MyNtQuerySystemInfo,addr_NtQuerySystemInformation,me32.hModule); until not Module32Next(hSnapShot,me32); finally CloseHandle(hSnapShot); end; end;
var HookHandle: THandle;
function CbtProc(code: integer; wparam: integer; lparam: integer):Integer; stdcall; begin Result:=0; end;
procedure InstallHook; stdcall; begin HookHandle:=SetWindowsHookEx(WH_CBT, @CbtProc, HInstance, 0); end;
var hFirstMapHandle:THandle;
function HideProcess(pid:DWORD; HideOnlyFromTaskManager:BOOL):BOOL; stdcall; var addrMap: PDWORD; ptr2: PBOOL; begin mypid:=0; result:=false; hFirstMapHandle:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,8,'NtHideFileMapping'); if hFirstMapHandle=0 then exit; addrMap:=MapViewOfFile(hFirstMapHandle,FILE_MAP_WRITE,0,0,8); if addrMap=nil then begin CloseHandle(hFirstMapHandle); exit; end; addrMap^:=pid; ptr2:=PBOOL(DWORD(addrMap)+4); ptr2^:=HideOnlyFromTaskManager; UnmapViewOfFile(addrMap); InstallHook; result:=true; end;
exports HideProcess;
var hmap: THandle;
procedure LibraryProc(Reason: Integer); begin if Reason = DLL_PROCESS_DETACH then if mypid > 0 then UninterceptFunctions() else CloseHandle(hFirstMapHandle); end;
begin hmap:=OpenFileMapping(FILE_MAP_READ,false,'NtHideFileMapping'); if hmap=0 then exit; try mapaddr:=MapViewOfFile(hmap,FILE_MAP_READ,0,0,0); if mapaddr=nil then exit; mypid:=mapaddr^; hideOnlyTaskMan:=PBOOL(DWORD(mapaddr)+4); if hideOnlyTaskMan^ then begin fname:=allocMem(MAX_PATH+1); GetModuleFileName(GetModuleHandle(nil),fname,MAX_PATH+1); if not (ExtractFileName(fname)='taskmgr.exe') then exit; end; InterceptFunctions; finally UnmapViewOfFile(mapaddr); CloseHandle(Hmap); DLLProc:=@LibraryProc; end; end.
Для её использования нужно вызвать функцию HideProcess:
function HideProcess(pid:DWORD; HideOnlyFromTaskManager:BOOL):BOOL,
где pid - идентификатор процесса, который нужно спрятать
HideOnlyFromTaskManager - нужно ли прятать процесс только от TaskManager'а, или же от остальных программ, использующих для получения списка процессов функцию NtQuerySystemInformation из ntdll.dll.
Пример использования:
function HideProcess(pid: DWORD; HideOnlyFromTaskManager: BOOL): BOOL; stdcall; external 'nthide.dll'; < skipped > procedure proc; begin HideProcess(GetCurrentProcessId, false); //это спрячет текущий процесс end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения