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