映像劫持(IFEO:Image File Execution Options),通俗一点讲,就是用户试图运行一个程序时,启动的是另一个毫不相干的程序,或者根本就没有启动。这种技术一般用户从来不用,病毒倒是对这种技术情有独钟,让用户启动一个应用程序时启动病毒程序,或者让用户的杀毒软件、防火墙、备份软件、输入法、任务管理器、命令行窗口、注册表等不能启动。
假设,这次的映像劫持目标是记事本程序notepad.exe,我们要让用户运行记事本程序时打开cmd.exe命令行窗口,或者点击记事本程序时无反映,不能运行。
(注意:此试验过程中,杀毒软件可能会有报警提示,选择允许操作即可。试验完毕,记得恢复原样)。
按照以下方式操作:
(一)启动注册表。点击“开始”菜单,点击“运行”,输入regedit并回车;
如果不能从这里启动,按ctrl + alt + del 启动任务管理器,点击“新任务”,运行regedit;
如果还是不能启动,直接进入windows目录下,找到regedit.exe程序,双击,如果仍然不能运行,把regedit.exe改一个名字,如abcd.com ,再双击改名后的注册表程序。这次应该能启动了。
(二)打开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion,新建一个Image File Execution Options子键。
方法:用鼠标右键点击CurrentVersion键项,在弹出菜单中点击“新建”→“项” ,再把新建的项重命名为Image File Execution Options。
(三)再新建子项notepad.exe
方法:用鼠标右键点击Image File Execution Options,在弹出菜单中点击“新建”→“项”,然后用鼠标右键点击“新项 #1”,在弹出菜单中点击“重命名”,输入notepad.exe。
(四)方法:在右边窗口空白处用鼠标右键点击,在弹出菜单中点击“新建“→”字符串值”,设置映像劫持,”,再修改“新值 #1”,输入debugger。用鼠标右键点击debugger,在弹出菜单中点击“修改” ,输入cmd.exe(如果改名了,则输入改名后的名字,如cmd.com)。
(五)确认映像劫持效果
运行程序菜单→附件→记事本 程序,或者直接找到系统目录下的notepad.exe,运行,如果出现的不是记事本程序,而是命令行窗口,说明试验成功!
如果把cmd.exe (或cmd.com)改成ntsd -d ,那么,记事本程序就不能打开了,运行记事本程序时没有任何反映;
如果 “编辑字符串” 时输入其他程序,而且没有指定程序路径,运行被劫持的程序时会出现运行程序出错的提示;
如果映像劫持的目标是杀毒软件,那么,劫持成功后,杀毒软件就不能启动了。同样原理,在这里进行映像劫持的任何程序,都不能正常启动。
删除Image File Execution Options键项或者“编辑字符串”为空白(数据未设置),可以解除映像劫持,恢复原样。
(六)参考建议
对于一般的电脑用户,并不需要使用映像劫持技术,如果发现注册表中有Image File Execution Options键项,建议直接删除此键项。
中毒后,发现程序不能运行或运行错误时,可以删除Image File Execution Options键项试试,很多时候都能解决问题!
附:映像劫持设置程序[VBS版]
call msgbox("映像劫持设置程序[VBS版]",60,"WELCOME")
'系统执行重定向
dim name,password,a,b,c,d,e,writefile
a=inputbox("请输入映像劫持的原程序名:"+vbcrlf+vbcrlf+"例:a.exe","原程序名")
if a="" then wscript.quit
b=inputbox("请输入映像劫持的目标程序名:"+vbcrlf+vbcrlf+"例:c:\windows\b.exe","目标程序")
if b="" then wscript.quit
set ws=wscript.createobject("wscript.shell")
path="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\"&a&"\"
call ws.regwrite(path,"debugger") '建立项和子关键字debugger
call ws.regwrite(path & "debugger",b) '对子关键字debugger进行赋值
call msgbox("系操作完成!",60,"完成")
'创建系统执行重定向恢复文件
set fso=CreateObject("Scripting.FileSystemObject")
c=fso.FileExists("repair.vbs") '判断同目录下是否存在文件:repair.vbs
if c=-1 then d=msgbox("本程序同目录下已经存在恢复文件:Repair.vbs!是否覆盖?"&chr(13)&chr(13)&"(按确定覆盖;按取消退出本程序!)",65,"恢复文件生成操作提示") 'repair.vbs存在,返回值:-1(若不存在,返回值:0)
if d=2 then wscript.quit '当上一行msgbox中按取消会返回值:2(若按确定返回值:1),此时结束程序
set writefile=fso.CreateTextFile("Repair.vbs",True) '建立恢复文件:repair.vbs
wscript.sleep 500 '延时500毫秒
'写入映像劫持恢复文件
call writefile.writeline("set ws=wscript.createobject("&chr(34)&"wscript.shell"&chr(34)&")")
call writefile.writeline("ws.regdelete("&chr(34)&path&chr(34)&")")
call writefile.writeline("call msgbox("&chr(34)&"映像劫持设置恢复完成!"&chr(34)&",60,"&chr(34)&"完成"&chr(34)&")")
call writefile.close
call msgbox("恢复设置文件:Repair.vbs生成!",60,"完成")
|