Описания инструментов Содержание
IDA - Interactive Disassembler. Кое-что о лучшем дизассемблере.
 

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

Главное отличие, которое выделяет IDA среди остальных дизассемблеров - интерактивность Выглядит это так - мы запускаем IDA, дизассемблируем необходимую программу, и начинаем ее исследовать. Если в ходе своих изысканий вы обнаружили, к примеру, что был дизассемблирован кусок текста (довольно часто встречается), вы нажатием двух клавиш можете это исправить. Достаточно установить курсор на начало некорректно дизассемблированного участка, нажать клавишу U для того, чтобы пометить этот учаток, как неисследованный, а потом А - ASCII. Таким же образом можно некоторый участок пометить как участок кода (С), как массив (*), как данные (D). Если в команде mov eax, 12345678 вам не нравится представление числа 12345678, то можно это число перевести в 16-ричный, 8-ричный, двоичный или ASCII код.

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

Для того, чтобы посмотреть участок кода на который ссылается некоторый условный/безусловный переход или вызов функции, достаточно навести курсор на соответствующую строку и нажать Enter. Чтобы вернуться к исходной точке в листинге достаточно нажать Escape. Есть еще некоторые полезнейшие функции. Выбрав View/Functions получим окно, содержащее описание всех найденных в программе функций. Сюда входит имя функции, ее начальный адрес, сегмент, которому принадлежит функция, ее длина и тип. Возможные типы функций, это: R - с возвратом в основную программу, F - дальний вызов, L - библиотечная функция, S - статическая функция, B - функция с передачей параметров через стек. Для того чтобы перейти к требуемой функции, установите курсор на ее имя и нажмите Enter. В основном, все функци, связанные с навигацией в листинге находятся в меню Navigation, так что почаще туда заглядывайте.

Если вас заинтересовала некоторая строка в программе, например "Unregistered ...", то не надо сразу бросаться и искать ее с помощью стандартных средств. Выберите View/Names и ищите свою строку - гораздо быстрее будет. Здесь необходимо отметить, что в IDA Pro строки автоматически именуются так - начальная буква имени - "a" (ASCII), далее идет начальная часть строки. Для приведенного выше примера это выглядит как aUnregistered. Если вы встретили такое имя, то это имя строки. Если же буквы "a" нет - то это имя функции. Для перехода к соответствующей строке надо нажать Enter.

Как известно, многие компиляторы имеют свои уникальные особености, свои встроенные функции, одним слово то, что делает непохожими одни и те же программы, скомпилированные к примеру Borland C++ Builder и Microsoft Visual C или Watcom C++. В результате, при дизассемблировании мы получим множество функции с "наглядными" именами типа sub_4f001234 и т.п. При этом можно долго ломать голову над тем, что же они делают. Однако IDA Pro успешно справляется и с этой проблемой. Правда надо знать каким компилятором скомпилирована программа. Выбрав View/Signatures можно просмотреть уже загруженные сигнатуры. Под сигнатурой понимается некоторая информация, уникальная для каждого компилятора, и с помощью которой IDA Pro превращает неудобочитаемые имена вроде call 123456 в call __nh_malloc или call __onexitinit. Вообще, IDA Pro пытается автоматически определить тип использованного компилятора и загрузить соответствующую сигнатуру. Если же этого не произошло, то откройте окно сигнатур и нажмите Ins. Появится список доступных сигнатур. Выберите то, что на выш взгляд является правильной. После этого сигнатура будет загружена и читабельность листинга начнет улучшаться (или ухудшаться, если сигнатура была выбрана неправильно).

Еще IDA Pro славится тем, что поддерживает большое количество различных процессоров и типов исполняемых модулей. Так что вы сможете дизассемблировать и программы Unix'a, и микрокод различных микроконтроллеров и т.д. Кроме того IDA Pro позволяет дизассемблировать программы написанные на Java выдавая в результате довольно понятный код Virtual Java Machine.Всего поддерживается 18 форматов входных файлов. Приводить полный список поддерживаемых процессоров не буду - всего их 34. Единственное о чем следует напомнить - не забывайте установить тип процессора, если он отличен от 386 Real Mode. Этот тип установлен по умолчанию.

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

И главное - если вам встертилось что-то непонятное, жмите F1 - почти для каждого действия в IDA Pro есть конеткстная помощь.

Для связи с автором пишите ze_tty@yahoo.com . Если эта статья не помогла вам, то пишите, и спрашивайте, о том, что вас интересует. Также приму критику, советы и пожелания.

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

Zet