裂痕发掘要领之静态扫描+经典栈溢出实例
副问题[/!--empirenews.page--]
这篇文章是关于裂痕发掘的一种要领—静态扫描隐藏伤害函数。为了使文章内容充分有干活,笔者在本身行使静态扫描发明的裂痕中选择一个经典栈溢出来讲授,包罗对该溢出的发掘进程,操作要领,shell?code结构等。
裂痕发掘的要领浩瀚,好比Fuzz,源码审计,二进制代码扫描等等。Fuzz属于动态要领,往往动态要领的都必要有一个较量全面的路径包围,以是必要较量高的自动化体系,实现本钱较量高。源码审计实现较量简朴,可是必要打仗到源代码,以是对很于第三方检测机构来说一样平常得不到源码无法回收这种要领。 接下来就是本日的主角了—二进制代码扫描:这种裂痕发掘要领的思绪就是扫描方针措施的二进制文件,通过PE文件说明,指令说明等来发明方针措施中存在的隐藏裂痕代码。最轻易想到的就是通过扫描PE文件的倒入表,查找是否存在伤害函数,这种扫描要领速率快,并且较量有用,可是也有弱点:检出率不高,存在漏掉,由于只能扫描到倒入表这一方面,而假如一些模块是行使了静态lib链接的话,那就也许直接把某些伤害函数嵌入了模块内部,倒入表中不存在。以是还必要加以指令说明的要领,可是指令说明的实现难度和本钱都较量高,由于要思量到全部的裂痕模式,这也导致了另一个弱点检测速率很是慢。 对付零星的裂痕发掘职员来说,没有经验和时刻来实现较量体系化的器材,可是倒入表的扫描这一点来嗣魅照旧较量轻易实现的。假如不闲贫困,找到一个措施目次,然后行使Dependency?Walker一个一个去查找倒入表,找到你以为伤害的函数,谁会有这么多体力呢……以是,动动小手写个器材吧,BinCodeAudit就此降生了。 BinCodeAudit是一个基于Python说话开拓的用于批量扫描措施导入的隐藏伤害函数的器材,该器材的最初计划布局如下图: 行使要领: 天生的陈诉行使HTML文件的方法: P2 这个项目已经在sf建设了版本,假若有乐趣的同窗可以申请一路插手开拓维护,假若有好的较量大成果想资助添加也接待找我拉取分支。 上面简朴先容了静态扫描器材的开拓,开拓器材不是目标,行使器材去找到更多的裂痕才是我们的目标,磨完刀就可以试一下了,我在这里选取Notepad++这个措施来做实例。 ?起首用我们的器材来扫描整个安装目次下的全部文件,以检测是否有方针函数,这里我们的方针函数选取了CRT库函数strcpy,wcscpy,以及Kernle32模块中的lstrcpyA/W,lstrcatA/W。然后直接启动扫获得扫描功效陈诉: 可以看到可以或许导致栈溢出的伤害函数照旧许多的,主措施内里只检测出来两个伤害函数,而其他的多半是notepad++的插件模块,看来Notepad++插件的开拓者孝顺的代码质量并不是很高。此刻选定一个方针,我们就以notepad++.exe这个措施中导入的lstrcpyW这个函数为靶子,然后就要开始说明白。 ?起首静态说明notepad++.exe看是否可以找到挪用lstrcpyW函数的处所行使了我们可以节制的数据作为源字符串参数的。可是……颠末行使IDA起源查察,该函数的挪用点太多,静态说明的要领必要淹灭太大的人力: 代码: bp?kernel32!lstrcpyW?"du?poi(@esp+8);g" (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |