前言:
在网上关于ShellCode编写技术的文章已经非常之多,什么理由让我再写这种 技术文章呢?本文是我上一篇溢出技术文章<Windows 2000缓冲区溢出技术原理>的姊妹 篇,同样的在网上我们经常可以看到一些关于ShelCode编写技术的文章,似乎没有为初学者准 备的,在这里我将站在初学者的角度对通用ShellCode进行比较详细的分析,有了上一篇的溢出 理论和本篇的通用ShellCode理论,基本上我们就可以根据一些公布的Window溢出漏洞或是自 己对一些软件系统进行反汇编分析出的溢出漏洞试着编写一些溢出攻击测试程序.
文 章首先简单分析了PE文件格式及PE引出表,并给出了一个例程,演示了如何根据PE相关技术查 找引出函数及其地址,随后分析了一种比较通用的获得Kernel32基址的方法,最后结合理论进 行简单的应用,给出了一个通用ShellCode.
本文同样结合我学习时的理解以比较容易 理解的方式进行描述,但由于ShellCode的复杂性,文章主要使用C和Asm来讲解,作者假设你已 具有一定的C/Asm混合编程基础以及上一篇的溢出理论基础,希望本文能让和我一样初学溢出 技术的朋友有所提高.
[目录]
1,PE文件结构的简介,及PE引出表的分 析.
1.1 PE文件简介
1.2 引出表分析
1.3 使用内联汇编写一个通用的 根据DLL基址获得引出函数地址的实用函数
GetFunctionByName
2,通用 Kernel32.DLL地址的获得方法.
2.1 结构化异常处理和TEB简介
2.2 使用内联 汇编写一个通用的获得Kernel32.DLL函数基址的实用函数
GetKernel32
3,综合 运用(一个简单的通用ShellCode)
3.1 综合前面所讲解的技术编写一个添加帐号及开 启Telnet的简单ShellCode:
根据第2节所述技术使用我们自己实现的 GetFunctionByName获得LoadLibraryA和GetProcAddress函数地址,再使用这两个函数引入所 有我们需要的函数实现期望的功能.
4,参考资料.
5,关键字.
-------- --------------------------------------------------------------