Выходы из вм

Тема в разделе "WASM.BEGINNERS", создана пользователем galenkane, 23 янв 2020.

  1. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    Привет всем

    Есть ПО, которое накрывается макросами ВМ. К примеру Code Virtualizer от Oreans.
    Задача - отследить выходы из вм (как правило вм создает свою секцию) в другие секции.

    То есть есть секция .v-lizer и нужно попасть в .text и другие, где есть незащищенный виртуальной машиной код. Как эффективно это сделать?

    Вариант с бряками рабочий, но придется руками много раз ставить. Хочется автоматики.
     
  2. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Атрибуты секции можно поменять и ловить исключения.
     
  3. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    На какие?
     
  4. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Убрать executable, очевидно. Знаю, что люди так делали для подобной задачи, но тут еще нужно смотреть на трудоемкость, придется писать фактически свой отладчик и на лету переключать атрибуты.
     
  5. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    плагином для x64dbg обойтись бы.. исходя из этого есть SDK, там надо ставить бряк на .text секцию, либо ей менять атрибуты

    возможно такой функциональности в нем нет
    --- Сообщение объединено, 24 янв 2020 ---
    Кстати о какой именно секции речь? text или секции вм?
     
  6. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Плагином/расширением для Windbg обойтись можно было бы, но это не сильно упростит задачу. За x64dbg не скажу.

    Ну вам же переход на .text надо ловить? Соответственно, убираем X для секции .text, при передаче управления случится исключение, которое отловит отладчик. Дальше нужно получить всю необходимую инфу, восстановить доступ на исполнение, восстановить контекст, вернуть управление. Вопрос еще с переходом обратно в секцию вм, тут нужно или уже для этой секции менять атрибуты, или автоматически ставить брейкпойнт на точку возврата.
    Можно ли еще заточить такую систему на случай многопоточности, сказать сложно. Возможно что и нельзя.
     
    Indy_ и galenkane нравится это.
  7. Indy_

    Indy_ Well-Known Member

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

    > Можно ли еще заточить такую систему на случай многопоточности

    Так на 86 можно перемещать в памяти всю секцию, так как между секциями никогда нет прямых ветвлений(фишка пе формата). На 64 так не получится из за RIP-адресации, но можно сделать аналогично и переместить весь образ, так как вне его нет прямой адресации. Отображаем весь образ второй раз, часть первого блокируем от исполнения, в ловушке фиксим IP на дельту баз. На синхрон между потоками это эффекта не окажет.
     
    q2e74 нравится это.
  8. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
  9. savoyard

    savoyard Member

    Публикаций:
    0
    Регистрация:
    16 янв 2020
    Сообщения:
    42
    galenkane, спасибо.
    Нужно будет поглубже вникнуть в ваш тред.
    Кстати, понравилась ваша страничка на Гитхабе.
    Казалось бы там вроде бы и какие-то мелочи, но, по-моему, достаточно любопытные.
    У меня даже появились вопросы, можно я их задам?
    А то, думаю, человек занят, эксперементирует и я тут еще со своими вопросами. :)
     
  10. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    задавайте
     
  11. savoyard

    savoyard Member

    Публикаций:
    0
    Регистрация:
    16 янв 2020
    Сообщения:
    42
    galenkane,

    На гитхабе у вас есть CRT и miniexe. CRT - это, по-моему, образец проекта VS с полностью отключенной библиотекой рантайма, для уменьшения размеров exe-файла, а miniexe - с частично отключенной библ. рантайма. Вы не могли бы немного прокомментировать miniexe. В miniexe у вас, вроде, какая-то своя библиотека подключается вместо родной от VS. Может есть возможность сделать готовый образец проекта для VS 2015 или VS 2010(но можно и не заморачваться, поди соображу :) ). Ну и навсякий случай про CRT (в двух словах), может там на какие-то настройки в проекте нужно обратить внимание.
     
  12. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    образец делать не надо, просто берите проект, переименовывайте и используйте в своих целях

    между двумя проектами разницы не особой, просто в miniexe используется обращение к винапи
     
    savoyard нравится это.