· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Пишу свой API - шпион под W2K\XP на ассемблере

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Ноя 11, 2004 21:16:01

Ключевой момент такой:

API_FUNC_stub:
push func_id ;5 байт
jmp hook_prologue ;5 байт

Для нормальной работы API функции сперва нужно восстановить первые 10 байт.
Я делаю это по заранее сохраненным первым 10 байтам. И пишу в начало перехватываемой функции при
помощи WriteProcessMemory.

После вызова, опять, патчу начало функции.

Так вот вопрос:
Как перехватить вызов самой WriteProcessMemory.
Т.к. она не сможет восстановить сама себя. (Получается зацикливание) Конечно можно не патчить её изначально
, но из-за этого её вызовы не будут отслеживаться ;(((


Дата: Ноя 11, 2004 22:51:05

Rustem
а про хук с использованием таблицы импорта ты слышал...?


Дата: Ноя 12, 2004 11:58:48

Конечно, слышал.
Этот метод негодится. Т.к. не позволяет ставить хук
на функции которых нет в таблице импорта...


Дата: Ноя 12, 2004 13:34:25

В таблице какого модуля нет функции?
WriteProcessMemory -> NtWriteVirtualMemory
Можно смело ловить NtWriteVirtualMemory а она импортируется kernel32.dll


Дата: Ноя 12, 2004 17:17:42

>>Как перехватить вызов самой WriteProcessMemory.
Патчи свою таблицу импорта.
>>сохраненным первым 10 байтам
Существуют функции размером меньше 10 байт.

>>После вызова, опять, патчу начало функции.
А если произошло переключение контекста и эта функция была вызванна ещё и другим приложением, пока ты не записал снова джамп в начало. Или ты пишешь хук для одной проги?


Дата: Ноя 12, 2004 22:53:00

Приблизительно понятно что делать.
Будем пробовать...
Правда появилось еще больше вопросов.


Дата: Ноя 13, 2004 14:17:38

Вроде разобрался.
Заглушка теперь не 10, а 5 байтов.
А в память процесса пишу при помощи NtWriteVirtualMemory


Дата: Ноя 13, 2004 14:52:35

Только
"WriteProcessMemory tries to modify the protection on the virtual memory to ensure
that write access is granted and flushes the instruction cache after the write
(by calling ZwFlushInstructionCache)"

Поэтому лучше посмотреть код WriteProcessMemory и попробовать написать аналог,
заюзав дополнительно NtProtectVirtualMemory, хотя может и не нужно, если не важно отработает функция или нет.


Дата: Ноя 13, 2004 17:02:39

Есть способ патчинга таблицы экспорта библиотеки. Он достаточно надёжен. Если библиотека подгружается динамически перехватывай функцию LdrLoadDll из ntdll.dll.


Дата: Ноя 13, 2004 18:08:12

Спасибо за разъяснения.
Буду писать шпион дальше. Как только напишу, так выложу для тестирования.
Шпион получается очень интересный. Есть возможность подключения собственных плагинов и перехвата собственных функций из собственных dll. Нужно только добавить ее в базу.

Ну в общем как напишу, так выложу на суд.


Дата: Ноя 14, 2004 12:08:09

Rustem
Это для самообразования или как ?
Чем autodebug не устраивает ?


Дата: Ноя 15, 2004 22:12:03

Неустраивает BoundsCheckер
(Работает как отладчик, работает долго итп...)

Пишу свой, чтобы был таким, какой хочу.

PS что за autodebug такой?????


Дата: Ноя 16, 2004 00:25:34

http://www.autodebug.com

У меня правда очень старая версия, но прога прикольная


Дата: Ноя 16, 2004 14:02:35

А если в то время как ты убрал хук что бы вызвать оригинальную функцию, например, другой треад вызовет ту же функцию, то твой хук не сработает :)


Дата: Ноя 16, 2004 14:37:46

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

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.047