Re: Re:самомодифицирующийся код?

From
Vladimir Ivanov ()
To
Vasily Nikishaev
Date
2002-10-07T19:04:14Z
Area
SU.WINDOWS.NT.PROG
From: "Vladimir Ivanov" <vivanov@tmsoft-ltd.kiev.ua>

> AV> Есть гораздо более прямой путь, причем от самой Microsoft. Detours
> AV> называется.
> Я посмотрел этот Detours. Он работает по принципу замещения
> первых
> пяти байт API-функций на код безусловного перехода на свой обработчик.
> У этого способа есть недостаток, описанный мною ранее (вероятность
> прерывания потока в момент замены первых пяти байт функции).

Расскажу свой способ, сводящий вероятность к нулю:
1. Поднимаем приоритет потока (достаточно, чтобы он был выше по приоритету
других потоков процесса)
2. Вызываем Sleep(1). В момент возврата из сна будем находится в начале
кванта времени
3. Выполняем замену пяти байт, вызываем FlushInstructionCache()
4. Восстанавливаем приоритет потока

>Вторым недостатком является необходимость указания количества параметров
> для каждой перехватываемой функции.
Тем не менее для перехвата конкретных, заранее известных функций - этого
достаточно.
Однако не так уж сложно расширить функциональность библиотеки - на благо
исходники доступны.

>Третьим недостатком является
> достаточно
> большой объем занимаемой памяти и значительное время загрузки
> библиотеки,
> содержащей обработчики перехватываемых функций (это в том случае, когда
> перехватывается очень много функций).
Ты имел в в виду очень много функций и в большом количестве процессов ?
Тогда согласен.
Но опять же недостаток легко устраняем.

На фоне недостатков, нельзя не сказать и о главном преимуществе Detours - он
позволяет _безопасно_ вызвать оригинальную функцию. Detours содержит
простейший дизассемблер, который "интеллетуально" формирует
trampoline-функцию, копированием части оригинальной функции с установкой
перехода на оставшую часть кода.

Т.е. я хотел сказать, что перечисленные недостатки (кроме первого) есть
относительно легко исправляемыми недостатками конкретной реализации, а не
способа.

С уважением, Владимир



--- ifmail v.2.15dev5
 * Origin: A poorly-installed InterNetNews site (2:5020/400)