Мова викладання в курсі — російська. Незабаром буде доступна українська версія цього курсу.
Відеозаписи лекцій без зворотного зв'язку та участі викладача. Ви отримаєте доступ до матеріалів одразу після оплати.
Реверс-инжиниринг кода (обратная разработка кода) — это процесс анализа машинного кода программы, который ставит своей целью понять принцип работы, восстановить алгоритм, обнаружить недокументированные возможности программы, и т.п. Основные методы реверс-инжиниринга — это статический или динамический анализ кода. При статическом анализе исследователь дизассемблирует код программы, используя специальное ПО, и далее анализирует ассемблерный код. При динамическом анализе исследователь запускает код в изолированной среде (песочнице) или отладчике и анализирует код в динамике.
Цель курса. Профессионально сделанных курсов по обратной разработке на российском рынке (почти) нет. Наша цель — восполнить этот пробел и предложить курс, в рамках которого слушатель сможет овладеть на практике навыками обратной разработки программ.
Особливість курсу. Авторський курс. Програма містить добре структурований теоретичний матеріал і при цьому насичена цікавою, корисною та актуальною практикою. Багато завдань на реальних кейсах.
Чого навчимося:
— Основательно изучим такую важную тему как низкоуровневое программирование.
— Подробно обсудим важные для дальнейшего аспекты внутреннего устройства Windows.
— Отдельный большой модуль программы будет посвящен системному программированию.
— Наконец, центральная тема курса — обратная разработка кода. Статический и динамический анализ.
— Полный список тем приведен в программе обучения.
Необхідні знання
— Знание архитектуры ЭВМ на начальном уровне
— Базовые знания внутреннего устройства Windows
— Преимуществом будет опыт программирования на языке C/C (это необязательное условие)
— Требования к «железу»: процессор с тактовой частотой 2,0 ГГц или больше, от 8 ГБ ОЗУ, 100 ГБ свободного места на жестком диске
Низькорівневе програмування на асемблер під x8086/x64
1 Регістри процесора, робота з пам'яттю
1 Встановлення софту
Необхідно встановити наступний
софт:
Emu 8086
FASM
x64Dbg
Ida Pro 7
Hiew
Far Manager
ConEmu
Реверс-інжиніринг 2.0
Курс розрахований на розробників програмного забезпечення, системних програмістів, системних аналітиків, вірусних аналітиків, фахівців з інформаційної безпеки, devops-фахівців
2 Подання даних, коду, опкоди команд.
1 Одинаковые команды — разные опкоды
Мета: Необхідно скласти список якомога більших команд, які матимуть один і той самий сенс, але різні опкоди. Приклад:
xor ax, ax | 33 c0
xor ax, ax | 31 c0
2 Аналіз
Мета: Проаналізувати файл code і написати вердикт: шкідливий чи ні. Результат обґрунтувати
3 Арифметичні, логічні команди.
Команди умовного/безумовного переходу
1 Написати keygen до програм
CRACKME.EXE (66f573036f8b99863d75743eff84f15d)
Необхідно дизасемблювати програму і написати генератор валідних пар login:password.
4 Переривання BIOS. Ланцюжкові операції Домашні завдання
1 Рішення Crackme Мета: Необхідно розібрати алгоритм генерації серійника в Otus_Crackme_01.exe_.
(FB42BFAD815A9563B9F6FDD362B47F70)
2 Низькорівневе програмування на асемблер під MIPS
1 Регістри процесора.
Робота з пам'яттю
1 Калькулятор суми
Мета: Написати програму, яка:
1) приймає на вхід два доданки у вигляді hex цифр,
2) рахує суму і виводить її на екран теж, у hex вигляді.
Приклад введення: Slag1 = 12345 Slag2 = 2 Summa: 12347
2 Арифметичні, логічні команди.
Команди умовного/безумовного переходу
1 Crc32
Мета: Переписати програму з асемблера під архітектуру MIPS, на 8086
Алгоритм підрахунку crc32 потрібно реалізувати в підпрограмі, яка на вхід приймає адресу і розмір буфера, а в eax повертає Crc32 хеш
Писати код потрібно на FASM, у результаті має вийти виконуваний exe файл. Буфер може бути захардкожений.
3 Опкоди команд
3 Захищений режим процесора
1 Режими роботи процесорів.
Принцип роботи процесора в PM
2 Сегментна організація пам'яті
3 Сторінкова організація пам'яті
1 Білдер дескрипторів пам'яті Написати програмку (краще на python, але можна й на інших ЯП), яка на вхід прийматиме: адресу сегмента, ліміт сегмента, права (читання/запис/виконання) і повертатиме сформований дескриптор сегмента
4 Внутрішній устрій Windows
Об'єкти ядра
1 Стек у PM
Написати програмку (краще на python, але можна й на інших ЯП), яка на вхід прийматиме: адресу сегмента, ліміт сегмента, права (читання/запис/виконання) і повертатиме сформований дескриптор сегмента
Додати дескриптор сегмента, для стека в segmodel.asm
2 Менеджер пам'яті
1 Crc32 Мета: Переписати програму з MIPS асемблера на 8086. Захардкодити рандомний рядок в 0x100 байт і від нього зчитати хеш. Функція, що виконує розрахунки, має бути STDCALL
3 Диспетчер введення-виведення. Робота з пам'яттю
5 Системне програмування
1 PE формат
2 Таблиця імпорту.Таблиця експорту. Таблиця релокацій
3 WinApi функції. Перехоплення WinApi функцій
1 Pe Loader
Реалізувати найпростіший Pe Loader, який зчитуватиме з диска Pe (exe) з пам'яті та запускатиме його. Pe файл брати той, який видає MessageBox і скомпільований на FASMЕ.
4 Програмування Native додатків
5 Способи додавання в автозавантаження
6 Програмування служб
7 Налаштування робочого середовища для налагодження драйверів режиму ядра
6 Написання найпростіших драйверів
1 Написання кастомного MBR
7 Зворотне розроблення програм
1 Динамічний аналіз коду WinDbg, Sysinternels Tools, WireShark
2 Статичний аналіз коду Ida Pro
3 Розробка shell кодів
4 Metasploit
5 Впровадження реверс шела в деякі прошивки роутерів
6 Пошук та експлуатація вразливостей Buffer Overflow/UAF
7 Зворотне розроблення руткітів
Відгуки
Відгуків немає, поки що.