понедельник, 12 июля 2010 г.

IDA + Bochs: нафига оно надо?

Я как-то уже писал об эмуляторе x86emu для IDA, но сегодня я хочу рассказать о гораздо более мощном эмуляторе Bochs. Bochs представляет собой полный эмулятор системы, на базе которого вы можете загрузить любую ОС (если только нужное для загрузки этой ОС железо поддерживается эмулятором).
В эмуляторе есть встроенный отладчик, который позволяет отлаживать загрузку операционной системы еще на раннем этапе. Но самое интересное другое, а точнее то, что начиная с версии IDA Pro 5.4 появилась возможность подключаться к отладчику Bochs из стандартного интерфейса IDA. Работает эта связка достаточно быстро, в отличии, если вы попытаетесь загрузить винду под эмулятором и выполнить какие-то осмысленные действия. А том, как подключить отладчик Bochs из IDA уже есть хороший мануал, а я постараюсь рассказать собственно зачем это делать. На самом деле эту возможность почему то многие упускают из виду, хотя порой эта фича оказывается крайне полезной. Например, при отладке шелл-кода, обфусцированного кода или когда просто нужно быстро выполнить произвольный участок исполняемого файла. IDA поддерживает несколько режимов отладки в связке с Bochs:
- отладка ранней стадии загрузки (Disk Image), что позволяет отлаживать boot record
- отладка произвольного участка кода (IDB), позволяет выполнить на эмуляторе любой выделенный участок кода. Этот режим полезен при отладке шелл-кода и обфусцтрованных участков кода
- отладка исполняемого файла (PE), стандартный режим отладки
Отладка загрузочной записи бывает очень полезна при анализе зловредов, которые ее модифицируют (mebroot, gootkit ...).
Использование связки IDA + Bochs значительно эффективнее, нежели x86emu, т.к. здесь происходит эмуляция не выборочного набора вызовов API, а работы всей ОС целиком.

4 комментария:

  1. Отладка загрузки ОС (бутсектор -> ntldr -> osloader.exe -> kernel), собственно, самый востребованный кейс использования отладчика Bochs. Вот только работает он неадекватно медленно.
    Надеюсь, что кто-нибудь додумается выкинуть из Qemu убогий gdb интерфейс (который даже в связке с идой не имеет некоторых _очень_ нужных фич), и реализовать вместо него что-то более функциональное.

    ОтветитьУдалить
  2. Мы тоже юзаем эту связку, по большей части именно для этих целей. Скорость конечно не ахти какая, но за неимением альтернативы ... А Qemu не пробовал, стоит?

    ОтветитьУдалить
  3. Стоит, если не смущает принципиальное отсутствие возможности со стороны gdb получить доступ к значениям системных регистров (crX, gdtr/idtr, итд.) и как следствие - невозможность автоматического распознавания границ и атрибутов сегментов в IDA.

    ОтветитьУдалить