День открытых дверей по курсу «Reverse engineering» 20.06.2019 в 20:00 | OTUS >
+7 499 938-92-02
Проходил 20 июня 2019 года в 20:00

День открытых дверей
Всё о курсе «Реверс-инжиниринг»

День открытых дверей онлайн

День Открытых Дверей — отличная возможность узнать подробнее о программе курса, особенностях онлайн-формата, навыках, компетенциях и перспективах, которые ждут выпускников после обучения. Также преподаватель расскажет о своём профессиональном опыте и ответит на вопросы участников. Поэтому если есть вопрос, запишитесь на онлайн-трансляцию и задайте его в прямом эфире!
Преподаватель
Артур Пакулов

Запись

О курсе

Reverse engineering
76 000 ₽ 68 400 ₽
5 месяцев
Начало 30 июня

Вы освоите на практике важнейшие приемы реверс-инжиниринга: статический и динамический анализ. Познакомитесь с низкоуровневым и системным программированием, подробно разберете аспекты внутреннего устройства Windows. Вам предстоит изучить и классифицировать вредоносное ПО на примерах реальных malware, выловленных в сети.

ЧТО ТАКОЕ РЕВЕРС-ИНЖИНИРИНГ?

Реверс-инжиниринг кода (обратная разработка кода) — это процесс анализа машинного кода программы, который ставит своей целью понять принцип работы, восстановить …

Программа курса
Модуль 1
Низкоуровневое программирование на ассемблер под x8086/x64
Модуль 2
Защищённый режим процессора
Модуль 3
Внутреннее устройство Windows
Модуль 4
Системное программирование
Модуль 5
Обратная разработка программ
Модуль 6
Проектный модуль
Низкоуровневое программирование на ассемблер под x8086/x64
В данном модуле проходит экспресс-курс изучения языка Ассемблер.
Изучение необходимо для получения навыков чтения дизассемблерного кода в отладчике и дизассемблере.
После изучения модуля, студент научится понимать, во что превращается скомпилированная программа и почему она содержит именно такие данные.
Регистры процессора, работа с памятью // ДЗ
изучить группу регистров;
изучить правила взаимодействия регистров между собой и памятью ПК;
рассмотреть «оборачивания» адресов.
Домашние задания: 1
ДЗ
Установить софт из списка. Вам нужно установить следующий софт:




- emu8086;
- Far Manager;
- ConEmu;
- Hiew;
- x64Dbg;
- Ida Free 7.0;
- VmWare (Windows 7 x86 и Windows 10 x64).




После установки, вам необходимо сделать скриншот со всем установленным софтом и прикрепить к ДЗ.
Представление данных: знаковые и беззнаковые числа, символы. Основные команды ЯА
изучить различия между кодом и данными;
изучить, как данные воспринимает процессор, в зависимости от их расположение;
компиляция кода смешенного с данными, анализ результата.
7 июля, 19:00 — 20:30
Лектор: Александр Першин
Представление кода: формат и опкоды команд
научиться читать таблицу с опкодами команд процессора;
научиться, с помощью таблицы, составлять опкоды инструкций;
разобрать опкоды команд процессора разного формата.
9 июля, 19:00 — 20:30
Лектор: Илья Панков
Арифметические и логические команды // ДЗ
изучить арифметические команды ЯА: сложения, умножения, деления, вычитания, операции со сдвигами.
14 июля, 19:00 — 20:30
Лектор: Артур Пакулов
Домашние задания: 1
ДЗ
Одинаковые команды - разные опкоды. Вам необходимо вручную или с использованием дизассемблера, найти список команд, которые имеют одинаковую мнемонику, но разные опкоды.




Например:




xor ax, ax это:
0x31 0xc0
0x33 0xc0




Последовательность опкодов разная, но оба они из себя представляют одну команду: xor ax, ax.




Ссылка для ручного поиска: http://ref.x86asm.net/coder32.html
Цепочечные операции // ДЗ
научиться работать с динамическими структурами данных, используя для этого специальные инструкции процессора.
16 июля, 19:00 — 20:30
Лектор: Артур Пакулов
Домашние задания: 1
ДЗ
Решение crackme. Повторить действия из лекции, разобрать функции по адресу:




0x0040137E и 0x04013D8
Подпрограммы
изучить стандарты сборки подпрограмм;
изучить устройство локальных переменных.
21 июля, 19:00 — 20:30
Лектор: Иван Квасенков
Дополнительное занятие: Представление данных
научиться отличать данные от кода.
23 июля, 19:00 — 20:30
Лектор: Александр Першин
Прерывания BIOS // ДЗ
изучить, что такое прерывания и научиться их перехватывать; читать и писать в секторы в видеопамять и производить клавиатурный ввод-вывод.
28 июля, 19:00 — 20:30
Лектор: Александр Першин
Домашние задания: 1
ДЗ
Сложение в столбик. 1. Первое слагаемое должно находиться в 1ом секторе, второе – во втором.
2. Результат должен сохраняться в третий и четвёртый секторы.
3. Записывать слагаемые нужно в виде Little endian.
4. Вам нужно использовать цепочечные операции (обнуления, копирования, считывания и сохранения), подпрограммы, а также прерывания BIOS. Прерывания DOS не засчитываются.

RISС-архитектура на примере MIPS-процессоров // ДЗ
изучить подходы к проектированию архитектуры процессора, на примеру двух различных архитектур: CISC и RISC;
рассмотреть процессор MIPS, его регистры и базовые команды.
30 июля, 19:00 — 20:30
Лектор: Иван Квасенков
Домашние задания: 1
ДЗ
Переписать программу подсчёта. Подпрограмма расчёта должна иметь соглашение STDCALL.




1. Алгоритм подсчёта crc32 нужно реализовать в подпрограмме, которая на вход принимает адрес и размер буфера.
2. Подпрограмма расчёта должна иметь соглашение STDCALL
3. Писать код нужно на FASM, в результате, должен получиться исполняемый exe файл. Входные данные можно захардкодить.
Написание кастомного MBR // ДЗ
изучить структуру MBR.
4 августа, 19:00 — 20:30
Лектор: Илья Панков
Домашние задания: 1
ДЗ
Кастомный MBR. Для простоты допускается нужно использовать виртуальную дискету, с которой ПК будет грузиться первоначально.




На проверку нужно прислать код и сомпилированную дискету (ну и сам пароль). Пароль нужно хранить в виде CRC32 хеш суммы.
Также, нужно прислать видео, демонстрирующее работу программы и её исходники.


Защищённый режим процессора
Важный модуль, без которого невозможно будет понять принцип работы руткитов. Модуль включает в себя фундаментальные принципы работы процессора.
Режимы работы процессоров. Принцип работы процессора в PM. Сегментная организация памяти // ДЗ
изучить новые возможности защищенного режима работы процессора;
понять его преимущества над реальным;
рассмотреть сегментную организацию памяти.
6 августа, 19:00 — 20:30
Лектор: Иван Квасенков
Домашние задания: 1
ДЗ
Билдер дескрипторов памяти. Написать программу (лучше на python, но можно и на других ЯП), которая на вход будет принимать:




1. Адрес расположения сегмента в физической памяти.
2. Размер - лимит сегмента.
3. Права (чтение/запись/исполнение) и будет возвращать сформированный дескриптор сегмента в виде hex дампа.
Страничная организация памяти // ДЗ
разобраться со способом трансляции страниц памяти;
понять устройство трансляции страниц памяти;
изучить принцип работы ВАП.
11 августа, 19:00 — 20:30
Лектор: Иван Квасенков
Домашние задания: 1
ДЗ
Перевод процессора в защищенный режим. При написании программы нужно создать три сегмента: сегмент кода, данных, стека.
Заполнить глобальную таблицу дескрипторов, корректным образом инициализировать регистр GDTR.
Типы дескрипторов
познакомиться с разными типами дескрипторов;
рассмотреть подробнее callgate.
13 августа, 19:00 — 20:30
Лектор: Иван Квасенков
Внутреннее устройство Windows
Данный модуль включает в себя изучение строения OS Windows. Модуль обязателен для успешного анализа руткитов.
Объекты ядра
понять устройство внутренних объектов ядра Window;
изучить такие объекты, как EPROCESS, ETHREAD.
18 августа, 19:00 — 20:30
Лектор: Иван Квасенков
Менеджер памяти
изучить способы выделения памяти в режиме ядра и режиме пользователя;
познакомиться с уровнями запросов прерываний (IRQL);
познакомиться с типами выделения памяти: подкачиваемая и неподкачиваемая.
20 августа, 19:00 — 20:30
Лектор: Иван Квасенков
Диспетчер ввода-вывода
понять, как работает абстракция объектов ядра;
научиться обрабатывать IRP пакеты.
25 августа, 19:00 — 20:30
Лектор: Иван Квасенков
Настройка рабочей среды для отладки драйверов режима ядра // ДЗ
настраивать среду для отладки драйверов режима ядра.
27 августа, 19:00 — 20:30
Лектор: Иван Квасенков
Домашние задания: 1
ДЗ
Драйвер завершения процесса. 1. Написать программу в режиме пользователя;
2. Написать драйвер;
3. Прислать исходники и билды.
Системное программирование
Модуль включает в себя информацию, которая необходима для анализа большинства вредоносных программ.
PE формат
понять общую структуру PE формата.
8 сентября, 19:00 — 20:30
Лектор: Артур Пакулов
Таблица импорта
понять назначение таблицы импорта;
изучить строение таблицы импорта.
10 сентября, 19:00 — 20:30
Лектор: Артур Пакулов
Таблица экспорта/Таблица релокаций // ДЗ
Понять принцип устройства таблицы релокаций;
Понять принцип устройства таблицы экспорта.
15 сентября, 19:00 — 20:30
Лектор: Артур Пакулов
Домашние задания: 1
ДЗ
Pe Loader. Реализовать простейший Pe Loader, который будет считывать с диска Pe (exe) из памяти и запускать его.
Pe-файл брать тот, который выдаёт MessageBox и скомпилирован на FASMЕ.




1. Должна происходить обработка таблицы импорта.
2. Должна происходить обработка таблицы релокаций.
Решение crackme
изучить подход к решению типовых crackme;
изучить инструменты анализа кода;
выявление типовых низкоуровневых конструкций кода в дизассемблере.
17 сентября, 19:00 — 20:30
Лектор: Артур Пакулов
Ловушки Windows
Изучить ключевые механизмы обмена и обработки сообщений Windows.
22 сентября, 19:00 — 20:30
Лектор: Александр Першин
Перехват WinApi функций
изучить три способа перехвата Api функций: подмена в IAT, EAT, метод спайсинга.
24 сентября, 19:00 — 20:30
Лектор: Александр Першин
Программирование Native приложений // ДЗ
познакомиться с Native подсистемой;
использовать функции ntdll библиотек, при написании программы.
29 сентября, 19:00 — 20:30
Лектор: Илья Панков
Домашние задания: 1
ДЗ
Сборка Native-приложения с помощью WDK. Необходимо собрать приложение dumpMbr.7z, установить его на виртуальную машину и перезагрузить её.




Вам нужно прислать:




- Собранный исполняемый файл.
- Скриншот запущенной программы.
Способы добавления в автозагрузку
изучить, как вредоносные программы прописываются в автозагрузку.
1 октября, 19:00 — 20:30
Лектор: Илья Панков
Программирование служб // ДЗ
изучить типы служб;
рассмотреть способ группировки служб.
6 октября, 19:00 — 20:30
Лектор: Илья Панков
Домашние задания: 1
ДЗ
Программирование службы. Службу нужно дописать так, чтобы на момент её загрузки она выполнила какие-то действия, к примеру: записала в корень диска C файл serv.log с произвольной информацией.




Служба должна запуститься в контексте процесса svchost. Этот процесс нужно будет сдампить и прислать дамп. Помимо этого нужно прислать исходники и билд самой службы.
КО: дамп, билд и исходники службы
Обратная разработка программ
Данный модуль посвящён изучению практических навыков анализа программ.
Динамический анализ кода // ДЗ
научить производить ручную распаковку программ.
15 октября, 19:00 — 20:30
Лектор: Илья Панков
Домашние задания: 1
ДЗ
Настроить безопасную среду на хостовой машине. 1. Настроить среду.
2. Прикрепить скриншот, доказывающий то, что у вас не запустился любой exe-шник (сообщение об ошибке запуска).
Статический анализ кода
научить определять формат файлов без расширения;
показать использование правильных утилит.
20 октября, 19:00 — 20:30
Лектор: Илья Панков
Разработка shell-кодов // ДЗ
научить анализировать shell-коды.
22 октября, 19:00 — 20:30
Лектор: Илья Панков
Домашние задания: 1
ДЗ
Написание шелкода. 1. Написать шелкод на ЯА, запускающий калькулятор.
2. Прислать исходник шелкода, его билд и запускатор.
Практическое занятие: ручная распаковка
разобрать на практике ручную распаковку файлов.
27 октября, 19:00 — 20:30
Лектор: Илья Панков
Практическое занятие: анализ эксплойта
разобрать в статике и динамике работу эксплойта.
29 октября, 19:00 — 20:30
Лектор: Илья Панков
Практическое занятие: анализ вредоносного образца
разобрать на практике процесс анализа на примере вредоносной программы.
5 ноября, 19:00 — 20:30
Лектор: Илья Панков
Уязвимость Buffer Overflow
понять корень проблемы уязвимости типа Buffer Overflow.
10 ноября, 19:00 — 20:30
Лектор: Илья Панков
Домашние задания: 1
ДЗ
Превратить poc в эксплойт. 1. Превратить poc от BoF_Simple.cpp в эксплойт, запускающий удалённо калькулятор.
2. Прислать исходники и билд самого эксплойта, а также запись видео, демонстрирующего успешную эксплуатацию.
Уязвимость UAF
понять причину уязвимости.
12 ноября, 19:00 — 20:30
Лектор: Иван Квасенков
Буткиты
изучить этапы инициализации компонентов буткита.
17 ноября, 19:00 — 20:30
Лектор: Иван Квасенков
Проектный модуль
Заключительный месяц курса посвящен проектной работе. Свой проект — это то, что интересно писать слушателю. То, что можно создать на основе знаний, полученных на курсе. При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей.
Выбор темы и организация проектной работы
выбрать и обсудить тему проектной работы;
спланировать работу над проектом;
ознакомиться с регламентом работы над проектом.
19 ноября, 19:00 — 20:30
Лектор: Илья Панков
Домашние задания: 1
ДЗ
Проектная работа. 1. Выбрать тему.
2. Утвердить тему в чате по ДЗ.
3. Презентовать проект.
Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
26 ноября, 19:00 — 20:30
Лектор: Илья Панков
Защита проектных работ
защитить проект и получить рекомендации экспертов.
10 декабря, 19:00 — 20:30
Лектор: Илья Панков

Преподаватель

Артур Пакулов
Ex-вирусный аналитик в Kaspersky Lab.
Специалист в области низкоуровневого программирования, обратной разработки и анализа вредоносного программного обеспечения. В период 12.2015 - 05.2017 — специалист по образовательным программам и преподаватель Образовательного департамента «Лаборатории Касперского». Преподаватель и методист-разработчик курсов и программ по направлениям: «Защита информации от вредоносного ПО», «Низкоуровневое программирование», «Профессиональный пентестинг». Программы, разработанные Пакуловым, включены в учебные планы российских и зарубежных университетов, в том числе МГТУ им. Н.Э. Баумана, МГУ им. М.В. Ломоносова. Преподаватель международных магистерских программ по информационной безопасности.

Навыки:
Низкоуровневое программирование,
Системное программирование,
Реверс-инжиниринг,
Анализ вредоносного ПО,
Веб-безопасность,
Программирование: Assembler, C/C++, Delphi, Python
Преподаватель курсов:
Reverse engineering

F.A.Q.: Наиболее часто задаваемые вопросы:

Нужно ли оплачивать обучение до Дня открытых дверей, если я хочу гарантированно попасть в группу?
Да, мы рекомендуем заранее оплатить обучение, чтобы гарантированно попасть в группу. В период проведения Дня открытых дверей резко возрастает количество желающих обучаться, поэтому может случиться так, что к окончанию Дня открытых дверей мест в группе не останется
Кто будет проводить День открытых дверей?
Проводить День открытых дверей будет преподаватель курса.
Как принять участие в Дне открытых дверей?
Для того, чтобы принять участие в Дне открытых дверей, оставьте свой e-mail в поле регистрации на мероприятие. Перед началом Дня открытых дверей мы пришлем вам ссылку, пройдя по которой, вы сможете присоединиться к вебинару.
Какие вопросы будем обсуждать на Дне открытых дверей?
На дне открытых дверей мы поговорим о проекте OTUS (о программе курса, почему мы не принимаем в группы новичков, почему учиться у нас интересно, но сложно), карьерных перспективах выпускников (почему вероятность карьерного роста у лучших студентов стремится к 100%), учебном процессе (оплатах, оценке знаний, сертификатах и прочих аспектах). Также ведущий мероприятия с радостью ответит на все ваши вопросы.