Сейчас на форуме: _MBK_ (+5 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Отмечание "пройденных" команд в OllyDbg |
Посл.ответ | Сообщение |
|
Создано: 31 января 2011 16:36 · Личное сообщение · #1 Добрый день! Сижу в OllyDbg, но в коде слишком много ветвлений и различных вызовов без возврата. Можно ли как-нибудь настроить OllyDbg так, чтобы она отмечала уже пройденные команды (как в w32dsm) и сохраняла это между вызовами? В частности, есть ли возможность сделать AutoStep, чтобы потом посмотреть на "путь вызовов"? ![]() |
|
Создано: 31 января 2011 18:06 · Поправил: Promix_17 · Личное сообщение · #2 |
|
Создано: 31 января 2011 18:50 · Личное сообщение · #3 А можно ли сделать так, чтобы он сам протоколировал все команды до следующей точки прерывания? Какие есть способы упрощения поиска "откуда пришли"?" То есть у меня есть точка остановки "до" и "после", а между ними много кода от протектора. Хочу оценить, что с этим кодом делать в дампе, можно ли сразу перейти и не распаковывать, или всё-таки не всё ещё в дампе оказывается распаковано. Через F7/F8 рискую закопаться в мелочах. Как проще всего определить, где в стек помещается адрес возврата (то есть знаю значение в стеке, которое там появляется, а потом на него осуществляется retn), но точка прерывания на соответсвующем call не срабатывает - вызывается откуда-то из упаковщика. ![]() |
|
Создано: 31 января 2011 20:12 · Личное сообщение · #4 |
|
Создано: 31 января 2011 20:45 · Личное сообщение · #5 Смотря для каких целей проводится анализ трассировки. Если мы сравниваем две трассировки выполнения программы, чтобы определить покрытия, то можно самому программу написать выдающую различия (это полезно делать, например, чтобы локализовать проверку - сравниваем трассу до и после истечения испытательного срока). Полезно покопаться в настройках DebuggerOptions -> Trace и отключить вход в системные функции и т.д. Чтобы уменьшить размер лога, запускаем программу, нажимаем паузу в интересующий момент времени , а только затем включаем трассировку. ![]() |
|
Создано: 31 января 2011 21:19 · Поправил: valot · Личное сообщение · #6 Теперь понятно, почему в трассировке не нашёл вывода на экран, хотя он был - опции трассировки в системные dll были сняты ![]() Благодаря трассировке наткнулся на проблему, из-за которой "буксовал": нашёл, каким образом упаковщик возвращает управление в основную программу. Проблема в том, что производится возврат на "нечётную" команду, поэтому в окне дизассемблера Olly я этого не вижу, а попытка поставить точку прерывания слетает. Хотел спросить как это обойти, но догадался сам разбить "плохую" команду с помощью NOP, но без галочки "заполнять". Но схожая проблема есть при просмотре дампа, если там юникодные строки, которые начинаются с нечётного байта - удаётся их просмотреть лишь как ascii. Есть ли возможность в Olly "сдвинуть" на один байт смещение для просмотра строк в дампе? UPD: Небольшое дополнение про трассировку в Olly: а) После завершения трассировки можно в окне трассировщика запустить профайлер, который по адресам или по количеству вызовов покажет все зафиксированные команды. Штука очень удобная для выявления распаковки и "нормального кода". б) Если в опциях Olly стоит Options --> Debugging Options --> Trace --> "Group adjacent command in profile", то в профиле строк будет меньше, так как соседние "схлопнуться" и придётся искать в полном файле. Какие есть способы для анализа трассировки, кроме загрузки в Excel? ![]() |
|
Создано: 01 февраля 2011 03:49 · Личное сообщение · #7 valot пишет: Есть ли возможность в Olly "сдвинуть" на один байт смещение для просмотра строк в дампе? Ctrl+курсор вверх/вниз ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 01 февраля 2011 09:49 · Поправил: valot · Личное сообщение · #8 Натолкнулся на то, что трассировка "ломается", если встречает команду, которую не знает сама Olly. Например, вторая OllyDbg видит эти команды 660FEFC0 PXOR XMM0,XMM0 660FD606 MOVQ QWORD PTR DS:[ESI],XMM0 660FD646 08 MOVQ QWORD PTR DS:[ESI+8],XMM0 56 PUSH ESI 660FD646 10 MOVQ QWORD PTR DS:[ESI+10],XMM0 а первая не знает некоторых, поэтому предлагает свою интерпретацию и падает при пошаговой трассировке 66:0FEFC0 PXOR MM0,MM0 66:0FD6 ??? ; Unknown command 06 PUSH ES 66:0FD6 ??? ; Unknown command 46 INC ESI 0856 66 OR BYTE PTR DS:[ESI+66],DL 0FD6 ??? ; Unknown command 46 INC ESI 10FF ADC BH,BH Есть ли какая-нибудь возможность научить первую версию Olly понимать правильно новые команды или их размер, чтобы трассировка не падала? Ещё столкнулся, что иногда при простом выполнении F9 результат работы отличается от пошагового выполнения под трассировкой. С чем это может быть связано: плохая карма или защита? ![]() |
|
Создано: 01 февраля 2011 09:57 · Личное сообщение · #9 Есть мнение, что с другим дизасмом через хитрые инструкции она будет нормально шагать. В частности, можно попробовать плагин FullDisasm. Что касается отличий в работе-да всё, что угодно. ![]() |
|
Создано: 01 февраля 2011 12:23 · Поправил: valot · Личное сообщение · #10 Поставил FullDisasm - заработал. Только странно, что OllyDbg раньше не срабатывала, хотя и ставил патч от int http://exelab.ru/f/action=vthread&forum=13&topic=15982&page=0#27 ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Отмечание "пройденных" команд в OllyDbg |