2009年11月9日 星期一

副檔名的危機(Crisis of Filename Extension)

副檔名這個東西,就跟命令提示字元(文字模式)一樣,雖然漸漸地被人所遺忘,但是它們的重要性卻是依然存在,如果你的電腦少了這個副檔名的支援,我想很多程式應該都會直接變成半殘,因為關聯的檔案全部都找不到該用何種程式執行,不過,從早期只能夠支援3個字元的副檔名,一直到現在可以有256個字元,但是實際能夠做為檔案格式的判斷時,依然只有3個字元有效。


【Windows預設會隱藏副檔名的顯示】


不過,現在的Windows大多數都會直接「隱藏已知副檔名」,以免使用者混淆或是在更改檔名時,還得多按副檔名的名稱,可是這麼一來只要稍微動點手腳,基本上就可以讓使用者誤觸機關而不自知,尤其實再加上「autorun.inf」的威力,就算微軟已經透過安全性更新,將這個檔案自動執行的功能給停用,但是,不代表它就完全沒有辦法誘使你去點擊,至少我先前就有看到類似的欺騙手法。

也因為副檔名被隱藏了之後,使用者都很單純地以「圖示(Icon)」做為檔案的類型,忘記圖示是可以被更改的,所以惡意的執行檔,也可以偽裝成資料夾的模樣,讓使用者來協助它們執行惡意程式。


【MS-DOS 批次檔案的圖示變成了資料夾】

這個部分只需要修改一下登錄檔(Registry)的這個位置,就可以達到你想要的效果:

reg add HKCU\batfile\DefaultIcon /ve /t reg_expand_sz /d %%SystemRoot%%\System32\shell32.dll,3 /f
或是把最後面的路徑(/d之後,到/f之前),設定成你所指定的某個exe檔的圖示(D:\123.exe,0),一樣也可以自己修改成想要的圖示。


【上述的reg檔匯入後,就可以改變成此內容】

如此一來,惡意程式的撰寫者,只要先把你原本的資料夾隱藏唯讀之後,接著再把自己的惡意程式經過這樣子的修改,讓它替代你原本使用的資料夾,使用者就會自己乖乖地去執行惡意程式,後果會怎樣,就全都看惡意程式怎麼運作而定,所以副檔名和圖示的變更,一樣可以讓使用者上當。

如果眼尖一點的人或許會發現我在上圖中的(test_folder)測試資料夾,有兩個檔案,一個是MS-DOS 批次檔案、一個是文字檔,為什麼僅有文字檔列出副檔名呢?(我已經在設定中,要求系統顯示已知的副檔名

其實,就算是在設定中已經要求系統顯示副檔名的名稱,只要惡意程式的撰寫者,在特定檔案格式的登錄檔中,加上「NeverShowExt」的字串,它的副檔名就會直接被隱藏,如此一來就算你在資料夾選項中,打開副檔名的顯示,一樣無法更動該項設定。

reg add HKCU\batfile /v NeverShowExt /t reg_sz /f

我想,這樣子的說明跟解釋,應該可以解決一些狀況,當然...千萬別用這手法去害別人,我只是想分享一下這些小細節可能會帶來的風險,如果拿來做壞事的話,可不要牽拖到我身上才好,工具人人會用,各有巧妙不同而已。

4 則留言:

  1. 微軟的解決方案真的很匪夷所思。
    Linux上改檔名的時候會去判斷 dot 的存在,並使後面的文字(副檔名)不被反白。
    這個判斷簡單的要死,結果微軟工程師都不屑做。

    回覆刪除
  2. Li:
    其實改檔名,而不更動到副檔名,有某些檔名更改的軟體(例:CKRename)可以做到,至於微軟為何不支援這個功能,或許它們有它們的考量(只是我們不知道?)

    不過,老實說副檔名的問題對一般人來說真的像是總累贅,也不會在意太多,在意的人往往都是替別人擔心的居多,至於Linux改檔名的部分,筆者不常在圖形介面下操作Linux,所以大多還是得乖乖的輸入全稱就是...。

    或許,那天微軟會聽到你的聲音也說不定...

    回覆刪除
  3. 也許是增加防毒軟體銷售數字的考量(笑)。

    我記得 rename 設計的還算不錯,大部分的時間都可以略過副檔名就是。

    其實我現在正在考慮要不要買Win7,畢竟現在WinXP就夠用了,而且Linux才是我主要用的OS。

    回覆刪除
  4. Li:
    就算是增加防毒軟體的銷售成績,很有可能是顯示在別家廠商身上吧!

    要不要買win7這件事,其實應該是硬體剛好要換時,透過購買商用主機時一併採購的機率較高(拿win7版權用xp...)

    雖然Linux是主要的OS,但是,還是有某些東西不得不在Windows上跑,我想,這應該是IT人的宿命吧!(嘆)

    回覆刪除