2004.07.03

キーロガーを作ろう(4)

すこし時間が空いてしまったので、既に完成してしまったと思うが、キーロガーのDLL化は、上手くいっただろうか?
プログラム自体は難しいものではないが、デバッグなどが面倒で、動作させるのには案外苦労したかもしれない。

爺さまが作ったlevel2のサンプルでは、DLLからアプリケーションへの渡しにもWindowsメッセージを使ってみた。
DLLでHookしたメッセージを、メインフォームに、ユーザーメッセージとして送信し、メインフォームは、それを受信する仕組みだ。
(これは手段のうちのひとつなので参考まで)

機能は、何の為のキーロガーを作るかによって異なってくるとは思うが、基本的なものとして、キーが入力されたWindowの情報表示と、キーアップ(2回同じキーが出ないように)のみを表示するようにしてみた。

このようなDLL化した方法だと、level1と違って、キーロガーにフォーカスが無くても、また、最小化の状態で他のアプリケーションを操作した場合でも、そのログが残っていると思う。
まだ完成していない人は、爺さまのlevel2で実験してみてくれ。

Level2プログラムをダウンロード

このキーロガーlevel2のようなHookの使い方は、キーフックだけでなく、Windowsを深く操作するアプリケーションを開発する時にもよく使うテクニックなので、マスターしておくべきテクだ。
また、オリジナルHookのDLLを一度作って持っていると、以後の開発が楽になるので、未完成の人は、時間がかかってでもオリジナル版を作ってみよう。

2004.06.26

キーロガーを作ろう(3)

さて、キーフックアプリケーションをテストしてみて、どうだろうか?
どんな問題があっただろうか?

keylog1.JPG

ひとつのキーを押すと、同じキーが2回採れるって...
まあ、それは仕方がない、キーのイベントにはキーダウンとキーアップがあるので、この単純なプログラムでは、1回のキー操作で、アップとダウンの2回のキーイベントが取得できてしまうからだ。

それよりも問題なのは、このアプリケーションかログのウインドウに向かってキーを入力しない限り、キー操作のログが採れないということだ。
これでは、Windows上の他のアプリケーション(例えばメールやワープロ)でどんな文字を入力したかを記録することはできない。

実は、Windowsメッセージというやつは、LAN上のスイッチングハブと同じように、そのデータを必要としているウインドウにしか流れていかないようになっている。つまり、分岐される前の上流で、キーをフックしないとダメ。アプリケーション上でのフックでは、Widnows全体のキーロギングはできないということになる。

この問題を解決するのがDLLだ。
同じようなプログラム(キーフック部分だけでよい)をDLL上に作成するとDLLはWindows上の上流で、すべてのメッセージをフックすることができる。

ちょっとだけ面倒だが、DLL上のフックプログラムに挑戦してみてくれ。
ここで、ちょっと問題になるのがDLLがフックしたデータをどうやってアプリケーション側に渡すかということだ。
まあ、とりあえず好きなようにやってみてくれや。

2004.06.22

キーロガーを作ろう(2)

そろそろ、キーフックくらいは成功したかな。
アプリケーション上でのキーフックくらいだったら、プログラムは10行も書けばできるはずだ。
それもほとんど教科書の丸写しでいい。
まだ成功してないやつは置いていくぞ!急げ!

爺さまは「ぱすかる」ってやつで書いてるが....別に何でもいい。

初期化
procedure TForm1.FormCreate(Sender: TObject);
begin
WinHook:=SetWindowsHookEx(WH_KEYBOARD, @KeyboardHook, 0, GetCurrentThreadID);
end;

終了処理
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(WinHook);
end;

キーフック
function KeyboardHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LResult;
begin
if (nCode>-1) then
begin
form2.memo1.Lines.Add('['+intToHex(wParam,2)+'] '+char(wParam)) ;
Result := CallNextHookEx(WinHook, nCode, wParam, lParam);
end
else
Result := CallNextHookEx(WinHook, nCode, wParam, lParam);
end;

Level1プログラムをダウンロード

このプログラムの動作には、まだまだ問題がある。キーロガーとしては使えない。自分で作ってみて体感してみてくれや。
次回で、解説しよう。

2004.06.21

キーロガーを作ろう

爺さまがキーロガーを作ったのは、確か1996年頃だったかなぁ...もう忘れてしまった。
キーロガーってやつは、Windowsの仕組みを知る上ではとても良いサンプルプログラムで、上級のプログラミング本(ハッカー本じゃないよ)によく載っている。VBでの作り方なんてものあるくらいだ。まだ作ってないひとは、オリジナルキーロガーぐらいは、作っておいた方がいい。
外国製のキーロガーは使いにくいからねぇ。
だって、日本人は、ローマ字打ちとカナ打ちの2通りの人がいるでしょ。(笑)

爺さまが作った、超お気に入りキーロガー応用のイタズラソフト「ねずみとり」

プログラムのしくみ:
1.Windowsメッセージのキーイベントをフックする。
2.キーイベントが一定時間にある数を超えたら、ひとつキーイベントをおまけで生成してあげる。
これだけ。

使い方:
コンピュータ・オタクで、ブラインドタッチでガシャガシャうつ奴いるでしょ、そういう奴のPCにセットする。
調子よく、キーボードを打ち始めると、タイプミス(実はタイプミスはしていないが)が起きる。
おかしいなぁと思って、ゆっくり打っても再現しない(笑)

ちなみに爺さまは、その頃ブラインドタッチができなかった(恥)
でも、今は、ブラインドタッチしかできない....老眼がひどくなってキーが見えないからね。

もみじ日記

初めから読むINDEX

爺さまのペット