您当前的位置: 首页 > 

顺其自然~

暂无认证

  • 1浏览

    0关注

    1317博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

dll延迟加载

顺其自然~ 发布时间:2021-12-29 17:14:13 ,浏览量:1

在开发程序的时候,通常会使用第三方库。但是,并不是所有的第三方库都会提供静态库文件,大多数会提供动态库DLL文件。这样,程序需要相应的DLL文件才能加载启动。

本节介绍一种被病毒木马广泛使用的DLL延迟加载技术,使用延迟加载方式编译链接可执行文件。这样可执行程序就可以先加载执行,所依赖的DLL在正式调用时再加载进来。

这样做的好处是可以把必需的DLL文件以资源(类似于图片)形式插入到程序中,并使用DLL延迟加载技术延迟加载。在正式调用必需的DLL之前,程序都是可以正常执行的。程序可以在这段时间内,把资源中的DLL释放到本地,等到正式调用DLL的时候释放的文件就会正确地加载执行。这样当使用程序的时候,只需把exe文件发送给用户,而不需要附加DLL文件了,也不需要担心程序会丢失DLL文件。

实现原理

本程序以加载第三方库——skin++库为例进行讲解演示。首先导入skin++库文件,然后编码,最后对程序编译链接生成exe可执行文件。使用PE查看器PEview.exe查看可执行文件的导入表,便可知道可执行文件必需的DLL文件了。可执行程序导入表如图2-3所示。 从图2-3所示的可执行程序导入表可以知道,导入表中有SkinPPWTL.dll文件,也就是说,在程序加载运行的时候,SkinPPWTL.dll文件必须存在,否则程序会因为加载SkinPPWTL.dll文件失败而不能正常启动。

DLL延迟加载技术的原理,就是从导入表中去掉SkinPPWTL.dll这一项,等到正式调用DLL的时候,才会加载DLL文件。这样,程序在正式调用DLL之前,都是可以正常执行的。 其中,DLL延迟加载的实现并不需要任何编码,只需要对VS开发环境中的链接选项进行手动设置即可。本程序使用的是VS 2013开发环境,下面对skin++库的例子进行讲解。 DLL延迟加载的具体设置步骤为: 属性-->链接器-->输入-->延迟加载的DLL-->输入:SkinPPWTL.dll 延迟加载的设置界面如图2-4所示。

程序经过上述设置后,DLL延迟加载就完成了。这时,再次编译链接生成新的exe可执行程序,并用PEview.exe查看可执行程序的导入表信息。这时的导入表已没有SkinPPWTL.dll的信息了。

小结

DLL延迟加载技术不需要编码来实现,只需对VS开发环境设置链接器即可完成。DLL延迟加载技术,配合资源释放技术,可以使程序变得更加方便易用。 本节使用第三方库skin++库作为演示实例,如果读者对该库比较陌生的话,可以对照本节相应的配套代码来练习,也可使用自己熟悉的第三方库,操作步骤都是相同的。本节对应的演示程序包括skin++的换肤代码、DLL延迟加载以及资源释放技术。接下来,就为读者单独剖析病毒木马广泛使用的资源释放技术。

安全小贴士

在PE结构中, DLL延迟加载的信息存储在ImgDelayDescr延迟导入表中,可以通过数据目录DataDirectory中的IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT项获取延迟导入表RVA相对的偏移地址和数据大小。

关注
打赏
1662339380
查看更多评论
立即登录/注册

微信扫码登录

0.0498s