Реверсинг и конечные автоматы

Тема в разделе "WASM.RESEARCH", создана пользователем _Serega_, 7 дек 2006.

  1. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    Такое вот дело:

    Есть функция на вход которой передается структура с описанием х86 кода.

    В качестве результата : 1.) описатель конечного автомата (ну можно так назвать), характеризующего этот код для всех возможных входных вариантов данных, 2.) либо некий реверс-автомат, который указывает что должно быть на входе, что-б на выходе получилось исходное значение :), такая вот ерунда, понимаю, что объяснил - не очень, поэтому в аттаче обобщенный рисунок-пример результата для функции СтрЛен (без описателя среды, т.е. атрибутов страниц памяти, расположения стека, расположения данных и др.).

    Вопрос состоит в следующем, придумать такой х86 код, который функция будет ооочень долго жевать (исключая самомодифицирующийся код - там другие методики), а если не пережует, то вообще - СУПЕР!

    Либо можете высказать своё ИМХО, например, что такое невозможно; я, по крайней мере, для случая 1. придумать не могу :dntknw:
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Ни фига непонятно!
     
  3. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    В двух словах: есть "декомпилер", который показывает все возможные последствия выполнения некоторого кода. Нужно придумать такой код, который он обработать не сможет.
     
  4. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    так... значит берём StrLen.... на выходе 4, значит строка должна быть длиной 4 символа.... если на выходе 1024, значит на входе.... мда... без реверса "конечного автомата" никак, т.к. очень долго жевать... 1024 это не 4, это ж больше....

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

    я правильно понял?
     
  5. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    _Serega_
    Давай перефразирую (грубо): есть машина Тьюринга (алгоритм), выполняющий некоторую последовательность инструкций. Вопрос, существует ли такая последовательность инструкций, которую она не сможет выполнить. Ответ известен - да, существует. Даже есть конструктивная теорема на этот счет.
    А твой вопрос требует уточнения - что за декомпайлер.
     
  6. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    Функция есть, и жует она быстро любой код, нужно придумать код который она будет жевать долго.
    Нет, это излишне. Только листинг на асме.
     
  7. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    crypto
    У меня на столе лежит книженция по автоматам к-ю я почти не читал :), А что за теорема? В смысле название ее какое?
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    _Serega_
    А рекурсию(конечную и бесконечную), как переваривает?
     
  9. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    _Serega_
    А название книженции какое? Лучше книгу прочти, сам все и узнаешь :)
     
  10. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    Pavia
    Спасибо за участие.

    К сожалению пока никак, циклы конечные и бесконечные в общем случае проскакивают на ура.
    С Call`ми алгоритм пока еще не выработан, отдельно анализируется то, что до, и после Call`а. Сложные блоки разбиваются на более простые (как в случае Call`а).
     
  11. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    crypto
    Уточню, потому что перефразировка получалась вкорне неправильна. Анализируются граничные значения (BOUND`ы), регистров и переменных в блоке кода, и для каждой ветви ControlFlow`а, эти граничные величины выводятся как отдельные состояния автомата.
     
  12. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    _Serega_
    Можно уточнить? Твоя функция анализирует структуру ассемблерного кода (конструкции if, if-else, for, while, switch)? И тебя интересует, есть ли такая конструкция, которую твоя функция не проглотит?
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Рисунок абсолютно чёрный только у меня?

    А, это опера его не отображает..
     
  14. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    IceStudent
    У меня нормальный.
     
  15. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    А что будешь делать с ассиметричными алгоритмами, хешами? Там по результату ведь нельзя получить входные данные.
     
  16. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    crypto
    Да, и для каждой ветви кода будет информация об измененных переменных (память, флаги, регистры) + эксепшены.
    Нет, такие структуры есть, интересен случай когда проанализировать код будет очень долго.
    Приведу простейший пример:

    Исходные данные:
    EAX = [0..5] (лежит в пределах от 0..5)
    EBX = [6..12]

    КОД:
    ADD EAX,EBX

    Результат:
    EAX = [6..17]
    EBX = [6..12]

    Естественно КОД может быть с циклами и ветвлениями. Но суть является не приведение мегабайтного листинга, а 10-15 команд которые даже человек загнется таким образом анализировать.
     
  17. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    IceStudent
    Абсолютно верно, реверс алгоритмы, например ситуация с модулем деления очень туго, но это к счастью, второстепенный 2.) вопрос.
    Также целевой код это - не RSA алгоритмы, а большей частью похожий на стандартные сишные функции работы со строками. Еще туда-же указатели на все и вся. То есть код сепарируется не только по ветвям ControlFlow`a а и еще по ветвям DataFlow`a.
     
  18. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    _Serega_
    Есть такие функции - однонаправленнные, вот их наверное твой автомат не прожует в обратную сторону.
     
  19. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    _Serega_
    А можно популярно обьяснить зачем оно такое может быть полезно?
     
  20. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    crypto
    Есть такие функции - однонаправленнные
    Повторюсь, что проход назад это второстепенная задача. Да, RSA моя процедура если и хакнет, то это будет на несколько миллионов лет ^ 400 степени позже чем специализированные алгоритмы.
    При обратном проходе возникает огромное количество коомбинаций, и это я знаю.
    Назад необходимо как правило проходить только операции с указателями.
    -----------------------------
    В моем самом первом посту, я написал, что мне интересны грабли именно с прямым проходом, так как я их не вижу (в силу объективных и иных причин).
    -----------------------------