情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

実際にcmd.exeのリネームをやってみた(Windowsのシステムファイルを名前変更する方法)

Windows (497) Windows 7 (61)

「cmd.exeをリネームするとセキュリティ対策になる」とぼんやり耳にした人になった"つもり"になって、実際にcmd.exeをリネームしてみました。実際そういう人がチャレンジして変更した直後に副作用があったりしないのかが気になっただけなので、普通は真似しないでください。現在どうしてもcmd.exeをリネームしなきゃならない人向けです。いつものように自己責任ですし、所有権の変更なども行うため、セキュリティに関して問題が発生する可能性があることに特に留意してください。

cmd.exeをリネームしておく(ここでファイル名変更の出番です!) 引用元

「cmd.exeをリネームしてみたら~」という記事を書きたい人向けかもしれません。

ちなみにWindows 7 64bitを使い、Windows 2000 SP無しではありません。管理者権限のあるユーザでログオンしており、UAC(ユーザアカウント制御)はオフにしてあります。(追記:Windows 2000、Windows XP、Wiundows 8ではまたリネーム方法が異なるそうです)

普通にリネームしようとすると…

名前を変更しようとすると、次のエラーが。

ファイルアクセスの拒否

この操作を実行するアクセス許可が必要です

このファイルを変更するには、TrustedInstaller からアクセス許可を得る必要があります。

というわけで、所有者がTrustedInstallerになっており、変更できない模様です。普通はココで挫折すると思います。

リネーム作業

それでもリネームしようと思った人が実行しそうなリネーム作業は以下の通りです。Microsoft Security Essentialsは特にOFFにする必要がありませんでした。

手動で復元ポイントの作成

まず、「Win+<復元ポイントの作成>」から「システムの保護が有効になっているドライブの復元ポイントを今すぐ作成します」で復元ポイントを作成しました(戻すため)。

所有権取得

まず、TrustedInstallerから、cmd.exeの所有権を取り上げます

保険(?)のためにcmd.exeをコピーしてcmd - コピー.exeを作っておきます。

そして、"cmd - コピー.exeから"、「takeown C:\Windows\System32\cmd.exe」を実行します。すると、「成功:ファイル(またはフォルダー):"C:\Windows\System32\cmd.exe" は現在ユーザー"PC名\ユーザ名"によって所有されています」のように表示されます。

これで、TrustedInstallerに許可をもらう必要は無くなりました。

※所有者をTrustedInstallerに戻したい場合は「NT SERVICE\TrustedInstaller」でユーザ名を指定してください。

書き込み権限付与

もう一度エクスプローラから普通にリネームしてみると、それでも同じような許可が必要ですエラーになってしまいます。これは、所有者に書き込み権限がないためです。

cmd.exeを右クリックして、「セキュリティ」タブの「詳細設定」を開きます。次に「アクセス許可」タブを開いて下の方にある「アクセス許可の変更」をクリックします。「アクセス許可エントリ」に所有者が無かったので、「追加」をクリックします。そして、先ほどの所有者情報に出ていた「ユーザ名」を「選択するオブジェクト名を入力してください」というテキストボックスに入力して「名前の確認」をクリックし、入力欄の表示にPC名が付いたのを確認して「OK」をクリックします。

次に、そのユーザに対するアクセス許可を設定する画面が開くので、「フルコントロール」の「許可」にチェックを入れます。すると「システムフォルダーのアクセス許可を変更しようとしています。これにより、アクセスの予期しない問題が発生し、セキュリティが弱くなることがあります。続行しますか?」と表示されるので「はい」をクリックします。そして、開いていたウィンドウをすべて「OK」で閉じます。

リネームする

ここまで来れば普通にリネームできるので、いつも通りにリネームします。すると、エラーや警告は出ずにリネームが完了します

cmdexe-renamed

これで、「cmd.exe」という名前のファイルがSystem32フォルダから無くなりました

(本当はcmdで始まらない名前にしたほうがよかったかも。)

すぐ何かが起こるわけではない

リネームしてみたところ、これだけでは特に何も変化がありませんでした

変更直後、特にエラーは表示されず、なんともないように見えます。

元に戻す

すぐ元に戻します。丁寧に元に戻そうにも、間違えたり失敗する可能性がやや高いので、あらかじめ作っておいた復元ポイントを利用して元に戻します

「Win+<復元ポイントからのシステムファイルと設定の復元>」からシステムの復元を開き、先ほど作成した復元ポイントを選択して復元を実行し、自動的に再起動するので、復元完了を待ちます。

復元が完了すると、cmd.exeは元に戻っていました。もう一度普通にリネームしようとして、TrustedInstallerのエラーが出ることを確認してください。また、cmd - コピー.exeは手動で削除してください。

ひとこと

なんとなくcmd.exeをリネームしようとしたら結構面倒でした。ただ変更しただけでは特に面白いことが起こらなかったので、なおのこと真似しないほうがいいと思います。

実験1:再起動してみる(2013年06月11日 追記)

cmd.exeを削除した状態でPCを再起動してみたところ、通常同様に再起動できました。起動後にエラーは表示されず、リネームしたcmd.exeもそのままで、特に復元された、ということもありませんでした。

実験2:.batをダブルクリックで実行してみる(2013年06月12日 追記)

バッチファイル(.bat)の解釈はcmd.exeが担当している、ということで、「echo」とだけ書いた.batファイルを作成し、ダブルクリックで実行してみました。本来ならば、拡張子.batに関連づけられたcmd.exeが呼び出されるところですが、次のエラーになりました。

'C:/.../....bat' が見つかりません。名前を正しく入力したかどうかを確認してから、やり直してください。

「cmd.exeが見つかりません」とならない点が興味深いところです(ちなみに、空の.batを用意してしまうと、「.bat は有効な Win32 アプリケーションではありません。」というエラーが出ます)。

参考Tweetメモ

関連した重要なTweetを自分用にメモしておきます。luminさんは"盾"の中の人です(汗

関連:Windows ファイル保護機能について

コメント(0)

新しいコメントを投稿