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

From
Vasily Nikishaev ()
To
All
Date
2002-09-30T11:30:31Z
Area
SU.WINDOWS.NT.PROG
From: Vasily Nikishaev <VNikishaev@gsu.unibel.by>

Hi, Kirill !

KN> Если хочешь kernel32.dll все еще проще. Я кстати сначала перехватил
CreateFile
KN> из kernel32.dll вместо zwCreateFile из ntdll.dll из-за чего и
почитал немного
KN> Руссиновича о KDT:) . А сначала я делал так: алгоритм тот же только
в конце
KN> немного по другому - выясняешь адрес нужной функции, впихиваешь туда
обычный jmp
KN> на свой перехватчик который находится в пустотах kernel32.dll.
Делаешь че те
KN> надо затем востанавливаешь состояния регистров после выхода из
своего
KN> обработчика. Кста переход обратно на старый обработчик CreateFile
тоже я делал
KN> джампом(не помню из-за чего но с call'ом возиться не стал). Для того
чтобы
KN> правильно определить image base kernel32.dll тебе надо ручками
разбирать PE
KN> заголовок, а чтобы определить адреса функций - таблицу экспорта.
Зато на разных
KN> системах работать будет(в пределах конечно nt5 :) ).

	Не все так просто :((
Тот же jmp на свой перехватчик занимает 5 байт. Т.е. для восстановления
кода перехватываемой функции необходимо осуществить как минимум две
записи
в код функции. Значит существует вероятность того, что вызов функции 
произойдет в момент модификации кода, а это недопустимо. 
В предложенном способе отсутствует возможность выполнения каких-либо
действий после завершения работы функции, а также модификации параметров
и возвращаемого значения. 
	

	С уважением, Василий.


--- ifmail v.2.14
 * Origin: Gomel State University, Belarus (2:452/35.128@fidonet)