This document discusses reverse engineering, which involves determining how a product works by analyzing it without prior knowledge of its design or requirements. It covers the definition of reverse engineering, why it is needed such as for software maintenance, and its scope and tasks. Different approaches to reverse engineering are presented, such as restructuring and design recovery. Finally, examples of reverse engineering tools for Java like decompilers are provided.