|
|
| Посл.отвђт | Сообщен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 |