什么是映像劫持
也许你曾遇到过这种情况:无论你将软件安装在什么地方,在运行的时候总会出现“系统找不到指定的文件”的错误提示,导致软件无法运行。如果你将软件的exe文件改个名称,就可以正常运行了。这种现象就叫做映像劫持。映像劫持是一种影响系统正常运转的手段,很多病毒、木马都会使用这种手段阻止安全软件的运行。
映像劫持的原理
映像劫持是利用Windows的IFEO(Image File Execution Options)功能来实现的。IFEO实际上是Windows的一项正常功能,主要用于调试程序,其初衷是在程序启动的时候开启调试器来调试程序,这样一来可以在调试器中观察程序在难以重现的环境中的行为。例如,某个程序在随用户登录自动启动时会出错,但在登录后手动启动时却一切正常,这就可以通过IFEO设置一个调试器,无论程序何时启动,都会开启这个调试器对其进行调试,以便找出问题。
在注册表中,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options就是保存IFEO设置的地方。下面来演示一下IFEO正常的用法(假设你已经安装了Visual Studio):
打开注册表编辑器,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options中添加一个新的项,取名为“calc.exe”。
打开刚刚创建的calc.exe项,在右侧的窗格中右击,新建一个字符串值,取名为“Debugger”,取值为“vsjitdebugger.exe”。关闭注册表编辑器。
此时运行系统自带的计算器,会弹出一个应用程序错误窗口,选择“调试程序”,就会启动Visual Studio对计算器进行调试。
当你运行calc.exe的时候,系统首先会在注册表的Image File Execution Options中寻找名为“calc.exe”的项,如果存在该项,则继续寻找名为“Debugger”的字符串值,如果找到,则转而启动Debugger值中指定的程序,即vsjitdebugger.exe,并将calc.exe的完整路径作为参数传递给它。所以,当你运行计算器的时候,系统实际上执行的是“vsjitdebugger.exe C:\Windows\System32\calc.exe”这个命令行,而不是“calc.exe”。
IFEO的初衷是很好的,但它的设计显然不够完善。在上面的例子中,如果你将“vsjitdebugger.exe”改成“cmd.exe”,那么运行计算器的时候却打开了一个命令行窗口;如果改成任意一个不存在的程序名称,例如“abc”,那么运行计算器的时候就会出现“系统找不到指定的文件”的错误,此时calc.exe这个程序(映像)被“劫持”了。
由此可以看出,映像劫持并不等于IFEO,反之亦然。映像劫持的正式英文名称其实是“Image Hijack”。
下面是我开发的一个用于编辑IFEO的小程序,其前身是skycn上的“映像劫持编辑器”。该程序由于被扫描出含有病毒,被停止下载了。对此我想说的是,IFEO属于注册表的敏感区域,修改这个区域的程序都有可能被杀毒软件封杀。如果你不放心的话,最好还是不要使用了。
==========
IfeoEditor
系统支持:XP/Vista/Win7
最新版本:2.0.0 Beta
下载地址:http://files.cnblogs.com/zplutor/IfeoEditor_2.0.0_Beta.rar