Как исследуемая программа изменяет трейс в OllyDbg?

Тема в разделе "WASM.RESEARCH", создана пользователем neutronion, 31 мар 2010.

  1. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Привет! Пытаюсь исправить таблицу импорта в туториале на wasm.ru, который Нарвахо дает в виде упражнения
    в уроке номер 38
    http://wasm.ru/article.php?article=ollydbg38
    и столкнулся с тем, что его программа упражнение изменяет трейс OllyDbg. Как это возможно?
    и второй вопрос: как воспрепятствовать этому вопиющему вмешательству в частную жизнь?
    Спасибо за внимание, искренне ваш.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    neutronion
    Подробнее, как это понять.
     
  3. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Когда в ОllyDbg трейсится программа, то в окне трейс происходит запись команд, которые последовательно выполняются в Оле. И так в хронологическом порядке.
    Лог самых ранних команд на самом верху окна трейса. После работы программы
    было замечено, что изучаемая программа имеет возможность изменять лог трейса,
    т.е. получается, что если на самом верху был лог скажем mov eax, eax, то
    через некоторое время эта строка была заменена на скажем, xor edi,edi.
    Отсюда и вопрос, разве возможно, чтобы изучаемая программа изменяла лог трейса
    OllyDbg. Меня это очень удивило, так как изучаемая программа находится под контролем OllyDbg, и априори не может менять что-то в отладчике( за исключением,
    наверно вирусов). Программа о которой я говорю находится вот в этом архиве:

    http://wasm.ru/pub/23/files/ollydbg38.zip. Если нужно, то я могу сказать с какой строки
    трейсить, но мне кажется это просто.
     
  4. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    на картинке push ebp - является самой первой командой трейса, насколько я понимаю
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    neutronion
    Всёравно не понятно. Я вижу на скрине выход из под трассировки - способов множество.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Вот кстате лог из лодера кстати по теме:
    Код (Text):
    1. ; o Если вызывается теневой сервис(из InitRoutine загружаемых модулей),
    2. ;   который вызывает калбэки в apfnDispatch, то при возврате в ядро пос
    3. ;   редством NtCallbackReturn или KiCallbackReturn(Int 0x2B) трап-фрейм
    4. ;   и в частности TF в регистре флагов восстанавливается в значение, ко
    5. ;   торое было на момент вызова сервиса. Если при вызове шлюз для возвр
    6. ;   ата в ядро из калбэка сбросить TF и прекратить трассировку, возникн
    7. ;   ет трассировочный останов при возврате из сервиса. Это исключение д
    8. ;   олжно быть обработано. Так как нормально стек теневых калбэков сбал
    9. ;   ансирован, тоесть число входов в калбэки равно числу возврата из ни
    10. ;   х, то прекращение трассировки после возврата из теневого сервиса на
    11. ;   загрузчик безопасно и обработчик исключений может быть удалён.
    В блоге я описал про шадова калбэки(сохранение трап-фрейма), на кряклабе есть топик про это. На вирустеке про сброс TF посредством загрузки контекста(NtContinue и NtSetContextThread). Также и удаление отладочного порта(NtRemoveProcessDebug) и остальные разные способы. Изучайте инфы достаточно.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Прошу прощения за опечатки :dntknw: