5

システムで「ベンチマーク」をクリーンな状態で実行し、キーロガーをインストールして、ベンチマークを繰り返すことにより、システム上のキーロガーの存在を検出できるかどうかを確認したかったのです。キーロガーを正しく実行するにはリソースを消費する必要があり、ベンチマークスコアが低くなるという考えです。

コードでは、基本的に、win32APIを使用してSendMessage()とPostMessage()を呼び出してキーストロークをシミュレートする2つのwhileループを記述しました。一定時間ループを実行し、送信された成功したメッセージの数を記録します。

私は、キーロガーが測定可能な違いをもたらさないこと(結局のところ、デスクトップ上で実行されている「もの」がたくさんあり、キーロガーはあまり使用しないかもしれないと思っていました...)またはそれがそうなることを期待していましたわずかに少ない数になります。

そして、それは主に' SendMessage() '呼び出しの場合に私が見たものです。

私が理解していないのは、私のベンチマークがPostMessage()への呼び出しの数の劇的な増加を示しているということです

キーロガーをインストールする前に、多くの実行を平均すると、1秒あたり約10kのPostMessage()が表示されます。キーロガーをインストールした後、PostMessage()への1秒あたりの呼び出しが約25kになりました。

それは私には意味がありません。

PostMessageの理解が正しければ、Windowsメッセージがプロセスのメッセージキューに追加され、実行が再開されます(SendMessageは、プロセスがメッセージを処理するまで待機してから戻ります)。PostMessageはSendMessageよりも高速に実行され、メッセージキューがいっぱいになると一部のメッセージが失われる可能性があると思いますが、私の限られた理解では、キーロガーがパフォーマンスを向上させる方法を理解するのに役立ちません。 。

コードはとてもシンプルな気がします。キーストロークとして登録され(メモ帳に送信しています)、キーロガーがログに記録していることを確認できます。

誰かが私に欠けているものを説明できますか?

キーロガーはどのようにパフォーマンスを向上させることができますか?!

更新 ベンチマークを10回実行し、結果を平均しています。
キーロガーを一時停止すると(まだインストールされているが、ログには記録されないように)、高い結果が得られました。キーロガーをアンインストールしてマシンを再起動した後、平均10回の実行は1秒あたり9.9kになりました。私の元の結果と非常に一致しています。

アンインストールを完了するには、マシンを再起動する必要がありました。

4

1 に答える 1

8

PostMessage()呼び出しを抑制することはあまりありません。内部的には、安全な方法でメッセージを追加するために、スレッドのメッセージキューにアクセスするためのロックを取得する必要があります。ここでの外れ値は、ロガーなしでこれを行うのが非常に遅いことです。1秒あたり10Kの呼び出しはそれほど多くありません。アプリがキューを空にする作業をしている限り、Windows内にスロットルがあり、しばらくの間呼び出しをブロックする可能性があります。これが本物かどうかはわかりません。

キーボードロガーが使用するフックに大きく依存します。候補は複数あります。ただし、メッセージがキューから取得されてウィンドウにディスパッチされた場合にのみ、メッセージがキューに追加されたことを検出するフックはありません。WH_GETMESSAGE、WH_CALLWNDPROC、またはWH_CALLWNDPROCRETと同様です。したがって、ロガーはキューを空にするのを遅くします。

これは、表示されている内容の説明になります。スロットルせずにPostMessage()を呼び出すと、メッセージキューがオーバーフローします。デフォルトでは、10,000件のメッセージのみを含めることができます。あなたがそれをオーバーフローさせるならば、あなたは速いリターンを得るでしょう、そしてあなたはより高い率を測定するでしょう。

したがって、PostMessage()の戻り値を確認するのを忘れたと思います。メッセージを追加できなかった場合はFALSEを返します。

于 2012-11-28T15:44:38.183 に答える