一种动态链接库文件加载的方法及系统的制作方法

文档序号:8361256阅读:663来源:国知局
一种动态链接库文件加载的方法及系统的制作方法
【技术领域】
[0001]本发明涉及动态链接库领域,尤其涉及一种动态链接库文件加载的方法及系统。
【背景技术】
[0002]关于动态链接库文件的隐藏方法很多,如抹链的方法,可以让动态链接库文件从模块链表中消失,但是在XT等工具在驱动层中还是可以查找到动态链接库文件的踪迹,隐藏效果不好。所述XT为XueTr,是一款广受好评的操作系统管理工具,有进程、线程、进程模块、进程窗口、进程内存信息查看、热键信息查看,杀进程、杀线程、卸载模块等功能。
[0003](I)远程线程注入方法主要有两种,一种是直接复制母体中预注入的代码到目标进程地址空间,然后启动注入的代码,这种远程线程一旦成功实现,那么它只出现在目标进程的内存中,并没有对应的磁盘文件,隐蔽性看起来不错,缺点就是,必须要在注入代码中对所有直接寻址的指令进行修正,然而采用汇编手动修改过于繁琐;
[0004](2)另一种更为常用的方法是注入一个dll文件到目标进程,这种方法的实现可以是以一个消息Hook为由进行注入,或者仍然使用代码,这种方法的优点是dll文件自带重定位表,也就是说你不必再为修正直接寻址指令而烦恼了,dll自己会重定位!。但它的缺点就是可以用进程管理工具看见被加载的dll文件名、文件路径。这样就不太完美了,,因为只要用户看看模块列表很容易发现可疑模块,得到dll的全路径,dll文件就这样暴露了。

【发明内容】

[0005]本发明所要解决的技术问题是:提供一种无痕加载的动态链接库文件加载的方法及系统。
[0006]为了解决上述技术问题,本发明采用的技术方案为:
[0007]一种动态链接库文件加载的方法,包括以下步骤:
[0008]S100、读取一动态链接库文件,将所述动态链接库文件加载至预设的第一内存;
[0009]S200、检查所述动态链接库文件是否符合PE格式;若所述动态链接库文件符合PE格式,则执行步骤S300 ;否则结束步骤,反馈所述动态链接库文件出错;
[0010]S300、按照PE格式提取所述动态链接库文件中的PE头,将所述PE头加载至预设的第二内存。
[0011]本发明采用的另一技术方案为:
[0012]—种动态链接库文件加载的系统,包括读取单元、第一加载单元、检查单元、提取单元和第二加载单元;
[0013]所述读取单元,用于读取一动态链接库文件;
[0014]所述第一加载单元,用于将所述动态链接库文件加载至预设的第一内存;
[0015]所述检查单元,用于检查所述动态链接库文件是否符合PE格式;
[0016]所述提取单元,用于按照PE格式提取所述动态链接库文件中的PE头;
[0017]所述第二加载单元,用于将所述PE头加载至预设的第二内存。
[0018]本发明的有益效果在于:
[0019]1、通过本发明提供的加载方法,加载动态链接库文件比较隐蔽;因为其不是通过篡改PEB(PEB为进程环境块,是一个保存了进程的相关信息的结构体)中LDR链的信息,把需要隐藏的模块从LDR链表中摘除,达到隐藏的目地,而是直接把动态链接库文件加载到内存,没有留下任何踪迹,通过OD和XT工具都查不出踪迹;
[0020]2、在32位和64位系统上通过此加载方法加载动态链接库文件比较稳定;
[0021]3、有时游戏需要在R3应用层(Intel的CPU将特权级别分为4个级别:RING0、RINGl、RING2 和 RING3 ;ffindows 只使用 RINGO 和 RING3,RINGO 只给操作系统用,RING3 可以给操作系统和应用层都能用)对动态链接库文件进行隐藏,防止被人利用找到动态链接库文件的句柄,对动态链接库文件进行非法操作;此加载方法可以实现让动态链接库文件加载基地址时不让外挂动态获取到。
【附图说明】
[0022]图1为本发明【具体实施方式】的动态链接库文件加载的方法的流程图;
[0023]图2为本发明【具体实施方式】的动态链接库文件加载的结构示意图;
[0024]图3为本发明【具体实施方式】的PE文件结构图;
[0025]图4为本发明【具体实施方式】的磁盘和内存中的PE文件结构对比图;
[0026]标号说明:
[0027]10、读取单元;20、第一加载单元;30、检查单元;40、提取单元;50、第二加载单元。
【具体实施方式】
[0028]为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
[0029]本发明最关键的构思在于:通过将符合PE格式的动态链接库文件加载至第一内存,再将所述动态链接库的PE头加载至第二内存,实现PE加载。
[0030]请参照图1,为本发明【具体实施方式】的动态链接库文件加载的方法的流程图,具体如下:
[0031]一种动态链接库文件加载的方法,包括以下步骤:
[0032]S100、读取一动态链接库文件,将所述动态链接库文件加载至预设的第一内存;
[0033]S200、检查所述动态链接库文件是否符合PE格式;若所述动态链接库文件符合PE格式,则执行步骤S300 ;否则结束步骤,反馈所述动态链接库文件出错;
[0034]S300、按照PE格式提取所述动态链接库文件中的PE头,将所述PE头加载至预设的第二内存。
[0035]从上述描述可知,本发明的有益效果在于:
[0036]1、通过本发明提供的加载方法,加载动态链接库文件比较隐蔽;因为其不是通过篡改PEB(PEB为进程环境块,是一个保存了进程的相关信息的结构体)中LDR链的信息,把需要隐藏的模块从LDR链表中摘除,达到隐藏的目地,而是直接把动态链接库文件加载到内存,没有留下任何踪迹,通过OD和XT工具都查不出踪迹;
[0037]2、在32位和64位系统上通过此加载方法加载动态链接库文件比较稳定;
[0038]3、有时游戏需要在R3应用层(Intel的CPU将特权级别分为4个级别:RING0、RINGl、RING2 和 RING3 ;ffindows 只使用 RINGO 和 RING3,RINGO 只给操作系统用,RING3 可以给操作系统和应用层都能用)对动态链接库文件进行隐藏,防止被人利用找到动态链接库文件的句柄,对动态链接库文件进行非法操作;此加载方法可以实现让动态链接库文件加载基地址时不让外挂动态获取到。
[0039]进一步的,还包括步骤S400、根据所述PE头更新基址信息,将所述动态链接库文件的节信息加载至预设的第二内存;调整重定位表,加载所需要的动态链接库文件的基址信息和调整导入表;根据节头标记内存页,节被标记为可丢弃。
[0040]进一步的,所述步骤S300具体为:按照PE对齐的方式(PE装载器将PE文件装入内存,每个PE节区以1000为对齐,改变各个节区的偏移地址。通常,一个PE文件在磁盘上的映像跟内存中的基本一致,但并不是完全的拷贝。Windows加载器会决定哪些部分需要加载,哪些部分不需要加载,而且由于磁盘对齐与内存对齐的不一致,加载到内存的PE文件与磁盘上的PE文件各个部分的分布都会有差异。)将所述PE头加载至预设的第二内存。按PE对齐的方式加载是一个正常的处理流程,需要这样才能让代码加载正确并可执行。
[0041]进一步的,该方法具体包括:
[0042]步骤1、读一个目标DLL文件到内存;
[0043]步骤2、内存加载目标DLL文件,具体包括:
[0044]步骤21、检测目标DLL文件是否是正常的PE格式;
[0045]步骤22、目标DLL文件为PE格式的文件,PE头位于PE文件中的偏移的某个位置,为DLL的PE头分配以MEM_COMMIT标志的内存块;
[0046]步骤23、把PE头拷贝到分配的内存块;
[0047]步骤24、PE头更新imagebase信息;
[0048]步骤25、从目标DLL文件拷贝节信息到新分配的内存;
[0049]步骤26、调整重定位表;
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1