WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  Visual Basic
  Кто-нибудь сможет перевести этот код с++ на VB?

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Кто-нибудь сможет перевести этот код с++ на VB?
cr опубликован 06-12-2001 11:33 MSK   Click Here to See the Profile for cr   Click Here to Email cr  
СОКРЫТИЕ ПРОЦЕССА ОТ ФУНКЦИИ NtQuerySystemInformation В WINDOWS 2000/NT
[ 2001/11/26, researcher ]

Я довольно долго пытался сделать свою программу невидимой в 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, подставляя вместо нужного файла "..".

Lamer опубликован 08-12-2001 17:46 MSK     Click Here to See the Profile for Lamer  Click Here to Email Lamer     
Спасибо! Это как раз то, что я искал! Как напишу на ВБ - сразу дам знать!
cr опубликован 13-12-2001 11:16 MSK     Click Here to See the Profile for cr  Click Here to Email cr     
To Lamer
---------
Долго еще? :)
Я жду..
Vasya2000 опубликован 13-12-2001 14:05 MSK     Click Here to See the Profile for Vasya2000  Click Here to Email Vasya2000     
Я кстати тоже жду!
Lamer опубликован 16-12-2001 14:44 MSK     Click Here to See the Profile for Lamer  Click Here to Email Lamer     
Народ! Имейте терпения! У меня коллоквиум на носу! Подождите ещё несколько дней!
7in опубликован 17-12-2001 22:51 MSK     Click Here to See the Profile for 7in  Click Here to Email 7in     
Что у тебя на носу? Колл... Как ты его назвал? Не выговоришь ведь. Ну не важно. Расскажу я тебе один рецепт народный.
Возьми 5 чайных ложек кактусового варенья, добавь стакан водки и сахару (по вкусу). Положи немного ванили и перцу побольше. Выжми сок из сирени и добавь туды. Потом сходи в лес и набери желудей (одного хватит), а если желудей не найдёшь, набери почек баобаба. Растолки и положи в раствор. Дай этому делу отстояться денька два-три, а может и четыре (должен получиться отстой). Потом пропусти всё это через марлечку (3 раза!), а через день ещё пропусти (ровно 7 раз!). Остатки не выкидывай, они тебе ещё пригодятся. Всё, сок готов. Но пить его не надо. В полнолуние встань под самой высокой берёзой, которая есть рядом с домом и намажь нос этим соком. Погуляй немного (часа два), а перед сном положи на лицо то, что осталось на марлечке и засыпай поскорее. Утром у тебя не только коллоквиум с носу сойдёт, у тебя вообще ничего не останется!
Удачи! Если что не так, ты уж не обессудь.
P.S. А терпение _иметь_ не надо.
cr опубликован 18-01-2001 16:36 MSK     Click Here to See the Profile for cr  Click Here to Email cr     
?
AlexR опубликован 18-01-2001 19:39 MSK     Click Here to See the Profile for AlexR  Click Here to Email AlexR     
И чё это за рецепт???
Vasya2000 опубликован 19-01-2001 08:20 MSK     Click Here to See the Profile for Vasya2000  Click Here to Email Vasya2000     
Ну сколько можно ждать?
Lamer опубликован 19-01-2001 21:15 MSK     Click Here to See the Profile for Lamer  Click Here to Email Lamer     
Забудьте! Код на ВБ глюкает! Секунд через пять сообщает, что прога выполнила недопустимую операцию, надо прикрыть Microsoft и т. п.!
cr опубликован 22-01-2001 00:10 MSK     Click Here to See the Profile for cr  Click Here to Email cr     
Lamer, все равно, кинь сюда код, плз, может придумаем что-нить.
Vasya2000 опубликован 22-01-2001 13:12 MSK     Click Here to See the Profile for Vasya2000  Click Here to Email Vasya2000     
конечно придумаем! Lamer, гони код!
cr опубликован 28-01-2001 14:25 MSK     Click Here to See the Profile for cr  Click Here to Email cr     
!
Vasya2000 опубликован 28-01-2001 17:06 MSK     Click Here to See the Profile for Vasya2000  Click Here to Email Vasya2000     
А был ли код?
AlexR опубликован 28-01-2001 19:17 MSK     Click Here to See the Profile for AlexR  Click Here to Email AlexR     
Lamer, давай код!
Hacker опубликован 31-01-2001 20:07 MSK     Click Here to See the Profile for Hacker  Click Here to Email Hacker     
Гони код...ато компонент на vс++ налобеним и нет у тебя почёта.
AlexR опубликован 31-01-2001 20:33 MSK     Click Here to See the Profile for AlexR  Click Here to Email AlexR     
Lamer, гони код!!!
Lamer опубликован 02-02-2001 10:49 MSK     Click Here to See the Profile for Lamer  Click Here to Email Lamer     
Хотите код? Пишите сами! Ведь самим будет приятно перевести его своими силами! К тому же уж больно рулёзной эта хрень получается! Единственные пару советов, которые я могу дать, это то, что указатель на переменную или структуру можно получить оператором VarPtr, а при каждом вызове ф-ции Hook_NtQuerySystemInformation надо каждый параметр передавать ей с оператором ByVal!

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.