Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Блокировка клавиш Ctrl+Alt+Del в XP Добавлено: 27.09.03 11:54  

Автор вопроса:  Mikhail | Web-сайт: www.counterslab.com

Можно ли заблокировать клавиши Ctrl+Alt+Del в XP или Win2000?

Если кому-нибудь что-то известно, сообщите, пожалуйста - век буду благодарен!

Потом сочтёмся :)

С уважением, Михаил Максимов.

support@counterslab.com

Ответить

  Ответы Всего ответов: 14  

Номер ответа: 1
Автор ответа:
 E-Man



Вопросов: 3
Ответов: 132
 Профиль | | #1 Добавлено: 27.09.03 20:35

Где-то в дебрях System32 лежит TaskMgr.exe Замени на пустышку. Вот только надо обойти систему восстановления системных файлов. (сорри за такой слоган)))

В общем в папку с резервными копиями запихнуть тоже левый файл. Я так делал.

Ответить

Номер ответа: 2
Автор ответа:
 Mikhail



Вопросов: 2
Ответов: 3
 Web-сайт: www.counterslab.com
 Профиль | | #2
Добавлено: 28.09.03 10:57

Добрый день, E-Man!

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

Может быть есть способ убрать свою прогу (VB5) из списка XP-менеджера задач (Ctrl+Alt+Del), как это легко делается в Win98?

Для меня это было бы ещё лучше, чем блокировка. Очень буду благодарен, если кто-нибудь что-то присоветует толковое: к любой своей программке ( http://www.counterslab.com/rus/ ) с удовольствием вышлю ключик, если какая приглянется J

С уважением, Михаил.

Ответить

Номер ответа: 3
Автор ответа:
 E-Man



Вопросов: 3
Ответов: 132
 Профиль | | #3 Добавлено: 28.09.03 13:56

Позволит. Только если в системе не отключено восстановление системы (блин, неудачно выразился, но ладно), придется заменить еще и резервную копию программы taskmgr.exe, которая лежит в system32\dllcache. А то XP их начнет сравнивать и легко убедится в том, что taskmgr из system32 не соответстует резервной копии оригинала в dllcache.. И естественно попробует это дело исправить. То есть восстановить taskmgr в system32 из dllcache.. Ну то есть замени taskmgr и там и там. Чтобы различий не было и винда не порывалась это исправить.

Ответить

Номер ответа: 4
Автор ответа:
 Hydralisk



Вопросов: 5
Ответов: 13
 Профиль | | #4 Добавлено: 29.09.03 07:41

Много вижу таких вопросов, но сам никогда не сталкивался. Предлагаю решение - ищем по имени заголовка окна (в данном случае "Диспетчер задач Windows") , его хендл и по хендлу закрываем. Искать нужно по таймеру, т.е. скажем каждые 500 мс. Еще есть вариант номер 2 , но более трудоемкий ;)

Получаем текущий список процессов и делаем СВОЙ таск менеджер , отображаем в нем все процессы кроме нашей проги ну и ессно делаем его максимально похожим на оригинал. после чего заменяем оригинальный на свой, и никто ничего не заподозрит - и программу вашу невидно :)

Ответить

Номер ответа: 5
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #5
Добавлено: 29.09.03 10:42
Это всё полная ерунда. Почему? Потому что процессы может показывать не
только стандартный таск мэнеджер, но и куча других программ сторонних
производителей. Я сам таких не видел, но знающие люди рассказывали,
что даже Far это умеет. Поэтому такой способ решения продвинутого
юзера не остановит.
Кстати, этот вопрос здесь уже неоднократно обсуждался.

Ответить

Номер ответа: 6
Автор ответа:
 Mikhail



Вопросов: 2
Ответов: 3
 Web-сайт: www.counterslab.com
 Профиль | | #6
Добавлено: 29.09.03 12:00

Добрый день, E-Man!

Поэкспериментировал я с TaskMgr.exe и понял, что для меня он не подходит, т.к. будет работать не всегда всё зависит от настроек Windows. В определённых случаях Win сразу начинает верещат, заметив подмену. Буду искать что-то более приемлемое

С уважением, Михаил.

Ответить

Номер ответа: 7
Автор ответа:
 E-Man



Вопросов: 3
Ответов: 132
 Профиль | | #7 Добавлено: 30.09.03 09:38
Доброго времени суток, Михаил. Есть альтернативный вариант.
Эта проблема решается при помощи написания программы-сервиса под WinNT.
Тогда Ваша программа не будет видна в списке TaskManager'а. Но это очень трудоемкий
процесс. Объясните какую программу Вы хотите написать, может тогда я смогу
подсказать Вам что-либо более определенное.

Ответить

Номер ответа: 8
Автор ответа:
 E-Man



Вопросов: 3
Ответов: 132
 Профиль | | #8 Добавлено: 30.09.03 09:41

2 Hydralisk

Вариант три)) Получаем идентификатор листбокса в таскменеджере и посылаем ему мессаги,

заставляя искать и убирать "пунктик" насчет нашей проги.. Неизящно, но к слову о

вариантах..

Но, как уже сказал уважаемый Павел, все это ерунда..

Ответить

Номер ответа: 9
Автор ответа:
 Hydralisk



Вопросов: 5
Ответов: 13
 Профиль | | #9 Добавлено: 30.09.03 11:51

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

Ответить

Номер ответа: 10
Автор ответа:
 Mikhail



Вопросов: 2
Ответов: 3
 Web-сайт: www.counterslab.com
 Профиль | | #10
Добавлено: 30.09.03 15:19

Добрый день, E-Man!

Пишу я очередную версию свой программы Internet Connection Counter (ICC) - учет трафика, времени и денег при работе в Интернете (dial-up или GPRS удалённый доступ). Для пробы можете взять на моём сайте http://www.counterslab.com/rus . Если решите, что она Вам пригодится в хозяйстве, то я с удовольствием вышлю ключик – Вы уже достаточно много времени потратили на мою проблему J

Насчёт программы-сервиса под WinNT – это очень хорошая мысль, она уже приходила мне в голову, но я совершенно не знаю с какого боку подходить для её реализации. В этом случае решилась бы более важная, чем Ctrl+Alt+Del, для меня проблема – я бы смог интегрировать свой ICC в систему, т.е. автоматический его запуск при попытке установить какое-либо IE-удалённое соединение, а то пользователи жалуются, что забывают запускать ICC вручную, а запускать ICC вместе с Windows не хотят в целях рационального использования ресурсов, и их можно понять. В Win 98 мне, кажется, удалось это сделать при помощи написания на C++ своей dll-ки и указания на ее расположение в ключе реестра HKEY_CURRENT_USER\RemoteAccess\Profile\Xxxx (имя соединения), а в XP и 2000-ом этот способ не работает

А удаление ICC из списка диспетчера задач (Ctrl+Alt+Del) мне понадобилось, потому что, выполняя просьбу пользователей, делаю доступ к программным настройкам через пароль, чтобы не все могли беспрепятственно выгружать ICC из памяти и т.п. Это в основном детей касается. В Win 98 мне это удалось достаточно легко сделать, а в Win с ядром NT опять же нет.
С уважением, Михаил.

Ответить

Номер ответа: 11
Автор ответа:
 Silent_Sky



ICQ: 134433 

Вопросов: 25
Ответов: 44
 Профиль | | #11 Добавлено: 01.10.03 10:18

Насчет заблокировать - не знаю, но скрыть из списка задач и процессов свою программу реально, по крайней мере в WIN2000 .. Один парень делал с помощью АПИ но правда на Билдере... я не думаю что нельзя этот код пересобачить на VB. Так что если надо то могу узнать.

Ответить

Номер ответа: 12
Автор ответа:
 ZeroX



ICQ: 220401330 

Вопросов: 47
Ответов: 406
 Профиль | | #12 Добавлено: 01.10.03 11:10
Давай узнавай

Ответить

Номер ответа: 13
Автор ответа:
 Silent_Sky



ICQ: 134433 

Вопросов: 25
Ответов: 44
 Профиль | | #13 Добавлено: 02.10.03 14:13

Вот узнал... есть исходники но на сях..... а вот само описание:

СОКРЫТИЕ ПРОЦЕССА ОТ ФУНКЦИИ NtQuerySystemInformation В WINDOWS 2000/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, подставляя вместо нужного файла "..".

Ответить

Номер ответа: 14
Автор ответа:
 Silent_Sky



ICQ: 134433 

Вопросов: 25
Ответов: 44
 Профиль | | #14 Добавлено: 02.10.03 14:17

Мдяяяяя...... ну и видок конечно стал...... интересно тут <pre> будет работать ? Короче кому если надо тот поймет написанное выше :)  и приведет в нормальный вид :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам