RE:самомодифицирующийся код?
- From
- Kirill Neznamov (2:5025/32.88)
- To
- Vasily Nikishaev
- Date
- 2002-09-23T23:45:08Z
- Area
- SU.WINDOWS.NT.PROG
Am 18 Sep 02 15:51:16 schrieb Vasily Nikishaev an All zum Thema
<б ┐R┐R¤ЁдЁжЁагойЁcбп ЄR¤?>
VN> А можно поподробнее рассказать про модификацию kernel32.dll в
VN> памяти ?
Вообще то рассказывать лениво и долго. Это такой метод грубого наскока. :)
Открывается устройство //device/physicalmemory.
Изменяем ACL чтобы мы могли писать в физическую память.
Получаем виртуальный адрес gdt. Из него получаем физический.
Затем отображаем gdt из области физических адресов на виртуальное адресное пространство своего процесса с атрибутами SECTION_MAP_READ | SECTION_MAP_WRITE.
Создаем calgate в gdt который запускает определенную процедуру с привелегиями ring0. Она копирует обработчик который будет выполняться после вызова какой-либо функции kernel32.dll в пустое место самой этой kernel32.dll. Затем в KDT (KeServiceDescriptorTable) вносится новый адрес перехватываемой фуункции и вроде
усе.
VN> Я сам написал свой перехватчик функций kernel32.dll, user32.dll
VN> gdi32.dll и т.д.
VN> Но он модифицирует эти библиотеки в памяти каждого процесса по
VN> отдельности, что
VN> не очень эффективно, так как приходиться внедряться в память каждого
VN> выполняемого процесса.
Зато красивей чем у меня.
VN> Для меня достаточной была бы модификация стартовой процедуры
VN> kernel32.dll
VN> или ntdll.dll (там вообще нет стартовой процедуры) таким образом, чтобы
VN> сначала
VN> выполнялся вызовов LoadLibrary с именем моей библиотеки, а затем
VN> вызывалась основная
VN> стартовая процедура. Для этого нужно записать в память по физическому
VN> адресу
VN> kernel32 порядка 20 байт, но так, чтобы эти изменения отразились на всех
VN> текущих и
VN> будущих процессах.
Сделай то что описано выше и у тебя все получиться. ;)
Но учти если в реестре поправят один ключик \\Device\physicalmemory не откроется. Так что из двух зол выбирай меньшее. :)
WBR,
KiR
--- F.I.P.S./32 v1.0r W95/NT [M]
* Origin: Придумай его сам. (2:5025/32.88)