いくつかのテストを実行したところ、アバストをインストールし、「Run」レジストリキーと「Startup」フォルダーの両方をチェックインした後、どちらの場所にもスタートアップエントリが存在しないことに気付きました。これを考慮して、OSの起動時に自動的に起動するように、ほとんどのウイルス対策プログラムはどの場所に配置されていますか?
アバストをインストールし、「Run」レジストリキーと「Startup」フォルダーの両方をチェックインした後、スタートアップエントリーがどちらの場所にも存在しないことを確認しました。
確認する必要のある他の多くの起動場所があります(後述)。
多くのウイルス対策プログラム(アバストを含む)はWindowsサービスとして開始されます。これにより、スタートアッププロセスの非常に早い段階でプログラムを稼働させ、最大限の保護を提供できます。
アバストGUI(システムトレイアイコンを含む)はHKLM\Software\Microsoft\Windows\CurrentVersion\Run
:
起動時にプログラムを実行するために使用できる場所はたくさんあります。探しているプログラムが見つかるまで、すべてチェックする必要があります。
起動場所を簡単に確認できるプログラムがいくつかあります。
msconfig([スタートアップ]タブ):
Autorunsfrom SysInternals :
注意:
] 12
プログラムを開始できる場所は少なくとも17か所あります。下記参照。
コンピューターの電源を入れると、次の自動起動の場所が次の順序で処理されます。
Windowsブートデバイスドライバー
- これらのドライバは、ストレージデバイスなどのハードウェアの適切な動作に必要であるため、最初にロードされます。
- ブートデバイスドライバーは次のキーの下にあり、開始値は0です。
レジストリキー:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
Windowsはさまざまなタスクを実行し、Winlogonプロセスを開始します。 Winlogonは、最終的に、自動起動に設定されているサービスとドライバーを読み込むサービスコントロールマネージャーを起動します。
Windows自動起動サービスとドライバー
- サービスコントロールマネージャー(SCM)プロセス(\ Windows\System32\services.exe)は、開始値2でマークされたサービスまたはドライバーを起動します。
レジストリキー:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
RunServicesOnce
- このキーは、コンピューターの起動時にサービスを開始するように設計されています。
- これらのエントリは、ログオン後も実行を継続できますが、HKEY_LOCAL_MACHINE ...\RunOnceレジストリがプログラムのロードを開始する前に完了する必要があります。
レジストリキー:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
RunServices
- このキーは、サービスも開始するように設計されています。
- これらのエントリは、ログオン後も実行を継続できますが、HKEY_LOCAL_MACHINE ...\RunOnceレジストリがプログラムのロードを開始する前に完了する必要があります。
レジストリキー:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
Windowsログオンプロンプトが画面に表示されます。ユーザーがログインした後、残りのキーを続行します。
通知
- このキーは、特定のイベントが発生したときに実行されるプログラムを追加するために使用されます。
- イベントには、ログオン、ログオフ、起動、シャットダウン、startscreensaver、stopscreensaverなどがあります。
- Winlogon.exeがリストされているようなイベントを生成すると、WindowsはNotifyレジストリキーでDLLがこのイベントを処理します。
- マルウェアは、この方法を使用して、ユーザーがコンピューターにログオンしたときに自身をロードすることが知られています。このような方法でロードすると、マルウェアプログラムは、停止が容易ではない方法でロードされます。
レジストリキー:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
UserInitキー
- このキーは、ユーザーがWindowsにログインした直後に起動するプログラムを指定します。
- このキーのデフォルトのプログラムはC:\ windows\system32\userinit.exeです。 Userinit.exeは、ユーザー名のプロファイル、フォント、色などを復元するプログラムです。
プログラムをコンマで区切ることにより、このキーから起動するプログラムをさらに追加できます。例えば:
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit = C:\ windows\system32\userinit.exe、c:\ windows\badprogram.exe。
これにより、ログイン時に両方のプログラムが起動し、トロイの木馬、ハイジャッカー、スパイウェアが起動する一般的な場所になります。レジストリキー:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
シェル値
- この値には、Userinit.exeが起動するコンマ区切り値のリストが含まれています。
- WindowsのデフォルトのシェルはExplorer.exeですが、正当な置換が行われています。 userinit.exeがシェルを起動すると、最初にHKEY_CURRENT_USERにあるシェル値が起動されます。この値が存在しない場合は、HKEY_LOCAL_MACHINEにある値を起動します。
レジストリキー:HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\\Shell HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\\Shell
自動開始の残りの場所が処理されます。
RunOnceローカルマシンキー
- これらのキーは、主にセットアッププログラムで使用するように設計されています。
- これらのキーのエントリは一度起動すると、キーから削除されます。
- キーの値の前に感嘆符がある場合、エントリはプログラムが完了するまで削除されません。それ以外の場合は、プログラムが実行される前に削除されます。感嘆符が使用されておらず、このキーで参照されているプログラムの完了に失敗した場合、すでに削除されているため、これは再度実行されないため、これは重要です。
- このキーのすべてのエントリは、未定義の順序で同期的に開始されます。
- このため、このキーのすべてのプログラムは、HKEY_LOCAL_MACHINE ...\Run、HKEY_CURRENT_USER ...\Run、HKEY_CURRENT_USER ...\RunOnce、およびスタートアップフォルダーを読み込む前に終了する必要があります。
- RunOnceキーは、Windows 2000およびWindows XPセーフモードでは無視されます。RunOnceキーは、Windows NT 3.51ではサポートされていません。
レジストリキー:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
実行
- これらは、自動起動をインストールするプログラムの最も一般的な起動場所です。
- デフォルトでは、これらのキーはセーフモードでは実行されません。これらのキーの値の前にアスタリスク*を付けると、セーフモードで実行されます。
レジストリキー:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
All Users Startup Folder
- Windows XP、2000、およびNTの場合、このフォルダは、このコンピュータにログインするすべてのユーザーに対して自動起動する必要があるプログラムに使用されます。
通常は次の場所にあります:
Windows XP
C:\Documents and Settings\All Users\Start Menu\Programs\Startup
Windows NT
C:\wont\Profiles\All Users\Start Menu\Programs\Startup
Windows 2000
C:\Documents and Settings\All Users\Start Menu\Programs\Startup
ユーザープロファイルスタートアップフォルダー
- このフォルダは、ログインした特定のユーザーに対して実行されます。
このフォルダは通常、次の場所にあります:
- 勝利9X、ME
c:\windows\start menu\programs\startup
- Windows XP
C:\Documents and Settings\LoginName\Start Menu\Programs\Startup
RunOnce現在のユーザーキー
- これらのキーは、主にセットアッププログラムで使用するように設計されています。
- これらのキーのエントリは一度起動すると、キーから削除されます。
- キーの値の前に感嘆符がある場合、エントリはプログラムが完了するまで削除されません。それ以外の場合は、プログラムが実行される前に削除されます。感嘆符が使用されておらず、このキーで参照されているプログラムの完了に失敗した場合、すでに削除されているため、これは再度実行されないため、これは重要です。
- Windows 2000およびWindows XPセーフモードでは、RunOnceキーは無視されます。
- RunOnceキーは、Windows NT 3.51ではサポートされていません。
レジストリキー:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
Explorer Run
- これらのキーは通常、コンピューターまたはユーザーに設定されたポリシーの一部としてプログラムを読み込むために使用されます。
レジストリキー:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
ロードキー
- このキーは一般的に使用されなくなりましたが、プログラムの自動起動に使用できます。
レジストリキー:HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
AppInit_DLLs
- この値は、AppInit_DLLsレジストリ値を介してロードされるファイルに対応しています。
- AppInit_DLLsレジストリ値には、user32.dllが読み込まれるときに読み込まれるdllのリストが含まれています。
- ほとんどのWindows実行可能ファイルはuser32.dllを使用するため、AppInit_DLLsレジストリキーにリストされているすべてのDLLもロードされます。これにより、DLL複数のプロセス内でロードされるため、システムを不安定にすることなく停止できないプロセスもあります。
- User32.dllファイルは、ログオン時にシステムによって自動的に開始されるプロセスでも使用されます。これは、AppInit_DLLs値でロードされたファイルがWindowsスタートアップルーチンの非常に早い段階でロードされ、システムにアクセスする前にDLLがそれ自体を非表示または保護することを許可します。
レジストリキー:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows
HelpingHand 64ビットのコンピューターには2つの場所があることを指摘しました:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
64ビットDLLを参照し、HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Windows
32ビットDLLを参照します。64ビットプロセスは64ビットDLLをロードし、32ビットプロセスは32ビットDLLをロードします。
ShellServiceObjectDelayLoad
- このレジストリ値には、Runキーと同様の方法で値が含まれています。
- 違いは、ファイル自体を指すのではなく、使用されている特定のDLLファイルに関する情報を含むCLSIDのInProcServerを指すことです。
- このキーの下のファイルは、コンピューターの起動時にExplorer.exeによって自動的に読み込まれます。 Explorer.exeはコンピューターのシェルであるため、常に起動し、常にこのキーの下のファイルを読み込みます。したがって、これらのファイルは、人間の介入が発生する前の起動プロセスの早い段階でロードされます。
レジストリキー:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad
SharedTaskScheduler
- このセクションは、XP、NT、2000マシンのSharedTaskSchedulerレジストリ値を介してロードされるファイルに対応しています。
- このレジストリ値のエントリは、Windowsの起動時に自動的に実行されます。
レジストリキー:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler
その他
以下は、起動時にプログラムが自動起動できるファイルです。
- c:\ autoexec.bat
- c:\ config.sys
- windir\wininit.ini-通常、セットアッププログラムがファイルを1回実行してから削除するために使用します。
- windir\winstart.bat
- windir\win.ini-[windows] "load"
- windir\win.ini-[windows]「実行」
- windir\system.ini-[ブート]「シェル」
- windir\system.ini-[ブート] "scrnsave.exe"
- windir\dosstart.bat-シャットダウンメニューで[MS-DOSモードで再起動]を選択すると、Win95または98で使用されます。
- windir\system\autoexec.nt
- windir\system\config.nt
私はSysInternals、Nirsoft、WinPatrolとは何の関係もありません。ソフトウェアのエンドユーザーにすぎません。
セキュリティ製品には通常、次のようないくつかのコンポーネントがあります。
つまり、完全に本格的なセキュリティ製品は、通常、ユーザーモードサービス、ドライバ、およびログオンしたユーザーとして実行されているプロセスの組み合わせです。あなたの質問から、あなたは後者を見ているように聞こえます。 services.mscを実行すると、ユーザーモードサービスが表示され、driverquery.exeなどのツール、またはmsinfo32を実行すると、ドライバーを表示できます。ユーザーモードサービスとカーネルドライバーはすべて、サービスコントロールマネージャー(SCM)データベースのhklm\system\currentcontrolset\servicesにあります。