Welcome to Reversing: Secrets of Reverse Engineering. This software development projects that repeatedly required reverse engineering of third party code, for a variety of reasons. At first this was a fairly tedious process that was only performed when there was
simply no alternative means of getting information. Then all of a sudden, a certain mental barrier was broken and People found myself rapidly sifting through undocumented machine code, quickly deciphering its meaning and getting the answers people wanted regarding the code’s function and purpose. At that point it dawned on me that this was a remarkably powerful skill, because it meant that people could fairly easily get answers to any questions PEOPLE had regarding software people were working with, even when they had no access to the relevant documentation or to the source code of the program in question. This post is about providing knowledge and techniques to allow anyone with a decent understanding of software to do just that.
The idea is simple: we should develop a solid understanding of low-level software, and learn techniques that will allow us to easily dig into any program’s binaries and retrieve information. Not sure why a system behaves the way it does and no one else has the answers? No problem—dig into it on your own and find out. Sounds scary and unrealistic? It’s not, and this is the very purpose of this post, to teach and demonstrate reverse engineering techniques that can be applied daily, for solving a wide variety of problems. But I’m getting ahead of myself. For those of you that haven’t been exposed to the concept of software reverse engineering, a little introduction is in order.
What Is Reverse Engineering?
Reverse engineering is the process of extracting the knowledge or design blueprints from anything man-made. The concept has been around since long before computers or modern technology, and probably dates back to the days of the industrial revolution. It is very similar to scientific research, in which a researcher is attempting to work out the “blueprint” of the atom or the human mind. The difference between reverse engineering and conventional scientific research is that with reverse engineering the artifact being investigated is man made, unlike scientific research where it is a natural phenomenon. Reverse engineering is usually conducted to obtain missing knowledge, ideas, and design philosophy when such information is unavailable. In some cases, the information is owned by someone who isn’t willing to share them.
In other cases, the information has been lost or destroyed. Traditionally, reverse engineering has been about taking shrink-wrapped products and physically dissecting them to uncover the secrets of their design. Such secrets were then typically used to make similar or better products. In many industries, reverse engineering involves examining the product under a
microscope or taking it apart and figuring out what each piece does. Not too long ago, reverse engineering was actually a fairly popular hobby, practiced by a large number of people (even if it wasn’t referred to as reverse engineering). Remember how in the early days of modern electronics, many people were so amazed by modern appliances such as the radio and television set that it became common practice to take them apart and see what goes on
inside? That was reverse engineering. Of course, advances in the electronics industry have made this practice far less relevant. Modern digital electronics are so miniaturized that nowadays you really wouldn’t be able to see much of the interesting stuff by just opening the box.