| 
 主题 
 | 
 课程安排 
 | 
| 
 第一部分: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挂钩、消息挂钩等, 
然后针对保护键盘输入这一目标, 
讨论键盘输入的数据路径, 
防止按键被嗅探的方法 
 |