Bismillah
In this article we will review the foundational disciplines that must be learned before embarking on the field of reverse engineering. We have distilled this knowledge from several international references and formulated it into Arabic explanations and series that we published on the “Arabic Shell Network” (Shabakat Shill al-Arabiya), and we append them here along with the original references at the end of each section.
To begin, every field has fundamentals that cannot be overlooked, and learning them is an obligation, for they will be the launching point of the journey of empowerment that we strive toward, God willing.
Every science rests upon pillars.. and the pillars of our era are those that reside beneath the fortress of 0 and 1.
1. Programming
To be a developer or a researcher in this field, you must possess a strong programming background that enables you to understand how code flows (Control Flow).
And since, in reverse engineering, we will be dealing with software at a middle level close to hardware (Middle-Level), we must have experience with the C/C++ language, which we discussed in an extended series where we explained its most precise details.
🔗 C Programming Series on the Shell Network
Figure (1): Excerpt from the C programming lessons.
- 📚 Primary reference: C Programming Language (K&R)
2. Computer Architecture
Certainly, we cannot take anything apart in life without understanding its design and how it operates. Like the mechanic who services automobiles, one must have complete knowledge of how the vehicle operates from the moment of power-on to the moment of power-off.
We have therefore prepared a series explaining in detail how the computer operates, in order to build this deep understanding.
🔗 Computer Architecture Series on the Shell Network
Figure (2): Excerpt from the computer architecture lessons.
- 📚 Primary reference: Modern Computer Architecture and Organization
3. Operating Systems (OS Concepts)
Given our direct interaction with software, we must understand how the operating system interacts with processes (Processes), how it organizes them, and what role the processor and memory play therein. We have prepared a series explaining the most important matters that we must be familiar with in this regard.
🔗 Operating Systems Concepts Series on the Shell Network
Figure (3): Excerpt from the operating systems lessons.
- 📚 Primary reference: Operating System Concepts
4. Networking
With the existence of the internet, it has become very important that we realize and understand how things operate within networks, and how software (especially malicious software) communicates with the outside world.
This excellent series was prepared by my brother and mentor, Storm.
🔗 Networking Fundamentals Series on the Shell Network
Figure (4): Excerpt from the networking lessons by brother Storm.
5. Low-Level Programming
The most important matter in reverse engineering is learning and understanding Assembly code. Why? Because when reverse engineering any program, we are dealing with executable code in machine language (Machine Code), that is, it is represented in zeros and ones (Binary System).
But this code can be disassembled (Disassemble) so that it appears in a readable language, namely Assembly. We have therefore prepared a complete series dedicated to the x86 Assembly language.
🔗 x86 Assembly Language Series on the Shell Network
Figure (5): Excerpt from the x86 Assembly lessons.
- 📚 Primary reference: Assembly Language for x86 Processors
Conclusion
To be honest with you, upon completing the study of these matters, I will not tell you that you will have built a foundation that is 100% complete.
Knowledge is a vast ocean, and the more we drink from it, the more we thirst. But, God willing, by completing these series you will have finished 90% of the foundational knowledge required of you to begin strongly in this field.