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

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

Создано: 23 апреля 2015 18:08
· Личное сообщение · #2

vden пишет: Коммерческий докинг я заменил на простой TPageControl

Почему не JEDI vcl docking?
Все что лучше джедаев стоит денег.



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

Создано: 23 апреля 2015 18:11
· Личное сообщение · #3

Может быть и JEDI vcl docking. Когда-то давно я его смотрел и чем-то он мне не понравился



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

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

vden пишет: чем-то он мне не понравился

Я догадываюсь чем, после TMS или DevExpress, JEDI выглядит убого, много лишнего кода писать, на то оно и даром, лучших альтернатив не встречал, хотя года два назад озадачивался поиском.)



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

Создано: 27 апреля 2015 15:05 · Поправил: vden
· Личное сообщение · #5

исходники версии 1.8 теперь на github

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

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

Создано: 16 июля 2015 15:20 · Поправил: vden
· Личное сообщение · #6

Потихоньку перехожу с Delphi. Старый проект поддерживатся не будет.
Новый проект думаю начать на C++ (универсальность) или C# (упрощает кодинг, авто сбор мусора).

Надесь скоро сделать тестовую версию анализатора. По предварительным тестам (еще в дельфишном варианте), результаты довольно неплохие.

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

Ну а дальше можно прикрутить к нему простой UI, который понемногу можно будет улучшать.

Такой вот роадмап.

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


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

Создано: 16 июля 2015 18:09
· Личное сообщение · #7

Хорошо спонсируется?



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

Создано: 16 июля 2015 18:33
· Личное сообщение · #8

Практически никак.




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

Создано: 16 июля 2015 18:40
· Личное сообщение · #9

Кикстартер? и через год открытие оффисов разработчиков по всему миру с клиентами мирового маштаба ?

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

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

Создано: 16 июля 2015 18:55
· Личное сообщение · #10

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




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

Создано: 16 июля 2015 19:18
· Личное сообщение · #11

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



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

Создано: 16 июля 2015 21:45 · Поправил: v00doo
· Личное сообщение · #12

reversecode пишет:
но в любом случае их будет побольше чем ждать донейты

Если после запрошенной суммы проект не будет готов, то по условиям кикстартера деньги должны быть возвращены всем пожертвовавшим.

Ps К тому же, обычно на кикстартере предлагается система "плюшек" для донатеров, т.е. если сумма превышает какую-то часть, то пожертвовавший получает какую-то фичу в проекте и если в играх это рисованные персонажи, место в титрах, и прочее, то что добавлять в дизассемблер? Всех в абаут? Место хватит то?
А если серьезно, то там же уже собрали как-то раз денег на криту (графический редактор, krita.org), который теперь может похвастаться плюшками, которые обгоняют даже некоторые фичи коммерческих редакторов:
https://www.kickstarter.com/projects/krita/krita-free-paint-app-lets-make-it-faster-than-phot
Так что даже очень неплохая идея.



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

Создано: 11 августа 2015 15:50 · Поправил: vden
· Личное сообщение · #13

Провожу эксперементы
Ссылка на подопытный файл

Первый этап - трансляция X86 кода в промежуточный код

Для простоты выбрана функция 51F2D0
- состоит из одного базового блока
- немного типов инструкций (push, pop, mov, lea, call, ret)
- длинная серия повторяющихся инструкций
- используются целые регистры (например EAX, а не AX, AH, AL)
- есть обращения к памяти
- обращения к памяти по идее просто отследить (на следующих этапах)
- есть CALLы, но сейчас никак не обрабатываются (заменяются NOPами)

Вот что получилось

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

Немного о формате текста:

// - это комментарий, в нем указывается текущая инструкция + иногда другие моменты
O32, A32 - это размер операнда и адреса в битах
Константы выводятся в hex, двоеточие, битовый размер
Созданные переменные идут с префиксом "v" + номер.
Команды, думаю, более-менее стандартные.
SignExtend - расширяет выражение до нужного числа бит, учитывая знак (самый левый бит).
ZeroExtend - просто расширяет выражение до нужного числа бит.

| Сообщение посчитали полезным: Gideon Vi, zNob


Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 11 августа 2015 20:43
· Личное сообщение · #14

vden
capstone не лучше медианы? --> Link <--

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




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

Создано: 11 августа 2015 21:34
· Личное сообщение · #15

Capstone должен быть лучше тем, что он более-менее поддерживается. Он вроде на основе дизасмов из llvm.
Возможно я и использую его.

Тут я нарисовал примерно схему анализатора

http://blog.vdisasm.com/

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



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

Создано: 06 февраля 2016 21:48 · Поправил: vden
· Личное сообщение · #16

Понемногу переписывается, точнее пишется заново, код на C# + WPF. Пока первая цель - сделать приемлимый анализатор и минимальный интерфейс.

Немного изучил вопрос по crowdfunding-у. Для подобного проекта, скорее всего, не сработает.

Для демо есть несколько интересных идей. Надеюсь к лету большая часть функционала будет готова.


PS постараюсь сделать цикл постов о разработке анализатора на конкретном примере. Думаю многим будет интересно.

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

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

Создано: 12 февраля 2016 16:38
· Личное сообщение · #17

Итак, первые заметки по разработке анализатора.

Информация довольно краткая. Пока подбираю какой-нибудь несложный пример.



Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 12 февраля 2016 18:02
· Личное сообщение · #18

Чем обусловлен переход с Delphi на шарп?

-----
xchg dword [eax], eax




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

Создано: 12 февраля 2016 18:28 · Поправил: vden
· Личное сообщение · #19

В общем разработка проще, проблем с компилятором нет, дженерики работают как надо, сборщик мусора, много уже готовых классов и библиотек.



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

Создано: 10 апреля 2016 11:49 · Поправил: vden
· Личное сообщение · #20

Итак первая черновая версия (target net framework 4.6.1)

http://vdisasm.com/ca

Пока еще толком ни на что не способна, но довольно неплохие перспективы (в идеале - декомпилятор)

В примере кратко показан перевод машинного кода в промежуточный вид + некоторые оптимизации. Функция простая по структуре (1 базовый блок), но сложная по функционалу (много вычислений).

Это практически новый проект, направленный на анализ кода.

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


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

Создано: 10 апреля 2016 15:28
· Личное сообщение · #21

интересно как это будет переносится на платформы отличные от винды



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

Создано: 10 апреля 2016 19:15
· Личное сообщение · #22

Пока никак. В ближайшее время вряд ли это понадобится.
Если вопрос как в принципе, то, вероятно, как веб-приложение.



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

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

В данный момент в разработке добавление графа потока управления

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

Вот большой пример:



Зеленый узел - точка входа
Красные узлы - точки выхода / места где потерян поток управления
Черные грани - безусловные переходы
Зеленые грани - переходы по условию
Красные грани - переходы по обратному условию
Оранжевые грани - безусловные переходы по таблице прыжков

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

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

Создано: 22 апреля 2016 15:00 · Поправил: vden
· Личное сообщение · #24

Обновил страницу

Добавлено: control flow visualization при помощи MSAGL. В msagl есть свои баги, но в целом графы работают. В данный момент просто для визуализации структуры функции. Есть pan & zoom.

Довольно просто рассмотреть структуры if-then, if-then-else.



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

Создано: 06 мая 2016 13:58
· Личное сообщение · #25

А так выглядит тот же граф, но с найденными и свернутыми If-Then-Else блоками.



| Сообщение посчитали полезным: Hellspawn, deniskore, daFix, v00doo, mushr00m, DICI BF

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

Создано: 23 мая 2016 09:59 · Поправил: vden
· Личное сообщение · #26

Добавил несколько режимов отображения графа



Улучшено окно сообщений функции



Добавлен список последних файлов.

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

| Сообщение посчитали полезным: zNob, Bronco, Hellspawn, DICI BF, SReg, daFix, void, Williams


Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 23 мая 2016 22:04
· Личное сообщение · #27

vden пишет:
сборщик мусора

винапи быстрее и надёжней, на отдачу дотнет всё таки жадный.
По тулзе вопрос, как некст понятно, а как назад вернуться, если в окне зависимостей нет ссылок?

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




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

Создано: 24 мая 2016 07:20
· Личное сообщение · #28

Back/Forward должны перемещать по списку посещенных адресов. Позже посмотрю. Вполне вероятно есть какие-то проблемы.




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

Создано: 24 мая 2016 10:25 · Поправил: DenCoder
· Личное сообщение · #29

void пишет:
Чем обусловлен переход с Delphi на шарп?

Шарп легче для перехода с дельфи на си, c# напоминает дельфи, привычнее, во многом удобнее. Но есть некоторые проблемы переносимости на другие компы. Как минимум нужный фреймворк нужно ставить... Остальные проблемы - меня не было в тот день на работе, когда их решали, но скажу, что проще они решаются, если поставить ту же среду разработки, на которой делалось приложение.

Bronco пишет:
винапи быстрее и надёжней, на отдачу дотнет всё таки жадный.

Бесспорно. И никому не советую конечный продукт оставлять на шарпе. Шарп для макета хорошо подходит. Всё то же, что делает шарп, можно сделать на чистом C++ без дотнета. Но, кстати, управляемый код можно линковать и с неуправляемым. Графика на шарпе, функционал в dll на си/дельфи.

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

-----
IZ.RU




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 24 мая 2016 10:45
· Личное сообщение · #30

DenCoder пишет:
c# напоминает дельфи

бред



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

Создано: 24 мая 2016 10:51 · Поправил: vden
· Личное сообщение · #31

Пару проблем с back/forward исправил. Добавил сохранение экспортируемых символов в сессию.

DenCoder пишет:
окошко с кодом

Кода специально нет в графе, чтобы видеть только структуру функции.
Давно в планах сделать при нажатии на узел переход к месту в коде. Так мне кажется лучше.
Но пока я не решил оставить текущий контрол для текста (avalonedit) или что мне кажется лучше, сделать свой, оптимизированный под вывод выражений, ссылок и подсветки.

Фреймворк мне не кажется большой проблемой.

На сейчас нужно решить в первую очередь:
- анализ потока данных, отслеживание значений в переменных и памяти
- детект структур языков высокого уровня - циклы, if-then-else можно улучшить, switch-case.
- рекурсивный анализ начиная с oep


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