私はいくつかのアンチウイルスソフトウェアが私のレジストリエントリを変更しようとしていたことに気づき、それを許可するかどうか尋ねました。このウイルス対策ソフトウェアは、どのようにしてそのプロセスを停止させ、私が決定を下すまで私のレジストリを変更することを止めることができますか?私はこのようなことをする可能性のあるAPIを見つけることができません。これは私のプロジェクトにとって重要です。Windowsでは、レジストリエントリが変更されないようにするにはどうすればよいですか?
おかげで、
風水
私はいくつかのアンチウイルスソフトウェアが私のレジストリエントリを変更しようとしていたことに気づき、それを許可するかどうか尋ねました。このウイルス対策ソフトウェアは、どのようにしてそのプロセスを停止させ、私が決定を下すまで私のレジストリを変更することを止めることができますか?私はこのようなことをする可能性のあるAPIを見つけることができません。これは私のプロジェクトにとって重要です。Windowsでは、レジストリエントリが変更されないようにするにはどうすればよいですか?
おかげで、
風水
アンチウィルスはレジストリ関数をフックしている可能性が高いので、実際の関数に要求を渡す前に独自のコードが最初に呼び出されます。
いくつかの非常に特殊な状況でこれを実行すると、不審な動作になる可能性があることに注意してください。
は、私はあなたがRegNotifyChangeKeyValueを見ていることができると思いますが、私はアンチウイルスは、このアプローチを使用しないと思います。これはであり、はレジストリにブロック変更されましたが、のキーが変更されたときには、に通知するために使用できます。
実際、 'RegNotifyChangeKeyValue'は変更をブロックしません。 AVソフトウェアはAPIを傍受するためにドライバを使用している必要があります(ProcessMonitorは呼び出しプロセスの呼び出しスタックなどの操作についての詳細を与えることができます)。 – Richard
これはゲームでも行われます。彼らは3Dシーンのオブジェクトをレンダリングする関数呼び出しを乗り越え、すべての文字を他のすべてのオブジェクトの上にレンダリングするようにゲームエンジンに指示します。その結果、ウォールハックが発生します。
これに使用できるAPI(アンチ・チート・ソフトウェアがこれをブロックしているのでもう使用できません)はdetours APIです。あなたはそれをあなた自身の目的のために引き続き使用することができます。
このAPIに関する多くの情報がウェブ上にあります。
が正しくRegSetKeySecurity(MSDN)を使用して、アプリケーションのレジストリキーを確保することを検討してください。
また、レジストリフィルタカーネルモードドライバを構築することもできます。そのようなドライバは、CmRegisterCallback/Ex()サービスを利用してレジストリイベントをフィルタリングすることができます。これは大きな仕事(tm)ですが、私が知っているこれを達成するための唯一の文書化された/サポートされた方法です。
それで、レジストリ機能をフックすることで、AVソフトウェアが作成したすべてのプロセスにコードを注入したことになりますか? – Utoah
カーネルサービステーブルを修正するかパッチを適用します。 'Windowsアプリケーションで使用するためにエクスポートされたすべてのカーネルサービスには、WindowsがAPIに割り当てる内部サービス番号でインデックスされたテーブル内のポインタがあります。ドライバがテーブル内のエントリを自身の関数へのポインタに置き換えた場合、カーネルはアプリケーションがAPIを実行しドライバがAPIの動作を制御できるときは常にドライバ関数を呼び出します.' [Source](https:// blogs.technet.com/b/markrussinovich/archive/2005/10/31/sony-rootkits-and-digital-rights-management-gone-too-far.aspx?Redirected=true) –
「カーネルサービステーブル」へのパッチ適用サポートされておらず、Windowsのx64版では実行できません(PatchGuardはマシンをパニックします)。以下の私の答えは、レジストリイベントフィルタリングのためにサポートされている唯一の方法です。 – Bukes