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

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

  1. Tid0Wlas

    Tid0Wlas New Member

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    15
    А вообще это реально. Спросите, зачем? Так просто.
    Вообще возможно ли во время исполнения программы модифицировать её EIP.
     
  2. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Tid0Wlas
    call offset
    ret
     
  3. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Отладчики так и делают вроде...
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Tid0Wlas
    Размер инструкций сложновато будет считать. Если конечно не одну инструкцию выполнять, а целый блок.
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    "Нет сынок, это фантастика" (с) ;)))
    EIP изменить можно (call,jmp,SEH,SetThreadContext), но вот как быть с измененными данными, выделенной динамиической памятью, открытыми\созданными хэндлами и т.п.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    leo
    handle = INVALID_HANDLE_VALUE;
    CloseHandle(handle)
    if (handle != INVALID_HANDLE_VALUE)
    {
    }
    CreateFile(---)
    if (handle != INVALID_HANDLE_VALUE)
    {
    }
    if (handle!=)
    CloseHandle(handle)
    handle = INVALID_HANDLE_VALUE;
     
  7. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Booster
    Угу, а как, например, WriteFile откатить ?
     
  8. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    А как откатить генерацию ключа RSA с последующим затиранием чисел P и Q?

    В общем, теоретически осуществимо, но на практике объем вычислений будет расти экспоненциально.
     
  9. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    я так понял, что имелось ввиду просто обратное выполнение кода, а не восстановление данных и т.д.
     
  10. lecay

    lecay New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2007
    Сообщения:
    8
    тотальный вариант VMware 6+ Record & Replay, простые куски можно в трэйсере ольки оборачивать
     
  11. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    MSoft
    При обратном выполнении кода нужно перед каждой инструкцией восстанавливать контекст, существовавший на момент ее исполнения, иначе можно нарваться на кучу исключений
    Простейшие примеры:
    1) mov eax,[eax] //если новый [eax] - не валидный указатель, то в обратную сторону - облом
    2) fstp st0 //если стек FPU очищен, то в обраьную сторону - облом
    3) div ecx + xor ecx,ecx //аналогично
    и т.д. и т.п.
    А с ветвлениями вообще не понятно что - если мы находимся на метке перехода, то фиг знает откуда мы сюда попали и фиг знает куда попадем, если просто идти по последовательным адресам
     
  12. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    А, вообще, дзенно... повернуть время вспять. Но увы и ах, [added] автоматическое движение instruction pointer'а строго в сторону увеличения. Может введут аналог std для ip.)
     
  13. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    leo
    ты прав, об этом я как-то не думал
     
  14. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Бред, конечно, но теоретически выполняется программа в прямом направлениии с заходом по всем условным веткам, с пошаговым запоминанием, а потом откат
     
  15. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    Даже простое пошаговое исполнение программы замедляет ее на много порядков. А количество запоминаемых данных будет очень быстро расти (на каждую инструкцию - от 4 байт и более). Так что возможно только для очень коротких участков. Кстати, был бы неплохой плагин для дебаггера.
     
  16. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    в конце-концов придумали Reverse Engineering.
     
  17. Tid0Wlas

    Tid0Wlas New Member

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    15
    А плагин для OllyDbg действительно было бы круто иметь.
     
  18. Tid0Wlas

    Tid0Wlas New Member

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    15
    ? а можно ли создать процесс который будет уменьшать eip указанной программы без её патча.
     
  19. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    ну отладчик же так может. Просто надо автоматизировать этот процесс. Но опять-таки, на сколько уменьшать??? Как ты узнаешь размер предыдущей инструкции? не говоря уже про условные переходы. А просто модифицировать EIP - как 2 байта переслать. Пример - тут вчера создали топик о проблеме изменения контекста - в нем посмотри
     
  20. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    К примеру волшебной командой jmp