[-]=======================================================================[-] Wizard Bible vol.20 (2005,9,15) [-]=======================================================================[-] x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第0章:目次 --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○第1章:ナイフスローイング Defolos 著 ○第2章:Crackme Kracking Will 著 ○第3章:Windows Device Driver Programming Part 2 Kenji Aiko 著 ○第4章:簡易ハッキングラボの作り方 IPUSIRON 著 ○第5章:お知らせ ○第6章:著者プロフィール x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第1章: ナイフスローイング --- 著者:Defolos x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  こんにちは、Defolosです。  今回はナイフスローイングについて執筆したいと思います。私は昔からナイフ スローイングについて興味があり、いろいろと調べてきましたが、そこで日本で はしっかりとナイフスローイングにつて解説したWEBサイトがないということに気 が付きました。そこで海外からナイフスローイングについての本を輸入しました。 このレポートはその輸入した本である『Knifethrowing THE Viper STORY』(※1) の内容を私なりに解釈したものです。解釈の誤りによって不適切な内容になって いる可能性もありますが、ご了承ください。 ----- 書籍情報(※1) タイトル:Knifethrowing サブタイトル:THE Viper STORY 著者:Harald Moeller 出版:LYNCLIF PUBLISHING 住所:P.O.BOX171 Pickering, Ontario, Canada ページ:66ページ ISBN 0-921444-01-X ----- ■0x02.) ナイフスローイングとは  ナイフスローイングとはその名の通り、ナイフを投げる技術のことです。映画 や漫画などで見たことがある方は多いと思います。映画などでは名うての暗殺者 や兵士などが使っていることが多いですが、実際はナイフを投げて使うことは、 ほぼないといえます(※2)。感覚的に考えても投げて当てるより近づいて使った ほうが確実性があり、また戦場において重要な武器のひとつを失う可能性がでて きてしまうからです。  では、どのようにして現在にナイフ投げが広まっていったのでしょうか。もっ とも有力な説としては、兵士がベースキャンプなどでナイフを投げて遊んでいた のを起源とするものです。ダーツの起源も、これを起源とする説が有力なようで す。つまり、ナイフスローイングとは元来確実性のあるものではなく、趣味とし ての要素が大きいといえます。  現在ではナイフスローイングは一部の実用例を除き、競技として広まっていま す。このレポートでも競技用のナイフスローイングに主体を置くこととします。 (※2)例外として、チャクラム、手裏剣は実用性を持ったスローイングナイフと いえます。チャクラムはインド北部のシーク教徒の武器であり、ドーナツ状の鉄 板の外側に刃が付いていて、フリスビーのように投げます。これは地面に落ちて も反射して射程が延び、また命中もしやすく切れ味も良いようです。手裏剣は日 本の忍者が主に使ったとされています。鉛筆のような形の鉄棒を特殊な投げ方で 真っ直ぐに飛ばします。多くの修練が必要だったようですが、実用されたため実 用例として挙げました。 ■0x03.) 注意  まず初めに覚えておいてもらいたいことは、現在の競技用ナイフスローイング においては、ナイフは矢のように真っ直ぐ飛んでいくということは決してありま せん(※3)。必ず回転して飛んでゆき、ターゲットに接触するときに刃のほうか ら接触します。まず、この回転するということを頭においてください。また、投 げるときには手首の動きを一切使ってはならないということも頭においてくださ い。  ナイフスローイングの練習をする時は、間違えても人気の多い場所で行わない ようにしてください。また、人気のない場所でも人が近くにいないか十分に注意 してください。狙いからズレておかしな方向へ飛んでいっても大丈夫なように広 く、安全な場所を確保してください。回収が面倒だからといって紐などは一切付 けないでください。 (※3) 真っ直ぐ飛ばす技術は、現在多くの人が研究しているようです。 ■0x04.) ナイフ  ナイフスローイングに用いるナイフは、どんなナイフでもよいというわけでは なく、非常にシビアな基準があります。しかし、この基準は命中率や安全性を確 保できる目標となる基準ですので、できるだけ基準に近いナイフを探してもらえ ればいいと思います。実際この基準を満たすナイフはほとんど市場には出回って おらず、入手が非常に難しいです。  では、スローイングナイフに求められる基準とはどういったものでしょうか。 ●バランス  どんなものであっても、バランスという要素は重要な要素であることが多いで す。スローイングナイフにおいてもバランスは非常に重要な要素です。スローイ ングナイフは投げて使いますので、通常のナイフよりもより精度の高いバランス が要求されます。  一般的なナイフは、振ったときの疲労感からハンドルのほうに重心(バランス ポイント)があることが多い(※4)ですが、スローイングナイフではハンドルと ブレードの真ん中に重心がくる必要があります。また、ハンドルエンドからバラ ンスポイントまでの距離とバランスポイントから刃先までの距離は同じでなけれ ばなりません。これは、ナイフは回転しているときバランスポイントを軸として 回転しますので、回転しているときのハンドルとブレードを同円周上におき、バ ランスを保つためです。ハンドルのほうが重いナイフですと、ブレードのほうが 長く突き出て回転してしまいます。 参照→http://scel.fc2web.com/figure/figure_kt01.GIF ●重量  ナイフを投げてターゲットに突き立てるには、ナイフにそれなりの重さが必要 になります。軽く、小さいナイフは取り回しも良く、室内でダーツの代わりに使 うのにはよいですが、競技となりますと十数mの距離から木製のターゲットに投げ ることになります。そのような状況では貫通力のある重いナイフのほうが有利で す。また、投げるときの安定感も重量のあるナイフのほうが増しますし、わずか ながら空気の影響も受けにくくなるようです。しかし、重くするには限度があり、 重くしすぎても良くありません。1インチあたり1〜7/4オンス程度が最も適してい るようです。 ●厚み  ナイフを投げるということは、ナイフに非常に大きな負担を与えますので、丈 夫さが求められます。一般的な厚みのナイフでは数回投げただけで曲がってしま うかもしれません。そこでスローイングナイフに求められるのはナイフの厚みで す。6㎜〜8㎜前後の厚さは必要と思われます。以前は薄いブレードが主流でした が、最近の流行でブレードの厚さは5㎜を超えるものが多くなってきていますので、 昔に比べると見つけやすくなったかもしれません。  これほどの厚さを要するのは、スローイングナイフには投げるという目的上、 どうしても硬い焼入れが施せないからです。投げたときに折れてしまっては破片 が危険ですので、折れないように焼入れを甘めに施します。それ故に丈夫さを実 現するには厚みを持たせる必要があります。 ●形状  ナイフの形状はダガーナイフをおすすめします。これは、形状が対称的であり バランスを保ちやすいことに加えて、ターゲットに刺さる可能性が高いことにも あります。ナイフスローイングにおいて、ナイフはターゲットに切っ先のみで刺 さるわけではありません。エッジの部分もターゲットに食い込んで刺さりますの で、できるだけ切れ味の良い鋭いナイフが好ましいです。  逆にあまり適さないのは、手裏剣(※5)や焼肉の串のようにカッティングエッ ジが全くないものです。エッジの部分がターゲットに食い込まないということは、 突き刺さるにはほんの一点をターゲットに当てる必要があり、現実的ではありま せん。カッティングエッジがない場合、ナイフが刺さるのはターゲットに対する 直角から±20°以内ですが、カッティングエッジがあると±170°までは刺さるこ とができます。 ・カッティングエッジを使わない場合(±20°) 参照→http://scel.fc2web.com/figure/figure_kt02.jpg ・カッティングエッジを使った場合(±170°) 参照→http://scel.fc2web.com/figure/figure_kt03.jpg ●材質  材質は刃物用の高級鋼材を使用したものを選びましょう。現在主流となってい る鋼材は日立金属のATS-34ですが、投げて失くす可能性の高いスローイングナイ フでは錆びへの耐久性も求められます。ターゲットから外れて紛失して、後日出 てきたときに錆だらけではもったいないですから。  また、スローイングナイフは投げて使いますので、基本的に消耗品と思っても らえればいいです。消耗品ですから、一本一本が高くては経済的に痛手となりま す。  これらを考えると、錆にも強く低価格を実現できる440-Cが適しているといえま す。間違ってもどんな鋼材で作られているかもわからないようなスローイングナ イフは購入しないようにお願します。 (※4) 鉈のように重さで切るようなナイフは例外とします。 (※5) 手裏剣には独自の投げ方があります。 ■0x05.) スタイル  ナイフスローイングのスタイルには、代表的なものは2つあります。ひとつはブ レードをつかんで投げるブレードグリップ、もうひとつはハンドルをつかんで投 げるハンドルグリップです。  映画や漫画などではブレードグリップを多用している描写が目立ちますが、実 際はブレードグリップはあまり勧められるスタイルではありません。理由は、ブ レードグリップの持ち方は必然的にエッジを横にして持つことになり、カッティ ングエッジが使えないということになります。それゆえに上記のカッティングエ ッジがない場合と同じ理由になります。  また、ブレードグリップでエッジを縦に持つと、手を切る恐れがあり強く投げ ることができません。  しかし、ブレードグリップは使えない持ち方かというとそうではありません。 どんなものにも使いときというものがあります。ブレードグリップを用いるのは、 主にバランスのとれていないナイフを投げる場合です。ハンドルのほうが重たい ナイフを投げる場合、ハンドルを持って投げると重量感が得られず、ブレが生じ ることがあります。このブレを防ぐため、重量感が比較的得られるブレードグリ ップを用いるのです。 参照→http://scel.fc2web.com/figure/figure_kt04.jpg  これらのスタイルは人によってまちまちであり、プロの方でも気分によってス タイルを変えることはよくあります。このレポートでは『Knifethrowing THE Vi per STORY』の著者Harald Moellerが勧め、また多くのプロが使用しているハンド ルグリップを解説していくこととします。  ハンドルグリップはその名の通り、ハンドルを持ちます。ナイフのカッティン グエッジを縦にし、そのままハンドルを握り親指をカッティングエッジの手前に 添えます。ちょうどサーベルグリップの持ち方と同じです。 参照→http://scel.fc2web.com/figure/figure_kt05.jpg ■0x06.) 標的  この項目ではターゲットの作成についてを説明します。  ナイフスローイングのターゲットにはしっかりとした物を使用するようにして ください。適当に薄いベニア板などを使ってしまうと、貫通して第三者に被害が 及ぶ可能性があります。逆に硬すぎる木材を使用しますと、大切なナイフを痛め てしまう可能性もあります。ここでは安全かつナイフにダメージの少ないターゲ ットを考査していきたいと思います。  まずはあまり適さないものを挙げていきたいと思います。 ・明らかに薄く、貫通しそうなもの(2cm程でも薄すぎる) ・オーク、メープル、ブナ、トネリコ、ニレなどの硬い木材 ・線路の枕木(硬すぎる)  次に適している材質です。  それなりにやわらかく、それでいて貫通しないほどの丈夫さを持ったものとい うことになります。 ・パイン(松)、木材 ・古くなった畳  パインは適度なやわらかさがあり、ナイフが傷つくことなく、また貫通するほ ど弱くもありません。パインの木材をいくつか買ってきて1.5m*2m前後の大きさに なるように組み合わせます。パインの幹を輪切りにしたものも適しています。  畳は日本固有のものですが、手裏剣の練習に古くから使われてきました。これ も適度なやわらかさがあり、ナイフを傷つけません。ただし畳は一枚では少し薄 いので2枚重ねにして裏にパイン板を配置するのがいいでしょう。 ■0x07.) 距離  現在競技で一般的なナイフを回転させてターゲットに突き刺すナイフスローイ ングでは、ナイフがターゲットに到達するときにナイフを一回転させる必要があ ります。ナイフの回転数というのは、手首のスナップを使わずに投げることで一 定にすることができます。回転数が一定ということは、後は距離を調整すること で確実にターゲットに突き刺すことができます。よく「距離にあわせて回転数を 調整する」というのを耳にしますが、そんなことができるのは一部の極限られた 人たちだけでしょう。回転数を調整するには微妙な力加減とスナップの効かせ具 合が必要です。当然、少しのミスが失敗に繋がりますので、確実性が確保できま せん。よって「距離にあわせて回転数を調整する」よりは「ターゲットに刺さる 距離を見極める」ほうが容易です。  ナイフが一回転する距離は人によってズレはありますが、およそ13.5フィート (約4m)です。まずは13.5フィートの位置から練習しましょう。大体がターゲッ トに刺さるようになれば、次はナイフが2回転する位置である23フィート(約7m) の位置から投げてみます。ここでナイフが2回転する距離は13.5フィートの2倍の 27フィートではないかと疑問に思う方もいると思います。詳しくは発展の項目で 述べますが、高く投げなければならない点やナイフが宙を舞っている間にロスさ れるエネルギーなどの点からピッタリ2倍にはなりません。 ■0x08.) 投げ方  それでは実際に投げてみましょう。事前に標的の項目をみてターゲットを用意 してください。用意したターゲットを13.5フィート(約4m)の距離に置きます。 ターゲットから13.5フィートの距離にはテープかなにかで目印をつけておきます。 1:目印から3フィート前後(約90cm)後ろへ下がって立ってください。  後ろへ3フィート下がる理由は投げるときに一歩踏み出すので、元の位置だとは み出してしまうからです。 参照→http://scel.fc2web.com/figure/figure_kt06.jpg 2:ナイフをブレードグリップで握ってください。  このとき、ナイフを握る強さはトマトが潰れないぎりぎり程度の強さがベスト とされます。 参照→http://scel.fc2web.com/figure/figure_kt05.jpg 3:右利きの場合、左足を少しだけ前に出して膝を軽く曲げ、自然な格好でターゲ ットに対峙します。 4:ナイフを持った手をそのまま耳の横辺りまで持ち上げてきます。ちょうど電話 の受話器を持つような感じです。それと同時にナイフを持っていないほうの腕を 上げ、真っ直ぐターゲットを指差します。 側面から:参照→http://scel.fc2web.com/figure/figure_kt07.jpg 正面から:参照→http://scel.fc2web.com/figure/figure_kt08.jpg 5:一歩踏み出しつつ腕を振り下ろしながら適切なタイミングでナイフを握ってい る手を緩めますが、振り下ろすというよりはむしろ前に押し出すような感じで投 げます。このとき、決して手首のスナップを使わないでください。スナップを使 うと回転や方向が不安定になり、ターゲットに当たらないばかりか、あらぬ方向 へ飛んでいって危険です。 参照→http://scel.fc2web.com/figure/figure_kt09.jpg 6:フォロースルーを行います。  フォロースルーは手からナイフを滑り出させた後の作業ですが、大事な工程で す。ナイフが手から滑り出させた点で腕の動きを止めます。 参照→http://scel.fc2web.com/figure/figure_kt10.jpg  これで記念すべきナイフスローイングの第1投は終わりました。もちろん、うま く刺さった方ばかりでは無いと思います。刺さらなかった・当たらなかったなど は気にする必要ありません。どんなことでも始めからうまくいく人はいません。 次の項目発展では、うまくいった人は次のステップとしてより遠い位置からのス ローイングを、うまくいかなかった人はいかに修正するかを説明していきます。 ■0x09.) 発展  それではまず初めに修正方法を説明しましょう。  まったくターゲットに刺さらなかった方は前後に位置を修正してからもう一度 投げてみてください。  次に刺さってはいるが、ターゲットと90°には刺さらず、少しズレがある場合、 そのズレの角度によって投げる位置が遠すぎるのか近すぎるのかを判断します。 90°の場合はちょうど良い位置であるということになります。ターゲットに刺さ っている点よりハンドルのほうが上にある場合、投げる位置が遠すぎます。逆に、 ハンドルのほうが下にある場合、投げる位置が近すぎます。 ・左から順に近すぎる、ちょうど良い、遠すぎる 参照→http://scel.fc2web.com/figure/figure_kt11.jpg  狙ったところに刺さらない場合、ナイフのグルーピングを行います。刺さり具 合の傾向やバラつきを確認する目的で、1回1回ナイフを抜かずに10〜15程ナイフ を投げ、おおよそで良いので刺さっているナイフをグループにわけます。3本ぐら いかたまっていれば1グループと考えるとよいでしょう。刺さったナイフの位置、 グループを記録しておき、1度ナイフをすべて抜きます。これを数回繰り返します。 最もナイフの本数が多く、頻出するグループを特定します。このグループが狙っ たところに位置していれば問題ありませんが、そうでない場合は狙う場所を修正 することで対処します。狙ったところをAとします、特定したグループのだいたい 真ん中あたりをBとします。AとBの間で直線を引き、AB間の距離を測っておきます。 AB間直線の延長線上のAB間の距離と同じ距離のところに、ビニールテープなどで 十字に印をつけておきます。後はこの十字を狙うことで多くのナイフを狙ったと ころに刺すことができます。 参照→http://scel.fc2web.com/figure/figure_kt12.jpg 参照→http://scel.fc2web.com/figure/figure_kt13.jpg  ほぼ完璧に狙った位置に90°にナイフを刺すことができるようになったら、次 にナイフをがもう1回転する距離から投げてみましょう。ナイフを投げる位置は、 回転数の低い順に13.5フィート、23フィート、30フィート、38フィートとなって います。これ以上遠い位置は狙いも定まらず、強い力が必要なことから狙いから ズレてしまい、おかしな方向へ飛んでいってしまうことがあり危険です。あまり オススメできませんが、38フィートの距離に飽きてしまったなら自分でもう1回転 する位置を探してもよいでしょう。 ■0x0A.) 最後に  いかがでしたでしょうか。日本ではナイフと聞くと恐ろしいというイメージが 強く、ナイフを使ったスポーツ競技などもってのほかという風習があります。一 方欧米などの海外では古くからナイフスローイングはスポーツのひとつとして親 しまれてきました。ナイフを投げるというのは、しっかりとした安全確保を行わ なければ確かに危険な行為です。しかし、安全であろうとなかろうと、少しでも 危険なものを排除しようとする日本の風習には賛成できかねません。ナイフは危 険なだけでなく、使い方を誤らなければ極めて有用なものです。危険性があるか ら周りから失くすのではなく、慣れ親しんで危険性と有用性を知り、正しい使い 方を身に着けるべきです。ナイフスローイングはこの慣れ親しむということに大 きく貢献するように思います。このレポートが少しでも日本にナイフスローイン グというものを広めることになれば幸いです。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第2章: Crackme Kracking --- 著者:Will x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) crackmeとは  crackmeとは簡単にいえば解析の練習用のソフトです。今回は私が自作したcra ckmeを解析したいと思います。 ■0x02.) 用意 ○使用ソフト: ・OllyDbg 1,10  本家: http://www.ollydbg.de/  日本語化  (予めOllyDbgは日本語化してあることを前提に書いています。  日本語化については下記のURL参照)  Digital Travesia: http://hp.vector.co.jp/authors/VA028184/ ○ターゲット ・自作crackme ・Niblheim Niflheim: http://will.wbjapan.com/archive/crackme0xa.zip ○かる〜いやる気 ○アセンブリのコードが読める位の知識(そんなに要らない) ■0x03.) 解析開始  まず上記のURLからcrackmeをダウンロードして普通に起動する。そして何か適 当に入力してからOKを押すとBadというメッセージが表示されます。おそらく正解 の場合はGoodというメッセージが表示されるのでしょう。  次にOllyでcrackmeを開いて「右クリック」→「検索」→「すべて」の参照文字 列を表示させます。文字列を探していくと上の方にBadやGoodといった文字列が見 つかります。どれでもいいのでダブルクリックすると逆アセンブラ画面が表示さ れます。 ----- 004011B0 >/$ 8A4424 04 MOV AL,BYTE PTR SS:[ESP+4] 004011B4 |. 84C0 TEST AL,AL 004011B6 |. 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL 004011B8 |. 75 13 JNZ SHORT crackme.004011CD ; | 004011BA |. 68 08674200 PUSH crackme.00426708 ; |Title = "Bad" 004011BF |. 68 08674200 PUSH crackme.00426708 ; |Text = "Bad" 004011C4 |. 6A 00 PUSH 0 ; |hOwner = NULL 004011C6 |. FF15 E4634200 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA 004011CC |. C3 RETN 004011CD |> 68 00674200 PUSH crackme.00426700 ; |Title = "Good" 004011D2 |. 68 00674200 PUSH crackme.00426700 ; |Text = "Good" 004011D7 |. 6A 00 PUSH 0 ; |hOwner = NULL 004011D9 |. FF15 E4634200 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA 004011DF \. C3 RETN -----  しかし、どうやらこれはメッセージの表示だけのプロシージャなので、004011 B0をクリックして下に表示されるローカルのコール元を右クリックして、どちら でもよいので選択します。  すると次のようなプローシージャに移動します。 ----- 004016E0 > . 55 PUSH EBP 004016E1 . 8BEC MOV EBP,ESP 004016E3 . 51 PUSH ECX 004016E4 . 56 PUSH ESI 004016E5 . 6A 01 PUSH 1 004016E7 . 8BF1 MOV ESI,ECX 004016E9 . E8 A88B0100 CALL crackme.CWnd::UpdateData 004016EE . 8B46 74 MOV EAX,DWORD PTR DS:[ESI+74] 004016F1 . 8B48 F4 MOV ECX,DWORD PTR DS:[EAX-C] 004016F4 . 894D FC MOV [LOCAL.pass_length],ECX 004016F7 . 8B45 FC MOV EAX,[LOCAL.pass_length] 004016FA . 83C0 0A ADD EAX,0A 004016FD . 35 39300000 XOR EAX,3039 00401702 . 0FC8 BSWAP EAX 00401704 . 3D 0000302A CMP EAX,2A300000 00401709 . 74 0C JE SHORT crackme.00401717 0040170B > 6A 00 PUSH 0 0040170D . E8 9EFAFFFF CALL crackme.message 00401712 . 83C4 04 ADD ESP,4 00401715 . EB 27 JMP SHORT crackme.0040173E 00401717 > 8A02 MOV AL,BYTE PTR DS:[EDX] 00401719 . 0242 01 ADD AL,BYTE PTR DS:[EDX+1] 0040171C . 2A42 02 SUB AL,BYTE PTR DS:[EDX+2] 0040171F . 0242 03 ADD AL,BYTE PTR DS:[EDX+3] 00401722 . 2A42 04 SUB AL,BYTE PTR DS:[EDX+4] 00401725 . 0242 05 ADD AL,BYTE PTR DS:[EDX+5] 00401728 . 2A42 06 SUB AL,BYTE PTR DS:[EDX+6] 0040172B . F7D8 NEG EAX 0040172D . 3D C3FFCFD5 CMP EAX,D5CFFFC3 00401732 .^75 D7 JNZ SHORT crackme.0040170B 00401734 . 6A 01 PUSH 1 00401736 . E8 75FAFFFF CALL crackme.message 0040173B . 83C4 04 ADD ESP,4 0040173E > 5E POP ESI 0040173F . 8BE5 MOV ESP,EBP 00401741 . 5D POP EBP 00401742 . C3 RETN -----  そこで004016E0にブレークポイントを仕掛けたらF9を押して実行させます。適 当に12345と入力してOKを押すとブレークポイントで止まります。  F8を押しながらステップ実行させていきます。 ----- 004016F7 . 8B45 FC MOV EAX,[LOCAL.pass_length] -----  ここでEAXに入力文字列の文字列長が入ります。 ----- 004016FA . 83C0 0A ADD EAX,0A 004016FD . 35 39300000 XOR EAX,3039 00401702 . 0FC8 BSWAP EAX -----  そして文字列長に0xAが加算されて0x3039と排他的論理和を取られています。0 0401702のBSWAPはエンディアンを変更する命令です。 ----- 00401704 . 3D 0000302A CMP EAX,2A300000 -----  最後に2A300000と比較されて異なる場合はBadのメッセージが表示されます。こ れらのことから文字列長を逆算すると0x2A300000をビッグエンディアンで表示す ると0x0000302Aとなります。 0x0000302Aと0x3039とで論理和を取ると0x13となり、0x13から0xAを引くと9で す。  よって文字列は9文字ということがわかりました。  次に123456789と入力してOKを押します。  すると00401709でジャンプして次のようなコードの場所に飛びます。 ----- 00401717 > 8A02 MOV AL,BYTE PTR DS:[EDX] 00401719 . 0242 01 ADD AL,BYTE PTR DS:[EDX+1] 0040171C . 2A42 02 SUB AL,BYTE PTR DS:[EDX+2] 0040171F . 0242 03 ADD AL,BYTE PTR DS:[EDX+3] 00401722 . 2A42 04 SUB AL,BYTE PTR DS:[EDX+4] 00401725 . 0242 05 ADD AL,BYTE PTR DS:[EDX+5] 00401728 . 2A42 06 SUB AL,BYTE PTR DS:[EDX+6] 0040172B . F7D8 NEG EAX 0040172D . 3D C3FFCFD5 CMP EAX,D5CFFFC3 00401732 .^75 D7 JNZ SHORT crackme.0040170B 00401734 . 6A 01 PUSH 1 00401736 . E8 75FAFFFF CALL crackme.message 0040173B . 83C4 04 ADD ESP,4 0040173E > 5E POP ESI 0040173F . 8BE5 MOV ESP,EBP 00401741 . 5D POP EBP 00401742 . C3 RETN -----  このときEDXには入力文字列のアドレスが入っています  ステップ実行していくと分かりますが、上のコードから順に見ていくと次のよ うになっています。  ALに一文字目を代入(数値として、以下略)  ALに二文字目を足す  ALから三文字目を引く  ALに四文字目を足す  ALから五文字目を引く  ALに六文字目を足す  ALから七文字目を引く  符号反転  D5CFFFC3と比較して違っていたらBad表示へジャンプ  それでは逆算してみましょう。  0xD5CFFFC3の符号を反転させると0x2A30003Dとなります。なお、始めの段階で 0x2A300000がEAXに入っているので引きます。すると3Dになります。つまり次のよ うに成ります。  ALに一文字目を代入(数値として、以下略)  ALに二文字目を足す  ALから三文字目を引く  ALに四文字目を足す  ALから五文字目を引く  ALに六文字目を足す  ALから七文字目を引いた結果が3Dになればよいのです。  Keygenは作れますが、邪魔くさいので今回はなしということでw  一応適当にやってみて最後で合わしてみたら850275012でいけました。 ■0x04.) 終わりに  時間が無かったので簡単なcrackmeしか作れませんでした。すみません。  本当は今回は出さないつもりでしたが、vol.20ということなのでなんとか時間 を作って書きました。  次回も気が向いたらcrackmeについて書いてみるかな〜。  それでは。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第3章: Windows Device Driver Programming Part 2--- 著者:Kenji Aiko x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  このテキストはWizard Bible vol.17「Windows Device Driver Programming P art 1」の続編という位置づけですので、読んでない方はまずそちらから先に読む ことをお勧めします。また、このテキストは、著者自身も完全に理解して書いて いるわけではないので、間違った内容が多々あることをご了承ください。さらに、 著者のスキルレベルの都合により、内容のわかりやすさをあまり重視できません。 その辺りはごめんなさい。では、さっそくはじめましょう  まずは次のプログラムをダウンロードしてください。今回使用するプログラム です。 ・ex1.zip http://ruffnex.oc.to/kenji/windriver/ex1.zip ■0x02.) デバイスドライバの基礎  CUI環境でのプログラムと違い、GUI環境での一般的なWindowsプログラムは、O Sからメッセージを受け取って処理を行います。WM_CREATEやWM_DESTROYといった メッセージをOSから受け取ったアプリケーションは、そのメッセージに対応した 処理を実行するわけです。よって、MS-DOS環境でのCUIプログラムのように、プロ グラムを記述した順に(基本的に)上から実行されるわけではありません。「何 かしらのユーザーの行動(クリックやキー入力など)に対して処理を行う」のが Windowsプログラムの概念でした。それと同じように、デバイスドライバも何かし らの動作に対して処理を行ないます。つまり、概念的には通常のWindowsアプリケ ーションと変わりません。  では、次のプログラムを見てください。概念的には通常のWindowsアプリケーシ ョンと変わりませんが、記述方法や実際の仕組みは大きく違うので、その辺りを 解説していきます。 ----- ex1.cpp(DriverEntry関数) NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath) { PDEVICE_OBJECT pDeviceObject = NULL; UNICODE_STRING usDriverName, usDosDeviceName; MyDbgPrint("DriverEntry Called \r\n"); RtlInitUnicodeString(&usDriverName, L"\\Device\\Example"); RtlInitUnicodeString(&usDosDeviceName, L"\\DosDevices\\Example"); NTSTATUS NtStatus = IoCreateDevice( pDriverObject, 0, &usDriverName, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &pDeviceObject); if(NtStatus != STATUS_SUCCESS){ MyDbgPrint("IoCreateDevice Error!\r\n"); return NtStatus; } for(int i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) pDriverObject->MajorFunction[i] = Example_UnSupportedFunction; pDriverObject->MajorFunction[IRP_MJ_CREATE] = Example_Create; pDriverObject->MajorFunction[IRP_MJ_CLOSE] = Example_Close; pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = Example_IoControl; // ドライバをUnLoadするための関数 pDriverObject->DriverUnload = Example_Unload; pDeviceObject->Flags |= 0; pDeviceObject->Flags &= (~DO_DEVICE_INITIALIZING); IoCreateSymbolicLink(&usDosDeviceName, &usDriverName); return STATUS_SUCCESS; } -----  いろいろと小難しい構造体が定義されていますが、それらは後回しにします。 まず一番重要なものは、「pDriverObject->MajorFunction」です。これは、デバ イスドライバに何かしらの通知が送られた時に処理する関数を定義します。例え ば、次の部分を見てください。 ----- for(int i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) pDriverObject->MajorFunction[i] = Example_UnSupportedFunction; -----  pDriverObject->MajorFunctionは配列となっており、配列の数はIRP_MJ_MAXIM UM_FUNCTION個あります。つまり、このプログラムは、すべての配列にExample_U nSupportedFunctionを設定していることになります。そして、ex1.cpp内のExamp le_UnSupportedFunction関数を見てください。 ----- ex1.cpp(Example_UnSupportedFunction関数) NTSTATUS Example_UnSupportedFunction(PDEVICE_OBJECT DeviceObject, PIRP Irp) { MyDbgPrint("Example_UnSupportedFunction Called \r\n"); return STATUS_NOT_SUPPORTED; } -----  MyDbgPrint関数は、DbgPrint関数を少し自分流に改良し、printf形式で文字列 を渡せるようにしたものです。ex1.cpp内で定義されています。Example_UnSuppo rtedFunction関数は、その名の通り、このドライバではサポートしていない関数 とします。よって、DbgViewには「Example_UnSupportedFunction Called \r\n」 という文字列を出力するだけの関数となります。では、DriverEntry関数に戻って ください。 ----- pDriverObject->MajorFunction[IRP_MJ_CREATE] = Example_Create; pDriverObject->MajorFunction[IRP_MJ_CLOSE] = Example_Close; pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = Example_IoControl; -----  上記のfor文に続いて、このようなコードがあります。「IRP_MJ_CREATE」はド ライバが開かれた時、「IRP_MJ_CLOSE」はドライバが閉じられた時、「IRP_MJ_D EVICE_CONTROL」はI/Oコントロールが呼び出されたときに実行される関数をそれ ぞれ指定します。  Example_Create関数とExample_Close関数は、ex1.cppにて定義されており、Ex ample_UnSupportedFunction関数と同じような処理となっています。 ----- ex1.cpp(Example_Create関数) NTSTATUS Example_Create(PDEVICE_OBJECT DeviceObject, PIRP Irp) { MyDbgPrint("Example_Create Called \r\n"); return STATUS_SUCCESS; } ----- ----- ex1.cpp(Example_Close関数) NTSTATUS Example_Close(PDEVICE_OBJECT DeviceObject, PIRP Irp) { MyDbgPrint("Example_Close Called \r\n"); return STATUS_SUCCESS; } -----  最後のExample_IoControl関数の解説は置いておいて、先にDriverEntry関数と pDriverObject->DriverUnloadについて説明します。  pDriverObject->MajorFunctionとは、ぶっちゃけていえばWindowsプログラムで のメッセージと同じようなものです。そして、pDriverObject->DriverUnloadも同 じですが、pDriverObject->DriverUnloadはドライバがUnLoad(アンロード)され るときに実行する処理を記述します。逆に、DriverEntry関数はドライバがLoad( ロード)される時に実行する処理ですね。つまり、Windowsプログラムでの、WM_ CREATEメッセージとWM_DESTROYメッセージみたいなものです(おそらく)。そし て、その他のメッセージがpDriverObject->MajorFunctionなわけです(多分)。 ものすごく誤解を招きそうですが、そんな感じだと思います。  というわけで、UnLoad時の処理、Example_Unload関数を見てください。 ----- ex1.cpp(Example_Unload関数) VOID Example_Unload(IN PDRIVER_OBJECT DriverObject) { MyDbgPrint("Unload Called \r\n"); UNICODE_STRING usDosDeviceName; RtlInitUnicodeString(&usDosDeviceName, L"\\DosDevices\\Example"); IoDeleteSymbolicLink(&usDosDeviceName); IoDeleteDevice(DriverObject->DeviceObject); } -----  UNICODE_STRINGというよくわからん型と、同じくよくわからん関数が3つほどあ ります。これらの詳細はMSDNで調べてください(英語版のMSDNでないと検索でき ないようです)。 ・UNICODE_STRING http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/k112_9f862aaa-4cd6-4420-8255-ad577d8a8c59.xml.asp ・RtlInitUnicodeString http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/lowlevelclientsupport/misc/rtlinitunicodestring.asp ・IoCreateSymbolicLink http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/k104_8311eaf7-a12f-470d-b81f-83a12697ddbe.xml.asp ・IoDeleteSymbolicLink http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/k104_6ff2f570-3573-4d12-b338-cca69515ef1a.xml.asp ・IoCreateDevice http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/k104_1e38a631-7e65-4b4b-8d51-3150a8073511.xml.asp ・IoDeleteDevice http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/k104_246c1fe6-75cc-434e-a1d4-7e573eff96de.xml.asp  UNICODE_STRINGはその名の通り、UNICODE文字を扱う構造体でしょう。そしてR tlInitUnicodeString関数は、実際にその構造体に文字列を格納する関数だと思わ れます。つまり「\\DosDevices\\Example」という文字列がusDosDeviceName構造 体に格納されたことになります。  そして、次のIoDeleteSymbolicLink関数は、DriverEntry内のIoCreateSymboli cLink関数と対応しています。それぞれがシンボリックリンクの削除と生成を行う わけですが、これらの関数は、ユーザーモードアプリケーションからのアクセス を許可する意味で使用されています。つまり、ドライバのLoad時(DriverEntry) にIoCreateSymbolicLinkを使いドライバへのシンボリックリンクを生成し、ドラ イバのUnLoad時(Example_Unload)にIoDeleteSymbolicLinkを使いドライバへの シンボリックリンクを削除しているわけです。  そして、最後のIoDeleteDevice関数ですが、これはデバイスドライバ自体を削 除する関数であり、DriverEntry内のIoCreateDevice関数と対応しています。 ■0x03.) I/Oコントロール  デバイスドライバとユーザーモードアプリケーションが相互にデータを送受信 するためには、I/Oコントロールを利用します。デバイスドライバ(ex1.cpp)側 のExample_IoControl関数を解説する前にユーザーモードアプリケーション側のソ ースを示します。 ----- ex1_user.cpp(抜粋) int _cdecl main(void) { char szBuffer[1024] = "Hello from user mode!"; HANDLE hFile = CreateFile("\\\\.\\Example", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if(hFile == INVALID_HANDLE_VALUE){ perror("CreateFileが失敗しました"); return -1; } printf("UserModeMessage = '%s'\r\n", szBuffer); DWORD dwReturn; DeviceIoControl(hFile, IOCTL_ID_BUFFIO, szBuffer, lstrlen(szBuffer) + 1, szBuffer, sizeof(szBuffer), &dwReturn, NULL); printf("KernelModeMessage = '%s'\r\n", szBuffer); CloseHandle(hFile); return 0; } -----  デバイスドライバは、アプリケーション側からはファイルハンドルとして扱う ことができます。よって、CreateFileを使ってデバイスドライバをオープンし、 CloseHandleを使って閉じることができます。ファイルを扱うことと似ています。 ・DeviceIoControl http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/deviceiocontrol.asp  デバイスドライバへはDeviceIoControlを使ってデータを送信します。szBuffe rには送信すべきデータを入れています。DeviceIoControlの第2引数には、ドライ バ側とアプリケーション側の双方で同一のID(識別子)の指定する必要がありま す。よって、ヘッダファイルex1.hにてIOCTL_ID_BUFFIOを定義し、ex1.hをex1_u ser.cppとex1.cppの両方でincludeしています。  では、今度はアプリケーションからDeviceIoControlを利用して送信されてきた データを処理するドライバ部分のソースを見ていきます。 ----- ex1.cpp(Example_IoControl関数) NTSTATUS Example_IoControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) { MyDbgPrint("Example_IoControl Called \r\n"); NTSTATUS NtStatus = STATUS_NOT_SUPPORTED; PIO_STACK_LOCATION pIoStackIrp = IoGetCurrentIrpStackLocation(Irp); if(!pIoStackIrp) goto IOCTL_FUNC_END; // アクセスIDを調べる if(pIoStackIrp->Parameters.DeviceIoControl.IoControlCode != IOCTL_ID_BUFFIO) goto IOCTL_FUNC_END; // バッファポインタ取得 PCHAR pInputBuffer = (PCHAR)Irp->AssociatedIrp.SystemBuffer; PCHAR pOutputBuffer = (PCHAR)Irp->AssociatedIrp.SystemBuffer; if( ! (pInputBuffer && pOutputBuffer) ) goto IOCTL_FUNC_END; // バッファサイズ取得 int InSize = pIoStackIrp->Parameters.DeviceIoControl.InputBufferLength; int OutSize = pIoStackIrp->Parameters.DeviceIoControl.OutputBufferLength; int dwDataRead = 0, dwDataWritten = 0; // 終端がNULLかどうかを調べる BOOLEAN bFlag = FALSE; for(int i=0; i < InSize && bFlag == FALSE; i++) if(pInputBuffer[i] == '\0') bFlag = TRUE; if(bFlag == FALSE) goto IOCTL_FUNC_END; // ユーザーメッセージ出力 dwDataRead = strlen(pInputBuffer); MyDbgPrint("UserModeMessage = '%s'\r\n", pInputBuffer); // 返答メッセージをバッファへ PCHAR pReturnData = "Hello from kernel mode!"; MyDbgPrint("KernelModeMessage = '%s'\r\n", pReturnData); int dwDataSize = strlen(pReturnData); if(OutSize < dwDataSize){ dwDataWritten = dwDataSize; NtStatus = STATUS_BUFFER_TOO_SMALL; }else{ dwDataWritten = dwDataSize; RtlCopyMemory(pOutputBuffer, pReturnData, dwDataSize); NtStatus = STATUS_SUCCESS; } IOCTL_FUNC_END: Irp->IoStatus.Status = NtStatus; Irp->IoStatus.Information = dwDataWritten; IoCompleteRequest(Irp, IO_NO_INCREMENT); return NtStatus; } ----- ・IoGetCurrentIrpStackLocation http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/k104_f92e53c7-8a26-4cb0-859b-b0a7be4dce6a.xml.asp ・RtlCopyMemory http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/k109_f4bb1fef-aae6-4086-b95a-ae4dc220c04b.xml.asp ・IoCompleteRequest http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/k104_79ea2b93-3ce8-46eb-990b-ca3e56d3e3a8.xml.asp  DeviceIoControl関数の第2引数に渡したID(識別子)のIOCTL_ID_BUFFIOは、ド ライバ側では、pIoStackIrp->Parameters.DeviceIoControl.IoControlCodeに格納 されています。よって最初にそれを調べます。次に入出力バッファのポインタと バッファサイズをそれぞれ取得し、入力バッファに文字列が存在するかどうかを 調べます。そして、もし存在するならば、終端がNULLかどうかも調べます。  終端がNULLならば、MyDbgPrintを使って入力バッファのデータをDbgViewに出力 し、続いて、RtlCopyMemory関数を使って、返答の文字列を出力バッファにコピー します。 ■0x04.) ビルドと実行  まずはドライバ側(ex1.cpp)をコンパイルします。MAKEFILEファイルとSOURC ESファイルを作成して、ビルドしてください。ドライバをビルドする詳しい方法 はPart1を見てください。次にアプリケーション側(ex1_user.cpp)ですが、これ は普通のアプリケーションを作成するのと同じで構いません。私はVC++.NETを使 いましたが、どのようなコンパイラでも大丈夫でしょう。それぞれのビルドに成 功すると、ex1.sysというシステムファイルと、ex1_user.exeというアプリケーシ ョンファイルが作成されます。  では、実行してみましょう。まずはデバッグ情報を確認したいため、DbgView. exeを起動してください。そして、Part1で使用した「Driver Install Program」 を使って、ex1.sysをWindowsにインストールします。次に、コマンドプロンプト からex1_user.exeを実行します。最後に、再び「Driver Install Program」を使 ってex1.sysをアンインストールしてドライバを終了します。 ・アプリケーション側(ex1_user.exe) http://ruffnex.oc.to/kenji/windriver/1.png ・ドライバ側(DebugView) http://ruffnex.oc.to/kenji/windriver/2.png  動作の流れとしては、最初にドライバが起動してDriverEntryが実行されます。 そしてex1_user.exeが実行されてCreateFileにてドライバがオープンされたら、 Example_Createが実行されます。そして、すぐにドライバへ「Hello from user mode!」を送ります。その時点でドライバの入力バッファには「Hello from user mode!」が存在することになり、同時にDeviceIoControlにて、ドライバ側のExa mple_IoControl関数が実行されます。Example_IoControlでは、入力バッファから 文字列を取り出し、出力バッファに返答文字列をコピーします。そして、ex1_us er.exeはその返答文字列を受け取り、コマンドプロンプトに出力して終了となり ます。ドライバはex1_user.exeでファイルハンドルがクローズされるのと同時に Example_Closeを実行します。そして、ドライバをアンインストールしたらExamp le_Unloadを呼び出してドライバも終了となります。 ■0x06.) 最後に  さて、いかがだったでしょうか。今回は「Windows Device Driver Programmin g Part 2」と題してお送りしましたが、実は、書き終えてものすごい不安に駆ら れました。というのも、この記事、ホントに読む人いるの? ってことなんです けどね(汗)。自分のサイトに公開する分にはまだよいのですが、Wizard Bible への投稿記事だとやはりある程度読んでくれる人がいないとさびしいってのがホ ンネなので、マジでちょっと危機感が…。なので、以後この続きは自分のHP(ht tp://ruffnex.oc.to/kenji/)でほそぼそとやっていくことにします(^^;。となる と、来月用のネタをまた新しく探さなければならなくなるのですが、まぁなんと か頑張りますです。さて、最後になりましたが、ここまで読んでくれて本当にあ りがとうございます。  では、また会う日まで...。 ■0x07.) 参考サイト ・Driver Development Part 1: Introduction to Drivers http://www.codeproject.com/system/driverdev.asp ・Driver Development Part 2: Introduction to Implementing IOCTLs http://www.codeproject.com/system/driverdev2.asp ・Driver Development Part 3: Introduction to driver contexts http://www.codeproject.com/win32/driverdev3.asp ・Driver Development Part 4: Introduction to device stacks http://www.codeproject.com/system/driverdev4asp.asp ・Driver Development Part 5: Introduction to the Transport Device Interface http://www.codeproject.com/useritems/driverdev5asp.asp x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第4章: 簡易ハッキングラボの作り方 --- 著者:IPUSIRON x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  たびたびメールや質問掲示板で「コンピュータに詳しくなりたいのですが、ど うしたらよいですか?」という質問を見受けられます。一般的にこういった質問 はタブーとされていますが、質問する気持ちもわからないわけではありません。 現在どんなにスキルがある人でも、誰でも最初は初心者だったのです。例えば、 アインシュタインだろうがニュートンだろうが、最初は物理学なんて知らなかっ たのです。  さて、この質問に答えたいところですが、そう簡単には答えることができませ ん。前回WBで書いた超多読法の話とちょっと似ていますが、私が紹介する方法が 万人に向くわけではありません。同じ人間だったとしても、10歳のときと20歳の ときの学習法は異なるでしょう。なぜなら基礎学力の差、学習スピード、社会的 な環境、物に対する考え方などといった要素が異なるからです。まして、違う人 間では、向き不向きはもっと顕著に表れるはずです。よって、学習法を教えると いうことは、主観的な学習法(整理法、環境構築法などを含む)を教えることに すぎないということです。それでも主観的な学習法を多数集めれば、その中に大 多数において共通する(最大公約数となる)何らか方法も見つけることができま すが、それを解説してもちょっと面白くないので、今回は完全に私の主観的な環 境構築法を紹介したいと思います。  最近引っ越して自分なりの完璧(に近い)と思える環境を構築できたことが、 この記事を書こうとした一番の理由です。 ■0x02.) 簡易ハッキングラボの利点  ここでいうコンピュータの環境構築とは、ある自由に使える物理的空間をフル 活用して自分専用のハッキング実験室、即ちハッキングラボを構築するというこ とです。おそらく多くの人は部屋または部屋の一部(自分の書斎を持てない人)、 またある人はガレージ、少数だと思いますが家丸ごともいるかもしれません。こ れらが空間の具体例となります。  まず、ハッキングラボ構築後の利点を述べておきます。人によって状況が変わ ってくるので、利点は変化するかもしれませんが、大雑把に挙げると次のように なります。 ・空間を効率的に利用できる ・すぐ実験できる環境になる ・実験する億劫さを解消できる  それではそれぞれの利点を詳しくてみていくことにします。  第1に、空間を効率的に利用できるということが挙げられます。普通にPC環境を 構築してしまうと、ディスプレイより上の空間が余ったりします。オフィスだと 基本的にそういった形になってしまいますが、自宅の部屋がそれでは私には我慢 できません。よって、PCデスクを購入する際は、必ずディスプレイの上に棚が付 いていることが必須条件となります。ガレージ丸ごと利用できるといった自由度 の高い人は別として、多くの人はひとつの部屋ぐらいしか自由に利用できないこ とでしょう。さらにその部屋で衣食住を兼ねるなら、部屋全体は使えないので、 部屋の一部しか使えなくなります。こういった限られた空間の中で自分の理想的 な環境を構築するというのは難しいものです。というのも何かを実験しようとす ると、必然的にモノが増えてくるからです。  例えば、複数のディスプレイ、プリンタ、スキャナ、スピーカー、ハブ、ルー ターなどが最低限必要となることでしょう。さらに、人によっては実験がコンピ ュータ以外にも拡張します。私の場合は、電子工作、無線や犯罪手口の研究にも 興味があるので、電子パーツ、オシロスコープ、安定化電源装置、はんだごて立 て、無線機、受信機、卓上ドリルなども並べています。さらに、PCで作業しなが らTVも見ているので、TVのモニターもPCデスクに載せています。ということは、 PS2やXboxといった家庭用ゲーム機、ビデオ機、HDD/DVDレコーダー、CATV万能チ ューナーなどもPCデスクに固まることになります。  メインデスク(メインPCが置いてあるPCデスク)から動かずに、あらゆること をこなすと考えた場合、上の空間を有効に利用しなければ収まりきれません。そ うすると、機材を重ねていくことになるので、PCデスクに小さな棚を入れ子状に したり、なるべく角張っている電気製品を重ねていくということになります。そ のため、私は流線型の電気製品は嫌いです。無線をやる人の部屋をシャックとい うのですが、あのような綺麗に角張った機材を並べていくのが、空間の最高活用 だと思っています。  まだ使われていない空間もありますが、それは他の機材を今後置くことを想定 してわざと空けているからです。  ちょっと長くなってしまいました。話を戻します。  第2にすぐ実験できる環境になるということが挙げられます。これはどういうこ とかというと、例えばリモートから自分の実験用サーバーにアタックを仕掛けて ルート権限を奪取する実験をしようとします。その実験がうまく成功して一段落 つけばよいでしょうが、うまくいかず何日に渡って試行錯誤することもあります。 そうした場合、実験環境を維持しておくだけのスペースが必要となります。さら に、試行錯誤している間に、別の実験をしたくなったとします。そうすると、放 置している実験環境が増えてきて、明らかに空間を圧迫することになります。こ れをうまく解消するには、最初から複数の作業スペースを確保するのが一番簡単 な方法です。しかし、これは空間に余裕がある人しか実現できません。そういっ た意味でガレージ丸ごと使える人が正直羨ましいです。そこでたどり着いた解決 方法が、元々実験環境を完璧にしておいて、必要な実験器具の場所移動をしなく てもあらゆる実験を並行して進めることができるようにしておくことです。これ なら最初に確保したスペース以上にはあまり新しい空間を必要としません。  もっと具体的な例で示しましょう。先ほどの例ではリモートからアタックとい うことなので、ネットワークが必要となります。そこでアタック用マシンと実験 用マシンを用意して、ケーブルで繋ぐことになります。最初からこの2台のマシン をLANに接続してあればよいのですが、押入れから引っ張り出してきて新たにケー ブルを繋ぐ(場合によってはハブを使う)ということになると結構大変です。そ うすると、私の場合はうんざりしてしまい、「この実験は今じゃなくていいや」 ということになってしまいます。セキュリティアカデメイアの講座用の実験が実 は結構放置されていてもなんとか維持しているのは、最初からこのことを想定し て環境作りをしていたからといえます。  それでは最後になりますが、第3に実験する億劫さを解消できるということが挙 げられます。私にとって実はこれがかなり重要です。  PCが好きだとケーブルや小物、電子工作が好きだとICやコンデンサ、抵抗器と いった小さな電子部品が急激に増加していきます。常に使っているものならよい のですが、そうでなく「今後使いそうだから」「安かったから」「ストックのた め」といった理由で、どんどん増えていくのです。これは私に限らず、多くの人 がそうでしょう。まどさんの自宅に行ったときも、「これいつ買ったの?」と思 うような音楽用のケーブルやピン、コネクタなどが大量にありました。まどさん の家の場合は、機材の方がすごいですが(笑)。こうしたものをいつでも実験の 際に取り出せるのが理想的な環境です。そのためには最初から収納にこだわる必 要があります。この引出しにはケーブル、この引出しには筆記用具、この引出し には未完成の電子キットなどといったように仕分けていきます。ケーブルと一言 でいっても、LANケーブル、電源ケーブル、USBケーブル、シリアルポートやプリ ンタポート用のケーブル、PC自作で使う延長ケーブル、ACタップなどたくさんあ ります。ケーブルは意外にもかさばるのでひとつの引出しでは無理かもしれませ ん。つまり、PCデスクの環境作りとは別に、収納法や整理法も考慮する必要があ るということになります。 ■0x03.) メインデスク周りの環境作り  メインPCが置いてある机をメインデスクと呼ぶことにします。メインPCが置い てあるということは、主にそこの前に座るということです。つまり、この場所を 基点として、ハッキングラボの構築が始まるといえます。  ここでは、一部屋自由に使えるとして話を進めます。すでにPCデスクを持って いたり、ある程度環境が完成している人もいると思いますが、引越しでゼロの状 態から環境作りができるときに再考してみてください。  それでは、まずメインデスク用のPCデスクを用意します。なるべく横幅・奥行 きは大きい方がよいです。  奥行きがないものを選択してしまうと、自分の胸・腹とキーボードの間にスペ ースがなくなってしまい、簡単な実験作業ができなくなってしまいます。また、 本を広げながら何かを入力したいとき、苦労することになってしまいます。ELEC OMのカタログ(Webで資料請求すれば、無料でもらえる。別に買うものがなくても 1冊持ってると便利。コネクタの一覧などがよい)で調べると、PCのデスクの奥行 きのタイプとして、600mm、700mm、850mm、1000mmとなっています。私は奥行きが 800mmのタイプのものを使っています。最低700mmは欲しいところです。薄型ディ スプレイだから奥行きがなくても大丈夫と思いがちですが、案外そうでもありま せん。ディスプレイの裏はケーブルがいっぱいになることを想定しておかなけれ ばなりません。また、ディスプレイと一緒に並べるものの奥行きとの整合性を取 る必要があります。例えば、TVや他の機材(無線機、ゲーム機など)と並べるな ら、それらの前面とディスプレイの前面が水平になるように設置することになり ます。こういったことも考慮しなければならないのです。ただ、奥行き850mm以上 になると、格段にPCデスクの値段も跳ね上がります。例えば、ELECOMのCAI-1280 CTという奥行き850mmの中で一番安いものでも、定価21万円もします(しかも、デ ィスプレイ上の棚がないので、さらにアウト)。奥行き800mmタイプなら、5万〜 10万以内で購入できます。Yahooオークションで購入すれば、さらに1,2万安くな ると思います。  次に横幅を考えます。これはディスプレイを何台置くかということを基準にし て考えます。後ほど解説するPC切り替え機を使えば、PCの台数が多くてもディス プレイの台数を抑えることはできます。しかし、あくまでDOS/Vマシン用のディス プレイの台数を1台で収めることができるだけで、SunやMacを使う人は別に用意す る必要があります。一応、DOS/V,Sun,Macの3つに対応したPC切り替え機も例外と して存在しますが、かなり高くなります。このあたりは、自分の理想的なハッキ ングラボを想像しながら、最終的な何台のOSを活用するかで決定します。ただし、 DOS/V機で動くものは同一カウントで結構です。Windows、Linux、FreeBSD、超漢 字などは普通にDOS/V機で動くので、PC切り替え機さえ用意すればディスプレイ1 台で十分ということになります。また、何台のPCを使うのかにも依存します。特 にデスクトップPCの台数が重要となります。基本的にデスクトップPCはタワー型 だと思いますが(キューブ型も2つ以上重ねれば一応タワーになる)、それらは腰 下、即ちディスプレイの下側に置くことになります。ということはデスクトップ PCの数が増えれば増えるほど、横幅を取るということです。厳密にいえばPCケー スやディスプレイの寸法によって変わりますが、簡単な計算として2台弱でディス プレイ1台分の横幅と同一になります。一番間違いがない横幅の選択としては、デ ィスプレイが3台分横に並べることができる1,400mm以上のクラスです。私は1,450 mmのPCデスクを使っています(定価9万ぐらい、購入価格7万ちょい)。左側から、 TVモニター、PC用のディスプレイ(PC7台をこのディスプレイ1台で兼用)、機材 その他というように並べています。そして、デスクトップPCは7台ちょうどよく収 めることができています。もちろん、熱の環境上のため、ピッタリくっつけるこ とはできないので、少し隙間を空けて配置しています。  最後は高さですが、これは無条件で上の棚が付いているタイプを選びます。最 初から付いているものを選べば最大限に空間を有効活用できる上に、コスト削減 できます。ひとつの棚にディスプレイを3台置くことができれば、上下で最大6台 置くことができます。実際は6台も置くことはありませんが、その分のスペースが 確保できるという意味で好都合です。  PCデスクを用意できたら、配置を考えます。部屋の大きさはもちろん、ドアや 押入れ、窓の位置も考慮します。机を置くことによって、窓が全然開けられなか ったり、ドアにひっかかっていては問題です。部屋が10乗以上と広ければ、机を 中央に置くことをオススメします。よくアメリカのハッカー映画などを観ると、 ガレージの中央付近にPCデスクを設置していることがよくあります。あれだとPC を動かすことなく、裏に回れば簡単にケーブルの付け替えができます。壁際にPC デスクを配置してしまうと、ケーブルの付け替えだけでも、PCを引き出す必要が あり、かなり億劫ですし、効率が下がります。特殊な例になりますが、2つの部屋 が繋がっていて襖で仕切られている和室なら、襖際にPCデスクを配置して、何か あれば別の部屋から回りこんで襖を開けて作業をするという手もあります。ちな みに、私の部屋は残念ながら狭いので、PCデスクを壁際に設置しています。PCデ スクの裏(ディスプレイの裏やPCの裏)でケーブルがスパゲティ状態になってい て、もうPCを引き出して作業するのが正直うんざりです。そのため、最初から完 璧な状態にしておきました。 ■0x04.) 周辺機器を考える  PCデスクの配置が決定したら、PCやモニターを思い思いに配置します。ここま で完了すれば、周辺機器の配置を行います。  まず、周辺機器の一番の代表といえるのが、プリンタでしょう。家庭用プリン タでもディスプレイ1台分ぐらいのスペースを消費します。最近のコンピュータ界 の流れとして、スキャナ機能を内蔵した多機能プリンタが増えています。これは 大変スペースの有効活用できます。しかし、購入の際に注意することがあります。 家庭用プリンタなら、エプソンやCanonなどのメジャーな日本の会社の製品を選び ましょう(金に余裕があればリコー、ゼロックスが理想)。なぜなら、ユーザー が多い分、インクが安いからです。また、カラーインクが3色インクではなく、一 色ずつに対応したインクがセットできるタイプがよいでしょう。3色カラーインク の中の一色だけが空になっただけで、交換するのはもったいないからです。イン クを手動で補充すればコスト削減できますが、慣れないとうまくいかないもので、 手に付くとなかなかおちません。私の場合、hp(ヒューレッドパッカード)社の 多機能プリンタ(スキャナ、プリンタ、コピー機能が一体化されている)を購入 しましたが、インクが高すぎて購入したのを後悔しています。詰め替えインクを オンライン販売しているショップを紹介します。 ・エコショップ.com(http://ecotte-shop.com/) ・エレコムダイレクト(https://shop.elecom.co.jp/Store/CategoryList.aspx?CategoryKey=INK)  次に、PC切り替え機を紹介します。私だけかもしれませんが、もうPC切り替え 機から離れることはできません。一番の好きな周辺機器をひとつ選ぶとしたら、 これを選択します。PC切り替え機がなくても、PCの台数と同じ数のディスプレイ を用意すれば問題ないのですが、さすがに7台も利用するとスペースの問題からこ れはなかなか実現できません。PC切り替え機を購入するときは、モニター切り替 え機能だけではなく、モニター、キーボード、マウスも一緒に切り替えることが できるものを購入しましょう。もちろんその分高くなりますが、そうでなければ PCの台数が増えるとマウスとキーボードの数も増えてしまいスペースの有効利用 ができなくなってしまうからです。最近では、スピーカーの切り替えも共有でき るものもあるようです。これはこれで結構便利です。  切り替え台数が増えれば増えるほど、値段が高くなります。4台を切り替えるこ とができる普通のPC切り替え機なら1万前後で購入できるはずです。個人的には、 ぷらっとホームで売っているPShareシリーズをオススメします。4台切り替えタイ プでも3万ちょっとするので贅沢かもしれませんが、これを一度使うともう離れら れません。PC切り替え機は色々使ってきましたが、個人向けではこれが最強と思 っています。PShareを使えば、切り替え時にモニターの乱れが少なかったり、ボ タンだけでなくキーボードだけ([Shift]+[Ctrl]+[Alt]⇒数字⇒[Enter])で切 り替えできます。また、カスケード接続することで、PShareを多段接続して、切 り替え台数を増やすこともできます。例えば、PShare EX(4台切り替え可能)の 1ポートを利用して、別のPShare EXを繋げれば、7台(=3台+4台)が切り替えで きるということです。もちろん、8ポートや16ポートの製品を利用すれば、その分 たくさん増やせます。PShareなら信用(勝手にそう思っている)できる製品なの で、別のメーカーが発売している製品のようにすぐに生産中止になることもない でしょう。長い期間販売してくれるシリーズということは、後で追加するときも 安心できます。これは後ほど解説する収納法にも共通する心理です。下手に安い ものを買うと、後で買い足すときに寸法や見た目に整合性が取れなくなってしま うことがあります。ところで、かなり便利なPShareですが、古いkensingtonのト ラックボールやIBM製のスペースセーバーキーボードなどと相性が悪いことがあり ます。新しいPShareなら対応されているかもしれませんので、FAQをチェックして みてください。 ・ぷらっとホーム PShareシリーズ(http://www.plathome.co.jp/products/pshare/)  ぷらっとホームには興味深い製品を売っているので、見てみてください。私が 一番お気に入りのお店です。ただし、高いですが・・・(苦笑)。  外部に公開するサーバーがあるなら、UPS(無停電電源装置)も用意しておきま しょう。これは停電が起きたとき、一定時間だけすぐに電源を維持してくれるも のです。簡単にいえばバッテリーです。とはいえ数時間という長い時間の電源を 維持してくれる者ではありません。あくまでサーバーの電源を切る余裕を持たせ るためのものです。また、交流電圧の波形の乱れや瞬停(一瞬だけ電源が切れる こと)も解消できます。サーバー、モデム、ルーターやハブなどの電源をすべて UPSに接続すれば、停電になってもインターネット回線を維持できます。ルーター やハブの設置場所の関係上、UPSの台数も増えるかもしれませんが。MMORPGなどで PTプレイしているときに停電だと他のPT員に迷惑や心配をかけるので、ネットゲ ーム廃人にとってもUPSは不可欠かもしれません。  UPSにも様々ありますが、雷サージ対応のACタップの拡大版のような形のUPSは、 新品で1万円ぐらいで購入できます。私はAPCのUPSをYahooオークションで5千円前 後でゲットしました。これでも個人レベルでは十分でしょう。  ところで、UPSは鉛が入っていてかなり重いので、注意してください。ぎっくり 腰になるぐらい本当に重いです。 ■0x05.) ネットワークを構築する  複数台のマシンを設置するということは、LANを構築することになり、ネットワ ークの勉強になります。色々なOSが混在する環境だと、さらに勉強になります。 PC1台しか持っていない人は、是非2台目の購入をオススメします。2台あれば必然 的にLANを組むことになり、ルーターやハブ、IPアドレスやプロトコルなどのネッ トワークの設定の知識が自然と身に付きます。2代目のマシンをメインPCにするつ もりがなければ、安いものでも構いません。中古のCeleron/PentiumIIIのマシン などは1万円以下と安価で購入できます。安いマシンならスペックも低いのでWin dowsXPなどは動きませんが、LinuxやFreeBSDなら十分です。ただし、Linuxのディ ストリビューション(厳密にいうならばGUI環境)によっては低スペックでは辛い ときがあります。  VMWareやVirtualPCのようなエミュレータを利用して、仮想ネットワークを構築 するという方法もあります。仮想ネットワークと実在するLANをブリッジ接続して、 相互にやり取りすることもできます。エミュレータを使えば、1台のマシンであた かも複数台が存在するように実験することができます。しかし、複数のゲストOS (エミュレータで起動されたOSのこと)を実行するなら高スペックでなければま ともに動きません。また、エミュレータでうまく動作しないOSも少なからず存在 します。LinuxやFreeBSD、DOSといったメジャーOSならVMWareでも動作しますが、 超漢字4の場合うまく動作しません(VirtualPCでは動作する)。私は実機に触る ことは大事だと思っています。あくまで実機でインストールできるようになって から、エミュレータを活用していきましょう。エミュレータだけで何でもこなそ うとするのは間違っていると思います。  ネットワークを構築できたら、ファイルサーバーやWebサーバーなどを設置して みましょう。また、アタックに興味があれば実験用サーバーの構築をオススメし ます。最近なら、DB(データベース)へのアタックが流行っているので、実験用 サーバーにSQLもインストールして色々試してみましょう。また、キーロガーやS nifferの設置や運用などの実験も可能です。ネットカフェで試すと犯罪ですので、 自宅で満足することにしましょう(笑)。何かやろうとするにも、練習は大事で すので。 ■0x06.) 収納を考える  メインデスクが完成したら、そこに収めることができなかった物、特に常に使 わないがストックしておく物を収納する場所を確保しておきたいものです。焼い たCD-RやDVD-R、コード、説明書・資料、書籍などが対象となります。  私の場合、エレクターで大き目の棚を作り、そこに無印良品(以下、無印と略 する)の大き目の引出しを載せています。エレクターだと、ひとつひとつ自分で 連結して組み立てることができます。強度は申し分ありませんが、ちょっと高い のが難点です。別にエレクターではなく、普通の組み立て式のパイプ棚でも構わ ないと思います。  無印の引出し(ポリプロピレン収納用品)は、一応シリーズもので、後で追加 しやすく、寸法もしっかりしています。5年度にも多分残っているシリーズだと思 ったからです。ひとつ1,500円ぐらいで売っています。この中にコードや小物を入 れて整理しています。 ・エレクター(http://www.erecta.co.jp/erecta/index.html) ・無印ネットストア(http://store.muji.net/static_html/pc/search/prod_list_S00801_1.html)  CD系は普通にダンボールに放り込んでいます。できれば、きちんと整理したい ものです。もちろん、ドライバーやよく使うアプリのCD-Rはすぐ取り出せるよう に置いていますが。  これからはHDD保存の時代かもしれません。HDDやCD-Rの整理法についてもう少 し考えていきたいと思っています。  電子部品の整理に最初はパーツケースを用いていましたが、現在は部品整理箱 を使っています。パーツケースは100円ショップに小さなものが売っていますが、 1,500円〜2,000円のしっかりしたものが便利です。ただ、部品が多くなってくる とパーツケースでの整理にも限界が生じてきます。というのもパーツケースは平 積みで重ねることが基本となるので、下にある部品をすぐに取り出せないのです。 この問題を解消してくれたのが、ホーザンの部品整理箱です。私は据え置き型の B-105を使っています。これは120個(=20×6)の引き出しが付いています。難点 は定価71,400円(実売価格5万ちょい)と高額なことです。この部品整理箱のおか げで電子部品を一箇所に整理でき、さらに分類する楽しみもできて、今ではすご い幸せだったりします。 ・ホーザン 部品整理箱(http://www.hozan.co.jp/catalog/case/parts_cabinet_s.htm) ■0x07.) 終わりに  他人の作業スペースや部屋に興味があるので、自慢の部屋や面白い収納・運用 アイデアなどがあれば、是非質問掲示板の「環境」スレッドに投稿してみてくだ さい。 http://ruffnex.oc.to/ipusiron/cgi/forum/patio.cgi?mode=view&no=20 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第5章:お知らせ --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○Wizard Bible(http://akademeia.info/wizardbible/)では随時、執筆ライタ ーを募集しています。  扱う内容のテーマは広義での「under ground」です。例えば、ハッキングから サリンガスの合成法などと幅広い内容を考えています。また、各種、特殊な職業 や趣味を持った方のレクチャーなども含まれます。  一回きりでも構いません。また、必ず、毎回連載する義務もありませんのでで きる範囲で構いません。気軽に声をかけてください。もちろん一回書いたことが ある人も気軽に声をかけてください(全く気にしていない性格なので)。 ○Kenji AikoさんがQ&Aを作ってくれました。初めて参加する人でもわかりやすく 書かれていますので、参考にしてください。 http://akademeia.info/wizardbible/wbQandA.html ○支援者、参加希望者用のスレッドを立てました。 http://ruffnex.oc.to/ipusiron/cgi/forum/patio.cgi?mode=view&no=17 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第6章:著者プロフィール --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■Will ●Job:Student ●Web:http://will.wbjapan.com/ ●Mail:Will_net@hotmail.co.jp ●Team(Group): Anti-WMAC Network ●Comment: 宿題やら部活やらで夏休みは大して遊べませんでした。これから友達が泊まりに 来て、勉強&テニスをする予定です。筋肉痛が怖ろしい…。 ■Kenji Aiko ●Job: Student ●Web: http://ruffnex.oc.to/kenji/ ●Mail: kenji@ruffnex.oc.to ●Team(Group): N/A ●Comment:  最近ロボットアニメをいくつか見ました。見たのは、ガンダムSEED(50話)、 ガンダムSEEDスペシャルエディション(3話)、劇場版ファーストガンダム(3話 )、劇場版ターンAガンダム(2話)、エヴァンゲリオン(26話)、ガンダムSEE D DESTINY(44話、以後続く)です。  私はアニメなんてほとんど見ない人だったのですが、知り合いに勧められちょ くちょく見ていくうちに、結構な数に…。アニメと馬鹿にするなかれ、意外にも 内容が重いです(特にエヴァ)。 ■Defolos ●Job:Student ●Web:http://scel.fc2web.com/ ●Mail:pan1124@luck.ocn.ne.jp ●Team(Group):none ●Comment:  おはようございました、Defolosです。ピッキングとナイフメーキングとナイフ ファイティングの訓練(最近できてません)、PCが趣味のごく普通の学生です。  今回WizardBibleへの参加は8回目となります。レギュラー目指して次回も頑張 りたいと思います(`・ω・´)。 ■IPUSIRON ●Job:テクニカルライター ●Web:http://akademeia.info/ ●Mail:ipusiron@ruffnex.oc.to ●Team(Group): ruffnex,backsection ●Comment:  最近WBに何のネタを書こうか悩みます(笑)。  Phrackもvol.63で終了してしまいました。WBは今vol.20なので、後3倍ですか・ ・・。先は長いです。