利用映像劫持替換預設系統程式

在不暴力替換下,將預設開啟程式(如 notepad)替換並記錄何為映像劫持(IFEO)。

實測後 Emeditor 仍會開啟 notepad,VS Code 則能正常替換,唯 UNC 路徑下的檔案編輯時仍會把目錄傳人,這點個人無解


文件關聯

作者1
我們可能都遇到過需要更改系統默認文件關聯的情況。比如想用我們心愛的編輯器打開所有文本類型的文件。這就需要瞭解 Windows 的文件關聯。

簡單解釋一下,Windows 的資源管理器識別文件類型是由副檔名決定的(而並不是文件頭決定文件類型)。首先副檔名會對應一種文件類型,這種文件類型的不同操作再對應到不同的具體命令。

比如: .txt --> txtfile --> { "open": "notepad.exe %1", "edit": "notepad.exe %1", ... }

這些對應關係保存於註冊表的HKEY_CLASSES_ROOT項,由 Explorer 讀取後,決定文件該用什麼命令處理。

文件副檔名與文件類型的對應關係,可以通過assoc命令查看或修改。

例如:
查看後綴關聯:

assoc .txt
.txt=txtfile

新增 / 更改關聯:

assoc .json=txtfile
.jpg=txtfile

刪除關聯:
assoc .json=
(無返回內容)

文件類型與 open command 的對應關係,可以通過ftype命令查看或修改。用法與assoc類似,使用%1表示目標文件,%2等表示其他參數,%*代表所有參數。 例如:

ftype txtfile

txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1

進而,文件副檔名就與相應程式關聯上了。

以上的命令只改變副檔名對應的打開方式,文件類型的其他相關資訊不受影響。

使用 IFEO (Image File Execution Options)

我們發現,想使用指定程式打開特定後綴的文件,只需 assoc 和 ftype 就可以搞定了。

assoc .json=txtfile
ftype txtfile=MY_FAVOURITE_EDITOR.exe %1

不過這種方案只能更改 open command。比如. bat 後綴的批處理文件,右鍵點擊編輯,還是用回(很挫的)notepad 打開了。

於是很自然想到另一個方案,乾脆用我們的編輯器替換掉 notepad.exe 算了。不過這樣做的缺陷也顯而易見。何況 XP 系統還可能觸發系統文件保護機制。

因此,更好的辦法是使用 IFEO,以載入 “調試器” 的形式,在運行時 “替換” 掉系統默認程式。這樣既不會產生新文件(符號鏈結),也不會改動系統文件。

詳細操作

使用 IFEO 很簡單。註冊表定位到

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe

(注意其中的 Windows NT)

創建 Debugger 字串值 (REG_SZ),更改其值為 D:\Apps\VSCode\Sublimetext.exe -z

就可以了。

這裡的 “-z” 參數表示跳過後面的參數,如果不加這個參數,Sublime Text 就會同時打開 notepad.exe 本身,因為後者是作為被調試的程式傳參傳入 Sublime Text 的。

“-z” 參數適用於 Sublime Text。如果使用 Notepad2,則 “-z” 參數要改為 “/z”.

至於 Notepad++, 暫時無解,可以嘗試用 AutoHotKey 實現該功能。

至此,使用 IFEO 替換默認編輯器就已經完成了。快去開心地擼代碼吧!


另,也可將以下內容修改後存成 .reg 再執行亦可

1
2
3
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]
"Debugger"="\"D:\\Apps\\VSCode\\Code.exe\" -z"

何謂映射劫持(IFEO)

文章來源

一、原理

所謂的映射劫持(IFEO)就是Image File Execution Options,它位於註冊表的

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\

鍵值下。由於這個項主要是用來調試程式用的,對一般用戶意義不大,默認是只有管理員和 local system 有權讀寫修改。
比如我想運行 QQ.exe,結果運行的卻是 FlashGet.exe,這種情況下,QQ 程式被 FLASHGET 給劫持了,即你想運行的程式被另外一個程式代替了。

二、被劫持

雖然映射劫持是係統自帶的功能,對一般用戶來說根本沒什麼用的必要,但是就有一些病毒通過映射劫持來做文章,表面上看起來是運行了一個正常的程式,實際上病毒已經在後台運行了。
大部分的病毒和木馬都是通過載入係統啓動項來運行的,也有一些是註冊成為係統服務來啓動,他們主要通過修改註冊表來實現這個目的,主要有以下幾個鍵值:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsCurrent\Version\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsCurrent\Version\RunOnce

HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsCurrent\Version\RunServicesOnce

但是與一般的木馬,病毒不同的是,就有一些病毒偏偏不通過這些來載入自己,不隨著係統的啓動運行。木馬病毒的作者抓住了一些用戶的心理,等到用戶運行某個特定的程式的時候它才運行。因為一般的用戶,只要發覺自己的機子中了病毒,首先要察看的就是係統的載入項,很少有人會想到映射劫持,這也是這種病毒高明的地方。

映射劫持病毒主要通過修改註冊表中的
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\

項來劫持正常的程式,比如有一個病毒 vires.exe 要劫持qq程式,它會在上面註冊表的位置新建一個qq.exe項,再在這個項下面新建一個字串的鍵 debugger把其值改為C:\WINDOWS \SYSTEM32\VIRES.EXE(這裡是病毒藏身的目錄)即可。

三、玩劫持

1、禁止某些程式的運行

1
2
3
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\qq.exe]
Debugger=123.exe

把上面的代碼保存為norun_qq.reg,雙擊導入註冊表,每次雙擊運行QQ的時候,係統都會彈出一個框提示說找不到QQ,原因就QQ被重定向了。如果要讓QQ繼續運行的話,把123.exe改為其安裝目錄就可以了。

2、偷樑換柱惡作劇

每次我們按下CTRL+ALT+DEL鍵時,都會彈出任務管理器,想不想在我們按下這些鍵的時候讓它彈出命令提示符視窗,下面就教你怎麼玩:

1
2
3
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe]
Debugger=D:\WINDOWS\pchealth\helpctr\binaries\mconfig.exe

將上面的代碼另存為 task_cmd.reg,雙擊導入註冊表。按下那三個鍵打開了”係統配置實用程式”。

3、讓病毒迷失自我

同上面的道理一樣,如果我們把病毒程式給重定向了,是不是病毒就不能運行了,答案是肯定的。

1
2
3
4
5
6
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sppoolsv.exe]
Debugger=123.exe
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\logo_1.exe]
Debugger=123.exe

上面的代碼是以金豬病毒和威金病毒為例,這樣即使這些病毒在係統啓動項裡面,即使隨係統運行了,但是由於映像劫持的重定向作用,還是會被係統提示無法找到病毒文件(這裡是logo_1.exe和sppoolsv.exe)。

四、防劫持

1、權限限制法

打開註冊表編輯器,定位到

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\

,選中該項,右鍵→權限→高級,取消 administrator 和 system 用戶的寫權限即可。

2、快刀斬亂麻法

打開註冊表編輯器,定位到

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\

,把”Image File Execution Options”項刪除即可。

總結:以上關於映射劫持的解析與利用但願對於大家查殺木馬病毒有所幫助,也希望大家能夠挖掘更多更實用的功能。

------ THE END ------