Реверс-инжиниринг системного программного обеспечения (РИСПО). Средство для реверс-инжиниринга IDA Pro LOGO (Лекция 2)

Содержание

Слайд 2

АПИНО-2021 (СПбГУТ) // Приходите на АПИНО-2020 01.12.2020 – 23.02.2021: Регистрация участников

АПИНО-2021 (СПбГУТ)

//

Приходите на АПИНО-2020

01.12.2020 – 23.02.2021: Регистрация участников (слушателей)

24.02.2021 –

25.02.2021: Проведение конференции

01.12.2020 – 31.03.2021: Прием рукописей в Сборник статей (зачтется для диплома и магистратуре!)

Возможно, многим предстоит участвовать в 2022 г.!

Поздравим группу ИБС-81 с рекордом …

Который нельзя превзойти …

А можно только повторить …

И это … (?)

100% посещение практики (во вторник)

Так держать!!!

Слайд 3

План лекции Описание IDA Pro Основные функции IDA Pro Ассемблерный листинг

План лекции

Описание IDA Pro
Основные функции IDA Pro
Ассемблерный листинг
Ассемблерные блок-схемы
Текстовые строки
Дамп памяти
Список

функций
Поддержка скриптов (языки C-like и Python)
Декомпилятор Hex-Rays
Взаимодействие со средой
Полезные настройки
Практическое задание
Сбор информации об исследуемой функции
Вопросы

//

Слайд 4

Описание продукта «IDA Pro» // IDA Pro – интерактивный дизассемблер с

Описание продукта «IDA Pro»

//

IDA Pro – интерактивный дизассемблер с возможностями
Навигация по

коду
Отладка кода
Модификация/Комментирование кода
Автоматизация действий

Поддерживает набор процессоров
Intel, MIPS, ARM, JVM, …

Применение
Анализ программы в виде машинного кода (без исходного кода)

Версия ПО
Freeware (свободная с ограниченным функционалом)
https://www.hex-rays.com/products/ida/support/download_freeware.shtml

Версии ОС для работы
Windows/Linux/Mac

Слайд 5

Сквозной пример На языке C // Пример будет использоваться везде далее

Сквозной пример

На языке C

// Пример будет использоваться везде далее

В виде машинного

кода (Intel)

int CompareXY(int x, int y) {
const char *name = "CompareXY";
if (x == y)
return 0;
if (x > y)
return 1;
if (x < y)
return -1;
}

...
.text:00401000 push ebp
.text:00401001 mov ebp, esp
.text:00401003 push ecx
.text:00401004 mov [ebp+var_4], offset aComparexy ; "CompareXY"
.text:0040100B mov eax, [ebp+arg_0]
.text:0040100E cmp eax, [ebp+arg_4]
.text:00401011 jnz short loc_401017
.text:00401013 xor eax, eax
.text:00401015 jmp short loc_401031
...

Можно ли понять, что делает этот код?

Слайд 6

IDA Pro. Ассемблерный листинг // Вызов: View->Open subviews->Disassembly Что позволяет? Отображает

IDA Pro. Ассемблерный листинг

// Вызов: View->Open subviews->Disassembly

Что позволяет?
Отображает инструкции процессора для

программы (то есть ассемблерный листинг)

Как можно применить?
Ручной анализ кода (Old School Style)

Пример

Слайд 7

IDA Pro. Ассемблерные блок-схемы // Вызов: Нажать ‘пробел’ в режиме ‘Ассемблерный

IDA Pro. Ассемблерные блок-схемы

// Вызов: Нажать ‘пробел’ в режиме ‘Ассемблерный листинг’

Что

позволяет?
Отображает блок-схему алгоритма функции (с ассемблерными вставками)

Как можно применить?
Ручной анализ алгоритмов кода

Пример

Слайд 8

IDA Pro. Текстовые строки // Вызов: Shift+F12 или View->Open subviews->Strings Что

IDA Pro. Текстовые строки

// Вызов: Shift+F12 или View->Open subviews->Strings

Что позволяет?
Выводит потенциальных

список строк с текстом (человеческих, читаемых)

Как можно применить?
Понимание смысла функций по используемым в них строкам

Пример

Слайд 9

IDA Pro. Дамп памяти // Вызов: View->Open subviews->Hex dump Что позволяет?

IDA Pro. Дамп памяти

// Вызов: View->Open subviews->Hex dump

Что позволяет?
Отображает непосредственно бинарные

данные программы (вперемешку код, данные, пустые области)

Как можно применить?
Глубокий разбор деталей работы кода
Сложные структуры данных
Не типовые конструкции кода (switch-case, table_of_functs)

Пример

Слайд 10

IDA Pro. Список функций // Вызов: Shift+F3 или View->Open subviews->Functions Что

IDA Pro. Список функций

// Вызов: Shift+F3 или View->Open subviews->Functions

Что позволяет?
Выводит список

всех функций, полученных при анализе программы (сортировка по имени, адресу, размеру)
Именует функции удобным способом

Как можно применить?
Понимание функционального состава программы
Быстрая навигация по функциям

Пример

Именование библиотечных функций (автомат.):
С помощью ФЛИРТА

Fast Library Identification and Recognition Technology

Слайд 11

IDA Pro. Поддержка языка // Вызов: Shift+F2 или File->Script command… |

IDA Pro. Поддержка языка

// Вызов: Shift+F2 или File->Script command… | Alt+F7

или File->Script file… Alt+F9 или View->Recent scripts

Что позволяет?
Автоматизация анализа и редактирования кода программы
Выполнение скрипта на C-подобном (IDC) и Python языках (например):
Бегает по коду и ищет данные/инструкции
Импортирует/экспортирует результаты во внешние файлы
Взаимодействует с пользователем

Как можно применить?
Выполнение рутинных операций
Собственный интерфейс взаимодействия (диалоговые окна)

Пример
… (см. след. слайд)

Ограничения
Python не поддерживается в freeware версии

Слайд 12

IDA Pro. Поддержка языка (пример) Скрипт вывода всех имен функций программы

IDA Pro. Поддержка языка (пример)

Скрипт вывода всех имен функций программы и

их адресов

// Вызов: Shift+F2 или File->Script command… | Alt+F7 или File->Script file… Alt+F9 или View->Recent scripts

А что выведет код?

Слайд 13

IDA Pro. Декомпилированный псевдокод // Вызов: F5 или View->Open subviews->Generate pseudocode

IDA Pro. Декомпилированный псевдокод

// Вызов: F5 или View->Open subviews->Generate pseudocode

Что позволяет?
Отображает

C-like псевдокод для программ некоторых процессоров (неплохой декомпилятор)

Как можно применить?
Чтение кода функций на человеко-ориентированном языке

Ограничения
Не работает в freeware версии
Поддержка лишь ряда CPU

Пример

Слайд 14

IDA Pro. Полезные настройки // Вызов: Options->General...->Disassembly->Auto comments Что позволяет? Автокомментирование

IDA Pro. Полезные настройки

// Вызов: Options->General...->Disassembly->Auto comments

Что позволяет?
Автокомментирование инструкций

Как можно применить?
Нет

необходимости постоянно смотреть в спецификацию CPU

Ограничения
Не работает в freeware версии

Пример

Слайд 15

IDA Pro. Взаимодействие со средой // Вызов: Мышка | Enter/Escape |

IDA Pro. Взаимодействие со средой

// Вызов: Мышка | Enter/Escape | n

или Edit->Rename | x или Jump->Jump to xref to operand…

Что позволяет?
Перемещаться по ассемблерному листингу и блок-схемам
Переходить в функции по именам (Enter/Click) и обратно (Esc)
Просматривать вперед код (Колесо прокрутки)
Находить ссылки на функцию из других (xref)
Давать имена функциям и переменным
Явно задавать тип кода (функция, код, строка и т.п.)
Комментировать код
Поддерживать проект (текущее состояние работы с кодом)

Как можно применить?
Навигация по коду, и другой информации
Подстройка под себя

Пример

Слайд 16

www.themegallery.com Практическое задание Реверс-инжиниринг системного программного обеспечения (РИСПО) Лекция 2. Средство для реверс-инжиниринга «IDA Pro»

www.themegallery.com

Практическое задание

Реверс-инжиниринг системного программного обеспечения (РИСПО)

Лекция 2. Средство для реверс-инжиниринга «IDA Pro»

Слайд 17

Практическое задание – Часть 1 Название: Сбор информации об исследуемой функции

Практическое задание – Часть 1

Название:
Сбор информации об исследуемой функции в IDA

Pro
Цель:
Познакомиться с общим функционалом IDA Pro
Будущее применение:
Анализ машинного кода
Работа с IDA Pro

//

Слайд 18

Практическое задание – Часть 2 // “Все мы – хакеры в

Практическое задание – Часть 2

// “Все мы – хакеры в душе!

И вне душа тоже.“

Шаг 1. По своей фамилии найти ID в файле
Группы\Состав.xlsx

Шаг 2. По своему ID найти Функцию для исследования ее в программе Группы\My_Functs.docx

Шаг 3. Скачать IDA Pro
Файлы\idafree70_windows.exe
и программу для анализа Файлы\some_big_program.bin

Шаг 4. Открыть программу в IDA Pro
Настройки не менять
Нажать OK
В следующем меню выбрать “64-bit mode”
Дождаться окончания анализа

Слайд 19

Практическое задание – Часть 3 // Шаг 5. В окне “Список

Практическое задание – Часть 3

//

Шаг 5. В окне “Список функций” найти

свою Функцию (из файла My_Functs.docx)

Шаг 6. Назвать Вашу Функцию именем в следующем формате (MyFunct –текст, ID – Ваш ID, FIO – Ваша фамилия или прозвище по-английски):
MyFunct_ID_FIO

Шаг 7. Собрать о Функции следующую информацию:
Начальный адрес функции (колонка Start)
Длина функции (колонка Length)
Количество инструкций условного перехода (ветвления с несколькими выходами на блок-схеме)
Количество циклов (переходов на предыдущие инструкции)
Список вызовов внешних функций (инструкции call)
Список вызовов данной Функции из внешних (xref – нажать x на имени Функции)
Блок-схема функции (сделать скриншот блок-схемы в IDA Pro)

Шаг 8. Поместить ВСЮ собранную информацию (на Шаге 7) в таблицу в любой форме.
Скриншот с блок-схемой добавить после таблицы (можно мелко, но чтобы видеть переходы).

Все шаги и результаты их выполнения добавить в итоговый отчет!