web-dev-qa-db-ja.com

他のアプリケーションのキーストロークを読み取る

OSで実行されている他のアプリケーションが、自分のアプリケーションが使用するキーストロークを読み取ることは可能ですか?

マウスイベントとウィンドウハンドルはどうですか?

マシンに侵入した可能性のある他の危険なアプリケーションからアプリケーションを保護するためにOSが使用するセキュリティウォールはありますか?

この問題でMacのWindowsと何か違いはありますか?

ありがとうございました

11
kambi

ああ、あなたは今晩御馳走を求めています!

OSで実行されている他のアプリケーションが、私のアプリケーションが使用するキーストロークを読み取ることは可能ですか?

マウスイベントとウィンドウハンドルはどうですか?

もちろんです。 Windowsメッセージ処理は本当に複雑です。次のように機能します。

_LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{

switch ( msg )
{
case WM_CREATE:

case WM_DESTROY:

case WM_COMMAND:

case WM_KEYDOWN:
}
}
_

等々。基本的に、この関数は、グラフィックシステムがアプリに対して持つ各メッセージに対して継続的に呼び出されます。メッセージの種類ごとにmsgで識別され、hwndはウィンドウハンドルを提供します。コマンドのタイプごとの情報は、wparamおよびlparamまたはそれらの組み合わせに格納されます。

Windowsには膨大な数の API Hooking Techniques があることがわかります。良いニュースは、そのうちの1つが SetWindowsHookEx() であることです。これにより、独自のハンドラーを別のアプリケーションのメッセージパイプラインに挿入し、メッセージを盗むことができます。それがすべてです。そのウィンドウで発生するすべてのボタン、すべてのメニュー、すべてのサイズ変更、作成、破棄、マウス移動、再描画、キーダウン、キーアップなどです。

自分を招待する別の方法があります-DLLインジェクションを使用してコードをプロセスのアドレス空間に入れ、実行中のコードを変更します。

これは簡単ではありませんが、それは確かに可能です

さて、あなたは防御について知りたかったのです。そうですね、 [〜#〜] uipi [〜#〜] 、またはユーザーインターフェイス権限分離は、そのような防御の1つです。プロセスの特権レベル(または必須の整合性レベル)は、他のプロセスがそのプロセスとして実行できることを制御します。 Vistaはこのトリックを使用して、特定のアプリケーションを互いに分離します。次は; ウィンドウステーション、デスクトップ、セッション 。 UACダイアログが表示されたとき、実際には別のデスクトップで実行していて、_consent.exe_がデスクトップのスクリーンショットを撮り、新しいデスクトップの背景として貼り付けていることをご存知ですか?

何を待つ?

少し戻ります。ウィンドウステーションごとに複数のデスクトップを使用できますが、どうでしょう。上手:

Windows OS内のウィンドウは、デスクトップオブジェクトの子です。

つまり、アプリケーションを実行する別のデスクトップを作成し、メインデスクトップのオブジェクトを決定的に処理する場合、ここには表示されません。 Windowsはこれを使用して、ログオン、ロック画面、UAC画面を保護します。私が開発している製品でも使用されており、 KeePass で使用されています。

これらの機能はVista/Windows 7の基本であり、なくなる可能性はほとんどありません。それらを最大限に活用するには、UACをオンのままにして、 おそらくこれを読んでください にします。

さて、Mac OSX。免責事項:私はOS Xスタックについてほとんど知りません。ただし、私はLinux/Xサーバーに精通しています。 Linuxは、setuidビットなどではなくposix機能の導入により、RBAC/MACタイプのシステムにますます移行しています。しかし、XにSELinuxを実装する際、開発者たちはレンガ壁に直面しました。 Xは基本的にサーバー(デスクトップ)をrootとして実行し(警告信号を送信する必要があります)、デスクトップアプリケーション(クライアント)はローカルに接続し、Cookieを渡します。 X認証を参照

基本的に、Xはある種の transport で動作し、暗号化が使用されていない場合、アクションは少なくとも外部から傍受できます。まず、Linuxカーネルは ioperm() を使用してキーストロークをキャプチャする許可を与えるだけです。これに失敗した場合、魔法のCookieがあれば、それを使用してXサーバーに接続し、 あらゆる種類のコマンド を実行できます。もちろんこれには危険な設定が必要ですが、それは可能です。

クライアントとサーバーを分離して追加するという点では、 [〜#〜] xace [〜#〜] はSELinuxと同等です。

さて、これはMac OS Xにどのように当てはまりますか?まあ、それほど多くはない-どうやら、X11は非推奨か何かです。とにかく、内部的には、Mac OS Xは独自のレンダリングエンジンと独自のウィンドウコード(Cocoa)を使用しています。まあ、それはいくつかの掘り下げで判明しました Mac OS Xでもメッセージを傍受できます 。 CocoaはデスクトップAPIです。その下では、Quartzと呼ばれるものを使用します これもタップをサポートしますsource )。

私はこれがすべてどのように機能するかについて完全に理解していません-しかし、それは適切な特権を取得して正しい呼び出しを行うことに帰着することを想像しています。 Mac OS XはUnix共有オブジェクトを使用するため、そのコールバックメカニズムは基本的に関数ポインタを使用します。どのような権限制限があるのか​​わかりません。

誰かがOS Xについてもっと知っているなら、私が言ったことを自由に感じて、あなた自身の答えでそれを拡張してください:)

10
user2213

一般に、ほとんどのアプリケーションはキーストロークを明確に保護していません。そのため、悪意のあるアプリケーションが すべてのキーストロークをログに記録する を行う可能性があります。

これが、パッチ適用、サービスリリース、セキュリティ更新、アンチウイルスなどに多大な労力を費やしている理由です-悪意のあるアプリケーションがマシンにインストールされると、ほとんど何でもできるようになります(標準ウィンドウ、LinuxまたはMacOS環境で)

3
Rory Alsop

はい、可能です。それらはキーロガーと呼ばれます。この現象が発生した場合に警告するソフトウェアがあります(私は個人的にKaspersky Internet Securityを使用しています)。

あなたがそれがどのように行われるかに興味があるなら、VBこれに関する 空腹のハッカー の例)にあります。

1
Lucas Kauffman