在微软终于对 nodepad.exe 和 mspaint.exe 的界面下手,把这两个系统程序重构为UWP程序后,原有的镜像劫持替换 notepad.exe 的方法就直接失效了,经过研究,找到了亲测可行的替换方法,特此分享。
具体步骤如下:
- 卸载新版本的 notepad.exe。
- 劫持镜像。
- 关闭 UseFilter 开关。
以下涉及到的软件有:
- Notepad2(待替换的软件)
- Registry Finder(非必要,可以直接用系统自带的 regedit)
- Windows PowerShell(系统自带)
操作步骤
卸载 notepad.exe 的升级UWP程序
随便用记事本打开一个文件,然后用 taskmanager 追踪文件的位置,得到一个明显是Windows程序的目录。C:\Program Files\WindowsApps\Microsoft.WindowsNotepad_10.2102.13.0_x64__8wekyb3d8bbwe\Notepad
直接使用 PowerShell 运行以下命令执行完成之后再次用记事本打开文件,得到的目录就在1
Get-AppxPackage *notepad* | Remove-AppxPackage
C:\Windows\System32
下了,任务管理器里记事本图标会变,记事本状态栏位置也会提示升级。劫持镜像
先下载待替换的软件,比如我上面列出来的 notepad2 到合适的目录,然后按照老方法做镜像劫持,如果使用我推荐的 notepad2 版本可以直接在设置里进行操作。脚本中的路径可以根据实际情况自行调整。1
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v "Debugger" /t REG_SZ /d "D:\ProgramData\Notepad2\Notepad2.exe /u /l /z" /f
关闭 UseFilter 开关
1
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v "UseFilter" /t REG_DWORD /d 0 /f
原因分析(推测)
根据具体细节推测如下:
- Windows 在运行 UWP 程序的时候,跟传统 win32 程序略有不同,会有检查更新的逻辑,如果新版本存在,根本不会触发镜像劫持。
- UseFilter 为 1 时,会触发子目录中的 FilterFullPath 相关的逻辑,导致替换不成功,所以需要关掉。