Purpose: The purpose of the Assembly I set of modules is to introduce basic reverse engineering by starting from the simplest C program and adding to it until we have a nontrivial program to reverse engineer.
By the end of the Assembly I modules you should be comfortable with the following:
- x86, x86_64, and ARM assembly language.
- Identifying C/C++ language constructs in a given snippet of assembly language.
- Reverse engineering a nontrivial program in C or C++.
- Familiarity with the tools associated with reverse engineering
- Debuggers, Disassemblers, command line tools.
- Determine what compiler was used to compile a given binary.
The text for Assembly I is Reverse Engineering for Beginners by Dennis Yurichev. I highly recommend checking out his other materials also. The book and materials are free so the author certainly deserves our thanks as well.
My suggestion is to do what works best for your understanding of the material. That said I suggest you read the suggested text and identify the sections of the text relevant to the module you are working with. Don’t worry about going through the material more than once to get it completely down.
These modules are designed to give you a starting point. Experiment with the tools and binaries in each module. Make changes to the program and see what happens in the assembly.
These modules will not show you how to solve a crackme right away, at least a non-trivial one. They are designed to build up an understanding of binaries and reverse engineering them. Not just exploiting them. While there will be some security material in these modules it is not the main point of Assembly I.