リバースエンジニアリングのコンテスト、今年も開催 36
ストーリー by soara
腕に覚えあり 部門より
腕に覚えあり 部門より
curio 曰く、
ITmediaの記事等によると、ネットエージェントが去年に続いて今年も『リバースエンジニアリングの技術力を競う一般参加型のコンテスト「リバースエンジニアリングチャレンジ」を、9月19日正午~22日午前にインターネット上で開催する。』とのこと。
同社のページには昨年の順位と所要時間も掲示されている。ちなみにタレコミ子は今年ついに連休中の私用ができたので参加できない。しかしそもそも去年の記憶を思い起こすとやっぱり参加することにしか意義がないだろうから、大事な私用が仮にもし万が一なくなったとしても今回はギャラリーとして、連休中に余裕があって腕に自信のあるスーパーな方々の活躍を見守りたいと思う。
でもって、そのスーパーなスキルのひとかけらでもタレコミ子に分けてもらえないだろうか...ほんのちょっとでいいから。
本当のハカーがやってしまいそうなこと (スコア:5, おもしろおかしい)
REによって作られたもの (スコア:5, 興味深い)
例えばFFmpegの場合、仕組みを解析して数式やアルゴリズムに戻してから効率が良くなるように実装しているので、RE元のライブラリよりも高速なことが多いです。
日本のREはクラックというかファイル抽出・キー抽出に偏ってるのが残念でしかたありません。もっと、仕組みを分析し仕様化し再実装することを目指してほしいなと思います。
Re:REによって作られたもの (スコア:2, 興味深い)
> 例えばFFmpegの場合、仕組みを解析して数式やアルゴリズムに戻してから効率が良くなるように実装しているので、
> RE元のライブラリよりも高速なことが多いです。
動画系のFFmpegに限ってはそんなことする必要ないし、するべきでも無いだろ。
他に挙げた例と違って、似せたい(互換性を得たい)実装が先にあるわけじゃなくって、
規格/仕様やアルゴリズムなどが公開されていて、それに対しての様々な先行実装があるんだから。
> もっと、仕組みを分析し仕様化し再実装することを目指してほしいなと思います。
REに限っての話としていいたいことはわかりますが、
FFmpegみたいな規格ものの実装については、そもそもREみたいなアプローチではなく、
本来の動画理論などに基づいた最適実装を目指してほしいなと思います。
もちろん、vendor拡張tagや微妙なエンコード時の癖など、規格/仕様にはないが
出回ってしまっているデータを救済するために、本線のアルゴリズムとは別の目的でREするのは、
他に挙げている例と同様の事情だと思いますので、必要悪だとは思いますよ。
まあ、あとは知財リスクてんこ盛りって課題もありますな。
リファレンスの規格アルゴリズムに対して各社設計/実装レベルで
いろいろチューニングを施して、知財化している世界なので。
そもそも大元の規格特許への対応も含めて、
そういうものとして利用側や配布側が充分注意して対応していくしかないんだろうな...
Re:REによって作られたもの (スコア:4, 参考になる)
http://wiki.multimedia.cx/index.php?title=Indeo_5
同じく仕様の公開されていないVP6はこんな感じです。
http://wiki.multimedia.cx/index.php?title=On2_VP6
音声コーデックのWMAはこんな感じ。
http://wiki.multimedia.cx/index.php?title=Windows_Media_Audio
同じくALAC。
http://wiki.multimedia.cx/index.php?title=Apple_Lossless_Audio_Coding
WavPackもこの通り。
http://wiki.multimedia.cx/index.php?title=WavPack
>規格/仕様にはないが出回ってしまっているデータ
例えばFFmpegに実装されたRealVideo 4.0のデコーダではバギーな公式デコーダの実装に合わせてます。Kostya氏の"should RV40 designers burn in hell?"という質問とMichael氏の"yes"という回答が印象的。
もう一つ例を。最近FFmpegに実装されたTwinVQデコーダでは、ヤマハのTwinVQエンコーダがバギーなNTTのTwinVQデコーダの実装に最適化されていたということでNTTのデコーダ互換の実装になっています。実装したのはVitor氏で、ソースコードにはvery_broken_opという関数があったり、"For some unknown reason, NTT decided to code this case differently"とか書かれてたりしています。MPEG-4のTwinVQは今後別に実装されるはず。
>知財リスクてんこ盛り
http://www.ffmpeg.org/legal.html
FFmpeg側のスタンスとしては特許の問題は知らぬ存ぜぬ国によるで。ソースコードでの配布だと特許の問題ないですしね。
特許問題(オフトピ) (スコア:2, 興味深い)
> ソースコードでの配布だと特許の問題ない
「午後のこ~だ」がソースコードで配布してるのもこれなんだろうけど、
なんか不思議な話だよね。
インタプリタ言語とかの場合はどーなるんだろ。
Re:REによって作られたもの (スコア:1)
それにも関わらず,リバースエンジニアリングが正当な行為であるように書かれていることに疑問を感じます.
リバースエンジニアリングを禁じること自体が,もっと上位の法律なり憲法なりで禁じられていて,実質的に守る必要がないということなんでしょうか.
Re:REによって作られたもの (スコア:1, 参考になる)
> 素朴な疑問なんですが,
このあたり参照ですかね。
http://www.soumunomori.com/column/article/atc-49665/ [soumunomori.com]
http://www.license-keiyaku.com/softwear/reverseengineering.html [license-keiyaku.com]
つまり、個人でやるぶん問題ないということです。
無論、クリーンルーム方式での解析や解析手法などのノウハウの公開は良いですがその製品に関する公開されていない
解析結果について公開するとトラブルになりかねません。
#あまり自信が無いのでAC
Re:REによって作られたもの (スコア:1)
の二つの論点がありますね.
日本ではどちらも判例にはなっていない(欧米ではなっている)ので, 最終的にどう判断されるかは不確定ですが, 今のところ以下のような解釈が成されているようです.
前者は,純粋な研究目的であれば認められることに異論はなさそうです.
ただ,結果の公開や,クローンの作成はまた別の問題のようです.
後者については,公正取引委員会の報告書(PDF) [meti.go.jp]が, 日本では最も権威のある?考え方のようです.
これによると,あるソフトウェアとインターオペラビリティを持つソフトウェアを開発するために,
そのソフトウェアからインターフェース情報を取り出すことを禁止することは独占禁止法に反する,ということです.
Re: (スコア:0)
最初から上手に作れ
s/私用/仕様/ (スコア:0)
| ノ\ ヽ | >大事な私用が
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
s/私用/彼女とのデート/(Re:s/私用/仕様/) (スコア:3, おもしろおかしい)
じゃね~の?
#その彼女が実はDSの中ってオチかも知れんが(ぉぃ
Re:s/私用/彼女とのデート/(Re:s/私用/仕様/) (スコア:2, 参考になる)
Re:s/私用/彼女とのデート/(Re:s/私用/仕様/) (スコア:2, おもしろおかしい)
そ、そんなに直に効果がでるものなのですか!?
Re:s/私用/彼女とのデート/(Re:s/私用/仕様/) (スコア:1, すばらしい洞察)
Re: (スコア:0)
Re: (スコア:0)
Re:s/私用/彼女とのデート/(Re:s/私用/仕様/) (スコア:3, おもしろおかしい)
それってコアダンプの事じゃ・・・
凛々しく、あほらしく。
Re: (スコア:0)
その絵の意味するところは、大事な私用というのは首つりのことじゃないか、ということでしょうか?
ハードウェア部門があれば (スコア:0)
Re:ハードウェア部門があれば (スコア:2)
あぁー
たしかに。
烏賊をリバースエンジニアリングして、海老を作ってしまったし。。。
Re: (スコア:0)
Re: (スコア:0)
モデ権持ちですが。
「おもしろおかしい」つけたいが話題に偏りがあるので・・・
モデのなかに「わかる人限定」が欲しい・・・
わかる人なのでAC
リバースとコアダンプ (スコア:0)
コアダンプの処理は、
駅員さんが一番技術を持っていると思う。
ただ、エンジニアリングはしてないと思う。
Re:リバースとコアダンプ (スコア:1, おもしろおかしい)
過去問 (スコア:0)
過去問は見れないのですか?
2008年の問題と回答(Re:過去問) (スコア:4, 参考になる)
リバースエンジニアリングチャレンジ 2008:NetAgent Co., Ltd. [netagent.co.jp]
ざっと見た限り、去年は実行形式の提供で、windowsが2問、linuxが2問だったようです。
どちらも、逆アセンブルできる環境がないと、キツそうですねぇ。
Re: (スコア:0)
>どちらも、逆アセンブルできる環境がないと、キツそうですねぇ。
むしろそれくらい出来ないで、コンテストとして意味をもつ問題ってどういうのでしょう?
IPAなんかでやってるような、間抜けな選択式穴埋め問題が午前中に数十問、
午後にようやくまともなテーマ設定だが実用性の無い論述数問って感じでしょうか(笑)
Re:2008年の問題と回答(Re:過去問) (スコア:1)
まあ、そりゃそうですね(笑
気になっているのは、今年のコンテストで使用されるのがどの環境かという情報が現時点では見えていないところ。
そして、去年のコンテストでは、各問題にWindowsとlinuxのどちらか片方のバイナリしか添付されていないところ、ですね。
今年は、Windows屋さん、linux屋さんのどちらでも出来るように、両方のバイナリを添付して欲いかなぁ、と。
なんてか。
Windowsとlinuxの問題が出ているってことは、「Windowsとlinuxの両方の環境を持っていることを要求している」か、もしくは、「これらの環境を0から構築して解析できる能力を期待している」のどちらかに見えます。
「Windowsとlinuxの両方の環境を持っていることを要求している」だと、何そのピンポイントな大会、と思うのです。
そんくらいなら、Windowsとlinuxと両方添付されている方がマシかなぁ、と。
逆に、「これらの環境を0から構築して解析できる能力を期待している」ならば、メジャーな Windows, linuxしかないことに違和感があります。
これで、MIPSアーキテクチャのitronベースのOSの何かとかでてきたら、手に負えなくなるわけで、Windowsとlinuxが出てくるのは無難な選択なのでしょうが……なんか釈然としないものが。
そこで、いっそのこと!
もう、新規でアセンブリ言語を作って、対応するバイナリのコード表を添付。ABIドキュメントもきっちり作りこんで、そのドキュメントを添付。これらの仕様に基づいたバイナリを問題として公開。
さあ、クロス逆アセンブラを自力で作って挑戦だ!
ってくらいしてくれれば、公平になりそうな。
#そして参加者0に。
Re:2008年の問題と回答(Re:過去問) (スコア:2, すばらしい洞察)
バイナリを直接解析したり、自分で簡易逆アセンブラを作ったり。
# 非常に面倒くさいです。
Re:2008年の問題と回答(Re:過去問) (スコア:1, 参考になる)
実用性ゼロの仮想環境なんて無意味にも程がありますがな。
Linuxが対象で困惑する人がいるかもしれませんが、4問目が組み込みである事を思えば何を意図しているかは分りますよね。
ルータや携帯電話、スマートフォンなどの組み込み機器に進入したバイナリの解析、を想定してるだけでしょう。
であれば、「そのプラットフォームを普段利用する人」であるかどうかなんて些細な問題です。
・・・というかIDA ProってARMなELFまで解析できるんですか・・・
欲しくなってきた。どうせELF解析なんてしないのに。
Re:2008年の問題と回答(Re:過去問) (スコア:1)
いや、なんかちがうぞ。
Re: (スコア:0)
書き言葉ですら Engrish は Hacker な感じじゃないですね。
Re: (スコア:0)
リンクは他の方が貼って下さったので割愛。
1問目だけ解いて見ましたが、入力値比較用のデータが内部で生成される過程を追いかける問題で、まんまパスワードクラックの問題でした。
「マルウェアやウイルス等の解析」を掲げるワリには・・・といった印象。
そりゃこのくらい出来なきゃそういうプログラムの追跡なんて無理だけどさぁ・・・
模範解答をチラ見したらIDA Pro(シェアウェア)がご登場なさっていたので貧乏人な私としては撤退させていただきました。
# 素直にめんどくさかった or ELFは触った事が無かったと言いなさい
Re:過去問 (スコア:4, 参考になる)
IDAには無料版もあります。
最新版と比べると、だいぶ機能が制限されていますが。
IDA Pro 4.9 Freeware Version [hex-rays.com]
Re:過去問 (スコア:2)
同じく、1問目だけやってみたのですが、Windows用のバイナリだと判断して、逆アセンブルして、そこまでで既に30秒は経過。
どうやったら14秒で解けるのでしょうか?
答えが見つかるまで10分ほどかかりましたが、一番時間かかったのはXORの計算だったり(汗
Re:過去問 (スコア:2)
8bit機時代にハンドアセンブルしてましたが、その影響からか直接バイナリダンプから
ある程度コードが読めてました。(Z80です)
色々なアルゴリズムって大抵似たようなバイナリ吐くし、コンパイラ使ってビルドしてるなら
なおさらコンパイラの吐くコードの癖さえ体で覚えてしまえばかなり早く解析出来ると
思いますよ。
たぶんですけど、14秒で解くような人たちは色々なCPUの色々なコンパイラなりアルゴリズムなりの
バイナリイメージを体で覚えているような人たちなんじゃないのかな~?と思いました。