eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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

Ранг: 112.9 (ветеран)
Статус: Участник

Создано: 1 сентября 2012 04:26 · Поправил: 27 июля 2016 10:12 vden New!
Цитата · Личное сообщение · #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



Статус: Пришелец

Создано: 23 апреля 2015 18:08 New!
Цитата #2

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

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

Ранг: 112.9 (ветеран)
Статус: Участник

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

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


Статус: Пришелец

Создано: 23 апреля 2015 18:14 New!
Цитата #4

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

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

Ранг: 112.9 (ветеран)
Статус: Участник

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

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

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


Ранг: 112.9 (ветеран)
Статус: Участник

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

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

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

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

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

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

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



Ранг: 1013.7 (!!!!)
Статус: Участник

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

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

Ранг: 112.9 (ветеран)
Статус: Участник

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

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


Ранг: 1013.7 (!!!!)
Статус: Участник

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

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

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


Ранг: 112.9 (ветеран)
Статус: Участник

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

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


Ранг: 1013.7 (!!!!)
Статус: Участник

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

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

Ранг: 77.9 (постоянный)
Статус: Участник

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

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

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

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

Ранг: 112.9 (ветеран)
Статус: Участник

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

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

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

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

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

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

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

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

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



Ранг: 334.1 (мудрец)
Статус: Участник
born to be evil

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

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

Ранг: 112.9 (ветеран)
Статус: Участник

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

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

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

http://blog.vdisasm.com/

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

Ранг: 112.9 (ветеран)
Статус: Участник

Создано: 6 февраля 2016 21:48 · Поправил: 6 февраля 2016 22:18 vden New!
Цитата · Личное сообщение · #16

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

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

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


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

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


Ранг: 112.9 (ветеран)
Статус: Участник

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

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

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

Ранг: 214.2 (наставник)
Статус: Участник

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

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

Ранг: 112.9 (ветеран)
Статус: Участник

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

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

Ранг: 112.9 (ветеран)
Статус: Участник

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

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

http://vdisasm.com/ca

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

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

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

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



Ранг: 1013.7 (!!!!)
Статус: Участник

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

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

Ранг: 112.9 (ветеран)
Статус: Участник

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

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

Ранг: 112.9 (ветеран)
Статус: Участник

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

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

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

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



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

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


Ранг: 112.9 (ветеран)
Статус: Участник

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

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

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

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

Ранг: 112.9 (ветеран)
Статус: Участник

Создано: 6 мая 2016 13:58 New!
Цитата · Личное сообщение · #25

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

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


Ранг: 112.9 (ветеран)
Статус: Участник

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

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



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



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

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

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



Ранг: 269.3 (наставник)
Статус: Участник
Advisor

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

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

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

Ранг: 112.9 (ветеран)
Статус: Участник

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

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


Ранг: 312.4 (мудрец)
Статус: Участник

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

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

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

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

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

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

Ранг: 299.1 (наставник)
Статус: Модератор
CrackLab

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

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

бред

Ранг: 112.9 (ветеран)
Статус: Участник

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

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

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

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

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

На сейчас нужно решить в первую очередь:
- анализ потока данных, отслеживание значений в переменных и памяти
- детект структур языков высокого уровня - циклы, if-then-else можно улучшить, switch-case.
- рекурсивный анализ начиная с oep
<< . 1 . 2 . 3 . 4 . 5 . 6 . >>
 eXeL@B —› Софт, инструменты —› VDisAsm

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS