информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetSpanning Tree Protocol: недокументированное применениеСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 700 с лишним git-серверов пострадало... 
 От повторного пришествия Шаи-Хулуда... 
 Крупный сбой Azure и других сервисов... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
?? 21.03.02 00:43  Число просмотров: 1190
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
Давно на старом форуме этот вопрос обсуждался, что хук всегда должен быть в DLL (активное участие в обсуждении принимала irka)
Чтобы хук работал в чужом процессе, винда должна спроецировать DLL с хуком в этот чужой процесс, а если хук не в DLL, то она просто не сможет этого сделать.
Можно попробовать придать .exe-шнику вид .dll: переключить 1 бит в PE-заголовке (file is DLL) и WinMain подправить, чтобы пределять, вызвана ли WinMain в результате запуска .exe или загрузки/выгрузки .dll. Еще у LibMain и WinMain разное число параметров, так что при возврате из LibMain/WinMain положено снимать со стека разное число двойных слов.
А вообще непонятно, почему в Win95 это работает...
<programming>
[win32] w2k, setwindowshookex(wh_keyboard..). сбрасывающийся хук. 20.03.02 10:38  
Автор: KMiNT21 <http://blog.kmint21.com> Статус: Member
<"чистая" ссылка>
Система - Win2000.
MSVC 6.0, pure API.
Имеется exe с экспортом функции keyproc для "захучивания" клавиатуры.
Т.е. он себя же использует как dll одновременно.
Для отладки загоняю в keyproc MessageBox.
Запускаем прогу. Давим на клавиши - все ОК. m-box-ы появляются.
Как только пробуем нажать что-нибудь в другом окне(активизируем другое), хук слетает.
И все... безвозвратно..........

(Хук устанавливается ВСЕГДА нормально)

В чем может быть дело???

http://www.uinc.ru/forum
Забыл добавить еще кое-что. 20.03.02 11:03  
Автор: KMiNT21 <http://blog.kmint21.com> Статус: Member
<"чистая" ссылка>
> Система - Win2000.
> MSVC 6.0, pure API.
> Имеется exe с экспортом функции keyproc для "захучивания"
> клавиатуры.
> Т.е. он себя же использует как dll одновременно.
> Для отладки загоняю в keyproc MessageBox.
> Запускаем прогу. Давим на клавиши - все ОК. m-box-ы
> появляются.
> Как только пробуем нажать что-нибудь в другом
> окне(активизируем другое), хук слетает.
> И все... безвозвратно..........
>
> (Хук устанавливается ВСЕГДА нормально)
>
> В чем может быть дело???


Забыл добавить еще кое-что.

- Под Win95 все отлично работает.
- После сброса хука процесс остается работать.
- "Лишних" UnHook-ов нет.
- И с LoadLibrary, GetProcAddr, SetWindowsHookEx все в порядке.
- В SetWindowsHookEx предедаю по хендлу "dll" - (..,hLib,NULL)


http://www.uinc.ru/forum
?? 20.03.02 16:43  
Автор: KMiNT21 <http://blog.kmint21.com> Статус: Member
<"чистая" ссылка>
?? 21.03.02 00:43  
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
Давно на старом форуме этот вопрос обсуждался, что хук всегда должен быть в DLL (активное участие в обсуждении принимала irka)
Чтобы хук работал в чужом процессе, винда должна спроецировать DLL с хуком в этот чужой процесс, а если хук не в DLL, то она просто не сможет этого сделать.
Можно попробовать придать .exe-шнику вид .dll: переключить 1 бит в PE-заголовке (file is DLL) и WinMain подправить, чтобы пределять, вызвана ли WinMain в результате запуска .exe или загрузки/выгрузки .dll. Еще у LibMain и WinMain разное число параметров, так что при возврате из LibMain/WinMain положено снимать со стека разное число двойных слов.
А вообще непонятно, почему в Win95 это работает...
?? №2 21.03.02 11:29  
Автор: KMiNT21 <http://blog.kmint21.com> Статус: Member
<"чистая" ссылка>
> Можно попробовать придать .exe-шнику вид .dll: переключить
> 1 бит в PE-заголовке (file is DLL) и WinMain подправить,

Ну есть просто хеадер подправить, но загрузщик в Win2k скажет что это не EXE (или что-то в этом роде).


> чтобы пределять, вызвана ли WinMain в результате запуска
> .exe или загрузки/выгрузки .dll. Еще у LibMain и WinMain
> разное число параметров, так что при возврате из
> LibMain/WinMain положено снимать со стека разное число
> двойных слов.

Да, это мысль.

> А вообще непонятно, почему в Win95 это работает...

А мне вообще не до конца ясноконкретнаяпричина необходимости быть хук-коду в DLL. Разве нельзя настроить сегменты в EXE так, чтобы он так же нормально проецировался на процессы? Ну если дело в DllEntryPoint, то почему же в 9x пашет?
Че-то я запутался...
?? №2 21.03.02 22:33  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
> > А вообще непонятно, почему в Win95 это работает...
Не понятно...

> А мне вообще не до конца ясноконкретнаяпричина
> необходимости быть хук-коду в DLL. Разве нельзя настроить
> сегменты в EXE так, чтобы он так же нормально проецировался
> на процессы? Ну если дело в DllEntryPoint, то почему же в
> 9x пашет?
> Че-то я запутался...
Причина быть в dll понятна - как можно загрузить процесс в процесс. Хотя, конечно можно и загрузить, но зачем MS лишняя морока.
Короче не морочь голову себе - обработчик хука должен быть в dll там его и помести.
Ну это все понятно. Вот если бы кто рассказал подробно процесс весь - какую послед. действий делает загрузщик (на низком уровне - т.е. что за флаги проверяет, в какой момент выделяет память в процессе под dll, когда релоки пересчитывает и т.д.) 22.03.02 10:41  
Автор: KMiNT21 <http://blog.kmint21.com> Статус: Member
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach