
通过映像劫持实现Notepad2替换记事本
Notepad2是一个相当优秀的轻量级文本编辑器,开源软件,具有很多特色功能,如代码高亮、编码转换、行号显示、多步Ctrl+Z等,是不可多得的记事本替代方案。
开始使用Notepad2后,我是在Total Commander里设置F3和F4来调用,但在TC之外,就不是太好操作了。直接替换notepad.exe的方式不太喜欢,而且配置文件保存在C盘,不利于便携,于是我就手动更改txt、bat、nsi、ini、reg等格式的文件关联,但总归不方便。
后来无意间发现官方的替代默认记事本的方法,才是豁然开朗、相见恨晚,它是用Image File Execution Options的方式来实现替换,Image File Execution Options就是映像劫持技术,通过此种方式替换记事本,非常地绿色环保。
Image File Execution Options是CreateProcess函数中的一个功能,即在可执行程序运行时,Windows会先检测对应IFEO中的Debugger值,如果存在这个参数的话,就运行这个参数中指定的程序,好像是程序调试之用,具体可以见这里。
大体原理是这样的,修改Image File Execution Options键值后,在有notepad.exe运行请求的时候,就欺骗系统转而运行notepad2.exe:
- 创建如下注册表项:HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsnotepad.exe,如果无法修改,需要先右键取得权限;
- 在notepad.exe注册表项中,创建名为Debugger的字符串值(REG_SZ);
- 修改字符串值Debugger的数据为Notepad2.exe的完整路径,最后以 /z参数结尾。
如:"D:Program FilesNotepad2Notepad2.exe" /z
或直接创建如下注册表文件,然后导入:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsnotepad.exe]
"Debugger"=""D:Program FilesNotepad2Notepad2.exe" /z"
- Notepad2原版:http://www.flos-freeware.ch/notepad2.html
- Notepad2-mod:http://code.google.com/p/notepad2-mod/
- Replacing Windows Notepad with Notepad2:
http://www.flos-freeware.ch/doc/notepad2-Replacement.html
Notepad2-mod是我正在使用的修改版、更新很及时,支持代码折叠、NSIS、Inno、AHK语法高亮等,由于不支持多标签,所以我用Notepad2-mod+EmEditor组合。
- 本文作者: 黯然过客
- 文章分类: 办公软件 • 知识与技巧
- 阅读次数: 已有 37859 次浏览
- 更新时间: 2011/5/14 23:28:39
- 文章链接: https://www.portablesoft.org/notepad2-replacement/ (转载请保留出处及文章链接)
真遗憾现在才看到你的回复,如果你还能看到我给你发的这条回复的话,方便说说具体怎么用wscript修正吗?
不太记得了,请参考:http://www.vistax64.com/tutorials/244527-programs-replace-system-program-without-modifying-system-files-permissions.html
谢谢,我采用了这个帖子里面的方法3,但是出现了和回帖的4楼说的一样的bug(如果被打开的文件路径有空格的话就会劫持失败),可是5L又说没问题,方便问下你知道是怎么回事吗?
把你邮件给我一下,我把之前我的配置文件发给你
engiun@qq.com非常感谢!
不行啊改了之后运行用文本文件都是显示“请求的操作需要提升” 无法打开 有人也是这种情况吗怎么破
能新建,也能插入值,但是不能重名键名,提示:注册表编辑器无法重命名 重命名值时出现错误,没有运行360等安全软件。进程里面也没有。奇怪了。权限都赋予了。求指教。
现在的安全软件,检测到映像劫持就会直接处理的,根本不管是否恶意
win7下试了好几次没成功 , 猛然醒悟, 改下txt关联不久行啦 ,哈哈
修改txt关联也是可以的,但仅仅是针对txt文件。。不成功一般是因为杀毒软件等的拦截,毕竟映像劫持一般被认为是危险操作。。
写了段劫持记事本的批处理脚本,放到Notepad2目录下运行即可。==================================@echo offset regkey=HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsnotepad.exereg add “%regkey%” /v “test” /f 1>nul 2>nul && (reg delete “%regkey%” /v “test” /f) || (echo.&echo.&echo 缺少权限,请右键点击此脚本,选择“以管理员身份运行”。&pause>nul&exit):beginclsfor /L %%i in (1,1,5) do echo.set num=0reg query “%regkey%” /v “Debugger” 1>nul 2>nul && goto undo || goto done:doneset /P num=记事本[未劫持],是否开启劫持?( 1–是,其他–否 ) :echo %num%if %num% equ 1 reg add “%regkey%” /v “Debugger” /d “”%~dp0Notepad2.exe” /z” /fgoto begin:undoset /P num=记事本[已劫持],是否取消劫持?( 1–是,其他–否 ) :echo %num%if %num% equ 1 reg delete “%regkey%” /fgoto begin==================================
这个更方便,谢谢
已经爱上sublimetext
只能打开一个啊?
没有用啊站长
新建notepad.exe提示错误
请问如何恢复为原配的呢?
删除文中那个注册表项就可以了。
我用的是note++pe替换系统文件,自动打开的
Notepad++也不错的,我也用过一段时间。
reg add “HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsnotepad.exe” /v “Debugger” /t REG_SZ /d “程序路径Notepad2.exe /z” 可用
直接用右键菜单编辑器添加右键菜单,所有文件都在右键添加一个使用notepad2打开选项
这样只能是手动调用notepad2了,无法自动执行。。
我的系统是XP SP3 查了下,那个注册表编辑器是5.1版本的,不知道创建那个替换系统记事本的.reg文件会出问题吗?有必要将Windows Registry Editor Version 5.00改成Windows Registry Editor Version 5.1吗?菜鸟不敢乱动。。。等回复
映像劫持后可以使用,但只要电脑一用网银盾就会反弹成自带的记事本,不知道是网银程序的问题,还是360在保护的问题,请求高手解答
靠,忘了注册表文件后缀是什么了
呃、*.reg啊
我这边劫持失败,估计是有windows优化大师在作祟……
这个注册表位置比较特殊,很多安全类工具都在监控着。。。
高,高,实在是高
我导入注册表项后打开任意文档都会提示Windows找不到指定位置,请问,怎么解决啊…..
到注册表位置,看看是不是格式或语法错误。不行就删除了。。
直接导入就可以吗?不用创建注册表项什么的吗?
最新版的editplus, 只需要后面加 /d 即可
可以用这种办法让任何编辑器劫持notepad,但是那个传递参数会导致打开一个notepad在新的编辑器里,用wscript可以完美修正。
我也遇到这个问题了。
要么是不支持这种方式。要么试试楼下的加上 /d 参数。
试过来,还是会多打开几个,正在找其它的方法,我的系统是XP。
杯具,怎么取得权限?系统win7,管理员登陆,权限无法修改
右键单击对应的注册表项,有权限设置的。
提示传递给系统调用的数据区域太小
不错~我也替换了,博主你说你用的影子系统 用的SD 吗?
公司电脑用SD,家里电脑用的Returnil Lite。
win7 64 中文版notepad测试成功,将键值导出来保存。
问下输入键值时,参数/z有什么用啊?谢谢
要是支持多标签就好了
@livepool, 不能同意更多啊。。所以我还得用EmEditor或Notepad++配合。
reg add “HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe” /v “Debugger” /t REG_SZ /d “\”%~dp0Notepad2.exe\” /z /d” /f
Notepad2 v3.0.20.21 XFLY版这样做不行,notepad2能启动,可没执行打开文件操作
@f, 请按照文中的说明的注册表项操作。
360禁止REG,增加白名单也不行
@hhsc, 呃 那你看看能不能忽略啥的。。这个映像劫持很多恶意软件使用,所以安全软件检查的比较严格。。。
为什么不直接右键打开方式选择浏览程序然后设为默认,酱紫不是很简单么
@夜痕, 设置默认打开方式的话,得一种一种格式来设置,通用性不太好;映像劫持安装卸载都方便,而且不管以何种方式调用notepad,都可以启动notepad2,一劳永逸。。
@黯然过客,
那直接用notepad2来替换system32下的notepad呢
@夜痕, 这样也可以,能全面接管,不过配置也得保存到C盘,像我使用影子系统就不方便了。。
@黯然过客,
哦
强大
汗,安全模式下成功。 360关了都还在“作恶”。
@g, 映像劫持是比较敏感的操作,360检测也是应该的,看看能否忽略或添加到白名单。
确实非常好用,解决了长期以来头疼的问题
在WIN 7 64位下好像没有用~~~
@彩讯网, 我刚安装了64位系统,测试是可以的,不过要用对应的Notepad2 64位版.
自己找到原因了,原来是360在搞鬼!
不过并不打算因此就不用360了!
没有两全其美的方法!!!
@白ぃ目, 安全软件对这注册表位置是比较敏感的,最好是暂停防护后修改,然后添加到信任列表。
我的系统不知道怎么回事,不能在那里对注册表键值进行重命名,修改了注册表项的权限后,可以重命名了,但是不能命名为”Debugger”,好奇怪的毛病啊!!!
系统是XP SP3
64位系统怎么就不行呢
哇~太棒了~这个很方便啊!!!不用再弄一堆了,谢谢黯然过客!!
知之恨晚~~
So cool, 文件关联一直就想怎么办好,portablesoft真不错~
不錯的軟件,但我還是比較喜歡 Notepad++
替换.bat
@if not exist .\\Backup md .\\Backup
@if not exist .\\Backup\\notepad.EXE copy %SystemRoot%\\system32\\notepad.exe .\\Backup
@copy /y notepad2.exe %SystemRoot%\\notepad.exe
@copy /y Notepad2.ini %SystemRoot%\\Notepad2.ini
@copy /y notepad2.exe %SystemRoot%\\system32\\notepad.exe
@copy /y Notepad2.ini %SystemRoot%\\system32\\Notepad2.ini
@copy /y notepad2.exe %SystemRoot%\\system32\\dllcache\\notepad.exe
@copy /y Notepad2.ini %SystemRoot%\\system32\\dllcache\\Notepad2.ini
还原.bat
@if not exist .\\notepad原版.ini copy /y .\\notepad.ini .\\notepad原版.ini
@copy /y %SystemRoot%\\system32\\notepad.ini .\\
@del /q %SystemRoot%\\system32\\notepad.ini
@copy /y .\\Backup\\notepad.exe %SystemRoot%\\
@copy /y .\\Backup\\notepad.exe %SystemRoot%\\system32\\
@copy /y .\\Backup\\notepad.exe %SystemRoot%\\system32\\dllcache
以上保存为批处理bat文件后放在notepad2目录下就好了,双击替换.bat自动替换系统记事本并将系统记事本保存到notepad2同目录下的backup文件夹里
@Chris, 呃,,就是为了避免这种方式才用的映像劫持的。。
像zhfi1022汉化版一样,向所有文件格式添加右键open with notepad2 应该怎么改注册表?
@Remember, 在HKEY_CLASSES_ROOT\*\shell中添加对应的菜单项。
暂时使用自带的吧!
@不着调软件, 自带的记事本我难以使用,特别是在编辑一些脚本的情况下。。
@黯然过客, 我们不用这些的就够用了!可能,你需求会特殊些!
这个方法不错,能不能提供一个反注册的reg文件?
就是不想用了,直接双击reg还原?
将下面另存为.reg文件导入即可(注意空行不要丢了)
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]
Debugger=-
这个比错。如果能结合到securecrt上。
执行telnet时自动调用securecrt,不过默认CRT是要加参数启动,命令行的没了解。最近要考试。下周试试。
希望能得到站长指导
@deagle999, 要是加载参数启动的话,这个便携版就不能处理了,只能针对特别应用修改Loader了。
有了EmEditor还需要其他编辑器吗?我觉得就够用了
一直用notepad2,很喜欢~~
还是习惯notepad++和emeditor。需要的格式设置一下,不需要的保留记事本
这个办法很好啊,换这个编辑器了。。
原版的正则实在用不顺手 还没代码折叠。。 只有xfly_t的版本比较完美 还支持分组捕获 就是版本还没到4.2。。
np2我一直用的是zhfi1022汉化的《NotePad2 v4.1.24 Final 简体版 (非官方)》。
下载地址:http://hi.baidu.com/zhfi1022/blog/item/814e5a8b549bf318c8fc7a90.html
有时会换用eme和np++。
@78461, 汉化的不错呀,不过我习惯英文版了,总归方便就行了。
@anyone,
我用的AkelPad 加了/d 依旧
@kli, 很可能AkelPad不支持此种方式,这个Image File Execution Debugging也是有兼容性问题的。
这个方法够狠,貌似没太大必要,是一种新思路
@Comzyh, 不是新思路,这是官方文档里指定的方法。。
我安装那个mod版后,打开txt文件直接就是用的notepad2不用修改啊
@gbcwbz, 安装版的自动加上这个注册表键值了。
原来还有必要这样?
其实基本通过右击设置默认打开方式足够用了。
@yee, 右键设置默认打开方式也是可以的,但是挺麻烦的,每种文件类型都要设置下,而且有的格式如.reg就不方便直接设置打开方式了。这里的替代,是在所有调用默认记事本的情况下,转而运行notepad2,统一设置就很便利了。
哈哈,又学到好东西啦,十分感谢
劫持失败了,打开文本的时候,提示c:\windows\notepad.exe是一个二进制文件,是否打开:
点是,就是劫持的文本软件将notepad以二进制形式打开,然后再打开需要打开的文本文件:点否,就只显示空白的文件,需要打开的也没打开
郁闷啊
我也遇到同样的问题,但是我是使用editplus替换notepad。打开文件的时候,除了双击的那个文本被打开,还会自动打开一个notepad.exe的文件,实际就是将notepad.exe在editplus中打开了。每次都如此,其他的朋友没有遇到这个问题吗?
@kli,
我在下面这个链接找了个方法。
http://stackoverflow.com/questions/2984846/set-image-file-execution-options-will-always-open-the-named-exe-file-as-default
在后面加一个参数 /d
也就是最终:
“d:/notepad2.exe” /z /d
你试试。反正我这里好了。
@kli, 这个比较奇怪,是最新的notepad2吧?注册表里的数据和参数没错吧?方便的话最好把注册表数据截图发出来看看。
@黯然过客,
同问,我是替换为Emediter,也是同时会打开一个notepad.exe。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]
“Debugger”=”\”F:\\EmEditor\\EmEditor.exe\” /z”
@liamxis, 不是每个软件支持这种方式的。我这里也测试不行。。。
我是个电脑菜鸟,希望能直接有个集成汉化与替代一体的notepad2,那样就方便了。
@兔拉鱼, 汉化的话这里有:http://hi.baidu.com/zhfi1022/blog/item/814e5a8b549bf318c8fc7a90.html,替换暂时没有,不过很容易操作的。
不错 已经测试成功了,其他软件支持镜像劫持吗?
@appleman, 大部分是支持的,不过要是软件开发的时候做过特殊处理的话,会无视此参数的,具体的原理我就不懂了。
早用了,确实很方便,映像劫持后所有出现记事本的地方都被替换,一劳永逸,即使重装系统也只要导入注册表,就为这一点,我就不想再用其他编辑器了
@keeds, 嗯,我最近才发现,相见恨晚啊。。
这个方法很赞啊
这样的话是不是内存就占用的少了?
@adwords, 这个跟内存占用无关的,就是文件打开方式的接管。
杀软不会误报吗?
@落水的猫, 反正是自己添加的注册表项,即使误报的话添加到信任就行了~
@黯然过客, 这么说,我试试看