基于windows平台的rootkit技术分析与应用-analysis and application of rootkit technology based on windows platform.docxVIP

  • 5
  • 0
  • 约6.17万字
  • 约 69页
  • 2018-05-18 发布于上海
  • 举报

基于windows平台的rootkit技术分析与应用-analysis and application of rootkit technology based on windows platform.docx

基于windows平台的rootkit技术分析与应用-analysis and application of rootkit technology based on windows platform

第二章 Rootkit 技术原理本章分别介绍了用户级 Rootkit 技术和内核级 Rootkit 技术相关的技术原理, 了解这些原理是理解与应用 Rootkit 核心技术的前提和准备工作,这些原理包括 用户级 Rootkit 技术原理、实时进程数据注入技术和内核级 Rootkit 技术原理、构 建 Windows 设备驱动程序等。用户级 Rootkit 技术原理本节介绍用户级 Rootkit 技术的相关原理,首先介绍了 DLL 基础,它是扩展 应用程序功能的有效方式,用户级 Rootkit 一般将自己的功能代码通过 DLL 方式 载入需要挂钩的目标进程中进行运作,而如何将自己的代码载入目标进程中则需 要利用实时进程数据注入技术。此外,本节还介绍了一个在 Rootkit 编程中常见 函数指针。DLL 基础(1)在应用程序中使用 DLL(动态链接库)的理由:通过运用 DLL,扩展了应用程序的特性,简化了项目管理,有助于节省内 存,也促进了资源的共享和本地化,并且可以解决不同操作系统平台间的差异, 所以 DLL 得到了广泛的应用。(2)关于 DLL 的概念: 一个地址空间是由一个可执行模块和多个 DLL 模块构成的。在创建 DLL 的时候,必须给链接器指定 DLL 开关。这个开关会使链接器在 生成的 DLL 文件映像中保存一些与可执行文件略微不同的信息。这样操作系统 的加载程序就能够将该文件映像识别为 DLL,而不会将它识别为应用程序。一旦系统将一个 DLL 的文件映像映射到调用进程的地址空间中之后,进程 中的所有线程就可以调用该 DLL 中的函数了。该 DLL 中的函数创建的任何对象 都为调用线程或调用进程所拥有。如果编译器看到一个变量、函数或 C++类是用 declspec(dllexport)修饰的, 那么它就知道应该在生成的 DLL 模块中导出该变量、函数或 C++类。相反,如 果可执行文件的变量或函数是使用 declspec(dllimport)修饰的,那么编译器就知 道该可执行文件的源文件需要从 DLL 模块中导入一些变量或函数。(3)构建 DLL 的步骤:首先创建一个头文件,在其中包含想要在 DLL 中导出的函数原型、结构以 及符号。为了构建该 DLL,DLL 的所有源文件都需要包含这个头文件。然后创 建 C/C++源文件来实现想要在 DLL 模块中导出的函数和变量。随后在构建该 DLL 模块的时候,编译器会对每个源文件进行处理并产生一个.obj 模块。当所 有.obj 模块都创建完毕后,链接器会将所有.obj 模块的内容合并起来,产生一个 单独的 DLL 映像文件。如果链接器检测到 DLL 的源文件输出至少一个函数或变 量,那么链接器还会生成一个.lib 文件。这个文件列出了所有被导出的函数和变 量的符号名。(4)导出与导入:在链接 DLL 的时候,链接器会检测到这些与导出的变量、函数或类有关的 嵌入信息(由 declspec(dllexport)修饰),并生成一个.lib 文件。这个.lib 文件列 出了该 DLL 导出的符号。在链接任何可执行模块的时候,只要可执行模块引用 了该 DLL 导出的符号,那么这个.lib 文件当然是必需的。除了创建这个.lib 文件 之外,链接器还会在生成的 DLL 文件中嵌入一个导出符号表。这个按字母顺序 排列的导出段列出了导出的变量、函数和类的符号名。链接器还会保存相对虚拟 地址(RVA),表示每个符号可以在 DLL 模块中的何处找到。如果编译器看到一个变量、函数或 C++类是用 declspec(dllimport)来修饰 的,那么它会知道应该从某个 DLL 模块中导入该符号。其实在导入符号的时候, 不必使用 declspec(dllimport)关键字,而可以直接使用标准 C 语言的 extern 关键 字。但是,如果编译器能够提前知道我们引用的符号是从一个 DLL 的.lib 文件中 导入的,那么它将产生略微高效的代码。当链接器在解决导入符号的时候,会在 生成的可执行模块中嵌入一个特殊的段,它的名字叫导入段。导入段列出了该模 块所需的 DLL 模块,以及它从每个 DLL 模块中引用的符号。(5)DLL 隐式链接和显式链接:应用程序导入函数与 DLL 文件中的导出函数进行链接有两种方式:隐式链 接和显式链接。所谓的隐式链接是指在应用程序中不需指明 DLL 文件的实际存 储路径,程序员不需关心 DLL 文件的实际装载。而显式链接与此相反。采用隐式链接方式,程序员在建立一个 DLL 文件时,链接程序会自动生成 一个与之对应的 LIB 导入文件。该文件包含了每一个 DLL 导出函数的符号名和 可选的标识号,但是并不含有实际的代码。LIB 文件作为 DLL 的替代文件被编 译到应用程

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档