Skip to content
Licensed Unlicensed Requires Authentication Published by De Gruyter Oldenbourg March 20, 2012

Reverse Code Engineering — State of the Art and Countermeasures

Reverse Code Engineering — Stand der Technik und aktuelle Gegenmaßnahmen
Carsten Willems and Felix C. Freiling

Abstract

Reverse Code Engineering (RCE) is, loosely speaking, the process of analyzing a piece of code in order to understand it. RCE is often used to analyze proprietary, binary programs, and in the last few years this research area has evolved a lot. In this article, we survey and structure the area of reverse code engineering. We focus on different techniques to recover both the control and data flow of a given binary program, for which no source code is available. Furthermore, we also discuss analysis techniques for malicious software (short: malware), which is commonly protected to resist analysis. We present the current state of the art of such protection techniques, while dividing them into active and passive measures. Our survey focusses on reverse engineering of binary native code for the Intel/AMD x86 architecture, and we thus disregard analysis of byte-code like Java or .NET. Nevertheless, most of the techniques presented in this article can be transferred to other architectures and operating system as well.

Zusammenfassung

Reverse Code Engineering (RCE) ist die Analyse von Binärprogrammen mit dem Ziel, deren Semantik zu verstehen. Traditionell wird dabei vor allem proprietäre Software untersucht, für die kein Sourcecode verfügbar ist. In letzter Zeit hat es jedoch eine enorme Ausweitung auch auf andere Einsatzgebiete gegeben. In diesem Bericht werden die verschiedenen Bereiche und Einsatzgebiete vorgestellt und eine Strukturierung vorgenommen. Dabei wird im ersten Teil auf die verschiedenen Methoden zur Rückgewinnung von Kontroll- und Datenfluss unbekannter Software eingegangen. Im zweiten Teil werden ausführlich die verschiedenen Schutzmaßnahmen behandelt, die von Programmen eingesetzt werden, um sich einer solchen Analyse zu entziehen. Der Fokus liegt dabei in der Analyse von Binärcode für die Intel/AMD x86 Architektur. Daher wird das Gebiet der heutigen Bytecode-Sprachen wie Java or .NET vernachlässigt. Die vorgestellten Methoden und Verfahren lassen sich jedoch problemlos auch auf andere Hardware- und Software-Architekturen übertragen.


* Correspondence address: Ruhr-University-Bochum, Chair for Systems Security, Universitätsstr. 150, 44780 Bochum,

Published Online: 2012-03-20
Published in Print: 2012-04

© by Oldenbourg Wissenschaftsverlag, Bochum, Germany

Scroll Up Arrow