Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
защита ин-фы.docx
Скачиваний:
8
Добавлен:
10.02.2016
Размер:
64.68 Кб
Скачать

Лабораторна робота № 6 основні принципи роботи і функції інтерактивного дизасемблера

Мета роботи –вивчення основних функцій і операторів інтерактивного дизасемблера типуIDA.

Контрольнi запитання

1.Призначення і функції програм дизасемблерування програмних реалізацій?

2.Параметри і характеристики інтерактивних дизасемблерів?

3.Які існують проблеми при використанні алгоритмів дизасемблерування?

4.Основні етапи роботи по вивченню програмних реслізацій?

Методика виконання роботи

1.Провести завантаження інтерактивного дизасемблера типу IDA.

2.Провести встановлення параметрів роботи у вікні завантаження за завданням викладача.

3.Провести вивчення дії основних команд таких пунктів меню як Файл (File), Редагування (Edit), Перехід (Jump), Пошук (Search), Вид (View) за завданням викладача.

4.Провести вивчення можливостей перетворення кодів за допомогою команди Калькулятор (Calculator) за завданням викладача.

Додаток 6.1

Вивчення інтерфейсу користувача у дизасемблері IDA

На сьогоднішній день не існує жодного повністю автоматичного дизасемблера, здатного генерувати бездоганно працездатний лістинг, і доводити отриманий результат до готовності доводиться людині. Таким чином, встає питання про механізми взаємодії людину з дизасемблером. По типу реалізації інтерфейсу взаємодії з користувачем, дизасемблери, що існують, можна розділити на дві категорії - автономні та інтерактивні.

Інтерактивні дизасемблери мають розвинений користувалницький інтерфейс, завдяки якому здобувають значну гнучкість, дозволяючи людині "вручну" управляти розбором програми, допомагаючи автоматичному аналізатору там, де йому самому не впоратися - відрізняти адреси від констант, визначати границі інструкцій і т.д. На теперешній час ІDA є самим потужним і найрозвиненішим інтерактивним дизасемблером. В IDA є можливість дешифpовки пpогpами за допомогою вбудованого язика та послідуючого дизасемблювання pозшифpованих фpагментів. Більш того, модифікувавши «паpу байт», можно на тому ж вбудованому язику обpатно зашифрувати файл.

IDA відрізняється від інших дизасемблерів тим, що він здатний пізнавати імена не тільки API-функцій, але й функцій з MFC (Microsoft Foundation Class - використовується програмами, написаними на Visual C++) і OWL (Object Windows Library - використовується програмами, написаними на Borland C++), а також стандартних функцій мови Си (таких як fread(), strlen() і т.д.), включених в код програми.

Основне завдання програми ІDA - перетворення бінарного коду виконуємої програми в текст на асемблері . Вона доповнена багатьма унікальними можливостями: розпізнавання стандартних бібліотечних функцій (технологія FLІRT), інтерактивність роботи, розвинена система навігації, система типів і параметрів функцій, вбудована мова програмування ІDC, відкрита й модульна архітектура, можливість роботи практично з усіма популярними процесорами й форматами файлів, робота зі структурами даних високого рівня: масивами, структурами, типами, що перелічуються, вбудований отладчик для Wіn32. Типовими прикладами завдань, розв'язувані за допомогою дизассемблера є: пошук вірусів, троянських та інших шкідливих програм, вивчення отриманого коду, пошук дір у захисті програмного забезпечення, а також пошук і аналіз захисту інформації в системі та аналіз алгоритмів її роботи.

Дизасемблювання будь-якого файлу починається з його загpузки. Не дивлячись на те, що в більшості випадків вона пpоходить повністю автоматично, дякуючи вмінню IDA гpамотно розпізнавати й коpектно працювати із більшістю файлових фоpматів, на пpактиці у користувача є випадки, коли файл необхідно завантажити вpучну. Це, в пеpшу чергу, відноситься до дамп pізних областей пам'яті, диска, виконуваного коду. Автоматичний загpузчик IDA не може знати, за якою адpесою в пам'яті повинен розміщатися даний дамп, тому потрібно зробити це самостійно. Задати базовий зсув можна з діалогового вікна, що спливає пpи завантежені. Але якщо спробувати це зробити, то IDA повідомить: "Can't use these switches with the old file" що означає, що використання існуючої бази з таким ключем неможливо. Тому попередню базу пpийдется видалити. Це легко зробити вpучну, але в пакетному pежимі значно зручніше використати спеціальний ключ -c, який автоматично видаляє існуючі бази без запpосів і зупинок. Потрібно звернути увагу, що відсутність підтвердження може дуже доpого коштувати, тому що вся pабота буде необоротно знищена! Якщо база не містить ніякої корисної інфоpмаццї, то безболісно pозставшись із нею можна внести нові значення в діалогове вікно загpузки.

При завантаженні діалогового вікна обираємо завантаження файлу як файлу, що виконується – MS-DOS executable, та обираємо тип процесору.

'Loading segment' - це базовий адpес сегмента. Оpганізація пам'яті в IDA нагадує віpтуальну пам'ять 386+ - кожний сегмент має базовий адpес, який на початковому етапі освоєння IDA можна ніяк не ураховувати, але він пізніше пpигодиться для pоботи зі скриптами. Крім цього в будь-який момент можна дозавантажити будь-який файл за довільною адpесою, що дуже зручно, напpиклад, пpи "склеюванні" дампов, знятих з pізных фpагментів файлу.

'Loading offset' задає початковий зсув для першого елементу файлу, який завантажується. (Еквівалентно диpективі ORG у мові макpоасемблеpа) За замовчуванням IDA створює сегменти. Необхідно відмитити, що ядро IDA улаштовано так, що воно може працювати тільки з сегментами. Якщо їх заборонити, то дизасемблювання стане неможливим, але це не перешкодить pаботі з завантаженим обpазом файлу за допомогою командної мови. Звичайно цей pежим застосовується для pаботи з повністю кpиптованими файлами або файлами даних. Аналогічну функцію виконує ключ -x командної стpоки. Тепеp IDA буде відпрацьовувати завантаження та аналіз файлу.

У меню Kernel options 1, Kernel options 2 та Processor options обираємо потрібні опції.

Після запуску дизасемблера (в директорії IDA запускається файл Idag.exe) з’являється вікно сесії DOS. IDA - 32-разрядна програма, воно є консольним (працює у вікні сесії DOS). Тому інтерфейс IDA нагадує інтерфейс звичайної DOS-програмы. При першому завантаженні IDA спочатку з’являється діалогове вікно, в якому описується версія дизасеблера та його виробники. Натискаємо кнопку «ОК». В наступному діалоговому вікні вибираємо «New» з вікна «Select file to disasseble», обираємо файл для дизасемблювання та натискаємо «ОК». Далі IDA буде аналізувати завантаження файлу, та з’явиться безпосередньо вікно дизасеблера.

IDA підтримує безліч різних процесорних платформ, але сама не може їх автоматично визначити. Обраний за замовчуванням процесор можна встановити через команду консолі SetPrcsr (char processor) або за допомогою кнопи Change processor. В одній і тій же лінійці процесор може бути переобраний у будь-який момент аналізу, що саме по собі дуже приємно, але обирати інше сімейство процесорів після завантаження вже буде неможливо. Тому його необхыдно задати в командному рядку. Для цього існує ключ -p####, де #### символьний код процесора.

Після завантаження ІDA в верхній частині вікна, під рядком заголовку знаходиться меню користувача. Інтерфейс користувача містить основне меню, що містить наступні підменю:

  1. File

1.1 Load file – завантажити файл. Містить у собі наступні пункти меню:

1.1.1 Reload input file – ця команда по кожному вхідному файлу створює базу даних. ІDA зберігає інформацію в базі даних у максимально можливій мірі й далі працює з базою даних файлу. Усі назви, коментарі, інформація будуть збережені. Єдине, що змінюється, це значення індивідуальних байтів. Ця команда працює тільки для деяких типів вхідних файлів. Якщо файл був завантажений у базу даних зі спеціальними параметрами настроювання, ця команда може не виконатися. У цьому випадку використовують команду Dump database to ІDC fіle і перезавантажують файл вручну.

1.1.2 Additional binary file… - ця команда завантажує двійковий файл. Новий файл вноситься в поточну базу даних і вся інформація зберігається. Зміст файлу представиться як нові байти в програмі. Ця команда дозволяє завантажувати тільки двійкові файли.

1.1.3 IDC file – дозволяє вибрати й запустити ІDC (Іnternet Database Connector) файл. ІDC - файл по суті є запитом до бази даних.

1.1.4 DBG file – ця команда завантажує DBG файл (Debug іnformatіon fіle). Якщо дизасембльована програма має DBG файл, то ця команда може бути використана для завантаження інформації DBG файлу. ІDA завантажує файл автоматично, якщо може знайти DBG файл у директорії із вхідними файлами.

1.1.5 FLIRT signature file – ця команда дозволяє застосувати до програми додатковий файл сигнатур. Цей файл містить зразки стандартних функцій під час виконання. З їхньою допомогою ІDA здатна розпізнати стандартні функції й відповідно їх назвати. ІDA намагається автоматично виявити необхідні файли сигнатур. На жаль, це не завжди можливо. Дана команда поміщає зазначений файл сигнатур у чергу запланованих файлів сигнатур.

Існує інший спосіб завантаження / видалення файлів сигнатур:

- відкрити вікно сигнатур;

- нажати Іns, щоб вставити файл сигнатур у чергу;

- нажати Del, щоб вилучити файл сигнатур із черги.

Цей спосіб застосування сигнатур більш кращий, тому що корисна інформація, така як кількість ідентифікованих функцій, відображається у вікні сигнатур.

1.2 IDC file -- при виборі даної команди відкривається вікно для вибору імені файлу *.іdc, який потрібно виконати.

1.3 IDC command - виконати ІDC команду. Можна також виконати підпрограму, написану вбудованою мовою ІDC.

1.4 Produce output file – це підміню дозволяє створювати різні вихідні файли, а також вивантажувати базу даних.

1.4.1 Create MAP file – створення файлу карти. ІDA напише наступну інформацію до цього файлу: поточну сегментацію й список імен, відсортованих за значенням.

1.4.2 Create ASM file – IDA створить текстовий файл на асемблері для аналізованого файлу на основі бази даних по цьому файлу. Якщо виділити область на екрані , ІDA створить файл тільки для виділеної області. Якщо під час написання до цього файлу відбудеться якась помилка введення \ виводу (наприклад, диск заповнений), ІDA зупиниться й буде створений частковий файл.

1.4.3 Create LST file – потрібно вибрати назву файлу на асемблері *.lst. ІDA створить текстовий файл на асемблері для аналізованого файлу на основі бази даних по цьому файлу. Якщо вибрати область на екрані , використовуючи команду Drop Anchor, ІDA створить файл тільки для виділеної області (від поточної адреси до точки останова). Якщо виникне якась помилка введення \виводу під час написання до цього файлу (наприклад, диск заповнений), ІDA зупиниться й буде створений частковий файл.

1.4.4 Create EXE file необхідно вибрати назву файлу для нового файлу, що виконується, *.exe, на основі отриманого лістінга. Звичайно цю команду використовують після внесення виправлень, щоб одержати виправлену версію файлу. ІDA створює файли, що виконуються, тільки для наступних типів аналізованих файлів:

- MS DOS .exe

- MS DOS .com

- MS DOS .drv

- MS DOS .sys

- бінарні

- Intel Hex Object Format

- MOS Technology Hex Object Format

Для інших форматів файлу створюється *.dif файл.

1.4.5 Create DIF file – ця команда запропонує вам створити файл, потім створить простий текст *.dіf файлу наступного формату:

comment

filename

offset: oldval newval

1.4.6 Dump database to IDC file – дана команда зберігає поточну базу даних у текстовий файл. Її можна використовувати як безпечну команду, щоб захистити виконувану роботу від помилок або перевести інформацію в нові формати бази даних ІDA. Ця команда використовується, коли необхідно використовувати нову версію ІDA. Звичайно кожна нова версія ІDA має свій власний формат бази даних. Щоб створити новий формат бази даних, необхідно:

1. виконати команду «Dump…» для старої бази даних (використовуючи стару версію IDA). Буде створений файл IDC, який містить усю інформацію про стару базу даних;

  1. загрузити базу даних, використовуючи нову версію IDA;

  2. відкомпілювати й виконати IDC файл за допомогою команди 'Execute IDC file' (звичайно клавишою F2)

Ця команда не зберігає інформацію в текстовому файлі. Інформація про локальні змінні буде загублена.

1.4.7 Dump typeinfo to IDC file – ця команда зберігає інформацію про визначені користувачем типи баз даних у текстовому файлі . Інформація про списки, типи структури й інші визначені користувачем типи зберігається у формі тексту як програма IDC.

Можна використовувати цю команду, щоб перевести тип DІF з однієї бази даних в іншу.

1.5. Save - зберігти файл в упакованій формі

1.6. Save as... - зберігти файл в упакованій формі під іншим ім’ям

1.7. Close – закрити файл

1.8.Quit – вихід із середовища IDA.

2. Edit – підміню, команди якого дозволяють змінювати вид тексту й виправляти файл. Крім того, є команди для керування процесом аналізу програми. Тут перебувають наступні команди:

2.1 Code - перетворює поточні невикористані байти в операцію. Якщо це неможливо, ІDA видасть попередження. Якщо обрана область , використовуючи точку останова (anchor), усі байти в цій області будуть перетворені в код.

2.2 Data - перетворює поточні невикористані байти в дані. Якщо це неможливо, ІDA видасть попередження.

2.3 ASCII - перетворює поточні невикористані байти в рядок. Набір дозволених символів зазначений у файлі конфігурації. Символ 0 не використовується . Якщо була обрана точкаостанова, то ІDA вибирає для рядка всі символи між поточним положенням курсору й точкою останова. Ця команда також генерує назву рядка. У файлі конфігурації можна подивитися всі символи, які можна використовувати в назві рядка. Можна змінити довжину ASCII строки, використовуючи команду Array.

2.4 Array – ця команда дозволяє створювати множини й змінювати їхні розміри. Необхідно ввести розмір множини в поточний масив елементів. Заданий розмір множини є максимальним розміром.

2.5 Undefine – за допомогою цієї команди вилучається поточна операція або дані, шляхом перетворення їх у невикористані байти - знімається визначення. ІDA вилучить усі наступні операції (функції не вилучаються ). Якщо використовується область за допомогою точки останова, то перетворяться в невикористані байти всі байти в цій області . У цьому випадку ІDA не буде видаляти ніякі інші операції.

2.6 Rename – команда перейменовує назву поточного завдання. Якщо на поточне завдання існує посилання , то змінити ім'я не можна.

2.7 Operand types – це підміню дозволяє перетворити типи операндів в інші об'єкти - число, символ і т.д. Якщо ІDA сумнівається в тому, що операнд може бути представлений інакше, ніж просте число, то вона відзначить операнд як "вільний" і позначить червоним. Деякі з цих команд можуть бути застосовані до виділених областей.

2.7.1 Number – це підменю містить у собі наступні команди:

2.7.1.1 Convert operand to number – команда перетворює безпосередньо тип операнда (-ів) поточної операції/даних у число. За замовчуванням число представлене підстановою системи числення для поточного процесора (звичайно шістнадцятирічне). Використовуючи цю команду, ІDA видаляє введений операнд. Якщо курсор перебуває на першому операнді (курсор перед ','), тоді перший операнд буде зачеплений, інакше будуть зачеплені інші операнди. Якщо обирається область за допомогою точки останова, то всі вільні операнди будуть перетворені в число. Інші операнди не будуть зачеплені .

2.7.1.2 Convert operand to hex number - команда перетворює безпосередньо тип операнда

(-ів) поточної операції/даних у шістнадцятирічне число.

2.7.1.3 Convert operand to decimal number - команда перетворює безпосередньо тип операнда (-ів) поточної операції/даних у десяткове число.

2.7.1.4 Convert operand to binary number - команда перетворює безпосередньо тип операнда (-ів) поточної операції/даних у двійкове число.

2.7.1.5 Convert operand to octal number - команда перетворює безпосередньо тип операнда

(-ів) поточної операції/даних у восьмирічне число.

2.7.2 Convert operand to character - команда перетворює безпосередньо тип операнда (-ов) поточної операції/даних у символ.

2.7.3 Convert operand to segment - команда перетворює безпосередньо тип операнда (-ів) поточної операції/даних у сегмент, який звичайно показують у такий спосіб: mov ax, seg dseg. Якщо ІDA не може знайти сегмент із безпосереднім значенням операнда, вона просто виводить його як шістнадцятирічне число.

2.7.4 Offset

2.7.4.1 offset (data segment) – ця команда перетворює безпосередній операнд поточної операції/даних у зсув від поточного сегмента даних (DS). Якщо значення поточного DS невідомо (або дорівнює 0xffff), то ІDA попередить вас - подасть звуковий сигнал. У цьому випадку потрібно визначити значення регістру DS для поточного байта. Якщо метою є вилучення зсуву (offset) визначення, то можна знову використовувати цю команду, -- вона працює як перемикач. Якщо буде обрана область за допомогою точки останова, ІDA виконає 'спільне' перетворення. Вона перетворить безпосередні операнди всіх операцій в обраній області до зсувів (offsets). Однак, спочатку ІDA запитає вас про нижню та верхню границі безпосереднього значення операнда. Якщо значення операнда більш чи дорівнює нижньої границі та менш чи дорівнює верхньої границя, то операнд буде перетворений до зсуву, інакше вона залишить його без змін.

2.7.4.2 offset (code segment) - ця команда перетворює безпосередній операнд поточної операції/даних до зсуву від поточного сегмента (CS). Якщо буде обрана область за допомогою точки останова, ІDA виконає 'спільне' перетворення. Вона перетворить безпосередні операнди всіх операцій в обраній області до зсувів. Але спочатку ІDA запитає вас про нижню та верхню границі безпосереднього значення операнда. Якщо значення операнда більш чи дорівнює нижньої границі та менш чи дорівнює верхньої границі, то операнд буде перетворений до зсуву , інакше вона залишить його без змін. Якщо команда застосовується до члена структури у вікні структури, то ІDA створить 'автоматичний зсув '. Автоматичний зсув - це зсув з підстановою, яка рівна 0xffffffff. Це означає, що фактичне значення підстанови буде обчислено дизасемблером, коли структура створена.

2.7.4.3 offset (any segment) - ця команда перетворює безпосередній операнд поточної операції/даних до зсуву від будь-якого сегмента. ІDA попросить вибрати основний сегмент для зсуву. Якщо буде обрана область за допомогою точки останова, ІDA виконає 'спільне' перетворення.

2.7.4.4 offset (user-defined base) - ця команда перетворює безпосередній операнд поточної операції/даних до складного вираження зсуву.

2.7.4.5 struct offset - ця команда перетворює безпосередній тип операнда (-ів) поточної операції/даних до зсуву в межах зазначеної структури. Перед використанням даної команди необхідно визначити тип структури.

2.7.5 enum member - ця команда перетворює безпосередній тип операнда (-ів) поточної операції/даних до члена перерахування. Перед використанням цієї команди потрібно визначити тип перерахування. При використанні цієї команди, ІDA видаляє введений операнд.

2.7.6 Stack variable - ця команда перетворює безпосередній тип операнда (-ів) поточної операції/даних до зсуву змінної стека, тобто до локальної змінної або аргументу функції в стеці. Перед використанням даної команди необхідно визначити стек змінних. Якщо поточний операнд заснований на значенні покажчика стека ([ESP+xxx]) і значення його досліджене неправильно, то потрібно виправити значення SP, використовуючи команду зміни покажчика стека.

2.7.7 Change sign – ця команда змінює знак поточного операнда. Однак не всі операнди допускають зміну свого знака.

2.7.8 Bitwise negate – команда побітово інвертує поточний операнд. Не всі операнди можуть бути інвертовані. Неможливо змінити або інвертувати знак операнда. Ця команда працює, тільки якщо поточний асемблер підтримує операцію інвертування.

2.7.9 Manual – дозволяє задати будь-який рядок замість операнда, якщо ІDA не представляє операнд у бажаній формі. У цьому випадку ІDA просто покаже зазначений рядок в операції замість операнда. Буде порушений поточний операнд (біля курсору). Дану команду можна використовувати не тільки з операціями, але й з директивами даних. Для видалення перетвореного операнда вручну потрібно визначити порожній рядок. Якщо вікно "Check operand" відкрите, то ІDA буде намагатися перевірити операнд, і якщо значення manual operand буде відрізнятися від його оригінального значення, то вона видасть попередження. Ця особливість працює тільки для певних процесорів, а саме: ІBM PC, Іntel 8051, DEC PDP-11. ІDA автоматично видаляє введені вручну операнди при зміненні уявлення операнда, використовуючи підменю типів операндів.

2.8 Comments – це підменю дозволяє робити маніпуляції з різними видами коментарів. Коментарі дозволяють зробити дизасембльований текст більш зрозумілим. В це підменю входять такі команди:

2.8.1 Create a regular comment – при знаходженні в початку функції, та при цьому курсор знаходиться на імені функції (сегмента), IDA попросить ввести коментар для функції (сегмента). Якщо ця команда з’явилась у вікні структур , це дозволить змінити коментар для структури або члена структури. Якщо курсор знаходиться на імені структури, то воно буде змінено, в іншому випадку зміниться ім’я члена структури. Ця команда дозволяє вводити коментарі для поточної частини. Можна зробити видимими\невидимими всі коментарі за допомогою команди Text Representation Dialog.

2.8.2 Create a repeatable comments – команда дозволяє вводити повторювані коментарі. Повторюваний коментар буде прикладений до поточної частини й усім іншим частинам, які посилаються на цю частину. Не можна вводити повторювані коментарі для сегментів. Усі частини, які звертаються до поточної частини, будуть мати коментар за замовчуванням.

Якщо визначено обоє типи коментаря (регулярний і повторюваний), то регулярний коментар буде показаний для поточної частини й повторюваний коментар буде показаний для всіх частин, які посилаються на поточну частину, якщо вони не мають своїх власних коментарів. Повторювані коментарі можуть використовуватися, щоб описати підпрограми, частини даних і т.д., тому що всі звертання до підпрограми будуть мати повторювані коментарі.

2.8.3 Create additional comment lines – дозволяє ввести багаторядкові коментарі або додаткові операції. Існує 2 виду додаткових рядків: ті, які генеруються перед рядком операції, й ті, які генеруються після рядка операції. Максимальне число рядків для частини - 500. ІDA не вставляє символ коментаря на початку рядків.

2.8.4 Insert a predefined comment - дозволяє виправляти визначений коментар для поточної операції. Звичайно визначений коментар описує те, що робить операція. Наприклад, "xor" буде мати коментар типу: ", щовиключає або". Для вставки визначеного коментаря для поточної операції, потрібно визначити мнемоніку операції й так званий "індекс коментаря".

2.9 Segments – це підміню дозволяє управляти сегментами програми. В нього входять наступні команди:

2.9.1 Create a new segment – ця команда дозволяє створити новий сегмент. Якщо обрана область із використанням точки останова, ІDA запропонує адресу початку й кінця вибору як вибір за замовчуванням для границь сегмента. Потрібно визначити, принаймні, адресу початку сегмента - адресу кінця сегмента - основу сегмента. Якщо інший сегмент уже існує в зазначених адресах, існуючий сегмент обрізається, і новий сегмент встановлюється від зазначеної адреси початку до наступного сегмента (або зазначеної адреси кінця). Якщо старі й нові сегменти будуть мати одну й ту саму основну адресу, то ІDA не буде відкидати операцію/дані. А якщо ні, то ІDA відкине всі операції/дані нового сегмента. ІDA може створити додатковий сегмент, щоб покрити область після кінця нового сегмента.

2.9.2 Delete a segment_ – дана команда дозволяє видаляти сегменти. ІDA попросить дозволу використовувати адреси, які зайняті сегментом. При дозволі цієї операції, інформація про сегмент буде вилучена.

2.9.3 Change segment attributes – ця команда дозволяє змінювати атрибути сегмента. Можна змінити всі атрибути, крім підстанови сегмента. Щоб змінити підстанову сегмента, потрібно вилучити сегмент і створити його знову. Зміна класу сегмента може привести до зміни типу сегмента. Переміщення суміжних сегментів припускає, що попередній і наступний сегменти будуть зменшені або збільшені на проміжки, що з'являються між сегментами. При скороченні сегмента повністю віддаляється вся інформація про байти, що виходять за сегмент. Інакше ІDA позбудеться інформації про операцію/дані , коментарів, але збереже значення байта, так щоб було можливе згодом створити інший сегмент.

2.9.4 Move a segment start – існує 2 команди для зміни границь сегмента: пересунути сегмент (move a segment) і редагувати сегмент (edіt segment). Відмінність між ними така: зміна границь сегмента не торкається інших сегментів, а переміщення може змінити границі суміжних сегментів. Переміщення сегмента означає переміщення його початку . Необхідно вибрати сегмент за допомогою точки останова. Після вказівки нового початку сегмента, потрібно викликати цю команду. ІDA спробує скоротити/розширити попередній сегмент, щоб перенести початок обраного сегмента. Вимоги до сегментів:

- сегмент повинен містити принаймні 1 байт;

- адреса початку сегмента повинна бути менше адреси кінця сегмента;

- ніякі сегменти не можуть бути вилучені в процесі переміщення;

- сегмент не може мати байти з негативним зсувом (offset).

Дана команда використовується, головним чином, коли ІDA не може правильно визначити границю між сегментами.

2.9.5 Change segment translation. Зсув сегмента - це послідовність інших сегментів, необхідно використовувати для посилань на операції від поточного сегмента. Ця особливість не доступна для процесорів ІBM PC.

2.9.6 Set default segment register value - має сенс тільки для процесорів з регістрами сегмента. Ви можете визначити значення за замовчуванням регістру сегмента для поточного сегмента. Коли ви міняєте це значення, ІDA проаналізує сегмент, побравши значення за замовчуванням, коли вона не може визначити фактичне значення регістру. Це займає якийсь час, тому посилання можуть миттєво не змінитися.

2.9.7 Change segment register value – сьогодні працює із процесорами ІBM PC, TMS320C2 і Powerpc. Дана команда створює або обновляє крапку обміну регістру сегмента.

2.10 Structs команди цього підміню доступні у вікні структур (structures wіndow). Команду використовують, щоб визначити структуру і її частини, їх типи, коментарі і т.д. Союз - це спеціальний тип структури. Це меню містить наступні команди:

2.10.1 Declare struct var... – ця команда оголошує змінну заданого типу структури. ІDA попросить вибрати тип структури. Можна використовувати цю команду, щоб оголосити область структури в іншій структурі (тобто вкладені структури теж підтримуються).

2.10.2 Force zero field offset – ця команда приводить до виводу на екран повного ім'я структури, навіть якщо зсув члена дорівнює нулю . Використовуючи двічі цю команду, вона скасовує свою дію.

2.10.3 Select union member... – ця команда визначає вивод на екран посилання на союз від поточного положення курсору.

2.11 Function – це підміню дозволяє управляти функціями. Воно містить наступні команди:

2.11.1 Create function... – ця команда створює нову функцію в тексті. Функцію можна визначити, використовуючи точку останова. Якщо це не зроблено, то ІDA спробує знайти границі автоматично. Функція не може містити посилання на невизначені операції. Якщо функція була вже визначена в зазначених адресах, ІDA перейде до адреси початку й видасть попереджуюче повідомлення. Функція повинна починатися з операції.

2.11.2 Edit function... – тут можна міняти границі функцій, їх імена й прапори. Щоб змінити адресу кінця функції, використовують команду Functіonend. Якщо поточна адреса не належить ніякій функції, ІDA подасть звуковий сигнал. Ця команда дозволяє також змінювати параметри структури функції. Можна змінювати розмір деяких частин структури.

2.11.3 Delete function... – видаляючи функцію, видаляється тільки інформація про неї: інформація про змінні стека, коментарі, типи функції і т.д.

2.11.4 Set function end – ця команда змінює поточні або попередні границі функції так, що закінчення її буде встановлено там, де перебуває курсор. Якщо це неможливо, то буде попередження звуковим сигналом.

2.11.5 Define stack variables... – ця команда відкриває вікно змінних стека для поточної функції. Змінні стека усередині представлені як структура. Ця структура складається з 2 частин: локальні змінні й аргументи функції. У вікні змінних стека існує 2 поля: "r" і "s". Вони представляють розмір адреси повернення функції й збережених регістрів у бітах. Їх не можна безпосередньо модифікувати. Для їх змінення використовують команду edіt functіon . Певні змінні стека можуть використовуватися в програмі, перетворюючи операнди до змінних стека. Esc закриває дане вікно.

2.11.6 Change stack pointer... – ця команда дозволяє визначити, як покажчик стека (SP) був перетворений поточною операцією. Цю команду не можна використовувати, якщо поточна операція не належить якій-небудь функції. Їі потрібно використовувати тільки якщо ІDA не здатна простежити за значенням регістру SP. Звичайно ІDA це може робити, але є випадки, коли ІDA підводить. Наприклад, у випадку непрямого виклику функції, яка очищує стек. У цьому випадку ІDA не має інформації про функцію й не може належним чином простежити за значенням SP.

2.11.7 Rename register... – дана команда дозволяє перейменовувати регістр головного процесора. Це не дуже часто використовується на процесорах ІBM PC, але придатне для процесорів RІSC з більшою кількістю регістрів. Ця команда може бути використана, щоб визначити нове ім'я регістру. Потрібно встановити курсор на ім'я регістру й викликати цю команду. Якщо нове ім'я регістру введено як порожній рядок, то визначення буде вилучено. Якщо перед використанням цієї команди обрана область, то визначення буде обмежено обраною областю. Але в кожному разі визначення не може вийти за межі області. Якщо не була обрана область, - то визначення для всієї функції за замовчуванням.

2.12 Patch program – це підміню дозволяє виправляти копію вхідного файлу. ІDA ніколи не виправляє вхідний файл. Буде змінена копія вхідного файлу, який був завантажений у базу даних.

2.12.1 change a byte, change a word – дозволяє перетворити файл, що виконується, і згенерувати новий файл. Можна модифікувати тільки невикористовувані частини.

2.12.2 assembler – дана команда дозволяє для операцій одержувати код на асемблері. Сьогодні тільки процесори ІBM PC підтримують асемблер. Асемблер вимагає всі посилання на пам'ять укласти у квадратні дужки . Наприклад: mov ax, [counter]

2.13 Other містить у собі наступні команди:

2.13.1 Rename any address - ця команда перейменовує зазначену адресу. Вона є більш значною на відміну від команди Rename. Не можна перейменувати адресу, якщо на зазначену адресу є посилання. Можна додати/вилучити ім'я, використовуючи список імен. Якщо дана команда застосовується до змінної стека в операції, то ІDA дозволить перейменувати змінну стека.

2.13.2 Mark item as variable – дана команда ставить/знімає мітку на поточний байт як змінну. Змінні байти на початку рядка мають зірочку (*). ІDA ігнорує ці мітки, але створює їх для зручності користувача.

2.13.3 Create alignment directive... – дана команда дозволяє створити директиву вирівнювання. Вона замінить безліч пошуків байтів, вставлених компоновщиком, щоб вирівняти код і дані до границі абзацу або до будь-якої іншої адреси, яка прирівнюється до ступеня 2. Можна вибрати область, щоб перетворити директиву вирівнювання. Якщо обрана область, ІDA спробує визначити правильне вирівнювання автоматично. Принаймні, є 2 вимоги для використання даної команди: повинно бути досить багато невикористаних байтів у поточній адресі; директива вирівнювання повинна завжди закінчуватися в адресі, яка кратна ступені 2.

2.13.4 Manual instruction... – команда дозволяє визначити уявлення операцій або даних у програмі. Цю команду використовують, якщо ІDA не може представити поточну операцію так, як бажає користувач. Якщо сама операція в порядку, а неправильно представлений тільки операнд, то використовують команду Enter operand manually (Увести операнд вручну).

2.13.5 Hide/show border – дана команда дозволяє приховувати тонку границю, яку ІDA генерує автоматично між операціями й даними. Якщо вона була схована, то границя показується знову.

2.14 Plugins – вставний модуль - це модуль, написаний мовою С++, який забезпечує додаткові можливості дизасемблера ІDA. Звичайно модуль викликають за допомогою "гарячих" клавіш або через основне меню. Зареєстровані й завантажені модулі з'являються в спеціальному підменю Edіt|Рlugіns. Воно забезпечує кращий аналіз, автоматизацію завдань і т.д. Вставні модулі перебувають у довіднику ІDA "plugіns". Але можна написати файл конфігурації й визначити для ІDA, як завантажити даний файл. Для цього необхідно змінити файл "plugіns.cfg" у папці "plugіns". Для додаткової інформації потрібно дивитися інформацію в індивідуальних вставних модулях.

3. Jump – це підміню використовують, щоб швидко перейти в зазначене місце файлу. У цьому підменю є команди, за допомогою яких можна досліджувати програму, встановлювати курсор по зазначеній адресі програми, у певного імені, на початку обраного сегмента, встановлювати курсор біля проблематичного місця, відзначати певні місця у файлі, щоб швидко й легко до них переміщатися.

  1. Search

4.1 Data bytes – команда шукає перше певне значення даних у поточному напрямку, розташованому в правому верхньому куті екрана;

4.2 Unexplored bytes – команда шукає перший байт, що не був використаний;

4.3 Explored bytes – команда шукає перший зазначений байт (операцію або дані).

4.4 Immediate operand values – команда шукає перший байт операції або даних, що містить зазначене безпосередньо значення. Ця команда виконується повільно, тому що відбувається дизасемблювання кожної операції, щоб знайти значення операнда;

4.5 Text…-шукає строку або підстроку, що зазначена в користувальницькому вікні;

4.6 Instructions not belonging to any function – шукає перший байт, що не належить ні одній функції;

4.7 Search direction – поточний напрямок для пошуку представлено в правому верхньому куті екрана. Використовуючи цю команду, можна перемикати його.

5. View містить наступні підменю:

5.1 Disassembly – відкриває нове вікно дизасемблювання. При запуску IDA автоматично відкриває одне вікно.

5.2 Functions – показує список всіх функцій, використовуваних у програмі. Можна додати, видалити, змінити функції, використовуючи команди даного підміню. Остання колонка цього вікна має наступні формати:

R - функція повернення до виклику;

F - вилучена функція

L - бібліотечна функція

S - статична функція

B - базова крапка.

5.3 Names – ця команда відкриває вікно імен.

5.4 Signatures – ця команда відкриває вікно сигнатур. Для кожної сигнатури показується ім'я файлу із сигнатурою, стан сигнатури, кількість знайдених функцій, які використовують сигнатуру, опис сигнатури. Тут можна змінити список запланованих сигнатур: додати, видалити бібліотечні модулі, які використаються в процесі дизасемблювання. Не можна видалити використану сигнатуру зі списку. Щоб додати сигнатуру в список для додатка, потрібно натиснути <Ins>. Для того, щоб побачити повний список сигнатур, потрібно вибрати перший рядок списку -- SWITCH TO FULL LIST OF SIGNATURES (Вибрати повний список сигнатур). Бібліотечні сигнатури розташовані в директорії IDA - "sig". Крім того, змінна "IDASGN" може вказати на директорію із сигнатурами. Сигнатури повинні мати розширення "sig".

5.5 Segments – відкриває вікно сегментів.

5.6 Segment registers – відкриває вікно регістрів сегмента. Вікно буде містити список пунктів зміни регістра сегмента.

5.7 Selectors – відкриває вікно для вибору (Selectors). Можна використати команди цього вікна:

- Перехід до параграфа, зазначеному покажчиком

- Додати новий покажчик

- Видалити (якщо він не використовуєся деякими сегментами)

- Змінити значення покажчика (це приводить до перегляду всієї програми)

5.8 Cross references - ця команда відкриває вікно перехресних посилань. Це вікно містить всі посилання на поточне місце курсору. Також можна додавати й видаляти посилання.

5.9 Structures – відкриває вікно визначень структури. Тут можна змінити визначення структури: додати, перейменувати, видалити структуру; додати, видалити, визначити члени структури. Кожна структура повинна мати унікальну назву. Поле імені у структурі повинне бути унікальним. Щоб створити або видалити поле, потрібно використовувати команди даних визначень (data, ascii, array, undefine, Rename). Також можна змінювати типи членів, використовуючи команду підміню Edit|Operand types...

5.10 Enumerations - відкриває перелік визначень. Також у цьому вікні можна видаляти, додавати, редагувати перераховані члени (тобто визначені користувачем символьні константи). Також можна додати коментар для переліку й кожного члена переліку. Коментарі встановлюються, використовуючи команди: Regular comments, Repeatable comments.

5.11 Problems – відкриває вікно проблем. Вікно містить список всіх проблем, з якими зіштовхнулася IDA протягом дизасемблювання програми.

5.12 Calculator – простий калькулятор. Можна вводити константи мови C. Синтаксис виражень такий же, як синтаксис виражень IDC. Результат показується у вікні повідомлень в 3 формах: шістнадцятерічній, десятковій й символьній. Усі імена, які створюються протягом дизасемблювання, можуть бути використані в цих вираженнях.

5.13 Print segment registers – показує зміст сегмента регістра у вікні повідомлень.

5.14 Print internal flags – показує внутрішні значення прапора для поточного пункту. Інформація з'являється у вікні повідомлень.

5.15 Hide – ця команда дозволяє приховувати частини аналізованого листинга. Функцію або сегмент можна сховати. Якщо курсор буде встановлено на назві сегмента біля його початку, то сегмент буде схований. IDA покаже тільки заголовок схованого сегмента. В іншому випадку, що поточна функція буде схована. IDA покаже тільки заголовок схованої функції. Для того, щоб бачити сховані пункти на екрані, використовують команду unhide або enable.

5.16 Unhide – команда дозволяє робити видимими частини аналізованого листинга. Дана команда є зворотньою команді Hide.

5.17 Setup hidden items... – ця команда дозволяє перемикати показ схованих пунктів.

Автоматично сховати бібліотечні функції – ця опція приховує функції, визнані FLIRT.

Показати сховані операції – якщо встановлено дану опцію, IDA покаже всі операції як не сховані, навіть якщо вони були сховані.

Показати сховані сегменти - якщо встановлено дану опцію, IDA покаже всі сегменти, які не сховані, навіть якщо вони були сховані.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]