· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Перехват и подмена функций

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


Дата: Апр 13, 2003 20:31:39

В статье про перехват функций Win32 API говорится о записи в начало функции 5 байт типа jmp xxx с сохранением того что там было куда то. У мя вопрос а с тем что мы сохранили что делать то?


Дата: Апр 13, 2003 22:00:45

ну восстановишь потом, да и всё...


Дата: Апр 14, 2003 01:32:45

дык они ж там не зря стоят это потом я их восстановлю а пока я их поменял - что если мне эту функцию потом охота вызвать после того как мой хук параметры поправил?


Дата: Апр 14, 2003 10:56:15

Перехваченная функция очевидно должна закончиться ret
меняешь первые 5 байт назад,потом зовешь ее call ом, а когда управление получишь, то меняешь морду тот же jmp ....уф.....
я наверное малость не понятно выразился


Дата: Апр 14, 2003 13:39:19 · Поправил: Narkomanius

Bonus ништяковая идея спасибо


Дата: Апр 15, 2003 12:28:17

Не все так просто. Восстановление оригинальных пяти байт фактически означает снятие хука -> потеря контроля над другими потоками вызывающими хукнутую функцию.


Дата: Апр 16, 2003 16:44:49

Four-F
гы а куда этот jump указывать должен?
предположим я вызываю код из драйвера (с привилегиями разрулю сам) так это надо звать по адресу [база LCODE драйвера+смещение функции] или там все сложнее типа дальний jump на дескриптор LCODE:смещение?


Дата: Апр 16, 2003 17:05:28

Four-F
есть вариант без вырезания фиксированого колва байт - это вырезание инструкций. алгоритм таков
вынимает столько инструкций сколько надо под int там скорее всего будут

push
pop
mov

поэтому только их и ищем. если другая инструкция - обламываемся. если накопали достаточно байт дальше не копаем.
их вырезаем сохраняем в буфер по моим оценкам хватит 16 байт, а на их место - int 240 (все равно не юзается RomBASIC) а все излишки nop-ами заполним. вставлям драйвер и драйвером захватываем наше прерывание (и еще 3 - понадобятся для управления) довольно наглым способом - правим IDT. Это затем чтоб не оказалось посредников между нашей функцией и драйвером и регистры были никак не поменяны потому что лень в мануалку вникать как их там VMM перепакует. тогда придется в LCODE сохранять дескрипторы сегментов данных но это ничо. а драйверу поставлям код который он сохраняет у себя в pageable данных и который надо применять к хуку. но это все фигня - прерывание штука такая если вызвано из памяти под 4М-2Гиг то это какой то процесс и поидется долго определять КОГО звали. с системной памятью проще она промапана раз и навсегда кернел там и т.п. но тратятся ресурсы на поиск хука по таблице соответствия адресов.

а jump far my_driver_PCODE:hook_proc

это ж 7 байт - задолбаешься код разбирать


Дата: Апр 16, 2003 18:10:42

а может tf установить if снять как только 5 байт пройдены снова установить хук?


Дата: Апр 17, 2003 12:00:54

Narkomanius, не пытайся изобрести велосипед. Эта тема уже достаточно обсосана. Вот основные ссылки - читай.

API Spying Techniques for Windows 9x, NT and 2000

API Hooking Methods

API hooking revealed

Intercept a windows API function?


Дата: Апр 18, 2003 20:02:43

Four-F
не только апи надо перехатывать а вообще все функции какие сможен найти


Дата: Апр 18, 2003 20:22:43

Four-F
вообще идея в том что надо сделать пакет прог такой чтоб был отладчик декомпилятор и правка кода на лету(пропатчивание замена и т.п.). И чтоб это все было Сишным снаружи. т.е. патчи на Си декомпилирует в Си. А отладчик -будет память процесса сохранять) и дебагать. Выглядит геморно особенно перегонка в Си но потихоньку решается. самая грабля это структуры обнаруживать - и еще одна - имена переменных и функций - хочется чтоб не рандомно генерились а в меру скромных возможностей проги назывались с учетом имен переменных и вызываемых функций.


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