Форум: "WinAPI";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизКак скрыть программу в диспетчере задачь? WindowsXP Найти похожие ветки
← →
MAXHo © (2005-12-05 17:14) [0]Икал по инету, но там только на 98ю или же описывают как скрыть окно. Мне необходимо чтоб в диспетчере задачь на вкладке процессы небыло видно моей программы. Заранее спасибо за ответ.
← →
Игорь Шевченко © (2005-12-05 17:22) [1]Вирусы пишут на другом сайте
← →
Antonn © (2005-12-05 17:59) [2]найти икно Диспетчера, найти его список, распотрашить его:)
← →
gdaujk © (2005-12-05 18:25) [3]>MAXHo © (05.12.05 17:14)
>Как скрыть программу в диспетчере задачь?
Можете не беспокоиться. Диспетчер задач не отображает программ. Он отображает только видимые родительские окна и запущенные процессы :-).
PS: идите на ... http://www.wasm.ru/article.php?article=hidingnt . Только, то что там излагается, вам скорее всего не по зубам :-)
← →
MAXHO © (2005-12-05 19:09) [4]Игорь Шевченко:
Мне не для вируса я админ клуба и мне надо чтоб юзера не могли завершить один процес. Или посоветуйте как перехватить закрытие форму когда ее закрывают через диспетчер задач.
← →
Alexandr Bydantcev © (2005-12-05 19:35) [5]Смотря что ты этим процессом хочешь делать.
А если подойти со стороны сервисов?
← →
Volf_555 (2005-12-05 21:47) [6]Тебе нужно чтобы юзверы вообще не открывали Диспетчер задач?
Если да - то запрети с помощью политик или же в реестре запуск этого окна.
Если нет - то решается просто - создаётся прога, которая висит в памяти и блокирует запуск Диспетчера задач.
Если же всё-таки список процессов должен отображаться и юзеры имели возможность завершать процесс, то не трудно создать свою программу, которая будет вызываться по определённым горячим клавишам Windows, отображать процесс, в списке процессов находить "не нужную для завершения" программу и удалять просто такую строку - и всё! Юзверы не смогут завершить "не нужную для завершения" программу!
← →
Ботвин Дмитрий (2005-12-06 07:54) [7]MAXHo © (05.12.05 17:14)
Для администрирования клуба применять такие извращенческие методы просто излишне, как минимум. А если к тебе придёт продвинутый юзер со своей прогой, умеющей показывать и завершать скрытые процессы (а таких не мало), то вся твои старания на смарку :-)))
Самый правильный совет дан в посте [5]. Юзер с правами пользователя никогда не завершит сервис. А скрывать его ни к чему...
← →
Чапаев © (2005-12-06 10:48) [8]Обзови её winlogon.exe и диспетчер задач не сумеет её завершить.
ЗЫ. Только ведь не один диспетчер задач задачи снимать умеет...
← →
Васяня (2005-12-06 11:45) [9]
> Чапаев © (06.12.05 10:48) [8]
> Обзови её winlogon.exe и диспетчер задач не сумеет её завершить.
>
Чо за бред? с каких пор диспечер задач обращает внимание на название EXE? В смысле bum.exe я завершу, а winlogon.exe не буду, я его люблю, так чтоли?
← →
Хинт © (2005-12-06 11:57) [10]Нет, диспетчер запрещает завершать все процессы с именем winlogon.exe
← →
Хинт © (2005-12-06 11:59) [11]А вот ответ на вопрос:
http://forum.sources.ru/index.php?showtopic=58824
← →
Игорь Шевченко © (2005-12-06 12:10) [12]Хинт © (06.12.05 11:59) [11]
Желаю тебе найти альтернативный диспетчер задач, показывающий скрытые таким образом процессы. И смотреть почаще на свой компьютер.
← →
Чапаев © (2005-12-06 12:17) [13]
> с каких пор диспечер задач обращает внимание на название
> EXE?
С давних...
> Нет, диспетчер запрещает завершать все процессы с именем
> winlogon.exe
А так же csrss.exe, lsass.exe, smss.exe и так далее.
← →
Ботвин Дмитрий (2005-12-06 14:42) [14]Хинт © (06.12.05 11:59) [11]
Левый походу способ - в фаре по F11 "скрытые" таким образом процессы видны.
Там "HideOnlyFromTaskManager - нужно ли прятать процесс только от TaskManager"а, или же от остальных программ" видимо не подразумевается
под словами "остальных программ" использование фара ;-)))
← →
Хинт © (2005-12-06 19:27) [15]Этот способ скрывает приложение только от Диспетчера задач и тех программ, которые используют NtQuerySystemInformation для листинга процессов. А от tlhelp32 не спасает...
← →
Игорь Шевченко © (2005-12-07 10:16) [16]Хинт © (06.12.05 19:27) [15]
> А от tlhelp32 не спасает...
Я наверное открою страшную тайну, но thelp32 внутре себя вызывает NtQuerySystemInformation. Причина проста - это единственный способ получить список процессов.
← →
Rouse_ © (2005-12-07 10:37) [17]
> Хинт © (06.12.05 11:59) [11]
> А вот ответ на вопрос:
> http://forum.sources.ru/index.php?showtopic=58824
А вот тебе штопор на этот код (жаль ветка в архиве, поэтому просто процитирую):Игорь Шевченко © (02.02.05 10:21)
Небольшой код, позволяющий определить, есть ли в системе потенциально вредоносный процесс, скрывающий себя от Task Manager"а, Process Explorer"а и прочих просмотрщиков списка процессов. В сочетании с включенным аудитом процессов поможет выявить поделки доморощенных пакостников.
Проверено на Windows 2000 и Windows XP.
unit CheckNtDll;
interface
uses
Windows, HsNtDef;
function RealQueryListInformation (InfoClass: Integer; var rc: NTSTATUS;
var ReturnLength: DWORD): Pointer;
function IsNtDllHooked: Boolean;
implementation
uses
SysUtils, NtDll, PeImage, NtStatusDefs;
{$IFDEF VER140}
{$WARN SYMBOL_PLATFORM OFF}
{$ENDIF}
type
TSysCallData = array[0..13] of Byte;
TNtQuerySystemInformation = function (SystemInformationClass: LongInt;
SystemInformation: Pointer; SystemInformationLength: ULONG;
ReturnLength: PDWORD): NTSTATUS; stdcall;
var
FRealQuerySystemInformation: TNtQuerySystemInformation;
function RealQueryListInformation (InfoClass: Integer; var rc: NTSTATUS;
var ReturnLength: DWORD): Pointer;
var
ListSize: Integer;
begin
ListSize := $400; { Начальный размер буфера }
GetMem(Result, ListSize);
rc := FRealQuerySystemInformation(InfoClass, Result, ListSize, @ReturnLength);
while rc = STATUS_INFO_LENGTH_MISMATCH do begin
FreeMem(Result);
ListSize := ListSize * 2;
GetMem(Result, ListSize);
rc := FRealQuerySystemInformation(InfoClass, Result, ListSize,
@ReturnLength);
end;
if rc <> STATUS_SUCCESS then begin
FreeMem(Result);
Result := nil;
end;
end;
procedure MakeRealQS (const SysCallData: TSysCallData);
var
OldProtection: DWORD;
FuncPtr: Pointer;
begin
FuncPtr := VirtualAlloc(nil, $1000, MEM_COMMIT, PAGE_READWRITE);
Win32Check(Assigned(FuncPtr));
Move(SysCallData, FuncPtr^, SizeOf(SysCallData));
Win32Check(VirtualProtect(FuncPtr, SizeOf(SysCallData), PAGE_EXECUTE,
OldProtection));
@FRealQuerySystemInformation := FuncPtr;
end;
function IsNtDllCodeHooked (const FileName: string; ProcOffset: ULONG): Boolean;
var
Image: THSPeImage;
SysCall: TSysCallData;
SysCall2: TSysCallData;
QSPtr: Pointer;
begin
Image := THSPEImage.Create (FileName);
try
Move(Image.RVAData[ProcOffset]^, SysCall, SizeOf(SysCall));
finally
Image.Free;
end;
QSPtr := GetProcAddress(GetModuleHandle("ntdll.dll"),
"NtQuerySystemInformation");
Move(QSPtr^, SysCall2, SizeOf(SysCall2));
Result := not CompareMem(@SysCall, @SysCall2, SizeOf(SysCall));
if Result then
MakeRealQS (SysCall);
end;
function IsNtDllHooked: Boolean;
const
SDllPath = "%SystemRoot%\system32\ntdll.dll";
var
DllPath: ZString;
HFile, HMap: THandle;
Map: Pointer;
Headers: PImageNtHeaders;
QSysInfo: Pointer;
begin
Result := false;
Win32Check(
ExpandEnvironmentStringsA(SDllPath, DllPath, SizeOf(DllPath)) <> 0);
HFile := CreateFileA(DllPath, GENERIC_READ, FILE_SHARE_READ, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, INVALID_HANDLE_VALUE);
Win32Check(HFile <> INVALID_HANDLE_VALUE);
try
HMap := CreateFileMappingA(HFile, nil, PAGE_READONLY, 0, 0, nil);
Win32Check(HMap <> 0);
try
Map := MapViewOfFile(HMap, FILE_MAP_READ, 0, 0, 0);
Win32Check(Assigned(Map));
try
Headers := RtlImageNtHeader(HMODULE(Map));
if Assigned(Headers) then
Result :=
Headers.OptionalHeader.ImageBase <> GetModuleHandle("ntdll.dll");
if not Result then begin
QSysInfo := GetProcAddress(GetModuleHandle("ntdll.dll"),
"NtQuerySystemInformation");
if Assigned(QSysInfo) then begin
Result := (Cardinal(QSysInfo) <=
Headers.OptionalHeader.ImageBase) or (Cardinal(QSysInfo) >
Headers.OptionalHeader.ImageBase +
Headers.OptionalHeader.SizeOfCode);
if not Result then
Result := IsNtDllCodeHooked(DllPath, ULONG(QSysInfo) -
Headers.OptionalHeader.ImageBase);
end else
Result := true;
end;
finally
UnmapViewOfFile(Map);
end;
finally
CloseHandle(HMap);
end;
finally
CloseHandle(HFile);
end;
end;
initialization
finalization
if Assigned(FRealQuerySystemInformation) then
VirtualFree(@FRealQuerySystemInformation, $1000, MEM_DECOMMIT);
end.
Пример использования:
FQueryInformationFunction: TQueryListInformation;
.........
if IsNtDllHooked then begin
ShowMessage("NtDll is hooked!");
@FQueryInformationFunction := @RealQueryListInformation;
end else
@FQueryInformationFunction := @QueryListInformation;
.....
var
ProcessInfo: Pointer;
rc: NTSTATUS;
Dummy: ULONG;
begin
ProcessInfo := FQueryInformationFunction (
SystemProcessesAndThreadsInformation, rc, Dummy);
if NT_SUCCESS(rc) then
ShowProcessList (ProcessInfo)
else
RaiseNtError (rc);
.........
← →
Rouse_ © (2005-12-07 10:39) [18]
> Игорь Шевченко © (02.02.05 12:01) [19]
> Всем:
>
> Данный код иллюстирует только идею. Если все детали выкладывать,
> места не хватит. Остальные используемые модули представляют
> кучу служебных полезностей, написанных в разное время.
> Часть можно взять по адресу
← →
Rouse_ © (2005-12-07 10:39) [19]Блин, адрес не докопировал :)
http://www.schevchenko.net.ru/SRC/Common_60.zip
← →
MAXHO © (2005-12-07 17:54) [20]Чапаев
Супер! Спасибо то что нужно :)
Диспетчер задач я раньше запрещал но отказался от него, часто была необходимость вызвать когда зависла игр и т д. Всем спасибо за советы :)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.042 c