What is Reverse Engineering (precisely)?
Software reverse engineering is the art and process of understanding the intricacies of your own and commercial software at a lower level than the compiler, a fuller definition can be found here. Many reversers focus initially on the various protection schemes used by software writers to disable or otherwise prohibit the full use of their software since this is a convenient (if somewhat legally dubious) starting point with a definite challenge and end point. I personally however have used the knowledge I have gained through ‘reversing’ to : i). Produce my own custom tools for circumventing / identifying protections. ii). Recover usable source code to lost projects. iii). Identify and understand how specific functionality is implemented. iv). Debug hard to find errors. v). Perform analysis of potentially hostile programs. Sometimes reverse engineering can be the only way out of a development tight spot, however it is not a decision to be taken lightly. Reverse Engineering is NOT crackin