【文章标题】: shellcode之小小琢磨
【文章作者】: 安摧
【作者邮箱】: at20042004@163.com
【作者QQ号】: 365188572
【软件名称】: exploitmeA
【下载地址】: pediy
【编写语言】: vc++
【使用工具】: OD,VC98
【操作平台】: winXP
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
本文没有什么东西,只是我在研究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)
总结:
毕设中,繁忙,偷着乐。
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年02月27日 19:51:36