This document discusses code obfuscation techniques used to protect intellectual property and hide malicious code. It describes general obfuscation methods like control transformations, computation transformations, and data abstraction obfuscation. Specific techniques are outlined like opaque predicates, inheritance modifications, variable splitting, and method inlining/cloning. Code obfuscation aims to complicate reverse engineering but cannot completely prevent it, and it decreases performance. When used judiciously, obfuscation provides some protection against theft and malware insertion.