都是自己编的VS2003代码格式欢迎大家指点改正

开发 后端
让我们想像一下:如果我们可以把VS2003代码通过操作导入表thunks将导入函数的入口点(thoroughfare)重定向到我们的指定的例程,用我们的例程过滤导入(消息)就成为可能。

 本人介绍下注入VS2003代码到PE,文件格式的Import Table(导入表,也有译为“引入表”)技术,其也被称为API重定向技术,这些都是通过平时的学习和实践中得出的结果。

让我们想像一下:如果我们可以通过操作导入表thunks将导入函数的入口点(thoroughfare)重定向到我们的指定的例程,用我们的例程过滤导入(消息)就成为可能。此外,我#t#们可以通过这个功能实现安排给我们适当的例程,VS2003代码专业的Portable Executable (PE) Protectors正是这么来做的,另外一些种类的rootkits使用这个方法通过一个特洛伊木马嵌入其恶意代码到受害者。在反向工程世界里,我们称之为:API重定向技术,然而我不准备通过源代码描述这个领域的所有观点,本文只是通过一个简单代码介绍一下这个技术的概况。我将描述这个源代码中没有的其他一些问题;我不能公开这些代码,原因是其关系到一些商业项目或可能会被怀有恶意者利用,然而我想本文可以被用来作为一个关于该主题的入门。

进入导入表

PE文件格式包括:MS-DOS header、NT headers、Sections headers和Section images(译注:正如很多技术读物上一样,其实header可以译为“头”,image可译为“映像”,但本文正文在不影响理解的前提下尽量保留原文术语,以免误解。)正如你在下图中所看到的。MS-DOS header是自DOS时代到Windows时代在所有微软可执行文件格式(executable file format)公有的。NT headers的思想来源于UNIX系统的Executable and Linkable Format (ELF),当然Portable Executable (PE)格式是Linux Executable and Linkable Format (ELF)的姐妹。PE 格式包括"PE" Signature、Common Object File Format (COFF) header、Portable Executable Optimal header和Section headers。

Portable Executable 文件格式结构

在Portable Executable Optional header,有一些数据目录(data directories)描述了当前进程在虚拟内存中主信息表(the principal information tables)的相对位置和大小。这些表可以有关于VS2003代码资源的信息、import(导入)、export(导出)、relocation(重定位)、Debug(调试)、thread local storage(线程本地存储)和COM运行时。没有导入表想要找到一个PE可执行文件是不可能的;

该表包含DLL的名称和Functions(函数)名称,这些是当程序意图通过它们的虚地址来请求(调用)它们时所必需的。在Console executable files(控制台可执行文件)中没有发现资源表(resource table);然而它是拥有Graphic User Interface (GUI)的Windows可执行文件的至关重要的部分。导出表(export table)在一个动态链接库想要导出它的函数到外界时是必需的,并且它也在OLE Active-X容器中。Dot NET虚拟机在没有COM+ runtime header下时不能被执行。正如你看到的VS2003代码,在PE格式中每个表都有特定的委派任务。

 Data Directories(数据目录)

  1. PIMAGE_NT_HEADERS pimage_nt_headers = ImageNtHeader(pImageBase);  
  2. DWORD it_voffset = pimage_nt_headers->OptionalHeader.  
  3. DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;  
  4. PIMAGE_DOS_HEADER pimage_dos_header = PIMAGE_DOS_HEADER(pImageBase);  
  5. PIMAGE_NT_HEADERS pimage_nt_headers = (PIMAGE_NT_HEADERS)  
  6. (pImageBase + pimage_dos_header->e_lfanew);  
  7. DWORD it_voffset = pimage_nt_headers->OptionalHeader.  
  8. DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress 
责任编辑:chenqingxiang 来源: domisou
相关推荐

2009-12-15 13:39:43

2009-11-25 13:22:49

VS2003代码

2009-11-25 09:26:39

VS2003代码

2009-12-01 13:10:29

VS2003压缩代码

2009-11-30 09:27:38

VS2003源代码

2009-11-30 09:16:44

VS2003源代码

2009-11-27 08:59:29

VS2003配置文件

2009-12-18 10:10:49

VS 2003程序

2009-12-09 13:41:04

VS 2003 报错

2009-11-26 13:55:35

VS2003源代码

2009-11-25 13:41:53

使用VS2003

2009-12-11 13:41:18

2009-11-30 13:51:28

2009-12-09 16:52:51

VS 2003插件

2009-11-30 15:57:18

VS2003 MFC

2009-11-26 09:42:38

VS2003插件

2009-11-25 13:57:25

VS2003发布

2009-12-01 13:38:30

VS2003快捷键

2009-12-01 17:55:11

VS2003配置

2009-11-26 13:05:39

VS2003断点
点赞
收藏

51CTO技术栈公众号