前言:
在网上关于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,关键字.
----------------------------------------------------------------------
一,PE文件结构及引出表基础
1,PE文件结构简介
PE(Portable Executable,移植的执行体),是微软Win32环境可执行文件的标准格式(所谓可执行文件不光是.EXE文件,还包括.DLL/.VXD/.SYS/.VDM等)
PE文件结构(简化):
-----------------
│1,DOS MZ header│
-----------------
│2,DOS stub │
--------
---------
│3,PE header │
-----------------
│4,Section table│
-----------------
│5,Section 1 │
-----------------
│6,Section 2 │