Petter Djupfeldt and Lucas Taubert

Learning Reverse Engineering

Abstract

Reverse engineering is the process of translating compiled programs to source code, and analyzing the resulting code. It is useful, since without knowing the inside of a program it is very difficult to build onto it, create software that can interact well with it, or simply create a similar program of your own.

The challenge of reverse engineering lies within the fact that a lot of information contained within the source code of a program is destroyed in the compilation process, and re-obtaining it is done through different kinds of analyses, of which some are discussed within.

To delve into this subject, we tried to reverse a few applications and games with different approaches, tools and methods, to find out how the most information could be acquired.

We found a set of methods that were optimal to us, and allowed us to modify a computer game both in runtime, and to edit the compiled bytecode to completely change the game's behaviour. The methods require some knowledge about software engineering, but they provide a good framework for a beginner to start reversing on their own.