3

アバスト アンチウイルスを使用しており、「AvastSvc.exe」というプロセスがあります。Windows タスク マネージャーでそのプロセスを終了/強制終了しようとすると、「プロセスを終了できません」、「操作を完了できませんでした」、「アクセスが拒否されました」というメッセージが表示されたウィンドウが表示されます。一部のシステム Windows プロセス (winlogon.exe など) を終了しようとすると、同じ動作が発生する場合があります (ただし、winlogon.exe を強制終了してマシンが停止したことがあります!)。

アプリケーション (おそらくサービスに変換されたもの) が同じように動作することを望みます。これどうやってするの?

Disable Windows Task Manager so he can't kill my processは、多くの興味深い回答がある同様の質問ですが、上記のウイルス対策ソフトウェアで使用されている手法を特徴としていないようで、「プロセスを終了できません」というメッセージが表示されます。

http://forums.codeguru.com/showthread.php?t=503337には、 (services.msc コンソールなどを介して) サービスの停止を防ぐ方法に関する解決策がありますが、タスク マネージャーでそのプロセスの終了/強制終了を防ぐ必要があります。

Windows 7 の下で、CLR/.Net ではなく、C++/winapi でアプリを作成しています。

権限に関する更新: ウイルス対策プロセス AvastSvc.exe は「システム」アカウントによって所有されています。ただし、「システム」アカウントが所有する他のプロセスがあり、それらは強制終了でき、ウイルス対策はそうではありません。また、ウイルス対策プロセスと強制終了可能なプロセスの実行権限と所有者を比較しましたが、違いは見られません。

ユーザー制御とソフトウェアの目的に関する更新: ソフトウェアの機能は、システム ソフトウェアとビジネス ソフトウェアの中間にあります。ソフトウェアの性質上、永続的に実行する必要があります。アプリケーション自体には「オフにする」アクションがあり、ユーザーにそれを使用することを奨励し、プロセスを強制終了することを思いとどまらせたいと考えています (これはアンチウイルスが行うことと似ています)。ユーザーがそれを殺すのを完全に防ぐことはできないことは理解していますが、それを難し​​くしたいと考えています。この質問は具体的に一部のサービス(アバストなど)がプロセスの強制終了を防ぐために使用する上記の方法(「プロセスを終了できません」)について。同じ動作を達成するだけで十分です。また、ユーザーは、ソフトウェアが気に入らなかったり、不要になったりした場合に、ソフトウェアをアンインストールすることができます。

4

3 に答える 3

6

これはコードではなく (重要な Windows システム プロセスの場合もありますが、[おそらく] オペレーティング システムのコンポーネントを作成するわけではありません)、アクセス許可によって実現されます。

これは、管理者に昇格してからアバストのプロセスを強制終了することで実証できます。今度は成功するはずです。または、実行可能ファイル (および場合によってはそれが存在するフォルダー) の所有権を取得してから、プロセスの強制終了を試みることもできます。繰り返しますが、成功するはずです。

Windows では、アプリケーションがユーザーよりも多くの権限をコンピューターに与えることを許可していません。マシンを所有していて、適切な権限を持っている場合は、実行中のプロセスを終了するなど、好きなことを行うことができます。ありがたいことに、開発者としてこれをブロックする方法はありません。

ユーザーは常に最終的な管理下にあります。別の状況を作ろうとすることは、ウイルスやその他のマルウェアの開発者が定期的に戦い、そして負ける戦いです。私は誰かがマルウェアを作成するのを手伝うことには興味がないので、それについて私が言おうとしているのはそれだけです。

そして、マルウェアを作成する以外に、そもそもアプリケーションのこの「機能」の動機が何であるか想像できません。通常のユーザーがビジネス システムにとって重要なプロセスを終了させないようにするだけの場合は、標準ユーザー アカウントの権限を降格して、そのような操作を改ざんできないようにする必要があります。したがって、これはおそらくコードではなく、グループ ポリシーの仕事です。

于 2012-05-08T07:56:08.183 に答える
1

Prevent user process from being kill with "End Process from Process Explorer" で提供されている関数 ProtectProcess()が、探していた効果を正確にもたらすことがわかりました。

于 2012-05-13T15:24:08.073 に答える
0
  1. プロセスを eprocess 構造から削除して非表示にします
  2. 他のプロセスによってキャンセルまたは完了できない永続的な I/O 要求を発行する
  3. スレッドを作成して独自のプロセスをデバッグする
  4. メインプロセスを監視するメモリから別のプロセスを作成し、別のプロセスによって終了されたらメモリから再起動します
于 2015-08-10T09:47:10.917 に答える