![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Smarts |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.4.2007 Репутация: 2 Всего: 2 |
Использую данный код для замены первых байт функции, в ХР все работает, а в Висте замененная функция просто не вызывается, a программы, в которых был установлен перехват, вылетают с ошибкой kernel32.dll (хотя перехватываются Native API из ntdll.dll).
С вистой раньше дел не имел - установил на новый компьютер несколько дней назад. Возможно дело не в замене первых байтов, а в прототипах функций? Хукаю ZwQueryDirectoryFile и NtOpenFile/NtCreateFile. Изменились ли внутренние структуры и что нужно исправить, чтобы перехват работал на всех системах?
|
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 6 Всего: 23 |
Smarts, если бы сигнатуры функций изменились, то LoadLibrary вернула бы NULL. Плюс это невозможно, так как это API. У M$ с каждой версией винды всё меньше раздолья для хуков и незаконных путей, поэтому чисто гипотетически могу предположить, что данный способ обломен под вистой в принципе. Но это не диагноз, а так, рассуждения.
|
|||
|
||||
| Smarts |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.4.2007 Репутация: 2 Всего: 2 |
В 64-битной версии действительно кое-что прикрыли и с драйверами стало сложнее... Поэтому я специально тестил на 32 бит.
Кстати процессор у меня новый, 64 битный, может команды push/ret тоже надо делать 64 битными, даже если винда 32 бит? |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
||||
|
||||
| Smarts |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.4.2007 Репутация: 2 Всего: 2 |
WriteProcessMemory возвращает единицу, GetLastError ноль, то есть ошибок нет.
GetProcAddress возвращает реальный адрес функции, то есть запись идет туда, куда надо. Какие еще могут быть варианты решения проблемы? |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 6 Всего: 23 |
А без хука никак не решить задачу? |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
||||
|
||||
| Smarts |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.4.2007 Репутация: 2 Всего: 2 |
dumb, я сделал так - просто заменил перехваченную функцию на MessageBox(...), то есть если управление передается на мой код - создается окошечко. В Висте этого не происходит, а программа вывлетает с ошибкой при первом же вызове функции... То есть получается, что вместо замены первых байт на push/ret или записываются неправильные команды, или они записываются в неправильное место.
Самое интересное, что в программе нет ошибок и в ХР все работало отлично... NiJazz
Это сообщение отредактировал(а) Smarts - 13.10.2007, 06:09 |
|||
|
||||
| SeregaLBN |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 3.10.2003 Где: Киев Репутация: нет Всего: нет |
||||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |