目录
一、课程设计题目	
二、课程编码:130681	
三、学时学分	
四、先修课程	
五、课程设计任务与要求	
六.实验过程	
1.利用字符串匹配进行同源性检测	
2.利用控制流程图CFG进行源代码同源性检测	
3.跨语言同源性检测验证	
4.栈缓冲区溢出检测	
5.堆缓冲区溢出检测	
6.整数宽度溢出检测	
7.整数运算溢出检测	
8.整数符号溢出检测	
9. 格式化字符串漏洞检测	
10  空指针引用	
一、课程设计题目
基于源代码的软件同源性分析与漏洞检测系统
二、课程编码:130681
课程性质:必修
三、学时学分
学时:2周
学分:1学分
四、先修课程
C语言、汇编语言、数据结构、软件安全
五、课程设计任务与要求
下述任务可以自己选择Windows或者Linux平台实现,检测的源代码可以为c/c++/Java.跨语言同源性为c语言与其它语言的对比检测。
(1)在Linux下面使用gcc编译.
(2)Win7/Win10,VC++(VS2013/VS2015),QT,Python
本次课程设计要求设计与完成从界面、算法到系统优化等各个环节内容,形成完整的软件系统。在任务中,必做部分为R1-R6,是所有同学必须完成的部分,是本课程设计考核合格所需要的基本构成,选做部分根据自己的擅长做出最好的成果。
具体任务如下:
  
    
      | 
       序号 
       | 
      
       任务(必须完成的) 
       | 
      
       要求 
       | 
    
    
      | 
       R1 
       | 
      
       提供系统界面 
       | 
      
       所有功能要有图形界面展示,形成完整的软件系统.可以使用VS/QT/Python等工具实现。 
       | 
    
    
      | 
       R2 
       | 
      
       利用字符串匹配进行同源性检测 
       | 
      
       通过代码有效字符串对比匹配,分析样本之间的拷贝比率 
       | 
    
    
      | 
       R3 
       | 
      
       利用控制流程图CFG进行源代码同源性检测 
       | 
      
       通过提取代码的调用关系图,检测样本之间各个函数调用关系图是否相似,得出相似的概率 
       | 
    
    
      | 
       R4 
       | 
      
       栈缓冲区检测 
       | 
      
       根据栈缓冲区原理分析分配的栈数据区是否存在溢出的问题,给出可疑代码行数与列数。 
       | 
    
    
      | 
       R5 
       | 
      
       格式化字符串漏洞检测 
       | 
      
       根据格式化字符串漏洞原理分析使用的格式化函数是否存在溢出的问题,给出可疑代码行数与列数。 
       | 
    
    
      | 
       R6 
       | 
      
       提供样本库 
       | 
      
       提供漏洞检测与同源性检测样本库,样本数量不少于10个,每个代码行数不少于100行;每种漏洞至少一个。 
       | 
    
    
      | 
       以下为2选1: 
       | 
    
    
      | 
       A1 
       | 
      
       跨语言同源性检测验证 
       | 
      
       在软件版权保护中,有时候需要检测是否参考了有版权的代码,换用一种语言实现同样的功能,本功能可以通过CFG检测实现,但需要给出4个以上不用语言的同源性分析样本。 
       | 
    
    
      | 
       A2 
       | 
      
       支持分布式任务调度 
       | 
      
       需要设计一个主控,多个进程/主机并发检测。 
       | 
    
    
      | 
       以下为6选4: 
       | 
    
    
      | 
       B1 
       | 
      
       堆缓冲区检测 
       | 
      
       根据堆缓冲区原理分析分配的数据区是否存在溢出的问题,给出可疑代码行数与列数。 
       | 
    
    
      | 
       B2 
       | 
      
       整数宽度溢出检测 
       | 
      
       根据整数宽度溢出原理分析分配的数据是否存在溢出的问题,给出可疑代码行数与列数。 
       | 
    
    
      | 
       B3 
       | 
      
       整数运算溢出检测 
       | 
      
       根据整数运算溢出原理分析分配的数据是否存在溢出的问题,给出可疑代码行数与列数。 
       | 
    
    
      | 
       B4 
       | 
      
       整数符号溢出检测 
       | 
      
       根据整数符号溢出原理分析分配的数据是否存在溢出的问题,给出可疑代码行数与列数。 
       | 
    
    
      | 
       B5 
       | 
      
       空指针引用 
       | 
      
       根据课堂学习其它溢出原理是否存在空指针引用的问题,给出可疑代码行数与列数。 
       | 
    
    
      | 
       B6 
       | 
      
       竞争性条件 
       | 
      
       给出竞争性条件存在的代码位置。 
       | 
    
    
      | 
       以下2选1: 
       | 
    
    
      | 
       C1 
       | 
      
       同源性检测样本库 
       | 
      
       样本数大于等于50个,每个代码行数不少于100行,包含1-100行相同代码。 
       | 
    
    
      | 
       C2 
       | 
      
       漏洞检测样本库 
       | 
      
       样本数大于等于50个,每个代码行数不少于100行;每种漏洞至少一个。 
       | 
    
  
六.实验过程
界面部分可以VS/QT/Python等工具实现,样例省略,下面为具体任务功能的例子供参考。