Сейчас на форуме: Magister Yoda, johnniewalker, Kybyx, vsv1, r0lka, -Sanchez- (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› OllyDbg дизасм: так почему же не использовать?
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 18 мая 2010 14:14
· Личное сообщение · #1

Часто можно услышать упрёки в сторону тех, кто считает олькин дизасм кривым. И порой даже примеров под рукой нет, на которых ольке (а точнее её дизасму и анализатору) башню срывает.

Сейчас речь пойдёт об олькином дизасме от 2001 года. Про 2-ую ольку пока не будем.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 18 мая 2010 14:19
· Личное сообщение · #2

1. Разбор флагов.
Я решил, что лучший способ создать пример кривизны двига - изучить сам двиг в соответствии со спецификациями. Разбор флагов кривой. И вот вам пример:
Code:
  1. ; байткод: F0 67 2E 66 3E 87 05 00 10 40 00 F0 87 05 00 10 40 00
  2. 7C966645   F0:                 PREFIX LOCK:                             ; Superfluous prefix
  3. 7C966646   67:                 PREFIX ADDRSIZE:                         ; Superfluous prefix
  4. 7C966647   2E:                 PREFIX CS:                               ; Superfluous prefix
  5. 7C966648   66:3E:8705 00104000 XCHG WORD PTR DS:[401000],AX
  6. 7C966650   F0:8705 00104000    LOCK XCHG DWORD PTR DS:[401000],EAX      ; LOCK prefix


Теряются два важных для первой инструкции префикса - LOCK и ADDRSIZE. Вот что выдают "правильные" дизасмы:
Code:
  1. 0: lock xchg ax, [di] ; Mediana
  2. 7: add [eax], dl
  3. 9: inc eax
  4. A: add al, dh
  5. C: xchg eax, [0x401000]
  6. ;---------------------------
  7. seg000:00000000                 db      2Eh, 3Eh  ; IDA
  8. seg000:00000000                 lock xchg ax, [di]
  9. seg000:00000007                 add     [eax], dl
  10. seg000:00000009                 inc     eax
  11. seg000:0000000A                 add     al, dh
  12. seg000:0000000C                 xchg    eax, ds:401000h

Второй косяк этого же примера - из-за выброса префикса изменения адреса неправильно определяется размер инструкции, а значит продолжение дизассемблирования с адреса 0x7C966650 является ошибкой.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 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 не считает выделенные префиксы отдельной инструкцией - как видно из примера выше, адреса префиксов и самой инструкции совпадают.




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 18 мая 2010 15:18
· Личное сообщение · #4

1. Разбор флагов.
Вам надо отнаписаться Олегу об этом баге. Укажите где править в исходнике для ленивых

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 18 мая 2010 15:26
· Личное сообщение · #5

смысл топика в чем? Непосредственно в Ольге это ни кто не фиксит, а отдельно ольгин дизасм юзать тоже смысла не особо



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 18 мая 2010 15:28
· Личное сообщение · #6

Gideon Vi пишет:
отдельно ольгин дизасм юзать тоже смысла не особо

Вот про это и речь. Я сталкивался с проблемой, что люди хотят аргументы против олькиного дизасма (x64 здесь не катит в качестве аргумента). Исправить, кстати, в самой ольке я могу, вопрос насколько это оправданно.

Coderess
Вся информация перед вами. Если у вас есть лишнее время на беседы с Олегом, пожалуйста.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 18 мая 2010 16:45
· Личное сообщение · #7

Я как-то пытался написать Олегу по поводу RtlUnwind и косяков второй Ольги при работе с этой функой, но то ли мой аглицкий слишком крив, то ли Олег очень занят, то ли проблема была уже выявлена и без моего участия будет устранена, но в ответ Олег скромно (очень скромно!) промолчал. Хотя, возможно, Coderess'у повезёт больше.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 19 мая 2010 01:22
· Личное сообщение · #8

int пишет:
Исправить, кстати, в самой ольке я могу, вопрос насколько это оправданно.


дык, если есть достаточные знания, а главное - время, то почему же нет? Ошибка не приятная



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 19 мая 2010 02:28
· Личное сообщение · #9

В таком случае, какую ольку брать за основу? Есть же всякие патченные. Можно также сделать патч без учёта CRC, чтобы можно было навесить на любую подходящую копию.




Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 19 мая 2010 02:50
· Личное сообщение · #10

int пишет:
Можно также сделать патч без учёта CRC, чтобы можно было навесить на любую подходящую копию.

Вот лучше всего так и сделать. Или сигнатуркой



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 19 мая 2010 03:44
· Личное сообщение · #11

Тестите. Патченный файл обозначен буквой "P". Кому надо можете сделать себе патч - сигнатурный, оффсетный - какой хотите.

Линк: www.multiupload.com/XL1HW4XTG7
Пароль: CRACKL@B.RU



Ранг: 214.1 (наставник)
Активность: 0.130
Статус: Участник

Создано: 19 мая 2010 11:36
· Личное сообщение · #12

патч к предыдущему посту, оффсетный
без размера, црц
~http://rghost.ru/1657512



Ранг: 40.4 (посетитель), 3thx
Активность: 0.080
Статус: Участник

Создано: 20 мая 2010 14:04 · Поправил: ZLOvar
· Личное сообщение · #13

Отвечу строго по теме:
--Почему бы не использовать Олли дизасм?
Потому что есть КУЧА других дизасмов. Хотя бы та же ИДА. Если вам нужно посмотреть файл "по быстрому", то юзаем W32Dasm.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 20 мая 2010 14:36
· Личное сообщение · #14

ZLOvar
Ты как раз вообще не въехал в тему. OllyDbg это не дизасм, это отладчик. А речь шла про двиг дизассемблера (и кстати использовать IDA не получится, т.к. её дизасм не открыт), который лежит в её основе. И этот двиг некоторые товарищ используют в своих проектах. В том числе это относится к стрипперу. А движков хороших действительно очень много.




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 20 мая 2010 18:35
· Личное сообщение · #15

ZLOvar пишет:
Хотя бы та же ИДА.

Ида шикарный инструмент.. хотя не отличаться особым быстродействием...
Но для быстрого дизасма все же Олля предпочтительнее ..
W32Dasm очень часто валиться особливо на Borland C++ 1999...
Хотя кто чем привык работать... это дело вкуса в первую очередь...

-----
aLL rIGHTS rEVERSED!





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 21 мая 2010 02:26
· Личное сообщение · #16

int пишет:
Тестите


воркед, спасибо




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 21 мая 2010 08:11
· Личное сообщение · #17

int пишет:
кстати использовать IDA не получится, т.к. её дизасм не открыт

Ну почему-же, из самой ИДА (плагинов) используется без вопросов, конечно, не всё описано, но в OllyDbg аналогично, но догадаться то можно...

-----
Everything is relative...





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 21 мая 2010 16:17
· Личное сообщение · #18

Vamit, имеется ввиду использование движка в своих проектах.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 21 мая 2010 16:29
· Личное сообщение · #19

Vamit пишет:
Ну почему-же, из самой ИДА (плагинов) используется без вопросов

Да, я это не учёл

Gideon Vi
Если проект допускает навеску как плагин на другой инструмент анализа, то никаких проблем. Скажем, в случае создания плагина для OllyDbg проблема сабжа всё равно проявляется и тогда стоит подумать о сторонних разработках.




Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 21 мая 2010 16:48
· Личное сообщение · #20

int пишет:
Если проект допускает навеску как плагин на другой инструмент анализа, то никаких проблем


и в итоге получаем плагин под ида, попадая в зависимость к ильфаку. Серьезные проекты все же делаются отдельными приложениями и двиг несут в себе.




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 21 мая 2010 17:21
· Личное сообщение · #21

Gideon Vi пишет:
и в итоге получаем плагин под ида, попадая в зависимость к ильфаку

Не вижу никакой зависимости от Ильфака, имея ИДА и СДК к ней одинаковых версий вопрос снимается при условии, что плагин самодостаточен и ему для работы не требуется что там родит Ильфак в следующих версиях

-----
Everything is relative...




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 21 мая 2010 17:47
· Личное сообщение · #22

А если будет альтернатива, дизасм довольно легко заменяется на другой. Это как правило, не самая сложная часть проекта. Проблема ещё в том, что на креклабе редко пишут серьёзные проекты. Когда я увидел как пишут некоторые люди на креклабе, я понял, что не всё так плохо.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 21 мая 2010 19:34
· Личное сообщение · #23

int
Тулза dumppe выдала:
Code:
  1.          F0672E663E8705         lock    xchg ds:[di],ax
  2.          004010                 add     [eax+10h],al
  3.          00F0                   add     al,dh
  4.          870500401000           xchg    [104000h],eax





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 13 ноября 2010 11:50 · Поправил: PE_Kill
· Личное сообщение · #24

Смотрю дизасм от фрипаскаля. Там этот код дизасмится в:

Code:
  1. F0672E66648705: lock xchg cs:ds:[di],ax
  2. 0010: add [eax],dl
  3. 40: inc eax
  4. 00F0: add al,dh
  5. 870500104000: xchg [$00401000],eax


Посмотрел где баг с сегментами, оказывается в свиче обработки опкодов:
Code:
  1.         $2E: begin
  2.           Segment := Segment + 'cs:';
  3.         end;


Хочу пофиксить, отсюда вопрос к тем, кто разбирается. Правильно ли будет такое исправление?
Code:
  1.         $2E: begin
  2.           Segment := 'cs:';
  3.         end;

Т.е. каждый раз при встрече нового сегмента, перезаписывать старый, если он был.

PS Т.е. после правки листинг получится такой:
Code:
  1. lock xchg ds:[di],ax


-----
Yann Tiersen best and do not fuck




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 13 ноября 2010 12:01
· Личное сообщение · #25

PE_Kill пишет:
каждый раз при встрече нового сегмента, перезаписывать старый, если он был.

Именно так. Ты вроде просил исправленный дизасм ольки, могу сделать, если нужен.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 13 ноября 2010 12:04 · Поправил: PE_Kill
· Личное сообщение · #26

Да пока не надо, изучаю фрипаскалевский двиг. Довольно грамотно сделан, поддерживает 64 бита, 3dnow и прочее. Пока в нем поколупаюсь.

PS А баг с сегментами там ИМХО специально сделан, т.к. дизасм этот специально для отладчика накоден, т.е. чтобы видно было при отладке затрагиваемые сегменты и прочее. Т.е. листинг там в принципе не всегда работоспособный, вот пример:

Code:
  1. F2A4: ?repne?movsb Yb,Xb

Как это конпелировать? Но доделать до нормального листинга можно, хотя мне он и не нужен пока, достаточно разбора до флагов.

-----
Yann Tiersen best and do not fuck




Ранг: 5.4 (гость), 4thx
Активность: 0=0
Статус: Участник

Создано: 14 ноября 2010 22:39
· Личное сообщение · #27

CondZero из ARTeam вроде фиксил что-то. Я детально не смотрел, вот:
www.accessroot.com/arteam/site/download.php?view.263




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 15 ноября 2010 11:51 · Поправил: PE_Kill
· Личное сообщение · #28

Почитал слегка маны интела, составил вот такую последовательность:

66 F2 0F C8

что должно быть по идее
Code:
  1. repne bswap ax

Проверил в отладчике, всё правильно работает, AX обнуляется. Что говорят дизасмы:

OllyDbg 1.1:
Code:
  1. 66:F2:          PREFIX REPNE:
  2. 0FC8            BSWAP EAX


IDA 5.2:
Code:
  1. db      66h
  2. repne bswap eax


CADt by MS-REM:
Code:
  1. 66F20FC8          repnz bswap ax


FreePascal:
Code:
  1. 66F20FC8 repne bswap ax


DUMPPE:
Code:
  1. 66F20FC8      repne   bswap ax


Выходит топовые дизасмы фигню показывают.

-----
Yann Tiersen best and do not fuck





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 15 ноября 2010 17:12
· Личное сообщение · #29

PE_Kill, а медиану не пробовал?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 16 ноября 2010 14:59
· Личное сообщение · #30

Есть ли у вендоров процов таблицы опкодов? Т.е. вижу я опкод, как мне его опознать используя маны вендоров, не ходить же по всем мнемоникам и искать соотвествие. Или только так?

-----
Yann Tiersen best and do not fuck



. 1 . 2 . >>
 eXeL@B —› Крэки, обсуждения —› OllyDbg дизасм: так почему же не использовать?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати