Эмуляция инструкций в IDA

Тема в разделе "WASM.RESEARCH", создана пользователем ormoulu, 26 янв 2020.

  1. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Задача в общих чертах такая:
    Имеется процедура (адрес) в дизассемблере. Процедура имеет аргументы, приезжающие, естественно, в регистрах либо стеке [ebp+n]/[esp+n]. Расположение интересующего аргумента (назовем его ArgX) также задается.
    Необходимо через k шагов (инструкций) определить, был ли аргумент ArgX скопирован в какой-либо другой регистр, либо в память, были ли над ним произведены какие-то действия (прибавлено или отнято число, разыменование указателя и т.п.).
    Что-то подобное делал в незапамятные времена CDragon на C API, в идеале хотелось бы обойтись питоном.

    Если задача лучше решается не эмулятором, а каким-нибудь smt-солвером, тоже жду советов, подсказок. Заранее спасибо.
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Самый простой вариант Microcode api использовать, либо их аналог п-код гидры.
     
  3. Indy_

    Indy_ Well-Known Member

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

    Я пытался это реализовать, только не скриптом а напрямую:

    https://wasm.in/threads/avanguard-the-win32-anti-intrusion-library.33212/page-3#post-408852
    https://wasm.in/threads/control-flow-guard.33503/#post-413723

    Затея гиблая, точнее в некотором блоке можно отследить пересылку данных, описать зависимости от исходного регистра. Но при первом системном вызове всё пойдёт в NP.