Gui hooks
От: Аноним  
Дата: 26.01.11 00:56
Оценка:
Здравствуйте, у меня вопрос: у меня есть моя программа, можно ее как-то защитить от гуи хуков? то есть чтобы в мое АП не подгружались dll от хуков?

Заранее спасибо за любую инфу!
Re: Gui hooks
От: CEMb  
Дата: 26.01.11 07:38
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, у меня вопрос: у меня есть моя программа, можно ее как-то защитить от гуи хуков? то есть чтобы в мое АП не подгружались dll от хуков?


А>Заранее спасибо за любую инфу!


Просто мысль: хуковые dll-ки вроде грузятся через LoadLibrary(A/W), можно локально перехватить API-вызов LoadLibrary и на входе анализировать, что за длл-ина к нам цепляется... Можно в этих целях попробовать полазить по стеку вызова и посмотреть, что там бывает, когда хук ставят. У меня подозрение, что там должно быть что-то одинаковое для всех устанавливаемых хуков. Правда, затачиваться на такие вещи опасненько, даже в рамках одной версии операционки.
Сам не смотрел.
Re[2]: Gui hooks
От: ononim  
Дата: 26.01.11 10:02
Оценка: +1
CEM>Просто мысль: хуковые dll-ки вроде грузятся через LoadLibrary(A/W), можно локально перехватить API-вызов LoadLibrary и на входе анализировать, что за длл-ина к нам цепляется... Можно в этих целях попробовать полазить по стеку вызова и посмотреть, что там бывает, когда хук ставят. У меня подозрение, что там должно быть что-то одинаковое для всех устанавливаемых хуков. Правда, затачиваться на такие вещи опасненько, даже в рамках одной версии операционки.
CEM>Сам не смотрел.
да, только LoadLibraryExW — именно таким образом я в одном (секурити) продукте сделал защиту от этих хуков — пропатчил IAT user32.dll, подменив импорт LoadLibraryExW
Как много веселых ребят, и все делают велосипед...
Re: Gui hooks
От: Pavel Dvorkin Россия  
Дата: 26.01.11 11:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, у меня вопрос: у меня есть моя программа, можно ее как-то защитить от гуи хуков? то есть чтобы в мое АП не подгружались dll от хуков?


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


SetWindowsHookEx
WH_DEBUG

The DebugProc hook procedure is an application-defined or library-defined callback function used with the SetWindowsHookEx function. The system calls this function before calling the hook procedures associated with any type of hook. The system passes information about the hook to be called to the DebugProc hook procedure, which examines the information and determines whether to allow the hook to be called.
With best regards
Pavel Dvorkin
Re[2]: Gui hooks
От: ononim  
Дата: 26.01.11 12:22
Оценка: +1
PD>SetWindowsHookEx
PD>WH_DEBUG
Вот только им не запретишь срабатывание другого WH_DEBUG хука
Как много веселых ребят, и все делают велосипед...
Re[3]: Gui hooks
От: Pavel Dvorkin Россия  
Дата: 26.01.11 12:42
Оценка:
Здравствуйте, ononim, Вы писали:

PD>>SetWindowsHookEx

PD>>WH_DEBUG
O>Вот только им не запретишь срабатывание другого WH_DEBUG хука

Хм.

Вообще-то в списке контролируемых хуков WH_DEBUG есть. То есть вроде как можно запретить / разрешить и его, иначе они разрешат/ запретят тебя . Что-то тут шизофреничное, верно
With best regards
Pavel Dvorkin
Re[3]: Gui hooks
От: CEMb  
Дата: 26.01.11 15:47
Оценка:
Здравствуйте, ononim, Вы писали:

CEM>>Просто мысль: хуковые dll-ки вроде грузятся через LoadLibrary(A/W), можно локально перехватить API-вызов LoadLibrary и на входе анализировать, что за длл-ина к нам цепляется... Можно в этих целях попробовать полазить по стеку вызова и посмотреть, что там бывает, когда хук ставят. У меня подозрение, что там должно быть что-то одинаковое для всех устанавливаемых хуков. Правда, затачиваться на такие вещи опасненько, даже в рамках одной версии операционки.

CEM>>Сам не смотрел.
O>да, только LoadLibraryExW — именно таким образом я в одном (секурити) продукте сделал защиту от этих хуков — пропатчил IAT user32.dll, подменив импорт LoadLibraryExW

Ага, стало быть, оно работает!

Я просто боялся, что не получится из-за такой штуки, что нельзя перехватить api-вызовы библиотеки из самой себя, потому что она никогда не пользуется своим экспортируемыми функциями (я просто на вскидку не помнил откуда родом SetWindowsHookEx и LoadLibrary).

Или есть способ?
Re[4]: Gui hooks
От: ononim  
Дата: 26.01.11 18:01
Оценка:
CEM>Я просто боялся, что не получится из-за такой штуки, что нельзя перехватить api-вызовы библиотеки из самой себя, потому что она никогда не пользуется своим экспортируемыми функциями (я просто на вскидку не помнил откуда родом SetWindowsHookEx и LoadLibrary).
CEM>Или есть способ?
способ есть, но он тут не нужен
Как много веселых ребят, и все делают велосипед...
Re[5]: Gui hooks
От: CEMb  
Дата: 27.01.11 03:06
Оценка:
Здравствуйте, ononim, Вы писали:

CEM>>Я просто боялся, что не получится из-за такой штуки, что нельзя перехватить api-вызовы библиотеки из самой себя, потому что она никогда не пользуется своим экспортируемыми функциями (я просто на вскидку не помнил откуда родом SetWindowsHookEx и LoadLibrary).

CEM>>Или есть способ?
O>способ есть, но он тут не нужен
Тут не нужен. А какой?
Re: Gui hooks
От: x64 Россия http://x64blog.name
Дата: 27.01.11 03:10
Оценка: 2 (2)
А>Здравствуйте, у меня вопрос: у меня есть моя программа, можно ее как-то защитить от гуи хуков? то есть чтобы в мое АП не подгружались dll от хуков?

Ну, про блокировку LoadLibraryEx() уже написали, но если уж хочется абсолютной секурности и защиты от любых левых .dll, не только UI-хуков, тогда придётся учесть, что левые модули могут быть подгружены ещё при запуске процесса, при чём очень разными способами (user init dlls, policy dlls, etc.). А тут уже прямая дорога к написанию драйвера-перехватчика загружаемых модулей.
JID: x64j@jabber.ru
Re: Gui hooks
От: okman Беларусь https://searchinform.ru/
Дата: 27.01.11 08:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, у меня вопрос: у меня есть моя программа, можно ее как-то защитить от гуи хуков? то есть чтобы в мое АП не подгружались dll от хуков?


А>Заранее спасибо за любую инфу!


Можно попробовать (сам не проверял) использовать WaitForDebugEvent (LOAD_DLL_DEBUG_INFO).
Разумеется, запускать само приложение придется с флагом DEBUG_PROCESS.
Re[6]: Gui hooks
От: ononim  
Дата: 27.01.11 08:30
Оценка:
CEM>>>Я просто боялся, что не получится из-за такой штуки, что нельзя перехватить api-вызовы библиотеки из самой себя, потому что она никогда не пользуется своим экспортируемыми функциями (я просто на вскидку не помнил откуда родом SetWindowsHookEx и LoadLibrary).
CEM>>>Или есть способ?
O>>способ есть, но он тут не нужен
CEM>Тут не нужен. А какой?
Сплайсинг
Как много веселых ребят, и все делают велосипед...
Re[7]: Gui hooks
От: CEMb  
Дата: 27.01.11 11:31
Оценка:
Здравствуйте, ononim, Вы писали:

CEM>>>>Я просто боялся, что не получится из-за такой штуки, что нельзя перехватить api-вызовы библиотеки из самой себя, потому что она никогда не пользуется своим экспортируемыми функциями (я просто на вскидку не помнил откуда родом SetWindowsHookEx и LoadLibrary).

CEM>>>>Или есть способ?
O>>>способ есть, но он тут не нужен
CEM>>Тут не нужен. А какой?
O>Сплайсинг
А адрес функции как получить? GetProcAddr не вернёт адреса внутренних функций библиотеки.
К примеру, FillRect в свою очередь вызывает какую-нибудь FillRectInternal, адрес которой в таблице экспорта отсутствует. И перехват FillRect с точки зрения gdi32.dll ничего не меняет — она всегда красит рект напрямую, через FillRectInternal.
Re[8]: Gui hooks
От: ononim  
Дата: 27.01.11 15:17
Оценка:
CEM>>>>>Я просто боялся, что не получится из-за такой штуки, что нельзя перехватить api-вызовы библиотеки из самой себя, потому что она никогда не пользуется своим экспортируемыми функциями (я просто на вскидку не помнил откуда родом SetWindowsHookEx и LoadLibrary).
CEM>>>>>Или есть способ?
O>>>>способ есть, но он тут не нужен
CEM>>>Тут не нужен. А какой?
O>>Сплайсинг
CEM>А адрес функции как получить? GetProcAddr не вернёт адреса внутренних функций библиотеки.
Как-нибудь так...
Как много веселых ребят, и все делают велосипед...
Re[9]: Gui hooks
От: CEMb  
Дата: 27.01.11 18:38
Оценка:
Здравствуйте, ononim, Вы писали:

CEM>>>>>>Я просто боялся, что не получится из-за такой штуки, что нельзя перехватить api-вызовы библиотеки из самой себя, потому что она никогда не пользуется своим экспортируемыми функциями (я просто на вскидку не помнил откуда родом SetWindowsHookEx и LoadLibrary).

CEM>>>>>>Или есть способ?
O>>>>>способ есть, но он тут не нужен
CEM>>>>Тут не нужен. А какой?
O>>>Сплайсинг
CEM>>А адрес функции как получить? GetProcAddr не вернёт адреса внутренних функций библиотеки.
O>Как-нибудь так...
Как? Есть формализованный метод?
Re[10]: Gui hooks
От: ononim  
Дата: 27.01.11 20:14
Оценка: :)
CEM>>>>>>>Или есть способ?
O>>>>>>способ есть, но он тут не нужен
CEM>>>>>Тут не нужен. А какой?
O>>>>Сплайсинг
CEM>>>А адрес функции как получить? GetProcAddr не вернёт адреса внутренних функций библиотеки.
O>>Как-нибудь так...
CEM>Как? Есть формализованный метод?
И да и нет. Если функция не эукспортируется, то можно воспользоваться информацией из .pdb если таковая есть. Если нету — поиск по сигнатурам, ну можно чутарь эвристики
Как много веселых ребят, и все делают велосипед...
Re[2]: Gui hooks
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 28.01.11 19:46
Оценка:
Здравствуйте, x64, Вы писали:

А>>Здравствуйте, у меня вопрос: у меня есть моя программа, можно ее как-то защитить от гуи хуков? то есть чтобы в мое АП не подгружались dll от хуков?


x64>Ну, про блокировку LoadLibraryEx() уже написали, но если уж хочется абсолютной секурности и защиты от любых левых .dll, не только UI-хуков, тогда придётся учесть, что левые модули могут быть подгружены ещё при запуске процесса, при чём очень разными способами (user init dlls, policy dlls, etc.). А тут уже прямая дорога к написанию драйвера-перехватчика загружаемых модулей.

...ага. И тогда уж сразу отправить в Способ принудительной загрузки DLL в адресное пространство процесса
Автор: Сторожевых Сергей
Дата: 14.11.07
.

PS Кстати, добавил статью в FAQ asm форума.
... << RSDN@Home 1.2.0 alpha 4 rev. 1481>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[2]: Gui hooks
От: Qa1888  
Дата: 28.01.11 21:00
Оценка:
А есть еще SetWinEventHook, ею тоже можно подгружаться замечательно

PD>SetWindowsHookEx

PD>WH_DEBUG

PD>The DebugProc hook procedure is an application-defined or library-defined callback function used with the SetWindowsHookEx function. The system calls this function before calling the hook procedures associated with any type of hook. The system passes information about the hook to be called to the DebugProc hook procedure, which examines the information and determines whether to allow the hook to be called.
Re[3]: Gui hooks
От: ononim  
Дата: 29.01.11 00:30
Оценка: 7 (1)
Я кстати чисто развлекухи (вернее для своего вялотекущего хобби-проекта) ради сделал такой финт ушами — запуск процесса через специальный загрузчик. Казалось бы ниче удивительного но... Этот загрузчик (будучи запущенным "слегка" модифицированным CreateProcess'ом) делает следующее — чистит свое АП, убивает все треды в своем процессе кроме текущего, восстанавливает код ntdll с файла на диске, правит PEB так чтобы загрузить taget .exe и... перезапускает ntdll!LdrpInitialize. В результате девственно чистое АП. Matrix reloaded Хотя конечно если задаться целью выжить при этом вполне реально — захукав меня
Как много веселых ребят, и все делают велосипед...
Re[4]: Gui hooks
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 29.01.11 18:03
Оценка: :)
Здравствуйте, ononim, Вы писали:

O>Я кстати чисто развлекухи (вернее для своего вялотекущего хобби-проекта) ради сделал такой финт ушами — запуск процесса через специальный загрузчик. Казалось бы ниче удивительного но... Этот загрузчик (будучи запущенным "слегка" модифицированным CreateProcess'ом) делает следующее — чистит свое АП, убивает все треды в своем процессе кроме текущего, восстанавливает код ntdll с файла на диске, правит PEB так чтобы загрузить taget .exe и... перезапускает ntdll!LdrpInitialize. В результате девственно чистое АП. Matrix reloaded Хотя конечно если задаться целью выжить при этом вполне реально — захукав меня

ну что тут скажешь. у нас был метод внедрения своего добра использован похожий на тот что в статье Сторожевых. Так вот, наибольшее кол-во проблем было с продуктами третьих фирм — которые что-то вечно сплайсят, грузят-чистят, хучат и т.п. Самые интересные варианты начинались "от двух" таких товарищей одновременно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1481>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.