Reverse Engineering is a mechanism for maintenance and improvisation of the software over time. Reverse Engineering is used to find bugs and vulnerabilities in a software by analyzing the underlying blocks of code. This mechanism also helps in reducing the replication of unintended code reducing the overall costing for testing and maintenance.
Hackers and Crackers use Reverse Engineering to find the vulnerabilities in any Operating System. Hackers use the Reverse Engineering to search to find weaknesses in a program. Good people also use it to search if there are any flaws in their software.