IDA-Pro 5.3 - новое оружие в руках хакера

Автор: (c)Крис Касперски ака мыщъх

Свершилось! IDA-Pro 5.3 уже в продаже (и даже в Осле)! Ослепительный фейерверк новых фич, срывающих крышу и расширяющих границы хакерского создания до пределов нирваны. Полностью переписанный отладчик, сотни исправленных ошибок, дефектов и глюков старой версии, более полная экстракция отладочной инфы из PDB-файлов, модули для iPhone, Symbian OS, Linux'а и куча-куча всего того, о чем прежде оставалось всего лишь мечтать.

Введение

Что такое IDA-Pro? Женщина. Красивая, напомаженная (если это GUI), своенравная. И... дорогая. Как и положено быть женщинам. ИДА - женское имя, а потому она SHE, а не IT. Дизассемблер, в смысле. Изначально IDA представляла собой интерактивный дизассемблер, радикальным образом отличающийся от пакетных дизассемблеров того времени. Дизассемблер заглатывал бинарный код, выдавая на выходе ассемблерный листинг, над котором приходилось кропотливо работать (в текстовом редакторе), составляя специальные правила для дизассемблера, объясняющие - где он накосячил и как это надо было дизассемблировать. После чего весь процесс повторялся вновь. Хакер опять изучал полученный листинг, составлял новый список правил... и трахался, вплоть до полного изнеможения.

Самая первая версия

Рисунок 1. Самая первая версия IDA (в те времена еще не Pro), сейчас представляющая разве что исторический интерес музейного экспоната.

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

Сначала IDA приобрела поддержку макросов и скриптового языка, напоминающего сильно урезанный Си. Скрипты, написанные хакерами, не только автоматизировали взлом, но и, в частности, позволяли распаковывать упакованный код прямо в ИДЕ. Очень удобно, хотя ограниченные возможности скриптов тормозили прогресс и вот, наконец, появились плагины, дающие полный доступ ко внутреннему API ИДЫ. Круто, но неудобно. Плагины пишутся на приплюснутом Си и пишутся довольно долго. Плюс совершенно ненаглядно, а потому хакеры тут же прикрутили к ИДЕ всевозможные языки типа Perl'а и Python'а, делающие программирование простым и понятным, причем без отрыва от производства, в смысле - без выхода из дизассемблера.

Современная IDA-Pro

Рисунок 2. Современная IDA-Pro с кучей "косметики" и прочих графических "бантиков", заставляющих хакеров старого поколения скрежетать зубами, зато новому поколению все это очень нравится.

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

IDA-Pro - это стандарт де-факто в мире реверсинга, другого такого дизассемблера просто нет, а потому нет и альтернативы. Монополизм, конечно, не есть хорошо (чем, собственно говоря, и обусловлены такие цены), но... каждая новая версия приводит хакеров в возбуждение, хотя лично мыщъх 90% времени проводит в IDA-Pro 4.7, которой вполне удовлетворен (особенно с учетом того, что все отсутствующие фичи можно реализовать руками, то есть скриптами и плагинами), только зачем их реализовывать когда можно взять уже готовое и отлаженное?!

14 июля 2008 года вышел официальный релиз IDA-Pro 5.3, пришедший на смену 5.2. Изменение в первом знаке после запятой обычно не сулит грандиозных нововведений и отчасти эти опасения вполне оправданы. Большое количество реверсеров, с которыми разговаривал мыщъх (и у которых истекла лицензия на бесплатное обновление), раздумывают - стоит ли переходить на новую версию или дожидаться следующей. Тут все сильно зависит от конкретных потребностей отдельно взятого индивидуума, а потому завязываем с рекламой и начинаем говорить по существу.

Символьная информация

Рисунок 3. Символьная информация, добытая старой (слева) и новой (справа) версиями IDA-Pro.

Свободный обзор новых возможностей

Результат дизассемблирования

Рисунок 4. Результат дизассемблирования одной и той же программы старой (слева) и новой (справа) версиями IDA-Pro.

Отладочные возможности IDA-Pro

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

Отсюда родилась идея - встроить отладчик непосредственно в сам дизассемблер. Ильфак был не первым, кто осуществил такое (до этого существовал и пользовался определенным успехом знаменитый W32Dasm), причем первые попытки создавали крайне неблагоприятное впечатление и отладчик, встроенный в IDA 4.x, на фоне Ольги выглядел детской игрушкой, не говоря уже о могучем Soft-Ice. С выходом серии 5.x ситуация слегка изменилась и IDA-отладчик дорос до минимально потребного уровня. Soft-Ice к тому времени уже превратился в разлагающийся труп, зато Ольга существенно упрочнила свои позиции, собрав нехилую коллекцию плагинов и скриптов, которой не могла похвастаться IDA 5.х

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

Зато на Linux-платформе IDA-Pro отладчик смотрится намного более соблазнительно, чем GDB. Хотя GDB намного более мощная штука, он требует времени на изучение, а IDA-Pro предоставляет интерактивный интуитивно понятный интерфейс, переплевывающий практически все конкурирующие отладчики, во всяком случае, на прикладном уровне (ну, а на ядерный IDA-Pro пока и не замахивалась).

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

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

Внешний вид отладчика

Рисунок 5. Внешний вид отладчика, интегрированного в IDA-Pro.

Дихлофос, хлорофос, карбофос...

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

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

Хакеры бессознательно доверяют IDA-Pro, считая ее непогрешимой, хотя она ошибается намного чаще, чем конкурирующие дизассемблеры. Касательно движка для x86 процессоров, IDA-Pro 5.3 наконец-то научилась распознавать UD2-инструкцию, специально предназначенную для исключения и встречающуюся во многих защитах. То же самое относится и к 3-байтовым NOP инструкциям (0F 19..0F 1E), которые в списке изменений значатся как недокументированные, когда на самом деле они очень даже документированные (Ильфак не читает мануалов?!).

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

Хуже, когда IDA-Pro пакостит втихую. Например, не учитывает команду DEC/INC SP в 32-разрядном сегменте, что приводит к неверно вычисленным смещениям локальных переменных и аргументов и, как следствие, неверному анализу всей функции в целом. Процессорный модуль для платформы .NET также еще как следует не отлажен, хотя появился не вчера и даже не позавчера, а очень давно появился, но все равно IDA-Pro 5.2 неверно декодировала команды conv.r4, conv.r8 и conv.r.un. В версии 5.3 это исправлено.

Самая приятная новость - функции с EH_prolog-прологом наконец-то дизассемблируются правильно!!! Соль в том, что классический пролог устанавливает EBP на самое дно стекового фрейма и потому все локальные переменные приобретают отрицательные смещения, а все аргументы - положительные. Функции с EH_prolog-прологом делят стековый фрейм на две части. В одну попадают буфера, в другую - скалярные переменные и указатели. Впервые эта техника была применена в pro-police (бесплатном расширении для знаменитого GCC-компилятора) для борьбы со стековыми переполнениями, а затем была "позаимствована" компанией Microsoft. Регистр EBP устанавливается на границу, отделяющую буфера от не-буферов, в результате чего буфера приобретают отрицательные смещения, а скалярные переменные, указатели и аргументы - положительные, но вплоть до версии 5.2 включительно IDA-Pro обзывала их всех аргументами, серьезно озадачивая хакеров - какая интересная функция! Ей передали пару-тройку аргументов, а она приняла на грудь целый десяток, оперируя ими, как ни в чем не бывало. Что делать?! Приходилось выкручиваться, устраивая танцы с бубном. В версии 5.3 это исправлено и танцевать уже не надо, а бубен можно положить на полку.

Исправление ошибок - это приятно и можно только приветствовать. Очень приятно, что Ильфак предпочитает гонять багов, тогда как большинство остальных компаний тяготеют к лихорадочному добавлению новых фич, исправляя ошибки только тогда, когда они уже всех достанут. С другой стороны, не совсем радует политика обновлений. Если IDA 5.3 фактически представляет собой один большой баг-фикс (ну, не без новых возможностей, конечно), почему бы ее не раздавать бесплатно всем желающим в виде заплаток для всех измененных файлов?! Microsoft, Adobe и еще куча других компаний делают это даже без проверки валидности лицензии, ибо брать с пользователя деньги за исправление своих же ошибок - это, знаете ли, может делать только Ильфак, который сменил Пьера (не Безухова), и теперь он CEO и вообще без пяти мнут, чтобы забросить кодинг и заняться бизнесом, чего впрочем уже давно следовало ожидать, наблюдая агонию развития IDA-Pro на протяжении последних пяти лет. Реально новых идей нет, реально новых фич - тоже. А те, что есть, настоящим хакерам либо не нужны (графы, декомпилятор) и годятся только для привлечения "пионеров", либо же недостающий функционал покрывается скриптами и плагинами.

Заключение

Так стоит ли переходить на новую версию IDA-Pro или нет?! Естественно, для тех, кто выловил ее в Осле, вопрос вообще не стоит. Халява! Профессиональные реверсеры, работающие на респектабельные фирмы, тоже не заморачиваются такими вещами, т.к. фирма предоставляет реверсеру все необходимое, в том числе и последние версии IDA-Pro, а если не предоставляет - зачем работать в такой фирме?!

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

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

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

IDA-Pro

Рисунок 6. IDA-Pro переехала на сайт декомпилятора hex-rays, являющегося по сути дела одним из ее плагинов. Шестерка бьет туза, ага!

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