Windows PE 第八章 延迟加载导入表

来源:互联网 发布:数控车g73编程实例详解 编辑:程序博客网 时间:2024/06/06 08:56

延迟加载导入表

    延迟加载导入表是PE中引入的专门用来描述与动态链接库延迟加载相关的数据,因为这些数据所引起的作用和结构与导入表数据基本一致,所以称为延迟加载导入表。

    延迟加载导入表和导入表是相互分离的。一个PE文件中可以同时存在这两种数据,也可以单独存在一种。延迟加载导入表是一种特殊类型的导入表。同导入表一样,它记录了应用程序想要导入的部分或全部动态链接库及相关函数信息。与导入表不同的是,它记录的这些动态链接库并不会被操作系统的PE加载器加载,只有等到由其等级的相关函数被应用程序调用时,PE中注册的延迟加载函数才会根据延迟加载导入表中对该函数的描述,动态加载相关链接库并修正函数VA地址,,实现对函数的调用。

8.1 延迟加载导入表的概念及其作用

    写代码时静态加载了XXX.dll,如果这个DLL不在,那么当进入主函数之前就会先弹错误窗:


    主函数入口的那个 main start不会被输出,注意这个特点,可以利用这个东西进行代码加密,然后在DLL的入口函数里进行内存解密就OK了,有点像之前说的那么TLS的思路。

如果延迟加载了,就会在调用的时候去找这个东西。


如果没采用延迟加载的反汇编代码是这样的:


采用了延迟加载的是这样:


还有其他很多特征,比如如果采用了延迟加载,在导入的函数的dll里是没有下面的那个的:


    然后说下作用,这个姿势有很多应用的,平时我只是拿来免杀什么的,其实注意一点,要是免杀的话这个效果不如直接动态加载,因为虽然导入表里看不到了,PE头里面有一个延迟加载导入表结构的,貌似是这个:


先不管那些,说下正经的应用:

(1)提高应用程序速度

    这个好理解,如果你的EXE里静态加载了100dll,当程序刚刚加载到内存运行的时候,会把这些dll的所有入口函数都先调用一遍,如果入口里面又做了这个功能,那个功能,那就蛋疼了。


如果像上面那样的话,程序是静态加载dll的话,还没等输出main start程序就自动退出了,so,这个地方突然想到了可以通过hijack做一个程序强退的功能,但是和保护镜像劫持的注册表一样,有很多路径直接就保护着呢,扯远了。

(2)提高兼容性

 大概就是下面的这个样子,采用延迟加载dll,然后可能存在dll不存在,或者dll里面没这个函数的时候就直接SEH处理了。


(3)提高应用程序可整合性

    书中说的可整合性就是程序独立性,比如一个程序A.exe带着一个A.dll一起干活,作者的意思是可以直接采用延迟加载,然后把A.dll资源方式添加到A.exe里,然后释放出来,干活。这...感觉没什么亮点,既然真喜欢整合就直接干脆不释放出来,导到内存里内存加载执行就行了,顺便把PE特性改下,不留痕迹,这个前几天单独写了一个博客说这个思路。有兴趣的可以找找。

然后后面就是对延迟加载导入表进行PE结构分析和基本编程。这里就不细说了,营养不多。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 养老宝忘记密码怎么办 学生信用卡0额度怎么办 微信商户号怎么办 企业Uk证书过期怎么办 加挂账号不知道怎么办 钱打到对公账户怎么办 新中付没有到账怎么办 qq把钱转错了怎么办 转账输错号码怎么办 给别人转错钱了怎么办 转账到信用卡了怎么办 银行卡限额怎么办京东 预留信息忘了怎么办 中信银行香港卡怎么办 无银行预留信息怎么办 农工商超市红利卡怎么办 余额宝转入不了怎么办 公司车辆怎么办营运证 便利店转不出去怎么办 便利店开业营业额低怎么办 现在etc超时了怎么办? 中国银行e贷逾期怎么办 招商银行e分期逾期怎么办 保单贷款还不了怎么办 离婚时按揭房怎么办 按揭房子不要了怎么办? 征信有问题怎么办房贷 夫妻一方不做房贷共还人怎么办 给你花逾期一年怎么办 文件夹密码忘记了怎么办 网址被qq拦截怎么办 手机qq邮箱中毒怎么办 邮箱附件带病毒怎么办? 打开了病毒附件怎么办? qq邮箱被拦截怎么办 邮件地址已被注册怎么办 信用卡欠款怎么办房贷 贷款还不起了怎么办 装修贷款无抵押怎么办 黑户买房做贷款怎么办 易分期无法还款怎么办