【文章作者】: 安摧
本文没有什么东西,只是我在研究exploitme时候的一点心得。文章内容其实很少,所以冠名“小小琢磨”。
高手大致可以飘过。
但是我还是要邀请
combojiang大侠阅读一下本文;因为本文是对阁下的文章的改进。
失误之处敬请诸位大侠赐教!
呵呵!!!
昨天在研究看雪exploit me挑战赛中的exploitmeA例子的时候,仔细阅读了一下combojiang的答案。
文章见:http://bbs.pediy.com/showthread.php?t=57558
combojiang的shellcode确实不凡,包括查找kernel32.dll的位置,查找GetProcAddress和MessageBoxA函数的地址,加密解密shellcode.
但是有一个问题,shellcode最终不能使得程序安静的退出!
在文章中,作者构建shellcode的代码如下:
其中红色的代码是我做的修改。
修改的目的是显示标题为CTS,内容为CTS.AnCui的消息框,并且安静退出程序(ExitProcess)。
但是这个时候问题来了,缓冲区总长度为512个字节,可利用的长度为(512-200-4)=308个字节。
而shellcode和解密部分的加起来要有333个字节,不够了!!!
怎么办???
我的解决办法是修改从①开始到①结束位置的代码为:
跳转到00402005h地址执行。
为什么这样做呢???
用od打开文件exploitmeA,右键->查找->所有模块间调用:
会看到下面两行:
在exploitmeA中,00402005位置的代码:
在这里退出程序。
这下子大家理解了吧。
修改后的shellcode为(修改后shellcode总长度308)
总结:
毕设中,繁忙,偷着乐。