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

1.

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

2.

АПИНО-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
Ассемблерный листинг
Ассемблерные блок-схемы
Текстовые строки
Дамп памяти
Список функций
Поддержка скриптов (языки C-like и Python)
Декомпилятор Hex-Rays
Взаимодействие со средой
Полезные настройки
Практическое задание
o Сбор информации об исследуемой функции
Вопросы
//

4.

Описание продукта «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
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;
}
Можно ли понять,
что делает этот
код?
В виде машинного кода (Intel)
...
.text:00401000
.text:00401001
.text:00401003
.text:00401004
.text:0040100B
.text:0040100E
.text:00401011
.text:00401013
.text:00401015
...
push
mov
push
mov
mov
cmp
jnz
xor
jmp
ebp
ebp, esp
ecx
[ebp+var_4], offset aComparexy ; "CompareXY"
eax, [ebp+arg_0]
eax, [ebp+arg_4]
short loc_401017
eax, eax
short loc_401031
// Пример будет использоваться везде далее

6.

IDA Pro. Ассемблерный листинг
Что позволяет?
Отображает инструкции процессора для программы
(то есть ассемблерный листинг)
Как можно применить?
Ручной анализ кода (Old School Style)
Пример

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

7.

IDA Pro. Ассемблерные блок-схемы
Что позволяет?
Отображает блок-схему алгоритма функции
(с ассемблерными вставками)
Как можно применить?
Ручной анализ
алгоритмов кода
Пример

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

8.

IDA Pro. Текстовые строки
Что позволяет?
Выводит потенциальных список строк с текстом
(человеческих, читаемых)
Как можно применить?
Понимание смысла функций по используемым в них строкам
Пример

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

9.

IDA Pro. Дамп памяти
Что позволяет?
Отображает непосредственно бинарные данные программы
(вперемешку код, данные, пустые области)
Как можно применить?
Глубокий разбор деталей работы кода
o Сложные структуры данных
o Не типовые конструкции кода (switch-case, table_of_functs)
Пример

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

10.

IDA Pro. Список функций
Что позволяет?
Выводит список всех функций, полученных при анализе программы
(сортировка по имени, адресу, размеру)
Fast
Именует функции удобным способом
Library
Именование библиотечных функций (автомат.):
Identification
o С помощью ФЛИРТА
and
Как можно применить?
Понимание функционального состава программы
Быстрая навигация по функциям
Пример

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

11.

IDA Pro. Поддержка языка
Что позволяет?
Автоматизация анализа и редактирования кода программы
Выполнение скрипта на C-подобном (IDC) и Python языках (например):
o Бегает по коду и ищет данные/инструкции
o Импортирует/экспортирует результаты во внешние файлы
o Взаимодействует с пользователем
Как можно применить?
Выполнение рутинных операций
Собственный интерфейс взаимодействия (диалоговые окна)
Пример
… (см. след. слайд)
Ограничения
Python не поддерживается в freeware версии
// Вызов: Shift+F2 или File->Script command… | Alt+F7 или File->Script file… Alt+F9 или View->Recent scripts

12.

IDA Pro. Поддержка языка (пример)
Скрипт вывода всех имен функций программы и их адресов
А что
выведет
код?
// Вызов: Shift+F2 или File->Script command… | Alt+F7 или File->Script file… Alt+F9 или View->Recent scripts

13.

IDA Pro. Декомпилированный псевдокод
Что позволяет?
Отображает C-like псевдокод для программ некоторых процессоров
(неплохой декомпилятор)
Как можно применить?
Чтение кода функций на человеко-ориентированном языке
Ограничения
Не работает в freeware версии
Поддержка лишь ряда CPU
Пример

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

14.

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

Как можно применить?
Нет необходимости постоянно смотреть в спецификацию CPU
Ограничения
Не работает в freeware версии
Пример

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

15.

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

// Вызов: Мышка | Enter/Escape | n или Edit->Rename | x или Jump->Jump to xref to operand…

16.

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

17.

Практическое задание – Часть 1
Название:
o Сбор информации об исследуемой функции в IDA Pro
Цель:
o Познакомиться с общим функционалом IDA Pro
Будущее применение:
o Анализ машинного кода
o Работа с IDA Pro
//

18.

Практическое задание – Часть 2
Шаг 1. По своей фамилии найти ID в файле
Группы\Состав.xlsx
Шаг 2. По своему ID найти Функцию для исследования ее в программе
Группы\My_Functs.docx
Шаг 3. Скачать IDA Pro
Файлы\idafree70_windows.exe
и программу для анализа
Файлы\some_big_program.bin
Шаг 4. Открыть программу в IDA Pro
a. Настройки не менять
b. Нажать OK
c. В следующем меню выбрать
“64-bit mode”
d. Дождаться окончания анализа
// “Все мы – хакеры в душе! И вне душа тоже.“

19.

Практическое задание – Часть 3
Шаг 5. В окне “Список функций” найти свою Функцию (из файла My_Functs.docx)
Шаг 6. Назвать Вашу Функцию именем в следующем формате
(MyFunct –текст, ID – Ваш ID, FIO – Ваша фамилия или прозвище по-английски):
MyFunct_ID_FIO
Шаг 7. Собрать о Функции следующую информацию:
1) Начальный адрес функции (колонка Start)
2) Длина функции (колонка Length)
3) Количество инструкций условного перехода
(ветвления с несколькими выходами на блок-схеме)
4) Количество циклов
(переходов на предыдущие инструкции)
5) Список вызовов внешних функций
(инструкции call)
6) Список вызовов данной Функции из внешних
(xref – нажать x на имени Функции)
7) Блок-схема функции
(сделать скриншот блок-схемы в IDA Pro)
Шаг 8. Поместить ВСЮ собранную информацию (на Шаге 7) в таблицу в любой
форме.
Скриншот с блок-схемой добавить после таблицы (можно мелко, но чтобы видеть переходы).
//
Все шаги и результаты их выполнения добавить в итоговый отчет!

20.

LOGO
www.themegallery.com
English     Русский Правила