DirectInputのキーボードがキーロガーに?

このQ&Aのポイント
  • DirectInputを使用したゲーム開発中に、セキュリティソフトからキーロガーの疑いがあると警告が表示される
  • キーボードの入力情報をDirectInput経由で操作するとセキュリティソフトが反応する可能性があるため、WindowsAPIのウィンドウメッセージを使うべきか
  • DirectInputならジョイパッドとキーボードの操作情報を統一的に扱えるため、直感的なコードになる
回答を見る
  • ベストアンサー

DirectInputのキーボードがキーロガーに?

現在 フレームを単位としてキーボードの状態変化をリプレイデータとして保存出来る DirectXを使用したゲームを作っているのですが 使用中のセキュリティソフトが DirectInputでGUID_SysKeyboardを使ってGetDeviceStateでキーボードの入力情報を操作しようとすると 「キーロガーの疑いがあります」と言ってきます。 現在のところはデフォルト動作(?)で許可はしているようですが WindowsAPIのウインドウメッセージでキーボードからの入力情報を操作しながら 同時にジョイパッドからの入力情報はDirectInput経由で操作 としていた時は出てなかった気がするので たぶんDirectInputでキーボードの入力情報をいじろうとした場合に出るのでは? と思うのですが SetCooperativeLevelで指定しているフラグは DISCL_FOREGROUND|DISCL_NONEXCLUSIVE  ですが、これで問題ないと考えていますし、害のある動作をするつもりは毛頭なく また、WindowsAPIからジョイパッドの操作情報を制御する、という事はまだ試していませんが、聞いた話では2つまでしか受け取れない(?)ようで、一つのPCで少なくとも4人ぐらいまでは同時プレイできるゲームにしたいので それがあってるなら、出来ればDirectInputがよく そして、ジョイパッドとキーボードで使うAPIの系統を変えるよりかは、DirectInputならDirectInputで統一、としておく方がよりシンプルで直感的なコードになりやすいと思うので、出来ればそうしたいのですが セキュリティソフトを全くいじらずに これを防ぐ方法はないでしょうか? あるいは、それを望む場合は (これが「結構細かい話でこの場合一般的に言って、ということはない」というのであれば) ・たぶん、キーボードについてはDirectInputを使ったらその時点で無理ではないか ・よって、その表示を防ぐにはキーボードについてはWindowsAPIサイドから、普通のウインドウメッセージを使ってやるべき ということでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8520/19368)
回答No.1

>キーボードの状態変化をリプレイデータとして保存出来る それって「キーロガーそのもの」でしょ。 キーロガーってのは「何のキーを、どういう風に押したか、ログを取るモノ」なんだから。 なので、キーロガーとして警告されるのは当たり前。 >害のある動作をするつもりは毛頭なく 害があるかどうかは無関係。 「キーの押下を監視して、押下状態をファイルなどに書き出す」と言う処理を行えば、セキュリティソフトが反応します。 因みに「キーボードの監視」では、リプレイは上手く行きません。 リプレイ保存は「キーやパッドの状態を読みに行っている部分」で行わないと失敗します。 保存するデータは「フレーム番号」と、キーやパッドの状態ではなく「プレーヤーがどう動くかの内部コード」にします。 で、リプレイ再生する場合は「キーやパッドの状態を読みに行く代わりに、リプレイデータを読み込んで、プレーヤーを動かす」のです(その際には「このフレームになったら」ではなく「このフレームを超えたら」にしましょう。処理落ちで「フレーム番号が飛ぶ」と、再生すべきリプレイデータが「すっ飛ばされて」変な動作をします) 擬似的にキーやパッドの変化状態をウィンドゥメッセージに突っ込んでも、メッセージが取り溢されたり、メッセージキューに空きが無くてメッセージを突っ込めないなどで、思った通りにはリプレイされません。 実際にゲームをプレイしていても、処理落ちなどで「押した筈のキーが無視される」って事が起こるので、キーやパッドの状態変化を擬似生成すると、確実に失敗します。 そういった訳で、キーとパッドは「単純にセンスするだけ」にしましょう。状態変化を保存なんかしちゃいけません。

LongSecret
質問者

お礼

ご回答ありがとうございます。 WindowsAPIで同じような記録方法をとった場合は、表示されなかったことと 聞く話では別のゲームでもそういう事がある、というケースがある ということから、DirectInputでキーボードの判定を使ったことが鍵ではないかと思ったのですが >「プレーヤーがどう動くかの内部コード」にします。 ファイルサイズ縮減のため 私が作成したリプレイデータの保存方法では 「フレーム番号」のかわりに「変化があった前のフレームとの差分数」にしてあり(そこについてはMIDIファイルなどで使われている方法である、ビットフラグを利用した可変長にするか、4バイト程度の固定にしてリプレイデータに圧縮をかけるコードを書くかはまだ実験段階ですが) ボタンであればそのボタンのONOFFが切り替わった場合インデックスのみがアウトプットされるという仕組みにしてあるのですが その単位はフレームにしてあります。 逆に言うと、記録時はDirectInputを使うならば、わざわざ1フレームごとにGetDeviceStateしに行ってチェックするという事になります。 ファイルサイズの無駄な膨張を防ぐためには変化のみを記述するのが良いのではと考えたのですが つまりは この方法そのものに問題がある、という事でしょうか?

LongSecret
質問者

補足

なお、BGMの再生のための読込時間などの制御への対処はまだですが、それを除き 完全に同じ動きをするリプレイというのは出来ています。 (フレームに従って動くので、プログラムミスがなければ当然と言えば当然ですが) 「プレーヤーがどう動くかの内部コード」が、どこまでのことによるのか…ということでしょうか?

その他の回答 (1)

回答No.2

教えてgooでは質問者が自ら書き加えたくても 出来ないようになっているため 別IDを作ることで、経過報告のスペースを確保させていただきます。 質問者です。 (自身の別IDにつけるのは「お礼」ではなく「補足」のみで、ベストアンサーに選ぶこともありません。)

LongSecret
質問者

補足

とりあえずDirectInputを使う事を控えることで対処としていましたが アップグレードしたら DirectInputを使っても、私のソフトでも他のソフトでも「キーロガーの疑い」が出なくなったようです。 まぁ動作的には「キーロガー」と言えないこともないかもしれませんが やはり倫理的、内容的には誤検出に近いと言えるレベルだったと思うので 一応 かなり最終的な段階になって 必要になったら対象としたい環境でいくつかテストさせてもらって どっちの方法でも出来ることはできますし 光明も見えたので、解決とさせていただきます。

関連するQ&A

  • ゲームパッドにキーボードを割り当てたいのです

    PCゲームをジョイパッドでやろうと思うのですが、ゲームソフトの設定ではジョイパッドを使うことができません。 それでフリーソフトでジョイパッドにキーボードを割り当てできるソフトを昔使ってたのですが忘れてしまって・・・・ わかる人がいましたら教えてくださいませ。 ゲームパッドの十字キーでマウスを操作して ゲームパッドのボタンにそれぞれキーを割り当てしました(エンターとかスペースキーとか)

  • DirectInputって何ですか?

    検索してもよくわからなかったので失礼ながら質問させていただきます。 最近(というか新しいPCに変えてから)、PCゲーム(BM98,FF11等)を遊ぼうとすると、"DirectInputの初期化に失敗しました"とのエラーが出て、強制終了するようになってしまいました。(FF11の場合は"全画面モードを失いました"と出ます)。何回か再起動するとなんとかできるようになるのですが、問題を解決して、普通に遊びたいと思います。DirectInputについての説明と、こんな問題の解決方法を教えてもらえると本当に助かります。よろしくお願いします。 OS :Windows XP Home EditionSP1 CPU:Pentium4 2.53Ghz メモリ:512M DDR SDRAM ゲームの際に使用しているパッド:sk-net Smart Joy Pad3 検索していたらゲームパッドに関する話題が多かったので一応記述させていただきます。

  • DirectInputへキー入力情報を送る

    こんにちは、現在ゲームクリアを簡単にするツールを開発しているのですが、DirectInputでキーの状態を取得しているプログラムにWin32のキー入力メッセージを送っても反応しないということがわかりました。 DirectInputでキーなどの情報を取得しているプログラムへ、キー入力やマウス入力を送るにはどうしたらいいのでしょう。 C,C++で教えていただけるとうれしいです。 キーワードでもかまいませんので、何か知っていることがあったらアドバイスお願いしますm(_ _)m

  • キーロガーについて

    素朴な疑問です!! マウスを使って文字を入力できる「IMEパッド-ソフトキーボード」 っていうのがありますが、これを使った場合でもキーロガーは入力した文字を認識するのですか?

  • スクリーンキーボードが使えなくなってしまいました。

    私は、手に障害を持っていて、キーボード操作が一切できないので、PCを使う時はマウスのみを操作して、文字入力などはスクリーンキーボードを使っています。 最近始めたMMO(オンラインゲーム)で、X-Trapというセキュリティーが導入されてしまい、そのゲームを起動しているとスクリーンキーボードが一切反応しなくなりました。 ゲームをするにも、その他の入力作業をするにも反応しないので困っています。 何か良い方法がありましたら、ぜひ情報をお待ちしています。 よろしくお願い致します。

  • パソコン用のゲームをジョイパッドで快適にプレイするには、ボタンがどれくらいあればいいでしょうか?

    いまどきのジョイパッドはボタンが12個もあるものがありますね。 これくらい無いとゲームはできないのでしょうか? それと、キーボードのキーをパッドのボタンに振り分けることはできますか?インターネットのゲームのスーパー正男など、キーボードで操作するゲームができるか不安です。 また、使いやすいのはどの会社から出ている何という製品でしょうか?

  • DirectInputを使ったゲームパッドの入力

    始めましてsun001と申します。 早速ですが質問させていただきます。 DirectInputでゲームパッドの情報を得るプログラムを作っていて スティックと各ボタンが押されたか判断できるところまでは出来ているのですが スティックの少し傾けた状態と完全に傾けた状態を区別させる方法が分かりません。 例えば、スティックが中心の時に0だとして右に傾けると(傾きの量に関わらず)100・左に傾けると-100というのが今の状態で 中心が0で少し右に倒すと30・もう少し倒すと60・最後まで倒すと100と言うようにしたいんです。 色々と調べては見たのですが、まずそれが出来るのか出来ないのかすら分からない状態で非常に困っています。 ちょっとの情報でもいいので分かる方いましたらお願いします。

  • DirectInputの DIK_???

    DirectInputを使ったキー入力の取得をしているのですが、 キーボードの英数字の横にある記号の中に 調べても解らないものがあります。 1番目の段 1234567890-^\  の中の 『^(~)』 と 『\(|)』 2番目の段 QWERTYUIOP@[  の中の 『@(`)』 4番目の段 ZXCVBNM,./\  の中の 『\(_)』 これらの文字は DIK_??? の何に当たるのでしょうか? わかる方いらっしゃいましたら、教えて頂けると幸いです。 また上記の4段のキーの中に、 『Ctrl・Shift・Alt・Windowsキーは右側キーが無い場合が有る』 みたいな、キーボードによって無かったり、 はたまた機能が違うというものが有ったりしますでしょうか? そちらも解る方が居ましたら、教えて頂けると助かります。 よろしくお願い致します。 orz

  • 2つのソフトを同時に起動・終了する

    ゲームと、ジョイパッドにキーボードのボタンを割り振れるソフトを同時に起動して、ゲームが終わったら割り振りソフトの方も終了してくれるようにできないでしょうか?

  • ノートPCのキーボードとタッチパッドの同時使用

    Lenovoの4334-97Jというノートパソコンを使っています。 このノートパソコンを使ってて気づいたのですが、キーボードとタッチパッドの同時入力ができません。 特に同時使用するような状況は無いのですが、キーボードを入力したあとマウス操作をしようとしてタッチパッドをすぐ使うと反応しません。1秒待てば反応するようになります。 これがちょっと気になるので、なんとか設定で直せませんでしょうか?

専門家に質問してみよう