Click here to Skip to main content
15,921,276 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralProblem with CWnd::PreSubclassWindow Pin
Joel Holdsworth16-Apr-02 3:45
Joel Holdsworth16-Apr-02 3:45 
GeneralRe: Problem with CWnd::PreSubclassWindow Pin
Joaquín M López Muñoz16-Apr-02 9:55
Joaquín M López Muñoz16-Apr-02 9:55 
GeneralRe: Problem with CWnd::PreSubclassWindow Pin
Joel Holdsworth18-Apr-02 7:48
Joel Holdsworth18-Apr-02 7:48 
GeneralRe: Problem with CWnd::PreSubclassWindow Pin
Joaquín M López Muñoz18-Apr-02 8:16
Joaquín M López Muñoz18-Apr-02 8:16 
GeneralRe: Problem with CWnd::PreSubclassWindow Pin
Joel Holdsworth19-Apr-02 10:53
Joel Holdsworth19-Apr-02 10:53 
QuestionHow to hide my programme thoroughly Pin
User 1605516-Apr-02 3:34
User 1605516-Apr-02 3:34 
AnswerRe: How to hide my programme thoroughly Pin
Maximilien16-Apr-02 9:54
Maximilien16-Apr-02 9:54 
GeneralRe: How to hide my programme thoroughly Pin
Alex Cramer16-Apr-02 21:14
Alex Cramer16-Apr-02 21:14 
Hi! Good russian guy will help you (it's me Blush | :O )
Your trouble is well known and easy to solve.
I haven't time to translate info from russian, and I'll paste it as is. It'2 articles: for 9.x and NT based.
Source: our russian forum FAQ http://www.sources.ru/cpp/faqs/faq_forum.shtml
And I saw example of hiding from three buttons on 9.x on Codeproject (also trojan), search it...

Here's info (russian text will be unreadable):

Как скрыть свое приложение от диспетчера задач
A: (Iliya)

Внимание! Не работает в семействе NT (2000, XP)

typedef DWORD (WINAPI *LPREGISTERSERVICEPROCESS) (DWORD, DWORD);
HINSTANCE h_i;
LPREGISTERSERVICEPROCESS lpRegProc;
h_i = LoadLibrary("KERNEL32.DLL");

if (h_i)
{
lpRegProc = (LPREGISTERSERVICEPROCESS)GetProcAddress(h_i, "RegisterServiceProcess");
if (lpRegProc)
{
lpRegProc(NULL, 1);
}
FreeLibrary(h_i);
}



Наверх


--------------------------------------------------------------------------------


Как скрыть свое приложение от ProcessViewer
A: (источник: xaker.ru) Сокрытие процессов в Win2000/NT Я довольно долго пытался сделать свою программу невидимой в Windows 2000. Максимум, что я смог найти в интернете - это то что основой любого диспетчера задач является функция 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);
}
}
}
}

Теперь любая вызывающая программа при просмотре возвращенного буфера будет прыгать через наш процесс. Вот и все. В исходниках находится программа, демонстрирующая все вышеизложенное. Сначала компилируем библиотеку, затем программу. Конечно для полного сокрытия программы в WINDOWS 2000 этого маловато, стоит также перехватить функции просмотра загруженных библиотек, FindFirsFile, FindNextFile, подставляя вместо нужного файла "..". Если есть какие-то замечания, предложения или что-то еще, то пишите: researcher@land.ru.

GeneralCListCtrl Pin
Catherine16-Apr-02 3:29
Catherine16-Apr-02 3:29 
GeneralRe: CListCtrl Pin
NapiSpooler16-Apr-02 4:25
NapiSpooler16-Apr-02 4:25 
GeneralRe: CListCtrl Pin
Catherine16-Apr-02 4:33
Catherine16-Apr-02 4:33 
GeneralRe: CListCtrl Pin
NapiSpooler16-Apr-02 4:42
NapiSpooler16-Apr-02 4:42 
GeneralA beginners guide to dll's Pin
16-Apr-02 3:07
suss16-Apr-02 3:07 
GeneralRe: A beginners guide to dll's Pin
Joel Holdsworth16-Apr-02 3:37
Joel Holdsworth16-Apr-02 3:37 
GeneralRe: A beginners guide to dll's Pin
16-Apr-02 4:48
suss16-Apr-02 4:48 
Generalcopy resources between two projects Pin
lucy16-Apr-02 2:57
lucy16-Apr-02 2:57 
GeneralRe: copy resources between two projects Pin
Brad Bruce16-Apr-02 3:13
Brad Bruce16-Apr-02 3:13 
GeneralRe: copy resources between two projects Pin
lucy16-Apr-02 3:30
lucy16-Apr-02 3:30 
Generalrunning program from different computer Pin
Rajveer16-Apr-02 2:55
Rajveer16-Apr-02 2:55 
GeneralRe: running program from different computer Pin
Carlos Antollini16-Apr-02 3:34
Carlos Antollini16-Apr-02 3:34 
GeneralSerial Communication Pin
16-Apr-02 2:48
suss16-Apr-02 2:48 
GeneralRe: Serial Communication Pin
Joaquín M López Muñoz16-Apr-02 10:02
Joaquín M López Muñoz16-Apr-02 10:02 
GeneralRe: Serial Communication Pin
16-Apr-02 20:27
suss16-Apr-02 20:27 
GeneralDeclaring classes inside other classes Pin
Alexandru Savescu16-Apr-02 2:12
Alexandru Savescu16-Apr-02 2:12 
GeneralRe: Declaring classes inside other classes Pin
Joaquín M López Muñoz16-Apr-02 3:18
Joaquín M López Muñoz16-Apr-02 3:18 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.