Ida как дизассемблировать файл

Обновлено: 02.07.2024

Отлов вирусов дизассемблером IDA

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

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

С каждым днем защиты совершенствуются, хакерам/вирьмейкерам и прочей нечести становится все труднее зарабатывать на кусок хлеба. Но почему-то идеальной защиты до сих пор не придумано, и антивирусы с анти-хакерами до сих пор достаточно тупы. Что не лучшим образом влияет на сохранность конфиденциальной информации бедных юзеров. Стоит лишь немного поменять / переписать / зашифровать вирус/кейлоггер/бекдур, и любой Антивирус Касперского вместе с NOD32 почему-то хором перестают кричать на 5_минут_назад_вирус. Вы часто получали от "друзей" "прикольный flash-мультик", проверяли его антивирусом, запускали - и все было в порядке? Но очень скоро откуда-то появлялись непонятные окошки с надписями типа "Коля - дурень", переворачивался экран, открывался дисковод, отключалась мышка. Если такое с Вами когда-то произошло, то можете быть уверены, это самое лучшее последствие из тех, которое могло произойти после запуска "не той" программы.

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

Рассмотрим несколько так называемых "вирусов". Лот номер один:

Trojan.DownLoader.1007
Ни для кого не секрет, как мы любим кряки. Как замечательно скачать программу и, не платя ни копейки, пользоваться ею. Но почему-то никому не приходит в голову, что у крэкеров тоже бывает чувство юмора, и они не упустят свой шанс протроянить пару-тройку сотен доверчивых пользователей.

Дизассемблировав один из таких кряков (как ни странно, это легко сделать, перетащив нужный файл на надпись "Drag a file here to disassemble"), я заглянул в закладку Imports ИДЫ.

Запомните имена всех этих функций или выпишите где-нибудь. Все они хранятся в библиотеке WSOCK32.DLL и используются для. работы с сетью.
На кой черт таблетке с cracks.am работать с сетью?
Это неправильный кряк, мы не будем его запускать!
А из названия троя легко видеть, что занимается он ни чем другим, как скачивает из сети другой троян и запускает на нашем компьютере. А тот делает с нашей машиной, что хочется его хозяину.

Trojan.PSW.LDPinch.400
Пинч занимается тем, что крадет пароли от многих известных программ. Он очень часто используется нашими хакерами. По своему он незаменим. Глянем импорты.
Из новых функций мы видим здесь CreatePipe и bind. Первая предназначена для перенаправления ввода-ввывода в консольных приложениях, а вторая для создания серверов. Стандартный случай для троянов. Запускается командный интерпретатор cmd.exe, открывается какой-то порт и весь ввод-вывод передается в инет, хакеру. Так осуществляется контроль над машиной.

Функция RegSetValueExA используется для установления значения ключей реестра. Давайте попробуем посмотреть, какие параметры принимает эта функция. Нажмем Alt+T. Введем названия нашей функции и будем давить Ctr+T до тех пор, пока не найдем такой кусок кода

Напротив aSoftwareMicr_0 мы видим странный комментарий. Два раза кликнув по надписи aSoftwareMicr_0, мы найдем строчку

Значит, программа что-то делает с реестром, и использует эту строку. Вообще-то любой более-менее продвинутый пользователь знает, что в этом ключе прописываются на автозапуск многие программы. Пуск -> Выполнить -> regedit. Найдите ключ в HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE - эти программы запускаются вместе с Вашей операционной системой. Уверен, Вы найдете там и Ваш антивирус.

Trojan.Microjo.17
Микроджойнер - известная хакерская утилита от создателя Пинча. Ее задача - объединять несколько программ в одну. Скрестив калькулятор со злым вирусом, можно получить внешне безобидную программу, на самом деле исполняющую вредоносный код.

Давайте сначала дизассемблируем несколько заведомо безвредных программ. Предлагаю стандартный набор: Блокнот, Калькулятор и пасьянс Косынка. Все они лежат в c:\windows\system32 и называются соответственно notepad.exe, calc.exe и sol.exe. В нормальных программах большАя часть функций импортируется из KERNEL32.DLL и USER32.DLL. Также в них почти наверняка должны использоваться функции TranslateMessage и DispatchMessage - они присутствуют во всех оконных приложениях. Если Вы продолжете эксперименты и попробуете дизассемблировать нечто серьезнее Блокнота, то обратите внимание на то, что нормальные проги могут дизассемблироваться достаточно долго - 10 минут и дольше.

Попробуем дизассемблировать Trojan.Microjo.17. Странно, это заняло всего несколько секунд (как и в случае со всеми предыдущими вирусами). Заглянем в импорты:

004010C4 LoadLibraryA KERNEL32

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

Только не надо делать выводы, что все, что дизассемблируется долго - не вирусы. Это совсем не так. Просто при дизассемблировании нужно про себя помечать, если оно прошло быстро. Вирусы/черви/трояны, как правило, достаточно простые программы и обрабатываются ИДОЙ в секунды. Но не стоит забывать об исключениях.

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


Нынче стало модно шифровать/паковать свои программы. Еще бы! Это позволяет уменьшить размер проги в 2-3 раза и затруднить чьи-либо попытки порыться в ее коде. В том числе и наши (.

Для определения упаковщиков/протекторов/компиляторов существует просто незаменимая программа PEiD. Просто перетащив на окно утилиты нужную нам прогу, мы сразу узнаем все о ее упаковщике и был ли такой вообще применен. Зная имя и автора упаковщика/криптора мы найдем на просторах интернета соответствующий распаковщик/декриптор и узнаем, чем на самом деле занимается прога.

Перетащив звезду на PEiD, мы убедимся, что она упакована UPX, следовательно о вредоносности программы по ее IDA - листингу невозможно судить до тех пор, пока мы не распакуем червя. Чем же распаковать этот UPX? Оказывается, что упаковщик умеет самостоятельно распаковывать упакованные им же самим программы. Пишем в командной строке "upx -d msblast.exe" и получаем распакованный файл. Убедимся, что больше он ничем не упакован, перетащив файл в PEiD. Утилита выдаст нам

LCC Win32 1.x -> Jacob Navia [Overlay]

LCC - это компилятор, значит, код распакован. Смотрим в IDA. Как видно, программа использует множество функций для работы с сетью и ни одной из USER32.DLL - следовательно, нет даже намека на интерфейс. Прога без интерфейса и работающая с сетью. Трем от греха подальше.

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

Запакован Netsky небезизвестным упаковщиком FSG - об этом свидетельствует PEiD. При некотором везении в достаточно короткие сроки Yandex найдет для него распаковщик. Лично мне нравится Quick Unpack - это универсальный распаковщик, поддерживающий десятки различных крипторов/пакеров разных версий и FSG в том числе. Жмем пимпу рядом с загадочным OEP, должны появиться какие-то циферки, у меня это 00401189. Затем распаковываем.

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

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


Пятнадцать лет назад эпический труд Криса Касперски «Фундаментальные основы хакерства» был настольной книгой каждого начинающего исследователя в области компьютерной безопасности. Однако время идет, и знания, опубликованные Крисом, теряют актуальность. Редакторы «Хакера» попытались обновить этот объемный труд и перенести его из времен Windows 2000 и Visual Studio 6.0 во времена Windows 10 и Visual Studio 2019.

Ссылки на другие статьи из этого цикла ищи на странице автора.

С легкой руки Денниса Ритчи повелось начинать освоение нового языка программирования с создания простейшей программы «Hello, World!». Не будем нарушать эту традицию и оценим возможности IDA Pro следующим примером.

Чтобы все было как в статье, компилируй примеры с помощью Visual C++ 2017 вызовом cl.exe first.cpp /EHcs . Флаг /EHcs нужен, чтобы подавить возражение компилятора и вместе с тем включить семантику уничтожения объектов.

Компилятор сгенерирует исполняемый файл объемом почти 190 Кбайт, большую часть которого займет служебный, стартовый или библиотечный код. Попытка дизассемблирования с помощью таких средств, как W32Dasm, не увенчается быстрым успехом, поскольку над полученным листингом размером в два с половиной мегабайта (!) можно просидеть не час и не два. Легко представить, сколько времени уйдет на серьезные задачи, требующие изучения десятков и сотен мегабайтов дизассемблированного текста.

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

Результат работы IDA Pro

Результат работы IDA Pro

Чтобы открыть текстовое представление, надо из контекстного меню выбрать пункт Text view.

Какую версию IDA Pro выбрать?

Последней версией IDA Pro на момент написания статьи была 7.3. Ее цена может быть великовата для покупки в исследовательских целях. Как известно, Ильфак Гильфанов очень строго относится к утечкам и появлению продуктов своей компании в интернете и не допускает подобного.

Однако на сайте компании Hex-Rays в публичный доступ выложена бесплатная версия дизассемблера с функциональными ограничениями. Например, она не получает обновления после достижения майлстоуна целой версии, то есть сейчас для свободной загрузки доступна версия 7.0. Также она поддерживает только архитектуры x86 и x64.

Тем не менее этого вполне достаточно для наших целей. Потому что нам не придется разбираться в коде для процессоров ARM, Motorola, Sparc, MIPS или Zilog. Еще одно ограничение накладывается на использование в коммерческих целях, но и тут наша совесть чиста.

Закончив автоматический анализ файла first.exe , IDA переместит курсор к строке .text:0040628B — точке входа в программу. Не забудь из графического режима отображения листинга переключиться в текстовый. Также обрати внимание на строчку .text:00406290 start endp ; sp-analysis failed , выделенную красным цветом в конце функции start . Так IDA отмечает последнюю строку функции в случае, если у нее в конце return и значение указателя стека на выходе из функции отличается от такового на входе.

Среди начинающих программистов широко распространено заблуждение, что якобы программы, написанные на языке С, начинают выполняться с функции main . В действительности это не совсем так. На самом деле сразу после загрузки файла управление передается на функцию Start , вставленную компилятором. Она подготавливает глобальные переменные:

  • argc — количество аргументов командной строки;
  • argv — массив указателей на строки аргументов;
  • _environ — массив указателей на строки переменных окружения.

Заполняется структура OSVERSIONINFOEX , которая среди прочего включает:

  • dwBuildNumber — билд;
  • dwMajorVersion — старшую версию операционной системы;
  • dwMinorVersion — младшую версию операционной системы;
  • _winver — полную версию операционной системы;
  • wServicePackMajor — старшую версию пакета обновления;
  • wServicePackMinor — младшую версию пакета обновления.

Далее Start инициализирует кучу (heap) и вызывает функцию main, а после возвращения управления завершает процесс с помощью функции Exit . Для получения значений структуры OSVERSIONINFOEX используется функция GetVersionEx .

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

CRtO.demo.c

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

Очевидно, нет никакой необходимости анализировать стандартный стартовый код приложения, и первая задача исследователя — найти место передачи управления на функцию main . К сожалению, чтобы гарантированно решить эту задачу, потребуется полный анализ содержимого функции Start . У исследователей есть много хитростей, которые позволяют не делать этого, но все они базируются на особенностях реализации конкретных компиляторов и не могут считаться универсальными.

Например, Visual C++ всегда, независимо от прототипа функции main , передает ей три аргумента: указатель на массив указателей переменных окружения, указатель на массив указателей аргументов командной строки и количество аргументов командной строки, а все остальные функции стартового кода принимают меньшее количество аргументов.

Рекомендую ознакомиться с исходниками стартовых функций популярных компиляторов. Для Visual C++ 14 в соответствии с архитектурой они находятся в подпапках каталога %\Program Files (x86)\Microsoft Visual Studio 14.0\VC\crt\src\ . Их изучение упростит анализ дизассемблерного листинга.

Ниже в качестве иллюстрации приводится фрагмент стартового кода программы first.exe , полученный в результате работы W32Dasm.

//******************** Program Entry Point ********************
:0040628B E802070000 call 00406992
:00406290 E974FEFFFF jmp 00406109

* Referenced by a CALL at Addresses:
|:0040380C , :004038B2 , :0040392E , :00403977 , :00403A8E
|:00404094 , :004040FA , :00404262 , :00404BF4 , :00405937
|:004059AE
|

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004062B6(U)
|
:00406295 8B4DF4 mov ecx, dword ptr [ebp-0C]
:00406298 64890D00000000 mov dword ptr fs:[00000000], ecx
:0040629F 59 pop ecx
:004062A0 5F pop edi
:004062A1 5F pop edi
:004062A2 5E pop esi
:004062A3 5B pop ebx
:004062A4 8BE5 mov esp, ebp
:004062A6 5D pop ebp
:004062A7 51 push ecx
:004062A8 F2 repnz
:004062A9 C3 ret
.

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

Поэтому способности дизассемблера тесно связаны с его версией и полнотой комплекта поставки — далеко не все версии IDA Pro в состоянии работать с программами, сгенерированными современными компиляторами.

.text:0040628B start proc near
.text:0040628B
.text:0040628B ; FUNCTION CHUNK AT .text:00406109 SIZE 00000127 BYTES
.text:0040628B ; FUNCTION CHUNK AT .text:00406265 SIZE 00000026 BYTES
.text:0040628B
.text:0040628B call sub_406992
.text:00406290 jmp loc_406109
.text:00406290 start endp ; sp-analysis failed
.text:00406290
.text:00406295 ; [00000015 BYTES: COLLAPSED FUNCTION __EH_epilog3. PRESS CTRL-NUMPAD+ TO EXPAND]
.text:004062AA ; [00000011 BYTES: COLLAPSED FUNCTION __EH_epilog3_GS. PRESS CTRL-NUMPAD+ TO EXPAND]
.text:004062BB ; [00000034 BYTES: COLLAPSED FUNCTION __EH_prolog3. PRESS CTRL-NUMPAD+ TO EXPAND]
.text:004062EF ; [00000037 BYTES: COLLAPSED FUNCTION __EH_prolog3_GS. PRESS CTRL-NUMPAD+ TO EXPAND]
.text:00406326 ; [00000037 BYTES: COLLAPSED FUNCTION __EH_prolog3_catch. PRESS CTRL-NUMPAD+ TO EXPAND]
.text:0040635D
.text:0040635D ; =============== S U B R O U T I N E ===============
.text:0040635D
.text:0040635D ; Attributes: thunk
.text:0040635D
.text:0040635D sub_40635D proc near ; CODE XREF: sub_4042FD+19↑p
.text:0040635D jmp sub_406745
.text:0040635D sub_40635D endp
.text:0040635D
.text:00406362
.

Текстовое отображение результата работы IDA

Текстовое отображение результата работы IDA

Давай разбираться в получившемся листинге. Первое и в данном случае единственное, что нам надо найти, — это функция main . В начале стартового кода после выполнения процедуры sub_406992 программа совершает прыжок на метку loc_406109 :

.text:0040628B start proc near
.text:0040628B call sub_406992
.text:00406290 jmp loc_406109

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

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

В итоге доходим до вызова функции: call sub_4010D0 . Похоже, это и есть функция main , поскольку здесь дизассемблер смог распознать строковую переменную и дал ей осмысленное имя aHelloSailor , а в комментарии, расположенном справа, для наглядности привел оригинальное содержимое Hello, Sailor!\n . Смещение этой строки компилятор закинул на вершину стека, а затем ниже через строчку, по всей видимости, происходит вызов функции вывода на экран:

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

Если поместить курсор в границы имени aHelloSailor и нажать Enter, IDA автоматически перейдет к строке, в которой выполняется определение переменной:

.rdata:0041E1A0 aHelloSailor db 'Hello, Sailor!',0Ah,0 ; DATA XREF: sub_4010D0+3↑o

Выражение DATA XREF: sub_4010D0+3↑o называется перекрестной ссылкой и свидетельствует о том, что в третьей строке процедуры sub_4010D0 произошло обращение к текущему адресу по его смещению ( o от слова offset), а стрелка, направленная вверх, указывает на относительное расположение источника перекрестной ссылки.

Если навести курсор на выражение sub_4010D0+3↑o и нажать Enter, то IDA Pro перейдет к следующей строке:

Нажатие Esc отменяет предыдущее перемещение, возвращая курсор в исходную позицию.

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

Что не так с IDA?

Положа руку на сердце — я был слегка разочарован, ибо ожидал, что IDA распознает больше библиотечных процедур. Поэтому я решил натравить «Иду» на такую же программу, но сгенерированную более ранней версией компилятора. Подопытным кроликом выступил Visual C++ 8.0 (VS 2005).

Сравним результаты работы компиляторов. Тот же исходник, компиляция из командной строки (папка first05 ). Загрузим итоговый экзешник в «Иду». Листинг приводится в сокращенном виде для экономии пространства.



Мало того что стартовый код меньше по объему, так еще было автоматически определено большее количество библиотечных функций, среди которых: GetVersionExA, GetProcessHeap, HeapFree и ряд других. Среди них достаточно просто найти вызов main и перейти на саму функцию.



Тем не менее VC++ 8.0 — ушедшая эпоха, и в пример я ее привел только для ознакомления.

На этом анализ приложения first.cpp можно считать завершенным. Для полноты картины остается переименовать функцию sub_4010D0 в main . Для этого подводи курсор к строке .text:004010D0 (началу функции) и жми N. В появившемся диалоге можешь ввести main . Результат должен выглядеть так:

Обрати внимание: IDA в комментарии подставила прототип функции, а ниже параметры по умолчанию.

Продолжение доступно только участникам

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Крис Касперски

Известный российский хакер. Легенда ][, ex-редактор ВЗЛОМа. Также известен под псевдонимами мыщъх, nezumi (яп. 鼠, мышь), n2k, elraton, souriz, tikus, muss, farah, jardon, KPNC.

Юрий Язев

Широко известен под псевдонимом yurembo. Программист, разработчик видеоигр, независимый исследователь. Старый автор журнала «Хакер».

Дизассемблеры и декомпиляторы исполняемых файлов


Дизассемблеры и декомпиляторы исполняемых файлов

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

Скриншот программы dnSpy


Скриншот программы dnSpy

Скриншот программы IDA Pro Advanced


Скриншот программы IDA Pro Advanced

IDA Pro (сокращение от Interactive DisAssembler) - один из моих основных инструментов для реверс-инжиниринга и разбора файлов. Это интерактивный дизассемблер и отладчик с поддержкой множества форматов исполняемых файлов для большого числа процессоров и операционных систем. Чтобы перечислить все его возможности потребуется целая книга. Но даже тут возможности IDA не заканчиваются. Плагин Hex-Rays для IDA Pro позволяет декомплировать ассемблерный листинг в более-менее человекопонятный псевдокод, по синтаксису похожий на C. В некоторых случаях это значительно облегчает работу. Просто так приобрести IDA Pro частным лицам практически невозможно, и дело не только в непомерной цене, а в том, что автор придерживается абсолютно неадекватной политики в плане продаж. К счастью, несколько последних версий этого замечательного дизассемблера, несмотря на все трудности, были успешно слиты в свободный доступ. Это IDA Pro Advanced 6.8, последняя доступная версия, которая работает с 32-битными системами, а также IDA Pro Advanced 7.0 и IDA Pro Advanced 7.2 для 64-битных систем. Если по каким-то причинам вы не можете использовать варез, то на офсайте есть бесплатные демо-версии с урезанным функционалом.

Скриншот программы Interactive Delphi Reconstructor


Скриншот программы Interactive Delphi Reconstructor

IDR (Interactive Delphi Reconstructor) - бесплатный декомпилятор исполняемых файлов и динамических библиотек. В отличие от IDA Pro, этот декомпилятор создан специально для разбора файлов, написанных на языке Delphi. Сейчас проект прекратил развитие, если какие изменения и вносятся, то исключительно косметические. Исходники для доработки открыты. Лично я пользуюсь стабильным комплектом Interactive Delphi Reconstructor 2.6.0.1.

Скриншот программы VB Decompiler Pro


Скриншот программы VB Decompiler Pro

Еще один специализированный декомпилятор - VB Decompiler Pro. Он работает с программами (EXE, DLL, OCX), написанными на Visual Basic. В случае, если приложение собрано в p-code, декомпилятор может разобрать его практически до исходного кода. Но даже если приложение скомпилировано в native code, в этом случае VB Decompiler анализирует и восстанавливает довольно много инструкций, чтобы насколько это возможно приблизить ассемблерный код к исходному. Это сильно упростит задачу анализа алгоритмов исследуемой программы. Честные граждане могут воспользоваться бесплатной Lite-версией с офсайта, для любителей полных версий софта есть релиз VB Decompiler Pro 10.0. Антивирусы могут ругаться на активатор, но тут вы уже сами решайте что делать.

Конечно, это далеко не полный список инструментов для дизассемблирования и декомпиляции, который есть в свободном доступе. Например, та же набирающая популярность Ghidra от АНБ может составить конкуренцию IDA Pro с Hex-Rays. Но я в этой статье перечислил лишь те программы, которыми пользуюсь сам и которые упоминаются в статьях на этом сайте.

На этом шаге мы рассмотрим основные возможности дизассемблера IDA PRO.

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

IDA PRO

Рассмотрим некоторые возможности этого дизассемблера.

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

При помощи комбинации клавиш Shift+Insert, Insert, а также пунктов меню Edit в любом месте программы можно записать комментарий. Комментарий, как и введенные названия меток, запоминается в отдельном файле. В комментарии может присутствовать адрес строки программы или имя метки. Если сделать двойной щелчок мышью по адресу или метке, то мы как раз и очутимся на этом месте.

IDA PRO

Программа IDA PRO осуществляет дизассемблирование модулей самых различных форматов: OBJ, EXE, DLL, VXD, ZIP, NLM и др.

Функциональность IDA PRO может быть значительно усилена посредством подключаемых модулей - plugin. Подключаемые модули пишутся на языке C++ и имеют структуру РЕ-модулей. Подключение модулей осуществляется через горячие клавиши или через пункты меню Edit | Plugins. Подключаемые модули находятся в специальном каталоге Plugins, где находится и файл конфигурации, где указаны эти модули.

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

Читайте также: