软件安全实验.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件安全实验

软件安全实验二 实验报告 班 级: 学 号: 姓 名; 指导教师: 实验二 恶意软件特征代码法检测 1. 实验目的 1.1掌握基于特征匹配的误用检测技术原理和方法 1.2掌握基于双数组-AC算法的多模式特征匹配算法实现 1.3利用构建的自动机扫描目标文件 2. 实验内容 2.1流程图 2.2构建自动机所定义的数据结构 struct out 输出函数的链表结构体 struct total 记录边数与状态数的结构体 struct AC 存储自动机的邻接表 struct NEXT NEXT表的结构体 2.3构建自动机所使用的函数 void init_AC(AC* A,int n) 初始化自动机的邻接表 AC* CreatAC(AC *A,total t) 创建自动机的邻接表 void init_ne() 初始化NEXT表函数 NEXT* CreatNEXT(AC A[],total t) 创建NEXT表,同时创建BASE表,CHECK表 void outfun(char *output[],AC *A,total t,out *head) 创建输出函数 void Failure(AC *A,total t,out *head) 创建失效函数 AC* depthfun(AC *A,total t) 计算各状态的深度 void print(AC *A,total t,int *f,out *head) 读取测试文本并输出检测结果 2.4转向函数、失效函数、输出函数的构建过程 1. 转向函数 转向函数通过NEXT,BASE,CHECK来实现。由于邻接表存储了所有节点,因此循环查找所有头节点,若next不为NULL说明不是叶节点,可计算NEXT。若为叶节点则查找下一个状态,知道所有状态都查找过则推出。创建NEXT表的过程先从根节点开始,一层一层的创建,同时计算BASE表中的值,并填充CHECK表中的值,每一层结束后在遍历左侧的邻接表进行下一层的NEXT表创建,知道全部状态创建完成为止。Next为转向函数表(数组、链表),下标是位置偏移量,输出是状态值。Base表(数组),下标是状态值,输出是Base值。Next表中当前状态为s,输入为c时,假设应跳转为状态t,状态t在Next表中的位置=状态S的位置+状态S的Base值+输入c的ASCII码值。Check表(数组),下标是状态值,输出是下标状态的父状态的值。在创建的过程中,每一层的状态可能要作为下一层状态的父状态,因此在邻接表中记录NEXT中的pos,存储在AC中,方便最后特征码的检测。 2.失效函数 为了计算深度为d的s状态的失效函数值,我们考虑深度为d-1的状态r,存在某个输入a,使得g(r, a) = s。执行以下步骤来创建失效函数: Step1:state = f(r)。 Step2:f(s) = g(state, a) 其中a根据CHECK表得出,并现先行确定初始状态和第一层失效状态的失效函数为f(s)=0。 3.输出函数 输出函数以链表的方式储存。要求遍历所有从根状态到叶状态的通路,在每个分支节点处将此状态压栈,在遍历完这一个分之后弹栈,并遍历此状态的另一分支,同时在进行到每一节点的同时将字符压栈,并与模式集进行比较,若存在此模式则链接到输出链表上。在每一个状态不仅要比较本身的字符串与模式集,还需要比较此状态的失效状态字符串与输出链表,最终创立一个单向链表,保存所有需要的输出函数 。 2.5建立的NEXT,BASE,CHECK表检测结果 NEXT表中数据 BASE CHECK数据 以及失效函数 检测结果 TEXT.TXT TEXT.TXT sheishisboyfriendandheisabadguyandhisdoyishers RESULT.TXT RESULT.TXT he 3 she 3 his 8 he 22 his 37 he 44 she 44 hers 46 从以上结果可以看出,NEXT BASE CHECK建立成功,数值正确,失效函数建立无误,检测结果经检查无误。 由此,双数组AC的实现成功。 3.程序源代码 #include iostream #include stdio.h #include stdlib.h #include stack #include string.h using namespace std; #define max 256 typedef struct out { char s[10]; int id; struct out *next; }out; typedef struct total { int n; int e; }total; typedef struct AC

文档评论(0)

a888118a + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档