解除映像劫持工具与源码,可解决因映像劫持导致的程序不能运行问题

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

 

显示在红色列表框中为被劫持导致无法运行的程序名(同名程序不能在本机器上正常运行,可通过加号增加对其它程序文件的屏蔽)

显示在绿色列表框中为本软件解除了劫持的程序(可使用重新屏蔽按钮恢复到被劫持状态)

需要管理员权限运行(若权限自动申请如无效,可在资源管理中本程序图标上右键--使用管理员权限运行尝试解决)

操作后可直接关闭本程序,操作效果可保持(重启后不失效)

 

实现方法:

    windows程序运行机制为首先检查注册表分支中("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\")中是否存在以程序名为表键的分支,以记事本程序程序运行为例:记事本程序名为“notepad.exe”,其表键为“notepad.exe”。若"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe\"下存在"debugger"字符串值,就会默认为“notepad.exe”程序启动调试映像。

调试映像的命令为NTSD [options] imagefile (imagefile 是要调试的映像名称)

若"debugger"值如果等于"ntsd -d"或其它无效路径,会导致无法运行,很多病毒文件通过这种方式来阻止反病毒软件的运行。

另也可通过设置其它映像路径来达到自身运行的目的,如:将"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe\"下"debugger"的字符串值设定为NTSD [options选项] 映像名定义为自身,那么运行“notepad.exe”程序时会调动所设置的映像,从而达到自身启动的目的。

注册表项实时修改就会起作用,重启后会保持。一般杀毒与防护程序都会实时监控上述表项。

NTSD 命令解释NTSD [options] imagefile 其中,imagefile 是要调试的映像名称,options 是下面选项之一:  映像文件选项: -2 打开一个用于调试字符模式的应用程序的新窗口 -d 将输出重定向到调试终端  -g 使执行自动通过第一个断点  -G 使 NTSD 在子程序终止时立即退出  o 启用多个进程的调试,默认值为由调试程序衍生的一个进程  -p 指定调试由进程 ID 标识的进程  -v 产生详细的输出

 

本工具通过删除相关注册表项来达到解除映像劫持问题。

 

使用AARDIO快速软件开发工具编写,代码如下:

//RUNAS//
import fonts.fontAwesome;
import win.ui;
/*DSG{{*/
mainForm = win.form(text="000";right=343;bottom=303;max=false)
mainForm.add(
button={cls="button";text='\uF021';left=144;top=8;right=168;bottom=32;font=LOGFONT(name='FontAwesome');z=9};
button2={cls="button";text='\uF070';left=288;top=8;right=312;bottom=32;font=LOGFONT(name='FontAwesome');z=11};
button2AddExe={cls="button";text='\uF055';left=120;top=8;right=144;bottom=32;font=LOGFONT(name='FontAwesome');z=10};
button2Exe={cls="button";text='\uF09C 解除选中';left=88;top=272;right=168;bottom=298;ah=1;aw=1;font=LOGFONT(name='FontAwesome');z=4};
button5AllUnExe={cls="button";text="反选";left=176;top=272;right=256;bottom=298;ah=1;aw=1;z=7};
button6UnExe={cls="button";text='\uF2D4 重新屏蔽';left=256;top=272;right=336;bottom=298;ah=1;aw=1;font=LOGFONT(name='FontAwesome');z=8};
buttonAllExe={cls="button";text="反选";left=8;top=272;right=88;bottom=298;ah=1;aw=1;z=3};
listbox2UnExe={cls="listbox";left=176;top=32;right=339;bottom=269;ah=1;aw=1;bgcolor=10551200;edge=1;items={};msel=1;vscroll=1;z=5};
listboxExe={cls="listbox";left=8;top=32;right=171;bottom=269;ah=1;aw=1;bgcolor=12624127;edge=1;items={};msel=1;vscroll=1;z=1};
plus={cls="plus";text='\uF113';left=96;top=8;right=120;bottom=32;font=LOGFONT(h=-18;name='FontAwesome');notify=1;z=13};
plus2={cls="plus";text='\uF059';left=312;top=8;right=336;bottom=32;font=LOGFONT(h=-18;name='FontAwesome');notify=1;z=14};
static={cls="static";text="被屏蔽程序名";left=14;top=15;right=155;bottom=32;ah=1;aw=1;transparent=1;z=2};
static2={cls="static";text='\uF06E';left=320;top=8;right=321;bottom=16;font=LOGFONT(h=-18;name='FontAwesome');transparent=1;z=12};
static3={cls="static";text="已解除屏蔽程序";left=184;top=16;right=325;bottom=33;ah=1;aw=1;transparent=1;z=6}
)
/*}}*/

import win.ui.tooltip;
import win.reg;
import console;
import fsys.version; 
mainForm.text = "解除映像劫持工具 V"++ tostring(fsys.version.getInfo(io._exepath).productVersion )


var debug_TT = false;
var mlog = function(...){
	if(debug_TT){
	 	 console.log(...)	
	}
}


//全局变量
var regPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\"
	
var RefreshList = function(){
	mainForm.listboxExe.clear();
	mainForm.listbox2UnExe.clear();
	//创建新的注册表路径
	var reg = win.reg(regPath) 
	//枚举子项、以及子项的所有子项
	reg.enumKey(
  	function(
    	subKey, /*这是某个子节点(win.reg对象)*/
    	keyname/*这是reg子节点的一个子项的名字*/
  	){ 
    	var regT = win.reg("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\"++keyname ++"\");   
    	for(name,value,t in regT.eachValue()) {
  			if(name == "debugger" and value == "ntsd -d"){//映象劫持
  				//当前路径 regT.path
  				mlog(name,value,t,keyname)
  				mainForm.listboxExe.add(keyname,-1)
  			}
			if(name == "Xdebugger" and value == "ntsd -d"){//映象劫持
  				//屏蔽测试
  				mainForm.listbox2UnExe.add(keyname,-1)
  			}
		}
   		regT.close();
  	} 
	)
	reg.close();
}


mainForm.button2Exe.oncommand = function(id,event){
	for(i=1;mainForm.listboxExe.count;1){
		if(mainForm.listboxExe.getSelected(i)){
			mlog(mainForm.listboxExe.getItemText(i))
			var regT =  win.reg("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\"++ mainForm.listboxExe.getItemText(i) ++"\");
			if(regT){
				if(!regT.delValue("debugger") or !regT.setSzValue("Xdebugger","ntsd -d")){
					win.msgboxErr("未成功写入,请检查是否有相应权限","错误")
					RefreshList();
					return ; 
				}
			} 
		}
	}
	RefreshList();
}

mainForm.button.oncommand = function(id,event){
	RefreshList();
}

mainForm.button2AddExe.oncommand = function(id,event){
	var frmChild = mainForm.loadForm("\dlg\dlg.aardio");
	frmChild.show();
}

mainForm.button6UnExe.oncommand = function(id,event){
	for(i=1;mainForm.listbox2UnExe.count;1){
		if(mainForm.listbox2UnExe.getSelected(i)){
			mlog(mainForm.listbox2UnExe.getItemText(i))
			var regT =  win.reg("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\"++ mainForm.listbox2UnExe.getItemText(i) ++"\");
			if(regT){
				if(!regT.delValue("Xdebugger") or !regT.setSzValue("debugger","ntsd -d")){
					win.msgboxErr("未成功写入,请检查是否有相应权限","错误")
					RefreshList();
					return ; 
				}
			} 
		}
	}
	RefreshList();
}

mainForm.button2.oncommand = function(id,event){
	if(!debug_TT){
		debug_TT = !debug_TT;
		mainForm.button2.text = '\uF06E'
		console.open();
		console.log("调试界面【关闭后会直接结束程序,请使用界面窗口上显示按键隐藏此窗口】")
		win.setTopmost(mainForm.hwnd)
	}else {
		debug_TT = !debug_TT;
		mainForm.button2.text = '\uF070'
		console.close();
		win.setTopmost(mainForm.hwnd,false)
	}
	
	
}

mainForm.button5AllUnExe.oncommand = function(id,event){
	for(i=1;mainForm.listbox2UnExe.count;1){
		mainForm.listbox2UnExe.setSelected(i,!mainForm.listbox2UnExe.getSelected(i))
	}
	
}

mainForm.buttonAllExe.oncommand = function(id,event){
	for(i=1;mainForm.listboxExe.count;1){
		mainForm.listboxExe.setSelected(i,!mainForm.listboxExe.getSelected(i))
	}
}
//界面提示
var tips = win.ui.tooltip(mainForm);
tips.addTool(mainForm.button2AddExe,"增加其它程序到屏蔽列表中");
tips.addTool(mainForm.button6UnExe,'屏蔽绿色列表中选中程序,需要增加其它程序,请点击左上角加号按钮');
tips.addTool(mainForm.listboxExe,"已屏蔽(禁止运行)的程序");
tips.addTool(mainForm.listbox2UnExe,"已解除屏蔽的程序");
tips.addTool(mainForm.button2Exe,"恢复选中程序运行");
tips.addTool(mainForm.button2,"打开调试输出");
tips.addTool(mainForm.button,"刷新列表");
//tips.addTool(mainForm,"");

var trackingToolTip = win.ui.tooltip.tracking(mainForm);




mainForm.plus.onMouseEnter = function(wParam,lParam){
	var x,y,cx,cy = mainForm.plus.getPos(true)
	trackingToolTip.setInfo("提示").setText("左键点击这个把系统自带记事本加入屏蔽,加入后记事本就不能运行,
据此可验证屏蔽效果,已运行程序不会结束。
双击此处可删除屏蔽记事本。").trackPopup(true,x+20,y+cy); 
}
mainForm.plus.onMouseLeave = function(wParam,lParam){
	 trackingToolTip.getTool().trackPopup(false)
}

mainForm.plus.oncommand = function(id,event){
	var regPathT = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe\"
	var regT = win.reg(regPathT);
	if(!regT){
		win.msgboxErr("权限不足,请以管理员权限运行此程序","错误");
		return false;
	}
	if(!regT.setSzValue("debugger","ntsd -d")){
		RefreshList();
		return false; 	
	} 
	
	RefreshList();
}
mainForm.plus.onMouseDoubuleClick = function(wParam,lParam){
    var x,y = win.getMessagePos(lParam);
	var regPathT = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\"
	var regT = win.reg(regPathT);
	if(!regT){
		win.msgboxErr("权限不足,请以管理员权限运行此程序","错误");
		return false;
	}
	mlog("delkeytree",regT.delKeyTree("notepad.exe")) 
	
	RefreshList();
}


mainForm.plus2.onMouseEnter = function(wParam,lParam){
	var x,y,cx,cy = mainForm.plus2.getPos(true)
trackingToolTip.setInfo("帮助").setText(
"本工具可解决因映像劫持导致的程序不能运行问题
显示在红色列表框中为被劫持导致无法运行的程序名(同名程序不能在本机器上正常运行,可通过加号增加对其它程序文件的屏蔽)
显示在绿色列表框中为本软件解除了劫持的程序(可使用重新屏蔽按钮恢复到被劫持状态)
需要管理员权限运行(若权限自动申请如无效,可在资源管理中本程序图标上右键--使用管理员权限运行尝试解决)
操作后可直接关闭本程序,操作效果可保持(重启后不失效)
").trackPopup(true,x+20,y+cy); 
}
mainForm.plus2.onMouseLeave = function(wParam,lParam){
	trackingToolTip.getTool().trackPopup(false);
}
RefreshList();

mainForm.show();
return win.loopMessage();

增加程序子窗口代码:

//RUNAS
import win.ui;
/*DSG{{*/
var winform = win.form(text="选择需要屏蔽的程序";right=287;bottom=79;border="thin";max=false)
winform.add(
button={cls="button";text="确定";left=232;top=8;right=280;bottom=32;z=2};
button2={cls="button";text="浏览";left=184;top=8;right=232;bottom=32;z=4};
edit={cls="edit";text="Edit";left=16;top=8;right=176;bottom=32;edge=1;z=1};
edit2={cls="edit";text="仅填写程序文件名即可,全局禁止,支持拖放";left=8;top=40;right=280;bottom=64;disabled=1;multiline=1;z=3}
)
/*}}*/

import thread;
import fsys.dlg;
import win.reg;
::Shell32.DragAcceptFiles(winform.hwnd,true);
winform.edit.text = "";
var pathT;
//拖放会触发onDropFiles事件
winform.onDropFiles = function(files){
	pathT = io.splitpath(files);
	if(pathT){
		winform.edit.text = pathT.file
	}
}

var regW = function(exe){
	import win.reg;
	var regPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\" ++ exe ++"\"
	var reg = win.reg(regPath);
	if(!reg){
		win.msgboxErr("权限不足,请以管理员权限运行此程序","错误");
		return false;
	}
	if(!reg.setSzValue("debugger","ntsd -d")){
		return false; 	
	} 
	return true; 
}
 




winform.button.oncommand = function(id,event){
	if(regW(winform.edit.text)){
		winform.edit2.text = "设置成功"	
		sleep(50);
		winform.close();
	}else {
		win.msgboxErr("未成功写入,请检查是否有相应权限","错误");
	}
	
		
	
}

winform.button2.oncommand = function(id,event){
	var path =  fsys.dlg.open('可执行文件|*.exe|所有文件|*.*|',,,winform);
	if(path){
		pathT = io.splitpath(path);
		if(pathT){
			winform.edit.text = pathT.file
		}
	}	
}



winform.show();
win.loopMessage();
return winform;

 

玩转注册表 很多人都认识注册表,但是几乎没人搞懂过注册表。我来带大家玩转注册表,做这篇文章就想记录一下注册表里的一些路径(难找,记不住!),本文中我会介绍一些实用的利用注册表进行内网权限维持的一个思路和方法。没学网安的,会更了解注册表;大佬就复习复习怎么进行权限维持吧! 阅读详情

相关推荐

木马启动之映像劫持

木马运行的原理其实很简单

COSMOSJie的博客 607

Windows映像劫持工具

使用此工具可以对某个程序进行映像劫持映像劫持后被劫持程序本身不会发生变化,但打开后会变为劫持到的程序。 例如:对WeChat.exe(只是举个例子)使用映像劫持劫持到cmd.exe(命令提示符) 成功后如果打开微信,只会显示一个命令提示符的黑框。 用法:在被劫持程序一栏输入想劫持程序名,劫持到一栏同理(最好输入程序路径)。 点击劫持程序会尝试将相关信息写入注册表。若想还原只需将被劫持程序名写入第一栏点击解救即可。 压缩包附带两个版本的工具,易语言版依赖krnln.fnr运行,Python版需要图标。 本程序不包含任何病毒,很多杀毒软件对易语言通杀,若不放心请使用Python版。 此工具仅供学习交流使用。

开源反控极域工具技术解析:进程终结、网络干扰权限恢复

在Windows系统管理软件安全领域,进程控制、网络通信和API钩子是核心基础概念。进程管理涉及通过系统调用如TerminateProcess结束目标程序;网络通信控制则可通过防火墙规则或协议分析实现干扰;API钩子技术允许程序拦截系统调用,常用于功能限制。这些技术的工程价值在于实现精细化的系统行为管控安全防护。在教育机房管理等场景中,课堂管理软件常综合运用这些技术实现屏幕广播、程序限制等功能。针对此类控制,技术社区出现了相应的对抗工具,其典型实现路径包括强制结束管理软件进程、干扰其网络通信端口或协议、

weixin_30345577的博客 748

遭遇修改系统时间、使用映像劫持的xibgptd.exe,netdde32.exe等1

遭遇修改系统时间、使用映像劫持的xibgptd.exe,netdde32.exeendurer 原创2007-08-10 第1版今天中午,一位网友说他的电脑中的杀毒软件无法启动,打开包含杀毒等字样的网页会自动关闭,不停地提示web.exe程序出错,不定期弹出广告窗口。让偶通过QQ远程协助。先到 http://endurer.ys168.com 下载 HijackThis,ProcV

Purpleendurer@CSDN 2446

镜像劫持2

镜像劫持

天使也掉毛 2049

映像劫持技术

映像劫持技术

whl0071的专栏 1348

VMware Fusion运行macOS虚拟机的官方路径核心避坑指南

macOS虚拟化是苹果生态下特殊的系统级技术实践,其本质依赖Hypervisor.frameworkApple Silicon硬件协同,而非通用虚拟化方案。原理上需穿透Gatekeeper门禁、公证(Notarization)及系统扩展授权三重安全机制,技术价值在于为开发者提供跨版本兼容性测试、Kext驱动调试和安全沙箱等不可替代能力。典型应用场景包括macOS App多版本验证、内核扩展开发及TCC框架研究。本文聚焦VMware Fusion这一唯一获Apple官方适配的macOS原生虚拟化工具,深入解

weixin_30832143的博客 454

Windows渗透测试载荷加载技术:进程注入反射式DLL绕过防御

在网络安全领域,进程注入是一种关键的代码执行技术,它允许将外部代码加载到另一个进程的内存空间中运行。其核心原理是通过操作系统的API(如OpenProcess、VirtualAllocEx、CreateRemoteThread)在目标进程中分配内存、写入载荷并创建远程线程。这项技术的价值在于能够绕过传统安全软件的检测,实现隐蔽的恶意代码执行,广泛应用于渗透测试、红队演练等安全评估场景。通过结合反射式DLL注入和AMSI绕过等热词技术,可以进一步提升攻击的隐蔽性和成功率,有效检验终端防护体系的检测能力。

weixin_34355559的博客 366

ARM新架构物联网安全实践:TrustZone、安全启动固件防护全解析

物联网设备的安全防护正从应用层加密走向芯片级信任根构建。嵌入式开发中,Cortex-M33Cortex-A35等ARM新架构通过TrustZone隔离、安全启动链、PAC/BTI等硬件机制,为固件防逆向、防篡改和防调试口攻击提供了底层保障。理解ARMv8-M安全世界非安全世界的隔离原理,掌握TF-M可信固件、SWD调试口锁定、OTA签名双分区回滚等关键技术,是打造高安全IoT产品的核心路径。从密钥管理到安全通信,再到性能安全的平衡,开发者需要结合真实威胁模型,将安全设计贯穿芯片选型、固件开发和量产管

weixin_33827731的博客 389

网络安全自学笔记

网络安全的笔记

Apricitly的博客 526

关于映像劫持

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

weixin_46661122的博客 9382

实例讲解映像劫持的使用技巧——通过映像劫持实现Notepad2替换记事本

所谓“映像劫持”,就是Image File Execution Options,是CreateProcess函数中的一个功能,即在可执行程序运行时,Windows会先检测对应IFEO中的Debugger值,如果存在这个参数的话,就运行这个参数中指定的程序。 作为一名系统管理员,实际上对于“映...

915

出现报错Windows 找不到文件

出现报错Windows 找不到文件 xxxx,请确定文件名是否正确后再试一次

sz029的博客 2727

office 2010 安装时弹错误框 Error 1406 Image File Execution Options 不能写入

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options office 2010 发布 RTM了, 好多人开始安装了, 于是 一部分人发现安装过程中弹错误框Error 1406 Image File Execution Options 不能写入 原因: 1...

weixin_30306905的博客 341

注册表 Image File Execution Options 项的作用及使用办法

<br />  Image File Execution Options<br />   跳转到键值<br />   HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options<br />   在里面添加一个新键值,使用一个你想欺骗的执行文件的名字,好比notepad.exe <br /><br />   注意到在‘Image File Execution Optio

fogeater的专栏 9485

office 2010 报1920错误 (未能启动服务 “Office Software Protection Platform”(osppsvc))

2.找到注册表如下位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\OSppSvc.exe(有的电脑是小写的,无所谓)1.win+R运行“ regedit ”,打开注册表。3.重新打开或者重新安装office即可。

jjjjjjj666的博客 1万+

注册表五大键及安全

注册表五大键 一、注册表的由来 PC机及其操作系统的一个特点就是允许用户按照自己的要求对计算机系统的硬件和软件进行各种各样的配置。早期的图形操作系统,如Win3.x中,对软硬件工作环境的配置是通过对扩展名为.ini的文件进行修改来完成的,但INI文件管理起来很不方便,因为每种设备或应用程序都得有自己的INI文件,并且在网络上难以实现远程访问。 为了克服上述这些问题,在Windows 95及其后继版本中,采用了一种叫做“注册表”的数据库来统一进行管理,将各种信息资源集中起来并存储各种配置信息。按照这一原则,W

tryheart的博客 6267

Windows注册表基本管理配置

一.注册表优化 注册表的优化分为几点: 1.系统安装是产生的无用信息 (1) 删除多余的时区 路径:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones 删除除了China Standard Time中国时区以外的其他时区 ​ (2)删除多余的语言 路径:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Lo...

qq_30053489的博客 4975

SECOH-QAD.exe占用CPU太高解决方法

某些的僵尸文件。整个删除注册表HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\IMAGE FILE EXECUTION OPTIONS\SPPEXTCOMOBJ.EXE重启系统 再删除僵尸文件。文件存在 C:\Windows 下面找到 SECOH-QAD.exe SECOH-QAD.dll 删除这俩个文件 激活后不需...

weixin_34368949的博客 6152
kwan1
博客等级 码龄21年 1粉丝 1原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值