Сейчас на форуме: -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
Статус: Участник

Создано: 24 мая 2014 01:28 · Поправил: vden
· Личное сообщение · #2

Очень не удобно, что нет возможности превратить 0x434B4650 в операнд вида 'CKFP'
Постараюсь в ближайшем времени добавить поддержку для этого и для других типов констант.

Пока обновил в текущей версии поиск байт/строк и поиск текста в списках. Если ничего не найдено, выдается beep и в статусбаре отображается соотв. текст.




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 24 мая 2014 05:01 · Поправил: -=AkaBOSS=-
· Личное сообщение · #3

пожелания:
1. ступил немного, извините
2. фича как в hiew: идущие подряд NOP отображать как одну инструкцию. и еще можно писать рядом количество нопов в блоке. временами пригождается, когда код от мусора автозаменой чистишь

некоторые ошибки:
1. инвалидные последовательности 8CFx/8EFx дизасмятся без каких-либо предупреждений. так и надо?
2. в 32битном режиме некоторые адреса знаково расширяются до 64бит
Code:
  1. 401000 8CF0             mov eax, badsreg7
  2. 401002 8EF0             mov badsreg7, ax
  3. 401004 8CF8             mov eax, badsreg8
  4. 401006 8EF8             mov badsreg8, ax
  5. 401008 8D0500000080     lea eax, dword ptr [0xFFFFFFFF80000000]
  6. 40100E 8D0500000000     lea eax, dword ptr [0x0]
  7. 401014 8B0500000080     mov eax, dword ptr [0xFFFFFFFF80000000]
  8. 40101A 8B0500000000     mov eax, dword ptr [0x0]
  9. 401020 A100000080       mov eax, dword ptr [0x80000000]
  10. 401025 A100000000       mov eax, dword ptr [0x0]


3. программа болезненно реагирует на нестандартные PE-файлы
"Access violation at address 00405726 in module 'gui.exe'. Read of address 02158288"
файл в аттаче

b700_24.05.2014_EXELAB.rU.tgz - mype.exe

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

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

Создано: 24 мая 2014 22:19 · Поправил: vden
· Личное сообщение · #4

пока исправил в текущей версии
2. в 32битном режиме некоторые адреса знаково расширяются до 64бит и
3. программа болезненно реагирует на нестандартные PE-файлы

8CFx/8EFx сейчас дизассемблер выдает как нормальные. Исправлено будет при создании полностью своего дизасма.

идущие подряд NOP это неплохая идея. Только без полного анализа функции возможны проблемы. Я уже думал над спец. подходом для очистки кода от мусора, и скорее всего такой функционал будет, но не раньше чем появится нормальный анализатор.

Вообщем графы сейчас добавляются как раз для того чтобы мне было легче отлаживать анализ функции (DFA и все такое)

| Сообщение посчитали полезным: -=AkaBOSS=-, 4kusNick

Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 25 мая 2014 00:57
· Личное сообщение · #5

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


какого типа мусор планируется очищать



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

Создано: 25 мая 2014 01:36
· Личное сообщение · #6

vden

Авто дизассемблирование планируется? ( опционально, пох что будет путать код и данные, кому нужно включает опцию, а остальные пользуются по умолчанию )
Часто нужно быстро глянуть бинарь и тыкать анализ напрягает.




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 25 мая 2014 01:59 · Поправил: -=AkaBOSS=-
· Личное сообщение · #7

vden
Access violation at address 01E4E017 in module 'x86_mediana.dll' Read of address 00000000
дизасм ругается на последовательности FFD8-FFDF
в предыдущей версии этого не было. пример в аттаче

/ADD
ВОТ ТУТ лежит неплохой тестовый файлик


F_a_u_s_t
.. и весь дизасм будет дохнуть на трюках вроде такого
Code:
  1. db 0xEB
  2. call dword ptr [imported_func]
  3.  
  4. ; ========================
  5.  
  6. 401000 EBFF             jmp 0x401001
  7. 401002 15
  8. 401003 64
  9. 401004 20
  10. 401005 40 @
  11. 401006 00


F_a_u_s_t пишет:
С чего ему дохнуть и какая собственно разница сдохнет он на автомате или от того, что я нажму анализ?

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


c0d6_25.05.2014_EXELAB.rU.tgz - test.exe



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

Создано: 25 мая 2014 03:53
· Личное сообщение · #8

-=AkaBOSS=- пишет: .. и весь дизасм будет дохнуть на трюках вроде такого

С чего ему дохнуть и какая собственно разница сдохнет он на автомате или от того, что я нажму анализ?



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

Создано: 25 мая 2014 14:28 · Поправил: vden
· Личное сообщение · #9

какого типа мусор планируется очищать
Для начала удаление инструкций не влияющих на выполнение функции (для этого нужен анализ функции) и уменьшение кол-ва прыжков (например jmp->jmp->jmp в jmp)
В идеале перестроить функцию и записать в новое место. Но об этом еще рано говорить.

Авто дизассемблирование планируется? ( опционально, пох что будет путать код и данные, кому нужно включает опцию, а остальные пользуются по умолчанию )
Часто нужно быстро глянуть бинарь и тыкать анализ напрягает.

Планируется.
Если нужно как в хиеве, то можно сделать какой-то режим быстрого просмотра - только дизасм. Без анализа, ссылок, имён (т.е. база не будет вообще использоваться)

-=AkaBOSS=- посмотрю в чем там проблема обновил текущую версию. проблема в том что используется недопустимый регистр, пока сделал workaround чтобы не валился дизасм

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



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

Создано: 25 мая 2014 20:45
· Личное сообщение · #10

vden пишет: Если нужно как в хиеве

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

-=AkaBOSS=- пишет: с чего ему дохнуть - я привел пример.

Будет помечен как не валидный.
Это проблемы анализатора, а не дизассемблера, собственно разницы нет, будет код не валидный сразу или по нажатию кнопки.
Собственно это и есть причина для создания интерактивности, на автомате сложно отделить код от данных ( например asm бинари, где данные могут быть прямо в коде ).
Тем более по контексту видно, где код, а где мусор и оный уже можно пометить в ручную, это проще, чем тыкать анализ и потом помечать ( двойная работа, которая при беглом анализе еще и лишняя ).



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

Создано: 27 мая 2014 12:35
· Личное сообщение · #11

Ошибка перекрестного дизассемблирования:
Code:
  1. 0x103B648C 20E03A10         0x103AE020
  2. 0x103B6490 60E03A10         0x103AE060
  3. 0x103B6494 A0E03A10         0xA0103AE0
  4. 0x103B6495 E03A10C0         0xC0103AE0
  5. 0x103B6499 E03A10E0         0xE0103AE0
  6. 0x103B649D E0 
  7. 0x103B649E 3A :

А было так:
Code:
  1. 0x103B648C 20E03A10         0x103AE020
  2. 0x103B6490 60 `
  3. 0x103B6491 E0
  4. 0x103B6492 3A :
  5. 0x103B6493 10
  6. 0x103B6494 A0
  7. 0x103B6495 E03A10C0         0xC0103AE0
  8. 0x103B6499 E03A10E0         0xE0103AE0

Т.е. на месте 5 байт VDisAsm поставил 2 DWORD значения. Такой же косяк был в IDA.

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

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

Создано: 27 мая 2014 21:07 · Поправил: vden
· Личное сообщение · #12

Увидел наконец в чем проблема. В 0x103B6490 места хватает для dworda, а для 0x103B6494 нужно написать что не хватает места для вставки.



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

Создано: 28 мая 2014 02:22
· Личное сообщение · #13

vden пишет:
а для 0x103B6494 нужно написать что не хватает места для вставки.

Может лучше раздефайнить следующий элемент? А то неудобно сразу и u и f нажимать.

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


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

Создано: 28 мая 2014 02:27 · Поправил: Dr0p
· Личное сообщение · #14

int

> Ошибка перекрестного дизассемблирования:

Не существует дизасма, который разбивает поток разрывающихся инструкций на ветви. Логично что вылезают косяки, либо анализ останавливается. Годный кстате очень метод защиты от дизасма.

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

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

Создано: 28 мая 2014 15:52 · Поправил: vden
· Личное сообщение · #15

Исправил проблему с регионами в текущей версии (5 байт / 2 dworda). Сейчас если какой-то регион занят, он удаляется (раздефайн).



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

Создано: 18 сентября 2014 12:56
· Личное сообщение · #16

Ищу делфи (xe6,xe7) программистов для совместной разработки. Поле деятельности довольно обширное, можно выбрать из следующего:

- дописать дизассемблер для x86 (он не табличный, поэтому много ручной работы)
- дописать или переписать заново ARM + Thumb дизассемблер
- разработать API для простого доступа к функционалу из паскаля и C
- gui: опции
- другое по желанию



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

Создано: 10 октября 2014 22:51
· Личное сообщение · #17

Есть несколько запросов сделать что-то вроде сдк / публичных апи. В текущей версии все завязано на паскалевские интерфейсы, что не очень удобно для использования из си.

Пока, есть предварительная версия апи для паскаля, которая еще будет расширяться. Кому интересно, посмотрите, насколько юзабельно это будет.

Под сомнением разве-что операции со строками. Есть два типа строк:

pstr_in: строка передается в функцию (char*, UTF-8)
pstr_out: строка возвращается из функции (динамическая строка, char*, UTF-8, уничтожается с помошью pstr_out(str) )

Есть вариант все строки сделать динамическими.

Все довольно тривиально можно перевести на си. Но вначале я хочу получить фидбек, поправить апи, затем переписать ядро (core.dll) уже с новыми апи и потом сделать парсер-экспортер паскалевских заголовков в сишные.



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 11 октября 2014 00:27
· Личное сообщение · #18

vden
Посмотрел АПИ, но так и не понял суть вопроса. Какого рода фидбек ты хотел бы получить?
Если вопрос касательно строк, то вроде как в винде принято, что за передаваемые параметры отвечает вызывающая сторона. Тоесть в худшем случае запрос состоит из пары
Code:
  1. if (!function_call(&buffer[0], &buffer_size) && GetLastError() == BUFFER_TOO_SMALL)
  2. {
  3.    buffer.resize(buffer_size);
  4.   function_call(&buffer[0], &buffer_size);
  5. }


Но ты можешь сделать по другому. Для С++ весь гемор со строками вообще можно скрыть обертками.

-----
старый пень




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

Создано: 11 октября 2014 01:06 · Поправил: vden
· Личное сообщение · #19

r_e пишет:
Посмотрел АПИ, но так и не понял суть вопроса. Какого рода фидбек ты хотел бы получить?

Самый разный. Возможно по стилю или например я ожидал вопросов по utf-8, хотя мне кажется utf-8 хорошим выбором.

Если особых замечаний нет, то это даже хорошо. Переписывать ядро займет время, поэтому нужно чтобы апи были как-то стандартизированы сразу.

Кстати, пример выше можно переписать так, с использованием динамических строк
Code:
  1. pstr_out mystring;
  2.  
  3. if (function_call(&mystring))
  4. {
  5.   use(mystring);
  6.   pstr_free(mystring);
  7. }




Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 11 октября 2014 01:33
· Личное сообщение · #20

Его можно переписать даже так
Code:
  1. SmartString myString(function_call());

Все зависит от реализации управления памятью в SmartString.

Ну АПИ как АПИ. Фидбек лучше спрашивать у пользователей вашего двигла.
Хотя, я бы сделал разбивку по хедерам, а не держал простыню в одном файле.

С utf8 не вижу проблем по простой причине: кому не нравится - может написать пару convert_utf8_to_xxx/convert_xxx_to_utf8 и работать в любой кодировке.

-----
старый пень


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

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

Создано: 22 февраля 2015 13:51 · Поправил: vden
· Личное сообщение · #21

Я решил делать версию 2 с нуля. Из-за того что я не смогу поддерживать большой проект, функционал будет сведен к минимуму. Думаю, останется только x86, высвободившееся время я лучше потрачу на анализатор кода.

Если есть желающие принять участие в разработке (это Delphi XE7 сейчас), пишите в ЛС.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 22 февраля 2015 15:11
· Личное сообщение · #22

vden ноот 64 лучше вообще не отказываться. заложить поддержку хотя бы в структурах и функциях.

-----
[nice coder and reverser]


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

Ранг: 18.8 (новичок), 21thx
Активность: 0.030
Статус: Участник

Создано: 26 февраля 2015 14:18
· Личное сообщение · #23

vden, думаю, найти программиста на Delphi для данного проекта будет крайне трудно. Сам сейчас на XE7 сижу, взялся бы с удовольствием, но со временем всегда напряги. Сколько времени уже подсветку для IDR делаю, всё никак не удаётся - то одно, то другое. А по сути: надеюсь, что найдётся грамотный кодер в помощь и данный проект таки не загнётся

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

Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 26 февраля 2015 14:29
· Личное сообщение · #24

vden
Если не страдаешь сильно честолюбием - сделай открытый репо и пусть присылают тебе коммиты кто может.
2.х это хорошо. Значит есть еще ягоды в ягодицах. Но тут стоит трезво оценивать количество заинтересованых в результате людей, а помощников среди них будет еще на два-три порядка меньше.

-----
старый пень


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

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

Создано: 27 февраля 2015 14:24
· Личное сообщение · #25

Частично код открыт, это

Парсер PE
B+ Tree для хранения базы

Весь код опубликовать не получится, потому что часть я купил, и соответсвенно лицензия запрещает.



Ранг: 18.8 (новичок), 21thx
Активность: 0.030
Статус: Участник

Создано: 27 февраля 2015 18:39 · Поправил: Error13Tracer
· Личное сообщение · #26

vden, так сложнее. Посмотрим что из этого выйдет.



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

Создано: 28 февраля 2015 20:33
· Личное сообщение · #27

vden пишет:Весь код опубликовать не получится, потому что часть я купил

Под это попало GUI?
Разбор PE это хорошо, но все же лучше когда есть к чему прикручивать детали, тем более некоторые дизайнеры от бога и после их креатива останется только сжечь комп (Олег Зайцев тому пример).

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


Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 28 февраля 2015 21:13
· Личное сообщение · #28

vden а если не секрет, что приобреталось? компоненты какие-то?

F_a_u_s_t утилита хорошая, но она зависла в 90-ых )))

-----
[nice coder and reverser]


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

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

Создано: 01 марта 2015 02:22 · Поправил: vden
· Личное сообщение · #29

F_a_u_s_t пишет:
Под это попало GUI?

Hellspawn пишет:
компоненты какие-то?

GUI, система докинга окон.

PE парсер, кстати, оказался далек от идеала. Потестировал на 200К вирусни и понял что нужен редизайн.



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

Создано: 01 марта 2015 02:30
· Личное сообщение · #30

vden пишет: GUI, система докинга окон.

Скиньте GUI без самих компонентов и перечислите зависимости, а там или альтернативы найдутся или каждый будет сам устанавливать зависимости.
Это вполне нормальная практика при публикации исходного кода.



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

Создано: 23 апреля 2015 17:54
· Личное сообщение · #31

Коммерческий докинг я заменил на простой TPageControl, другие 3rd party компоненты также выкинул.
Так что до конца месяца, думаю, код почищу и залью на гитхаб.
PageControl, конечно, не так удобен, зато исходники будут открытые.
Ну может кто-то решится написать открытый хороший докинг-менеджер.


<< . 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 » Выход » ЛС
   Для печати Для печати