最近のWindowsでは、%systemroot%以下のファイルを移動したり変更しても、いつの間にか元のファイルに戻っています。これはWFPというファイル保護機能が動作しているためです。仕組みについては以下のURLで説明されています。
Windows ファイル保護機能について
http://support.microsoft.com/kb/222193/ja
Microsoftの情報によれば、保護対象のファイルは以下の場合のみ変更が許されます。
- Service Packのインストール(Update.exe)
- 修正プログラムのインストール(Hotfix.exe または Update.exe)
- OSのアップグレード(Winnt32.exe)
- Windows Update
上記以外のケースで対象ファイルが変更された場合、以下の順に検索し、正しいファイルに戻します。
- キャッシュフォルダ(%systemroot%\system32\dllcache)
- ネットワークインストールパス(ネットワークインストール時)
- Windows CD-ROM(CD-ROMインストール時)
以上が簡単な動きですが、このWFPについて調べたり、回避したり、逆に利用するマルウェアなどもいくつか公開されています。
Windows File Protection Hacking
http://ruffnex.oc.to/kenji/text/wfp/
WFP(Windows File Protection)で保護されているファイルを知る
http://www001.upp.so-net.ne.jp/yamashita/doc/sfc01.htm
新手のWFPハッキングについて考える
http://itpro.nikkeibp.co.jp/article/COLUMN/20070723/277939/
WFPに関するレジストリについては以下で説明されています。
Registry settings for Windows File Protection
http://support.microsoft.com/kb/222473
以下のレジストリが関連します。
- HKLM\Software\Policies\Microsoft\Windows NT\Windows File Protection
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
Windows起動時に上記に設定されている値が以下の場所にコピーされます。
そのため、通常はこの2つのレジストリキーには同一のキー/値が設定されています。
このキー配下で設定されるキー/値は以下の通りです。
- SFCDisable(0:有効(デフォルト値)、1:無効で起動時にプロンプト、2:次回起動時のみ無効でプロンプト無し、4:有効だがポップアップ無効)
- SfcScan(0:起動時にファイルをスキャンしない(デフォルト値)、1:起動時常にスキャンする、2:1回目の起動時だけスキャンする)
- SFCQuota(キャッシュファイルサイズ(MB)、デフォルトは0xFFFFFFFFで対象全てをキャッシュ)
- SFCDllCacheDir(dllcacheフォルダの場所、デフォルトは%SystemRoot%\System32で値は設定されない)
- SFCShowProgress(0:システムファイルチェッカーの状況を表示しない(デフォルト)、1:表示する)
調査時にはこれらのレジストリ値に加えて、dllcacheとして指定されているフォルダ内のファイルが正規のものであるか確認しておくほうが良さそうです。