повернуть программу вспять...

Тема в разделе "WASM.ASSEMBLER", создана пользователем Tid0Wlas, 18 июн 2007.

  1. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Mental_Mirror

    Объясню
    1) Эмуляция CPU
    2) Эмуляция устройств

    1) вот пример
    mov eax,ebx - должны сохранить бывший eax , а обрано это будет mov eax,[old eax]
    stosd - должны сохранть ячейку памяти
    и.т.д
    т.о. по иструкции кода исходного можно создать код обратный исходному, но со значительными запросами на память
    2) пример
    запись сектора - должны сохранить предидущий сектор
    вывод звука - обычно через буфер - нужно сохранить перевернутыый буфер
    вывод сетевого пакета - только через виртуальный адаптер все сохранять в буфер
    и т.д.
     
  2. _SLV_

    _SLV_ New Member

    Публикаций:
    0
    Регистрация:
    22 фев 2007
    Сообщения:
    19
    никто же не накладывал ограничения на код? как решится тогда по вашему такая проблема: (код взят из головы)

    mov eax,X (количество адресов в jmp_table]
    call random (случайно от 0 до X-1)
    jmp [offset jmp_table+eax*4]

    jmp_table dd offset @1
    dd offset @2
    dd offset @3
    ...

    это из того что мне не понятно =]
    а так, имхо "обратная трассировка" может быть решена так:
    сначало трейсим код увеличивая eip (стандартно) и собираем детальный лог работы, а потом основываясь на этом логе эмулируем "обратное выполнение"...
     
  3. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    _SLV_


    jmp [offset jmp_table+eax*4] в пнях будет хранить в MSR в LastBranch
     
  4. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    Не будем лить воду.
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    +1, а смысл? Неужто это очень необходимо с практической точки зрения?
    Как уже сказали, снятие контекста на каждом этапе - более чем достаточно чтобы понять что было в большинстве случаев. Обычно из обратных действий нужно лишь проследить, что было в вызывающей функции до момента вызова текущей (в реверсинге например, найти места сравнения чеголибо и условные джампы). Для этого ничего вообще экстраординарного делать не нужно.
     
  6. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Народ а как заставить работать простенькую программу.Которая фактически нихрена не делает полезного. Вообще без регистра eip? Такое возможно?
     
  7. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    a9d
    Как это без регистра EIP? В другой архитектуре? Регистр EIP используется неявно в программе. Или может нужна эмуляция? Думаю да. Ну тогда надо эмулировать ручками каждую команду, разбирая операнды и логику работы конкретных команд. Тут было несколько тем по этому поводу.
     
  8. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    А иллюзию того что он не работает или показывает какойнить бред в отладчике (TurboDebuger) какнить попростому можно сделать ?