Разное

Дизассемблер онлайн: Online x86 and x64 Intel Instruction Assembler

Содержание

отладчики и дизассемблеры — «Хакер»

Содержание статьи

У каждого из команды ][ — свои предпочтения по части софта и утилит для
пентеста. Посовещавшись, выяснилось, что выбор так разнится, что можно составить
настоящий джентльменский набор из проверенных программ. На том и решили. Чтобы
не делать сборную солянку, весь список мы разбили на темы. Сегодня мы разберем
отладчики и дизасемблеры — все, что понадобится для реверсинга приложений.

 

OllyDbg

Сайт: www.ollydbg.de

Если ты хоть раз читал статьи о крякинге или, например, смотрел видеоуроки от
нашего реверсера [email protected]’а, то имя «Ольки» тебе должны быть знакомо. Это
32-битный отладчик работающий на ring-3 с продуманным интерфейсом и полезными
функциями, которые существенным образом облегчают процесс отладки. В OllyDBG
встроен специальный анализатор, которые распознает и визуально обозначает
процедуры, циклы, константы и строки, внедренные в код, обращение к функциям API,
параметры этих функции и т.п. Для новичка (и не только) — это именно то, что
надо! В ходу до сих пор находится версия 1.10, а бета-версия второй ветки еще с
марта не претерпела изменений, однако уже сейчас можно оценить многочисленные
нововведения дебаггера. Работа ведется уже давно, и поэтому разработчику уже
есть что показать (прежде всего новый движок). Бету едва ли можно рассматривать
как основной инструмент для серьезных дел, поэтому спешу предупредить: о
стабильности нового движка пока приходится только мечтать, поэтому используй «бетку»
на свой страх и риск.

Тут надо сказать, что стал OllyDbg стандартным user-land отладчиком, взятым
на вооружение хакерами и они тут же захотели его улучшить. Появилось множество
нестандартных сборок: одни фиксят ошибки Ольги, другие расширяют функционал,
третьи – скрывают ее от протекторов. Недостаток — «движок» отладчика работает
через MS Debugging API, страдающий кучей врожденных ограничений, оставляющий за
собой множество трудноудаляемых следов и представляющий легкую мишень для
антиотладочных технологий.

 

Immunity Debugger

Сайт:

www.immunitysec.com/products-immdbg.shtml

Известный мод одноименной фирмы, специализирующейся на безопасности и
скрестившей Ольгу 1.10 с Питоном – интерпретируемым языком, на котором очень
легко и быстро писать скрипты. Конечно, писать их можно прямо в Ольге, но это не
слишком удобно, все приходится делать вручную и решать типовые задачи (типа
поиска в памяти), которые уже давно решены.

В Immunity Debugger входит множество библиотек, написанных на Питоне и
заточенных под хакерские нужды. Библиотеки вызываются из Питоновых программ,
среди которых значится и searchcrypt.py – отличное средство идентификации
следующих криптографических алгоритмов: AES, BLOWFISH, CAMELLIA, CAST, MD5, RC2,
RC5, RIPEMD160, SHA1, SHA256, SHA512.

Immunity Debugger используют многие специалисты по безопасности,
выкладывающие proof-of-concept expolit’ы, написанные на Питоне и предназначенные
для работы исключительно в среде данного отладчика. И хотя хакер с головой
разберется в алгоритме работы exploit’а и без Immunity Debugger’а, портируя
exploit на любой другой язык, рано или поздно отладчик оказывается на
компьютере, зачастую становясь основным инструментом, вытесняющим Ольгу.

 

YDbg

Популярный и очень мощный мод, основанный на Ольге 1.10 и собравший в своем
дистрибутиве огромное количество плагинов, скриптов, а также кучу других
полезных инструментов. В отличие от Immunity Debugger’а, ориентированного на
специалистов по безопасности, YDbg писался хакерами и для хакеров, ломающих
защиты с протекторами (те активно сопротивляются такому положению дел и
напичканы анти-отладочными приемами, распознающими присутствие Ольги по главному
окну с ее именем и пунктам меню). Поэтому первое, что бросается в глаза при
запуске YDbg (исполняемый файл которого переименован из OLLYDBG.EXE в SND.exe),
это «покореженные» пункты меню. В частности, «Memory» превратилось в «M3m0ry», «SEH
chain» в «S3H chain», «Breakpoints» в «Br3akp01nts» и т. д. Словом, все
«хакерские» пункты изменены – попробуй их найти (естественно, в новых версиях
протекторов наверняка появится детекция YDbg, но пока он успешно скрывается от
кучи защит, палящих Ольгу). В состав дистрибутива YDbg входит 36 популярных
плагинов (и не нужно теперь рыскать по Сети в их поисках). Среди них затесался
настоящий бриллиант – IDA Sigs, название которого говорит само за себя. Да-да!
Это плагин, поддерживающий IDA-сигнатуры и отображающий их в виде комментариев к
вызываемым функциям в Ольге или в YDbg. Другой полезный плагин – red-hawk
(«красный ястреб») представляет собой панельку инструментов, позволяющую, в
частности, одним движением мыши установить точки останова на нужные функции
(например, в Visual Basic’е это что-то типа __vbaStrCmp или __vbaStrCopy,
используемые для сравнения и копирования строк, соответственно). Начинающие
хакеры просто визжат от восторга, поскольку красный ястреб фактически является
учебником по взлому, а так попробуй догадаться, что нужно делать! Каталог \SCRIPT
содержит 637 скриптов, главным образом предназначенных для снятия различных
протекторов/упаковщиков исполняемых файлов и автоматизации всяких рутинных дел.

 

SoftICE

Всем известный (даже тем, кто к крякингу даже близко не подходил) отладчик
для Windows, работающий дна уровне ядра. В отличие от прикладного отладчика, как
например OllyDbg, SoftICE способен приостановить все операции в Windows, что
очень важно для отладки драйверов. Работает в обход MS Debugging API, что
значительно усложняет антиотладку, однако, учитывая, что для разработчиков защит
soft-ice – враг номер один, практически все протекторы легко распознают его
присутствие в системе. Поэтому никак не обойтись без специальных расширений
(которые упомянем дальше). SoftICE был первоначально разработан компанией NuMega,
которая включала его в пакет программ для быстрой разработки
высокопроизводительных драйверов под названием Driver Studio, который
впоследствии был приобретён Compuware. Помнишь, сколько всевозможных мануалов
было по поводу установки Soft-Ice’а под Windows XP? Увы, начиная с висты,
отладчик не работает. Разработчики приостановили разработку в апреле 2006 года.
На официальном сайте его не найти и доступен только на торрентах.

 

Microsoft Debugger

Сайт:

www.microsoft.com/whdc/devtools/ddk/default.mspx

Входит в состав WDK (Windows Driver Kit — бывший Driver Development Kit или
DDK), а также в комплект Debugging Tools. Оба они бесплатны, но WDK намного
больше по объему и требует предварительной регистрации для получения Windows
Live ID, в то время как Debugging Tools раздается без регистрации вместе с SDK,
в которую входит документация, заголовочные файлы, библиотеки и несколько
примеров, как надо писать плагины.

Microsoft Debugger может работать как на прикладном уровне (ring-3), так и на
уровне ядра. Вплоть до XP ядерная отладка требовала, как минимум, двух машин,
соединенных COM-шнурком, но теперь достаточно и одной.

Поставляется в двух редакциях: windbg.exe – графический интерфейс и cdb.exe —
интерфейс командой строки. И та и другая являются лишь тонкими обертками вокруг
dbgeng.dll, в которой, собственно, и реализован основной отладочный «движок»,
документированный протокол обмена. Поэтому, чтобы в очередной раз не писать
трассер с нуля, dbgeng.dll можно использовать в качестве «фундамента» при
написании универсальных распаковщиков исполняемых файлов.

 

Syser Kernel Debugger

Сайт: www.sysersoft.com

Достойных отладчиков ядра всего три: SoftICE, Syser и Microsoft Kernel
Debugger, но SoftICE не работает на Висте и Server 2008, а Microsoft Kernel
Debugger – для хакерских целей не самый лучший вариант. Остается Syser, который
хакеры взяли на вооружение и весьма активно используют. Написан он двумя
предприимчивыми китайскими реверсерами Wu YanFeng и Chen JunHao. По сути, Syser
— отладчик уровня ядра с графическим оконным интерфейсом. Позволяет отлаживать
как приложения, так и драйвера. Сочетает в себе функции IDA Pro, Softice и
Ollydbg. Поддерживает подсветку листинга дизассеблера, динамическую загрузку и
выгрузку, все команды отладчика SoftICE, полноценную работу с юникодом и
многопроцессорными системами. Проработаны многие мелочи: например корректно
работает буфер обмена, позволяющий копировать данные из уровня Ring 3 в уровень
Ring 0. Многие из операций можно автоматизировать с помощью скриптов. Надо
сказать, что Syser — преемник SoftICE, из которого, как говорят, были дернуты
целые модули. У него масса преимуществ, как, впрочем, масса недостатков, поэтому
реально его приходится юзать совместно с Microsoft Kernel Debugger.

 

GDB

Сайт: sourceware.org/gdb

GNU Debugger – основной отладчик под UNIX, ориентированный на совершенно иной
тип мышления, чем все вышеперечисленные отладчики. Это не просто интерактивный
отладчик, скорее это станок с программным управлением, гибким и мощным
интерфейсом. Отлаживать с его помощью «честные» программы — одно удовольствие,
но в плане антиотладки дела обстоят плохо. GDB даже не пытается сопротивляться и
работает через библиотеку ptrace (которая на самом деле никакая не библиотека, а
системный вызов). GDB принципиально неспособен отлаживать программы, которые не
хотят, чтобы их отлаживали. А такие программы мало-помалу начинают появляться.

Естественно, помимо GDB существуют и другие отладчики для никсов, например,
Lin-Ice, но поскольку антиотладочные технологии под UNIX только-только начинают
развиваться, в большинстве случаев вполне сгодиться и GDB.

 

IDA Pro

Сайт:
www.hex-rays.com/idapro

IDA Pro — это одновременно интерактивный дизассемблер и отладчик. Она
позволяет превратить бинарный код программы в ассемблерный текст, который может
быть применен для анализа работы программы. Правда, стоит сказать, что
встроенный ring-3 отладчик довольно примитивен. Он работает через MS Debugging
API (в NT) и через библиотеку ptrace (в UNIX), что делает его легкой добычей для
защитных механизмов. Но зато IDA Pro — интерактивный дизассемблер более чем с
десятилетней историей, первая версия которой увидела свет 6 мая 1991 года. Юрий
Харон вместе с Ильфаком начали работать в том направлении, куда еще никто не
вкладывал деньги. До этого дизассемблеры писались исключительно на пионерском
энтузиазме параллельно с изучением ассемблера и довольно быстро забрасывались.
Стоит ли удивляться, что парням удалось решить практически все фундаментальные
проблемы дизассемблирования, над которыми просто не хотели работать остальные
разработчики, зная, что быстрой отдачи не будет и проект потребует десятилетий
упорного труда. К пятой версии IDA Pro имела в своем арсенале все необходимое
для автоматической декомпиляции, причем не просто декомпиляции, а очень
качественной декомпиляции. На текущй момент последний резиз 5.5 от 12 июня.
Влюбленные в продукт пользователи генерят немало полезных плагинов, в том числе
поддерживающих разные скриптовые языки для написания сценариев в дополнение к
встроенному IDC. Например,
IdaRUB
добавляет поддержку Ruby, а
IDAPython — Python.
Тут надо сказать, что начиная с версии 5.4 IDAPython идет предустановленной в
дистрибутивы ИДЫ.

 

Hex-Rays

Сайт: www.hex-rays.com

Дальше разработчики подумали и решили, что уж раз смогли получить
человеческий код на ассемблере, то неплохо дописать еще одну фичу, переводящую
китайскую ассемблерную грамоту в доступный и понятный листинг на языке Си.
Закипела напряженная работа, по ходу которой выявлялись все новые и новые
подводные камни, обход которых требовал времени, усилий и мозговой активности. В
итоге на свет появился
Hex-Rays — декомпилятор, требующий обязательно установленную на компьютеру
ИДУ. Декомпилятору подается на вход бинарник, указывается ряд параметров, после
чего Hex-Rays выплевывает исходник на чистом C — в большинстве своем понятный и
доступный. Правда, спешить компилировать его обратно в бинарник не стоит, потому
как в большинстве случаев в момент компиляции ты увидишь столько ошибок, сколько
еще не видывал. Одна из причин — отсутствие поддержки в Hex-Rays ресурсов.

 

W32DASM

Отличный дизассемблер, удобный и понятный. Набор функций с точки зрения
профессионала довольно ограничен, да и вообще его пора отнести к инструментам из
прошлого века, но нет… W32DASM выдает хороший листинг, и для новичков является
отличным вариантом понять и разобраться, что к чему. К тому же именно на него
опираются в многочисленных мануалов для новичков, в том числе нашим манулом для
начинающих «Крякинг — это просто» (#80
номер ][).

 

DeDe

Начинающие хакеры обычно испытывают большие трудности при взломе программ,
написанных на Delphi и Builder, поскольку классические трюки, типа бряка на
GetWindowTextA, не работают. Для декомпиляции кода, написанного на Delphi/Borland
C++ Builder, т.е программ, которые используют библиотеку VCL от Borland, нужен
специальный подход, и он реализован в утилите DeDe. По сути, это единственный
работающий декомпилятор для Delphi-программ, которые не смотря ни на что никак
не умирают. DaFixer, автор проекта, к сожалению, забросил заниматься своим
детищем, поэтому официальной страницы у проекта в настоящий момент нет.
Подробнее о том, как совладать с программами на Delphi, читай в статье «Взлом
Борландии: изящная декомпиляция Delphi».

 

PEiD

Сайт: peid.has.it

Любой коммерческий продукт должен быть достаточно хорошо защищен.
Разработчики намеренно использует разного рода упаковщики и так называемые
протекторы, которые применяют разного рода антиотладочные средства, максимально
препятствующие взлому программы. Обойти их можно, но для этого нужно четко
представлять, что использовалось для защиты программы, какой плагин для
отладчика использовать — и от этого «крутиться». Изящно определить название и
версию упаковщик способна небольшая утилита PEiD. Собственно, для этого она и
нужна.

 

PE Explorer

Сайт:
www.heaventools.com

Программа для просмотра и редактирования PE-файлов — начиная с EXE, DLL и
ActiveX контролов, и заканчивая скринсейвверами SCR (Screensavers), апплетами
панели управления CPL, SYS и бинарниками для платформы Windows Mobile. По сути,
это не одна утилита, а целый набор тулз для того, чтобы посмотреть изнутри, как
работает программа или библиотека. Включает в себя просмотрщик заголовков,
экспорт вызовов API-функций, редактор ресурсов, дизассемблер.

декомпилируй с удовольствием / Блог компании Digital Security / Хабр


В этой статье я собираюсь рассказать о плагине для IDA Pro, который написал прошлым летом, еще находясь на стажировке в нашей компании. В итоге, плагин был представлен на ZeroNights 2016 (Слайды), и с тех пор в нём было исправлено несколько багов и добавлены новые фичи. Хотя на GitHub я постарался описать его как можно подробнее, обычно коллеги и знакомые начинают пользоваться им только после проведения небольшого воркшопа. Кроме того, опущены некоторые детали внутренней работы, которые позволили бы лучше понять и использовать возможности плагина. Поэтому хотелось бы попытаться на примере объяснить, как с ним работать, а также рассказать о некоторых проблемах и тонкостях.

HexRaysPyTools, как можно догадаться из названия, предназначен для улучшения работы декомпилятора Hex-Rays Decompiler. Декомпилятор, создавая псевдо-С код, существенно облегчает работу ревёрсера. Основым его достоинством, выделяющим инструмент на фоне других, является возможность трансформировать код, приводя его к удобному и понятному виду, в отличие от ассемблерного кода, который, даже при самом лучшем сопровождении, требует некоторой доли внимания и сосредоточенности для понимания его работы. У Hex-Rays Decompiler, как и самой IDA Pro, есть API, позволяющий писать расширения и выходить за рамки стандартного функционала. И хотя API очень широк, и в теории позволяет удовлетворить самые изысканные потребности разработчика дополнений, у него есть несколько существенных недостатков, а именно:

  • Слабая документированность. Для того, чтобы найти подходящие функции или классы, самый эффективный способ — произвести поиск регулярными выражениями по файлам, угадывая ключевые слова
  • Произвольные названия функций и структур — часто их название не говорит ни о чём
  • Deprecated методы, для которых не предложено замены
  • Общая запутанность работы. Например, для изменения типа аргумента у функции, нужно написать 8 строк кода и задействовать 3 класса. И это не самый странный пример
  • API для языка Python не совсем совпадает с тем, что для C++. idaapi содержит новые методы, наткнуться на которые получилось чисто случайно
  • Есть неочевидные вещи: например, IDA Pro будет падать, если не отключать Garbage Collector для объектов, добавленных с помощью idaapi в абстрактное синтаксическое дерево (оно всегда строится, когда происходит декомпиляция, и в нём можно изменять объекты или вставлять свои).

Чтобы разобраться во всем этом, помогали рабочие примеры, собранные в Интернете (что-то интересное нашлось даже в китайском сегменте). Так что теперь, если кто-то захочет создать что-то своё для декомпилятора, можно обратиться еще и к исходным кодам моего плагина.

Перейдем к описанию плагина. В HexRaysPyTools можно выделить две отдельные категории — это помощь по трансформации дефолтного вывода Hex-Rays Decompiler к удобному виду и реконструкция структур и классов.

Изначально, после запуска декомпилятора клавишей F5, IDA Pro выдаёт не очень понятый код, состоящий преимущественно из стандартных типов и имён переменных. И несмотря на то, что местами пытается угадать типы, создать массивы или назвать эти переменные (которым повезло оказаться аргументами у стандартных функций), получается это не очень хорошо. В целом, задача ревёрсера — привести в адекватный вид декомпилированный код. К сожалению, есть вещи, которые невозможно сделать, не прибегая к IDA SDK. Например, отрицательные обращения к полям структур, которые всегда выглядят безобразно (порой превращаясь в массивы с отрицательными индексами), а также длинные условные вложения, тянущиеся из левого верхнего угла в правый нижний. Кроме этого, очень не хватает горячих клавиш и опций для более быстрой трансформации кода. По мере получения информации в процессе анализа программы приходится изменять сигнатуры функций, переименовывать переменные и изменять типы. Всё это требует большого количества манипуляций мышкой и копирований-вставок. Перейдем к описанию того, что предлагает плагин для решения этих проблем.

Отрицательные смещения

Очень часто встречаются при реверсинге драйверов или ядра Windows или модулей ядра Linux. Например, несколько разных структур может быть расположено в двусвязном списке с использованием структуры LIST_ENTRY. При этом у каждой структуры обращение к двусвязному списку может производиться из произвольного поля.

В результате, когда мы смотрим на то, что получается в IDA Pro, видим следующую картину:

Такой вывод будет всякий раз, когда в исходных кодах программ используются макросы CONTIAINING_RECORD (windows) и container_of (linux). Эти макросы возвращают указатель на начало структуры по её типу, адресу и названию поля. И именно их плагин позволяет вставлять в дизассемблер. Вот как выглядит пример после его применения:

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

Для того, чтобы вставить макрос в дизассемблер, нужно, чтобы подходящая в данном контексте структура существовала в Local Types или в одной из библиотек в Types Library (их может быть несколько). Мы кликаем по вложенной структуре правой кнопкой и выбираем Select Containing Structure. Далее определяем, где искать структуру, — либо в Local Types, либо в Types Library, и плагин составляет список подходящих структур. Для этого он анализирует, как указанная переменная используется в коде и определяет минимальную и максимальную границы, в которых может находиться поле типа этой переменной. Затем, используя эти сведения, проходит по всем структурам, содержащим поле, у которых все в порядке с границей. При поиске плагин смотрит вложенные структуры и объединения на любую глубину.

В примере выше у exe-файла есть символы, поэтому список подходящих структур получился довольно большой:

Помимо этого, существует ситуация, когда плагин автоматически может вставить макрос. Дело в том, что если есть явное присвоение указателя, IDA Pro догадывается (иногда неправильно) его вставить, но не распространяет его дальше в коде.

Без плагина:

С плагином:

Сильная вложенность

Пожалуй, лучше всего показать искусственный пример. Без плагина:

С плагином:

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

Переименования

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

Часто IDA Pro создаёт дублированные переменные. Можно было бы, используя стандартную опцию «map to another variable», избавиться от них. Но это не всегда удобно при отладке, может быть ошибочно и к тому же невозможно откатить, не пересоздавая функцию заново.

Перебросить можно имя с одной переменной на другую, при этом добавляется символ «_»:

До:

После:

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

Recasts

Существует множество ситуаций, когда есть взаимодействие между двумя некоторыми сущностями с разными типами, и нам нужно перенести тип одной сущности на другую. Под сущностями понимаются локальные, глобальные переменные, аргументы, функции, поля структур (с обращением по ссылке и без) и возвращаемые значения функции. Плагин позволяет это быстро произвести. Сложно показать картинкой, рекомендую в случае, если нужно перенести тип одной сущности на другую, кликнуть правой кнопкой мыши по ней и посмотреть на опции. Наверняка там появится «Recast …» (а если не появится, то можно написать мне, и я попробую её добавить).

Прочее

Помимо этого, добавляются следующие опции:

  1. Поиск структуры по размеру и замена числа на sizeof(Structure)). Удобно для поиска структуры подходящего размера по числу байт, указанных оператору new или функции malloc.
  2. Быстрое изменение сигнатуры функции. Кликнув правой кнопкой по её объявлению, можно добавить/удалить возвращаемое значение, удалить аргумент, сбросить соглашение о вызове к __stdcall.
  3. Переход по двойному клику у виртуальных методов.

Одной из самых сложных и энергозатратных задач ревёрс-инжиниринга является понимание работы и реконструкция структур и классов. HexRaysPyTools выступает помощником в этом процессе. В чём, собственно, проблема? Средствами по умолчанию можно только залить уже готовое объявление структуры, поэтому приходится «ползать» по коду, пытаясь насобирать сведения о полях, вручную высчитывать смещения и записывать куда-то всю информацию (например, в блокнот). Но, если у нас размеры классов исчисляются сотнями байт и, в придачу, имеют множество методов и несколько виртуальных таблиц, всё становится гораздо сложнее.

Рассмотрим на примере, как помогает в данном случае плагин. Когда-то (исключительно ради самообразования :D) мной был создан бот для онлайн-игрушки. В процессе наткнулся на защиту, шифрующую пакеты, не позволявшую модифицировать код в памяти и мешающую хукать вызов шифрующей функции (которая была жестко обфусцирована). Для того, чтобы обойти её, нужно было распарсить класс, отвечающий за обмен данными между клиентом и сервером и научиться, используя его, вызывать отправку пакетов и считывать полученные, расшифрованные пакеты за несколько вызовов от функций защиты. Тогда это было непростой задачей, но с плагином всё делается довольно просто.

Вот так выглядит метод, принимающий пакеты. this и v1 являются указателями на объект класса, gepard_1 — это функция, заменяющая recv

Если заглянуть внутрь функций sub_41AF50 и sub_41AFF0, можно увидеть довольно много кода, обращающегося к разным полям. И даже это — лишь часть функционала, ответственного за создание и отправку пакетов, поэтому разобраться в назначении полей может быть непросто. Плагин помогает автоматически проанализировать большое количество кода, и из собранной информации составить некий каркас структуры, которая в дальнейшем анализе может быть изменена исследователем и использована для автоматического создания нового типа. Для начала надо открыть Structure Builder через Edit->Plugins->HexRaysPyTools. Это окошко будет содержать собранную информацию, предоставлять возможность для редактирования имен полей и разрешения конфликтов, а также просмотра виртуальных таблиц и сканирования виртуальных функций.

Есть 3 возможных способа собирать информацию о полях:

1) Можно кликнуть правой кнопкой по переменной и, нажав Scan Variable, запустить сканирование в пределах одной функции. При сканировании будет рассматриваться то, как происходит обращение к переменной и, если оно под падает под паттерн обращения к полю, такая информацию будет запомнена. Если другой переменной присваивается значение первой (причем их типы не обязательно должны совпадать), она так же подключается к сканированию (и отключается, если ей будет присвоено новое значение). Вот какой результат будет, если применить этот метод к переменной this в функции выше:

Хотя мы запускали сканирование для переменной this, информация о v1 также была собрана.

Жёлтым отмечены разного рода обращения к полям, и нужно выбрать, какой вариант подходит больше всего, отключив все остальные. До тех пор, пока есть конфликты, создать финальную структуру будет нельзя. Красный — это смещение, начиная с которого производится сканирование. Его можно сдвинуть с помощью кнопки Origin для того, чтобы просканировать потенциальную подструктуру. Например, можно зайти в функцию sub_41AF50 и, сдвинув указатель, собрать немного новой информации:

Если дважды кликнуть по столбцу Offset интересующего поля, можно увидеть список всех обращений к этому полю и быстро переместиться в дизассемблере к месту обращения. Поэтому есть смысл как можно больше покрывать сканированиями все места использования восстанавливаемой структуры. Больше информации о полях — проще разобраться, что зачем нужно. Сканировать каждую переменную может быть весьма утомительно, поскольку указатель на структуру может путешествовать по большому количеству функций, поэтому есть другой способ сбора информации.

2) Кликнув правой кнопкой по переменной, можно выбрать опции «Deep Scan Variable». Основной процесс сканирования будет таким же, как и у первого способа, только теперь, если указатель на структуру будет передаваться как аргумент функции, будет запущено рекурсивное сканирование данного аргумента. Warning! Здесь есть одна проблема — декомпилятор не всегда распознает правильно аргументы функции, которую он еще не декомпилировал, поэтому приходится рекурсивно заходить и декомпилировать каждую функцию, которая потенциально может содержать указатель на нашу структуру как аргумент. Этот процесс запускается автоматически, и происходит только один раз за сессию для каждой функции. Поэтому первые процессы глубокого сканирования могут занять некоторое время (порядка пары минут).

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

Запустив здесь сканирование, получаем следующее:

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

Если зайти в функции sub_419890, которая впервые возвращает указатель на структуру, то можно увидеть, что используется паттерн-одиночка:

Количество вызовов этой функции очень велико:

Сканировать каждую переменную было бы утомительно, поэтому есть возможность запустить сканер для всех сразу, кликнув по заголовку функции и выбрав опцию «Deep Scan Returned Variables».

Вот результат применения на примере:

Можно заметить, что нашлась информация об обращении к полям 0x8 — 0x14. Так же нашлись виртуальные таблицы — они отображены жирным шрифтом и, дважды кликнув по ним, можно увидеть список виртуальных функций (а заодно и просканировать их как по одной, так и все сразу).

Теперь можно разбираться с устройством структуры. Напомним, что, кликнув по офсету, можно увидеть все обращения к полям.

Вот, что получилось после непродолжительного анализа:

Подготовка создания структуры завершена. Теперь можно кликнуть «Finalize» и, внеся последние изменения, закончить её создание:

Далее, везде, куда «дотянулся» сканнер, переменным, которые являлись указателем на эту структуру, будет применён её новосозданный тип. Вот как преобразится функция отправки пакетов:

Помимо представленного, в Structure Builder можно создать или попытаться угадать подструктуры, выделив необходимое количество полей и нажав Pack или Recognize Shape соответственно. При поиске подходящей структуры учитываются типы полей — они должны точно совпадать, за исключением базовых типов (charBYTE, intDWORDint *), считающихся одинаковыми.

Для уже созданных классов (структур с виртуальными таблицами), в плагине есть возможность более удобной работы с ними. По пути View-> Open Subviews-> Classes можно открыть следующее окошко:

Здесь можно:

  1. Переименовать методы, в результате чего изменения будут произведены сразу в коде и виртуальных таблицах (сделано, чтобы избежать рассинхронизации)
  2. Изменить объявление методов
  3. Быстро конвертировать первый аргумент в this
  4. Переместиться к функции в окне дизассемблера
  5. Фильтровать информацию регулярными выражениями

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

Надеемся, что эта статья поможет разобраться, как пользоваться плагином. Найти его и сообщить о багах можно по адресу — https://github.com/igogo-x86/HexRaysPyTools. Также ждем feature requests.

Как декомпилировать EXE-файлы

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

Способы декомпиляции EXE-файлов

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

Способ 1: VB Decompiler

Первым рассмотрим VB Decompiler, который позволяет декомпилировть программы, написанные на Visual Basic 5.0 и 6.0.

Загрузить программу VB Decompiler

  1. Нажмите «Файл» и выберите пункт «Открыть программу» (Ctrl+O).
  2. Найдите и откройте программу.
  3. Декомпиляция должна сразу запуститься. Если этого не произошло, нажмите кнопку «Старт».
  4. По завершении внизу окна появится слово «Декомпилировано». В левой части расположено дерево объектов, а в центральной можно просматривать код.
  5. При необходимости, сохраните декомпилированные элементы. Для этого нажмите «Файл» и выберите подходящий вариант, например, «Сохранить декомпилированный проект», чтобы извлечь все объекты в папку на диске.

Способ 2: ReFox

В плане декомпиляции программ, скомпилированных через Visual FoxPro и FoxBASE+, неплохо себя зарекомендовал ReFox.

Загрузить программу ReFox

  1. Через встроенный обозреватель файлов найдите нужный EXE-файл. Если его выделить, то справа будет отображаться краткая информация о нём.
  2. Откройте контекстное меню и выберите пункт «Decompile».
  3. Откроется окно, где нужно указать папку для сохранения декомпилированных файлов. После нажмите «ОК».
  4. По окончании появится такое сообщение:

Можно просмотреть результат в указанной папке.

Способ 3: DeDe

А DeDe будет полезна для декомпиляции программ на Delphi.

Загрузить программу DeDe

  1. Нажмите кнопку «Добавление файла».
  2. Найдите файл EXE и откройте его.
  3. Для запуска декомпиляции нажмите кнопку «Процесс».
  4. При успешном завершении процедуры появится такое сообщение:
  5. В отдельные вкладки будет выведена информация о классах, объектах, формах и процедурах.

  6. Для сохранения всех этих данных откройте вкладку «Project», проставьте галочки рядом с типами объектов, которые нужно сохранить, выберите папку и нажмите «Сделать файлы».

Способ 4: EMS Source Rescuer

Декомпилятор EMS Source Rescuer позволяет работать с EXE-файлами, скомпилированными при помощи Delphi и C++ Builder.

Загрузить программу EMS Source Rescuer

  1. В блоке «Executable File» нужно указать нужную программу.
  2. В «Project name» пропишите имя проекта и нажмите «Next».
  3. Выберите необходимые объекты, укажите язык программирования и нажмите «Next».
  4. В следующем окне исходный код доступен в режиме предпросмотра. Осталось выбрать выходную папку и нажать кнопку «Save».

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

Мы рады, что смогли помочь Вам в решении проблемы.

Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.

Помогла ли вам эта статья?

ДА НЕТ

IDA Pro — самый мощный дизассемблер в мире

Вступление

Тот, кто хоть раз пытался дизассемблировать мало-мальски серьезную программу, знает, что лучшего инструмента, чем IDA Pro, не найти. Это легко объясняется интеллектуальностью (дизассемблер сам комментирует код и распознает стандартные библиотечные и системные функции), интерактивностью (вы в любой можете прервать процесс дизассемблирования, внести нужные изменения и потом продолжить), поддержкой собственного скриптового языка (IDC), наличием плагинов (позволяющих сэкономить десятки часов исследования) и IDA SDK.
Отладчик по сравнению с дизассемблером часто называют «агрессивной средой», требующей от вас постоянного участия, работы мысли и заставляющей все время принимать решения. Работая с IDA Pro, вы легко убедитесь в данном утверждении: комфорт и функциональность IDA Pro позволяют уйти от вопроса «знаю, что хочу, но не знаю, как этого добиться» и сосредоточиться на проблеме «каким путем достичь необходимого результата, используя возможности IDA Pro».
Но использование дизассемблера требует не только знаний и опыта, оно сопряжено также с массой этических и правовых вопросов. Ни для кого не секрет, что IDA Pro является одним из любимых инструментов взломщиков — людей, крадущих чужие программы.

Сегодня, уважаемый читатель, мы хотим представить вашему вниманию интервью с создателем IDA Pro — Ильфаком Гильфановым (Ilfak Guilfanov).

Интервью

TanaT: Расскажите, пожалуйста, немного о себе.

Ильфак: Так сразу с себя? Ну, попробую. В школу ходил в маленькой деревушке в Татарстане, потом — поступил в Московский Государственный Университет им. Ломоносова на мехмат. Очень интересное место, мне очень повезло, что я учился в окружении многих неординарных людей.

Первые два года были посвящены учебе и еще раз учебе, я узнал кучу нового для себя. Включая компьютеры. Первый компьютер в своей жизни я увидел на втором курсе. В приоткрытой двери Лаборатории Вычислительных Методов на 13 этаже увидел телевизор с буквочками зеленого цвета на экране. Очень удивился, ведь до сих пор телевизоры показывали только картинки, а не текст. Я знал, что где-то существуют ЭВМ, они очень большие и что-то вычисляют, но для чего и как, имел только смутное представление. Этот день, когда я впервые увидел терминал, подключенный к CM-4 (аналог PDP-11), в буквальном смысле изменил мою жизнь — терминалы были очень маленькие, вместо чисел на экране был текст, и все это было рядом, можно было пощупать, понажимать на клавиши…

Я узнал, что текст, так шустро меняющийся на экране, можно менять, и для этого нужно писать «программы». Также есть клавиатура для ввода букв. Можно сделать так, чтобы ЭВМ считала за тебя все, что угодно на свете — от решения квадратных уравнений до генерации простых чисел.

Мне страшно повезло — у нас на мехмате тогда был очень интересный курс по программированию. Этот курс был потом издан в виде учебника его автором, А. Г. Кушниренко, которому я благодарен за его прекрасные лекции и систему обучения. С его участием была написана специальная система для студентов, чтобы научить их основам программирования, именно той сути, самой важной части, без которой программист никогда не напишет хорошие программы. Разработка программного обеспечения для этого курса осуществлялась молодыми сотрудниками ЛВМ Г. В. Лебедевым, А. А. Веденовым, Д. В. Варсанофьевым, А. Г. Дымченко и др. Основу курса составляло не освоение конкретного языка программирования, а изучение основных структур данных и базовых алгоритмов обработки информации. Даже сегодня я бы рекомендовал всем желающим научиться программировать начать именно с него.

В настоящее время я работаю в бельгийской компании Datarescue, основная задача — продолжение работ над дизассемблером, среди других проектов. У меня в помощниках есть 2 молодых программиста, которые тоже работают над проектом. У нас также есть программы, относящиеся к безопасности в Интернете (криптография) и восстановлению данных.

Ильфак Гильфанов, создатель IDA

TanaT: Кроме Datarescue нигде не работаете?

Ильфак: Нет, нигде. Вагоны по вечерам не разгружаю 🙂

TanaT: Я имел в виду, не читаете ли вы где-нибудь лекций…

Ильфак: Нет, кроме как в Datarescue нигде… Лекции читаю тоже от имени фирмы.

TanaT: IDA Pro — только ваше детище или кто-то вам помогал?

Ильфак: Конечно же, многие помогали. Такую программу одному написать невозможно. В IDA много кода от пользователей — некоторые процессорные модули были подарены благодарными пользователями, а столько было информации об ошибках, предложений по улучшению, новых идей — всего не перечесть. Не хочу обижать никого тем, что не упомянул в списке программистов, поэтому просто назову только двух самых-самых. Во-первых, это мой близкий друг — Паша Руснак, который написал движок базы данных, используемый в IDA. Без этой базы данных, универсальной во многих отношениях, IDA просто не было бы. И, во-вторых, это Юрий Харон, удивительный программист, пишущий очень грамотный и эффективный код, помощь которого в развитии IDA просто невозможно переоценить.
Надо также упомянуть саму компанию Datarescue, которая всячески способствовала развитию программы правильным позиционированием на рынке и политикой.
Это еще не все. В Интернете можно найти много страниц, рассказывающих про IDA, объяснения для новичков, и т. д.
У нас на сайте есть отдельная страница с разработками наших пользователей. Там можно скачать скрипты, модули, файлы символов и другие файлы, облегчающие анализ программ. Таких страниц несколько, надеюсь, вы их найдете с легкостью. Если хотите поделиться своими скриптами с другими пользователями — присылайте, мы с удовольствием разместим их на странице.

Более того, есть группа поддержки на Yahoo, там можно получить новые модули для IDA вместе с исходными текстами. Эта группа называется IDA Extensions, мы к ней никакого отношения не имеем.
Также на sourceforge.org создается проект (опять-таки без нашего участия) поддержки дизассемблера IDA. Sourceforge был выбран для того, чтобы несколько разработчиков могли работать над кодом, пользуясь CVS.

От автора: Я настоятельно рекомендую вам следующую страницу: http://www.hex-rays.com/idapro/idasupport.htm. На ней можно найти новую документацию по IDA Pro, ссылки на дружественные ресурсы, «туториалы» и «мануалы», дополнительные утилиты и т. д. То есть, как любят писать в сетевых обзорах, must visit!

TanaT: А на каком языке написана IDA?

Ильфак: IDA написана целиком на С++. Правда, модные свойства С++ такие, как множественное наследование, виртуальные функции или исключения — практически не используются. Вообще, объектно-ориентированное программирование имеет не только положительные стороны, поэтому осторожность и умеренность тут обязательны. Иначе в один прекрасный день проект развалится под своей тяжестью.

TanaT: Как вам в голову пришла идея написать собственный дизассемблер? Не боялись, что задача окажется непосильной?

Ильфак: Написать дизассемблер — элементарная задача, которая решается за один-два вечера. Это на самом деле так, ведь, по сути, требуется всего лишь перевести машинные коды в читаемый текст. Таблицы для перевода можно взять в документации, остается лишь муторная работа по обработке специальных случаев и нахождению ошибок.

Правда, если ставить более сложные цели, то работы становится больше. Поэтому с дизассемблером я поступил так: сначала решаем простые задачи, а потом переходим к сложным. Все постепенно, без всяких скачков. Как видно, этот подход себя оправдывает, т.к. этим методом постепенного улучшения программы со временем IDA стала мощным инструментом. Нельзя забывать при этом то, что любой код, который вы напишете, в один прекрасный день придется пересмотреть и переделать, поэтому а) надо писать так, чтобы код был легко читаем и б) уметь трансформировать код в логически эквивалентный, но более функциональный. Если не ошибаюсь, это называется refactoring?

TanaT: Да, именно так.

Ильфак: Идея написать свой дизассемблер возникла не у меня, а у моих друзей, на какой-то вечеринке, что-то вроде «почему бы и нет». Имеющиеся дизассемблеры были пакетными, и возможность на ходу менять текст была соблазнительной. Тогда еще никакой речи о многопроцессорности или о продвинутых возможностях типа FLIRT не было, только интерактивность работы.

Правда, результатом мы так и не воспользовались, так как к моменту, когда IDA как-то заработала, наши интересы были другими, нам повезло поработать с RS/6000 от IBM, узнать UNIX, но IDA осталась, оказалось, что ей можно пользоваться для анализа вирусов, отыскивания недокументированных особенностей MS-DOS и т. д.

TanaT: Что такое FLIRT?

Ильфак: Полностью эта аббревиатура расшифровывается Fast Library Identification and Recognition Technology. Она используется для распознавания стандартных библиотечных функций в анализируемых программах. Благодаря FLIRT время разбора программ может быть уменьшено на несколько порядков. Например, типичная Delphi-программа состоит из более чем 2500 функций. Из них как минимум 2000 (обычно больше) функций являются стандартными. Без FLIRT пришлось бы потратить несколько дней, чтобы понять, какие функции являются библиотечными и дать им названия, причем это время можно считать просто потерянным, т.к. с каждой новой Delphi-программой этот анализ пришлось бы повторять.
Конечно же, идея нахождения стандартных функций посредством сравнения с шаблонами — очевидна. Просто у нас в IDA реализация такова, что ее можно применять к программам, встречаемым в реальной жизни. Как говорится, дьявол в деталях, и в FLIRTе — куча тонких моментов. Интересующиеся могут почитать более подробно про FLIRT здесь.

TanaT: То есть IDA Pro может так же, как и SoftIce, идентифицировать те или иные Windows API функции, которые Win-приложение использует в своей работе? Я почему-то считал, что IDA без труда справляется со стандартными функциями языка С (типа библиотечной функции printf), но с Win API «не дружит».

Ильфак: IDA знает про стандартные функции MS Windows (и не только), типы их параметров и возвращаемых значений. Она расставит комментарии в листинге и использует информацию о типах при анализе. Все это происходит автоматически, без участия пользователя. Как всегда, если пользователь не удовлетворен результатами автоматического анализа, он может их подправить, указав новый тип функции или параметра.

Система типов построена таким образом, чтобы ее можно было применить к любому процессору, поэтому тут речь идет не только о MS Windows. IDA уже поддерживает UNIX API. В принципе, можно ее расширить и на другие платформы, включая микроконтроллеры и встроенные системы.

IDA Pro в действии. Обратите внимание, что имена Win API функций определены корректно

TanaT: А может ли IDA Pro дизассемблировать байт-код Java и управляемый код на MSIL?

Ильфак: Конечно же, IDA дизассемблирует программы на Java или C#. И что примечательно, она может дизассемблировать классы и в очень тяжелых случаях, когда входной файл был испорчен, но все еще работоспособен.

TanaT: Откуда вы почерпнули знания и опыт, так необходимые для разработки такого рода программы?

Ильфак: Про свою учебу в университете я уже рассказал. Опыт пришел со временем. Код, который был написан в начале 90-ых годов, на мой взгляд, далек от совершенства, но он работает, и поэтому мы его пока переписывать не будем.
А знания… Ну, сами знаете, какова жизнь программиста. Известно, что «надо все время бежать, чтобы оставаться на месте». Это изречение, как никакое другое, подходит к программистскому ремеслу. Книжки про языки программирования, про дизайн в целом, про логику и сложные системы… Особо хочу выделить функциональные языки и прочие странности, программировать на которых необязательно, но очень полезно знать. Интересны книги про архитектуру (это та, классическая архитектура, которая со зданиями связана). Они дают основу — здравый смысл, что у каждой программы должен быть фундамент, несущая структура, крыша… Мне нравится архитектор Christopher Alexander с его книгой The Timeless Way of Building.

TanaT: Скрипты для IDA Pro — отличная идея. Как она родилась у вас в голове?

Ильфак: Ну, идея вроде лежит на поверхности? Нет ни одной большой программы, которая бы не позволяла запрограммировать ее тем или иным способом. Честно говоря, мне хотелось написать кусочек компилятора (лексический + синтаксический анализ, как это описано у Ахо и Ульмана), вот скрипты и оказались неплохим поводом. Сегодня я бы не стал писать свой язык, а просто бы подключил имеющиеся, например Perl или Python. Это было бы и проще, и позволило бы большему количеству пользователей писать скрипты.

TanaT: Сейчас уже поздно добавить поддержку эти скриптов языков в IDA? Или нецелесообразно?

Ильфак: Мы сами не планируем поддержку других языков, но любой пользователь IDA может это сделать сам с помощью IDA SDK. Я даже краешком уха слышал про подобные работы для подключения Python к IDA.

IDA Pro это не только дизассемблер, но и отладчик. Можете убедиться, посмотрев на картинку

TanaT: Можете рассказать немного об IDA SDK? Он позволяет писать плагины к IDA самому?

Ильфак: Да, с помощью IDA SDK можно всячески расширять IDA, добавлять новую функциональность, поддержку новых процессоров и платформ. Существует 3 типа дополнительных модулей, которые можно разработать с помощью SDK: это процессорные модули, загрузчики и плагины. Процессорные модули позволяют разбирать программы для новых процессоров. Загрузчики нужны для поддержки новых форматов файлов. И, наконец, плагины позволяют расширить функциональность IDA — это может быть добавление новых команд или же улучшение анализа посредством установления обработчиков событий в IDA.

IDA API является достаточно сложным и богатым API и насчитывает порядка 1000 функций. Мы постарались сделать полностью доступной базу данных IDA и дать полный контроль над анализом. Конечно, такой большой API не так просто освоить. Поэтому в составе SDK есть много примеров реальных модулей из реальной жизни. И опять-таки можно найти примеры в сети.

TanaT: Без сомнения, IDA Pro — самый мощный и гибкий дизассемблер в мире. Вам приятно это осознавать? Чем для вас является IDA Pro: хобби/увлечением или профессиональным продуктом?

Ильфак: Он начался как хобби в далеком 1991 году, просто увлечением для себя и для друзей. И потихоньку вырос во что-то, и это используется многими специалистами по всем мире. Теперь IDA является коммерческой программой, и, естественно, мое отношение к ней поменялось. Параллельно с разработкой IDA мне интересно заниматься другими проектами. Например, проблема восстановления фотографий с цифровых носителей на первый взгляд является простенькой задачей, но для достижения максимальных результатов потребовалось разработать нестандартный алгоритм, и получившаяся программа дает лучшие результаты (данные тестов компьютерных журналов). Работа над Photorescue привела к возникновению нового хобби — цифровой фотографии, так что это хобби может тоже перерасти в профессиональную деятельность, когда-нибудь…

TanaT: Как вы считаете, в каких случаях программисту требуется именно интерактивность IDA? Только тогда, когда код зашифрован?

Ильфак: Не только. Думаю, интерактивность IDA является самой главной ее особенностью. Во-первых, пользователь может мгновенно изменить представление программы на экране, что очень полезно, если автоматический анализ неправильно разобрал функцию. Можно также переименовать функцию или добавить комментарий, и все изменения сразу же видны на экране. Во-вторых, развитая система навигации позволяет найти интересующую часть программы без долгих поисков по листингу.

Анализ программ чем-то схож с разгадыванием кроссвордов: чем больше информации мы имеем, тем проще угадать следующее слово. Чем больше осмысленных имен и комментариев в листинге, тем проще понять логику работы и соответственно переименовать анализируемую функцию. Мы начинаем практически с чистого листа, когда все функции, кроме импортированных, названы, как sub_1234. Такое автоматически сгенерированное имя не дает никакой информации о том, что эта функция делает. Потом, в процессе разбора (я предпочитаю разбор снизу вверх, то есть первыми анализируются функции самого нижнего уровня) мы переименовываем функции, и таким образом делаем листинг более ясным и понятным. Без интерактивности это было бы просто невозможно.

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

TanaT: Кстати, о плагинах. Не подскажете, где можно найти стандартные (да и любые другие) плагины к IDA?

Ильфак: До сих пор самым доступным местом была группа IDAExtensions в Yahoo. С созданием cvs-управляемого проекта на sourceforge большинство плагинов, скорее всего, будут доступны оттуда.

WinGraph позволяет легко построить структуру программы

TanaT: Как вы считаете, какая категория людей является основным пользователем вашего продукта? Пираты/хакеры или разработчики?

Ильфак: Не те и не другие. Основные пользователи — это специалисты по информационной безопасности, антивирусные компании, и вообще специалисты по безопасности в целом.

Разработчики и хакеры, конечно же, тоже используют IDA, но не являются основными покупателями. Про хакеров я вообще молчу, я совершенно не хочу, чтобы IDA использовался для взлома программ, и буду всячески бороться против этого.
Разработчикам же далеко не всегда нужен дизассемблер. Уже учитывая тот факт, что многие не знают язык ассемблера, можно сказать, что большинству разработчиков дизассемблер не понадобится. Исключение составляют специалисты, работающие на низком уровне — писатели драйверов и встроенных систем, вынужденные работать на ассемблере.

Я не знаю, почему в России считается, что основными пользователями IDA являются хакеры. Если бы IDA приносила пользу только им, то я бы прекратил работу над ней, не задумываясь.
Тем, кто использует IDA для взлома, скажу следующее: «ломать — не строить». Программы, как и любой другой продукт человеческой деятельности, требуют труда — кто-то должен потратить свое время и силы, чтобы программу придумать, написать и проверить. Взломщик подобен вору, который увидел что-то, не принадлежащее ему, и забрал. Не потому что он такой доблестный и умный, сумел взломать программу, а просто потому, что защита была слабая или разработчик вообще не уделял ей внимания. Где тут доблесть? Мне совсем не нравится, что IDA используется для таких целей.

TanaT: Сразу возникает вопрос, ведь хороший дизассемблер не должен «сыпаться» при первых же «антидизассемблерных» приемах. Получается, что, разрабатывая дизассемблер и повышая его интеллект + функциональность, вы делаете жизнь хакера легче. Противоречие?

Ильфак: Скорее, диалектика. IDA делает анализ программ проще для всех. Значит и защита программ становится более изощренней, придумываются новые методы. Как, например, подступиться к системе, которая использует подход объектно-ориентированного программирования с передачей сообщений между объектами? По листингу практически ничего невозможно будет понять, т.к. так кроме косвенных вызовов с номерами сообщений, практически ничего не будет.

TanaT: Сколько сегодня стоит IDA Pro и можно ли ее где-нибудь купить в России?

Ильфак: Да, IDA можно купить в Москве в компании Гелиософт. Их адрес [email protected] Точные цены можно узнать у представителей компании, они в пределах $266-795 в зависимости от конкретной версии.

TanaT: Каковы системные требования IDA? Если говорить об IBM PC, какие операционные системы она поддерживает?

Ильфак: Первые версии IDA были предназначены для работы под MS DOS с 640кб памяти, поэтому при дизайне программы я предпочитал решения, не требующие много памяти или быстрого процессора. Сейчас, конечно, нереально запустить IDA на такой малой памяти, но любой современный компьютер подойдет. Чем больше памяти и чем быстрее процессор, тем лучше, конечно.

IDA работает под MS Windows (любые версии), MS DOS, OS/2. Абсолютное большинство пользователей работает под MS Windows, поэтому мы даже не уверены, что имеет смысл продолжать поддерживать другие системы. Если у кого есть соображения по этому поводу, прошу в e-mail ([email protected]), мы с удовольствием выслушаем аргументы в пользу этих систем.
Тогда как IDA может работать под управлением трёх операционных систем, количество платформ, для которых она может дизассемблировать файлы — практически не ограниченно. Назовите практически любую современную операционную систему, и окажется, что IDA сможет анализировать выполняемые файлы для нее. Я уже не помню точного количества процессоров, поддерживаемых IDA, но знаю, что их больше 32: несколько лет назад мне пришлось расширить битовую маску для списка процессоров (раньше был ulong, теперь ulonglong, надеюсь, хватит лет на пять).

TanaT: В каком направлении вы сейчас совершенствуете свой дизассемблер? Добавляете поддержку новых процессоров или улучшаете функциональность?

Ильфак: Мы постоянно добавляем новые процессоры и улучшаем функциональность. На мой взгляд, сегодня в IDA есть практически все, что нужно для анализа программ, за исключением одной фундаментальной вещи — анализа потоков данных и возможностей, вытекающих из этого анализа. Мы могли бы реализовать этот анализ для IBM PC, но очень хочется сделать что-то, что будет работать для любых процессоров. Иначе может оказаться, что сделанное сегодня придется выбросить через несколько лет или переписать для новых процессоров. Не секрет, что 64-битовые процессоры скоро будут доступны многим, и они вряд ли будут совместимы по бинарному коду с IBM PC.

В последней версии IDA появился отладчик для MS Windows файлов, и в будущем, вероятно, мы добавим новые модули отладчика — для Linux, для микроконтроллеров, сделаем удаленную отладку.
Конечно, еще одно направление — это выдача кода на языке высокого уровня, например С, т.е. написание декомпилятора. Задача достойная, и мы над ней работаем. Очень много деталей, которые нужно учитывать для работы с программами из реальной жизни.
Тут надо сразу сказать, что декомпилятор никогда не будет входить в состав IDA. Если (и это — большое «если») декомпилятор будет сделан, то только в виде отдельного продукта.

TanaT: Декомпилятор на язык С был бы отличным инструментов для многих профессионалов в reverse engineering. Думаете, это реально?

Ильфак: Это реально, если ставить перед собой разумные цели. Если цель — сделать систему, которая выдаст код для последующей компиляции и использования в составе другой программы, то ответ отрицательный. Вернее, такой декомпилятор сделать можно, и даже очень легко, но это меня лично совсем не интересует. Такая система была бы очень удобна для кражи кода. Если кто хочет заниматься этим, то, пожалуйста, без меня. Да, если хорошенько поискать, то такие системы можно найти в Интернете.

Если же целью является облегчение понимания программ, т.е. представление логики программы на языке высокого уровня так, чтобы это было читаемо человеком, то задача намного сложнее, но тоже решаема. Объем работ очень велик, а рынок для декомпиляторов — маленький. Может этим и объясняется тот факт, что настоящих декомпиляторов, способных разбирать реальные программы, не существует?
Кстати, уже существует маленький декомпилятор на основе IDA. Он был создан одним студентом как master thesis. Вы можете найти сайт, поискав его по имени: desquirr.

TanaT: Небольшое замешательство вызывает тот факт, что, хотя везде указано, что вы являетесь создателем IDA Pro, продает его компания Datarescue. Можете прояснить ситуацию?

Ильфак: Ну, так оно и есть. Компания Datarescue продает IDA Pro. Я не занимаюсь продажами напрямую, предпочитаю заниматься программированием, это у меня лучше получается.

TanaT: Есть ли версия вашего продукта не «Pro»?

Ильфак: Да, есть. Студенты, или пользователи, лишь иногда дизассемблирующие программы, могут пользоваться бесплатной версией IDA Freeware, которая доступна в Интернете, например, на Simtel’е. Эта версия является полноценной версией, которая продавалась несколько лет назад. Единственное, что может удивить современных пользователей, привыкших работать с мышкой — это текстовый интерфейс программы, но суть программы та же. Настоящий программист не обращает внимания на такие мелкие детали, как интерфейс программы :).

TanaT: Скажите, пожалуйста, а доступна ли где-нибудь trial- или demo-версия IDA Pro?

Ильфак: Да, конечно. Мы раздаем демонстрационные версии потенциальным покупателям — серьезным компаниям, государственным учреждениям и т. д. Сразу же хочу отметить, что у Васи Пупкина, подписавшегося как FuRiOuSDaRkLoRd, и просящего демо-версию в 5-ый раз (потому что он хочет «самолично» убедиться, что IDA отвечает его «высоким требованиям»), очень мало шансов получить ее. Такие запросы у нас сразу идут в корзину.

Хотя бывают смешные случаи. Например, меня поразил один «бедный пастор в аргентине», желающий пользоваться IDA. Он также написал, что будет молиться за нас, если мы ему пришлем программу. Интересно, что ему нужно было дизассемблировать, не библию же? Или «бедный студент», которому немедленно понадобилось анализировать какой-нибудь специальный микроконтроллер, потому что «клиенту нужно срочно».

TanaT: Кого из конкурентов вы можете выделить? Есть ли кто-либо, кто может составить конкуренцию IDA?

Ильфак: Честно говоря, не знаю, что сказать.

TanaT: Многие пользователи жалуются, что к IDA PRO почти нет официальной документации и научиться работать с ней, особенно с ее скриптовым языком, довольно сложно. Можете прокомментировать?

Ильфак: Да, это правда. Разбирать программы на языке ассемблера уже сложно, я просто не знаю, как это сделать проще (знал бы — сделал бы :)). Могу лишь посоветовать прочитать страницы помощи, посмотреть на примеры IDC скриптов, поставляемых вместе с IDA, поискать в Интернете примеры использования. Что касается документации, ее нет, и вряд ли будет в ближайшем будущем, к сожалению. Есть контекстная помощь, вызываемая по F1.

Дело еще усугубляется тем, что многие пользователи не знают, что им делать, т.е. не умеют анализировать программы. Тут очень многое зависит от уровня пользователя. Кто-то не знает язык ассемблера и ему нужно объяснять, что такое xor eax,eax. Другому непонятно, что такое DialogProc, т.к. он никогда не программировал в Windows. Третьему непонятно, почему количество push в функции не соответствует количеству pop. А ведь это самые простые случаи. Обычно пользователь загружает программу в IDA и не знает, что делать. Ответить на этот вопрос непросто, ведь «что делать» зависит от того, «что хочется получить».

Поэтому мы решили поступить самым простым способом — у нас есть F1, который описывает каждую команду, каждую функцию в IDC. Пользователю, знающему, что он хочет получить, достаточно пройтись по списку команд и постараться подобрать набор, который решит конкретную проблему. А вот незнающему пользователю будет сложнее, и помощь, наверное, должна заключаться в обучении пользователя самим азам ассемблера, представления программ в бинарном виде, типичным приемам MS Windows, и так по нарастающей. Для зарубежных пользователей мы время от время проводим такие курсы. При наличии достаточного количества интересующихся можем устроить курсы и в России.

Первым ассемблером и одновременно первым интерпретатором стал псевдокод и набор инструкций Short Code, разработанный в июле 1949 года американцами Пресом Экертом и Джоном Мошли для компьютера BINAC. Решение любой задачи вначале записывалось математическими уравнениями. Те, в свою очередь, посимвольно транслировались в коды: из “a=b+c” в “S0 03 S1 07 S2”. На заключительном этапе коды приобретали двоичный вид, а каждая строка после ввода автоматически выполнялась. Первая практическая задача, которую решил ассемблер, — расчет таблиц артиллерийской стрельбы для американских баллиститов. Ассемблеры на мнемонических кодах (с “MOV” и “ADD”) появились только в середине 50-х. Авторы ассемблера более известны изобретением самых первых вычислительных машин (на вакуумных трубках): ENIAC (1946), BINAC (1949) и прямого предка современных компьютеров UNIVAC I (1951). К сожалению, ни Эскерт, ни Мошли до наших дней не дожили.

TanaT: Вы читали книгу Криса Касперски «Образ мышления дизассемблера IDA»? Сегодня это единственная книга по IDA на русском, поэтому хотелось бы услышать о ней ваше мнение. Может вы знакомы с ее автором?

Ильфак: Да, я знаком с Крисом, и он обращался ко мне с вопросами при написании книги. Книга хороша, как развернутый справочник по функциям IDC, и рассчитана на читателя, разбирающегося в ассемблере и любящего манипулировать битами и байтами. Конечно же, я могу лишь порекомендовать эту книгу любому, кому хочется досконально разобраться с IDC и научиться писать хорошие скрипты.

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

TanaT: А почему вы сами не напишите что-то похожее на «Advanced IDA Pro Developer’s/Users’s Guide»? Ведь никто не знает все тонкости IDA, IDA SDK и IDC так, как вы. Думаю, эта книга разошлась бы немалым тиражом в одной только России. К тому же практика издания книг по своим продуктам сегодня довольно распространена: взять все тот же Microsoft Press…

Ильфак: Вы не первый, кто поднимает вопрос о книге. Может когда-нибудь я и решусь, но пока еще не готов к писательству. Если я буду писать книгу, то вряд ли останется время для улучшения IDA, так что пока пусть книга подождет 🙂

TanaT: Разрешите личный вопрос: я нигде доселе не читал интервью с вами, вы не любите их давать?

Ильфак: Это — мое первое интервью.

TanaT: Хотите сказать нашим читателям что-нибудь?

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

Спасибо за вопросы.

TanaT: И вам большое спасибо за столь интересные ответы. Успехов вам лично и вашему творению, IDA, надеемся, этот дизассемблер и дальше будет развиваться не менее интенсивно и плодотворно.

disassembler.io

Архитектура машины

ODA поддерживает более 60 машинных архитектур, включая x86, ARM, PowerPC, MIPS и многие другие.

Визуализация

Графическое представление визуально показывает поток управления текущей выбранной функцией.

Форматы объектных файлов

Поддерживаются все основные форматы файлов, включая Windows PE, ELF, COFF, SREC, Mach-O и другие.

Облачная мощность

Используйте мощь облака, чтобы сбивать биты.

Сотрудничайте и делитесь

Отправить ссылку на какой-нибудь шелл-код или полностью дизассемблированный файл.

Загрузить объявления

Загрузите распечатку на свой локальный компьютер.

Интерфейс рабочего стола в браузере

Скорость и гибкость через Интернет.

.

бесплатных дизассемблеров, декомпиляторов, шестнадцатеричных программ просмотра, шестнадцатеричных редакторов (thefreecountry.com)

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

RetDec

RetDec — это декомпилятор, который поддерживает исполняемые файлы Intel x86, ARM, MIPS, PIC32 и PowerPC с использованием таких форматов, как
ELF, PE, Mach-O, COFF, AR, Intel HEX и необработанный машинный код.Он обнаруживает компиляторы и упаковщики, используемые для исполняемых файлов,
может удалять код статически связанной библиотеки, извлекать и использовать встроенную отладочную информацию (DWARF и PDB), восстанавливать
идиомы инструкций и иерархии классов C ++ (RTTI, vtables), разбирать символы C ++, восстанавливать функции и другие
конструкции высокого уровня и т. д. Он имеет встроенный дизассемблер и может выводить файлы на C и языке, подобном Python.
Он также может создавать графы вызовов, графы управления и различные статистические данные. Это Windows и Linux
программа.Вы также можете создать его в Mac OS, хотя эта платформа официально не поддерживается. Программное обеспечение открыто
источник; Сам RetDec выпущен под лицензией MIT, но он также включает в себя другие сторонние библиотеки и ресурсы,
выпущен под множеством других лицензий.

Бесплатная программа HxD Hex Editor

HxD — это шестнадцатеричный редактор, который не только позволяет просматривать и редактировать файлы, но также позволяет выполнять редактирование необработанного диска, а также редактировать ОЗУ
другие процессы.Вы можете искать и заменять, экспортировать, вставлять байтовые шаблоны, уничтожать файлы, объединять файлы, разделять их и т. Д. Поиск и замена
средство поддерживает Unicode, текст ANSI и шестнадцатеричные значения.

Отладка

Debuggy — это отладчик Windows, дизассемблер, экстрактор ресурсов Windows, шестнадцатеричный редактор файлов,
оконный сниффер и API-шпион в одном лице.

Декомпилятор Boomerang

Boomerang — это декомпилятор с открытым исходным кодом, который производит высокоуровневый компилируемый
Исходный файл на языке C из исполняемого файла x86.Поддерживаемые форматы исполняемых файлов включают Windows PE, Linux, SPARC, Power PC (Linux, Mac OS X).

Hexplorer

Это редактор двоичных (шестнадцатеричных) файлов для Windows. Программа выпущена под лицензией GNU GPL.

Компилятор обратного проектирования REC

REC — это декомпилятор для обратного проектирования 386, 68k, двоичных файлов PowerPC и MIPS R3000,
включая двоичные файлы формата ELF (Linux, System V Rel 4, Solaris и т. д.), COFF (System V Rel 3),
PE (Win32 EXE и DLL), файл.out (системы BSD, SunOS 4), Playstation PS-X (только MIPS) и
необработанные двоичные данные. Он создает «C-подобное представление» кода и данных программы. Это
может обрабатывать символьную информацию в различных двоичных форматах (ELF + STAB, COFF, a.out + STAB).
REC доступен для Windows, Linux, Solaris SPARC, Solaris i386 и SunOS.

Бинарный редактор Frhed

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

Beye (ранее Biew) Двоичный просмотрщик

Это мультиплатформенная программа просмотра двоичных файлов со «встроенным редактором двоичного, шестнадцатеричного и дизассемблерного режимов».
Он также поддерживает разборку Pentium III, AMD K7 Athlon и Cyrix M2, а также возможность обрабатывать следующие
исполняемые форматы: MZ, NE, PE, LE, LX, DOS, SYS, NLM, arch, ELF, a.out, coff32, PharLap и rdoff.

Дизассемблер Borg

Borg — это неинтерактивный дизассемблер, который обрабатывает исполняемые файлы Win32 и разделяемые библиотеки (DLL), записывая дизассемблированный листинг в файл.

Дизассемблер программ Win32 Санг Чо

Это утилита командной строки, которая дизассемблирует исполняемые файлы Win32 PE (EXE) и разделяемые библиотеки (DLL). Он поставляется с исходным кодом
код, который можно скомпилировать и использовать как в Windows, так и в Linux.

Шестнадцатеричный редактор Khexedit

[ Обновление : этот сайт больше не доступен.]
Это шестнадцатеричный редактор (двоичный редактор) для использования в системах X Window. Согласно авторской документации, он предназначен для
интегрирована со средой KDE, но может использоваться без нее, если библиотеки KDE установлены на компьютере.

.

8051 дизассемблер онлайн Скачать бесплатно для Windows

12
Hex-Rays SA.
223

Демо

IDA — мощный многопроцессорный дизассемблер и отладчик.

1
Программное обеспечение Eolis
46

Условно-бесплатное ПО

Microchip PIC18 Disassembler — это инструмент только для частей PIC18Cxxxx и PIC18F.

2
Джефф Глатт, дорожный бегун
1

Бесплатное ПО

MIDI DisAssembler — это программа для преобразования файлов MIDI в читаемые текстовые файлы.

45
Программное обеспечение Eolis
8

Условно-бесплатное ПО

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

1
Загадочные приложения
93

Условно-бесплатное ПО

С помощью этой программы вы можете дизассемблировать свои 32/64-битные исполняемые файлы Windows.

22
SpiceLogic Inc.
18

Бесплатное ПО

Небольшой инструмент визуализации для шестнадцатеричного кода вашего микроконтроллера Intel 8051.

5
Armenian Dictionary Software Inc.
166

Условно-бесплатное ПО

Easy JAVA to Source Converter — мощный декомпилятор и дизассемблер.

IAR Systems
1

Бесплатное ПО

AR Embedded Workbench — это набор инструментов разработки для построения и отладки.

Нанкин Swansoft
11

Демо

Программное обеспечение поддерживает автоматическую сборку и разборку.

9
MyPlayCity, Inc.
772

Это отличный способ отдохнуть и хорошо провести время!

95
ФСТ Софт
59

Условно-бесплатное ПО

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

8
MCS Electronics
889

Коммерческий

BASCOM-8051 — это ОСНОВНОЙ КОМПИЛЯТОР Windows для семейства 8051.

3
AceBus
68

Условно-бесплатное ПО

8051 IDE — это программа для начала изучения микроконтроллера 8051.

2
МикроЭлектроника
40

Условно-бесплатное ПО

mikroPascal PRO для 8051 — это полнофункциональный компилятор Pascal для устройств 8051.

27
Атанас Нешков
2 961

Бесплатное ПО

Это дизассемблер и декомпилятор Windows 95/98 / ME / NT / 2000 / XP для Java.

9
Шестигранные лучи
1,649

Условно-бесплатное ПО

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

89
URSoft
45

W32DASM — приложение-дизассемблер, используемое для открытия и просмотра кода программ.

1
Inkland Software
45

Бесплатное ПО

dZ80 — это бесплатный дизассемблер Z80 / Z180 / Z80GB для двоичных файлов.

7
Hex-Rays SA
254

Демо

IDA Pro — это дизассемблер и отладчик процессора.

6
Вашаала

Win32dasm — это хорошо спроектированный дизассемблер.

Hex-Rays SA
473

Условно-бесплатное ПО

IDA — это многопроцессорный дизассемблер под управлением Windows, Linux или Mac OS X.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *