zoukankan      html  css  js  c++  java
  • API Interception via DLL Redirection

    参考论文:<API Interception via DLL Redirection>

    拦截,监视和修改进程的API调用,通常称为API Hook,可以让我们对进程进行更有效和完全的控制.关于API Hook的实现已经有很多方法,本论文中讲的是DLL 重定向,究其原因有以下:
    1,实现简单.
    2,可以让我们查看和修改传递给API函数的参数,修改返回值,或者运行我们期望的任何代码.
    3,许多其它方法都要求向目标进程中注入代码,而DLL重定向仅只需拥有对目标程序所在文件夹的写入权限.
    4,我们可以不通过修改目标应用程序(无论是磁盘上的还是内存中的)和任何其它系统文件.

    开始磨刀,工具列表:
    Visual C++,用来编译我们的DLL 文件.
    OlleDbg,用来考察目标应用程序和其它任何外部模块.
    DumpbinGUI,用来获取一个目标DLL中的输出函数.
    Linkout.pl,一个用来自动化我们的大部分繁琐工作的perl脚本(其实可以用任何其它脚本,比如ruby,jscript,vbscript,都可以,仅作一些字符串的简单处理,译者注)

    通常用于DLL Redirection的方法有两种即.local和.manifest方法.
    .local方法要求在目标应用程序所在目录下建一个空的.local文件,比如若要拦截a.exe的某些API访问,就可以在其所在目录下建一a.exe.local文件.这种程序在找DLL时会优先从程序所在目录里寻找.
    但是.local并不是一种可靠的办法,某些DLL文件在WindowsXP中并不能被重定向,比如kernel32.dll,user32.dll和gdi32.dll,仅适用于Windows 2000中(这个我也没有试过)

    我们将要彩的方法是.manifest文件的方法,该方法要求在应用程序所在的目录下以应用程序的名称建立一个.manifest文件,不过这个manifest文件就不是空的了,而是一个XML格式的配置文件.manifest文件在很多程序中都用到,以下是笔者电脑上的一个manifest文件:

    manifest

  • 相关阅读:
    使用AOP 实现Redis缓存注解,支持SPEL
    springmvc 双亲上下文导致的 No mapping found for HTTP request
    调用iframe 中的js[兼容各种浏览器]
    NIO学习:异步IO实例
    byte数组与对象之间的相互转换
    NIO学习:buffer读入与写出(文件复制示例)
    NIO学习:使用Channel、Buffer写入文件
    使用摘要流获取文件的MD5
    ActiveMQ入门实例
    获取java项目 classpath目录
  • 原文地址:https://www.cnblogs.com/jcleung/p/1459198.html
Copyright © 2011-2022 走看看