Prerequisites: CS 645 or CS 646 or CS 696 or ECE 638 or approval of the instructor. This course covers advanced techniques that can be used for offensive or defensive goals in network, computer systems and applications. The course follows a ?learning by doing? teaching approach through extensive use of virtual machines with vulnerable operating systems and applications. Topics covered include system memory organizations, CPU registers, assembly language fundamentals, GNU and Immunity debuggers, fuzzing based security testing development of local and remote Linux and Windows exploits, shellcode development, stealthy attacks, bypassing memory protection techniques, network and wireless hacking techniques, and ethical and legal implications of cyber-attacks.