| 主题 | 课程安排 | 
| 第一部分:C++程序安全概览  | 要点:从C++程序角度的安全定义,Top 25 Errors,CVE,资源 | 
| 第二部分:渗透测试基础 | 要点:Pentest,背景,测试过程,重要资源,Kali Linux, Metasploitable 2,
 BackBox,
 环境搭建,
 渗透测试的五大步骤,
 Metasploit Framework详细解析,
 主机入侵完整过程演示(利用IRC漏洞远程登录被攻克目标机),
 Armitage
 [试验一]使用MSF利用IRC的溢出漏洞入侵主机
 | 
| 第三部分:WinDBG精要 | 要点:WinDBG的命令类型,常用命令,命令语法,调试符号,符号文件的种类,符号服务器,定制调试事件的方法和重要的调试命令,
 软件断点、硬件断点,复杂的断点命令,
 x86寄存器和反汇编技巧
 [试验二] WinDBG基础(15分钟)
 | 
| 第四部分:栈和局部缓冲区溢出 | 要点:栈基础,栈帧,栈帧布局,栈指针被破坏(Stack pointer corruption.),
 局部缓冲区越界(Overruns),
 栈被破坏(Stack corruption.),
 缓冲区溢出攻击(BOA),
 实例演示,SQL Server案例,Win7案例,IRCDaemon案例,GS机制(基于Cookie的溢出检测机制),编译器的保护措施
 [试验三] 理解缓冲区溢出攻击(30分钟) | 
| 第五部分:异常处理和应用程序崩溃 | 要点:结构化异常处理(SEH),C++异常处理,Windows的异常奋发机制,
 程序崩溃的完整过程和调试方法,
 转储的基本知识,
 如何使用ADPLUS自动产生用户态转储,以及分析用户态转储的常用命令和技巧
 [试验四] JIT调试和异常事件处理(30分钟)
 | 
| 第六部分:多线程同步和死锁  | 要点:并发和并行,多线程,C++程序中创建线程的多种方法,
 在VC和WinDBG中观察和操纵线程的方法,
 使用WinDBG来调试多线程程序和同时调试多个进程,包括控制线程执行状态,临界区,观察同步对象、分析死锁的方法,
 案例演示,CPU的同步机制,互锁系列内建函数(intrinsic)
 | 
| 第七部分:堆和堆腐败 | 要点:C++程序中动态分配内存的多种方法(malloc, new, HeapAlloc),介绍调试内存有关的典型问题的方法和技巧,
 包括使用CRT堆和Win32堆的调试支持,
 分析内存泄漏、访问违例和栈溢出等,
 在探讨实践经验的同时会穿插重要的理论知识,
 包括Win32对和CRT堆的结构、内存管理常识、堆布局等,真实案例分析
 [试验五] 使用UMDH追踪堆的分配细节(30分钟)
 | 
| 第八部分:安全开发和威胁建模  | 要点:SDL(Security Development Lifecycle),SD3C,SDL定义的主要过程和最佳安全实践,Software Assurance Maturity Model (SAMM),TOP 25编程错误解析,
 常用建模方法概览(Trike 、OCTAVE 和P.A.S.T.A),
 威胁建模,Microsoft Threat Modeling过程,STRIDE,风险评级,
 微软Threat Modeling Tool 2016用法演示
 | 
| 第九部分:代码扫描 | 要点:源代码扫描和黑盒扫描,静态扫描的优势,
 Coverity介绍,
 工作过程,AST树,Checkers,
 三类事件,误报问题和函数建模,
 开源的扫描工具
 | 
| 第x部分:数字签名和代码完整性基础  | 数字签名的工作原理和有关的密码学基础,非对称加密,
 Key的保护和管理,
 Windows系统检查代码完整性的过程和有关的系统部件,对文件进行数字签名的工具和方法
 | 
| 第x部分:钩子和外挂  | 介绍钩子(Hook)技术的背景和简要历史,分析Windows平台上的常用钩子技术及其工作原理,
 包括DLL注入、IAT挂钩、消息挂钩等,
 然后针对保护键盘输入这一目标,
 讨论键盘输入的数据路径,
 防止按键被嗅探的方法
 |