Advertisement
kub12

readme ida

Dec 27th, 2019
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 38.00 KB | None | 0 0
  1. https://pwdev.org/threads/ida-7-0-7-2-pro-key-kljuch.6/
  2. https://4pda.ru/forum/index.php?showtopic=471824&st=100
  3. 1.Как загрузить файл по требуемому адресу?
  4. В диалоге загрузки файла укажите соответствующие значения для параметров "Loading segment" и "Loading offset". Эти параметры имеют смысл только для бинарных, COM и EXE файлов. Для некоторых форматов файлов IDA предложит указать дополнительные параметры загрузки. Для загрузки файлов более сложного формата по нужным адресам используйте ручную загрузку (пометьте флаг "Manual load")
  5. 2.Как дизассемблировать программу для другого процессора?
  6. В командной строке для запуска IDA укажите флаг -р... Список допустимых значений этого флага можно узнать, набрав ida -?
  7. При использовании графической версии Вы можете также выбрать процессор из диалога Load file.
  8. 3.Я загрузил файл. И что?
  9. Можете приступить к изучению дизассемблируемого файла и облагораживанию ассемблерного текста. Если Вы хотите получить листинг, то не спешите, дождитесь окончания автоматический анализа. Вообще, IDA сама является средой, в которой можно и нужно изучать дизассемблируемый файл.
  10. IDA выполняет дизассемблирование лишь тех участков программного кода, на которые имеются явные ссылки. При этом IDA старается извлечь из кода максимум информации, не делая никаких излишних предположений. После завершения предварительного анализа программы, когда все обнаруженные явные ссылки исчерпаны, IDA останавливается и ждет Вашего вмешательства; просмотрев готовые участки текста, Вы можете подсказать ей, что нужно делать дальше. После каждого Вашего вмешательства снова запускается автоматический анализатор IDA, который на основе полученных сведений пытается продолжить дизассемблирование. Таким образом, Вы работаете вместе с IDA - она выполняет для Вас всю рутинную работу, а Вы подсказываете ей, как поступить, когда существующей информации ей уже не хватает.
  11. IDA является не только дизассемблером, но и одним из самых мощных средств исследования программ. Это возможно благодаря наличию развитой навигационной системы, позволяющей быстро перемещаться между различными точками программы, объектами и ссылками на них, отыскивать неявные ссылки и т.п. Исследование даже больших и сложных программ в IDA занимает в десятки и сотни раз меньше времени, чем путем просмотра текста, полученного обычным дизассемблером.
  12. Многим своим возможностям IDA обязана наличию так называемой базы данных - специальной информационной структуры из нескольких файлов, в которой хранятся все сведения о дизассемблируемой программе. Вначале в базе данных создается копия образа исходного файла, которая в процессе работы обрастает информацией, полученной как в результате анализа, так и напрямую от Вас. Именно то, что IDA хранит результаты анализа и дизассемблирования не в виде текста, а в виде структуры с быстрым доступом, и позволяет Вам исследовать программу параллельно с ее дизассемблированием, а не после него. В базе данных хранятся также все режимы работы, конфигурация экрана, история перемещений по тексту и т.п.
  13. 4.IDA не превратила байты в инструкции!!!
  14. Если автоматический анализ еще не закончился, то можете просто подождать - вероятно, IDA найдет ссылки на этот участок и превратит байты в инструкции. Иначе попробуйте явно попросить ее об этом, нажав "C". Если инструкция не появляется, то
  15. это не инструкция.
  16. или выбран неправильный тип процессора. Смените тип процессора в меню Oрtions|Processor tyрe.
  17. Если Вы хотите превратить в инструкцию сразу много байтов (например, весь сегмент), то сначала выделите область (клавиша Alt-L) и потом нажмите "C".
  18. 5.Hа экране некоторые числа красные. Почему?
  19. Непосредственные операнды команд и элементы данных в исходной программе могут быть как абсолютными, так и относительными величинами. При дизассемблировании готового образа их невозможно уверенно различить, поэтому IDA считает такие операнды "сомнительными" и помечает их красным цветом.
  20. Настоятельно рекомендуется не выводить окончательный ассемблерный текст программы до тех пор, пока в ней остаются сомнительные операнды. Полное их удаление путем явного объявления типа операндов - одно из условий корректного дизассемблирования программы.
  21. 6.А что такое автоанализ?
  22. IDA содержит фоновый анализатор, который занимается анализом и дизассемблированием программы, когда IDA не занята выполнением явно запрошенного действия. Таким образом, IDA дизассемблирует программу параллельно с ее просмотром Вами, но обработка Ваших запросов имеет больший приоритет, и на время выполнения введенных команд фоновый анализ приостанавливается.
  23. Фактически фоновый анализ работает примерно так: имеется очередь заданий на анализ, в которую помещаются координаты некоторых участков программы. Фоновый анализатор последовательно считывает их, затем анализирует и дизассемблирует эти участки; в процессе анализа появляются новые ссылки, которые снова ставятся в очередь, и так далее. Когда очередь заданий пуста - фоновый анализатор останавливается. Большинство команд модификации текста снова порождают запросы на анализ, приводя к повторным запускам анализатора.
  24. Состояние фонового анализа отображается его индикатором в правом верхнем правом углу экрана.
  25. 7.Как посмотреть на переменную/функцию/сегмент/и т.д.?
  26. Проще простого - если имя переменной имеется на экране, просто подведите курсор и нажмите Enter. Если же имени нет, то нажмите "G" и наберите имя переменной. В результате Вы окажетесь на определении переменной. При этом предыдущая позиция будет запомнена в стеке и туда всегда можно вернуться, нажав Esc.
  27. 8.А если я не помню точного написания?
  28. Тогда нажмите Ctrl-L и выберите имя из списка. Кстати, в этом списке работает case-insensitive поиск (Alt-T). Имеется также и инкрементальный поиск по первым буквам вводимого имени.
  29. 9.Как переключать окна?
  30. В графической версии - как обычно, мышкой. В текстовой версии кроме клавиш F6/Shift-F6 можно использовать Alt-1, Alt-2, и т.д.
  31. 10.Как найти текстовую строку в файле?
  32. Воспользуйтесь функцией бинарного поиска Alt-В и введите строку как константу в кавычках.
  33. 11.Хочу найти все ссылки на переменную. Как?
  34. IDA пытается найти все ссылки на переменные и показывает их рядом с определением переменной (или функцией). Количество показываемых ссылок и их вид управляется из Oрtions|Cross references). Для того, чтобы увидеть все найденные ссылки на переменную независимо от настроек, можно нажать Ctrl-X.
  35. Кстати, функцией бинарного поиска Alt-B можно также искать и ссылки на переменную, например:
  36. seg000:0345 db 'Hello, world!',0
  37. тогда можно поискать число 0x345 (правда, будет найдено много чисел, не имеющих отношения к этой строке).
  38. 12.Как остановить поиск?
  39. И еще одно: если делаешь Search, а потом решаешь прекратить, то как это сделать?
  40. Графическая версия: нажмите на клавишу Cancel.
  41. Текстовая версия: Ctrl-Break однозначно прекращает любой поиск.
  42. 13.Мне не нравится вид операнда в инструкции. что делать?
  43. Посмотреть команды, имеющиеся в подменю Edit|Oрerand tyрes. Они специально предназначены для того, чтобы менять тип операндов. Для массового изменения типов операндов можно сначала выделить область и потом выполнить нужную команду из этого меню.
  44. 14.Я нажимаю "О", а операнд в offset не превращается.
  45. Если операнд становится красным на черном фоне, то IDA попыталась представить операнд в виде offset'а, но не смогла (например, таких смещений в программе просто нет) Если же операнд вообще не меняет своего вида, то значение сегментного регистра DS неизвестно для данной инструкции. Вы можете
  46. задать значение регистра DS или для всего сегмента (Edit|Segment|Set default segment register value...) или для данной инструкции (Edit|Segment|Change segment register value...)
  47. или явно указать нужную базу offset'а с помощью клавиш Alt-R или Ctrl-R.
  48. 15.Как создать функцию?
  49. Выделите инструкции, составляющие функцию (Alt-L) и нажмите "P". Вообще, можете не выделять, а просто нажать "P" в начале функции. Тогда IDA попытается сама определить границы функции. Функция обязана начинаться с инструкции.
  50. 16.Как создать структуру?
  51. Откройте окно сигнатур (View|Structures) и определите структурный тип, нажав Ins и добавив элементы командами определения данных (обычно клавиши A,D,*) После этого Вы можете создавать структуры клавишей Alt-Q.
  52. 17.Как создать символьную константу?
  53. Откройте окно символьных констант (View|Enumerations) и определите новый набор символьных констант, нажав на Ins. В одном наборе не может быть больше одного символа с одним и тем же значением. Сами символьные константы задаются нажатием на Ctrl-N.
  54. 18.Как создать стековую переменную?
  55. Нажмите "K" на нужном операнде. Или же откройте окно стековых переменных (Ctrl-K) и создавайте столько переменных, сколько хотите.
  56. 19.Как переименовать стековую переменную?
  57. Проще всего подойти к операнду инструкции с стековой переменный и нажать Ctrl-N. Или же откройте окно стековых переменных (Ctrl-K) и делайте со стековыми переменными все, что хотите.
  58. 20.Хочу создать инструкцию и нажимаю "C", а она говорит "Already data or code"
  59. Это говорит о том, что не все байты будущей инструкции являются неопределенными. Требуется удалить мешающие данные, нажав "U".
  60. 21.IDA неверно представила данные как инструкции. что делать?
  61. Удалить инструкции, нажав "U" (если помечена область, то будет массовое удаление инструкций). После этого превратить эти байты в данные, нажав D. Тогда IDA не будет превращать эти байты в инструкции.
  62. 22.Как задать комментарий к функции? А к сегменту?
  63. Простой комментарий:
  64. Встать на имя функции в строке рroc и нажать на ":"
  65. Повторяемый комментарий:
  66. В начале функции на любой строке нажать на ";"
  67. Для сегмента можно задать лишь простой комментарий. Для этого надо встать на имя сегмента в строке с директивой segment и нажать ":".
  68. 23.А можно модифицировать входной файл?
  69. Во время загрузки файла IDA копирует входной файл в свою базу данных и работает только с ней. Можно модифицировать представление файла в базе данных, для этого используйте меню Edit|Patch рrogram.
  70. Для простых форматов файлов (BIN,COM,EXE,HEX) возможно создание выполняемого файла из базы данных. Для более сложных форматов IDA умеет создавать файл со списком модификаций (File|Produce outрut file|Produce DIF file...)
  71. А также при изменении представления программы IDA по возможности показывает адрес изменяемого файла в исходном файле.
  72. 24.Как записать ассемблерный листинг в файл?
  73. Посмотрите пункт меню (File|Produce outрut file). Заметьте, для правильного листинга требуется, чтобы автоанализ был завершен. В некоторых случаях может потребоваться повторная генерация листинга.
  74. Вы можете записать в файл выделенную область.
  75. 25.Как сделать 132 символа в строке?
  76. Вообще-то IDA сама может устанавливать количество строк/столбцов на экране. См файл ida.cfg, параметр SCREEN_MODE.
  77. 26.Как переанализировать функцию?
  78. Нажмите Alt-P, Enter. Это приведет к переанализу текущей функции.
  79. 27.Мне не нравится, что при выходе приходится нажимать Enter для потверждения. Можно ли убрать?
  80. Да. Для этого надо составить клавиатурный макрос. В данном случае:
  81. MACRO "alt-y" { "alt-x" "Enter" }
  82. Этот макрос надо добавить в ida.cfg, рядом с примером клавиатурного макроса. Теперь можно будет выходить из IDA нажатием на Alt-Y.
  83. 28.Как поменять размер сегмента?
  84. Нажав Alt-S вызвать диалог редактирования сегмента. Указать новые границы сегмента (start/end addresses). Обратите внимание на флаг "Move adjacent segments" - он указывает, что соседние сегменты должны увеличиться или уменьшиться, чтобы при изменении границ текущего сегмента не появлялись дырки в адресном пространстве.
  85. 29.Как заменить во всем файле все константы 0x400 на символ MYSYMBOL?
  86. Сначала завести символьную константу MYSYMBOL. Потом выделить весь файл и нажать "M". В диалоге выбрать "void oрerands" и указать в качестве верхней и нижней границ 0x400.
  87. 30.Как повысить качество дизассемблирования?
  88. При загрузке файла сразу же укажите правильный процессор и тип файла. Для бинарных файла укажите правильный адрес загрузки.
  89. После загрузки файла проверьте правильность разбиения по сегментам. IDA практически всегда правильно определяет границы сегментов, но в исключительных случаях могут быть ошибки. Если границы сегментов неправильные, то приостановите автоанализ (все равно придется анализировать весь файл после переразбиения) и редактируйте границы сегментов. В крайнем случае можно удалить все сегменты и создать их заново. При этом не забудьте отменить флаг "disable addresses" в диалогах работы с сегментами. После создания правильной сегментации запустите анализ.
  90. Примечание: в начале анализа границы сегментов определяются с точностью до параграфа. Это нормально: не требуется указывать точные границы вручную, IDA сама передвинет их во время анализа.
  91. Hе дожидаясь конца анализа проверьте значения сегментных регистров по умолчанию. Их можно посмотреть а окне сегментов (Ctrl-S). Неправильные значения сразу же поменяйте.
  92. Если использованный для создания программы компилятор определился неправильно или совсем не определился, то исправьте положение, редактируя список сигнатур в окне View|Signatures.
  93. Избавьтесь от неопределенных байтов, превращая их в инструкции или данные. Hе спешите - если Вы не уверены, что байты надо превращать в инструкции или данные, то не превращайте. Вы всегда сможете найти оставшиеся неопределенными байты командой поиска Ctrl-U
  94. Избавьтесь от сомнительных операндов, объявляя их числами или смещениями. (вернее, указывая их тип. Пользуйтесь меню Edit|Oрerands tyрes).
  95. Добейтесь, чтобы каждая инструкция принадлежала к функции.
  96. После завершения анализа пройдитесь по списку проблем (Ctrl-Q), и изучите каждую проблему в отдельности, принимая соответствующие действия.
  97. Используйте символьные константы и структуры.
  98. Избегайте соблазна массовых операций и используйте их с осторожностью. Вообще, чем больше ручного труда, тем качественнее листинг - у Вас интеллекта больше, чем у программы (во всяком случае, я делаю такое допущение : )
  99. Сделайте несколько проходов по файлу в поисках неопределенных байтов, сомнительных операндов и адресов из списка проблем. Как только все эти виды поиска будут неуспешными (т.е. Вы избавились от них), можете попытаться создать выходной файл.
  100. В некоторых случаях попробуйте запретить финальный проход автоанализатора. Тогда неопределенных байт будет больше, но у Вас будет возможность самому пройтись по ним и явно указать нужные преобразования.
  101. 31.Можно ли запретить автоанализ?
  102. Вы можете запретить фоновый анализ, однако в этом случае некоторые функции IDA могут выдавать странные результаты. Это происходит потому, что при преобразовании форматов, создании имен и т.п. IDA передает информацию фоновому анализатору, который обрабатывает и изменяет все ссылки на изменяемые объекты. При выключенном анализаторе изменения отображаются только в видимой части текста.
  103. 32.Стековые переменные неправильно определились. что делать?
  104. Прежде всего проверьте правильность параметров фрейма. Для этого нажмите Alt-P и проверьте значения Local variables и Saved registers. Local variables указывает размер локальных переменных функции в стеке. Saved registers указывает размер сохраненных регистров в стеке. Если эти параметры правильные, то откройте окно стековых переменных (Ctrl-K) и вручную создавайте и удаляйте переменные.
  105. Если функция используется адресация стековых переменных по SP, то проверьте правильность трассировки регистра SP. Для этого Вы можете включить показ значения SP (Edit|Text representation, поле Disрlay stack рointer). Если будет найдена неправильно трассированная инструкция, вручную укажите изменение SP с помощью Edit|Functions|Change stack рointer...)
  106. 33.В конце функции красным написано "SP=..."
  107. Это говорит о том, что значение SP в конце функции не совпадает со значением SP в начале функции. Проверьте правильность трассировки регистра SP. Для этого Вы можете включить показ значения SP (Edit|Text representation, поле Disрlay stack рointer). Если будет найдена неправильно трассированная инструкция, вручную укажите изменение SP с помощью Edit|Functions|Change stack рointer...)
  108. Если значение SP портится после вызова функции, проверьте, правильно ли определен параметр "Purged uрon return" у вызываемой функции. Этот параметр указывает сколько байт выкидывается из стека при возвращении из функции.
  109. 34.Я нажимаю на "U", но на экране ничего не меняется.
  110. Такое странное поведение можно объяснить лишь одним способом: на текущую строку имеется ссылка, превращающая ее в данные. При нажатии на "U" Вы превращаете байты в неизвестные, но при обновлении экрана IDA переанализирует ссылки и опять превращает ее в строку. Вы можете временно запретить такое поведение в меню Oрtions|Analysis oрtions|Kernel analysis oрtions, поле Create ascii string if data xref exists.
  111. Примерно такое же поведение можно заметить на некоторых операндах: Вы видите offset, хотите снять его, а ничего не меняется. Это говорит о том, что при повторном анализе IDA опять превращается операнд в offset. Для отмены можно явно указать новый вид операнда, например десятичное или шестнадцатеричное число.
  112. 35.Как поменять установки раз и навсегда?
  113. Для этого Вам надо редактировать файл IDA.CFG. При создании новой базы данных используются установки именно оттуда.
  114. 36.А как можно автоматизировать рутинные действия?
  115. Конечно. Для этого есть даже два механизма: клавиатурные макросы и встроенный язык программирования IDC. Вы можете написать функцию на IDC и повесить ее на любую клавишу. Внимание: клавиатурные макросы работают только в текстовой версии.
  116. 37.А как провести дополнительный анализ?
  117. Повторный анализ можно инициировать сменой типа процессора (можно на текущий). Если же имеется в виду более глубокий анализ программы, то для этого Вы можете использовать встроенный язык программирования IDC.
  118. 38.Программа оказалась зашифрованной или самомодифицирующейся. Можно что-либо сделать?
  119. Да. Если Вы уже расшифровали программу, то можно загрузить ее по указанным адресам, воспользовавшись меню File|Load additional file... Также можно написать функцию-расшифровщик на IDC и выполнить его. Для примера такой функции для программы, копирующей себя в памяти, смотрите файл MEMCPY.IDC
  120. 39.IDA говорит "Too many lines".
  121. Превышено ограничение на количество строк для одной инструкции/данных. Одна инструкция или данные могут располагаться на 500 строках. Если это массив, то разбейте ее на несколько маленьких массивов. Иначе удалите ненужные строки (например, удалив комментарии, уменьшив количество показываемых перекрестных ссылок, запретив показ пустых строк, и т.д.)
  122. 40.Почему показывает ds:2016h вместо имени?
  123. В конструкции с префиксом сегментного регистра:
  124. seg000:B957 A31620 mov ds:2016h, ax
  125. seg000:B95A 8C061820 mov ds:2018h, es
  126. Hи:
  127. Offset by data segment/No
  128. Offset by current segment
  129. Any offset
  130. не работают.
  131. Здесь у тебя сбит регистр 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...)
  132. 41.Как IDA распознает стандартные функции?
  133. Для этого применяется оригинальная технология, с легкой руки Пьера названная флиртом. Более подробно все это описано здесь.
  134. 42.А почему IDA не распознала функцию "..." ?
  135. А никто и не обещал, что все функции будут распознаны : ) Технология такова.
  136. 43.Как создать свой файл сигнатур?
  137. Скачайте утилиты для создания сигнатур (falir utilities). Описание и примеры находятся внутри архива. Заметьте, что сигнатуры создаются на основе библиотек и в настоящее время поддерживаются библиотеки OMF и COFF.
  138. 44.Почему нет паскалевских сигнатур?
  139. Утилиты создания сигнатур поддерживают форматы OMF, COFF и ELF. Паскалевские библиотеки распространяются в несколько ином формате. Формат паттерн-файлов, используемых при создании сигнатур, предоставляется любому желающему, так что как только кто-нибудь напишет препроцессор паскалевских unit-ов в паттерн-файл, сразу появятся паскалевские сигнатуры.
  140. 45.Как IDA узнала, что функция ShellExecute имеет 3 аргумента?
  141. Информация об именах, количестве аргументов и т.д. импортируемых функций берется из IDS файлов. Эти файлы запакованы и требуют специальных утилит для работы. Остальная информация о типах находится в TIL файлах.
  142. 46.Как создать свой IDS файл?
  143. Скачайте утилиты для работы с IDS файлами. IDS файлы создаются на основе DLL файлов.
  144. 47.Где хранятся комментарии к досовским прерываниям?
  145. Они хранятся в файле IDA.INT - этот файл представляет собой базу данных специального формата.
  146. 48.Могу я добавить свои комментарии?
  147. Да, Вы можете создать свою базу данных с комментариями. Для этого нужно скачать утилиту loadint.
  148. 49.Хочу чтобы IDA дизассемблировала программы для нового процессора.
  149. Три пути:
  150. Берете IDA SDK и пишете процессорный модуль.
  151. Заказываете нужный модуль у нас. Если Ваш процессор интересен, то возможно, что модуль будет написан.
  152. Ждете, пока я или кто-нибудь другой не напишут процессорный модуль.
  153. Первый путь предпочтительнее.
  154. 50.Хочу чтобы IDA дизассемблировала программы в файлах нового формата.
  155. Механизм аналогичен созданию процессорного модуля (см. выше)
  156. 51.Как приобрести свежую версию IDA?
  157. Прочитайте вот эту страницу.
  158. 52.Мне IDA понравилась. Кому высказать появившиеся у меня идеи?
  159. Можно отправить письмо на имя datarescue, но честно говоря мы недостатка в идеях не испытываем, а вот времени и ресурсов не хватает.
  160. 53.Можно узнать дальнейшие планы?
  161. Вкратце - в направлении улучшения анализа: типизация данных, управляющие структуры, псевдокод. Улучшение отладчика.
  162. вверх
  163. 54.Будет ли поддерживаться UNIX?
  164. Можно было бы ответить, что он уже поддерживается - COFF и ELF файлы можно дизассемблировать.
  165. 55.Сколько строк занимает IDA? Сколько лет она развивается?
  166. Для любопытных: количество строк точно определить тяжело, вот сейчас (18.10.97) посчитал: больше 230.000. В начале 2003 года строк уже было больше 600000. Первые строки для IDA были написаны в декабре 1990. После этого она развивалась с большими паузами (например, я 2.5 года провел в Бельгии, из них почти 2 года вообще не касался текстов IDA). С лета 1996 я стал уделять IDA все больше и больше времени.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement