Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];

Вниз

Как спрятать свой процесс   Найти похожие ветки 

 
mate   (2002-08-29 13:43) [0]

Как спрятать свой процесс от показа в окне Ctrl-Alt-Del под Win2000?


 
начинающий програмер   (2002-08-29 14:08) [1]

Говорят под драйвет заделать надо...


 
Song   (2002-08-29 14:12) [2]

Забудь.


 
начинающий програмер   (2002-08-29 14:29) [3]


> Забудь.

Это вполне реально даже не заделывая под драйвер. Говорят где-то есть код, частично на СИ.


 
chainik_ukr   (2002-08-29 16:00) [4]

На самом деле все просто необходимо заделать свою прогу под service (службу)
Или можно реализовать приложение в качестве dll , и загрузить как exe модуль с помощью user32.dll


 
Игорь Шевченко   (2002-08-29 16:58) [5]

начинающий програмер © (29.08.02 14:29)

Не надо таких слов говорить, ибо неправда.

chainik_ukr (29.08.02 16:00)

На самом деле все просто необходимо заделать свою прогу под service (службу)

С каких пор сервисы перестали в Task Manager показываться ?


 
max2057   (2002-08-29 17:07) [6]

в Task Manager сервисы если и показываются то не все


 
Игорь Шевченко   (2002-08-29 17:09) [7]

max2057 © (29.08.02 17:07)

Какие не показываются ? :-)


 
Almaz   (2002-08-30 00:57) [8]

Самый простой способ спрятаться - это внедить свой код в чужой процесс. Под Win2000 это много проще Win9x.
Однако если есть желание поизвращаться - то можно и через перехват API функций - начинающий програмер прав - где-то в просторах сети есть пример на эту тему (только не частично а полностью на СИ :)

Удачи.


 
Игорь Шевченко   (2002-08-30 09:44) [9]

Almaz © (30.08.02 00:57)

Собираешься перехватывать NtQuerySystemInformation ? Удачи тебе, и побольше :-)


 
Aleksey Pavlov   (2002-08-30 11:51) [10]

>> Игорь Шевченко © (30.08.02 09:44):

Перехватывать NtQuerySystemInformation и не требуется :)
Скрыть что-то от NtQuerySystemInformation тоже нельзя.
НО! Можно обмануть 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;



 
Aleksey Pavlov   (2002-08-30 11:52) [11]

После вызова функции, если не произошло ошибки, первым элементом буфера окажется структура
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, подставляя вместо нужного файла "..".

Идея не моя и, честно говоря, лично я не пробовал воплотить такое в жизнь, потому как есть более изящные, с моей точки зрения, способы сокрытия процессов в системе ;)
Это было в своё время на войде описанно.
Так же на ныне несуществующем hackzone была прекрасная статья Tanaka о сокрытии процессов в системах семейства NT с работающими примерами.
Наверняка в INet-е вы сможете её найти.


 
paul_shmakov   (2002-08-30 11:52) [12]

2 mate:
только-только ушла в архив нужная ветка :(
если очень нужно, то ищите в архиве форума "Система" ветку "TaskManager". там я подробно и развернуто описывал механизмы и принципы скрытия процессов.

p.s. все таки архив - это зло, я ссылку на эту ветку давал около 2-3 раз в неделю.. и тут на тебе, ушло в архив :(


 
Aleksey Pavlov   (2002-08-30 12:02) [13]

>>paul_shmakov © (30.08.02 11:52):

Такие вещи надо в FAQ складывать, уж слишком часто такие вопросы возникают (и не только в этом форуме).


 
Игорь Шевченко   (2002-08-30 12:06) [14]

Aleksey Pavlov © (30.08.02 11:51)

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

Я к тому, что ПРОЦЕСС скрыть невозможно :-) Именно процесс, а не внедренные в область чужого процесса DLL. Хотя, и DLL"и можно найти :-)))

С уважением,


 
Игорь Шевченко   (2002-08-30 12:07) [15]

Aleksey Pavlov © (30.08.02 12:02)

> Такие вещи надо в FAQ складывать, уж слишком часто такие
> вопросы возникают


А может, не стоит ? :-)


 
paul_shmakov   (2002-08-30 12:14) [16]

2 Aleksey Pavlov:
не все так просто. все верно, если перехватить все (!) вызовы NtQuerySystemInformation, то можно возвращать из нее все, что дуще угодно.
но! если все так просто, то почему же эту технику повсеместно не используют?
ответ прост: именно очуществить нормально перехват вызова этой функции во всех (!) процессах - очень сложно, да и не реально это грамотно сделать.


 
Игорь Шевченко   (2002-08-30 12:20) [17]

paul_shmakov © (30.08.02 12:14)

Реально, методом Руссиновича - подменой обработчика в SystemServiceTable.

Вот только стоит ли овчинка выделки ? :-))


 
Aleksey Pavlov   (2002-08-30 12:31) [18]

>> paul_shmakov © (30.08.02 12:14) & Игорь Шевченко © (30.08.02 12:20):

О чём и речь. Гораздо проще "жить" в чужом контексте :-)

Если можно, поподробнее о методе Руссиновича.
Просто академический интерес - впервые слышу о нём и в литературе упомянаний не встречал.
Если возможно URL.
Спасибо.


 
Игорь Шевченко   (2002-08-30 12:34) [19]

Aleksey Pavlov © (30.08.02 12:31)

www.sysinternals.com

Для более подробного освещения здесь, боюсь, не хватит места :-)
Или вечером... :-))


 
Almaz   (2002-08-31 04:34) [20]


> Игорь Шевченко © (30.08.02 09:44)
> Almaz © (30.08.02 00:57)
>
> Собираешься перехватывать NtQuerySystemInformation ? Удачи
> тебе, и побольше :-)

Как же ты догадался ??? :))))
Удачи мне хватило - перехватил. Не так страшен черт...

Удачи.


 
paul_shmakov   (2002-09-01 02:12) [21]

2 Игорь Шевченко:

"Реально, методом Руссиновича - подменой обработчика в SystemServiceTable."

мене тоже очень (!) интересно. мне казалось, что к SystemServiceTable можно достучаться только из драйвера. а из драйвера - это не то. про драйверы я и не спорю, я говорил, что из ring3 нет нормального способа system-wide перехвата вызовов api.
так что получается, есть способ?
пожалуйста, ткните носом, где можно почитать.

Вот только стоит ли овчинка выделки ? :-))
стоит, еще как!


 
Игорь Шевченко   (2002-09-02 10:24) [22]

paul_shmakov © (01.09.02 02:12)

Все правильно, Руссинович делает это из драйвера. Из ring3, естественно, никак.


 
RV   (2002-09-02 11:54) [23]

paul_shmakov ©
поделились бы со мной простейшим примером...
я вири не пишу и не собираюсь - так, для общего развития
а то у меня не получилось (читал Вас (где-то 2-3 месяца назад) + статью Кейтмара(?)) - ничего, ошибок не выдает и не перехватывает



 
Игорь Шевченко   (2002-09-02 11:56) [24]

paul_shmakov © (01.09.02 02:12)

Есть еще, правда, ApiMon из windows resource kit, но как он устроен, я не видел. Может, тоже с драйвером, может, еще как.


 
paul_shmakov   (2002-09-02 15:17) [25]

2 Игорь Шевченко:
"Все правильно, Руссинович делает это из драйвера. Из ring3, естественно, никак."
у.. а я уже было обрадовался. из драйвера конечно можно. у драйверов недостатки есть - права администратора для загрузки и т.п.
да и не есть хорошо драйвер поставлять с прикладной программой.

2 RV:
"поделились бы со мной простейшим примером...
я вири не пишу и не собираюсь - так, для общего развития
а то у меня не получилось (читал Вас (где-то 2-3 месяца назад) + статью Кейтмара(?)) - ничего, ошибок не выдает и не перехватывает."

а в чем проблемы? давайте код сюда, посмотрим. пример мне сложно дать - все времени нет дописать на delphi нормальный unit для перехвата. а свои примеры - сложно из контекста их выдирать, да и на c++ они.


 
paul_shmakov   (2002-09-02 15:25) [26]

2 RV:
"я вири не пишу и не собираюсь - так, для общего развития"
я чтоль их пишу? :) тут многие боятся перехвата api, внедрения в чужие процессы и т.п.
но почему это обязательно вирусы/трояны? у меня, например, одна из задач - заставить некоторые приложения удалять файлы без возможности востановления.
как это сделать? естественно, помог перехват DeleteFileA и DeleteFileW.
и таких задач бывает много.


 
Игорь Шевченко   (2002-09-02 15:33) [27]

paul_shmakov © (02.09.02 15:17)

Есть у Руссиновича две утилиты - ProcExp и HandleEx - каждая в ресурсах имеет по два драйвера - для Nt и для Win9x. При необходимости они из ресурсов вынимаются и загружаются.
Пустячок, а изящно :-)
Это к вопросу о поставке драйвера с прикладной программой

С уважением,


 
paul_shmakov   (2002-09-02 16:36) [28]

2 Игорь Шевченко:
поставка драйвера - это еще полбеды, а вот права администратора - это гораздо хуже :(


 
Игорь Шевченко   (2002-09-02 17:59) [29]

paul_shmakov © (02.09.02 16:36)

Обычно, нестандартные действия с операционной системой и должны выполняться с правами администратора. Или с привилегией LoadDriver. Политика :-)

С уважением,


 
RV   (2002-09-02 22:19) [30]

2paul_shmakov
а я удалил :(

ну, буду ждать модуля...


 
KSergey   (2002-09-03 07:14) [31]

Простите за сообщ. не в тему: меня всегда удивляют и смешат страшные слова "но там поди на Си...". Еще во сне приснится, че доброго ;)
А в чем разница кода на Си и дельфи при работе с API-функциями? Даже буковки одинаковые, блин, ну разве что кое где точка с запяотй не там стоит да {} на begin/end поменяно. ;)
И еще: как это может академический интерес быть к готовому юниту?! Что это за интерес такой? Нет, я не сомневаюсь, что он (интерес) исключительно познавательный, но вот академическим он может стать лишь тогда, когда приведенного здесь будет достаточно для самоттоятельных поисков, к тому же направление уже задано.


 
Моисей   (2002-09-03 11:33) [32]

Я вот что думаю, интересно и полезно как раз наоборот: ррраз и найти все скрытые процессы, и все hoooks, которые (пере-)опеределены и стереть их все (или не все, а по-желанию). Может кто о таком слыхал?


 
Ученик   (2002-09-03 13:35) [33]

>Моисей (03.09.02 11:33)
Присоединяюсь


 
Игорь Шевченко   (2002-09-03 14:06) [34]

Ученик © (03.09.02 13:35)
Моисей (03.09.02 11:33)

Каждый hook - это объект подсистемы Win32.
Можно написать драйвер, который исследует эти объекты и выдает информацию. Если найдется желающий, я могу поделиться информацией об объектах типа hook


 
Ученик   (2002-09-03 14:18) [35]

>Игорь Шевченко © (03.09.02 14:06)
Информация всегда бывает полезна, независимо от желания :-)


 
Ученик   (2002-09-03 14:57) [36]

Тоже наверно интересная вещь: http://www.rohitab.com/apimonitor/


 
Игорь Шевченко   (2002-09-03 15:03) [37]

А еще есть ApiMon в MS Resource Kit ( http://www.reskit.com)



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.01 c
14-11452
sayjay
2002-10-07 16:56
2002.11.04
как открыть gif


1-11203
Solovey
2002-10-23 01:00
2002.11.04
Перевод числа из 16-ричной системы в 10-чную.


14-11389
Шурик Ш
2002-10-16 18:10
2002.11.04
Злой админ отрубил доступ к аське


3-11077
NightCon
2002-10-15 12:09
2002.11.04
Как составить динамический запрос?


4-11572
Oak
2002-09-20 13:42
2002.11.04
Как перехватить запуск какой-то программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский