This site contains lessons which provide a practical, exercise-based approach to learning to reverse engineer modern 64-bit Intel ASM binaries. This course is unique because it approaches the problem backwards - you will first write increasingly complex C programs and then decompile them in order to fully understand how C becomes assembly.
A selection of lessons which teach the very fundamentals of the x64 assembly language by writing applications and then disassembling them. These lessons will provide you with a foundational skillset to reverse engineer a huge number of binaries.
An introduction into how the concept of variables in high level languages are represented in ASM, and some of the typical-use conventions surrounding those variables. Additionally we'll cover CPU flags, which help provide the CPU with context on how to execute subsequent instructions.
In this lesson we'll learn the building-block mnemonics that every ASM program uses. MOV
and CALL
etc.
In this lesson we'll cover how variables and data are persisted when registers are all in use, and how to interact with the stack from ASM.
In this lesson we'll cover what a stack frame is, how the RBP register works along with how applications know where to return to when a function return
s
In this lesson we'll cover how mathematical operations like PEMDAS are represented in ASM, along with some of the more confusing intricacies of this system
In this lesson we'll cover some elegant ways to perform mathematical operations on data without PEMDAS and we'll investigate the logical operators available to us in ASM.
This lesson will demonstrate how conditional branching is performed in ASM. After this lesson you will have almost all of the tools needed to be an amazing reverse engineer
This lesson will demonstrate how iteration is achieved in ASM, including how high level language do / for / while
loops are implemented. After this lesson you will officially have enough ASM knowledge to go off and start reverse engineering non-trivial products!
The final and most challenging lesson in this fundamentals course - floating point numbers. Strap in, things are going to get weird.
This appendix will cover the stuff which didn't neatly fit into the other lessons, stuff like endianness, REP STOS
and some cool GDB commands to make your life easier.
A small selection of challenge binaries have been created, graded by difficulty to reverse engineer.