前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows黑客编程技术详解 --2.2 DLL延迟加载(内含赠书福利)

Windows黑客编程技术详解 --2.2 DLL延迟加载(内含赠书福利)

作者头像
用户1631416
发布2019-05-07 11:37:45
1.6K0
发布2019-05-07 11:37:45
举报
文章被收录于专栏:玄魂工作室

本文经原作者授权,节选自《Windows黑客编程技术详解》一书。文末有福利哦!!

-----------------------------------------------------------------

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

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

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

2.2.1 实现原理

本程序以加载第三方库——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的信息了。

2.2.2 小结

DLL延迟加载技术不需要编码来实现,只需对VS开发环境设置链接器即可完成。DLL延迟加载技术,配合资源释放技术,可以使程序变得更加方便易用。

本节使用第三方库skin++库作为演示实例,如果读者对该库比较陌生的话,可以对照本节相应的配套代码来练习,也可使用自己熟悉的第三方库,操作步骤都是相同的。本节对应的演示程序包括skin++的换肤代码、DLL延迟加载以及资源释放技术。接下来,就为读者单独剖析病毒木马广泛使用的资源释放技术。

安全小贴士

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 玄魂工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.2.1 实现原理
  • 2.2.2 小结
  • 安全小贴士
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档