- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
0x1 题目描述
此题要求用模型检测的方法实现一个二进制程序的 挖掘系统。需要各位自己写一个
带有栈溢出的 demo 程序,最后在 SPIN 平台上检测出这个自己构造的栈溢出 。
做题者需要提供具体实现过程并形成报告!
0x2 题目指导
第一步:自己编写含有栈溢出的简单 demo 程序,并编译成 exe 。
平台:Windows 系统,系统版本不限
语言:c 语言
编译器:不限。但要 release 版本、VS 编译时注意关闭 GS 等保护机制、最好关闭优化
注意:demo 不要太复杂。能体现栈溢出即可!
第二步:利用BAP 将exe 转化为 BIL 代码。
BAP 是一个二进制分析平台,其可以将机器码转化为一种解释性中间语言。这种中间
语言被称为 BIL 。关于 BAP 、BIL 以及如何转化,具体见:
提示:1.BAP 使用 版本,安装时注意与 OS 版本的兼容
2.转化只需要 toil 命令即可!
第三步:自己编写Python ,将BIL 代码转化为能在 SPIN 上运行的 Promela 代码。
SPIN 是一个模型检测平台。Promeal 是一种能在 SPIN 上执行的模型语言,类 c 语言,
但不是程序语言!关于 SPIN 和 Promela ,具体见:
h /spin/whatispin.html
的目标是:自己写 Python 代码,将 BIL 代码转化为 Promela 代码,并在 Promela
代码中添加 assert 来判断是否有栈溢出 存在!
需要自己用 Python
实现转化
Binary BAP BIL il2pml Promela
.exe .il .pml
检测出
SPIN
栈溢出
图1 检测流程图
0x3 原理解释
由于 编写的 exe 中含有栈溢出 ,如果 BIL 成功转化为 Promela ,则在 SPIN 上
运行 Promela 后会检测出这个构造的栈溢出 。
SPIN 平台本身不具有检测 的功能,它仅仅是一个动态执行的环境。能检测出
是因为 在转化过程中添件了判断 是否存在的断言。以栈溢出 为例: 可以在
Promela 代码中的添加断言——判断函数返回地址是否被覆盖。如果被覆盖,则有栈溢出漏
洞存在;如果函数返回地址没有被覆盖,则可能没有栈溢出 。
注:以上的 检测只是一个思路。不管用什么方式,请按图 1 过程,用 SPIN 将自己
构造的栈溢出 检测出来!
问题,或想深入探讨,请联系胡老师或者达生
胡老师:
达生:2869580942 ( )
原创力文档


文档评论(0)