This is a 3-month master degree level reverse engineering introduction course covering both theory and practice.
For some reason, the GitHub PDF viewer does not properly visualize some of the modules. It is recommended to download the PDFs and visualize them with your local PDF viewer.
Modules 6, 7, and 8 are developed by pancake. Module 9 is developed by zlowram, giomismo, and myself for an r2con training 2017 IIRC.
The contents of the course follow:
- Introduction to Memory Architecture
- The Basics
- Processors / CPUs
- IA-32 Memory Management
- Addresses
- Flat Memory Model
- Segmented Memory Model
- IA-32 Operation Modes
- Real Mode
- Protected Mode
- IA-32 Segmentation
- IA-32 Paging
- Page Address Extension (PAE)
- Page Address Translation Process
- Introduction to Memory Protection
- Protection Through Segmentation
- Protection Through Paging
- Reality
- Homework
- Hands-on: Kernel Debugging for Segmentation and Paging Analysis in IA32
- The Basics
- Binary File Formats
- Binary Files
- The Basics
- PE Binary Format
- DOS/MZ Header
- PE Header
- File Header
- Optional Header
- Section Headers
- Imports
- Import Directory
- Import Descriptor
- Exports
- Resources
- Thread Local Storage (TLS)
- Relocations
- ELF Binary Format
- Headers
- ELF Header
- Program Header
- Section Header
- ELF Headers Analysis
- Imports & Exports
- Resolving Imports
- ELF vs PE
- Appendices
- Hands on: Finish all exercises in this module
- Binary Files
- Introduction to Static Analysis
- Introduction
- The Tools
- Identify Binary
- Imports
- Exports
- Strings
- Others
- File Entropy
- Packers
- Malicious Indicators
- Understanding Instruction Set Architectures
- The Basics
- x86 & x64
- Workflow
- General Purpose Registers, Assignments
- radare2, gcc, main_x86
- radare2, Visual C++, main.exe (x86) - Debug Mode
- radare2, Visual C++, main.exe (x86) - Release Mode
- Fast Recap
- radare2, gcc, main_x86 - Stripping Symbols
- Extra Instructions for Assignments
- radare2, Visual C++, main.exe (x64) - Release Mode
- Arithmetics
- Control Flow (with IDA Pro)
- Some Nested Conditions (debugging with x64dbg)
- Some Mystery
- Stack Operations
- Functions
- Stack Frames
- Calling conventions, x86
- Stack Frames
- Final Thoughts
- Homework
- Malware Analysis
- Adversary Tactics, Techniques, and Procedures
- Introduction
- Attack Taxonomy
- Cyber Kill Chain
- MITRE ATT&CK
- Defense in Depth
- MITRE ATT&CK
- Persistence
- Privilege Escalation
- Defense Evasion
- Credential Access
- Discovery
- Lateral Movement
- Execution
- Collection
- Exfiltration
- Command and Control
- Homework
- Hands on: Extracting Wannacry IOCs through Static Analysis
- Introduction to Dynamic Analysis
- Introduction
- The Tools
- Inspecting Processes
- Registry / File Changes
- DNS Resolution
- Monitor All the Things
- Ready to Use Solutions
- Homework
- Adversary Tactics, Techniques, and Procedures
- Introduction to non-Intel Architectures (by pancake)
- Introduction
- Spectre & Meltdown
- [CR]ISC
- Where are They?
- ARM
- MIPS
- PowerPC
- SPARC
- AVR
- Relative Code
- Endianness
- Toolchains
- De-Compilers
- Manual Inspection
- Intermediate Languages
- ESIL
- Dynamic Analysis
- Process State
- Problem Solvers
- Forensics from the Reverse Engineering Perspective (by pancake)
- Forensics?
- Acquisition
- Partitions & FileSystems
- SleuthKit
- RAM
- Volatility
- R2K
- Network
- Carving
- Yara
- Binwalk
- Visualization
- DataStructs;
- Searching
- Diffing Data
- Vulnerability Research (by pancake)
- Bugs…
- I found a bug!
- Types of Bugs
- Techniques
- Dynamic Testing
- Fuzzing
- Classification
- Finding 1-days
- Healing bins
- CrashLogs
- Introduction to unpacking using r2 (by zlowram, giomismo, newlog)
- Introduction
- Useful r2 commands for unpacking
- Techniques and samples
- Locky
- Dridex Dropper
- UPX #1
- UPX #2
- UPX #3
- Dealing with the IAT
- R2SCYLLA
- Partial Exam, Final Exam, Recovery Exam