С++ - широко применяемый в индустрии программирования язык, который на сегодня остаётся одним из самых популярных среди всех, когда-либо созданных. Его сферой применения является системное программирование, написание прикладных программ, драйверов устройств, программ-прошивок, высокопроизводительных серверных и клиентских программ, развлекательных программ (видеоигр) и т.д. Этот модуль включает 32 упражнения и 4 теста.
- Необходимое программное обеспечение: Visual Studio Express Edition for C++ или Eclipse IDE for C++
- Рекомендуется к прочтению: Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching, 3rd Edition By Robert Sedgewick
Языки ассемблера представляют собой семейство низкоуровневых языков программирования компьютеров, микропроцессоров, микроконтроллеров и других (в основном) интегрированных устройств. Они осуществляют символьное представление числовых машинных кодов и других констант, требуемых для программирования определённой архитектуры центрального процессора. Это представление обычно определяется производителем аппаратного обеспечения. В его основе лежат сокращения (именуемые мнемоникой), которые помогают программисту запомнить конкретную инструкцию, регистр и т.д. Таким образом, язык ассемблера специфичен для каждой определённой архитектуры физического или виртуального компьютера (в отличие от большинства высокоуровневых языков программирования, которые отлично портируются). Этот модуль включает 17 упражнений и три теста.
- Необходимое программное обеспечение: MASM32, Visual Studio Express Edition for C++ вместе с Irvines Setup
- Рекомендуется к прочтению: Assembly Language for Intel-Based Computers, 5th Edition by Kip Irvine
Анализ модулей, написанных на языках высокого уровня
(HLL – High Level Language)
Здесь мы сосредоточимся на упражнениях, связанных с анализом модулей, которые были написаны с применением высокоуровневых языков программирования. В этом модуле мы научимся идентифицировать специфические для высокоуровневых языков структуры данных и узнаем, как они выглядят на языке ассемблера в дизассемблере/отладчике. Модуль включает 96 упражнений.
- Необходимое программное обеспечение: IDA Pro 4.9 (Free Edition)
- Рекомендуется к прочтению: Intel® 64 and IA-32 Architectures Software Developer’s Manuals, Assembly Language for Intel-Based Computers, 5th Edition by Kip Irvine, Calling conventions for different C++ compilers and operating systems by Agner Fog, The IDA Pro Book by Chris Eagle
- Содержание: идентификация переменных, идентификация констант, операторы присваивания, арифметические операторы, модульная арифметика, сложные выражения, инкремент и декремент, реляционные операторы и операторы равенства, логические операторы, условные операторы, оператор «запятая», поразрядные операции, явное преобразование операторов, sizeof, очерёдность выполнения операторов, условная конструкция if … else, цикл while, цикл do-while, цикл for, выражение break, выражение continue, выражение goto, функция exit, структура выбора switch, локальные переменные, глобальные переменные, регистровые переменные, явная передача глобальных переменных, передача аргументов через регистры, передача аргументов с плавающей точкой в функцию, передача аргументов по значению, передача аргументов по ссылке, значения по умолчанию в качестве параметров, перегруженные функции, встроенные функции, вызов функции через указатель, инициализация массивов, доступ к элементам массива, многомерные массивы, массивы как параметры, последовательности символов, использование последовательностей символов с завершающим нулём, оператор ссылки, оператор разыменовывания, объявление типизированных указателей, указатели и массивы, инициализация указателей, арифметика указателей, указатели на указатели, указатели типа void, нулевые указатели, указатели на функции, оператор new, оператор delete, структуры, массивы структур, указатели на структуры, вложенные структуры, typedef, typedef2, объединения, множества, классы, конструктор, деструктор, перегруженные конструкторы, конструктор по умолчанию, указатели на классы, перегрузка операторов, указатель this, статические члены класса, дружественные функции, дружественные классы, наследование между классами, наследование, множественное наследование, указатели на базовый класс, виртуальные члены, абстрактные базовые классы, шаблоны функций, шаблоны классов, объявление шаблона, нетипизированные параметры шаблона, исключения, стандартные исключения, исключения выделения памяти, преобразования типов.
Не всегда необходимо использовать специализированные утилиты для анализа кода. В большинстве случаев, всё, что вам нужно – это ваши мозги. Упражнения по ручной декомпиляции позволят выработать навыки по чтению и пониманию кода. Для повышения ваших навыков мы будем использовать методы Cognitive Debugging™. Вашей задачей будет анализ приведенных примеров и переписывание их на С++. Этот модуль включает 9 упражнений.
- Необходимое программное обеспечение: ваши мозги.
- Рекомендуется к прочтению: Intel® 64 and IA-32 Architectures Software Developer’s Manuals, Assembly Language for Intel-Based Computers, 5th Edition by Kip Irvine
Формат исполняемых файлов
Одного лишь анализа кода недостаточно. Вы должны хорошо понимать, как устроены двоичные файлы, и как они используют ресурсы операционной системы. В этом модуле вы изучите внутреннюю работу двоичных файлов, их структуру и ещё много информации, связанной с ними. Данный модуль содержит 31 упражнение.
- Необходимое программное обеспечение: IDA Pro 4.9 (Free Edition)
- Рекомендуется к прочтению: The PE file format by Luevelsmeyer
Анализ алгоритмов
Упражнения этого модуля научат вас понимать алгоритмы, располагающиеся внутри двоичных файлов. Задания данного модуля не содержат обфускации или шифрования, в них есть лишь немного математики. Целью этого модуля является понимание математических процессов, протекающих внутри исполняемого файла. Обычно эти процессы являются общими для многих участков программы. Этот модуль включает 9 упражнений.
- Необходимое программное обеспечение: IDA Pro 4.9 (Free Edition)
- Рекомендуется к прочтению: Assembly Language for Intel-Based Computers, 5th Edition by Kip Irvine
Анализ сбоев
Не все программы спроектированы хорошо. В некоторых случаях они могут завершиться аварийно без каких-либо уведомлений, и вам нужно будет выяснить, почему это произошло. В ходе этого модуля вы узнаете, как локализовать место аварии и научитесь более эффективно это делать. Этот модуль включает 5 упражнений.
- Необходимое программное обеспечение: IDA Pro 4.9 (Free Edition)
- Рекомендуется к прочтению: Assembly Language for Intel-Based Computers, 5th Edition by Kip Irvine
Анализ защиты от копирования
Одним из заданий данного курса является исследование защит от копирования. Это может быть достаточно трудным делом, поскольку вы должны понимать задачу также хорошо, как и защита. Так как исследование защиты от копирования приближено к исследованию стопроцентного «чёрного ящика», этот модуль даёт вам первое представление о том, как самому выполнять тесты механизмов, построенных по такому принципу. Основной упор в данном модуле сделан на анализ алгоритмов. Но, кроме того, вы узнаете, как самому разработать защиту от копирования. Этот модуль будет содержать (когда будет укомплектован до конца) 50 упражнений.
- Необходимое программное обеспечение: IDA Pro 4.9 (Free Edition)
- Рекомендуется к прочтению: нет рекомендаций по данному модулю.
- Содержание: 01 – Patching a basic reverseme, 02 – Keyfiling a basic reverseme, 03 – Basic nag removal and header problems, 04 – File Format Exercise, 05 – Splish 1, 06 – Splish 2, 07 – Fixme, 08 – Google, 09 – Capture, 09.1 – CHALLENGE, 10 – Confuzed, 11 – Calc, 12 – Little Math, 13 – emesrever, 14 – FunnyKeyReg, 15 – Old Days, 16 – Easy Crackme Game, 17 – SecView, 18 – ImportExport, 19 – Harder Serial in VB, 20.1 – Exportme, 20.2 – Consolences, 21 – XORcise, 22 – Fsearch, 23 – Jumpy, 24 – mmfmaker, 25 – String, 26 – MakeMyDay, 27 – Anit, 28 – TheFlea, 29 – Kryptonite, 30 – EasyCrack, 31 – UnlockMe, 32 – Mad Bad Boy, 33 – Serial Killer, 34 – CronosHardCrackme, 35.1 – SmartCard, 35.2 – Flames, 36 – ProofMe, 37 – SETI, 38 – ChainFission, 39 – XorSehRE, 40 – PHP, 41 – flyAkite, 42 – DanceForMe, 43 – TheBug, 44 – Mission Impossible, 45 – ReversersStegoFriend, 46 – Limbada, 47 – LogonGenetic
Анализ зловредного ПО
Анализ зловредного ПО важен для каждого исследователя двоичного кода. Мы начнём с нескольких маленьких .com/.exe вирусов, а закончим достаточно сложными и защищёнными вредоносными программами, среди которых будут черви, боты и руткиты. Этот модуль содержит 15 упражнений.
- ВНИМАНИЕ! Публичная версия файлов для закачки недоступна.
- Необходимое программное обеспечение: IDA Pro 4.9 (Free Edition)
- Рекомендуется к прочтению: Malicious Cryptography: Exposing Cryptovirology by Adam Young
Анализ уязвимостей
Важной работой для исследователя бинарников является анализ безопасности. В этом модуле мы разберёмся с многочисленными уязвимостями и узнаем, что такое эксплоиты и шеллкоды. Модуль включает 39 упражнений.
- Необходимое программное обеспечение: IDA Pro 4.9 (Free Edition)
- Рекомендуется к прочтению: The Shellcoder’s Handbook: Discovering and Exploiting Security Holes by Jak Koziol et al.
Распаковка
Важно уметь распаковывать программы, особенно если вы хотите научиться справляться с вредоносными программами или защитами от копирования. В этом модуле вы узнаете, что из себя представляет распаковка, познакомившись с её теоретическими основами и простыми примерами.
- Необходимое программное обеспечение: IDA Pro 4.9 (Free Edition)
- Рекомендуется к прочтению: нет рекомендаций по данному модулю.
Оптимизация С++
Данный модуль посвящён оптимизации программ, написанных на С++, и, в первую очередь, будет полезен продвинутым программистам, использующим этот язык программирования. Будут рассмотрены: выбор компилятора и среды разработки, поиск «узких» мест в алгоритмах, эффективность различных конструкций языка С++, многоядерные системы, распараллеливание и векторная оптимизация, процессорная диспетчеризация, эффективные шаблоны контейнеров классов. Модуль включает 20 упражнений.
- Необходимое программное обеспечение: Visual Studio Express Edition for C++ или Eclipse IDE for C++
- Рекомендуется к прочтению: Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching, 3rd Edition By Robert Sedgewick, Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms by Agner Fog
Оптимизация на ассемблере
Данный модуль будет интересен профессиональным программистам-ассемблерщикам и разработчикам компиляторов. Обсуждаемые темы: ассемблерные вставки и ассемблирование отдельных модулей. Линковка оптимизированных ассемблерных процедур с программами, написанными на языке высокого уровня. Изготовление библиотек подпрограмм, совместимых с различными компиляторами и операционными системами. Оптимизация по скорости и размеру. Доступ к памяти. Циклы. Векторное программирование (XMM, SIMD). Процессорно-зависимая оптимизация и процессорная диспетчеризация.
- Необходимое программное обеспечение: MASM32, Visual Studio Express Edition for C++
- Рекомендуется к прочтению: Assembly Language for Intel-Based Computers, 5th Edition by Kip Irvine, Optimizing subroutines in assembly language: An optimization guide for x86 platforms by Agner Fog
Расширение функциональности IDA Pro с помощью скриптов и плагинов
IDA Pro объединяет в себе интерактивный, программируемый, мультипроцессорный дизассемблер и отладчик, позволяющий отлаживать программы как на локальной, так и на удалённой машинах. Более того – функциональность этого программного продукта может быть расширена с помощью среды разработки плагинов. Также IDA Pro содержит законченную среду разработки, состоящую из мощного макросоподобного языка программирования. Этот язык может использоваться для автоматизации повторяющихся задач низкого и среднего уровня сложности. Для более сложных задач можно использовать открытую архитектуру плагинов, практически ничем не ограничивающую деятельность стороннего разработчика. Модуль содержит 10 упражнений.
- Необходимое программное обеспечение: IDA Pro 5.4 + SDK
- Рекомендуется к прочтению: IDA Plug-In Writing in C/C++ by Steve Micallef, The IDA Pro Book by Chris Eagle



Thanks
