裂痕发掘要领之静态扫描+经典栈溢出实例
然后要做的就是操纵Notepad++,而且调查调试器的输出了,这也是一个较量耗时的进程,必要有耐性,把Notepad++的各类按钮点一遍,必定可以找到我们必要找的,探求的进程在这里不具体说了,我直接说出一个场景,就是在行使Notepad++的插件CCompletion这个插件的Goto?identifier的时辰,如下图所示。在未选中任何字符串时,行使菜单插件-CCompletion-Goto?identifier这个成果,就会发明当前编辑地区的全部字符串都被选中而且被lstrcpyW这个函数处理赏罚了四次。 找到这个场景之后我们就可以进一步确认,lstrcpyW这个函数是否存在栈溢出的也许,输入很长的数据,然后看一下措施是否会出题目Crash。 可以看到,在第二次拷贝之后,措施Crash了,由于产生了AV非常,此刻已经根基可以断定这里存在溢出的也许了,可是还必要跟加深入的对这两次的挪用举办说明。下面要改换一下前提断点的判定前提了,只有当拷贝的源字符串是我们输入的字符串的时辰才断下: 代码: bp?kernel32!lstrcpyW?".if(poi(poi(@esp+8))=0x00420042)?{kv1;}?.else{du?poi(@esp+8);g;}" 由于我们选择的测试字符串是BBAAAAAA……以是只要判定源字符串的前4个字节是否为0x00420042就行了。然后一再我们适才的Crash场景。既然Crash是产生在第二次拷贝之后,以是我们必要看一下第二次拷贝之后栈的环境: 从以上环境可以看出,栈已经被我们的数据包围了,这里要有一点预先判定,假如栈溢出,那么在接下来的措施运行进程中必然会由于某一个ret指令导致栈中的数据进入eip寄存器,而且这个值应该是0x00410041,然后措施从0x00410041开始继承执行,思量到这一点我们就可以在0x00410x0041下一个断点,然后继承执行措施。
措施最终在0x00410041触发了断点,到这里,已经很是明晰了,措施产生了栈溢出,而且我们乐成挟制了EIP,下面我们要计较这个eip取到的0x00410041位于我们的数据中的偏移地点,也就是上层函数的返回地点在栈中存放的位置,还记得第二次拷贝字符串的时辰的方针地点么?没错是0x00135c7c,此时esp的值为0x1360b0,以是我们计较差值: (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |