Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > как убрать программу из диспетчера задач...


Автор: X-Vlad 12.11.2002, 01:19
1) как спрятать программу из диспетчера задач в 2000\ХР Винде?
2) как зделать чтобы мою программу нельзя было снять в диспетчере задач в 2000\ХР Винде? например как процессы Winlogon?

когда я пытаюсь зделать:
Код

function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall;
 external 'KERNEL32.DLL';

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
if not (csDesigning in ComponentState) then
 RegisterServiceProcess(GetCurrentProcessID, 1);
end;


говорит что такой процедуры нету в данной DLL

Автор: Song 12.11.2002, 01:30
Только для w9x.

блин, сколько троящиков-то развелось :(

Автор: Vex 12.11.2002, 03:30
Цитата
блин, сколько троящиков-то развелось

Человек программу для комп. клуба пишет, а ты на него троянщик  :)

X-Vlad, а зачем в компьютерном клубе НТ, вель для игр оптимальный вариант - 9х?

Ну если НТ, так ИМХО можно назначить в правах пользователя запрет на вызов диспетчера задач.

Автор: X-Vlad 12.11.2002, 04:00
Спасибо Vex.
Я тоже спрашивал директора зачем он купил ХР? но ответа так и неполучил...:)
я ему предлагал 98 и дешевле но он купил ХР вот и приходится писать под ХР..:(

вернёмся к вопросу иожно зделать или нет? если можно то как?
спасибо....

Автор: Vit 12.11.2002, 04:03
Какой компьютерный клуб? Вы чего? ИМХО такое только для троянов да вирусов нужно, а в компьютерном клубе всё ну уж очень просто решается - не фиг давать администраторские права пользователям, а прогу запускать с администраторскими правами, и никто ее не вырубит, а потуги скрыть из диспетчера задач процесс однозначно свидетельствует о нехороших намерениях.

PS. Хе-Хе, хотел бы я посмотреть на админа компьютерного клуба, который даёт администраторские права всем пришедшим...

Автор: Vit 12.11.2002, 04:05
Цитата(X @ 11.11.2002, 11:00)
вернёмся к вопросу иожно зделать или нет? если можно то как?

Можно, пиши виртуальный драйвер

Автор: Song 12.11.2002, 04:38
Цитата(Vex @ 11.11.2002, 19:30)
Человек программу для комп. клуба пишет, а ты на него троянщик  :)

А ты откуда знаешь?

Я, понимаешь, на форумах уже не первый день сижу, и поэтому вопрос про CAD во мне начинает уже вызывать аллергию.

Автор: X-Vlad 12.11.2002, 04:57
Vit если бы я писал троян я бы зделал совсем по другому:
делаю проект без формы и загружаю его с виндой он появляется в процесах но по аль-таб и в задачах его нету!!! а если я дам проге хорошее имя например RUNDLL32.exe то не каждый юзер будет знать что ето троян и убивать его!
я уже такое делал!
а сейчас внатуре пишу прогу для клуба.....

насчет админских прав то я их могу давать им они всё равно ничего не зделают потому что я незагружаю explorer.exe а без него я хотел бы посмотреть что они зделают...:) вместо explorer-а я загружаю свою прогу...

а для чего я хочу зделать что-бы небыло видно в задачах - потому что некоторые игры зависают и что-бы снять их юзер насобачился заходить по CTRL+ALT+DEL  и снимать там задачи....
вот поетому я хочу спрятать мою прогу что=бы её не кильнули...

если можешь помоги мне плз....

Автор: Vex 12.11.2002, 05:00
Цитата
А ты откуда знаешь?

Он сказал это пару постингов назад в другой теме.

Цитата
Я, понимаешь, на форумах уже не первый день сижу, и поэтому вопрос про CAD во мне начинает уже вызывать аллергию.


Song, а что такое CAD? Я так понял что это как-то относится к деструктивным действиям, если да то у меня тоже на это аллергия  :)

Автор: Vit 12.11.2002, 06:11
Дык в чём дело? Я же тебе сказал - не даёшь для пользователя прав админа, а свою прогу запускаешь от имени админа и убить ее он не сможет, хотя и будет видеть в процессах, а если скрыть, то я тебе тоже сказал - пиши прогу как виртуальный драйвер...

Автор: rhf 12.11.2002, 07:55
2 X-Vlad, ты всегда такой наивный или только по понедельникам :)
Цитата
насчет админских прав то я их могу давать им они всё равно ничего не зделают потому что я незагружаю explorer.exe а без него я хотел бы посмотреть что они зделают...:) вместо explorer-а я загружаю свою прогу...


даже такой несообразительный человек как я додумаеться, что в таск менеджере есть кнопочка "New Task" и никакой эксплорер не нужен, а уж если так сильно хочеться, то можно как раз его и запустить....

И это далеко не единственный  способ :) ..... так что забудь про то что задумал, лучше  разбирайся с тем как правильно настроить и администрировать сетку.....

ЗЫ или ты через пару часов кинешь вопрос о супер-глобальном хуке который мониторит всю систему и отключает ALT+CTRL+DEL  :) :) :)

Автор: Song 12.11.2002, 17:12
Цитата(Vex @ 11.11.2002, 21:00)
Song, а что такое CAD? Я так понял что это как-то относится к деструктивным действиям, если да то у меня тоже на это аллергия  :)

CAD - это Ctrl-Alt-Del

Автор: man2002ua 12.11.2002, 18:09
Народ!
Есть конкретный вопрос - нужен конкретный ответ! Не разводите плз, флейма. :(

Автор: Song 12.11.2002, 21:39
Цитата(man2002ua @ 12.11.2002, 10:09)
Народ!
Есть конкретный вопрос - нужен конкретный ответ!

А нету его...

Автор: man2002ua 12.11.2002, 21:41
Song, внимательно прочти свою подпись... :D
Теперь скажи еще раз - ты уверен, что невозможно на все 100?

Автор: Song 12.11.2002, 22:35
Да нет, возможно конечно, потому что возможно всё. Но не для всех :(

Автор: man2002ua 12.11.2002, 22:40
:D
так отож.
Кстати, могу дать свою прогу, к-я подключает свою DLL к любому другому процессу. В DLL свой поток, посему она работает, как обычное приложение... не по теме, конечно, но близко, т.к. выгрузить DLL (например из explorera.exe) можно только замочив explorer

Автор: Vit 13.11.2002, 00:11
Song совершенно прав - возможно всё, но не для всех. ИМХО под NT/2000/XP обычное приложение не может скрыть себя из списка процессов (не могу выразить как меня радует этот факт - наверное за одно это стоит пересесть с 9х на NT), по моему мнению скрыть можно только то что запущено как драйвер. Напиши свою прогу как драйвер и она не будет видна - чем тебе не конкретный ответ.

Автор: man2002ua 13.11.2002, 00:30
драйвер, конечно, хорошо... Но зачем мне драйвер??? Дешевле и проще подключить либу к системному процессу...
Короче все зависит от поставленной задачи.

P.S. о драйверах - у меня есть DDK98, но с тех пор как пересел на W2K - отстал от жизни... подскажите, где взять DDK 2К/NT? Может кто в Киеве живет?

Автор: Vit 13.11.2002, 00:43
Цитата(man2002ua @ 12.11.2002, 07:30)
P.S. о драйверах - у меня есть DDK98, но с тех пор как пересел на W2K - отстал от жизни... подскажите, где взять DDK 2К/NT? Может кто в Киеве живет?

"где взять DDK 2К/NT?" - Это давайте обсуждать отдельной темой, а то кто где живёт вообще в флейме, там кстати такая тема есть...Кто-то тут за ответы по существу ратовал. Кто же это был? :p


Автор: man2002ua 13.11.2002, 00:49
:D
забываюсь иногда.
Вопрос ПО-СУЩЕСТВУ: Какой механизм исп. TaskManager для просмотра списка процессов? NtQuerySystemInformation, SnapShot или реестр PERFORMANCE_DATA?
Ковырял кто-нить?

Автор: Song 13.11.2002, 02:35
NtQuerySystemInformation

Автор: Frikazoid 13.11.2002, 04:55
А как ентот виртуальный драйв написать?

Автор: X-Vlad 13.11.2002, 21:11
как запустить мою прогу с админскими правами?

Автор: X-Vlad 13.11.2002, 21:25
у меня был вопрос как можно в 2000\ХР зарегистрровать свою программу с высшим приоритетом что-бы ееё немогли снять?

кто-то может мне ответить на него????????

Автор: X-Vlad 13.11.2002, 21:32
может както можна отключить нажатие ctrl+alt+del? в 2000 ХР

Автор: Vit 13.11.2002, 23:16
Цитата(X @ 13.11.2002, 04:32)
может както можна отключить нажатие ctrl+alt+del? в 2000 ХР

Переписать Kernel для винды

Автор: Vit 13.11.2002, 23:17
Цитата(X @ 13.11.2002, 04:25)
у меня был вопрос как можно в 2000\ХР зарегистрровать свою программу с высшим приоритетом что-бы ееё немогли снять?

кто-то может мне ответить на него????????

Приоретет тут не причём, приоретет показывает только на процент времени котиорый забирает программа от процессора а не её администраторские права

Автор: Vit 13.11.2002, 23:18
Цитата(X @ 13.11.2002, 04:11)
как запустить мою прогу с админскими правами?

Я поищу, я где-то видел, но уже не помню где - запуск от имени другого польователя.

Автор: Song 13.11.2002, 23:26
CreateProcessAsUser()

Автор: Vex 14.11.2002, 00:03
Цитата(Vit @ 13.11.2002, 14:16)
Цитата(X @ 13.11.2002, 04:32)
может както можна отключить нажатие ctrl+alt+del? в 2000 ХР

Переписать Kernel для винды

http://www.sources.ru/cpp/system/ctrl_alt_del_winxp.shtml  почитайте.

Автор: Song 14.11.2002, 00:15
1.Всё это мы читали и давно знаем. Просто вирусописателям говорить о таких ресурсах нельзя. Я бы посоветовал Vit'у удалить ссылку.
2.CAD нельзя заблокировать хуком. Ключ в реестре действует, да. Но его можно также удалить как и поставили. И причём и через реестр и через gpedit.msc
3.Также не забудем что менеджер процессов - это программа. Поэтому её можно запустить по-всякому, а не только через CAD.

Так пролетел ты с CAD'ом :( Статью эту панацеей назвать никак нельзя.

Автор: man2002ua 14.11.2002, 00:19
если интересует только "менеджер процессов", то почему бы не фильтровать его список?  :p

Автор: Vit 14.11.2002, 00:37
Цитата(man2002ua @ 13.11.2002, 07:19)
если интересует только "менеджер процессов", то почему бы не фильтровать его список?  :p

Что ты имеешь ввиду? Посылать сообщения в окно и убирать какие-то значения? Так у меня стоит свой TaskMan, откуда ты узнаешь какой стоит на компьютере. Вообще-то меня так же как и на Song эта тема действует как красная тряпка на быка. На фига нужны эти извороты! Создана такая замечательная ось в которой есть несколько неблокируемых сочетаний клавишь и всегда правильный список процессов - это очень классно, очень помогает в повседневной работе, очень полезно в отлавливании всяких вредоносных програм, и тут же начинается муссирования как это обойти.  ЗАЧЕМ? Если вы хотите запретить пользователю делать что-то, то вместо того чтобы городить какую-то фигню, возьмите букварь по администрированию 2000/XP и прочитайте как это делается по-человечески, там всё предусмотренно, там столько возможностей настроек ограничений доступа, что на мой взгляд даже особо извращённый и щепетильный в таких вопросах сисадмин не сможет найти применение половине имеющихся возможностей по ограничению каких-либо прав пользователей. А все почему-то хотят сделать по дегенеративному - сначала дать пользователю администраторские права, а затем приложить титанические усилия в ограничении этих прав. Я могу придумать только 2 причины, почему могут возникать вопросы этого типа - либо вы пишете что-то вредоносное, либо вам позарез надо ознакомиться с работой в среде 2000/XP и получить необходимый багаж знаний чтобы эти вопросы перестали вас беспокоить. В этом случае скорее последнее, раз уж путают приорететы с уровнями доступа.


Автор: man2002ua 14.11.2002, 00:45
хмм... Если кому-то тема не нравиться, то почему бы просто не обращать внимание на нее? И почему идет разделение на чайников и вирусо-трояно-писателей? Мне допустим просто интересно, если ли подобная возможность или нет...

Автор: Vit 14.11.2002, 00:48
Цитата(man2002ua @ 13.11.2002, 07:45)
Мне допустим просто интересно, если ли подобная возможность или нет...

Мне тоже интересно, а вот некоторым не терпится этот интерес реализовать, а после удивляемся что каждый день появляется десяток новых вирусов, червей и троянов - так мы их же сами и плодим, во всяком случае активно помогаем.

Автор: man2002ua 14.11.2002, 00:53
почти убедил... недавно сам боролся с klez... пренеприятно

Автор: man2002ua 15.11.2002, 00:41
Попробуйте замочить TaskManager-ом (обычным конечно)
http://man2002ua.hotbox.ru/InjHook.rar

Автор: Song 15.11.2002, 01:39
Я снял через FAR :)
А чтобы снять твой хук нужно просто включить DEBUG привелегию.

Автор: man2002ua 15.11.2002, 01:43
ессесно. Есть еще ОЧ-Ч-ЧЕНЬ много способов снять ее, показан принцип и все. Можно ловить и выставление привилегий  :) , но для обычного пользователя - этого достаточно (продолжая тему о вирусописателях)

Автор: X-Vlad 18.11.2002, 01:43
почему Вы боитесь вирусописателей??? каждый пишет то что ему подуше...
и в етом я невижу проблемы.... не каждый вирусописатель кидает свои роботы в и-нет... может человеку на фирме где он работает испортили что-нить и он захотел  написать вирус что-бы отомстить начальству зашол на форум задать вопрос и ему вот так вот ответили "- ненадо вирусописателям помагать!", а поставте себя на его место.... вам приятно будет услышать такой ответ?????
Я вам даю 100% что настоящии вирусописатели которые пишут вирусы c которыми мы часто боримся на форум не ходят.....

Мне например надо что-бы юзер который играет в моем клубе немог кильнуть мою прогу. Поетому я и задал такой вопрос... а мне в ответ зачем помагать вирусописателям.....

уважаемые модераторы! Вы можете меня попереть из етого форума но я скажу свою точку зрения - всегда надо помагать другим даже если ето вирусописатель... если выборочно помагать людям то что из етого всего получится?  зачем тогда етот форум нужен?


P.S. Vex спасибо за ответ... ты мне очень помог......

Автор: Vex 18.11.2002, 02:16
Не надо на людей говорить вирусописатели!

Цитата
почему Вы боитесь вирусописателей каждый пишет то что ему подуше...
и в етом я невижу проблемы.... не каждый вирусописатель кидает свои роботы в и-нет...

В Киеве пару дней назад взорвалась маршрутка, взорвалось самодельное взрывное устройство (~350г. тротилла) в кармане одного  инженера - любителя, который любил мастерить всякие бомбочки и т.д., взорвалась случайно - когда он дверь закрывал, то ненароком нажал на кнопку. Он тоже не планировал взрывать устройство. Аналогия, думаю, понятна.
Вирусописателям ИМХО, помогать нельзя, кто знает какие там у него намерения, может ему что-то в голову стукнет, сейчас столько придурков развелось, это все-равно, что раздать всем желающим прохожим автоматы. НУ если уж и пошла тема про вирусы (прости, модератор) то мне кажется что профессиональный вирусописатель никогда не будет задавать вопросов по поводу написания вируса, так как для него важен сам процес, а новичок, который хочет нанести максимальный вред и выпендрится перед друзьями каждый раз будет бросать на форумы постинги типа как мне написать вирус, троян и т.д., таких ИМХО, надо просто игнорировать.
И тем более это противозаконно.



Цитата
P.S. Vex спасибо за ответ... ты мне очень помог......

ИМХО, в моих ответах было меньше всего нужной информации  :)

Автор: Song 18.11.2002, 19:29
Человек может писать вирусы, если он полностью ответственнен за свой код. Термин "полностью ответственнен" означает, что он знает и понимает ЧТО он пишет и к чему это может привести, также это значит, что он ЗНАЕТ как его написать, не спрашивая других. Такого человека можно уважать, потому что вирусописатель должен обладать недюжинными знаниями, чтобы написать и минимизировать свой вирус по занимаемому объёму.
А люди, которые не знают как писать вирусы и спрашивают об этом на форумах, надеясь получить готовенькое, похожи на школьников, которые хотят нашкодить, хоть в чём-то бы, но нашкодить. Таким школьникам прощения нет.
Вот это моё ИМХО.

Автор: Fantasist 19.11.2002, 09:17
Цитата
Такого человека можно уважать, потому что вирусописатель должен обладать недюжинными знаниями, чтобы написать и минимизировать свой вирус по занимаемому объёму.


А так же его можно жалеть, потому что он не находят конструктивного применения своим знаниям, и не любить, потому как с такими вирусами и бороться тяжелее.

Автор: X-Vlad 20.11.2002, 01:53
Я думаю что Вы со мной согласитесь что люди которые пишут вирусы (Codered и другие популярные вирусы) на форумы не ходят задавать вопросы..... так же как и хакеры.. (покажите мне хоть одного хакера который задаёт вопросы на форуме) есть просто форумы которые организовали хакеры....
Боротся с вирусами ето работа "Касперского", "Nortona" и т.д. мы за ети программы платим деньги... и помоему каждый ими полшьзуется!

я не профи в программировании но и не начинающий по етому у меня бывают вопросы ответы на которые я хочу получить здесь (етот форум мне нравится и я сюда постоянно захожу когда у меня есть вопросы)... может они комуто покажутся такими как будто я пишу вирусы - ето не так. Я пишу программы за которые хочу получить деньги.... хотябы на сигареты и пиво...:), а что с того что я напишу вирус? я с етого ничего не получу! Может кто-то скажет что можна получить деньги за написание вируса - я с етим согласен - но ето надо ещё поискать клиента....

если-бы я хотел написать вирус и не знал как я бы задал вопрос здесь на форуме!

Цитата
Вирусописателям ИМХО, помогать нельзя, кто знает какие там у него намерения, может ему что-то в голову стукнет, сейчас столько придурков развелось, это все-равно, что раздать всем желающим прохожим автоматы.


не сравнивай ... с пальцем... помоему в Росии и Украине ещё не один вирус(компьютерный) не убил человека....

Автор: Vex 20.11.2002, 02:05
Цитата
Цитата  
[QUOTE]Вирусописателям ИМХО, помогать нельзя, кто знает какие там у него намерения, может ему что-то в голову стукнет, сейчас столько придурков развелось, это все-равно, что раздать всем желающим прохожим автоматы.  


не сравнивай ... с пальцем... помоему в Росии и Украине ещё не один вирус(компьютерный) не убил человека....[/QUOTE]

Лично у меня было пару моментов, когда от работоспособности компьютера зависела моя дальнейшая жизнь, то есть ее ход, если бы в тот момент какой-то гад написал и заразил компьютер вирусом, я бы его разорвал на части.

X-Vlad, я лично думаю, что ты не пишешь вирус, и думаю многие так думают :), а точно знаешь лишь ты. Ты поделился с нами своей проблемой, знающие люди помогли тебе ее решить, не понимаю в чем проблема.

Автор: AntonSaburov 20.11.2002, 02:44
Немного странный флейм. Сейчас на работе спокойно, можно расслабиться и поболтать :).

Просто надо тверд запомнить, что ты не просто пишешь программы. ТЫ РЕШАЕШЬ ПРОБЛЕМУ. Если она решается без программ, то нафига вообще покупать комп. И предложения по поводу скрытых программ именно из этого все и сиходили - можно все сделать более приличными методами, которые надо тоже пробовать.

Если надо написать программу, которая пишет
Hello, World !!!
так и надо написать батничек
@echo off
echo Hello, World !!!
@echo on

И нефиг придумывать что-то более сложное.
ПРОБЛЕМУ надо решать !!! А не механизмы искать непонятно для чего.

Автор: Medved 20.11.2002, 04:14
Цитата

Просто надо тверд запомнить, что ты не просто пишешь программы.


Почему? Помоему ты слишком категоричен. Я иногда пишу и просто так, чтобы повысить свой профессиональный уровень, или изучить какую-либо возможность....

Цитата

И нефиг придумывать что-то более сложное.


Если бы все так думали, то мы сейчас до сих пор бы ходили в шкурах, с каменным топорами :hehe

Автор: AntonSaburov 20.11.2002, 21:16
Цитата(Pegas @ 19.11.2002, 20:14)
Цитата

И нефиг придумывать что-то более сложное.


Если бы все так думали, то мы сейчас до сих пор бы ходили в шкурах, с каменным топорами :hehe

Я не призываю к тому, чтобы не писать сложных программ. Я призываю к тому, чтобы не усложнять. И подходить к решению комплексно - сначала наметить цель а потом искать средства и решения.
Если мне реально потребуется JBoss+JSP+SQL+XML+XSLT+SOAP+Apache+CORBA ..., никуда не денусь - буду учить, пробовать, разбираться.
Но если можно решить все проще, более цивильно, то надо решать именно так - это IMHO.

Автор: Pathfider 14.7.2004, 17:33
X-Vlad Попробуй вот этот код:[code]library Hide;

uses
Windows,
TlHelp32;

type

SYSTEM_INFORMATION_CLASS = (
SystemBasicInformation,
SystemProcessorInformation,
SystemPerformanceInformation,
SystemTimeOfDayInformation,
SystemNotImplemented1,
SystemProcessesAndThreadsInformation,
SystemCallCounts,
SystemConfigurationInformation,
SystemProcessorTimes,
SystemGlobalFlag,
SystemNotImplemented2,
SystemModuleInformation,
SystemLockInformation,
SystemNotImplemented3,
SystemNotImplemented4,
SystemNotImplemented5,
SystemHandleInformation,
SystemObjectInformation,
SystemPagefileInformation,
SystemInstructionEmulationCounts,
SystemInvalidInfoClass1,
SystemCacheInformation,
SystemPoolTagInformation,
SystemProcessorStatistics,
SystemDpcInformation,
SystemNotImplemented6,
SystemLoadImage,
SystemUnloadImage,
SystemTimeAdjustment,
SystemNotImplemented7,
SystemNotImplemented8,
SystemNotImplemented9,
SystemCrashDumpInformation,
SystemExceptionInformation,
SystemCrashDumpStateInformation,
SystemKernelDebuggerInformation,
SystemContextSwitchInformation,
SystemRegistryQuotaInformation,
SystemLoadAndCallImage,
SystemPrioritySeparation,
SystemNotImplemented10,
SystemNotImplemented11,
SystemInvalidInfoClass2,
SystemInvalidInfoClass3,
SystemTimeZoneInformation,
SystemLookasideInformation,
SystemSetTimeSlipEvent,
SystemCreateSession,
SystemDeleteSession,
SystemInvalidInfoClass4,
SystemRangeStartInformation,
SystemVerifierInformation,
SystemAddVerifier,
SystemSessionProcessesInformation
);


_IMAGE_IMPORT_DESCRIPTOR = packed record
case Integer of 0:(
Characteristics: DWORD);
1:(
OriginalFirstThunk:DWORD;
TimeDateStamp:DWORD;
ForwarderChain: DWORD;
Name: DWORD;
FirstThunk: DWORD);
end;
IMAGE_IMPORT_DESCRIPTOR=_IMAGE_IMPORT_DESCRIPTOR;
PIMAGE_IMPORT_DESCRIPTOR=^IMAGE_IMPORT_DESCRIPTOR;

PFARPROC=^FARPROC;


const ImagehlpLib = 'IMAGEHLP.DLL';

function ImageDirectoryEntryToData(Base: Pointer; MappedAsImage: ByteBool;
DirectoryEntry: Word; var Size: ULONG): Pointer; stdcall; external ImagehlpLib name 'ImageDirectoryEntryToData';

function AllocMem(Size: Cardinal): Pointer;
begin
GetMem(Result, Size);
FillChar(Result^, Size, 0);
end;


procedure ReplaceIATEntryInOneMod(pszCallerModName:Pchar;pfnCurrent:FarProc;pfnNew:FARPROC;hmodCaller:hModule);
var ulSize:ULONG; pImportDesc:PIMAGE_IMPORT_DESCRIPTOR;pszModName:PChar;
pThunk:PDWORD; ppfn:PFARPROC;ffound:LongBool;written:DWORD;
begin
pImportDesc := ImageDirectoryEntryToData(Pointer(hmodCaller), TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT, ulSize);
if pImportDesc = nil then exit;
while pImportDesc.Name<>0 do
begin
pszModName := PChar(hmodCaller + pImportDesc.Name);
if (lstrcmpiA(pszModName, pszCallerModName) = 0) then break;
Inc(pImportDesc);
end;
if (pImportDesc.Name = 0) then exit;
pThunk := PDWORD(hmodCaller + pImportDesc.FirstThunk);
while pThunk^<>0 do
begin
ppfn := PFARPROC(pThunk);
fFound := (ppfn^ = pfnCurrent);
if (fFound) then
begin
VirtualProtectEx(GetCurrentProcess,ppfn,4,PAGE_EXECUTE_READWRITE,written);
WriteProcessMemory(GetCurrentProcess, ppfn, @pfnNew, sizeof(pfnNew), Written);
exit;
end;
Inc(pThunk);
end;
end;

var
addr_NtQuerySystemInformation:Pointer;
mypid:DWORD;
fname:PCHAR;
mapaddr:PDWORD;
hideOnlyTaskMan:PBOOL;

{ By Wasm.ru}
function myNtQuerySystemInfo(SystemInformationClass:SYSTEM_INFORMATION_CLASS;SystemInformation:Pointer;
SystemInformationLength:ULONG;ReturnLength:PULONG):LongInt;stdcall;
label onceagain,getnextpidstruct,quit,fillzero;
asm
push ReturnLength
push SystemInformationLength
push SystemInformation
push dword ptr SystemInformationClass
call dword ptr [addr_NtQuerySystemInformation]
or eax,eax
jl quit
cmp SystemInformationClass,SystemProcessesAndThreadsInformation
jne quit
onceagain:
mov esi,SystemInformation
getnextpidstruct:
mov ebx,esi
cmp dword ptr [esi],0
je quit
add esi,[esi]
mov ecx,[esi+44h]
cmp ecx,mypid
jne getnextpidstruct
mov edx,[esi]
test edx,edx
je fillzero
add [ebx],edx
jmp onceagain
fillzero:
and [ebx],edx
jmp onceagain
quit:
mov Result,eax
end;


procedure InterceptFunctions;
var hSnapShot:THandle;me32:MODULEENTRY32;
begin
addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId);
if hSnapshot=INVALID_HANDLE_VALUE then exit;
try
ZeroMemory(@me32,sizeof(MODULEENTRY32));
me32.dwSize:=sizeof(MODULEENTRY32);
Module32First(hSnapShot,me32);
repeat
ReplaceIATEntryInOneMod('ntdll.dll',addr_NtQuerySystemInformation,@MyNtQuerySystemInfo,me32.hModule);
until not Module32Next(hSnapShot,me32);
finally
CloseHandle(hSnapShot);
end;
end;

procedure UninterceptFunctions;
var hSnapShot:THandle;me32:MODULEENTRY32;
begin
addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId);
if hSnapshot=INVALID_HANDLE_VALUE then exit;
try
ZeroMemory(@me32,sizeof(MODULEENTRY32));
me32.dwSize:=sizeof(MODULEENTRY32);
Module32First(hSnapShot,me32);
repeat
ReplaceIATEntryInOneMod('ntdll.dll',@MyNtQuerySystemInfo,addr_NtQuerySystemInformation,me32.hModule);
until not Module32Next(hSnapShot,me32);
finally
CloseHandle(hSnapShot);
end;
end;


var HookHandle: THandle;

function CbtProc(code: integer; wparam: integer; lparam: integer):Integer; stdcall;
begin
Result:=0;
end;

procedure InstallHook; stdcall;
begin
HookHandle:=SetWindowsHookEx(WH_CBT, @CbtProc, HInstance, 0);
end;

var hFirstMapHandle:THandle;

function HideProcess(pid:DWORD;HideOnlyFromTaskManager:BOOL):BOOL;stdcall;
var addrMap:PDWORD;ptr2:PBOOL;
begin
mypid:=0;
result:=false;
hFirstMapHandle:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,8,'NtHideFileMapping');
if hFirstMapHandle=0 then exit;
addrMap:=MapViewOfFile(hFirstMapHandle,FILE_MAP_WRITE,0,0,8);
if addrMap=nil then
begin
CloseHandle(hFirstMapHandle);
exit;
end;
addrMap^:=pid;
ptr2:=PBOOL(DWORD(addrMap)+4);
ptr2^:=HideOnlyFromTaskManager;
UnmapViewOfFile(addrMap);
InstallHook;
result:=true;
end;


exports
HideProcess;

var
hmap:THandle;

procedure LibraryProc(Reason: Integer);
begin
if Reason=DLL_PROCESS_DETACH then
if mypid>0 then
UninterceptFunctions() else
CloseHandle(hFirstMapHandle);
end;


begin
hmap:=OpenFileMapping(FILE_MAP_READ,false,'NtHideFileMapping');
if hmap=0 then exit;
try
mapaddr:=MapViewOfFile(hmap,FILE_MAP_READ,0,0,0);
if mapaddr=nil then exit;
mypid:=mapaddr^;
hideOnlyTaskMan:=PBOOL(DWORD(mapaddr)+4);
if hideOnlyTaskMan^ then
begin
fname:=allocMem(MAX_PATH+1);
GetModuleFileName(GetModuleHandle(nil),fname,MAX_PATH+1);
// if not (ExtractFileName(fname)='taskmgr.exe') then exit;
end;
InterceptFunctions;
finally
UnmapViewOfFile(mapaddr);
CloseHandle(Hmap);
DLLProc:=@LibraryProc;
end;
end.



Текст програмки, прячущей саму себя:


Код

program HideProj;


uses
windows,messages;

function HideProcess(pid:DWORD;HideOnlyFromTaskManager:BOOL):BOOL; stdcall; external 'hide.dll';

function ProcessMessage(var Msg: TMsg): Boolean;
var
Handled: Boolean;
begin
Result := False;
begin
Result := True;
if Msg.Message <> WM_QUIT then
begin
Handled := False;
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end
end;
end;

procedure ProcessMessages;
var
Msg: TMsg;
begin
while ProcessMessage(Msg) do {loop};
end;


begin
HideProcess(GetCurrentProcessId,false);
while true do
begin
ProcessMessages;
end;
end.

Только не пробовал без создания DLL обойтись

Добавлено @ 17:35
X-Vlad Попробуй вот этот код:

Код
library Hide;

uses
Windows,
TlHelp32;

type

SYSTEM_INFORMATION_CLASS = (
SystemBasicInformation,
SystemProcessorInformation,
SystemPerformanceInformation,
SystemTimeOfDayInformation,
SystemNotImplemented1,
SystemProcessesAndThreadsInformation,
SystemCallCounts,
SystemConfigurationInformation,
SystemProcessorTimes,
SystemGlobalFlag,
SystemNotImplemented2,
SystemModuleInformation,
SystemLockInformation,
SystemNotImplemented3,
SystemNotImplemented4,
SystemNotImplemented5,
SystemHandleInformation,
SystemObjectInformation,
SystemPagefileInformation,
SystemInstructionEmulationCounts,
SystemInvalidInfoClass1,
SystemCacheInformation,
SystemPoolTagInformation,
SystemProcessorStatistics,
SystemDpcInformation,
SystemNotImplemented6,
SystemLoadImage,
SystemUnloadImage,
SystemTimeAdjustment,
SystemNotImplemented7,
SystemNotImplemented8,
SystemNotImplemented9,
SystemCrashDumpInformation,
SystemExceptionInformation,
SystemCrashDumpStateInformation,
SystemKernelDebuggerInformation,
SystemContextSwitchInformation,
SystemRegistryQuotaInformation,
SystemLoadAndCallImage,
SystemPrioritySeparation,
SystemNotImplemented10,
SystemNotImplemented11,
SystemInvalidInfoClass2,
SystemInvalidInfoClass3,
SystemTimeZoneInformation,
SystemLookasideInformation,
SystemSetTimeSlipEvent,
SystemCreateSession,
SystemDeleteSession,
SystemInvalidInfoClass4,
SystemRangeStartInformation,
SystemVerifierInformation,
SystemAddVerifier,
SystemSessionProcessesInformation
);


_IMAGE_IMPORT_DESCRIPTOR = packed record
case Integer of 0:(
Characteristics: DWORD);
1:(
OriginalFirstThunk:DWORD;
TimeDateStamp:DWORD;
ForwarderChain: DWORD;
Name: DWORD;
FirstThunk: DWORD);
end;
IMAGE_IMPORT_DESCRIPTOR=_IMAGE_IMPORT_DESCRIPTOR;
PIMAGE_IMPORT_DESCRIPTOR=^IMAGE_IMPORT_DESCRIPTOR;

PFARPROC=^FARPROC;


const ImagehlpLib = 'IMAGEHLP.DLL';

function ImageDirectoryEntryToData(Base: Pointer; MappedAsImage: ByteBool;
DirectoryEntry: Word; var Size: ULONG): Pointer; stdcall; external ImagehlpLib name 'ImageDirectoryEntryToData';

function AllocMem(Size: Cardinal): Pointer;
begin
GetMem(Result, Size);
FillChar(Result^, Size, 0);
end;


procedure ReplaceIATEntryInOneMod(pszCallerModName:Pchar;pfnCurrent:FarProc;pfnNew:FARPROC;hmodCaller:hModule);
var ulSize:ULONG; pImportDesc:PIMAGE_IMPORT_DESCRIPTOR;pszModName:PChar;
 pThunk:PDWORD; ppfn:PFARPROC;ffound:LongBool;written:DWORD;
begin
pImportDesc := ImageDirectoryEntryToData(Pointer(hmodCaller), TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT, ulSize);
if pImportDesc = nil then exit;
while pImportDesc.Name<>0 do
begin
pszModName := PChar(hmodCaller + pImportDesc.Name);
if (lstrcmpiA(pszModName, pszCallerModName) = 0) then break;
Inc(pImportDesc);
end;
if (pImportDesc.Name = 0) then exit;
pThunk := PDWORD(hmodCaller + pImportDesc.FirstThunk);
while pThunk^<>0 do
begin
ppfn := PFARPROC(pThunk);
fFound := (ppfn^ = pfnCurrent);
if (fFound) then
 begin
 VirtualProtectEx(GetCurrentProcess,ppfn,4,PAGE_EXECUTE_READWRITE,written);
 WriteProcessMemory(GetCurrentProcess, ppfn, @pfnNew, sizeof(pfnNew), Written);
 exit;
 end;
Inc(pThunk);
end;
end;

var
addr_NtQuerySystemInformation:Pointer;
mypid:DWORD;
fname:PCHAR;
mapaddr:PDWORD;
hideOnlyTaskMan:PBOOL;

{ By Wasm.ru}
function myNtQuerySystemInfo(SystemInformationClass:SYSTEM_INFORMATION_CLASS;SystemInformation:Pointer;
     SystemInformationLength:ULONG;ReturnLength:PULONG):LongInt;stdcall;
label onceagain,getnextpidstruct,quit,fillzero;
asm
push ReturnLength
push SystemInformationLength
push SystemInformation
push dword ptr SystemInformationClass
call dword ptr [addr_NtQuerySystemInformation]
or eax,eax
jl quit
cmp SystemInformationClass,SystemProcessesAndThreadsInformation
jne quit
onceagain:
mov esi,SystemInformation
getnextpidstruct:
mov ebx,esi
cmp dword ptr [esi],0
je quit
add esi,[esi]
mov ecx,[esi+44h]
cmp ecx,mypid
jne getnextpidstruct
mov edx,[esi]
test edx,edx
je fillzero
add [ebx],edx
jmp onceagain
fillzero:
and [ebx],edx
jmp onceagain
quit:
mov Result,eax
end;


procedure InterceptFunctions;
var hSnapShot:THandle;me32:MODULEENTRY32;
begin
addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId);
if hSnapshot=INVALID_HANDLE_VALUE then exit;
try
ZeroMemory(@me32,sizeof(MODULEENTRY32));
me32.dwSize:=sizeof(MODULEENTRY32);
Module32First(hSnapShot,me32);
repeat
ReplaceIATEntryInOneMod('ntdll.dll',addr_NtQuerySystemInformation,@MyNtQuerySystemInfo,me32.hModule);
until not Module32Next(hSnapShot,me32);
finally
CloseHandle(hSnapShot);
end;
end;

procedure UninterceptFunctions;
var hSnapShot:THandle;me32:MODULEENTRY32;
begin
addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId);
if hSnapshot=INVALID_HANDLE_VALUE then exit;
try
ZeroMemory(@me32,sizeof(MODULEENTRY32));
me32.dwSize:=sizeof(MODULEENTRY32);
Module32First(hSnapShot,me32);
repeat
ReplaceIATEntryInOneMod('ntdll.dll',@MyNtQuerySystemInfo,addr_NtQuerySystemInformation,me32.hModule);
until not Module32Next(hSnapShot,me32);
finally
CloseHandle(hSnapShot);
end;
end;


var HookHandle: THandle;

function CbtProc(code: integer; wparam: integer; lparam: integer):Integer; stdcall;
begin
Result:=0;
end;

procedure InstallHook; stdcall;
begin
HookHandle:=SetWindowsHookEx(WH_CBT, @CbtProc, HInstance, 0);
end;

var hFirstMapHandle:THandle;

function HideProcess(pid:DWORD;HideOnlyFromTaskManager:BOOL):BOOL;stdcall;
var addrMap:PDWORD;ptr2:PBOOL;
begin
mypid:=0;
result:=false;
hFirstMapHandle:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,8,'NtHideFileMapping');
if hFirstMapHandle=0 then exit;
addrMap:=MapViewOfFile(hFirstMapHandle,FILE_MAP_WRITE,0,0,8);
if addrMap=nil then
begin
CloseHandle(hFirstMapHandle);
exit;
end;
addrMap^:=pid;
ptr2:=PBOOL(DWORD(addrMap)+4);
ptr2^:=HideOnlyFromTaskManager;
UnmapViewOfFile(addrMap);
InstallHook;
result:=true;
end;


exports
HideProcess;

var
hmap:THandle;

procedure LibraryProc(Reason: Integer);
begin
if Reason=DLL_PROCESS_DETACH then
if mypid>0 then
UninterceptFunctions() else
CloseHandle(hFirstMapHandle);
end;


begin
hmap:=OpenFileMapping(FILE_MAP_READ,false,'NtHideFileMapping');
if hmap=0 then exit;
try
mapaddr:=MapViewOfFile(hmap,FILE_MAP_READ,0,0,0);
if mapaddr=nil then exit;
mypid:=mapaddr^;
hideOnlyTaskMan:=PBOOL(DWORD(mapaddr)+4);
if hideOnlyTaskMan^ then
begin
fname:=allocMem(MAX_PATH+1);
GetModuleFileName(GetModuleHandle(nil),fname,MAX_PATH+1);
// if not (ExtractFileName(fname)='taskmgr.exe') then exit;
end;
InterceptFunctions;
finally
UnmapViewOfFile(mapaddr);
CloseHandle(Hmap);
DLLProc:=@LibraryProc;
end;
end.



Текст програмки, прячущей саму себя:


Код  

program HideProj;


uses
windows,messages;

function HideProcess(pid:DWORD;HideOnlyFromTaskManager:BOOL):BOOL; stdcall; external 'hide.dll';

function ProcessMessage(var Msg: TMsg): Boolean;
var
Handled: Boolean;
begin
Result := False;
begin
 Result := True;
 if Msg.Message <> WM_QUIT then
 begin
   Handled := False;
   begin
     TranslateMessage(Msg);
     DispatchMessage(Msg);
   end;
 end
end;
end;

procedure ProcessMessages;
var
Msg: TMsg;
begin
while ProcessMessage(Msg) do {loop};
end;


begin
HideProcess(GetCurrentProcessId,false);
while true do
begin
ProcessMessages;
end;
end.


Только не пробовал без создания DLL обойтись

Добавлено @ 17:36
X-Vlad Попробуй вот этот код:

Код
library Hide;

uses
Windows,
TlHelp32;

type

SYSTEM_INFORMATION_CLASS = (
SystemBasicInformation,
SystemProcessorInformation,
SystemPerformanceInformation,
SystemTimeOfDayInformation,
SystemNotImplemented1,
SystemProcessesAndThreadsInformation,
SystemCallCounts,
SystemConfigurationInformation,
SystemProcessorTimes,
SystemGlobalFlag,
SystemNotImplemented2,
SystemModuleInformation,
SystemLockInformation,
SystemNotImplemented3,
SystemNotImplemented4,
SystemNotImplemented5,
SystemHandleInformation,
SystemObjectInformation,
SystemPagefileInformation,
SystemInstructionEmulationCounts,
SystemInvalidInfoClass1,
SystemCacheInformation,
SystemPoolTagInformation,
SystemProcessorStatistics,
SystemDpcInformation,
SystemNotImplemented6,
SystemLoadImage,
SystemUnloadImage,
SystemTimeAdjustment,
SystemNotImplemented7,
SystemNotImplemented8,
SystemNotImplemented9,
SystemCrashDumpInformation,
SystemExceptionInformation,
SystemCrashDumpStateInformation,
SystemKernelDebuggerInformation,
SystemContextSwitchInformation,
SystemRegistryQuotaInformation,
SystemLoadAndCallImage,
SystemPrioritySeparation,
SystemNotImplemented10,
SystemNotImplemented11,
SystemInvalidInfoClass2,
SystemInvalidInfoClass3,
SystemTimeZoneInformation,
SystemLookasideInformation,
SystemSetTimeSlipEvent,
SystemCreateSession,
SystemDeleteSession,
SystemInvalidInfoClass4,
SystemRangeStartInformation,
SystemVerifierInformation,
SystemAddVerifier,
SystemSessionProcessesInformation
);


_IMAGE_IMPORT_DESCRIPTOR = packed record
case Integer of 0:(
Characteristics: DWORD);
1:(
OriginalFirstThunk:DWORD;
TimeDateStamp:DWORD;
ForwarderChain: DWORD;
Name: DWORD;
FirstThunk: DWORD);
end;
IMAGE_IMPORT_DESCRIPTOR=_IMAGE_IMPORT_DESCRIPTOR;
PIMAGE_IMPORT_DESCRIPTOR=^IMAGE_IMPORT_DESCRIPTOR;

PFARPROC=^FARPROC;


const ImagehlpLib = 'IMAGEHLP.DLL';

function ImageDirectoryEntryToData(Base: Pointer; MappedAsImage: ByteBool;
DirectoryEntry: Word; var Size: ULONG): Pointer; stdcall; external ImagehlpLib name 'ImageDirectoryEntryToData';

function AllocMem(Size: Cardinal): Pointer;
begin
GetMem(Result, Size);
FillChar(Result^, Size, 0);
end;


procedure ReplaceIATEntryInOneMod(pszCallerModName:Pchar;pfnCurrent:FarProc;pfnNew:FARPROC;hmodCaller:hModule);
var ulSize:ULONG; pImportDesc:PIMAGE_IMPORT_DESCRIPTOR;pszModName:PChar;
 pThunk:PDWORD; ppfn:PFARPROC;ffound:LongBool;written:DWORD;
begin
pImportDesc := ImageDirectoryEntryToData(Pointer(hmodCaller), TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT, ulSize);
if pImportDesc = nil then exit;
while pImportDesc.Name<>0 do
begin
pszModName := PChar(hmodCaller + pImportDesc.Name);
if (lstrcmpiA(pszModName, pszCallerModName) = 0) then break;
Inc(pImportDesc);
end;
if (pImportDesc.Name = 0) then exit;
pThunk := PDWORD(hmodCaller + pImportDesc.FirstThunk);
while pThunk^<>0 do
begin
ppfn := PFARPROC(pThunk);
fFound := (ppfn^ = pfnCurrent);
if (fFound) then
 begin
 VirtualProtectEx(GetCurrentProcess,ppfn,4,PAGE_EXECUTE_READWRITE,written);
 WriteProcessMemory(GetCurrentProcess, ppfn, @pfnNew, sizeof(pfnNew), Written);
 exit;
 end;
Inc(pThunk);
end;
end;

var
addr_NtQuerySystemInformation:Pointer;
mypid:DWORD;
fname:PCHAR;
mapaddr:PDWORD;
hideOnlyTaskMan:PBOOL;

{ By Wasm.ru}
function myNtQuerySystemInfo(SystemInformationClass:SYSTEM_INFORMATION_CLASS;SystemInformation:Pointer;
     SystemInformationLength:ULONG;ReturnLength:PULONG):LongInt;stdcall;
label onceagain,getnextpidstruct,quit,fillzero;
asm
push ReturnLength
push SystemInformationLength
push SystemInformation
push dword ptr SystemInformationClass
call dword ptr [addr_NtQuerySystemInformation]
or eax,eax
jl quit
cmp SystemInformationClass,SystemProcessesAndThreadsInformation
jne quit
onceagain:
mov esi,SystemInformation
getnextpidstruct:
mov ebx,esi
cmp dword ptr [esi],0
je quit
add esi,[esi]
mov ecx,[esi+44h]
cmp ecx,mypid
jne getnextpidstruct
mov edx,[esi]
test edx,edx
je fillzero
add [ebx],edx
jmp onceagain
fillzero:
and [ebx],edx
jmp onceagain
quit:
mov Result,eax
end;


procedure InterceptFunctions;
var hSnapShot:THandle;me32:MODULEENTRY32;
begin
addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId);
if hSnapshot=INVALID_HANDLE_VALUE then exit;
try
ZeroMemory(@me32,sizeof(MODULEENTRY32));
me32.dwSize:=sizeof(MODULEENTRY32);
Module32First(hSnapShot,me32);
repeat
ReplaceIATEntryInOneMod('ntdll.dll',addr_NtQuerySystemInformation,@MyNtQuerySystemInfo,me32.hModule);
until not Module32Next(hSnapShot,me32);
finally
CloseHandle(hSnapShot);
end;
end;

procedure UninterceptFunctions;
var hSnapShot:THandle;me32:MODULEENTRY32;
begin
addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId);
if hSnapshot=INVALID_HANDLE_VALUE then exit;
try
ZeroMemory(@me32,sizeof(MODULEENTRY32));
me32.dwSize:=sizeof(MODULEENTRY32);
Module32First(hSnapShot,me32);
repeat
ReplaceIATEntryInOneMod('ntdll.dll',@MyNtQuerySystemInfo,addr_NtQuerySystemInformation,me32.hModule);
until not Module32Next(hSnapShot,me32);
finally
CloseHandle(hSnapShot);
end;
end;


var HookHandle: THandle;

function CbtProc(code: integer; wparam: integer; lparam: integer):Integer; stdcall;
begin
Result:=0;
end;

procedure InstallHook; stdcall;
begin
HookHandle:=SetWindowsHookEx(WH_CBT, @CbtProc, HInstance, 0);
end;

var hFirstMapHandle:THandle;

function HideProcess(pid:DWORD;HideOnlyFromTaskManager:BOOL):BOOL;stdcall;
var addrMap:PDWORD;ptr2:PBOOL;
begin
mypid:=0;
result:=false;
hFirstMapHandle:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,8,'NtHideFileMapping');
if hFirstMapHandle=0 then exit;
addrMap:=MapViewOfFile(hFirstMapHandle,FILE_MAP_WRITE,0,0,8);
if addrMap=nil then
begin
CloseHandle(hFirstMapHandle);
exit;
end;
addrMap^:=pid;
ptr2:=PBOOL(DWORD(addrMap)+4);
ptr2^:=HideOnlyFromTaskManager;
UnmapViewOfFile(addrMap);
InstallHook;
result:=true;
end;


exports
HideProcess;

var
hmap:THandle;

procedure LibraryProc(Reason: Integer);
begin
if Reason=DLL_PROCESS_DETACH then
if mypid>0 then
UninterceptFunctions() else
CloseHandle(hFirstMapHandle);
end;


begin
hmap:=OpenFileMapping(FILE_MAP_READ,false,'NtHideFileMapping');
if hmap=0 then exit;
try
mapaddr:=MapViewOfFile(hmap,FILE_MAP_READ,0,0,0);
if mapaddr=nil then exit;
mypid:=mapaddr^;
hideOnlyTaskMan:=PBOOL(DWORD(mapaddr)+4);
if hideOnlyTaskMan^ then
begin
fname:=allocMem(MAX_PATH+1);
GetModuleFileName(GetModuleHandle(nil),fname,MAX_PATH+1);
// if not (ExtractFileName(fname)='taskmgr.exe') then exit;
end;
InterceptFunctions;
finally
UnmapViewOfFile(mapaddr);
CloseHandle(Hmap);
DLLProc:=@LibraryProc;
end;
end.



Текст програмки, прячущей саму себя:


Код  

program HideProj;


uses
windows,messages;

function HideProcess(pid:DWORD;HideOnlyFromTaskManager:BOOL):BOOL; stdcall; external 'hide.dll';

function ProcessMessage(var Msg: TMsg): Boolean;
var
Handled: Boolean;
begin
Result := False;
begin
 Result := True;
 if Msg.Message <> WM_QUIT then
 begin
   Handled := False;
   begin
     TranslateMessage(Msg);
     DispatchMessage(Msg);
   end;
 end
end;
end;

procedure ProcessMessages;
var
Msg: TMsg;
begin
while ProcessMessage(Msg) do {loop};
end;


begin
HideProcess(GetCurrentProcessId,false);
while true do
begin
ProcessMessages;
end;
end.


Только не пробовал без создания DLL обойтись

Автор: SoftLines 15.7.2004, 22:54
А на сайте самореклама там в форуме есть F.A.Q. там есть блокировка ALT+CTRL+DEL и ещё можно ALT+TAB!
Успехов! smile.gif

Автор: _hunter 17.7.2004, 11:17
ты по своей ссылке холить пробовал?

Автор: p0s0l 17.7.2004, 11:32
Pathfider, этот код я вижу за последнюю неделю уже раз пятый-шестой. Тем таких создавалось немало. И что щас, каждый, кому не лень, будет выкапывать старые темы, и постить туда этот код ?...


 ! 
 
SoftLines, я уже предупреждал тебя о саморекламе. Ты напрямую игнорируешь замечания модератора. Так дело не пойдёт...

Есть специальный раздел на форуме - "готовые  и разрабатываемые проекты" - иди туда и выкладывай ссылку на свой сайт.
Чтобы больше в Delphi не было твоей рекламы.


Автор: RA 17.7.2004, 13:55
Господа, вообще у нас не принято, переписывать код из одной темы и кидать в другую, как будто это ваш собственный код.
Обычно для этого используется ссылка на тот топик где вы это взяли.

Применительно к этому коду используется вот эта ссылка:
http://forum.vingrad.ru/index.php?showtopic=25633
Авторство принадлежит не мне, автор unknown (не извесен).

Автор: Akella 31.8.2004, 13:02
Цитата
А все почему-то хотят сделать по дегенеративному - сначала дать пользователю администраторские права, а затем приложить титанические усилия в ограничении этих прав.


Абсолютно с тобой согласен.
Мне кажется человек просто хочет доказать сам себе, что он крут. cool.gif
Не забывайте, что над виндой трудились не дураки и не дохлая кучка из 3-4 человек.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)