Официальный сайт студ.городка НГТУ
Программирование и БД » Программа-невидимка 

#1  06.01.06 01:15

Программа-невидимка

Как на С++ написать программу, которая не отображается в диспетчере задач?

Offline

#2  06.01.06 01:44

Re: Программа-невидимка

какой компилятор?

Offline

#3  06.01.06 05:35

Re: Программа-невидимка

Компилятор Mingw а оболока в которой пишу- Dev C++

Offline

#4  06.01.06 12:01

Re: Программа-невидимка

библиотеку какую используешь?

Offline

#5  06.01.06 14:43

Re: Программа-невидимка

в билдере можно и через вцл делать
некотрые графические библиотеки позволяют это делать через себя

Offline

#6  06.01.06 20:56

Re: Программа-невидимка

библиотека Allegro

Offline

#7  08.01.06 10:35

Re: Программа-невидимка

В MFC по моему так: ShowWindow(SW_HIDE); UpdateWindow();
но программа остается видна как процесс под Win 2000/XP

Offline

#8  08.01.06 12:15

Re: Программа-невидимка

stitch написал(а):

В MFC по моему так: ShowWindow(SW_HIDE); UpdateWindow();
но программа остается видна как процесс под Win 2000/XP

а он ищет по мойму не в мфц

Offline

#9  08.01.06 20:08

Re: Программа-невидимка

Функция ShowWindow функция WinAPI

     Описание:
function ShowWindow(Wnd: HWnd; CmdShow: Integer);
     Отобpажает или пpячет окно обpазом, указанным паpаметpом CmdShow.
     Паpаметpы:
     Wnd: Идентификатоp окна.
     CmdShow: Одна из констант sw_.
     Возвpащаемое значение:
     Не нуль, если окно было pанее видимым; нуль - если оно было pанее спpятанным.
    функция находится в файле user32.dll

Исправлено stitch (08.01.06 20:08)

Offline

#10  08.01.06 20:09

Re: Программа-невидимка

посмотри тут:  http://www.codenet.ru/progr/visualc/faq/029.php
Если че получится сообши

Offline

#11  09.01.06 00:42

bak
Профиль

Re: Программа-невидимка

основой любого диспетчера задач является функция NtQuerySystemInformation, обмануть эту функцию невозможно. Не знаю, почему так говорят, но обмануть ее можно и это очень просто.

NTAPI Hook_NtQuerySystemInformation(

LONG type, // тип требуемой информации
PVOID SystemInformation, // указатель на буфер, в который вернется информация
LONG SystemInformationLength, // размер буфера в байтах
PLONG ReturnLength // сколько байт было возвращено или требуется

);


Как было указано, первый параметр отвечает за тип требуемой информации. Нас интересует только информация о процессах (type = 5). Далее работаем со следующими структурами:

typedef struct {
    FILETIME ProcessorTime;
    ULONG unk2, unk3;
    FILETIME CreateTime;
    ULONG unk6;
    ULONG StartAddress;
    ULONG ProcessID;
    ULONG ThreadID;
    ULONG CurrentPriority;
    ULONG BasePriority;
    ULONG ContextSwitchesPerSec;
    ULONG ThreadState;
    ULONG ThreadWaitReason;
    ULONG unk15;
} SYSTEM_THREAD_INFORMATION;

typedef struct {
    ULONG NextOffest; // следующий процесс
    ULONG ThreadCount;
    ULONG unk2, unk3, unk4, unk5, unk6, unk7;
    FILETIME CreateTime;
    FILETIME UserTime;
    FILETIME KernelTime;
    ULONG unk14;
    WCHAR *pModuleName; /* unicode */
    ULONG BasePriority;
    ULONG ProcessID;
    ULONG InheritedFromUniqueProcessID;
    ULONG HandleCount;
    ULONG unk20, unk21;
    ULONG PeekVirtualSize;
    ULONG VirtualSize;
    ULONG PageFaultCountPerSec;
    ULONG PeakWorkingSetSize;
    ULONG WorkingSetSize;
    ULONG PeekPagedPoolUsage;
    ULONG PagedPoolUsage;
    ULONG PeekNonPagedPoolUsage;
    ULONG NonPagedPoolUsage;
    ULONG unk31; /* PagefileUsage ? */
    ULONG PeakPagefileUsage;
    ULONG unk33; /* PrivateBytes ? */
    SYSTEM_THREAD_INFORMATION ThreadInfos[1]; // потоки данного процесса
} SYSTEM_PROCESS_INFORMATION;

После вызова функции, если не произошло ошибки, первым элементом буфера окажется структура SYSTEM_PROCESS_INFORMATION, описывающая отдельный процесс. Первым членом этой структуры будет смещение, указывающее на следующий процесс или NULL, если это последний процесс в списке.

Теперь осталось только перехватить все вызовы этой функции и немного поменять смещения, чтобы вызывающая функцию программа перепрыгнула через наш процесс. Наш это процесс или не наш определяем по идентификатору процесса progProcessId, определяемому при запуске программы. Теперь, после перехвата функции NtQuerySystemInformation вместо оригинальной функции сначала вызывается наша:


NTAPI Hook_NtQuerySystemInformation(
    LONG type, // тип информации
    PVOID SystemInformation, // указатель на буфер
    LONG SystemInformationLength, // размер буфера в байтах
    PLONG ReturnLength // указатель на 32-битное число
)
{
    SYSTEM_PROCESS_INFORMATION *pinfo, *pinfo_last;

// вызываем оригинальную функцию
    ((PFNNtQuerySystemInformation)(PROC) g_NtQuerySystemInformation)
    (type, SystemInformation, SystemInformationLength, ReturnLength);

// если получается информация о процессах
    if(type == 5)
    {
        if(SystemInformationLength > 20000)
        {
            pinfo = (SYSTEM_PROCESS_INFORMATION*)SystemInformation;
            for(;;)
            {
// если идентификатор процесса равен идентификатору нашего процесса
                if(pinfo->ProcessID == progProcessId)
                {
// если наш процесс последний в списке
                    if(pinfo->NextOffest == 0)
                    {
// предпоследний процесс теперь стал последним, а наш исчез
                        pinfo_last->NextOffest = 0;
                    }
                    else
                    {
// или прыгаем через наш процесс
                        pinfo_last->NextOffest + = pinfo->NextOffest;
                    }
                }

                if(pinfo->NextOffest == 0)
                    break;
// предудущий процесс теперь равен текущему
                pinfo_last = pinfo;
// переходим к следующему процессу
                pinfo = (SYSTEM_PROCESS_INFORMATION*)((char *)pinfo + pinfo->NextOffest);
            }
        }
    }
}
Теперь любая вызывающая программа при просмотре возвращенного буфера будет прыгать через наш процесс.

Конечно для полного сокрытия программы стоит также перехватить функции просмотра загруженных библиотек, FindFirsFile, FindNextFile, подставляя вместо нужного файла "..".
(с) не я

Исправлено bak (09.01.06 00:43)

Offline

Программирование и БД » Программа-невидимка 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.044 сек.
Выполнено 14 запросов.