Философия эмуляции кода.

Тема в разделе "WASM.BEGINNERS", создана пользователем inshade, 12 окт 2010.

  1. inshade

    inshade New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    27
    Доброго времени суток форумчане.
    Помогите пытливому уму осознать что такое "эмуляция кода" и с чем её едят.
    Вот как я себе представляю эмуляцию инструкции "mov ecx,eax"
    Пусть дана виртуальная память с правами чтение\запись, и её виртуальный адрес [00440000].
    Допустим двойное слово по адресу [00440000] соответсвует регистру eax
    А следующее двойное слово [00440004] регистру ecx.
    Код (Text):
    1. eax equ _eax equ dword ptr ds:[00440000]
    2. ecx equ _ecx equ dword ptr ds:[00440004]
    Вот собственно вопрос: Является ли этот код ...
    Код (Text):
    1. movd MM0, _eax
    2. movd _ecx, MM0
    ... эмуляцией инструкции mov ecx,eax ? (и если не яв-ся, то почему ?)
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    inshade
    Сам по себе этот код по какой причини может называться эмуляцией чего либо?
     
  3. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Если ты убежден, что MM0 не будет у тебя использоваться больше нигде, то да, является эмуляцией. Не забудь, что эмулировать может потребоваться и сами регистры MMX. А еще нужно учитывать флаги и стек. Но в самом простом виде да, это эмуляция.
     
  4. inshade

    inshade New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    27
    spa
    Если я вас правильно понял, то моё приложение читает езешник с целью эмуляции выполнения и встретив в читаемом файле опкод "mov ecx,eax", заменит "где-то у себя" этот опкод на " movd MM0, _eax \ movd _ecx, MM0 " то такое распознание и называется эмуляция.
    А если я сам в своём исходнике "изменил" строчку " mov ecx,eax ", то тогда это уже называется обфускацией. Я правильно понял ваш вопрос?
     
  5. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    MSoft
    Вопрос же вроде не технический а философский. Как я понял автор хочет определения "эмуляции". Или может я не прав7
     
  6. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    inshade
    да, абсолютно правильно.
    И да не обязательно обфускацией, дольше уже от целей зависит. Если цель скрыть или запутать алгоритм, то да. Если цель перенести на другую платформу, то я даже не знаю как это назвать, ретрансляция какая-нибудь ( что уже ближе к эмуляции ) .

    PS понятно что все это мое личное.
     
  7. inshade

    inshade New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    27
    spa, спасибо за хороший вопрос. (#2)
     
  8. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    inshade
    обращайтесь :)
     
  9. inshade

    inshade New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    27
    С этим понятно, что "эквивалентный код" в разных ситуациях называется по разному.
    А из чего состоит эмулятор кода?
    Мне представляется это так:
    Эмулятор в первую очередь должен дизассемблировать код. То есть перевести машинные инструкции в понятную ему (эмулятору) кодировку. Для того чтобы правильно составить "эквивалент" считанной инструкции.
    Например: в туже аски-кодировку типа => 8BC8 "переводится" в стоку mov ecx,eax. Делаее парсится cтрока "mov eax,ecx", затем буквы "eax" в этой строке заменяются на буквы "dword ptr ds:[00440000]" а буквы "ecx" - "dword ptr ds:[00440004]" получая аски-строку "mov dword ptr ds:[00440004], dword ptr ds:[00440000]" для того чтобы перевести уже обратно в машинный код, который записывается в отведённую для исполнения память.
    Наверное начал не с самого удачного примера, так как такая пересылка данных не годится. Но всё же апуская исключительные ситуации, именно так происходит распознование эмулятором кода, который следует проэмулировать?
     
  10. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    В тех эмуляторах, которые я встречал, было немного иначе. Сам дизассемблер я не смотрел, а обработчик выглядел так: для каждой инструкции был свой отдельный обработчик. Например, есть команда mov eax,55. Эмулятор определяет, что инструкция пишет в регистр еах. Вызывает соответствующую функцию.Функция выглядит так: mov [eax_var],55. Если инструкция воздействует на флаги, то там сложнее. Но декомпиляции в текстовый вид, парсинга строк и обратной компиляции ессно нет :)
     
  11. inshade

    inshade New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    27
    Разумеется что моё представление о работе эмулятора не является рациональным.
    MSoft скажите, а в тех эмуляторах которые вы встречали, там код предназначенный для эмуляции по одной команде эмулятор "перекодировал", далее выполнил, затем следующую инструкцию "распознал" и выполнил и так далее... или же сразу весь транслировался а затем выполнялся? Хотя возможно что в разных эмуляторах по-разному. А как вы считаете более рационально - транслировать весь код срау или по одной команде ?
     
  12. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    1) я толком не смотрел. Я просто видел, как устроены обработчики (у того же нода)
    2) ессно надо транслировать по одной команде. Вдруг код самоперекрывающийся. Или данные внутри кода. Или прыжок вообще в неизвестном направлении, а ты тратишь время на код, который не выполнится никогда
     
  13. inshade

    inshade New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    27
    Прощу прощенья за тупость, просто как-то не подумал об самомодификации кода.
    Дело в том что выдумал простецкий код (из трёх инструкций): плюс\минус\присвоить значение. И задал себе вопрос: как бы я это проэмулировал. Вот собственно единственная мысль это запустить утилиту \masm32\bin\dumppe.exe с ключём -disasm fil_emul.exe, которая выдаст мне дизассемблированный листинг в аски-коде. Хотя как обратно преобразовать строку в маш.код не понял, но думал прибегнуть к помощи ml.exe и link.exe с соответсвующими ключами.
    Это к тому, почему вдруг эмулятор должен код транслировать в аски-кодировку. А то что изначально в голове крутится код из трёх нструкций, то как бы о самомодификации и не подумал вовсе.
    А цель этого всего осознать "блок-схему" эмуляции кода.
     
  14. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    inshade
    Для чего это все действо скажите для начала (какие задачи?).
     
  15. inshade

    inshade New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    27
    Цель одна, осознать как работает эмулятор, из каких деталей состоит, как происходит эмуляция. (для чего происходит эмуляция - это другой вопрос).
    Постарался ответить сам себе. Понимаю что техническая сторона моего ответа самому себе (на вопрос как бы я это проэмулировал) является, мягко говоря, бредом сивой кабылы.
    Но думаю что эмуляторы исполняемого кода примерно так и делают, а именно: транслируют код для эмуляции в понятный для себя "hex" и далее составляют "эквивалент" машинной команды, выполнение которой следует проэмулировать.
    Никаких технических целей я не приследую, хочу просто понять "что\где\когда"...
    Возможно в ком-то из мастеров проснётся инстинкт учителя, и он (мастер) доведёт "бегинера" до сути.

    Вот вы, например, deLight как себе представляете процес эмуляции кода?
     
  16. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    inshade
    зайди на avschool.ru или как-то так. Это проект каспеского. Там есть статья об основах создания эмулятора в антивирусах
     
  17. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    http://av-school.ru/
     
  18. inshade

    inshade New Member

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

    [оффтоп]
    на счёт школы: не пойду я туда учится, слишком высокого ихней лидер о себе мнения. На форуме ав-касперского читал топ один и однажды, там может и толковые люди сидят в плане кодерства, но жапализы ихнее модераторы.
    Да и вапще реверс руткита давным давно в паблике валялся, а ихняя лаборатория так и не закрыла в своих продуктах инжект через AddPrintProvidorW. Делая вид что у них всё веригуд как у мелкомягких.
    [/оффтоп]

    P.S. У модераторов прошу прощенья за оффтоп.
     
  19. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Зачем туда идти учиться? Почитай статью на сайте и закрой браузер.
     
  20. inshade

    inshade New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    27
    Видимо я вас не правильно понял, думал вы меня гоните туда. Мол иди учи уроки, осенние каникулы уже закончились.
    Thank you MSoft. Ваши грибы вывели меня из леса.
    Даже очень стыдно за то что поисковиком по wasm'y невоспользовался. Вообщем нашёл статью Uinc. Эмуляция програмного кода а там вапще в заключении написано:
    WASM. Эмуляция програмного кода
    Стыдно, очень стыдно. Простите модераторы за ламоКб в базе.