Вопрос № 52811: Добрый день эксперты.
Такой вот вопрос.
стоит задача модифицировать системную область памяти (в частности которая занята отображенным "оригиналом" kernel32.dll)
так вот получаю я адрес функции к примеру Beep()
находится он в...
Вопрос № 52.811
Добрый день эксперты.
Такой вот вопрос.
стоит задача модифицировать системную область памяти (в частности которая занята отображенным "оригиналом" kernel32.dll)
так вот получаю я адрес функции к примеру Beep()
находится он в 00001b:XXXXXXXX
оригинал который проицируется на пользовательский процесс, находится по адресу
000010:XXXXXXXX
так вот вопрос как вот этот виртуальный адрес XXXXXXXX перевести в физический и внести по нему изменения ?
(данные выдраны из SoftIce но естественно очевидно что нужно использовать функцию преобразования).
PS ядерная функция преобразования виртуального в физический (что-то типа GetPhisicalAdress) - не производит по какой-то причине этого : (((
почему не пойму.
Заранее благодарен за ответ.
Отправлен: 21.08.2006, 22:19
Вопрос задал: Dez (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Ковеленов Александр
Здравствуйте, Dez!
Ядро Windows работает в нулевом кольце защиты, поэтому любые манипуляции с системной областью памяти явно не понравятся Windows.
Здесь нужно писать нечто вроде вируса, который, используя дыры в системе защиты выйдет на нулевой уровень.
Ответ отправил: Ковеленов Александр (статус: 2-ой класс)
Ответ отправлен: 22.08.2006, 09:05 Оценка за ответ: 2 Комментарий оценки: сиё ведомо. самый простой способ это запуск драйвера коий естественно и работает в нулевом кольце. Для особых извращенцев существует способ повышения привелегий через махинации с LDT то что системе это не понравится - это её личное дело. вопрос был другой - как имея виртуальный адрес - внести изменения в физический. А собственно что такое "защита WIndows" - ниразу
не видел ; )))
Отвечает: Wild_one
Здравствуйте, Dez!
В любом случае Винда не позовлить просто так манипулировать системной областью. Можно отредоктировать так: делаем копию dll-файла c другим именем. Редактируем hex редактором или например OllyDbg. Здесь нужную процедуру можно поискать по последовательности байт, подсмотрев оригинальной dll-ке. Через MS-DOS заменяем измененный файл текущим.
Ответ отправил: Wild_one (статус: 2-ой класс)
Ответ отправлен: 22.08.2006, 11:02 Оценка за ответ: 3 Комментарий оценки: А что будешь делать с контрольными суммами системных библиотек ? к тому же вопрос не об этом.
Значения ImageBase, VA и PointerToRawData берем через нахождение начала файла (IMAGE_DOS_SIGNATURE) и дальнего путешествия по заголовку.
Удачи.
--------- Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 6-ой класс)
Ответ отправлен: 22.08.2006, 18:03 Оценка за ответ: 3 Комментарий оценки: толи я неясно выяснился толи одно из двух решение оказалось примерно таким (пример из рабочего кода, выполняющегося в ring 0): push edx mov eax, cr0 mov CR0Reg,eax and eax,0xFFFEFFFF // сбросить WP bit mov cr0, eax // mov eax, aa //aa-variable mov edx,[eax+4] mov eax,[eax] mov [eax], 0x68 mov [eax+1],edx mov
di,0xc3 mov [eax+5],di //mov [eax],0xc3 mov eax, CR0Reg mov cr0, eax // востановить содержимое CR0 sti // разрешаем прерывания pop edx