Re: 5 байт самомодификации

From
Vladimir Ivanov ()
To
Gennady Mayko
Date
2002-10-22T12:33:01Z
Area
SU.WINDOWS.NT.PROG
From: "Vladimir Ivanov" <vivanov@tmsoft-ltd.kiev.ua>

Hi!
> Проблемы могут быть, если длина перехватываемой функции меньше 5 байт.
Здесь,
> конечно, нужно действовать по другому.
Еще проблемы могут быть, когда копируемые инструкции содержат команду
перехода.... Тогда тоже нужно действовать более "интеллектуально". Detours,
например, такие ситуации определяет и отказывается патчить функцию.
Код, который мы переносим, может содержать и другие инструкции привязанные к
месторасполажению. Может быть дальше в теле функции есть jmp в область,
которую мы патчим.... Наверное, список таких ньюансов на этом не
кончается...
Чтобы все такие случаи корректно обработать, ИМХО нужно очень и очень
постараться...
> >2. на момент модификации существует поток, приостановленный
> >осле выполнения непоследней из этих инструкций.
> И это можно обойти несколькими способами. Наиболее простой -
> "административный" - требовать, чтобы никакие другие потоки в этот момент
не
> выполнялись. Если так не получается, тогда написать "мини-отладчик",
который
> будет запускаться перед модифицируемой программой (это легко сделать
> установками в registry); сделает необходимые изменения и запустит
программу на
> выполнение.
С отладчиком, идея хорошая. Еще, в этом плане, может быть полезно что-то
вроде CreateProcessWithDll в Detours.
При выполнении патча в уже работающем процессе, можно, например, сделать и
так:
после копирования кода, но непосредственно перед выполнением патча,
пробегаться по контекстам соседних потоков и, если нужно, переставить EIP
(как и ранее говорю только о x86) на соответствующий адрес в скопированный
код (естественно придёться помучаться с Suspend/Resume, повторными
проверками и т.п.). В дополнение к этому - проставить перед пробеганием по
потокам - замену всех 5 байт 0xCC (бреакпойнтами), с реализацией похожей
логики перестановки EIP в обработчике бреакпоинта.

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



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