Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2008, 15:43   #11
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

объясняю: Form1 - главная форма приложения, чтобы туда попасть нужно ввести пароль на вторичной форме, так вот ее и все приложение можно закрыть таким образом, Главное окно скрыто до тех пор пока не будет правильно введен пароль, поэтому я проверяю Visible окно или нет

Код:
procedure TForm1.WMSYSCOMMAND(var Msg: TMessage);
begin
If not Visible and (msg.WParam and $FFF0=SC_CLOSE) then exit;
inherited;
if (Msg.WParam=SC_MINIMIZE) then Hide;
end;
так вот если в этой процедуре поставить брейкпоинт, то прерывание программы никогда не произойдет, короче в эту процедуру он просто не заходит

поэтому я сейчас судорожно пытаюсь вспомнить какой стиль поставить форме, чтобы она на панели задач вообще не отражалась

P.S. все можно сделать куда проще -
ShowWindow(Application.Handle, SW_HIDE); и на панели задач, равно как и в диспетчере окно не будет светиться только это не исчерпывает тему разговора
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился

Последний раз редактировалось joker; 26.03.2008 в 17:26.
joker вне форума Ответить с цитированием
Старый 26.03.2008, 19:46   #12
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от joker Посмотреть сообщение
объясняю: Form1 - главная форма приложения, чтобы туда попасть нужно ввести пароль на вторичной форме, так вот ее и все приложение можно закрыть таким образом, Главное окно скрыто до тех пор пока не будет правильно введен пароль, поэтому я проверяю Visible окно или нет
joker, если бы Вы сразу так написали, можно было бы не ходить несколько дней вокруг да около. Создавайте окно (в котором вводится пароль) так, чтобы его родителем было главное, скрытое окно. Можно для красоты убрать из него лишние кнопки и системное меню (убрать те стили, которые объединяет WS_OVERLAPPEDWINDOW), хотя это ничего не меняет - если его парентом будет невидимое окно, значит на панели задач его не будет. На C это делается в два счёта, могу выложить листинг. Сама такая "программа" в аттаче. Посмотрите, правильно ли я Вас понял.
Вложения
Тип файла: rar test.rar (15.5 Кб, 9 просмотров)
B_N вне форума Ответить с цитированием
Старый 27.03.2008, 04:37   #13
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

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

как предотвратить показывание главного окна программмы сторонними приложениями
У меня примерно также написаны WMSHOWWINDOW и WMDESTROY, но
окно показывается, несмотря на то, что inherited не выполняется, при этом на окне не видны все компоненты, есть только меню,
а уничтожается оно всегда, несмотря на невыполнение inherited

Как можно узнать, что компьютер действительно выключается, а не какое-то приложение отправило тебе WM_QUERYENDSESSION или даже без QUERY

И если перехватить NtShutdownSystem, защитит ли это от аварийной перезагрузки компа или нет?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 27.03.2008, 14:54   #14
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от joker Посмотреть сообщение
спасибо, я правда уже так сделал, у меня и главное окно тоже на панели задач отсутствует

как предотвратить показывание главного окна программмы сторонними приложениями
У меня примерно также написаны WMSHOWWINDOW и WMDESTROY, но
окно показывается, несмотря на то, что inherited не выполняется, при этом на окне не видны все компоненты, есть только меню,
а уничтожается оно всегда, несмотря на невыполнение inherited

Как можно узнать, что компьютер действительно выключается, а не какое-то приложение отправило тебе WM_QUERYENDSESSION или даже без QUERY
joker, внимательнее читайте документацию по ОС. Все приведенные сообщения - вещи сугубо информационные. Вы можете спокойно возвращать 0 (и даже 1) из WM_ENDSESSION и абсолютно ничего необычного с Вашим приложением не произойдет. Надеятся на WM_SHOWWINDOW или WM_DESTROY тоже не нужно - они являются результатом уже произошедших действий. Конечно, можно вернуть из обработки WM_DESTROY 0 - окно закроется, но предусмотренное по стандарту WM_QUIT Ваше приложение не получит - будет продолжать работать без окна и, скорее всего, делать уже ничего не будет, но это никак не предотвращает возможностей простого завершения самого процесса "со стороны". Что касается видимости/невидимости окна и т.п., не нужно забывать, что такие функции как ShowWindow, SetWindowPos и т.п. и даже SetWindowLong в процессе своей работы всё же "просят" у окна уточнений параметров через такие сообщения как WM_WINDOWPOSCHANGING или WM_STYLECHANGING.
Цитата:
Сообщение от joker Посмотреть сообщение
И если перехватить NtShutdownSystem, защитит ли это от аварийной перезагрузки компа или нет?
А что есть "аварийная перезагрузка"?
Во-первых, перехваты Native API воспринимаются как крайне враждебное действие со стороны хороших HIPS'ов или антивирусов, кроме того этому может препятствовать политика безопасности. Строго говоря, средства администрирования позволяют запретить завершение работы, например, для обычных пользователей. Во-вторых нужно помнить, что функции в ntdll.dll существуют для "удобства работы" - при желании ничего не стоит обратиться к системным сервисам напрямую, а всё, что происходит в User Mode - это "войны в песочнице" - Ваш процесс в любой момент может быть приостановлен, изменен до неузнаваемости или просто уничтожен тем, что работает в нулевом кольце. В крайнем случае система может быть просто остановлена через KeBugCheckEx - и Ваше приложение никогда об этом не узнает. Не знаю, что именно Вы хотите изобразить, но для того, что Вы указали, по-моему, пока достаточно просто грамотно организовать обработку WM_STYLECHANGING и, может быть, WM_WINDOWPOSCHANGING и наложить какие-то дополнительные условия и проверки на стандартное закрытие окон.

Последний раз редактировалось B_N; 27.03.2008 в 14:57.
B_N вне форума Ответить с цитированием
Старый 27.03.2008, 16:21   #15
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

скажем так, тем, кому нужно будет мое приложение просто добавят его в доверенную зону, к тому же то же юзермодное скрытие процесса перехватом ZwQuerySystemInformation никто не отменял

Переход в нулевое кольцо через шлюз стал приводить к аварийной перезагрузке компа, каспер 6-ой версии постоянно так делает (остальные популярные антивири тоже переняли эту привычку), даже не высвечивая никаких предупреждений, видимо нет у него времени отвлекаться, надо спасать компьютер от вторжения :-)

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

Насколько я понял изменение обработиков WM_SHOWWINDOW и WM_DESTROY ничего не даст, есть ли юзермодные способы избавиться от принудительного показа окна другими приложениями (фантазия: типа проверить от кого пришло, если от себя, то разрешить :-)) и от уничтожения/закрытия окна, если только комп реально не выключается/перезагружается?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 27.03.2008, 17:01   #16
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от joker Посмотреть сообщение
скажем так, тем, кому нужно будет мое приложение просто добавят его в доверенную зону,
Это вопрос очень спорный и индивидуальный. Лично я, скажем, могу об этом лишь подумать только после изучения таблицы импортов, прогона в полной изоляции и т.п. А прежде всего возникает вопрос, а зачем, собственно, какому-нибудь калькулятору хук на нэтив апи? Если же "нечто" упаковано какой-нибудь дрянью, как сейчас модно, то даже не стану тратить времени на распаковку - F8 без дальнейших разговоров.

Цитата:
Сообщение от joker Посмотреть сообщение
к тому же то же юзермодное скрытие процесса перехватом ZwQuerySystemInformation никто не отменял
Это абсолютная ерунда - причину я привёл выше: "функции в ntdll.dll существуют для \"удобства работы\" - при желании ничего не стоит обратиться к системным сервисам напрямую", INT 2EH пока не подводил.

Цитата:
Сообщение от joker Посмотреть сообщение
Переход в нулевое кольцо через шлюз стал приводить к аварийной перезагрузке компа, каспер 6-ой версии постоянно так делает (остальные популярные антивири тоже переняли эту привычку), даже не высвечивая никаких предупреждений, видимо нет у него времени отвлекаться, надо спасать компьютер от вторжения :-)
Эээ.... уточните...


Цитата:
Сообщение от joker Посмотреть сообщение
Насколько я понял изменение обработиков WM_SHOWWINDOW и WM_DESTROY ничего не даст, есть ли юзермодные способы избавиться от принудительного показа окна другими приложениями (фантазия: типа проверить от кого пришло, если от себя, то разрешить :-)) и от уничтожения/закрытия окна, если только комп реально не выключается/перезагружается?
Вам и карты в руки. Стройте "показ" окна на каких-то условиях,
Код:
//...........................
//...........................
	case WM_WINDOWPOSCHANGING:
		if( SOMETHING_TRUE ){
			((LPWINDOWPOS) lParam)->flags &= ~SWP_SHOWWINDOW;
			((LPWINDOWPOS) lParam)->flags |= SWP_HIDEWINDOW;
			
			return 0;
		}
		break;
//...........................
//...........................
И всё - нету никакого окна.... А от уничтожения процесса Вы в третьем кольце не спрячетесь.
B_N вне форума Ответить с цитированием
Старый 28.03.2008, 04:48   #17
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

короче, прога предполагает, то, что ставится она будет на всей машине, а работа на компах в основном происходит под ограниченной учетной записью, а SetSecurityAtributes и DACL=2 + скрытый процесс должны задержать предполагаемых злоумышленников, поэтому меня больше беспокоит принудительный показ главного окна

насчет нулевого кольца, то у меня 6-ой каспер и на других компах с другими антивирусами при пользовании MS-REMовским ring0.pas (с WASM)перезагружается комп на функции InitializeRing0Library, причем без разницы через CALL_GATE или DRIVER_GATE
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 28.03.2008, 19:34   #18
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от joker Посмотреть сообщение
короче, прога предполагает, то, что ставится она будет на всей машине, а работа на компах в основном происходит под ограниченной учетной записью, а SetSecurityAtributes и DACL=2 + скрытый процесс должны задержать предполагаемых злоумышленников, поэтому меня больше беспокоит принудительный показ главного окна
joker, как избавиться от "принудительного показа" я показывал в предыдущем посте. Разве не работает? Кроме того:
1. Можно создавать окно только тогда, кода нужно его показывать.
2. Создавать (под NT5) "message-only" окно (дочернее для HWND_MESSAGE).
3. Создавать окно на другом десктопе.
4. Работать в другой оконной станции.
5. Работать неинтерактивной службой.
6. Вообще не создавать окно (зачем оно, если никто не должен его видеть!!?) и работать через синхронизацию.
7. и т.д.
Миллион вариантов, не понимаю в чем сложности... А скрытие процесса в третьем кольце - это чепуха. Если хотите, проверьте программкой в аттаче, правда мне не хотелось долго возиться и я сделал её только под XP , даже FAR многие такие вещи видит...
Цитата:
Сообщение от joker Посмотреть сообщение
насчет нулевого кольца, то у меня 6-ой каспер и на других компах с другими антивирусами при пользовании MS-REMовским ring0.pas (с WASM)перезагружается комп на функции InitializeRing0Library, причем без разницы через CALL_GATE или DRIVER_GATE
К счастью, по всей видимости, не знаком с данной библиотекой. Сочетание "Ring0" и "pas" меня лично вообще очень смущает. А уж что там может валить машину.... Да всё, что угодно, скажите хотя бы, какой багчек и в каком модуле. Бросьте Вы эти мучения, напишите нормальный драйвер да и всё. Переписывание SSDT за 15 лет обсосали уже до косточек, там вообще никаких проблем нет.
Вложения
Тип файла: rar rkdetect1.rar (16.5 Кб, 13 просмотров)
B_N вне форума Ответить с цитированием
Старый 29.03.2008, 07:45   #19
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
Смех

спасибо за архивчик и

простите меня:
за мое неадекватное юношеское рвение и "игры в песочнице", возраст еще позволяет,

за мое неуважение к Мастеру и самодурство темного человека

мы люди темные, маленькие, лишь изредка рыла из панциря высовываем и злимся только на все, что вокруг, прячемся назад в уютный кокон

Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Че-то странное .... ~Brilliant~ Безопасность, Шифрование 9 27.04.2009 13:57
закрытие вкладки в TTabControl Shade Помощь студентам 3 06.02.2009 13:10
Закрытие программы Zloy_Doomer Общие вопросы Delphi 3 23.06.2008 19:08
Странное поведение ПОИСКПОЗ ZORRO2005 Microsoft Office Excel 5 19.05.2008 14:02
Закрытие приложения Лёка Общие вопросы Delphi 7 09.03.2008 15:50