Народ! Обращаюсь ко всем, кто знает, как всё это использовать... Установил IDA, но теперь не могу толком разобраться с принципом работы с ней. Расскажите, что она вообще может, хоть примерно, и как использовать основные функции. И если можно - с примерами "горящих" клавиш.
Знаю, что эта тема неоднократно поднималась, но вразумительных ответов так и не нашёл. Поэтому прошу поконкретнее и поактивнее.
Geddricko Пиши в личку свою аську, а я постучусь, далее напримере пакера простейшего покажу чего можно делать. Че сам знаю )
Geddricko тады в лом писать много тута, проще дать тебе пару пинков по аське чем формулировать мысли и писать здоровенный пост тут. Имхо, ИДА это практика, тута токо надо или вопрос и сразу же спросил\получил ответ или долгое зависание с книгами, шо не всегда результативно и в приемлимое время
Geddricko IDA - интерактивный дизассемблер. Подобный единственный в своем роде как по мощности, так и по функциональности. Это основное средство в разборе кодов процессоров любой архитектуры, но не только кодов, но и соответствующих бинарных исполнямых файловых форматов. "Интерактивный" означает, что пользователь по предположению будет активно участвовать в процессе дизассемблирования. Возмем, ассемблер архитектуры IA-32/64, известно, что однозначно дизассемблировать произвольный исполняемый файл этой архитектуры не получиться. Кое-что IDA сделает, но все проблемы при дизассемблировании ей не побороть. А проблем много - как отделить код от данных, как отделить данные от кода, где в файле текстовые строки, где нормальные инструкции. При загрузке в IDA исполняемого файла, он пытается проанализировать все автоматически, если ему это не удается, тогда в окне "Problems" появляются список проблем - т.е. что IDA в этом файле не понимает, что не является ни инструкцией ни кодом, на что не ссылается ни один переход и т.д. Допустим мы знаем, что код, который отдизассемблировала IDA, это вовсе не код, а данные. И тут мы можем повлиять на процесс анализа, помещаем курсор на кусок неправильно распознанных данных и нажимаем клавишу "D" (Data). Также, наоборот если мы знаем, что данные это код, то перемещаем курсор на нужное место и нажимаем "C" (Code). Информация о диассемблированных коде и данных сохраняется в специальном файле с расширением IDB. IDB - Interactive Disassembler Base. Потом можно возвратиться к прошлой работе загрузив раннее созданный файл, при этом чтение из оригинального исполняемого файла уже происходить не будет. Если видим, что перед нами ASCII-строка, но она не распознанна, то нажимаем "A". Помимо этих трех типов данных - код, данные и строки, есть структуры и массивы. Также константы в командах можно преставлять в виде символов, констант различных систем счисления, смещений относительно различных сегментов. Значения сегментов также можно задавать что корректных ссылок IDA на данные. Как делается первоночальный анализ файла? Возмем PE-файл. У него есть точка входа для основного потока, с этой точки в памяти начинается исполнение кода первичным потоком. По этой точке должен быть корректный код, иначе файл не будет работать. Разумно начать дизассемблирование с этой точки входа. Также в PE-файле может быть экспорт, и это тоже возможная точка начала дизассембливания. После анализа первичных точек, анализируются все распознанные переходы, условные и безусловные. Логично, в нормальном файле, они должны переходить на нормальный код. Если есть переход, значит по этому адресу код, значит IDA начинает дизассемблировать дальше по переходу, не забывая о первичном пути дизассембливания. Если в программе есть вызовы других частей программы с помощью CALL, значит вполне возможно, что операндом является функция. Также функцию можно определить по прологу и эпилогу. Они могут различатся у разных компиляторов, также конвенция вызова у разных компиляторов тоже может различаться. Из-за всего этого в опциях программы указывается конвенция вызова по умолчанию. Но обычно IDA сама способна определить что за компилятор перед ней по кодовым сигнатурам - набор кодоных сигнатур и движок который ими управляет называется FLIRT. В поставку IDA входят сигнатуры для распространенных компиляторов. FLIRT - Fast Library Identification and Recognition Technology. Сигнатура во FLIRT это 32х байтный плавающий нечеткий шаблон, по которому определяется функция runtime-библиотеки или просто стандартной библиотеки комилятора. Еще IDA мощен тем, что вся его внутренняя функциональность доступна для использования. Можно написать макрос на IDC-языке (си подобный скриптовый язык специально для IDA-скриптов), можно написать плагин на любом языке. Выбирать вам. Все зависит от нужной задачи. Так, например если код проXOR'ен - пишем макрос который ксорит код и на выходе получаем уже нормальный код, который можно анализировать. В общем цель IDA понять как работает программа или конкретная функция. Давая переменным, параметрам функций или регистрам осмысленные имена, помечая отдельные куски кода отвечающие определенной функциональности мы постепенно приближаемся к разгадке вопроса о том, что же делает эта программа или функция. Также можно иногда рипнуть то, что отдизасмила IDA. Мы любим IDA. IDA основной инструмент любого исследователя бинарного кода.
Вау!!! Osen надо учебники для чайников писать, не иначе. Спасибо за информацию. to green: Книга-хорошо, но меня интересует опыт тех, кто реально с этим работал - это достовернее.
Geddricko Ну да. А книги пишут как раз те, кто вообще в этом не шарит. Особенно Крис Касперски в жизни с IDA не работал, опыта не имеет, поэтому книгу и написал.
EvilsInterrupt если это касательно сайта, то я имел ввиду раздел "Руководство" Geddricko А метод научного тыка уже не актуален?
Geddricko +1. У осени явные писательские способности. Надо только по абзацам/пунктам/подзаголовкам разбивать.