欢迎来到天天文库
浏览记录
ID:30767509
大小:365.61 KB
页数:13页
时间:2019-01-03
《dll注入技术计算机病毒入侵与检测》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、计算机病毒入侵与检测DLL注入技术雷健龙DLL注入技术一、DLL简介1.DLL的特点DLL全称动态链接库(dynami-linklibrary),一直以来都是MicrosoftWindows的基石。Windows应用程序编程接口(applicationprogramminginterface,API)提供的所有函数都包含在DLL中。使用DLL不但是为了适应Windows平台的编程,更有其他便利之处:它们扩展了应用程序的特性由于DLL可以被动态地载入到进程的地址空间屮,应川程序可以在运行的时候检测应该执行何种操作,并在需要的时候载入DLL來执行这些操作。它们简化了项目的管理若在开发过程中让不同
2、的开发团队来开发不同的模块,那么项H将更加易于管理。但是应用程序应尽量少地发布文件,由于加载磁盘文件读取DLL是需要时间的。它们有助于节省内存如果两个或两个以上的应用程序使用同一个DLL,那么该DLL只需要载入内存一次,之后所有的应用程序就可以共享该DLL在内存中的页面。它们促进了资源的共享DLL能够包含诸如对话框模板、字符串、图标以及位图Z类的资源。多个应用程序可以使用DLL來共亨这些资源它们促进了本地化DLL常常用来对应用程序进行本地化。例如一个应用程序可以只包含代码但不包含用户界面组件,DLL用来存放本地化的用户界面组件,供应用程序载入。2.DLL的工作原理DLL通常由一组可供任何应用
3、程序使用的独立函数组成,DLL只不过是一组源代码模块,每个模块包含一些可供应用程序(可执行文件)或其他DLL调用的函数。在所有的资源文件编译完成后,链接器会像链接应用程序的可执行文件那样,对他们进行链接,但在创建DLL的时候,必须要给链接器指定DLL开关。这个开关会使链接器在生成的DLL文件映像屮保存一些与可执行文件略微不同的信息,这样操作系统的加载程序就能够将该文件映像识别为DLL,而不是应用程序。一旦进程调用了DLL,DLL就完全失去了其DLL的身份,而是和进程中的其他代码段一样,好比进程将其原本的空间中增加了这样的一段代码和数据一样,可以随意调用。在DLL中,还会有一个函数作为DLL入
4、口函数:BOOLWINAPIDIIMainfHINSTANCEhlnstDII,DWORDfdwReason,PVOIDflmpLoad);hlnstDII:包含该DLL实例的句柄。fdwReason:表示系统调用入口点的原因。flmpLoad:如果DLL是隐式载入的,那么不为零,若是显示载入,那么为零。fdwReason的值为以下四种之一:DLL_PROCESS_ATTACH:表示系统第一次将该DLL映射到进程的地址空间中。DLL_PROCESS_DETACH:表示系统将该DLL从进程的地址空间中撤销映射。DLL_THREAD_ATTACH:表示进程将创建一个线程。DLL_THREAD_D
5、ETACH:衣示进程将终止一•个线程。卜面会详细地讲述DLL的丄作方式:构建DLL:1.头文件,其中包含待导出函数的原型、结构和符号的声明2.C/C++源文件,其屮包含待导出函数的实现和变量3.编译器为每个C/C++源文件牛成.obj文件4.链接器将每个.obj模块合并,从而生成DLL5.如果至少导出了一个函数/变量,那么链接器会同时生成」ib文件.obj.obj.objC++C++C++构建EXE:1.头文件,其中包含待导出函数的原型、结构和符号的声切2.C/C++源文件,其中包含待导出函数的实现和变量3.编译器为每个C/C++源文件生成.obj文件4.链接器将每个.obj模块合并,若是隐
6、式载入时链接(implicitload-timelinking)则需要使用」ib文件來解析对导入的两数/变量的引用,从而生成.exe文件,若是显式运行时链接(explicitrun-timelinking)则不需要DLL的.lib文件即可生成.exe文件。.obj.obj.objC++C++C++(隐式载入时链接)运行应用程序:1.加载程序为.exe创建地址空间2.若为隐式载入时链接,则在加载程序时将必须的DLL载入到地址空间中,若为显式运行时链接,则由线程调用LoadLibrary(Ex)将DLL载入到进程的地址空间屮。DLL.exe3.使用VisualStudio2012创建DLL工程使
7、用VisualStudio2012创建DLL工程和理论中有些不同,因为vs2012为我们集成了创建DLL的步骤。创建一个Win32项目并选择DLL方式:VS2012会自动生成一系列DLL所需要的文件:巾解关方塞nWin32Project2rt(1个项目)/画Win32Project2鮑外鹹赖项‘E畑件»0stdafx.h0targetver.h/E舷件l>++dllmain.cpp*+stdafx.cpp++
此文档下载收益归作者所有