🌐 Overview
Reverse engineering is the art and science of understanding software without source code, serving as the foundation for vulnerability research, malware analysis, protocol recovery, and legacy system maintenance. This course treats reverse engineering not as a collection of disassembly tricks but as a systematic engineering discipline grounded in computer architecture, compiler theory, and operating system internals. You will move beyond static analysis of simple binaries to master dynamic instrumentation, binary lifting, and symbolic execution techniques that scale to real-world protected software. The curriculum emphasizes practical mastery over theoretical taxonomy, focusing on reconstructing high-level logic from optimized machine code, identifying compiler-generated patterns across GCC/Clang/MSVC, and automating analysis workflows with frameworks like Ghidra, IDA Pro, and Angr. Each concept is anchored in production scenarios: unpacking obfuscated malware, recovering proprietary network protocols, auditing closed-source firmware for security flaws, or interoperating with undocumented Windows/Linux APIs.
We also address the evolving landscape of reverse engineering in the era of AI-assisted analysis and heterogeneous architectures. You will learn to leverage LLMs for decompilation refinement, apply taint tracking and concolic testing to explore complex state spaces, and adapt techniques for ARM64/RISC-V/WebAssembly targets increasingly common in IoT and cloud environments. The course covers legal and ethical boundaries, responsible disclosure practices, and integration with CI/CD pipelines for automated binary auditing. By combining deep low-level knowledge with disciplined methodology, this module ensures your skills translate directly to solving problems where documentation is absent, trust is limited, and correctness is non-negotiable.
🗺️ Learn Path
The curriculum progresses systematically from foundational binary analysis to advanced automated reasoning, integrating theory with hands-on lab exercises throughout.
- Phase 1: Binary Fundamentals & Static Analysis Mastery
- Master x86-64/ARM64 assembly, calling conventions, and compiler optimization patterns to recognize high-level constructs in disassembly.
- Navigate ELF/PE/Mach-O formats, symbol tables, and relocation entries to understand linking and loading behavior.
- Use Ghidra/IDA Pro effectively: define data types, rename functions, apply FLIRT signatures, and write custom scripts to accelerate analysis.
- Phase 2: Dynamic Instrumentation & Runtime Behavior Extraction
- Attach debuggers (GDB/x64dbg) and trace syscalls/library calls to observe runtime state without modifying binaries.
- Employ dynamic binary instrumentation (Frida/DynamoRIO) to hook functions, redirect control flow, and extract encrypted payloads at runtime.
- Analyze anti-debugging/anti-tamper protections and develop countermeasures using hardware breakpoints and timing-resistant techniques.
- Phase 3: Automated Reasoning & Symbolic Execution
- Lift binaries to intermediate representations (LLVM IR/VEX) for cross-architecture analysis and transformation.
- Apply symbolic execution (Angr/Triton) to solve path constraints, generate test inputs, and prove absence of vulnerabilities.
- Integrate SMT solvers and taint engines to track data flow through complex obfuscation and encryption layers.
- Phase 4: Specialized Targets & Production Workflow Integration
- Reverse engineer firmware images, kernel modules, and hypervisor components with awareness of privileged execution contexts.
- Recover network/file format specifications using grammar inference and differential fuzzing against reference implementations.
- Build reproducible analysis environments with Docker/QEMU and document findings using standardized reporting templates.
🎯 Goals
- Achieve fluency in reading and interpreting optimized machine code across multiple architectures and compilers.
- Develop competency in combining static, dynamic, and symbolic techniques to overcome modern protection mechanisms.
- Gain proficiency in automating repetitive analysis tasks and validating hypotheses with empirical evidence.
- Cultivate ethical rigor and methodological discipline when analyzing software without authorization or documentation.
👥 Suitable
- Security researchers transitioning from application-layer pentesting to binary exploitation and vulnerability discovery.
- Malware analysts seeking deeper understanding of obfuscation, packing, and anti-analysis techniques.
- Embedded/firmware engineers maintaining or securing legacy systems with lost source code or incomplete documentation.
- Software developers aiming to understand competitor implementations, recover protocols, or audit third-party libraries.
Course Outline
- Lesson 01-Reverse Engineering Overview and Computer Fundamentals
- Lesson 02-C++ Programming Fundamentals
- Lesson 03-Reverse Engineering Tools
- Lesson 04-Reverse Engineering Environment
- Lesson 05-Static Analysis Techniques
- Lesson 06-Dynamic Analysis Techniques
- Lesson 07-Malware Reverse Analysis
- Lesson 08-Code Decompilation and Reconstruction
- Lesson 09-Packing and Unpacking Techniques
- Lesson 10-Encryption and Decryption Analysis
- Lesson 11-Firmware Reverse Engineering
- Lesson 12-Scripted Analysis
- Lesson 13-Automated Tool Development
- Lesson 14-Application of Machine Learning in Reverse Engineering
- Lesson 15-Reverse Engineering Practical Cases
- Lesson 16-Vulnerability Mining and Exploitation
- Lesson 17-Cross-Platform Reverse Engineering
- Lesson 18-Comprehensive Project





