Набор статей и руководств по дизассемблеру IDA

Как повысить качество дизассемблирования?


  • При загрузке файла сразу же укажите правильный процессор и тип файла. Для бинарных файла укажите правильный адрес загрузки.
  • После загрузки файла проверьте правильность разбиения по сегментам. IDA практически всегда правильно определяет границы сегментов, но в исключительных случаях могут быть ошибки. Если границы сегментов неправильные, то приостановите автоанализ (все равно придется анализировать весь файл после переразбиения) и редактируйте границы сегментов. В крайнем случае можно удалить все сегменты и создать их заново. При этом не забудьте отменить флаг "disable addresses" в диалогах работы с сегментами. После создания правильной сегментации запустите анализ.

    Примечание: в начале анализа границы сегментов определяются с точностью до параграфа. Это нормально: не требуется указывать точные границы вручную, IDA сама передвинет их во время анализа.

  • Hе дожидаясь конца анализа проверьте значения сегментных регистров по умолчанию. Их можно посмотреть а окне сегментов (Ctrl-S). Неправильные значения сразу же поменяйте.
  • Если использованный для создания программы компилятор определился неправильно или совсем не определился, то исправьте положение, редактируя список сигнатур в окне View|Signatures.
  • Избавьтесь от неопределенных байтов, превращая их в инструкции или данные. Hе спешите - если Вы не уверены, что байты надо превращать в инструкции или данные, то не превращайте. Вы всегда сможете найти оставшиеся неопределенными байты командой поиска (Ctrl-U)
  • Избавьтесь от сомнительных операндов, объявляя их числами или смещениями. (вернее, указывая их тип. Пользуйтесь меню Edit|Oрerands tyрes).
  • Добейтесь, чтобы каждая инструкция принадлежала к функции.
  • После завершения анализа пройдитесь по списку проблем (Ctrl-Q), и изучите каждую проблему в отдельности, принимая соответствующие действия.
  • Используйте символьные константы и структуры.
  • Избегайте соблазна массовых операций и используйте их с осторожностью. Вообще, чем больше ручного труда, тем качественнее листинг - у Вас интеллекта больше, чем у программы (во всяком случае, я делаю такое допущение :)
  • Сделайте несколько проходов по файлу в поисках неопределенных байтов, сомнительных операндов и адресов из списка проблем. Как только все эти виды поиска будут неуспешными (т.е. Вы избавились от них), можете попытаться создать выходной файл.
  • В некоторых случаях попробуйте запретить финальный проход автоанализатора. Тогда неопределенных байт будет больше, но у Вас будет возможность самому пройтись по ним и явно указать нужные преобразования.


  • Содержание раздела