映像劫持IFEO

类似标签:映像劫持、(Image File Execution Options)、“Image Hijact"

"如果我想在双击程序‘notepad.exe‘ 程序时,系统执行的确是 ‘cmd.exe‘ ,该怎么实现?”

我们应该先探索一下 当我们点击了 ‘notepad.exe‘时,发生了什么:我们双击了‘notepad.exe‘,系统判断‘notepad.exe‘是一个可执行体,然后为程序申请内存空间/加载程序/执行程序。

不对,其实在为程序申请内存空间之前,系统还对‘notepad.exe‘进行了一项是否IFEO判定(我们暂且这么称呼),具体操作就是:打开注册表“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”键,然后查找该键下是否有与执行程序同名,即‘notepad.exe’,的子健, 如果不存在(你很幸运),则真正运行‘notepad.exe‘程序; 如果存在名为‘notepad.exe‘的子健,系统便会查找该子健中名为‘Debugger‘的项,且恰好’Debugger‘项的项值为‘cmd.exe’,那么系统真正运行的会是‘Debugger‘项值中的‘cmd.exe‘程序,而原本的程序‘notepad.exe‘只会作为一个参数传给‘cmd.exe‘。即最后执行的’cmd.exe notepad.exe‘。

既然有这么大一个漏洞,它为什么还存在啊?

IFEO注册表键是干什么的?

原来,在Windows NT时代,系统使用一种早期的堆(Heap,由应用程序管理的内存区域)管理机制,使得一些程序的运行机制与现在的不同,而后随着系统更新换代,厂商修改了系统的堆管理机制,通过引入动态内存分配方案,让程序对内存的占用更为减少,在安全上也保护程序不容易被溢出,但是这些改动却导致了一些程序从此再也无法运作,为了兼顾这些出问题的程序,微软以“从长计议”的态度专门设计了“IFEO”技术,它的原意根本不是“劫持”,而是“映像文件执行参数”!

比如,当你想运行一个使用了旧的堆管理机制程序“a.exe”时,在新的系统上是无法正常运行的。这时,你打开注册表,在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”下新建一个“a.exe"子健,然后在该子健内新建一个一个字符串注册表项"DisableHeapLookAside",值为1. 保存注册表后,再次运行”a.exe"是不是unx成功了?(还没有?那出错原因就不是IFEO能够管的范围了...或者尝试搭配下其它参数使用)。

IFEO是不仅仅只有“Debugger"这一个参数的,下面都是IFEO的参数:

ApplicationGoo
Debugger
PageHeapFlags
DisableHeapLookAside
DebugProcessHeapOnly
PageHeapSizeRangeStart
PageHeapSizeRangeEnd
PageHeapRandomProbability
PageHeapDllRangeStart
PageHeapDllRangeEnd
GlobalFlag
BreakOnDllLoad
ShutdownFlags

但是造成”映像劫持“的罪魁祸首,只是”Debugger".

因为”Debugger“参数的优先权是高于所有其它参数的!!!

当系统查找到IFEO中某一子健时,会首先判断是否使用了“Debugger"参数!!

为什么”Debugger"会存在呢?

或许微软当初的用意是便于程序员能够通过双击某个设置了IFEO控制列表的执行体文件来直接调用调试器对其进行调试,而不用再通过繁琐的打开调试器再进行文件载入来实现调试,提高了工作效率。

下面附图:

拓展阅读:映像劫持-百度百科

代码Demo:

 1 #include "stdafx.h"
 2 #include <Windows.h>
 3
 4 #pragma  comment(lib, "Advapi32.lib")
 5
 6 int _tmain(int argc, _TCHAR* argv[])
 7 {
 8     LONG lRst;
 9     HKEY hKey;
10     if(ERROR_SUCCESS != RegCreateKeyEx(
11                             HKEY_LOCAL_MACHINE,
12                             L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\notepad.exe",
13                             0L,
14                             NULL,
15                             REG_OPTION_NON_VOLATILE,
16                             KEY_ALL_ACCESS,
17                             NULL,
18                             &hKey,
19                             NULL))
20     {
21         wprintf(L"RegCreateKeyEx failed.\n");
22         return 0;
23     }
24
25     lRst = RegSetValueEx(hKey, L"Debugger", 0L, REG_SZ, (CONST BYTE*)L"cmd.exe", sizeof(L"cmd.exe"));
26     if (ERROR_SUCCESS != lRst)
27     {
28         wprintf(L"RegSetValueEx failed.\n");
29     }
30
31     RegCloseKey(hKey);
32     return 0;
33 }
时间: 2024-10-14 15:02:23

映像劫持IFEO的相关文章

映像劫持

因使用电脑不当,这周电脑默默地不知道中了什么毒.每当电脑进入“是否允许该应用更改计算机”时就会发生黑屏然后死机,打开杀毒软件一查,发现问题是一个叫做“映像劫持项出现异常,部分软件不能正常使用”的什么鬼.于是乎我就上网百度了一下什么是映像劫持和解决方法,可是,呵呵,并没有用...... 映像劫持 就是Image File Execution Options(其实应该称为“Image Hijack”.)是为一些在默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定.由于这个项主要是用来调试

利用映像劫持替换记事本

Image File Execution Options就是映像劫持技术,通过此种方式替换记事本,非常地绿色环保. Image File Execution Options是CreateProcess函数中的一个功能,即在可执行程序运行时,Windows会先检测对应IFEO中的Debugger值,如果 存在这个参数的话,就运行这个参数中指定的程序,好像是程序调试之用,具体可以见这里. 原理:通过修改 Image File Execution Options 键值后,在有 notepad.exe

C#实现映像劫持

“映像劫持”,也被称为“IFEO”(Image File Execution Options),在WindowsNT架构的系统里,IFEO的本意是为一些在默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定.当一个可执行程序位于IFEO的控制中时,它的内存分配则根据该程序的参数来设定,而WindowsN T架构的系统能通过这个注册表项使用与可执行程序文件名匹配的项目作为程序载入时的控制依据,最终得以设定一个程序的堆管理机制和一些辅助机制等.出于简化原因,IFEO使用忽略路径的方式来匹配

映像劫持技术(1):简单介绍

映像劫持,即Image File Execution Option.在深入了解这个概念之前,可以简单地认为,它可以令应用程度重定向.这是注册表里的一个功能,可以做这样的尝试: 打开注册表——定位到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options,右键,新建项,将其重命名为notepad.exe.在右边空白处点击右键,新建”字符串值“,将其重命名为”Debugg

如何手动清除那些映像劫持技术的病毒

在用电脑的过程中,经常会遇到一些病毒,那么怎么样才能彻底查杀电脑中的木马病毒呢?安全防御教你如何查杀映像劫持技术的病毒. 解决步骤 分别对将icesword和Sreng主程序改名后运行,此时,那个象记事本的病毒程序已经打开近百个对话框,系统变得很慢.在WINXP的任务栏选中这一组窗口,关闭掉,先抢占一些系统资源再说. 然后,双击U盘上的ProcessExplorer,一眼看到有记事本图标的三个进程,尝试结束其中一个,发现结束后,程序会立即重新启动.看来,直接KILL进程是不行的.结束不行,就用下

常规鼠标键盘钩子.映像劫持.开机自启动

using System;using System.Collections.Generic;using System.IO;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Reflection; namespace HookTest{ /* 注意: 如果运行中出现SetWindowsHookEx的返回值为0,这是因为.net 调试模式的问题,具体的做法是禁用宿主进程,在 Visual Stu

映像劫持技术(2):实例

在Image File Execution Options下创建cmd.exe项,将其“重定向”到我们自己编写的程序 1 #include<stdio.h> 2 #include<windows.h> 3 4 int main() 5 { 6 HKEY hKey; 7 DWORD dwDisposition=REG_CREATED_NEW_KEY; //新建一个子项 8 if((::RegCreateKeyEx(HKEY_LOCAL_MACHINE, 9 "SOFTWAR

通过映像劫持实现Notepad2替换记事本

创建如下注册表项: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe 如果无法修改,需要先右键取得权限: 在notepad.exe注册表项中,创建名为Debugger的字符串值(REG_SZ): 修改字符串值Debugger的数据为Notepad2.exe的完整路径,最后以 /z参数结尾. 如: "C:\Program Files\Notepad2.exe"

IFEO 映像文件劫持

"映像劫持",也被称为"IFEO"(Image File Execution Options) 映像劫持的根本就是被恶意篡改了注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options项. 比如如在这里新建一个子项notepad.exe,再在这子项里新建一个REG_SZ的名字为Debugger,内容为cmd.exe的值项.这样就会实现映