Сравнение существующих дизассемблеров

Тема в разделе "WASM.PROJECTS", создана пользователем dinoweb, 8 май 2011.

  1. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    Здравствуйте! Я работаю в проекте по созданию очередного велосипеда, - инструмента для дизассемблирования кода, и анализа информации. Не сочтите меня троллем, меня интересует Ваше мнение о существующих инструментах.

    Ответьте пожалуйста на вопросы:

    Какие дизассемблеры вы знаете?
    Напишите кратко по каждому:
    - Основные достоинства
    - Основные недостатки

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

    Для решения каких задач приходится использовать дополнительные инструменты, а хотелось бы использовать тот же дизассемблер (в широком смысле)?

    Мне нужна ваша помощь. Спасибо.
     
  2. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Ну, удачи вашему велосипеду.
    Вдруг вам удастся побороть монополиста? :lol:
     
  3. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    Спасибо :), к этой заветной цели буду стремиться. Неужели кроме IDA нет ничего серьёзного? Может есть, а я просто не слышал?

    Да, забыл сказать что отладчики тоже рассматриваются. Первая цель - создать полезный инструмент, и первые конкуренты - это PE-дамперы :lol: . Дальше больше. К лету начну набор бета-тестеров ;).
     
  4. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    У всех существующих дизассемблеров есть общий недостаток - обработка прерывается на разрывающемся графе(когда часть одной инструкции образует новую). Это ни олли, ни ида и никакой другой дизасм не может обработать. Для решения следует ввести псевдоописатели, тоесть виртуальные инструкции.
     
  5. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    gaeprust

    Не знал о такой проблеме у существующих дизассемблеров. Спасибо. Пересечение инструкций, конечно, не обычная ситуация, но я её предусмотрел.
     
  6. Yorik

    Yorik Артур

    Публикаций:
    0
    Регистрация:
    11 янв 2008
    Сообщения:
    18
    Взгляни в сторону HTE http://hte.sourceforge.net/
    проект скорее мёртв чем жив,сделай форк и развивай.
     
  7. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    Yorik

    Я посмотрю, может быть позаимствую какие-нибудь идеи для своего проекта.
     
  8. rmka

    rmka Member

    Публикаций:
    0
    Регистрация:
    22 окт 2010
    Сообщения:
    108
    dinoweb
    Oh, wow, какие люди. Как там твой проект графической оболочки поживает? Или что ты там делал, я уж забыл.
     
  9. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    rmka

    Да меня помнят... :)

    Да, было дело. Экспериментировал с работой без операционной системы, и для этих экспериментов была сделана простая графическая оболочка (с использованием VESA). Тогда же разбирался с APIC'ом, Paging'ом,... Но то были эксперименты, не более. Что-то более серьёзное я и не начинал, только мечтал.

    "Дизассемблер", кстати, с тех времён идея, отчасти часть той мечты, вот сейчас получила развития. Сам дизассемблер, и кое-что ещё были написаны ещё тогда, а двиг был написан сейчас. Скоро будет бета-релиз.
     
  10. XVilka

    XVilka New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2010
    Сообщения:
    24
    Адрес:
    Moscow
    1. IDA Pro - не нуждается в оценке )
    2. PyDasm
    3. beye - интерактивный + плагины
    4. hiew - интерактивный + плагины на питоне
    4. hte
    5. Sourсer
    6. ERESI - проект остановлен
    7. lida - проект остановлен, есть интересные идеи
    8. hdasm/wdasm
    9. maddisasm
    10. RD16 http://www.codenet.ru/progr/asm/rd16c.php
    11. ndisasm

    Ссылки по теме:

    http://www.wasm.ru/toollist.php?list=13
    http://exmortis.narod.ru/src_disassem.html
    http://forum.farmanager.com/viewtopic.php?p=44633

    Был еще какой-то от reverse-negineering.net (он почему-то сейчас закрылся, хотя был активен) - только название не помню

    P.S. - По-хорошему, ничего лучше IDA Pro + плагины/скрипты еще не придумали
     
  11. Av0id

    Av0id New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2004
    Сообщения:
    87
    beaengine
    distorm
     
  12. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    1. IDA Pro - не нуждается в оценке ) - да это хорошо (Клоусед сорс)
    2. PyDasm - гуано язык и не только

    3. beye - интерактивный + плагины - старье
    4. hiew - интерактивный + плагины на питоне - старье

    5. Sourсer
    6. ERESI - проект остановлен
    7. lida - проект остановлен, есть интересные идеи
    8. hdasm/wdasm
    9. maddisasm
    Что зря ...

    RD16 http://www.codenet.ru/progr/asm/rd16c.php - в топку всех ****

    11. ndisasm - без понятий, но командная строка рулит, осбенно когда пару метром дизассмить:)

    Re: Сравнение существующих дизассемблеров

    beaengine - хорошая штука, особенно по скорости(диз от VirtualBox с мнемониками, в десять раз по скорости уделывает )
    distorm - много хороших отзывав, но находил там баги, фиксить было лень:)
    Последние два это просто либы...
     
  13. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Если интересуют движки, то могу добавить свой: http://mediana.sourceforge.net/. Только код берите из SVN, остальное я пока не обновляю.
     
  14. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    Спасибо. Посмотрю.

    Немного не успеваю по срокам, устроил себе 10 дней выходных. Сейчас вспомню, на чём остановился и продолжу работу.
    Хочется уже скорее показать что уже сделано, но рабочей версии на данный момент нет. Решил немного переделать важные функции, и на этом остановился.
     
  15. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    dinoweb
    дизасм мнемоник (по одной штуке), дизасм длин (по 1 штуке), определитель ветвлений. для более продвинутых вещей еще и парсер аргументов.
    и все это обвязать скриптодвижком. интерфейсы и прочая граф-лайаут-плугин муть уже от последнего.

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

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

    фиг ли вам ваш анализатор не навертеть на ида-скрипте, ида-питоне или иммунити-что-там-луа-или-питон? особенно если мало времени и вы не горите особо писать сам парсер-дизассемблер с 0?
     
  16. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    дизасм мнемоник (по одной штуке) - сделано. кстати это самая старая часть проекта, и сделана довольно давно. (пока-что только базовый набор инструкций без FPU и SSE. но добавить их в таблицу, и дописать пару функций, не долго)

    дизасм длин (по 1 штуке) - сделано.

    определитель ветвлений - сделано. тут добавлю: определение ветвлений; построение полного графа; примитивное определение функций (call address - address - функция, следующая за call инструкция дизассемблируются. без каких-либо дополнительных условий. это не правильно, но пока-что так). весь код разделяю по функциям. пока-что понимает только непосредственные переходы, т.е. в таком случае:
    Код (Text):
    1. mov esi, 0x401200
    2. call esi
    код по адресу 0x401200 автоматически дизассемблирован не будет. но в будущих версиях будет обрабатывать и более сложные ситуации.

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

    интерфейсы и прочая граф-лайаут-плугин муть уже от последнего - может быть кого-то удивлю, но интерфейс почти полностью HTML + командная строка :). в будущем будет развиваться. и в общем-то на него я не много времени потратил. использую QT, и его браузер. скрипты, и web 2.0 не использую. минус - браузер кушает много ресурсов :). плюсы - можно сделать он-лайн версию; легко получить почти любое графическое представление информации. полезная особенность - необходимо разделять всё представление программы на небольшие блоки, а не показывать их одной длинной-длинной страницей. я думаю, это удобно.

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

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

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


    Больше всего времени уходит на работу над движком. извлеч нужную информацию - это фигня.

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

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


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


    Цель - полностью самостоятельный проект. Времени - сколько угодно. Проект - мечта.
    В IDA мне не всё нравится. Я хочу сделать похожее, но по-другому. Что из этого получился - увидим.

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

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


    Не смотря на QT проект не опен-сорс, поэтому и чужие исходники не использую. Возможно в дальнейшем проект будет разделён на две части, QT-шную опен-сорс, и всё остальное, чтобы не было никаких претензий насчёт лицензии.
     
  17. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    dinoweb
    алеф) начать с подбора скрипто движка. лучше не мудрить, а взять питон, несмотря на его кривые множеста.

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

    гимель) все разбивать на модули с четко ограниченными интерфейсами или переходниками. или использовать готовые. в случае необходимости - замените.

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

    хэй) парсер аргументов и небольшой симулятор вам придется сделать хотя бы для работы с расчетными переходами

    вав) кутэ/мутэ/броузер или тк вы потом решите. когда движок будет работать немного. к питону их приверчено уже готовых отлаженных и с примерами достаточное количество.

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

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

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

    ---
    я счас подумываю о портировании одного отладчика со скриптодвижком на платформу арм-ппс. точнее, арм он тянет, а ппс нет. максимум посикс. точнее, даже не совсем портирование, а встраивание в другой проект с еще более мощным движком.
    мне это кажется интереснее, тк нормальных дизасм-отладчиков под ппс прямо на ппс я видел только дисарм, но его автор расчитывал на сильно толстый профит, быстро разочаровался и забросил проект без раздачи сорцов.
    впрочем, он писал как и вы - одним куском С++ компилята. хорошо, долго и быстро расширять/править такой код затруднительно.
     
  18. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    Во многом соглашусь с вами, но кое-что вы придумали.

    Никакой защиты на свою программу я ставить не собираюсь, потому что любую защиту можно сломать. Я вообще в большей степени за свободное ПО (для домашнего использования). Но это отдельная тема :). Да и коммерческим проект станет не скоро. Клоус-сорс у меня по религиозным убеждениям). Опен-сорс требует свободная лицензия кутэ.

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

    Спасибо.