zoukankan      html  css  js  c++  java
  • dll劫持

    DLL劫持原理

      DLL劫持技术当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中。 

      由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。 

      利用这种方法取得控制权后,可以对主程序进行补丁。此种方法只对除kernel32.dllntdll.dll等核心系统库以外的DLL有效,如网络应用程序的ws2_32.dll、游戏程序中的d3d8.dll,还有大部分应用程序都调用的lpk.dll,这些DLL都可被劫持。 

      伪造的dll制作好后,放到程序当前目录下,这样当原程序调用原函数时就调用了伪造的dll的同名函数,进入劫持DLL的代码,处理完毕后,再调用原DLL此函数。

      这种补丁技术,对加壳保护的软件很有效,选择挂接的函数最好是在壳中没有被调用的,当挂接函数被执行时,相关的代码已被解压,可以直接补丁了。在有些情况下,必须用计数器统计挂接的函数的调用次数来接近OEP。此方法巧妙地绕过了壳的复杂检测,很适合加壳程序的补丁制作。

      一些木马或病毒也会利用DLL劫持技术搞破坏,因此当在应用程序目录下发现系统一些DLL文件存在时,如lpk.dll,应引起注意。



     

  • 相关阅读:
    练习
    js简介、基本语法、类型转换、变量、运算符、分支语句、循环语句、函数、函数调用
    样式表、格式布局、流式布局
    表单
    图片热点、网页划区
    JS模拟窗口
    JavaScript 常用功能实现一览(一)
    分页打印控制 摘自于网络:http://www.cnblogs.com/joinger/articles/1807517.html
    我眼中的C#3.0 摘自于网络:http://www.cnblogs.com/joinger/articles/1297237.html
    .net ToString()用法详解与格式说明
  • 原文地址:https://www.cnblogs.com/delphi7456/p/1854170.html
Copyright © 2011-2022 走看看