CSCI 1650 covers software exploitation techniques and state-of-the-art mechanisms for hardening software. The course begins with a summary of prevalent software defects, typically found in applications written in memory unsafe languages, like C/C++, and proceeds with studying traditional and modern exploitation techniques, ranging from classical code injection and code reuse up to the latest goodies (e.g., JIT-ROP, Blind ROP). For the most part, it focuses on defenses against certain vulnerability classes and the way(s) to bypass them. Students will be introduced to advanced software exploitation techniques and countermeasures, and study (in depth) the boundaries and effectiveness of standard hardening mechanisms, such as address space randomization and stack and heap protections.



10% Participation
60% Assignments (CTF-like write-ups)
10% Midterm
20% Final


This course would not be possible without the support and assistance of the following people:


  • Monday 3PM – 5:20PM (M hour)
  • CIT 368


Vasileios (Vasilis) Kemerlis

Teaching Assistants

Bessie Jiang (HTA)
  • echo @cs.brown.edu|sed 's/^/bjiang/'
  • CIT 203 (Thu. 7PM – 9PM)
Elisa Guerrant (TA)
  • echo egue^rran@cs.brown.edu|tr -d ^
  • CIT 203 (Wed. 6PM – 8PM)
Yujun Qin (TA)
  • echo @cs.brown.edu|sed 's/^/yqin/'
  • CIT 203 (Tue. 4PM – 6PM)


10/15/2018 Lecture 0x4 posted.
10/10/2018 Assignment 0x1 posted.
10/08/2018 No class today.
10/01/2018 Lecture 0x3b posted.
09/24/2018 Lecture 0x3a posted.
09/17/2018 Lecture 0x2 posted.
09/10/2018 Lecture 0x1 posted.
09/05/2018 Welcome to CSCI 1650!