Мова викладання в курсі – російська. Незабаром буде доступна українська версія цього курсу.
Відеозаписи лекцій без зворотного зв’язку та участі викладача. Ви отримаєте доступ до матеріалів одразу після оплати.
Реверс-інжиніринг коду (зворотна розробка коду) – це процес аналізу машинного коду програми, який ставить собі за мету зрозуміти принцип роботи, відновити алгоритм, виявити недокументовані можливості програми тощо. Основні методи реверс-інжинірингу – це статичний або динамічний аналіз коду. Під час статичного аналізу дослідник дизасемблює код програми, використовуючи спеціальне ПЗ, і далі аналізує асемблерний код. Під час динамічного аналізу дослідник запускає код в ізольованому середовищі (пісочниці) або відладчику й аналізує код у динаміці.
Мета курсу. Професійно зроблених курсів зі зворотної розробки на російському ринку (майже) немає. Наша мета – заповнити цю прогалину і запропонувати курс, у рамках якого слухач зможе оволодіти на практиці навичками зворотного розроблення програм.
Особливість курсу. Авторський курс. Програма містить добре структурований теоретичний матеріал і при цьому насичена цікавою, корисною та актуальною практикою. Багато завдань на реальних кейсах.
Чого навчимося:
– Ґрунтовно вивчимо таку важливу тему як низькорівневе програмування.
– Детально обговоримо важливі для подальшого аспекти внутрішнього устрою 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 Одні і ті самі команди – різні опкоди
Ціль: необхідно скласти список якомога більших команд, що матимуть один і той самий сенс, але різні опкоди 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_
(FB42BFFAD815A9563B9F6FDD362B47F70)
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 Зворотне розроблення руткітів
Відгуки
Відгуків немає, поки що.