Сейчас на форуме: -Sanchez-, Alf, Adler, Rio, vsv1 (+8 невидимых)

 eXeL@B —› Софт, инструменты —› VDisAsm
<< . 1 . 2 . 3 . 4 . 5 . 6 . >>
Посл.ответ Сообщение

Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 01 сентября 2012 04:26 · Поправил: vden
· Личное сообщение · #1

Страница проекта

Версия 2
C# + WPF, в разработке
Движок анализатора используется во внутренних проектах

Заметки о ходе разработки нового инструмента (анализатора)


Версия 1
Написана на Delphi, открытый исходный код
Legacy

В общих чертах:

- дизассемблирование x16, x32, x64 (через mediana by Mika0x65)
- дизассемблирование ARM
- FastTracer для быстрого анализа кода и проставления ссылок

Исходники: https://github.com/vdisasm/vdisasm.git

| Сообщение посчитали полезным: SReg, _ruzmaz_, =TS=, plutos, reversecode, ressa, Fedonin, Dart Raiden, 4kusNick, VodoleY, sendersu, verdizela, Wald, DenCoder, DICI BF, screen66

Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 04 сентября 2012 12:07 · Поправил: vden
· Личное сообщение · #2

@Getorix
ARM своими силами. Но если найду хорошую библиотеку для разбора структуры ARM инструкций, можно будет сэкономить времени.

@=TS=
ручное изменения типа операндов (в частности, задание типа указателей) предусмотрено в проекте?
Сейчас такой возможности нет. Но планируется. Я понимаю насколько важно правильно расставить для операндов типы: смещения, указатели, типы чисел, enums, поля структур.

Как предполагается задавать пользовательские типы данных?
Типы будут делиться на 2 вида: простые и составные.

Простые (например uint32) должны переводить последовательность байт в "текст" и наоборот (если пользователь захочет изменить значение). Простые типы сейчас встроены, но в идеале должны подгружаться как плагины.

Составные это, например, массив или структура, составляются из простых. Хочу сделать наследуемые структуры.

Составные типы должны быть в своей определённой нотации. Чтобы их было легко создавать, хочу сделать фронт-энд для C и Pascal. Т.е. чтобы на вход дать C или Pascal текст типа, на выходе тип во внутреннем представлении.

Но это все пока только в черновиках, т.к. потребует подсистемы типов и библиотеки типов.

Навигацию назад можно подвесить также и на BkSpace?
Да. Это даже логичнее чем Escape. Добавил в текущую версию.

@sys_dev
Передрать из IDA популярные горячие клавиши
Передрать имхо неправильное слово. Т.к. все привыкли к раскладке в IDA, то сейчас клавиши назначены аналогично. За некоторым исключением, например CTRL+S - сохранить вместо секций.
А вообще нужно делать редактируемые раскладки.




Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 04 сентября 2012 22:55
· Личное сообщение · #3

Передирать всё подряд не надо -- там хватает лишнего\неудобного. А вот взять некие основные стоит.

Например D -- назначение двоичных типов byte/word/dword(/возможно qword) (как сейчас)
Alt-D -- выбор бинарного типа из списка
A -- строка, наиболее подходящая к текущему бинарнику
Alt-A -- выбор типа строки из списка
O -- тип является указателем (смещением)
Alt-O -- выбор типа указателя / смещения из списка и т.д.

-----
DREAMS CALL US





Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 23 сентября 2012 04:09 · Поправил: =TS=
· Личное сообщение · #4

С билдом 2012-09-21 уже немножко веселее.

Характер числа (абсолютное смещение {нетипизированный указатель} / значение) выставляется. Cмещения подсвечиваются.

Баг с именованием адресов пофиксился:
[gui] renaming label referenced name (in call, jump) is not changed

Ждём возможности указания типа адресуемых данных и вида смещения (абсолютное {указатель} / относительное {кода/данных} / относительное {структуры типа данных})

-----
DREAMS CALL US




Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 26 сентября 2012 19:16 · Поправил: vden
· Личное сообщение · #5

Добавлен баг-трекер. Можно постить баги прямо там.

В последней версии, данные отображаются по колонкам: адрес, текст, ссылки, коменты. Так наверно проще будет ориентироваться.

=TS=
Да, смещения сейчас только абсолютные. Займусь ими плотнее когда закончу текущие оптимизации.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 26 сентября 2012 19:53
· Личное сообщение · #6

1) что бы постить на баг трекер нужно регистрироватся - скучно
2) отпишешь уже когда будет версия с исправлеными пожеланиями-багами до этого, что в баг листе были




Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 22 января 2013 23:10
· Личное сообщение · #7

Интересно было бы чего-то новенького пощупать

-----
DREAMS CALL US




Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 23 января 2013 18:57 · Поправил: vden
· Личное сообщение · #8

Жалко расстраивать. Конечно, прошло много времени, но я пока решил переделать много вещей:

* полностью переделать движок базы данных (почти готов)

* добавить плагины
большая часть функционала будет именно в плагинах, ну и понятно, это улучшит расширяемость/заменяемость

* заменить анализаторы для разных процессоров на один универсальный.
грубо говоря анализ будет не для разных процессоров, а для одинакового промежуточного кода
(тут работы ого-го : )

* наконец-то появятся функции (потому что они будут нужны для анализатора)

* добавить аналог ids (это просто), т.е. xml файлы с маппингом ordinal -> name для библиотек

* добавить создание и применение сигнатур

* всякие мелочи, вроде калькулятора, можно будет делать плагинами.
либо гуи можно будет вообще выложить опенсорc (delphi xe2+), если кто-то кроме меня захочет его править

* движок по-идее можно будет использовать независимо от гуи

* думаю довести до ума типы, сделать библиотеки типов

Сроков я не называю, потому что это всё делается в фоновом режиме. Спрашивайте если что : )

| Сообщение посчитали полезным: Dart Raiden, =TS=, zeppe1in, icerix, 4kusNick, Fallout


Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 01 августа 2013 22:29
· Личное сообщение · #9

На сайте демка версии 1.1 оказывается появилась

-----
DREAMS CALL US




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

Создано: 21 октября 2013 16:01
· Личное сообщение · #10

уже --> 1.4 <--




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 21 октября 2013 16:16
· Личное сообщение · #11

Очередной дизасм, чем он лучше той же олли ?

Тонны их уже, но вот только годных там не появляется, а значит шлак остальное.



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

Создано: 21 октября 2013 16:21
· Личное сообщение · #12

Dr0p пишет: Тонны их уже, но вот только годных там не появляется
Так напиши же годный, для быстрого анализа бинаря, hiew не плох, но адова консоль все портит, hackers disassembler, тоже вполне годный быстро посмотреть, но сам движок морально устарел, а так то, мы все побеждаем ветряные мельницы и единицы релизят, пусть кривое, хромое, и бажное, но оно есть, а шлак, это голословные заявления.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 21 октября 2013 16:23
· Личное сообщение · #13

F_a_u_s_t

В олли кошерный дизасм, также и bea. Эти два есть труъ. Остальное всё дерьмо.



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

Создано: 21 октября 2013 16:30
· Личное сообщение · #14

Dr0p пишет: В олли кошерный дизасм
Не удобен для статического анализа.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 21 октября 2013 16:33
· Личное сообщение · #15

F_a_u_s_t

Я ядро им открываю и доволен. Ида это какой то ппц.



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

Создано: 21 октября 2013 16:38
· Личное сообщение · #16

Dr0p пишет: Ида это какой то ппц.
Вот это и есть, что то среднее между просто просмотреть листинг и IDA.



Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 21 октября 2013 17:01 · Поправил: vden
· Личное сообщение · #17

Dr0p пишет:
Очередной дизасм, чем он лучше той же олли ?

Тонны их уже, но вот только годных там не появляется, а значит шлак остальное.

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

Будем прибавлять "годности" со временем

А если есть реализация идей, еще лучше.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 21 октября 2013 18:19
· Личное сообщение · #18

bea кошерный? Достаточно поверхностное и неполное тестирование выявило в беа свыше 100 ошибок. Примерно столько же и в дисторме. Удачи в их использовании.

| Сообщение посчитали полезным: Artem_N, =TS=


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 28 октября 2013 05:41
· Личное сообщение · #19

Archer пишет:
Удачи в их использовании.

ё... а что же тогда использовать то? мне bea почему-то тоже казался наиболее стабильным

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 28 октября 2013 10:46
· Личное сообщение · #20

Archer пишет:
Достаточно поверхностное и неполное тестирование выявило в беа свыше 100 ошибок.

Где можно ознакомиться с данным тестированием?



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

Создано: 28 октября 2013 12:25
· Личное сообщение · #21

Аннологично. пользую bea .. катострофических глюков вроде не видел. И наскок знаю фиксяк их быстро если находят.

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 28 октября 2013 12:42
· Личное сообщение · #22

Тестирование проводилось достаточно просто-были взяты несколько основных дизасмов, которые прогонялись по всем инструкциям и максимально сравнивался выход. Где не совпало-проверялось руками по манам.

По результатам могу сказать, что самый нечеловеческий интерфейс вместе с минимумом полезной информации с большим отрывом взял мелкомягкий мсдис.
Самыми кривыми оказались беа и дисторм, в каждом за сотню ошибок, где-то по 120-130.
Где-то 3 место по ошибкам заняла медиана, порядка 80 ошибок.
Самым наименее бажным оказался xed (ошибок 10-20), но по навороченности и излишней нагруженности интерфейса он уходит от беа и дисторма с большим отрывом. Там одних размеров операндов штук 40. Может это где-то и полезно, но на мой взгляд, они залезли на слишком высокий уровень и сильно перегрузили.
Относительно стабильным середнячком оказался удис, всего-то 30-40 ошибок. Но и информации он даёт заметно меньше, чем беа/дисторм.
Олькин дизасм тестировался достаточно мало, х64 не держит, а х86 версия была достаточно забагованой, когда я смотрел крайний раз.

Всё это проводилось достаточно давно, тестирование было не полным. И пишу на память, так что данные всяко не точные.
А какой из них выбирать, решайте сами А там как знать, может и дизасм, для которого было это тестирование, решат выпустить на паблик, это я хз.

| Сообщение посчитали полезным: Isaev, vden, DenCoder, HandMill, VodoleY

Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 28 октября 2013 15:23 · Поправил: vden
· Личное сообщение · #23

Был еще такой тест http://roberto.greyhats.it/pubs/issta10-nversion.pdf таблица 3.

Если не ошибаюсь, то так:
- Over supported: дизасм инструкцию разбирает, а процессор не поддерживает
- Not supported: дизасм инструкцию не разбирает, а процессор поддерживает
- Incorrect: дизасм инструкцию разбирает неправильно



| Сообщение посчитали полезным: DenCoder


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

Создано: 28 октября 2013 16:50 · Поправил: DenCoder
· Личное сообщение · #24

vden
Сомнительный документ. Были проверены некоторые тесты, результаты:

1. Для иды информация устарела.
Code:
  1. Disassembler Input Decoded instruction Correct result
  2. Ida Pro f6 5c 34 ae neg [esp+esi+0x52] neg [esp+esi-0x52]

В 5.5 дизассемблируется правильно.

2. Для OllyDbg натянуто, пример неудачен
Code:
  1. Disassembler Input Decoded instruction Correct result
  2. OllyDBG d9 7f d2 fstcw [edi-0x2e] fnstcw [edi-0x2e]

несущественно и некритично, поскольку fstcw и fnstcw отличаются префиксом WAIT с опкодом 9b(fstcw = wait fnstcw). Для знающего допустимо отсутствие 'n' в мнемокоде

Но информация полезная, наводит на мысль провести свои тесты используемых инструментов. И также следом не мешало бы проверить надёжность виртуальных машин антивирусов, поскольку по ходу составления теста для поверки иды совершенно безобидный, взятый случайно мой exe-шник, после правки опкода был объявлен как
Code:
  1. 28.10.2013 16:30:39        Защита в режиме реального времени файл     U:\Freelance\VC\Lilya\1\DVD\Release\Копия DVD.exe         вероятно неизвестный NewHeur_PE вирус       очистка невозможна      Admin         Событие произошло в файле модифицированном приложением: G:\Program Files\WinHex\WinHex.exe.


-----
IZ.RU




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

Создано: 28 октября 2013 20:52 · Поправил: dosprog
· Личное сообщение · #25

VDisasm 1.4: --> Access violation error <-- at GUI.EXE @04976A6

----------------------------------------------------------------------
По поводу тестов http://roberto.greyhats.it/pubs/issta10-nversion.pdf - что-ж, кое-что полезное там можно почерпнуть. Понравились примеры багов.
Тестанул сразу по этим примерам одну старинную примочку:
1) 000000000:2659_____pop ecx _____- Ok - лишний префикс всё равно игнорируется.
2) 000000002:0F2183___mov ebx,dr0 _____-Ok
3) 000000005:D4CD_____aam ; 0CDh ______- ВОПРОСЫ!
4) 000000007:8276E5DC_xor byte ptr [esi-0001Bh],0FFFFFFDCh _______-*Error* - Но не страшно. Выплывет при трансляции.
5) 00000000B:D97FD2___fstcw [edi-0002Eh] ______-Ok
6) 00000000E:DBE0_____<invalid> _______ OK!!!!!! Всё-таки.
7) 000000010:8E0B_____mov cs,[ebx] ______OK!!!!!! - Но стоило бы вывести предупреждение. Хотя ассемблер такое и не оттранслирует.

Здесь ошибка только одна - пример 4) - надо разбираться.
По примеру 3) - tasm как-то странно реагировал на аргумент не равный 10d, поэтому ";;0CDh". Редко, но выплывает. Неприятно.
По примеру 6) - Это не ошибка. Если процессор 32-битный, то какая же там <fneni> ?
По примеру 7) - И это не ошибка (дизассемблера). Ошибкой будет выполнять такое на процессоре, но инструкция декодируется именно так.
-------------------------------------------------
Примеры хороши.


DenCoder,
- о префиксе 'n' - как же обойтись без мнемоник с 'n' ? А если в коде действительно нет WAIT? - А ассемблер тогда (потом) сгенерирует эту WAIT, которой не было в исходном BIN-коде. (Я когда-то столкнулся с тем, что асмом генерировалось по 2 WAIT - один действительный (от мнемоники WAIT), а один добавочный из-за отсутствия в дизассемблере мнемоник с 'n'). Скорей уж допустимо отсутствие мнемоник без этих 'n'.




Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 29 октября 2013 00:30
· Личное сообщение · #26

По поводу дизасмов -- udis86, насколько видел, под себя допиливал RedPlait для проекта x64splicer.

-----
DREAMS CALL US




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

Создано: 30 октября 2013 05:03
· Личное сообщение · #27

vden
это все что угодно но это не тест, что таблица 3, что таблица 4 - просто ни о чем,
прогнали конкретные версии на конкретном мусоре, который их фузер нафузировал,
разумеется, нашли какие-то ошибки, в интеловском дизассемблере их просто не может не быть

dosprog
с чем разбираться в AAM ? c тем что операнд - это imm8 и байт делится на байт



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

Создано: 30 октября 2013 08:10 · Поправил: dosprog
· Личное сообщение · #28

[OFFTOP]
sen,
спасибо, что значит <aam> - тут разбираться не с чем. Я привёл вариант, как его пришлось реализовать (<aam;0CDh>) из-за чудачеств tasm.exe.
Вопрос только в реакции tasm.exe на инструкцию <aam 0CDh>. В tasm.exe у <aam> нет аргументов и подразумевается 10.
Ещё вариант - <db 0D4h,0CDh ; aam 0CDh>.
[/OFFTOP]

vden,
так, выходит, BIN-16bit вообще не дизассемблируется VDisasmo'ом ?...



Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 30 октября 2013 13:14 · Поправил: vden
· Личное сообщение · #29

dosprog пишет:
так, выходит, BIN-16bit вообще не дизассемблируется VDisasmo'ом ?...

сейчас нет. а вообще дизасм поддерживает 16 бит. прикрутить наверно будет не сложно. просто даже не задавался этим вопросом



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

Создано: 30 октября 2013 21:06 · Поправил: dosprog
· Личное сообщение · #30

Что-ж, есть резон. Когда требуется 64/32-bit дизасм, про досовские 16-bit программы можно смело забыть.



Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 31 октября 2013 15:32 · Поправил: vden
· Личное сообщение · #31

***
Я добавил загрузчик для DOS файлов. Но есть проблема с адресами. Из-за того что в дос адресация относительно сегментов, а в vd виртуальная память плоская. Например

mov ax, cs:[0]

посчитает ссылкой на адрес 0, но если cs=10h, то реальный адрес 100h.

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

***
Еще включил 16битный дизасм mediana.

***
И залил примеры плагинов на делфи (те же загрузчики, dos, pe32/64, elf которые используются).

https://code.google.com/p/vdisasmpub/

Так что если у кого-то будут исправления/патчи, можно добавлять в issues на googlecode.

Сами АПИ еще будут значительно меняться, в частности, для загрузчиков. Но в целом небольшие плагины уже можно писать.


<< . 1 . 2 . 3 . 4 . 5 . 6 . >>
 eXeL@B —› Софт, инструменты —› VDisAsm
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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