Сейчас на форуме: Magister Yoda, johnniewalker, Kybyx, vsv1, r0lka, -Sanchez- (+5 невидимых) |
eXeL@B —› Крэки, обсуждения —› OllyDbg дизасм: так почему же не использовать? |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 18 мая 2010 14:14 · Личное сообщение · #1 |
|
Создано: 18 мая 2010 14:19 · Личное сообщение · #2 1. Разбор флагов. Я решил, что лучший способ создать пример кривизны двига - изучить сам двиг в соответствии со спецификациями. Разбор флагов кривой. И вот вам пример: Code:
Теряются два важных для первой инструкции префикса - LOCK и ADDRSIZE. Вот что выдают "правильные" дизасмы: Code:
Второй косяк этого же примера - из-за выброса префикса изменения адреса неправильно определяется размер инструкции, а значит продолжение дизассемблирования с адреса 0x7C966650 является ошибкой. |
|
Создано: 18 мая 2010 14:53 · Личное сообщение · #3 Сразу расскажу, что же кривого я увидел в блоке разбора префиксов в олькином дизасме. Цикл обработки префиксов проверяет, встретился ли нам префикс группы, которая уже была инициализирована другим префиксом и считает такую ситуацию повтором. "Лечится" возникшая ситуация отделением первого префикса от инструкции. Такой префикс считается самостоятельной инструкцией (что курил Олег?) и дизассемблирование будет продолжено со второго префикса (он точно есть, раз возник повтор). Ошибка номер один - нет никаких самостоятельных префиксов-инструкций, префикс это установка режима интерпретации инструкции и ничего более. Ошибка номер два - первый префикс мог быть и не повторным, скажем если у нас есть последовательность 0F0, 26, 2E (LOCK, ES, CS), то сначала будет выброшен префикс LOCK, затем и ES. IDA тоже отделяет повторные префиксы от инструкции, но хоть делает это правильно - за инструкцию выносятся действительно те префиксы, действие которых ни к чему не приводит (хотя в документации об этом ничего нет, сказано лишь, что можно использовать только один префикс из каждой из 4 групп, а у AMD даже вот такая строка "The result of using multiple prefixes from a single group is undefined"). Кроме того, IDA не считает выделенные префиксы отдельной инструкцией - как видно из примера выше, адреса префиксов и самой инструкции совпадают. |
|
Создано: 18 мая 2010 15:18 · Личное сообщение · #4 |
|
Создано: 18 мая 2010 15:26 · Личное сообщение · #5 |
|
Создано: 18 мая 2010 15:28 · Личное сообщение · #6 Gideon Vi пишет: отдельно ольгин дизасм юзать тоже смысла не особо Вот про это и речь. Я сталкивался с проблемой, что люди хотят аргументы против олькиного дизасма (x64 здесь не катит в качестве аргумента). Исправить, кстати, в самой ольке я могу, вопрос насколько это оправданно. Coderess Вся информация перед вами. Если у вас есть лишнее время на беседы с Олегом, пожалуйста. |
|
Создано: 18 мая 2010 16:45 · Личное сообщение · #7 Я как-то пытался написать Олегу по поводу RtlUnwind и косяков второй Ольги при работе с этой функой, но то ли мой аглицкий слишком крив, то ли Олег очень занят, то ли проблема была уже выявлена и без моего участия будет устранена, но в ответ Олег скромно (очень скромно!) промолчал. Хотя, возможно, Coderess'у повезёт больше. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 19 мая 2010 01:22 · Личное сообщение · #8 |
|
Создано: 19 мая 2010 02:28 · Личное сообщение · #9 |
|
Создано: 19 мая 2010 02:50 · Личное сообщение · #10 |
|
Создано: 19 мая 2010 03:44 · Личное сообщение · #11 |
|
Создано: 19 мая 2010 11:36 · Личное сообщение · #12 |
|
Создано: 20 мая 2010 14:04 · Поправил: ZLOvar · Личное сообщение · #13 |
|
Создано: 20 мая 2010 14:36 · Личное сообщение · #14 ZLOvar Ты как раз вообще не въехал в тему. OllyDbg это не дизасм, это отладчик. А речь шла про двиг дизассемблера (и кстати использовать IDA не получится, т.к. её дизасм не открыт), который лежит в её основе. И этот двиг некоторые товарищ используют в своих проектах. В том числе это относится к стрипперу. А движков хороших действительно очень много. |
|
Создано: 20 мая 2010 18:35 · Личное сообщение · #15 ZLOvar пишет: Хотя бы та же ИДА. Ида шикарный инструмент.. хотя не отличаться особым быстродействием... Но для быстрого дизасма все же Олля предпочтительнее .. W32Dasm очень часто валиться особливо на Borland C++ 1999... Хотя кто чем привык работать... это дело вкуса в первую очередь... ----- aLL rIGHTS rEVERSED! |
|
Создано: 21 мая 2010 02:26 · Личное сообщение · #16 |
|
Создано: 21 мая 2010 08:11 · Личное сообщение · #17 |
|
Создано: 21 мая 2010 16:17 · Личное сообщение · #18 |
|
Создано: 21 мая 2010 16:29 · Личное сообщение · #19 Vamit пишет: Ну почему-же, из самой ИДА (плагинов) используется без вопросов Да, я это не учёл Gideon Vi Если проект допускает навеску как плагин на другой инструмент анализа, то никаких проблем. Скажем, в случае создания плагина для OllyDbg проблема сабжа всё равно проявляется и тогда стоит подумать о сторонних разработках. |
|
Создано: 21 мая 2010 16:48 · Личное сообщение · #20 |
|
Создано: 21 мая 2010 17:21 · Личное сообщение · #21 Gideon Vi пишет: и в итоге получаем плагин под ида, попадая в зависимость к ильфаку Не вижу никакой зависимости от Ильфака, имея ИДА и СДК к ней одинаковых версий вопрос снимается при условии, что плагин самодостаточен и ему для работы не требуется что там родит Ильфак в следующих версиях ----- Everything is relative... |
|
Создано: 21 мая 2010 17:47 · Личное сообщение · #22 |
|
Создано: 21 мая 2010 19:34 · Личное сообщение · #23 |
|
Создано: 13 ноября 2010 11:50 · Поправил: PE_Kill · Личное сообщение · #24 Смотрю дизасм от фрипаскаля. Там этот код дизасмится в: Code:
Посмотрел где баг с сегментами, оказывается в свиче обработки опкодов: Code:
Хочу пофиксить, отсюда вопрос к тем, кто разбирается. Правильно ли будет такое исправление? Code:
Т.е. каждый раз при встрече нового сегмента, перезаписывать старый, если он был. PS Т.е. после правки листинг получится такой: Code:
----- Yann Tiersen best and do not fuck |
|
Создано: 13 ноября 2010 12:01 · Личное сообщение · #25 |
|
Создано: 13 ноября 2010 12:04 · Поправил: PE_Kill · Личное сообщение · #26 Да пока не надо, изучаю фрипаскалевский двиг. Довольно грамотно сделан, поддерживает 64 бита, 3dnow и прочее. Пока в нем поколупаюсь. PS А баг с сегментами там ИМХО специально сделан, т.к. дизасм этот специально для отладчика накоден, т.е. чтобы видно было при отладке затрагиваемые сегменты и прочее. Т.е. листинг там в принципе не всегда работоспособный, вот пример: Code:
Как это конпелировать? Но доделать до нормального листинга можно, хотя мне он и не нужен пока, достаточно разбора до флагов. ----- Yann Tiersen best and do not fuck |
|
Создано: 14 ноября 2010 22:39 · Личное сообщение · #27 |
|
Создано: 15 ноября 2010 11:51 · Поправил: PE_Kill · Личное сообщение · #28 Почитал слегка маны интела, составил вот такую последовательность: 66 F2 0F C8 что должно быть по идее Code:
Проверил в отладчике, всё правильно работает, AX обнуляется. Что говорят дизасмы: OllyDbg 1.1: Code:
IDA 5.2: Code:
CADt by MS-REM: Code:
FreePascal: Code:
DUMPPE: Code:
Выходит топовые дизасмы фигню показывают. ----- Yann Tiersen best and do not fuck |
|
Создано: 15 ноября 2010 17:12 · Личное сообщение · #29 |
|
Создано: 16 ноября 2010 14:59 · Личное сообщение · #30 |
. 1 . 2 . >> |
eXeL@B —› Крэки, обсуждения —› OllyDbg дизасм: так почему же не использовать? |