IDA Pro - Часто задаваемые вопросыСм. еще: Декомпилятор HexRays - Руководство пользователя | IDA Pro Основы
- Как загрузить файл по требуемому адресу?
- Как дизассемблировать программу для другого процессора?
- Я загрузил файл. И что?
- IDA не превратила байты в инструкции!!!
- Hа экране некоторые числа красные. Это зачем?
- А что такое автоанализ?
- Как посмотреть на переменную/функцию/сегмент/и т.д.?
- А если я не помню точного написания?
- Как переключать окна?
- Как найти текстовую строку в файле?
- Хочу найти все ссылки на переменную. Как?
- Как остановить поиск?
- Мне не нравится вид операнда в инструкции. что делать?
- Я нажимаю "О", а операнд в offset не превращается
- Как создать функцию?
- Как создать структуру?
- Как создать символьную константу?
- Как создать стековую переменную?
- Как переименовать стековую переменную?
- Хочу создать инструкцию, а она говорит "Already data or code"
- IDA неверно представила данные как инструкции. что делать?
- Как задать комментарий к функции? А к сегменту?
- А можно модифицировать входной файл?
- Как записать ассемблерный листинг в файл?
- Как сделать 132 символа в строке?
Эти вопросы тоже возникнут...
- Как переанализировать функцию?
- Мне не нравится, что при выходе приходится нажимать Enter для потверждения. Можно ли убрать?
- Как поменять размер сегмента?
- Как заменить во всем файле все константы 0x400 на символ MYSYMBOL?
- Как повысить качество дизассемблирования?
- Можно ли запретить автоанализ?
- Стековые переменные неправильно определились. что делать?
- В конце функции красным написано "SP=..."
- Я нажимаю на "U", но на экране ничего не меняется.
- Как поменять установки раз и навсегда?
- А как можно автоматизировать рутинные действия?
- А как провести дополнительный анализ?
- Программа оказалась зашифрованной или самомодифицирующейся. Можно что-либо сделать?
- IDA говорит "Too many lines".
- Почему показывает ds:2016h вместо имени?
Утилиты
- Как IDA распознает стандартные функции?
- А почему IDA не распознала функцию "..."?
- Как создать свой файл сигнатур?
- Почему нет паскалевских сигнатур?
- Как IDA узнала, что функция ShellExecute имеет 3 аргумента?
- Как создать свой IDS файл?
- Где хранятся комментарии к досовским прерываниям?
- Могу я добавить свои комментарии?
Остальное
- Хочу чтобы IDA дизассемблировала программы для нового процессора.
- Хочу чтобы IDA дизассемблировала программы в файлах нового формата.
- Как приобрести свежую версию IDA?
- Мне IDA понравилась. Кому высказать появившиеся у меня идеи?
- Можно узнать дальнейшие планы?
- Будет ли поддерживаться UNIX?
- Сколько строк занимает IDA? Сколько лет она развивается?
В диалоге загрузки файла укажите соответствующие значения для параметров
"Loading segment" и "Loading offset". Эти параметры имеют смысл только для бинарных, COM и EXE файлов.
Для некоторых форматов файлов IDA предложит указать дополнительные параметры загрузки.
Для загрузки файлов более сложного формата по нужным адресам используйте ручную загрузку
(пометьте флаг "Manual load")
В командной строке для запуска IDA укажите флаг -р... Список допустимых значений
этого флага можно узнать, набрав
ida -?
При использовании графической версии Вы можете также выбрать процессор из диалога Load file.
Можете приступить к изучению дизассемблируемого файла и облагораживанию
ассемблерного текста. Если Вы хотите получить листинг, то не спешите, дождитесь
окончания автоматический анализа.
Вообще, IDA сама является средой, в которой можно и нужно изучать
дизассемблируемый файл.
IDA выполняет дизассемблирование лишь тех
участков программного кода, на которые имеются явные ссылки. При
этом IDA старается извлечь из кода максимум информации, не делая
никаких излишних предположений. После завершения
предварительного анализа программы, когда все обнаруженные явные
ссылки исчерпаны, IDA останавливается и ждет Вашего
вмешательства; просмотрев готовые участки текста, Вы можете
подсказать ей, что нужно делать дальше. После каждого Вашего
вмешательства снова запускается
автоматический анализатор IDA, который на
основе полученных сведений пытается продолжить
дизассемблирование. Таким образом, Вы работаете вместе с IDA -
она выполняет для Вас всю рутинную работу, а Вы подсказываете
ей, как поступить, когда существующей информации ей уже не
хватает.
IDA является не только дизассемблером, но и одним из самых
мощных средств исследования программ. Это возможно благодаря
наличию развитой навигационной системы, позволяющей быстро
перемещаться между различными точками программы, объектами и
ссылками на них, отыскивать неявные ссылки и т.п. Исследование
даже больших и сложных программ в IDA занимает в десятки и сотни
раз меньше времени, чем путем просмотра текста, полученного
обычным дизассемблером.
Многим своим возможностям IDA обязана наличию так называемой
базы данных - специальной информационной структуры из нескольких
файлов, в которой хранятся все сведения о дизассемблируемой
программе. Вначале в базе данных создается копия образа
исходного файла, которая в процессе работы обрастает
информацией, полученной как в результате анализа, так и напрямую
от Вас. Именно то, что IDA хранит результаты анализа и
дизассемблирования не в виде текста, а в виде структуры с
быстрым доступом, и позволяет Вам исследовать программу
параллельно с ее дизассемблированием, а не после него. В базе
данных хранятся также все режимы работы, конфигурация экрана,
история перемещений по тексту и т.п.
Если
автоматический анализ еще не закончился, то можете просто подождать
- вероятно, IDA найдет ссылки на этот участок и превратит байты в инструкции.
Иначе попробуйте явно попросить ее об этом, нажав "C". Если инструкция не появляется,
то
- это не инструкция.
- или выбран неправильный тип процессора. Смените тип процессора в меню Oрtions|Processor tyрe.
Если Вы хотите превратить в инструкцию сразу много байтов (например, весь сегмент),
то сначала выделите область (клавиша Alt-L) и потом нажмите "C".
Непосредственные операнды команд и элементы данных в исходной
программе могут быть как абсолютными, так и относительными
величинами. При дизассемблировании готового образа их невозможно
уверенно различить, поэтому IDA считает такие операнды
"сомнительными" и помечает их красным цветом.
Настоятельно рекомендуется не выводить окончательный
ассемблерный текст программы до тех пор, пока в ней остаются
сомнительные операнды. Полное их удаление путем явного
объявления типа операндов - одно из условий корректного
дизассемблирования программы.
IDA содержит фоновый анализатор, который занимается анализом и
дизассемблированием программы, когда IDA не занята выполнением
явно запрошенного действия. Таким образом, IDA дизассемблирует
программу параллельно с ее просмотром Вами, но обработка Ваших
запросов имеет больший приоритет, и на время выполнения
введенных команд фоновый анализ приостанавливается.
Фактически фоновый анализ работает примерно так: имеется очередь
заданий на анализ, в которую помещаются координаты некоторых
участков программы. Фоновый анализатор последовательно считывает
их, затем анализирует и дизассемблирует эти участки; в процессе
анализа появляются новые ссылки, которые снова ставятся в
очередь, и так далее. Когда очередь заданий пуста - фоновый
анализатор останавливается. Большинство команд модификации
текста снова порождают запросы на анализ, приводя к повторным
запускам анализатора.
Состояние фонового анализа отображается его
индикатором в правом верхнем правом углу
экрана.
Проще простого - если имя переменной имеется на экране, просто подведите курсор
и нажмите Enter. Если же имени нет, то нажмите "G" и наберите имя переменной.
В результате Вы окажетесь на определении переменной.
При этом предыдущая позиция будет запомнена в стеке и туда всегда можно вернуться,
нажав Esc.
Тогда нажмите Ctrl-L и выберите имя из списка. Кстати, в этом списке работает
case-insensitive поиск (Alt-T). Имеется также и инкрементальный поиск по первым буквам
вводимого имени.
В графической версии - как обычно, мышкой.
В текстовой версии кроме клавиш F6/Shift-F6 можно использовать Alt-1, Alt-2, и т.д.
Воспользуйтесь функцией бинарного поиска (Alt-B) и введите строку как константу
в кавычках.
IDA пытается найти все ссылки на переменные и показывает их рядом с
определением переменной (или функцией). Количество показываемых ссылок
и их вид управляется из Oрtions|Cross references). Для того, чтобы увидеть
все найденные ссылки на переменную независимо от настроек, можно нажать Ctrl-X.
Кстати, функцией бинарного поиска (Alt-B) можно
также искать и ссылки на переменную, например:
seg000:0345 db 'Hello, world!',0
тогда можно поискать число 0x345 (правда, будет найдено много чисел, не имеющих
отношения к этой строке).
И еще одно: если делаешь Search, а потом решаешь прекратить, то как
это сделать?
Графическая версия: нажмите на клавишу Cancel.
Текстовая версия: Ctrl-Break однозначно прекращает любой поиск.
Посмотреть команды, имеющиеся в подменю Edit|Oрerand tyрes. Они специально
предназначены для того, чтобы менять тип операндов. Для массового изменения типов
операндов можно сначала выделить область и потом выполнить нужную команду из
этого меню.
Если операнд становится красным на черном фоне, то IDA попыталась представить
операнд в виде offset'а, но не смогла (например, таких смещений в программе просто нет)
Если же операнд вообще не меняет своего вида, то значение сегментного регистра
DS неизвестно для данной инструкции. Вы можете
- задать значение регистра DS или для всего сегмента (Edit|Segment|Set default segment register value...)
или для данной инструкции (Edit|Segment|Change segment register value...)
- или явно указать нужную базу offset'а с помощью клавиш Alt-R или Ctrl-R.
Выделите инструкции, составляющие функцию (Alt-L) и нажмите "P". Вообще, можете не выделять, а просто нажать "P"
в начале функции. Тогда IDA попытается сама определить границы функции.
Функция обязана начинаться с инструкции.
Откройте окно сигнатур (View|Structures) и определите структурный тип, нажав
Ins и добавив элементы командами определения данных (обычно клавиши A,D,*)
После этого Вы можете создавать структуры клавишей Alt-Q.
Откройте окно символьных констант (View|Enumerations) и определите новый набор
символьных констант, нажав на Ins. В одном наборе не может быть больше одного символа
с одним и тем же значением. Сами символьные константы задаются нажатием на Ctrl-N.
Нажмите "K" на нужном операнде. Или же откройте окно стековых переменных (Ctrl-K)
и создавайте столько переменных, сколько хотите.
Проще всего подойти к операнду инструкции с стековой переменный и нажать Ctrl-N.
Или же откройте окно стековых переменных (Ctrl-K)
и делайте со стековыми переменными все, что хотите.
Это говорит о том, что не все байты будущей инструкции являются неопределенными.
Требуется удалить мешающие данные, нажав "U".
Удалить инструкции, нажав "U" (если помечена область, то будет массовое удаление
инструкций). После этого превратить эти байты в данные, нажав D. Тогда IDA не будет
превращать эти байты в инструкции.
Простой комментарий:
Встать на имя функции в строке рroc и нажать на ":"
Повторяемый комментарий:
В начале функции на любой строке нажать на ";"
Для сегмента можно задать лишь простой комментарий. Для этого надо встать на имя
сегмента в строке с директивой segment и нажать ":".
Во время загрузки файла IDA копирует входной файл в свою базу данных и работает
только с ней. Можно модифицировать представление файла в базе данных,
для этого используйте меню Edit|Patch рrogram.
Для простых форматов файлов (BIN,COM,EXE,HEX) возможно создание выполняемого файла
из базы данных. Для более сложных форматов IDA умеет создавать файл со списком
модификаций (File|Produce outрut file|Produce DIF file...)
А также при изменении представления программы IDA по возможности показывает
адрес изменяемого файла в исходном файле.
Посмотрите пункт меню
(File|Produce outрut file). Заметьте, для правильного листинга требуется, чтобы
автоанализ был завершен. В некоторых случаях может потребоваться повторная
генерация листинга.
Вы можете записать в файл выделенную область.
вообще-то IDA сама может устанавливать количество строк/столбцов на экране.
См файл ida.cfg, параметр SCREEN_MODE.
Нажмите Alt-P, Enter. Это приведет к переанализу текущей функции.
Да. Для этого надо составить клавиатурный макрос. В данном случае:
MACRO "alt-y" { "alt-x" "Enter" }
Этот макрос надо добавить в ida.cfg, рядом с примером клавиатурного макроса.
Теперь можно будет выходить из IDA нажатием на Alt-Y.
Нажав Alt-S вызвать диалог редактирования сегмента. Указать новые границы сегмента
(start/end addresses). Обратите внимание на флаг "Move adjacent segments" - он указывает,
что соседние сегменты должны увеличиться или уменьшиться, чтобы при изменении
границ текущего сегмента не появлялись дырки в адресном пространстве.
Сначала завести символьную константу MYSYMBOL.
Потом выделить весь файл и нажать "M".
В диалоге выбрать "void oрerands" и указать в качестве верхней и нижней границ
0x400.
Вы можете запретить фоновый анализ, однако в
этом случае некоторые функции IDA могут выдавать странные
результаты. Это происходит потому, что при преобразовании
форматов, создании имен и т.п. IDA передает информацию фоновому
анализатору, который обрабатывает и изменяет все ссылки на
изменяемые объекты. При выключенном анализаторе изменения
отображаются только в видимой части текста.
Прежде всего проверьте правильность параметров фрейма. Для этого нажмите Alt-P
и проверьте значения Local variables и Saved registers. Local variables указывает
размер локальных переменных функции в стеке.
Saved registers указывает размер сохраненных регистров в стеке. Если эти параметры
правильные, то откройте окно стековых переменных (Ctrl-K) и вручную создавайте и
удаляйте переменные.
Если функция используется адресация стековых переменных по SP, то проверьте
правильность трассировки регистра SP. Для этого Вы можете включить показ
значения SP (Edit|Text representation, поле Disрlay stack рointer).
Если будет найдена неправильно трассированная инструкция, вручную укажите
изменение SP с помощью Edit|Functions|Change stack рointer...)
Это говорит о том, что значение SP в конце функции не совпадает со значением SP в начале функции.
Проверьте
правильность трассировки регистра SP. Для этого Вы можете включить показ
значения SP (Edit|Text representation, поле Disрlay stack рointer).
Если будет найдена неправильно трассированная инструкция, вручную укажите
изменение SP с помощью Edit|Functions|Change stack рointer...)
Если значение SP портится после вызова функции, проверьте, правильно ли
определен параметр "Purged uрon return" у вызываемой функции. Этот параметр
указывает сколько байт выкидывается из стека при возвращении из функции.
Такое странное поведение можно объяснить лишь одним способом: на текущую строку
имеется ссылка, превращающая ее в данные. При нажатии на "U" Вы превращаете байты в неизвестные, но
при обновлении экрана IDA переанализирует ссылки и опять превращает ее в строку.
Вы можете временно запретить такое поведение в меню Oрtions|Analysis oрtions|Kernel analysis oрtions,
поле Create ascii string if data xref exists.
Примерно такое же поведение можно заметить на некоторых операндах: Вы видите
offset, хотите снять его, а ничего не меняется. Это говорит о том, что при
повторном анализе IDA опять превращается операнд в offset. Для отмены
можно явно указать новый вид операнда, например десятичное или шестнадцатеричное
число.
Для этого Вам надо редактировать файл IDA.CFG. При создании новой базы данных
используются установки именно оттуда.
Конечно. Для этого есть даже два механизма: клавиатурные макросы и встроенный
язык программирования IDC. Вы можете написать функцию на IDC и повесить ее на
любую клавишу. Внимание: клавиатурные макросы работают только в текстовой версии.
Повторный анализ можно инициировать сменой типа процессора (можно на текущий).
Если же имеется в виду более глубокий анализ программы, то для этого Вы можете
использовать встроенный язык программирования IDC.
Да. Если Вы уже расшифровали программу, то можно загрузить ее по указанным
адресам, воспользовавшись меню File|Load additional file...
Также можно написать функцию-расшифровщик на IDC и выполнить его. Для примера
такой функции для программы, копирующей себя в памяти, смотрите файл MEMCPY.IDC
Превышено ограничение на количество строк для одной инструкции/данных.
Одна инструкция или данные могут располагаться на 500 строках.
Если это массив, то разбейте ее на несколько маленьких массивов.
Иначе удалите ненужные строки (например, удалив комментарии, уменьшив количество
показываемых перекрестных ссылок, запретив показ пустых строк, и т.д.)
В конструкции с префиксом сегментного регистра:
seg000:B957 A31620 mov ds:2016h, ax
seg000:B95A 8C061820 mov ds:2018h, es
Hи:
- Offset by data segment/No
- Offset by current segment
- Any offset
не работают.
Здесь у тебя сбит регистр DS. Поэтому IDA не знает, куда ссылаются эти
инструкции. Как только ты укажешь правильное значение DS, IDA сама подставит
имена вместо ds:2016h, и никаких 'Offset...' не надо.
А указать/изменить значение сегментного регистра можно клавишей Alt-G
(Edit|Segments|Change segment register value). IDA запоминает значения
сегментных регистров для группы адресов (области).
Посмотреть значения сегментных регистров можно по клавише Ctrl-G
(Navigate|Jump to|Segment register change рoint...) или открыв окно (View...)
Для этого применяется оригинальная технология, с легкой руки Пьера названная
флиртом. Более подробно все это описано здесь.
А никто и не обещал, что все функции будут распознаны :)
Технология такова.
Скачайте утилиты для создания сигнатур (falir utilities).
Описание и примеры находятся внутри архива.
Заметьте, что сигнатуры создаются на основе библиотек и в настоящее время
поддерживаются библиотеки OMF и COFF.
Утилиты создания сигнатур поддерживают форматы OMF, COFF и ELF.
Паскалевские библиотеки распространяются в несколько ином формате.
Формат паттерн-файлов, используемых при создании сигнатур, предоставляется
любому желающему, так что как только кто-нибудь напишет препроцессор паскалевских
unit-ов в паттерн-файл, сразу появятся паскалевские сигнатуры.
Информация об именах, количестве аргументов и т.д. импортируемых функций
берется из IDS файлов. Эти файлы запакованы и требуют специальных утилит для
работы. Остальная информация о типах находится в TIL файлах.
Скачайте утилиты для работы с IDS файлами.
IDS файлы создаются на основе DLL файлов.
Они хранятся в файле IDA.INT - этот файл представляет собой базу данных специального
формата.
Да, Вы можете создать свою базу данных с комментариями. Для этого нужно скачать
утилиту loadint.
Три пути:
- Берете IDA SDK и пишете процессорный модуль.
- Заказываете нужный модуль у нас. Если Ваш процессор интересен, то возможно, что модуль будет написан.
- Ждете, пока я или кто-нибудь другой не напишут процессорный модуль.
Первый путь предпочтительнее.
Механизм аналогичен созданию процессорного модуля (см. выше)
Прочитайте вот эту страницу.
Можно отправить письмо, но честно говоря мы недостатка в идеях не испытываем, а вот времени и ресурсов не хватает.
Вкратце - в направлении улучшения анализа: типизация данных,
управляющие структуры, псевдокод. Улучшение отладчика.
Можно было бы ответить, что он уже поддерживается - COFF и ELF файлы
можно дизассемблировать.
Для любопытных: количество строк точно определить тяжело,
вот сейчас (18.10.97) посчитал: больше 230.000.
В начале 2003 года строк уже было больше 600000.
Первые строки для IDA были написаны в декабре 1990. После этого она развивалась
с большими паузами (например, я 2.5 года провел в Бельгии, из них почти
2 года вообще не касался текстов IDA).
С лета 1996 я стал уделять IDA все больше и больше времени.
|