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

Вниз

Невидимый процесс.   Найти похожие ветки 

 
Serd_hhc   (2002-06-02 16:24) [0]

Я знаю о RegisterServiceProcess в W9x, а вот под NT такое слышал (и не только на этом сайте), что можно сделать так, чтобы система вообще не знала о твоём процессе. Вроде реализация происходит с помощью хуков. Система определяет процесс при помощи Process32First, а мы в своё время, должны ей "сказать", что то, что она сейчас нашла, это не процесс, а фиг знает что...
Итак вопрос (на заднем плане слышен удар гонга :) :
Как это реализовать на делфи.
(Слышется звук "Пиииии...":).


 
paul_shmakov   (2002-06-03 01:34) [1]

вот здесь я подробно описывал различные способы реализации:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1014992279&n=2


 
Serd_hhc   (2002-06-03 04:00) [2]

Я читал твоё подробное описание, но ты лишь в скользь упомянул на счёт Process32First. Если ты можешб сказать больше, так скажи.


 
VuDZ   (2002-06-03 13:22) [3]

поищи на void.ru - там было всё нормально описано


 
paul_shmakov   (2002-06-04 13:56) [4]

2 Serd_hhc:
ok
сразу говорю - Process32First к nt отношения не имеет, т.к. это одна из функций Toolhelp API. а этот api поддерживается всеми (9x, me, 2k, xp), кроме nt.
так что для nt нужно будет выбирать другой способ.

имхо в win9x/me существует только один стандартный способ получения списка процессов - это как раз и есть Toolhelp32 API. это сильно упрощает задачу перехвата, к тому же есть у win9x особенность... (см. ниже).

под nt/2k/xp все сложнее. здесь вариантов получения списка процессов гораздо больше - чтение информации о производительности из реестра, performance data helper api (для nt - это отдельная компонента, для w2k/xp - стандартная), недокументированная функция ZwQuerySystemInformation из ntdll.dll, Windows Management Instrumentation (w2k/xp).

поэтому перехватывать в nt/2k/xp нужно ох как много, хотя реально (имхо!) все эти api используют ZwQuerySystemInformation.
так что можно попробовать перехватывать только ее.

а идея дествительно проста - перехват вызовов тех функций, с помощью которых различные программы определяют список работающих процессов.
т.е. задача сводится к перехвату вызовов некоего api в чужих процессах. реализовать эту идею можно различными способами: от простой правки таблицы импорта, до "патча" самой перехватываемой функции.
фактически нужно будет выполнить два приема:
1) внедриться в чужой процесс (например, внедрить свою dll, или выделить в чужем процессе память, скопировать туда код и запустить поток через CreateRemoteThread и т.п.)
на эту тему как раз в той ветке:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1014992279&n=2

2) установить свои перехватчики функций api. опять же здесь есть разные варианты. про самый простой - правка таблицы импорта - смотри там же.

теперь о win9x/me. эта операционка имеет несколько особенностей, которые позволяют получить очень красивое решение.
1) не поддерживается защита PAGE_WRITECOPY регионов памяти. объясню на примере: в библиотеке kernel32.dll нуждается каждый процесс, соответственно каждый из них загружает ее при старте. конечно же операционка загружает kernel32.dll в память только один раз, а потом все процессы просто получают доступ к этому модулю. вот здесь и проявляется важный момент!

под winnt/2k/xp kernel32.dll имеет защиту copy-on-write. т.е. если некий процесс пропатчит что-либо в загруженном kernel32, то все пропатченные страницы автоматически скопируются для данного процесса. т.е. все вресенные им изменения будут видны только ему.

а под win9x/me это не так. защита copy-on-write здесь не реализована. поэтому если мы поправим что-либо в kernel32, то эти изменения будут видны всем (!) процессам.
дабы избежать такого произвола microsoft закрыла доступ к kernel32 так, что никакой VirtualProtect не помогает. т.е. сделала его строго readonly. но этот readonly можно снять с помощью недокументированного вызова ядра, что и делает back orifice.

ну а если мы можем править kernel32.dll в памяти, то задача практически решена. bo2k правит таблицу экспорта kernel32.dll так, чтобы она указывала на его функции-перехватчики.

тут еще одна проблема возникает: а где быть функциям-перехватчикам? они ведь должны быть доступны из всех процессов. что, опять внедрять какой-то код в каждый процесс?
нет, в win9x/me есть еще одна особенность - вся виртуальная память выше 2Гб является общей для всех процессов. поэтому выделяем там память под наши перехватчики, копируем их туда и все!

посмотреть, как это реализовано можно в исходниках bo2k.

что-то я увлекся :)
так вот, резюме: если вы хотите прятать свой процесс, перехватывая вызов функций toolhelp api, ZwQuerySystemInformation и т.п., то:
- для разных операционок потребуется перехват различных функций;
- читайте про перехват api - информации достаточно много.



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

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

Наверх




Память: 0.47 MB
Время: 0.007 c
14-35461
Igor_thief
2002-07-16 12:18
2002.08.12
Компонент


4-35507
Валет
2002-06-06 16:07
2002.08.12
как определить координаты курсора ?


14-35407
KiKo
2002-07-16 11:47
2002.08.12
Время


1-35361
roev
2002-07-29 07:36
2002.08.12
поделитесь, у кого есть, ERwin-ом


3-35217
zavisalych
2002-07-24 09:45
2002.08.12
баг в VCL? не понимает множественных полей в KeyFields





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский