2010-12-09 3 views
0

Например, мы находимся на платформе Windows XP, у нас есть программа A на ollydbg, и мы смотрим на инструкцию x. он имеет адрес 0x11111111 (например). Если я возьму программу A и запустил в ollydbg на другом компьютере с той же платформой, команда x будет иметь тот же адрес 0x11111111? Итак, мой вопрос: меняются ли адреса памяти каждый раз, когда запускается программа A? или они изменены на другом компьютере или платформе?адрес памяти

ответ

0

В зависимости от архитектуры, но вы никогда не должны полагаться на эти адреса. Для практических целей ответ отрицательный.

Чтобы ответить на ваши комментарии, эксплойты должны выяснить, где они находятся. Простой способ это сделать вызов и поп обратный адрес, как это:

call test_eip 
test_eip: 
    pop eax 

В этом случае, вы будете иметь указатель команд в eax. Это полезно для определения, где введенный код.

Конечно, вам нужно будет добраться до точки, где это выполняется, в основном используя эксплойт переполнения буфера.

Википедия - как всегда - обеспечивает отличное объяснение и много ссылок на ухаживают: http://en.wikipedia.org/wiki/Stack_buffer_overflow

+0

спасибо большое за ответ. Итак, как эксплоит (основанный на переполнении буфера) может запускать шелковый код (не предполагать никакой защиты) в стеке, где начальный адрес шеллкода должен перезаписывать обратный адрес, и пока мы не можем полагаться на них. как это возможно? это то, что я не могу получить. – nore 2010-12-09 23:08:09

+0

Да, но проблема в том, как можно запустить test_esp, если я не перенаправляю обратный адрес на что-то, чтобы его выполнить. я должен сначала узнать адрес. и, например, я не могу «gdb-it» в уязвимой программе на удаленном компьютере. общий вопрос: насколько хорошо известны эксплуатационные инструменты. иметь им постоянную переменную с возвратом addres? Я прошу слишком много, я знаю, но я думаю, что это разрыв, падающий. Мне нужно руководство для этого, но если вы ответите мне, я по достоинству оценю его. ty again – nore 2010-12-09 23:32:41

0

На одной и той же версии операционной системы с тем же исполняемый файл, вы, вероятно, но, безусловно, не смотрите те же кодовые адреса , Различные версии ОС, менее вероятно.

1

Что вы видите, это виртуальный адрес. ЦП содержит специальные регистры, которые могут видеть только операционная система; эти регистры управляют отображением виртуальной памяти в физическую память. Каждый раз, когда ОС переключается на другой процесс, он перепрограммирует эти регистры, чтобы программа считала, что ее память всегда находится в одном месте.

0

двоичные файлы Windows PE не являются независимыми от положения, это означает, что им необходимо принять фиксированный адрес для выполнения. Microsoft делает это для повышения производительности исполнения (за счет штрафных санкций за загрузку).

Ваш двоичный файл всегда будет выполняться с того места, где он хочет, однако DLL могут быть перемещены, если их предпочтительный адрес уже используется другим кодом.

Перемещение прозрачно для вас, что происходит, так как бинарный загрузчик Windows модифицирует ваш код и исправляет все адреса, чтобы они работали в новом месте.

Смежные вопросы