Beginner's Practical R.E Course.

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.

Who wrote this » Full intro » Prerequisites »

ASM Fundamentals Lessons.

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.

1 - Registers and CPU Flags

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.

Start lesson »

2 - MOVing on to the basics of assembly

In this lesson we'll learn the building-block mnemonics that every ASM program uses. MOV and CALL etc.

Start lesson »

3 - The stack

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.

Start lesson »

4 - Stack frames

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 returns

Start lesson »

5 - Mathematical operations

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

Start lesson »

6 - Binary mathematics and the logical operators

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.

Start lesson »

7 - Conditional statements

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

Start lesson »

8 - Loops

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!

Start lesson »

9 - Floating point numbers

The final and most challenging lesson in this fundamentals course - floating point numbers. Strap in, things are going to get weird.

Start lesson »

999 - Appendix: The junk drawer

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.

Start lesson »


Challenges.

A small selection of challenge binaries have been created, graded by difficulty to reverse engineer.

Start challenges »