самомодифицирующийся код?
- 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)