IDAPro-53

IDA-Pro 5.3 – новое оружие в руках хакера\\ возможности, которых мы так давно ждали

крис касперски ака мыщъх, no-email

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

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

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

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

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

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

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

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

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

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

  1. полностью переписано ядро отладчика — усиленна поддержка многопоточных приложений (в том числе и в Linux) и улучшена обработка структурных исключений;
  2. добавлены новые отладочные модули для iPhoneи Symbian OS, поставляемые вместе с исходными текстами, что позволяет их совершенствовать самостоятельно, не дожидаясь выхода новой версии — отличная новость для всех хакеров, обитающих на мобильных платформах и смартфонах;
  3. радикально улучшена поддержка PIC-кода (Position-Independent Code — Позиционно Независимый Код), встречающийся в shell-кодах, а так же многих защитных механизмах, что облегчает жизнь как исследователям малвари, так и кодокопателям, освобождающих программы от оков ключевых файлов, серийных номеров и прочей несвободы;
  4. более качественная экстракция отладочной информации из MS PDB файлов — интереса главным образом исследователям недр операционных систем семейства NT, а так же хакерам, анализирующих изменения в заплатках от Microsoft на предмет поиска дыр, которые они затыкают, чтобы заточить exploit под непатченные системы (или даже пропатченные, ибо большинство дыр затыкаются далеко не с первого раза);
  5. языковые расширения от независимых разработчиков (типа IDA Perl, IDA Python) приобрети официальный статус, а вместе с ним и официальный API для взаимодействия с IDA-Pro, существенно облегчив процесс стыковки IDA-Pro с различными интерпретаторами;
  6. проделана огромная работа по исправлению ошибок. по сути дела, IDA-Pro 5.3 представляет собой огромный bug-fix. только один официальный список изменений насчитывает свыше сотни фиксов, хотя подлинное число на самом деле гораздо больше и часть ошибок исправлена «в тихую», достаточно взять хотя бы ошибку с отладкой файлов, имеющих нулевой базовый адрес, что в предыдущих версиях приводило к потере контроля над отлаживаемой программой (подробнее см. мыщъхиный блог: http://souriz.wordpress.com/2008/05/14/773-bug-in-ida-pro-fails-to-debug-zero-base-pe) в 5.3 это уже исправлено, однако, данный баг в официальном списке не значится, что наводит на определенные размышления;
  7. обновлена сигнатурная база для новых версий компиляторов от Borland, Microsoft и некоторых других, что полезно практически всем реверсерам без исключения;

Рисунок 4 результат дизассемблирования одной и той же программы старой (слева) и новой (справа) версиями 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'ы для обеспечения совместимости со всеми версиями или отбранчивая код (в клинических случаях), причем вся эта работа никак не окупается, поскольку, поддержка проданных плагинов стоит копейки, а времени отнимает… на рубли, фунты и стерлинги.

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

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

    1. официальный сайт, где выложена сама IDA-Pro, сопроводительная документация, куча примеров и бесплатных утилит, так же имеется форум (впрочем, доступный только для легальных пользователей);
    1. пакет обновления IDA-Pro 5.3, для тех кто имеет предыдущую версию и не просроченную карту поддержки;
    1. SDK для версии 5.3 (требует авторизации и еще нет в Осле, прочем, для создания плагинов можно, пускай и не без ограничений, воспользоваться SDK 5.1, которая утекала в сеть уже давно);
    1. место где расстаются с деньгами, приобретая легальную версию IDA-Pro, цена на которую в зависимости от комплектности поставки колеблется от 0,5k до 1k евродолларов;
    1. список отличий IDA 5.3 от предшествующей ей версии 5.2 (не то, чтобы совсем полный, но все же это лучше, чем совсем ничего);