,

plutus

 

Expert in IC, IT, Web, Languages & Others

 

 

Software Reverse Engineering

Software Reverse Engineering

Reverse engineering is a process where an engineered artifact (such as a car, a jet engine, or a software program) is deconstructed in a way that reveals its innermost details, such as its design and architecture. This is similar to scientific research that studies natural phenomena, with the difference that no one commonly refers to scientific research as reverse engineering, simply because no
one knows for sure whether or not nature was ever engineered.

In the software world, reverse engineering boils down to taking an existing program for which source-code or proper documentation is not available and attempting to recover details regarding its’ design and implementation. In some cases source code is available but the original developers who created it are unavailable.

Here I will deal specifically with what is commonly referred to as binary reverse engineering. Binary reverse engineering techniques aim at extracting valuable information from programs for which source code is unavailable. In some cases it is possible to recover the actual source-code (or a similar high-level representation) from the program binaries, which greatly simplifies the task because reading code presented in a high-level language is far easier than reading low-level assembly language code. In other cases we end up with a fairly cryptic assembly language listing that describes the program.

Reverse engineering is particularly useful in modern software analysis for a wide variety of purposes.

 

Software Anti-Reverse Services

 

For software and applications developers, the situation is just the opposite: they want their software and applications reversing-proof. There are plenty of choices, and strategies, such as in-process code encryption and binary protection etc, and there are many encryption and packing algorithms, techniques and tools available, at various sophistication, degree of protection, cost and usability. The software developers are advised to select the right strategies, methods and tools, according to their needs and budgets.