Using attack patterns, real code, and example exploits, students learn techniques that are used by real malicious hackers against software. The author team show to break code--if students want to protect software from attack, they must first learn how real attacks are really carried out.