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中(这个我也没有试过)
拦截,监视和修改进程的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