Paken.NET

筑波大学附属駒場中・高等学校 パーソナルコンピュータ研究部
<< 2008年02月 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 >>
<< Skizblaznir開発日誌_2月1週 | トップ | taikoping2CD完成。 >>

りなっくすぷろぐらみんぐ。

2007年02月04日 日曜日 | Paken > cooper |

りなっくすぷろぐらみんぐはこんなにすてきなんですよ、ということを少々。
keylogd.tar.gz
(注・このプログラムを悪用しないでください。また、このプログラムにより被った損害の一切は私及び筑駒パ研にかかわりのないものとします。以上を守れる方のみDLください。ライセンスはGPLv2です。)
今回のプログラムです。はい。キーロガーです。やっぱこういう灰色なソフトの方が心惹かれませんか?ちなみに言語はC++。ちょっと見づらいけど勘弁。

解説。。。
main.cc
1-16
unistd.h、fcntl.hはread、open関数に必要です。このread関数というのは低水準I/O関数で,JavaでいうObjectInputStreamのような使いかたをされることがあります。今回もそんな感じ。open関数はファイルを開くのに使います。ちなみにゐんどうずでもio.hに定義されています。
linux/input.hはinput_event構造体及び定数などが定義されています。
stringはみなさん知ってますね。今回はboostライブラリのshared_ptrと併用することでJava/C#っぽく使います。
みなさん御存じiostream/fstream。Java屋さんな私にとってはポリモルフィズムが使いずらくてしかたない。
stdlib.hはexitに。
code.hppはcode.ccの関数が定義されています。
std::はたくさん使うので,using namespaceしました。
18-28
ログファイルをライトオンリーでオープンしています。
今回のポイント。(?)
int fd=open(argv[2],O_RDONLY);
これは、第二引数で指定されたファイルをリードオンリーでオープンします。この第二引数は,device、つまりキーボードのデバイスファイルを指定します。unixでは、接続された周辺機器は,デバイスファイルというファイルにたいして書き込み/読み込みをすることで操作できるのです。ここがゐんどうずとの大きな差です。わけわかめなAPIを覚えなくても,汎用APIを使えるのです。今回私はこのプログラムをC++で書きましたが,もちろんJavaでもDでも、はたまたmonoでC#を叩いても、技術的には同じ動作をするプログラムをかけます(もっとも定数の移植等をしなければなりませんが。)。ゐんどうずではいやでもレドモンドの息のかかった言語を使わなければなりませんよね。
29-39
メインループ。
"true"とかstructを省いてinput_event構造体を宣言してるとこが++っぽい(もっともstdbool.hとかtypedef使えばCでもできるが)。
read(fd,&e,sizeof(input_event));
これはデバイスファイルからinput_eventのサイズ分を読んでいます。この操作をすると,eのメンバにはそれぞれ値が格納されます。一イベントに対し,input_eventにきっちり収まるようにデバイスファイルにカーネルから書き込みがあります(はい、厳密には変です。わかってます。)。構造体もビットの並びなので,基本型のように操作できるところがC/++の面白いところではないでしょうか。
if(e.type!=EV_KEY){
continue;
}
キーイベント以外を捨てます。
36-38
ログをとっています。
40-
後処理。

code.cc
定数を文字列に変換しています。なんかポインタとかめんどくさいんでshared_ptrつかってます。STLのauto_ptr(だっけ?)みたいなものです。
もちろんgetNameByCodeはシェルスクリプトでlinux/input.hを加工して作りましたよ。いちいち書いたわけではないです。

どうですか?簡単にできそうじゃないですか?(実際簡単です。難しく見えたなら私の日本語力の問題です。)私はこれを1-2時間で書きました。なれた方ならもっと早く書けるでしょう。ですが、ゐんどうずでこんなに簡単にかけるでしょうか。なんかめんどくさそう、というよりむしろどうやるかの見当すらつかなく、気が引けてしまうのではないでしょうか?

ちなみに、今回のプログラムはカーネルドキュメントを読みつつ作りました。ドキュメント回りが整備されているのもいいですね。m$dnなんて重くて重くて見る気しません。osだけでなくサイトも重いってどういうことなんでしょうね、下逸様。

結局,PCを使うということはプログラミングすることにつきるのではないでしょうか。そういう点では,プログラマにフレンドリなunixってすばらしいと思うんですよね。

あんた開発中のソフトはどうしたんだ?とか聞かないでください。暇人クーパーでした。
cooper | コメント (0) | トラックバック (0)

コメント









 

トラックバック

トラックバックURL :