Как сопоставить физическую память виртуальной?

Тема в разделе "WASM.ZEN", создана пользователем LastNoob, 10 янв 2020.

  1. LastNoob

    LastNoob Member

    Публикаций:
    0
    Регистрация:
    28 янв 2018
    Сообщения:
    80
    Добрый вечер, форум, практически неделю не могу найти подходящую информацию, поэтому решил поднять данную тему.
    Итак, как всем известно виртуальный адрес можно найти посредству оффсетов, например, как
    "процесс.exe" + 0x50
    Но вот как работать с физическим - для меня совсем загадка... Какие есть способы найти физический адрес?
    Могу единожды найти физ адрес, но после перезагрузки потеряется... Оффсеты, как уже убедился не работают в случае с физ. память. Буду рад подсказкам ;)
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Видимо посмотрел везде кроме первой ссылке в гугле: https://resources.infosecinstitute....ysical-address-on-windows-physical-addresses/
     
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    LastNoob,

    Intel® 64 and IA-32 Architectures Software Developer’s Manual
    Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D and 4
    4.2 HIERARCHICAL PAGING STRUCTURES: AN OVERVIEW
     
  4. LastNoob

    LastNoob Member

    Публикаций:
    0
    Регистрация:
    28 янв 2018
    Сообщения:
    80
    Rel, благодарю за статью, с английским туго, но вот перечитываю снова в поисках истины...
    Можете подсказать, что это за инструмент kd> ? это WinDbg, правильно понимаю?
    Если да, то как его вызвать, запустил сам WinDbg, включил командную строку, а там 0:021>
    Пробую гуглить, да вот две буквы kd мало о чем говорят, может быть у них есть полное название, так проще будет найти
     
  5. njeen

    njeen Active Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    138
    Адрес:
    Ташлинск
    kd в данном случае в windbg означает kernel debugging сессию , а не user mode
     
  6. LastNoob

    LastNoob Member

    Публикаций:
    0
    Регистрация:
    28 янв 2018
    Сообщения:
    80
    Аа, вот теперь я понял, благодарю, уже пробовал запустить kd.exe по-разному, а это режим)
    А если у меня отображает как lkd> это одно и то же или нет?
     
  7. LastNoob

    LastNoob Member

    Публикаций:
    0
    Регистрация:
    28 янв 2018
    Сообщения:
    80
    Rel, не хотел отвлекать, но все же... можно? (раз личка закрыта, напишу здесь)
    Все получилось, остались несколько вопросов. Статью перечитал, на x64 win10 не работает, поставил win10x86, вот там все встало на свои места... Увы, автор это не говорил
    А получилось следующее, на вин64 установлена виртуалка, в вин32 нашел физ адрес, убедился в корректности.
    Перешел на этот адрес в вин64 - значение другое, вот скрины, не подскажите, почему такое возможно? или физический адрес - очередная виртуализация?
    [​IMG]
    (вин32)

    [​IMG]
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Скорее всего да, зависит канеш от конкретной реализации конкретного вендора виртуализации, но как бы давать виртуальной системе доступ к физической памяти хоста - это довольно несекьюрная вещь.
     
  9. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    Ну можно заюзать виндовый кернел Апи для сопоставления физ\вирт адресов.
     
  10. LastNoob

    LastNoob Member

    Публикаций:
    0
    Регистрация:
    28 янв 2018
    Сообщения:
    80
    а это поможет в случае с виртуальной машиной?
     
  11. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    Еще один момент - в обоих системах (что хост, что гостевая) нужно отключить свопинг, чтобы данные располагались точно в физ. памяти, верно думаю?
     
  12. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    У многих вендоров виртуализации есть апи, через которые можно управлять виртуальной машиной, возможно через апи можно получать физическую память, это надо копаться в доках по апи. С другой стороны, зачем тебе с хоста читать виртуализированную физическую память, если ты можешь внутри виртуальной машины загрузить дров и читать ее как из режима ядра внутри виртуалки?
     
  13. LastNoob

    LastNoob Member

    Публикаций:
    0
    Регистрация:
    28 янв 2018
    Сообщения:
    80
    Этот топик, есть продолжение саги о бесследном чтении памяти, в обход анти-чита. Тогда считал, что физ адрес внутри вируалки = физ адрес основной системы.
    Сейчас, как советовал _edge, попробую отключить файлы подкачки, если я его верно понял..
    Пока что не знаю, как античит реагирует на чтение физ.памяти той же системы
     
  14. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    LastNoob, Смотря какая Виртуалка. Например QEmu позволяет прямо нативно смотреть память не заходя в виртуализацию. Включаешь встроенный отладчик и читаешь любые таблицы страниц, какие душа пожелает.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Еще вариант сделать сетевой мост с виртуалкой и подключиться удаленным ядерным отладчиком.
    --- Сообщение объединено, 12 янв 2020 ---
    https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/remode-debugging-using-windbg
    --- Сообщение объединено, 12 янв 2020 ---
    Но дебаг сервер все равно висеть будет, что может стриггерить античит.
     
  16. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    LastNoob,

    > Этот топик, есть продолжение саги о бесследном чтении памяти, в обход анти-чита.

    В той теме были даны ссылки на лучший материал по этой теме. С него и нужно было начинать, а не с архитектуры(механизмов адресной трансляции). Я бы на твоём месте послушал старших, вы будите бесконечно это обсуждать но так и не найдёте решение, которое уже давно найдено. С-анклавы проработаны вдоль и поперёк, эта задача снята.
     
  17. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    Как, какими командами ?
     
  18. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
    куча вирт в исходниках есть.. что кему, что виртуалбокс.. бери их и кастамь акь тебе надо.
     
  19. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    О хоспаде, ты видимо плохо себе представляешь, что такое большой проект на плюсах.
     
  20. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    q2e74,
    Ну если почитать хелп, то все понятно.

    Ну к примеру я запускал так:
    qemu-system-x86_64.exe -L . -m 128 -M pc -fda floppy_img.flp -soundhw all -localtime -s -S
    pause

    Это запуск системы которая будет с флоппи грузить загрузчик. Так же можно указать любой другой образ.
    Ну по дефолту создается подключение на локальный порт 1234
    делаем коннект с помощью IDA например (remote gdb на localhost 1245) (qemu будет ждать "старта" процессора) . В IDA запускаем (Run) - и все поехало

    gdb_qemu.jpg

    Виртуал бокс тоже самое позволяет делать (на сколько я помню).
     
    Последнее редактирование: 13 янв 2020
    _edge нравится это.