[-]=======================================================================[-] Wizard Bible vol.19 (2005,7,31) [-]=======================================================================[-] x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第0章:目次 --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○第1章:HRS 金床 著 ○第2章:最新SEOスパム事情 JH 著 ○第3章:実践 サリンの作り方 marodc 著 ○第4章:Fast User Switching Will 著 ○第5章:ハニーポットを作ろう 〜 第4回 〜 Narusase 著 ○第6章:Micro$oft Watch vol.1 Taka John Brunkhorst 著 ○第7章:黒色火薬の作り方 Defolos 著 ○第8章:簡単!偽造指でスライド式指紋認証を突破する くろいみやたん 著 ○第9章:実践から学ぶ初めての解析 第1回 右サイド 著 ○第10章:アセンブラとPEフォーマットとマシン語の注入 Kenji Aiko 著 ○第11章:ノイズの雑学 IPUSIRON 著 ○第12章:お知らせ ○第13章:著者プロフィール x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第1章: HRS --- 著者:金床 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  2005年6月に、watchfire.comからHTTPに対する新たな攻撃手法が発表されまし た。その名はHTTP Request Smuggling(略称HRS)で、HTTPリクエストの密輸、つ まり監視などをかいくぐって攻撃を仕掛ける、といったニュアンスとなります。 この新しい攻撃手法がなんとも重箱の隅をつつきまくりでHTTPマニアの僕の心を 激しくゆさぶる(笑)ので、今回はこのHRSについて簡単に紹介したいと思います。 一次情報源であるホワイトペーパーは、次のURLから入手することができるので、 興味がある方はご一読ください。 http://www.watchfire.com/resources/HTTP-Request-Smuggling.pdf ■0x02.) HRS概要  HTTPに関係する攻撃といえばCross Site Scripting(XSS)やSQLインジェクシ ョンが有名ですが、HRSはこれらとは異なり、やや焦点がぼやけた攻撃手法だとい えます。HRSは2種類以上のデバイスがHTTPプロトコルに対して異なる解釈をして しまうことを利用した攻撃「全般」を指す用語となっています。ある場面ではID Sの目をかいくぐってHTTPリクエストをウェブサーバーに届けたり、別の場面では 何も知らずにアクセスしてくるクライアントの認証情報を盗んだり、そしてある 場面ではキャッシュサーバーのキャッシュを汚染したりという風に、攻撃対象に よって異なる結果が引き起こされます。そのような意味では、HRSはXSSやSQLイン ジェクションと異なり、やや捕らえどころのない、理解するのが難しい攻撃であ るといえます。 ■0x03.) Double Content-Length header  では、具体的にHRSの中身を見ていきましょう。まず、次のport80に対して送信 されると思われるデータストリームを見て下さい。 ----- POST http://SITE/foobar.html HTTP/1.1 Host: SITE Connection: Keep-Alive Content-Type: application/x-www-form-urlencoded Content-Length: 0 Content-Length: 44 GET /poison.html HTTP/1.1 Host: SITE Bla: GET http://SITE/page_to_poison.html HTTP/1.1 Host: SITE Connection: Keep-Alive -----  このデータストリームにはリクエストラインに見える部分が3つありますが、一 体どれが本物でどれがニセモノなのでしょうか。ひとつめは「POST」で始まる1行 目で、これが本物のリクエストラインであることは間違いありません。しかし、 2つめおよび3つめの「GET」で始まる部分については、それが本物であるかどうか という問いに対する正解は存在しないのです。この理由はContent-Lengthヘッダ ーフィールドが二つ存在するという点にあります。これにはやられました。Cont ent-LengthヘッダーフィールドはHTTPリクエストやHTTPレスポンスのボディ部の 大きさを示す役割を果たします。通常ならば、当然このヘッダーフィールドはひ とつのHTTPエレメントについてひとつしか存在しません。しかし…。  上の例で、仮に最初のContent-Lengthヘッダーフィールド(数値は0)を解釈し、 2つめのContent-Lengthヘッダーフィールドを無視するとしましょう。すると、こ のデータストリームは最初の7行がひとつめのHTTPリクエスト、そしてそれ以降が 2つめのHTTPリクエストとなります。ところが最初のContent-Lengthヘッダーフィ ールドを無視し、2つめのContent-Lengthヘッダーフィールド(数値は44)を解釈 すると、このデータストリームは「Bla: 」までが一つめのHTTPリクエスト、そし て「GET http://SITE…」以降が二つめのHTTPリクエストであることになります。  HTTPのサービスを提供するシステムがウェブサーバーひとつだけで構築されて いる場合、このようなデータストリームが送られてきても問題は発生しません。 しかし、システムがウェブサーバーとキャッシュサーバーなどのように2つ(以上) のデバイスで構成されている場合、それぞれがどちらのContent-Lengthヘッダー フィールドを正しいものとして認識するかという点において相違があると、HRS攻 撃が成功する可能性が浮上してきます。上のデータストリームの例では、キャッ シュサーバー上のキャッシュが汚染される可能性があります。  では、そもそもこのように2つ以上のContent-Lengthヘッダーフィールドが存在 する場合にはどちらを正しいものとして解釈すべきなのでしょうか。こんな場合 にはRFCを見るのが一番ですので、HTTP/1.1のRFCのContent-Lengthヘッダーフィ ールドの説明を見てみましょう。  …書いてません(笑)。いや、当然というか何というか、Content-Lengthヘッ ダーフィールドが2つ以上あるなどという馬鹿げた状況は誰も想像できなかったの でしょう。ということで、「正しい」実装は定義されていないのです。その結果、 上のようなContent-Lengthヘッダーフィールドが2つ以上ある場合、それぞれのウ ェブサーバーやキャッシュサーバーによって、どの行を解釈するか(あるいはエ ラーとして処理するか)という実装に違いが出てしまっています。watchfire.co mのペーパーによると、Microsoft ISA/2000とSun Microsystems SunONE 3.6 SP4 は最後のContent-Lengthヘッダーフィールドを、一方Jakarta Tomcat 5.0.19 (C oyote/1.1)、Tomcat 4.1.24 (Coyote/1.0)、Sun Microsystems SunONE web serv er 6.1 SP1は最初のContent-Lengthヘッダーフィールドを解釈するようです。ち なみに僕が調べた感じでは、Apacheはエラーとして処理するようです。個人的に はApahceの実装が正解であると思うと同時に、よくもまぁContent-Lengthヘッダ ーフィールドが2つある場合を想定していたなぁと感心しました。 ■0x04.) Transfer-Encoding + Content-Length  同じように、通常ならあり得ないヘッダーの状態として、次のようなHTTPリク エストが考えられます。 ----- POST /hoge.cgi HTTP/1.1 Host: www.jumperz.net Transfer-Encoding: chunked Content-Length: 12 aaaaaaaaaaa -----  この例ではTransfer-Encodingヘッダーフィールドが定義され、その値が「chu nked」になっているので、ボディ部はchunked形式で送られてくると考えられます。 しかし同時にContent-Lengthヘッダーフィールドも定義されており、12という値 を持っています。このようなHTTPリクエストを受信するサーバーは、2つの行が矛 盾していることを認識できなければなりません。面白いことに、この場合につい てはRFCに記述があり、このような矛盾はあってはいけない(MUST NOT)こと、そ してこのような場合にはContent-Lengthヘッダーフィールドを無視するべきであ る、されています。  すべてのデバイスがRFCに忠実に実装されていれば問題ないものの、そうでない 場合にはDouble Content-Lengthの場合と同様にHRS攻撃が成功する可能性があり ます。  watchfire.comのペーパーにも詳しく書かれていますが、Apache2.0.45をプロキ シサーバーとして使用する場合、この実装に問題があり、とても奇妙な動きをす るようです。そして、HRS攻撃が成功する可能性が高いと見られています。これは 明らかにApacheの実装のバグなので、近いうちに修正されるのではないかと思い ます。 ■0x05.) header SP  HTTP/1.1ではヘッダーフィールドの2行目(以降)をスペースもしくはタブで始 めることでひとつの項目を複数行に渡らせることが可能と定義されていますが、 これは実際には全く使われておらず、そのためかバグをかかえたHTTPデバイスが 多いようです。 ■0x06.) GET with Content-Length  さらに、GETなどの通常ならばボディ部を持たないHTTPリクエストにContent-L engthヘッダーフィールドを含ませるという手法も取り上げられています。GETや HEADなどのHTTPリクエストは無条件にボディ部を持たないものと決まっているの かと思っていたのですが、どうやらRFCでははっきりとは定義されておらず、どち らかというと「ボディ部があるかもしれない」というスタンスで実装するのが望 ましいとされているようです。これは個人的にまったく予想外で、非常にショッ クを受けました。つまり、GETリクエストにContent-Lengthヘッダーフィールドが 存在した場合(そしてその値が正であれば)、そのバイト数のボディ部が存在す るとしてデータストリームを読むことが推奨されているのです。次の例を見て下 さい。 ----- GET /a.html HTTP/1.0 Connection: Keep-Alive Host: 192.168.2.200 Content-Length: 49 GET /aaaaaaaaaa HTTP/1.1 Host: 192.168.2.200 GET /b.html HTTP/1.0 Host: 192.168.2.200 -----  このデータストリームは、ApacheやIISにとっては2つのHTTPリクエストとして 処理されます。しかし僕が過去に作ったHTTPプロキシやDelegateのように「GETリ クエストはボディ部を持たない」という前提で実装されているデバイスにとって は、このデータストリームは3つのHTTPリクエストとして処理されます。その結果、 ウェブサーバーとの組み合わせ方によってはHRS攻撃が成功する可能性が出てくる わけです。う〜む、なんてこった(笑。 ■0x07.) IIS/5.0 48kb bug  最後に、IIS/5.0にはとてもわけのわからないバグがあるようで、48kb以上のボ ディ部を持ち、かつContent-Typeヘッダーフィールドが無いHTTPリクエストは、 無条件にボディ部を48kbちょうどと決めつけてしまうようです(笑)。何という かあり得ないバグです。このバグによって当然HRS攻撃が簡単に決まることになり ます。IIS/5.0を使っている場合には要注意でしょう。 ■0x08.) HRS攻撃に対する防御  そんなわけで、色々なパターンがあり、ネットワーク構成によってどんな結果 を引き起こすかわからないやっかいなHRS攻撃ですが、どのようにすれば防御でき るでしょうか。一番シンプルな方法は、クライアント側(攻撃側)から見て一番 手前にアプリケーションファイアウォールを設置し、HRS攻撃に繋がるような奇妙 なHTTPリクエストを叩き落とす、というものかと思います。そこで拙作のウェブ アプリケーションファイアウオールであるGuardian@JUMPERZ.NETのプラグインHR SDetectorを作成しました。Content-Lengthヘッダーフィールドが二つあったりす るようなヘンなHTTPリクエストを発見した際にログに記録し、TCP接続を切断して 防御します。詳しくはhttp://guardian.jumperz.net/index.htmlからオンライン マニュアルを参照して下さい。 ■0x09.) まとめ  今回のペーパーはいくつかの点で、とても衝撃的でした。まず、HTTPのデータ ストリームに関してこれほどまでに重箱の隅をつつきまくる人間が存在したこと (笑)。僕は自分でHTTPマニアだと思っていましたが、世の中上には上がいるも のですね。そして、GETリクエストでもContent-Lengthヘッダーフィールドが存 在した場合にはボディ部があるという前提で処理をすべきであったという点。ま だまだRFCの読み込みが足りなかったようです(つーかHTTP/1.1のRFCは読みづら い)。そんなわけで、ますます精進せねばと思います。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第2章: 最新SEOスパム事情 --- 著者:JH x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) 挨拶と自己紹介  どうも初めまして。JHと名乗る者です。一応SEOの分野で数年以上活動していま す。私は現在、地方の五流大学に通う根暗で、人見知りの激しい引き籠もり体質 の野郎です。  どうぞ宜しく。  この度は検索エンジン最適化、いわゆる「Search Engine Optimization」(SEO) について、特にSEOスパムについて、思うところを書きたいと思います。 ■0x02.) SEOってなんだ?  2005年6月時点でのSEO界の常識でいえば、SEOとはW3Cの勧告に従ったHTMLない しXHTML/CSSを駆使してサイトを構築し、自サイト内リンクを最適化することです。 そして、他のサイト、特に検索エンジンから自サイトへリンクを張ってもらうこ とを目的としています。つまり、検索エンジンの検索結果の上位に載るように小 細工することをSEOと呼ぶわけです。  とはいえ普通に生活している人はまず、SEOに出会うことはおろか知ることもな いでしょう。1年ぐらい前からSEO対策関連の書籍も発売され始め、一時期は一種 のブームにもなりましたが、まだまだSEO界は発展途上であり、認知度は低いと思 います。  そして、そんな世界について我々はこの知的電脳空間を通して、理由はなんで あれ、少なくとも今ここでSEOに出会えたわけです。そうである以上、また私のよ うなSEOに携わる端くれ野郎と、皆なんが出会えたことを(勝手に)祝して、ぜひ SEOスパム、つまり検索エンジンスパムについて知って欲しいと(勝手に)思いま す。このコラムを通して、SEOについて興味を持ってもらえれば幸いです。  では、早速本編を開始とさせていただきます。 ■0x03.) 2005年6月時点での最新のSEOスパム一覧 1.トラックバックスパム 2.コメントスパム 3.管理サイトを複数立ち上げての相互リンク(自作自演)  簡単にまとめると以上です。それでは中身について切り込んでいきましょう。 ●1.トラックバックスパムの手口  手口と表現すると、どこか怪しい印象を受けますがそこはUGの雰囲気でごまか します。  まずブログを運営している方は想像通り、トラックバックを打ちまくります。 もちろん自分のブログではトラックバック受付を停止しておきます。スパムを行 うなら当たり前ですよね。  ここでは無差別にトラックバックを打ってもよいですし、関連あるカテゴリ内 に限定した上でトラックバックを打ってもよいです。とにかく相手のブログを読 まずにただひたすらトラックバックを打つこと、これに尽きるのがトラックバッ クスパムの本質であり醍醐味でもあります。  それじゃブログではなく、サイトを運営している場合はどうするか? もちろ ん手口はあります。「レントラ」を利用します。私もコメントスパムに飽きてき た頃、レントラをそこそこ利用してました。知っている方は知っているでしょう。 第一回SEOコンテストでも話題になったモノです。利用方法はレントラ開発サイト に書いてあるので参考にしてください。 ヒント:「レントラ」で検索  実はこれ、ブログでなくともトラックバックを打つことができる便利なサイト です。ですがトラックバック送信についての制限があるので、トラックバックス パムとしてはあまり効率的ではありません。しかも、実際にやってるとなんだか 非生産的な感覚に襲われます。  そこで楽に、何も考えずに、淡々と、トラックバックを打てるツールはないも のかと探しているときに見つけたのが「ぶろっぐぴんぴん for Win & Mac」です。 これは非常に便利なツールで、フリーソフト(blogpeopleへのログイン必要)で あります。使えば今日からあなたもトラックバックスパマーの仲間入りが確定し ます。それほど危険性の高いツールだといえるでしょう。最も、モラルのしっか りした方であれば、なんら問題はありません。実例としては、このツールを使用 してトラックバックスパムを行います。トラックバックURIは各自で探してきてく ださい。 ヒント:「RSS」、「 ディレクトリ」、「検索エンジン」で検索  以上の解説を冷静に読んで、じっくり何度も何度も実行して、試行錯誤してく ださい。速ければ数分、遅くとも数日ですべてが見えるでしょう。ちなみにトラ ックバックを行う目的はコメントスパムと同様、トラフィック(訪問者)とバッ クリンクの獲得がメインです。  バックリンクとは、目的のWebページに対して張られている自サイト以外のリン クすべてのことです。ただし、定義としてはそうではないと主張する人もいます が、私はそう考えています。  これが最新のトラックバックスパムのすべてです。 ●2.コメントスパムの手口  個人的にこの手法は好きです。他の人間の思考に触れる(他人のブログを読む) ことのできるチャンスですから。しかし、コメントスパマーは読みません。自動 投稿ツールを使用するでしょう。実例としは古いタイプのMovableTypeをターゲッ トにした事例がそうです。コメントスパムは恐らく、皆さんが想像している通り だと思います。有名ブログにコメントスパムをしてトラフィックを稼ぐ、バック リンク目的などですね。ですが、これは非常に紙一重な方法です。有益なコメン トを送信すれば、コメントスパムではないと、相手方ブログ管理者は感じるから です。やるなら自己責任で上手にやりましょう、といったトコロですかね。 ●3.管理サイトを複数立ち上げての相互リンクの手口  複数のトップレベルドメイン(Top Level Domain : .comや.jpとか.tvに.info など)を使用して目的ページへリンクを渡す行為が最も効果的です。海外の無料 サーバなんかを利用するとよいでしょう。実際に第二回SEOコンテストやプチSEO コンテストでも、コンテストトップランカーはほぼ全員利用していました。また、 独自ドメインを持っている方なら、サブドメインを乱立させて目的ページへリン クを渡してもよいでしょう。  これが最もポピュラーでやりやすく、それなりに目に見えて効果のある手口で はあります。  注意点として、文字コードを日本語としてキッチリ設定しておくこと(検索結 果における文字化け対策)、コピーサイトスパムにならないように、微妙に文言 を変えてサーバへアップロードすることなどが挙げられます。 ■0x04.) 今後の検索エンジン側の対応  GoogleとYahoo!ジャパンについて言及します。 結論:Googleはアルゴリズムの変更によって対応していくでしょう。    Yahoo!ジャパンについてはインデックスの変更で対応していくでしょう。  そして、Googleの場合、トラックバックスパムもコメントスパムも共に「rel= "nofollow"」の記述がないリンクであるならば、完璧に有効です。管理サイトを 複数立ち上げての相互リンクも有効です。Yahoo! JAPANについてもほぼ同様で、 トラックバック、コメントスパム共に有効ですが、管理サイトを複数立ち上げて の相互リンクの方が明らかに有効です。  なお、Googleは現在、結構複雑にアルゴリズムが動いていて、微妙といえば微 妙なのですが、オーソリティとハブ理論が変な意味でもある意味でも普通の意味 でも、有効に機能しています。オーソリティとハブについては「オーソリティと ハブ」がヒントです(Googleで検索してみよう)。どうやらハブサイトが上位に 来て、オーソリティサイトが下位に沈むという不可解な現象が散見されているの です。まあそのうちきちんと対処されるでしょうが、不可解で気持ち悪いって事 実には変わりないですね。  ところで、2005年6月に、Googleのアルゴリズム変更にYahoo! Search Technol ogyのインデックス変更による検索結果の大幅な変動(多分)が、公式アナウンス されました。 ・http://www.webmasterworld.com/forum30/29720-1-30.htm  Google(?) の意見。 ・http://www.webmasterworld.com/forum30/29902-45-10.htm  これの#445 10:25 pm on June 15, 2005 (utc 0)参照。  上記2ページはリファラチェックがあります。ごにょごにょして入室してくださ い。お金を払う必要もログインする必要もありません。 ・http://www.ysearchblog.com/archives/000120.html  Yahoo!のインデックスが変更するよ。検索結果の順位が大幅に変わると思うよ。  というわけで、Googleは恐らくアルゴリズムを動かしてスパムに対処していく と今後予想されます。とりあえずスパムはなくならないですよね、といえそうな のが個人的な意見です。Yahoo! JAPAN(Yahoo! Search Technology)はどうも小 手先のテクニックで対処しているって印象を受けざるを得ません。やはりスパム はなくならないでしょうね。  ちなみに私のやり方・所感では、Yahoo!の方がスパムの効果は上がりやすいで す。 ■0x05.) おまけ  トラックバックスパムについて、各ブログサービス会社の対応状況は次の通り です。 ○ココログ  IPアドレスごとにトラバ・コメント一覧表示・一括削除。IPアドレスによる投 稿規制。 ○ライブドアブログ  トラバ一括削除機能・送信して来たIPアドレスのトラバ・コメント禁止設定機 能。 ○OCNブログ人  トラバ・コメント一括削除機能。 ○エキサイトブログ  特定のユーザIDやURLからのトラバ拒否機能。 ○Movable Type  フィルタ機能・IPアドレス拒否機能あり。トラバ一覧ページ(1ページ当たりの 表示件数のカスタマイズ可能)あり。各エントリ画面下部にも受信トラバ一覧あ り。 ■0x05.) 特講1:Yahoo!のアルゴリズム対策  Yahoo!のアルゴリズムはHITS(Hyperlink-Induced Topic Search)ですが、そ の中でもどうやら2005年7月20日の時点ではオーソリティとハブ理論が非常に強く 働いているようです。  ここでみなさんが理解すべきはオーソリティとハブ理論だけでOKです。この理 論は、例えば「新聞で有名な所は? - 読売朝日毎日、日経新聞」という具合に、 特定ジャンルに特化・専門化していて、かつ人気もあるサイト=オーソリティ( 権威)サイトと定義されます。この権威サイトをたくさん集めたリンク集サイト がハブサイトとなっています。このオーソリティとハブ理論が非常に強く働いて いるようなんです。  そして、http://help.yahoo.co.jp/help/jp/ysearch/ysearch-03.htmlによると そのアルゴリズムはYahoo! Inc.のシステムに準じているらしいのです。で、Yah oo! Inc.とは一体なんなのかというと、Inc.はインクと発音し法人の表記の仕方 の一部であって、アメリカでは法人を Corporation (=Corp.) または Incorpora ted (=Inc.) というのです。Corp.とかInc.とかの区分とか定義とかそこら辺はち ょっとぐぐってもわからないと思うので次のURLをどうぞ。 http://www.studio-cube.com/info/company.html  よって、Yahoo! Inc.のシステムに準じているとは、アメリカYahoo!のシステム (アルゴリズム)を指していると解釈できます。Yahoo!公式ヘルプにある通り、 アメリカYahoo!のアルゴリズムをYahoo!ジャパンは流用しているということです ね。なので、アメリカYahoo!のアルゴリズムをハックしていけばよいわけです。  それで、アメリカYahoo!のアルゴリズム分析に用いるサイトはhttp://www.yse archblog.com/です。ここはYahoo!公式ブログでもあります。ここでは天気予報と 題していくつかのエントリがポストされていて、これらはYahoo!のインデックス に変更を加えたよ。とかのアナウンスをしてくれる、非常に有益なサイトでもあ ります。  ちなみにURIを削るとディレクトリが丸見えになっちゃう所がナウいですよね (笑)。  そして、このサイトのソースを見れば誰でも気づく通り、「styles-site.css」 というスタイルシートが使用されていて、これはどうみてもMovableTypeで構築し ているブログですよね。Yahoo!も使うMovableType。みなさんもぜひ使ってくださ い。SEOに凄く強い理由が自然と分かってくるハズです。インストール方法とかは 次のURLを参照してください。 http://blog.ps4.jp/archives/post1.html  それでは、Yahoo!のSEO対策を考えてみましょう。実際にSEOを試せばわかりま すが、Yahoo!はリンク数に依存します。ただし、これだとGoogleも似たような物 なので、その辺は具体的な説明が必要です。具体的には、Yahoo!はインデックス してもらいにくい仕様なので目的ページへリンクするページ自体にもSEOが必要で す。ここがGoogleと決定的に違います。  対策の前提として、上位表示を狙うサイトとリンクを渡すサイトの2つがインデ ックスされて初めて上位表示が可能になっています。なので、自作自演でオーソ リティサイトとハブサイトを構築する際には、ぜひリンク数に注意してSEOを行い ましょう。  こんな簡単なアルゴリズムなんです。Yahoo!は。ただ、「簡単じゃねーよ」と 感じる人達にはこれを知らないだけなんですよね。実は。インデックスされにく い仕様であるがゆえに、SEOを行ってもあまり効果がでない・・・と。ハブサイトの 数は? ハブサイトはインデックスされてる? キッチリ確認しようね。  上級者になると、このインデックスしてもらいにくい仕様の具体的な指針を把 握すれば、あっさり上位表示できるじゃんって事実に気づきます。ハブサイトを インデックスしまくって、かつSEO対策をするということです。  みなさん、色々頑張りましょう。 ■0x06.) 特講2:MSNのアルゴリズム対策  日本のMSN公式ヘルプにはこうあります。  http://search.msn.co.jp/docs/siteowner.aspx?t=SEARCH_WEBMASTER_CONC_AboutSiteRanking.htm  ですが、実は特講1と多分同じことがMSNにもいえます。  http://research.microsoft.com/research/pubs/view.aspx?tr_id=690を読むと、 どうもMSNはVIPSアルゴリズム(a Vision-based Page Segmentation Algorithm) を採用しているようです。このアルゴリズムは簡単にいうと、人間の視覚を再現 して必要なリンクとそうでないリンクを選別するというものです。ページ最下部 に「お問い合わせ・ヘルプ・サイトマップ・資料請求」などが並列しているリン クよりも、本文中に使用されるリンク(例えば「ハッキングの語源は、こちらの Hack the Hack を参照」という文面のリンク)の方がはるかに有用であろう、と いうことです。  アメリカMSNは2005年2月1日にhttp://search.msn.com/(MSNサーチ)を正式リ リースして、この検索アルゴリズムにVIPSアルゴリズムを組み込んだことは有名 ですよね^^  一応、次のURLは基本事項ですので何度も読み込んで損は絶対にありません。 ・http://search.msn.co.jp/  Yahoo!のようなポータルサイトトップとは違い、グーグルライクな作りになっ ている。 ・http://sandbox.msn.com/  Google Betaと似たようなコンテンツ。今後のMSNの姿勢が伺える。特にこれは お勧め。最新のリリースが閲覧できる。 ・http://blogs.msdn.com/msnsearch  geekにはもはや常識といっても差し支えないであろう情報の質。これはぜひブ ックマークして欲しい。  それでは、MSNのSEO対策を考えてみましょう。  MSNはこのVIPSアルゴリズムの他にもRankNetアルゴリズムが使用されていて、 解析は結構複雑です。アルゴリズムの詳細を説明するのも面倒なぐらい複雑です。 ただ、W3Cに準拠したHTML文書でたくさんのサイトを作り、かつVIPSアルゴリズム にマッチしたSEO対策を心がけていれば、上位表示は可能です。では、VIPSアルゴ リズムにマッチしたSEO対策とは何でしょうか?ヒントは「見出しタグにアンカー を付ける」この一言です。  これが2005年7月26日時点での究極奥義です。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第3章: 実践 サリンの作り方 --- 著者:marodc x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  サリンの威力に関しては、もう某宗教団体がさんざん暴れ回ってくれましたの でみなさんご存じだと思いますが、実際化学兵器というものは核兵器に比べじつ に作りやすく、また危険度(製作中自分が巻き添えになる確率)も低く、材料も 大変入手しやすいものでできています。そういったサリンの製造方法を知ること によりみなさんの知的好奇心を少しでも満たすことができましたら幸いです。な お、以下の文章におきましては一応机上で裏付けをしておりますが、実際に製作 した場合計算違いが起こる可能性が十二分ありますのでこのとおり実行しないよ うくれぐれもお願いいたします。また、合成の内容についてはインターネット上 で調べられる範疇でしたので、いくつかバイブルとしてのアドバイスを加えてこ の文章「実践」サリンのつくりかた、とさせていただきました。 ■0x02.) 準備物  まず準備物として、原料を入手します。 ・メチルホスホン酸ジメチルまたはメチルホスホン酸ジクロリド(ジクロライド ともいう) ・五塩化リン  メチルホスホン酸ジクロリドが入手できた場合は必要ない。 ・フッ化ナトリウム ・イソプロピルアルコール ・水酸化ナトリウム  また、次のものを必ず用意すること。 ・防毒ガスマスク  事前に護身用催涙スプレーなどでテストしておくこと。 ・ドラフトチャンバー  有害ガスが発生しまくるので必要。 ・PAM  使用法についてはこのあと詳説。 ・硫酸アトロピン  同上。 ・化学実験用に作られたプラント  キッチンでは駄目。できれば人家が半径数km以内にないような場所に特注で建 設する。 ・手袋  くわえて汚染除去剤(サリン無毒化剤)として次のものを用意する。 ・漂白粉(苛性ソーダ)1に水4を混合したもの  もしあなたがテロを起こそうとして以上の原料を手に入れようとするなら、五 塩化リンやメチルホスホン酸ジメチルの入手に十分気を遣うべきです。劇薬指定 の五塩化リン・メチルホスホン酸ジメチルは警察にはサリンの原料としてマーク されていますから、簡単には手に入れることができないでしょうし、手に入れた ときにそこから足がつく可能性が一番高いように思われます。したがって、メチ ルホスホン酸ジメチルを合成できれよ良いのですが少々手間がかかります。参考 程度にメチルホスホン酸ジメチルの合成方法を以下に示しておきます。  準備物は次の通りです。 ・三塩化リン(原料として) ・メタノール(原料として) ・n-ヘキサン(溶媒として) ・N,Nジエチルアニリン(反応促進剤として)  以上の原料により、亜リン酸トリメチルが発生する。発生した亜リン酸トリメ チルに触媒、ヨウ素を加えてメチルホスホン酸ジメチルが発生。  いずれにせよ、三塩化リンや五塩化リンは簡単に入手できるものではないです から(とはいえ核兵器の原料である濃縮ウランなどよりは2の64乗倍ぐらい簡単で す)、入手の際はくれぐれもアシのつかないように(オウム真理教の逮捕の手は ずがとんとん拍子に進んだのは、原料の入手からアシがついたためという一面も あります。したがって以上の原料を手に入れただけで任意の事情聴取を受ける可 能性もあります(笑)。 ■0x03.) 工程  さて、実際の工程に入る前の下準備ですが、まず手袋(防腐性のあるもの)は かならず着用します。また、腕に飛び散らないように細心の注意を払う…という か、腕も何らかの形でカバーしてください。全身防護服があればそれを使います。  工程としては幾種類もの方法があるのですが、その中でも「成功例」であるオ ウム真理教・早川のメモを参考にして以下のように反応を進めます。 メチルホスホン酸ジメチル ↓ メチルホスホン酸ジクロリド ↓ メチルホスホン酸ジフロライド ↓ サリン  まずメチルホスホン酸ジメチルを五塩化リンに滴下します。オキシ塩化リンが 副生成物としてできるので、分留しなければなりません(オキシ塩化リンの沸点 は105.8℃。メチルホスホン酸ジクロリドは常温で固体)。オキシ塩化リンは水と 激しく反応し大変危険なので取り扱いには十分注意すること。この反応によりメ チルホスホン酸ジクロリドが生成できます。  次にフッ化ナトリウムをメチルホスホン酸ジクロリドに反応させ、メチルホス ホン酸ジフロライドを生成します。副生成物は塩化ナトリウム、蒸留によってメ チルホスホン酸ジフロライドを精製します。このとき、少しメチルホスホン酸ジ クロリドを残しておくこと。この反応が一番危険です。というか、フッ化ナトリ ウムがそもそも危険といえます。  メチルホスホン酸ジフロライドおよびメチルホスホン酸ジクロリドを混合、イ ソプロピルアルコールを流し込みサリンが完成します。このときイソプロピルア ルコールを流しすぎると、メチルホスホン酸ジイソプロピルが発生しすぎてしま うので注意します。多ければ多いほどサリンとの特定がしやすくなるはずです。 塩化水素が副生成物として発生するので、水酸化ナトリウムと反応させ除去しま す。  以上の工程がサリン生成の概要です。この生成方法は主に松本サリン事件にお いて作られたサリンの生成方法を真似ており、実戦でも使用できる相当の純度を 持ったサリンが生成できると期待できるでしょう。 ■0x04.) 事故処理  ガスマスクは軍用のものを使いません。素人が使うのですから、素人用のもの が販売されているのでそれを使います。一般人が軍用の物を使って窒息事故を起 こした例は湾岸戦争時のイスラエルが経験済みです。  サリン生成の工程中、鼻水が出たり目の前が暗く感じたら先ず間違いなくサリ ンに冒されていますので、PAMを2バイアル(1.0g)生理食塩水(100ml)に溶かし 徐々に静注します。また硫酸アトロピンがあれば、4アンプルから8アンプル静注 します。以後30分ごとに硫酸アトロピン4アンプルを静注し続けます。また目に関 しても、硫酸アトロピンの点眼薬を用います。  また、生成したサリンが流出した場合は、速やかに汚染除去剤でサリンを無毒 化します。またこだわらずにすぐにプラントを放棄し、逃げること。  筋力低下が出始めたら、PAMを投与するのもよいですが、すべてを悟って死ぬか 救急車を呼ぶかどちらかにしましょう。そのときは、「サリンを作っていました」 ということを忘れずに(笑)。  サリン製造プラントが警察に摘発されそうになったときは、汚染除去剤を徹底 的にばらまき洗浄し、次に何か適当な酸を撒いて苛性ソーダを中和しておきます。 ■0x05.) 実戦使用  実戦での使用において肝要なのはサリンの特性を十二分に生かしてやることで す。サリンの特性として、水溶性であること、揮発性が極めて高いこと、また毒 性が非常に強く短時間のうちに作用することがあげられますが、この特性は特定 個人の暗殺ではなく無差別の大量殺人に適しています。従って、空気の循環の悪 い地下などでできるだけ拡散するよう(できればエアロゾルなどで噴霧したい) に気を遣ってやると多数の死傷者が出るはずです。  地上で犯行を行う場合は、気象条件に気を遣わねばなりません。風の強い日は 実行してはならないし、あまり寒すぎる日も駄目。気温は比較的高い方が、湿度 は低い方がよい。犯行の2,3時間後には雨が降るような状況であった方がなおよい でしょう。  さらに、オウム真理教の松本の事件では、最後の工程であるイソプロピルアル コールの混合は噴霧直前となって行われた可能性があります(これをバイナリー 方式という)。サリンはふれただけで効果があり、揮発性も高くあまり持ち運び に適していないことから、移動できるプラント(改造車)があればぜひ用意した いものです。 ■0x06.) おわりに  以上、簡単ですがきわめて実践的なサリンのマニュアルを作成してみました。  さて、以上の内容については化学のド素人が作ったものなので、ド素人マニュ アルでサリン生成、死亡!ってなもんで週刊誌の笑いものにならないよう、それ でおれが取り調べ受けたりしないように(笑)、くれぐれもお願いいたします。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第4章: Fast User Switching --- 著者:Will x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) Fast User Switchingとは  Fast User Switchingとは複数のユーザーが1台のコンピュータを共有できるよ うにする機能で、Windows XPから導入されました。和名でいうユーザーの簡易切 り替えの事です。意外と役に立ったり立たなかったりしますw  知り合いの手伝いをしていてFast User Switchingに対応したアプリケーション を作成するはめになりました。色々と検索してみたのですが、やはり日本の情報 は少ない。そういうわけで私が得た情報を公開しようと思いました。 ■0x02.) Fast User Switchingに対応する意味  まぁ色々と対応する意味があります。例えば切り替えした後のデッドロック回 避やキーロガーで…ゴホゴホ。そういうわけで覚えておいて損はないと思います。 ■0x03.) Fast User Switchingに対応したアプリケーションを作成 ソースコード MFC: http://will.wbjapan.com/archive/Fast%20User%20Switching.zip C# : http://will.wbjapan.com/archive/Fast%20User%20Switching%20CSharp.zip ●Fast User Switchingに対応する MFCの場合 1:セッションの変更通知の定義をする。 ----- #define WM_WTSSESSION_CHANGE 0x2b1 #define WTS_CONSOLE_CONNECT 0x1 #define WTS_CONSOLE_DISCONNECT 0x2 #define WTS_REMOTE_CONNECT 0x3 #define WTS_REMOTE_DISCONNECT 0x4 #define WTS_SESSION_LOGON 0x5 #define WTS_SESSION_LOGOFF 0x6 #define WTS_SESSION_LOCK 0x7 #define WTS_SESSION_UNLOCK 0x8 #define WTS_SESSION_REMOTE_CONTROL 0x9 -----  stdafx.hの_WIN32_WINNTを0x0501に変更する方が早いのですが、MFCではエラーが出るため自分で定義した方が無難です。 2:wtsapi32.hをインクルードする。 3:メッセージ割り当て関数に以下のコードを追加する。 -----  afx_msg LRESULT OnWTSSESSION_CHANGE(WPARAM wParam, LPARAM lParam); ----- 4:メッセージマップに以下のコードを追加する。 -----  ON_MESSAGE(WM_WTSSESSION_CHANGE, OnWTSSESSION_CHANGE) ----- 5:OnInitDialogで通知ウィンドウを登録するために以下のコードを追加する。 -----  WTSRegisterSessionNotification(this->m_hWnd, NOTIFY_FOR_THIS_SESSION) ----- 6:セッションの変更が通知されたときに実行する関数を作成する。 -----  LRESULT CFastUserSwitchingDlg::OnWTSSESSION_CHANGE(WPARAM wParam, LPARAM lParam) -----  ちなみにlParamを引数にしてWTSQuerySessionInformationをコールすれば  ユーザ名を取得することも可能です 7:OnDestroyに以下の登録を解除するコードを追加する。 -----  WTSUnRegisterSessionNotification(this->m_hWnd); PostQuitMessage(0); ----- ●Fast User Switchingに対応する C#の場合 1:MFC同様にセッションの変更通知の定義。C#はさらにWin32APIの定義。  SessionClass.csを参照。 2:OnHandleCreatedとOnHandleDestroyedをオーバーライドして通知ウィンドウを 登録&解除のコードを追加する。 3:さらにWndProcもオーバーライドしてセッションの変更が通知時の処理を追加。  基本的にC#の方が簡単です。詳細はソースコードを参照してください。 ■0x04.) 終わりに  結構適当に作ったので適宜修正してください。ソースコードが汚いとかいう文 句はなしの方向でお願いしますw 一応ちゃんと動いてるのでよしとしましょう。  なおVB.NETの情報は以下のURLを参照。 http://support.microsoft.com/?kbid=841291 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第5章: ハニーポットを作ろう 〜 第4回 〜 --- 著者:Narusase x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  前回はiptablesとsambaの設定を行いました。今回からは予告通り、ハニーポッ トの本体であるhoneydのインストールと設定を行っていきたいと思います。その ために、まずhoneydについて簡単に説明し、honeydが利用するソフトのインスト ールを行い、その後honeydのインストールを行います。また、arpdというhoneyd をサポートするソフトウェアのインストールも同時に行います。 ■0x02.) honeydとは  honeydとはNiels Provos氏の作成した低インタラクション型のハニーポットで す。特徴としては、複数の仮想的なネットワークセグメントおよび、複数の仮想 的なハニーポット端末のエミュレーションを行えるという点があげられます。  したがって、通信を誘導することが可能ならいくつものIPアドレスに対するア クセスを監視することができます。  また、独自のプロトコルスタックを所持しているため、nmapやxprobeなどの通信に対する反応によってOSなどを判断するフィンガープリンティングによって、ハニーポットであるかどうかの判断が難しいという点も大きな特徴です。  なお、公式な配布元はhttp://www.honeyd.org/になります。 ■0x03.) arpdとは  arpdとはARPを用いて未使用のIPアドレスに対してスプーフィングを行い実在し ないホストが実在しているかのように見せかけるソフトウェアです。honeydはAR Pリクエストを受信した際に自身が監視するIPアドレスであってもARPレスポンス を返すことを行えません。そのため、arpdを用いてARPに対する返答を行わせるこ とでローカルネットワークから見た場合も監視対象のホストが存在しているよう に見せかけます。 ■0x04.) honeydのための下準備  ハニーポットの本体であるhoneydのインストールを行うに当たって、様々なソ フトウェアやライブラリが必要となります。まずは、これらのソフトのインスト ールから行います。ここでは、基本的にはapt-getでインストールできないものは tarからmakeする形でインストールを行います。tarからのインストールはソフト のアンインストールが難しく、面倒な上、パッケージの管理がしにくいという問 題があり個人的には使用したくないのですが、今回はrpmのパッケージも探すこと ができなかったためtarからのインストールを行います。したがって、rpmパッケ ージのある場合はそちらを使用することを推奨します。また、rpmのパッケージを 作成するというのも一つの手です。しかし、rpmパッケージの作成を試みたのです が、筆者の知識不足のためかうまく行きませんでした。どなたか、詳しい方がい らっしゃったら挑戦してみてください。  今回使用するパッケージでダウンロードしてくる必要のある物は現在(2005年 6月22日)の所、下記URLにありますのでダウンロードしてきてください。 http://ufpr.dl.sourceforge.net/sourceforge/libdnet/libdnet-1.10.tar.gz http://www.monkey.org/~provos/libevent-1.1a.tar.gz http://www.citi.umich.edu/u/provos/honeyd/honeyd-1.0.tar.gz http://ftp5.ru.freebsd.org/pub/FreeBSD/distfiles/libedit-2.6.7.tar.gz http://www.citi.umich.edu/u/provos/honeyd/arpd-0.2.tar.gz  今回使用したtarの公式配布元は以下の通りです。 http://www.monkey.org/~provos/libevent/ http://libdnet.sourceforge.net/ http://www.honeyd.org/ ■0x05.) honeydのインストール  さて、必要なパッケージがダウンロードできたら早速インストールを開始しま しょう。ここでは、まずapt-getを利用して必要なソフトのインストールを行いま す。  まずは、下記のコマンドを実行し細々とした必要なソフトをインストールして ください。 ---- apt-get install libpcap flex bison zlib zlib-devel apy-get install python pythonlib python-devel python-tools ----  特に問題もなく終了するはずです。  次に、tarからのインストールを行います。なお、suでrootになって作業をする 必要がありますので忘れないでください。  コマンドは下記の通りです。いっぱいありますが、頑張ってください。 ---- libdnet tar -zxvf libdnet-1.10.tar.gz cd libdnet-1.10 ./configure make make install tar -zxvf libevent-1.1a.tar.gz cd libevent-1.1a ./configure make make install tar -zxvf libedit-2.6.7.tar.gz cd libedit-2.6.7 ./configure make make install tar -zxvf arpd-0.2.tar.gz cd arpd ./configure make make install ----  特にエラーなども出ずにコンパイル&インストールができるはずです。  さて、ここでやっかいなのが環境変数の問題です。下記の環境変数の設定を行 わないと次のhoneydのconfigureで問題が発生し立ち往生してしまいます。実は、 筆者もここで数時間詰まってしまいました。というわけで、環境変数を設定しho neyd本体のインストールを行います。 ---- export LD_LIBRARY_PATH=/usr/local/lib/ tar -zxvf honeyd-1.0.tar.gz cd honeyd-1.0 ./configure make ----  以上で、インストールは終了です。 ■0x06.) おわりに  今回は、honeydとarpdのインストール作業を行いました。  次回からは、honeydとarpdの機能に関する説明や設定に関する説明を薦めてい きたいと思います。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第6章:Micro$oft Watch vol.1 --- 著者:Taka John Brunkhorst x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) 免責  Micro$oft Watchは最近のMicro$oftの馬鹿らしい出来事をAnti-Micro$oft側か ら見て反論するドキュメントです。このドキュメントは著作権フリーです。自由 にコピー、編集してください。暇でしたらもっと良いドキュメントにして再配布 でもしてください。その際貴方の名前で再配布してください。 ■0x02.) Vol.1  今回はMicro$oftのMartin Taylorさんの”いつもの”OSS(OpenSource Softwa re)批判について反論していきます。すべてを日本語化して解説していくわけに はいかないので部分部分を引き抜いて反論していきます。すべてを読みたい方は 次のURLを参考にしてください。 http://news.com.com/Microsofts+eye+on+open+source/2008-1082_3-5796496.html?tag=nl ●ライセンスについて ○Cnet:  なんでLinuxとかオープンソースはあんたらに向いてないの? ○Taylor:  自分でビルドして、自分でデザインできて、きちんと動く。問題が発生してく んのは何か追加したいときやで。なんかちょっとサービス追加したら何か違うも のが壊れる。そういうのをいーっつも見ている。俺等のお客さんも見てる。だか ら全体のコストがあがるねん。 ○コメント:  コスト? ん? 業務用に使うしか思いつかないのですか? ホームユーザー はほったらかしですか。何かインストールしたら他のが壊れるっていうのを防止 したりするためにパッケージマネージャーがあるのです。それに何か壊れるって いうのは理由があります。元々はマルチプラットフォーム用ですからシステムが 違うのですから。  何もしなくても壊れる貴方の製品はどう説明します?  しょっちゅう再インストールしなければいけないのはどう説明します?  ちょっとしたら再起動ばっかりしないことについてどう説明します? ○Cnet:  なんでオープンソースが沢山の人たちに好まれてんの? ○Taylor:  うーん、まず最初に”人たち”が誰か説明せーや。多くのITプロフェッショナ ルはシステム関係のソフトウェアに関係したくないはずやから。てかオープンソ ースって何?もっとはっきりいえよ。ソースコードが見えるか見えないか?  M$はね、ソースコード共有プログラムっていうのをやっててみんな最大65パー セントまで俺らの主要のソフトのソースコードを見れるんや。後ね、政府は俺等 のソフトのソースコードをもっとみたければ見ることができる。だから、俺等は オープンソース会社じゃないけどある意味オープンソースということもできる。 オープンソースっていうにはGPLやないとあかんのか。そうか。俺はいろいろな会 社のソフトウェアがGPLじゃないからオープンソースって言わないところを見てき た。 ○コメント:  人たち=全ての人類、オープンソースは誰でも無制限にソースコードにアクセ スできることです。それにGPLはオープンソースライセンスのひとつであってBSD やらなんぼでもあります。”誰でも”自由にソフトウェアのソースコードに、” すべて”アクセスできるのがオープンソースの基本です。つまり、M$はオープン ソースをまともに知らないのに敵に回して潰そう潰そうとしているのですね。 ○Cnet:  GPLはオープンソース代表のライセンスですが、GPLのライセンス内容が変われ ばオープンソースコミュニティが変わる? ○Taylor:  GPLはね、めちゃくちゃ複雑なライセンスや。ソフトウェア開発者にとってすべ て特許とかで制限されてないと安心せんやろ。 ○コメント:  GPLのどこが複雑なのですか。Micro$hit EULAのほうが大変複雑でわかりづらい ですよ。ソフトウェア特許とかはソフトウェア開発者を制限するだけです。 ●セキュリティについて ○Cnet:  あんまりいいたくないけどLinuxはあんたらの製品よりセキュアといわれていた。 Micro$oftは昔セキュリティに関して甘かったけど、それはソフトウェア業界のフ ァンダメンタルズが悪かったから? ○Taylor:  あんたらはなんでM$がセキュリティ問題を抱えてるかわからんとあかん。今は 昔俺等がWindowsにいろいろな機能入れてたとき以上に、いっぱい関係してくるこ とがあるんや。だから俺はLinuxがもっと安全やっていわれたとき笑いかけたやん やで。いっとくけどな、10年前はバッファーオーバーランやらポート80やらI/O問 題とかは誰もまともに知らんかったやろ!バッファーオーバーランについて詳し くいうとな、8年から10年前のソフトウェア開発はどこにどんだけバッファーゾー ン作ったらいいかわからんかったからな。ただでっかいバッファーゾーン作って 動かしてた時代や。誰がそんときそのバッファーゾーンを悪用して違うことやる なんて思った? ○コメント:  バッファーオーバーランなどは17年前以上からあります。知らんかったのはあ んたらだけです。10年前、つまり1995年はセキュリティなどは知らんかったとい ってるのです。Micro$oftは自分らで好きなことばっかりやってセキュリティは ほったらかし。ということですね。 ■0x03.) 余談  Micro$oftはウェブコーダーに対してIE7用に自分らのページをコードし直すよ うにと呼びかけています。標準CSSにも対応しないみたいです。ブラウザに合わせ てウェブ開発するというのは なんと素晴らしい考え方でしょう。もしうまく表 示できないものがあればすべてウェブ開発者の責任にできますね。  彼らがいまごろipv6や64bitに対応してきました。そんなもの10年前からあった のにもかかわらず。周りが注目してきたから、いつものように自らipv6や64bitを 作ったようにいい触らし、中身はほとんど32bitなのに64bitという名前だけをつけ て発表しましたね。  Micro$oftはどうしてもIntelが必要みたいですね。パフォーマンスは上げれな いけれどクロック数だけなら高い値段であげてやるさ。というCPU会社との契約ま だ続いているみたいですね。 ■0x03.) Thanks to ・だいはど ・Slashdot ・cnet ・cnet,slashdotのコメンターさんすべて。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第7章: 黒色火薬の作り方 --- 著者:Defolos x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x 【編注】神奈川県警察本部によって公序良俗に反する情報として認定され、削除 要請が来ましたので、現在この記事は公開しておりません。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第8章: 簡単!偽造指でスライド式指紋認証を突破する --- 著者:くろいみやたん x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  これは某そばをよく食べるOFF会で発案された「ゼラチンで指紋認証を突破する」 というものを基にして独自に身近な素材を調査し、今回なんとか発表できるとこ ろまでいきました。今回は指紋認証の脆さを実感していただくために自分の指を コピーして認証を通すまでの作業を記述します。さらに、今までゼラチンでは不 可能であったスライド式指紋認証装置の認証を突破することができます。  相手の指紋を抽出してプリンタで出力&エッチングなんてことは自己責任でお 願いします。  あくまで悪用はしないようにお願いします。 ■0x02.) 用意するもの ・自由変形プラスチック  YAHOOでも売っています。 http://store.yahoo.co.jp/kira-club/bcabcdb3bc-3.html ・お湯  できれば80℃くらいあればスムーズです。 ・割り箸  かき混ぜられれば代用は何でも可です。 ・容器  お湯が入れば何でもよいです。 ・木工用ボンド  100円ショップのやつでも十分です。 ・指  自分の指ならOK。 ■0x03.) 指を作る 1:手を洗います。偽造したい指にゴミなどが付着しないようにしてください。 2:お湯を容器に注ぎプラスチックを適量注いでかき混ぜます。指が形取られる位 の量でOKです。 3:プラスチックがくにゃくにゃしてきたら手にとってしわが出来ないようにこね ます。熱いので最初は注意してください。 4:指を型取りします。指紋がはっきりわかるくらいの強さです。 5:固めます。プラスチックの場合季節にもよりますが30〜40分もかからずに固ま ります。 6:ボンドを流し込みます。これは付けた指紋を全て覆うくらいの量です。 7:ボンドを乾かします。これは量によりますが適量であれば1日でべらべらにな って乾きます。 8:完成です! ■0x04.) 実践  では早速試してみましょう。  今回自分が試したのは指紋認証付きThinkPad T42 KQJ です。この指紋認証装置 はスライド式のラインセンサです。  指にかぶせてスライドしてみます。認証できました!たっとこれだけのことで 簡単に不正認証が難しいと一般的に思われているバイオメトリクス認証を突破で きたのです。映画の世界ではよく見かけますが、身近なもの、なおかつ安価で突 破できるとは驚きです。  認証突破の際には、結構何度も失敗することがあるので根気よくスライドして ください。コツとしては、指と同じような質感を持たせるため偽造指に息を吹き かけて質感を出すことが一番です。 ■0x05.) おわりに  指紋認証というものは成熟した技術でありながらかなり脆弱性も存在します。 ノートパソコンの認証もたいした意味はないということがお分かりいただけたで しょうか?  今回作ったボンド指は既に知られているゼラチン指より身近な素材を用いなが ら、数百という摩擦に耐えるくらいの耐久性を持ち合わせます。欠点としたらゼ ラチンにくらべ乾燥時間が長いということです。しかしこの欠点が見えないくら いボンドで作った指はメリットが多いです。  ご意見、ご感想などがありましたらプロフィールにあるアドレスにメールくだ さい。  最後になりましたが、ここまで読んでくださった皆様、どうもありがとうござ いました。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第9章: 実践から学ぶ初めての解析 第1回 --- 著者:右サイド x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) 準備 ●ターゲット ソフト名:焼き職人Ver1.01 分類:フリーソフト?? URL:http://www.vector.co.jp/soft/dl/win95/util/se337109.html 特徴:7日を過ぎが過ぎると「@付箋紙」をインストールしろとのダイアログボッ クスがでる。 ●ソフトの用途  DVDやCDにデータを詰めるときの最適な組み合わせを算出してくれる何とも便利 なソフトファイル数が多くなればなるほどこのソフトが効果を発揮!! ●使用ソフト: ・Ollydbg ・俺Regedit改(Windows付属のレジストリエディタでもOK) ●環境 OS:Windows XP Home Edition CPU:Celeron 2.6Ghz メモリ:256M ●対象者 ・解析の初歩の「か」の字にふれてみたい人。 ●非対象者: ・「解析の何たるか」を知っている人 ・Sharewareを日々解析している人 ・スーパーハカー ■0x01.) 当たりをつける 1:まず、焼き職人を起動させてみましょう。そうすると、適当に立ち上がります。 確認したら閉じてください。 2:そうしたら、ディレクトリの構成を見ましょうか。 ===============ディレクトリ内部================== ○yakishokuのディレクトリ: ・yakishoku.exe ・medias.ini ・manual ○manualのディレクトリ ・いろいろ............ ================================================ 3:ここでまずはじめに、medias.iniを疑いましょう。設定情報はiniファイルに 保存されているのでここを怪しみましょう。 ==================medias.iniファイル情報================= 30 MaxLoop Limit 650,000,000 650MBCD-ROM 700,000,000 700MBCD-ROM 4,700,000,000 DVD 4,700,000,000 前回入力値 ===============================================  怪しそうな数値はありませんでした。 4:それなら、次にレジストリを疑いましょう。レジストリを弄ったことがある人 は、だいたいどこだかわかるでしょう。 位置:HKEY_LOCAL_MACHINE\SOFTWARE\SPOONsoftware\Yakishoku  そこに「Install Time」と書いてある怪しいレジストリ値があります。 5:では、ここからこの値を書いている関数(ルーチン)を探すためにOllyDbgを 使いましょう。OllyDbgの使い方はある程度わかっているものとします。 ■0x03.) OllyDbgで解析 1:まず、OllyDbgでyakishoku.exeを開いてください。  ここで今回重要なAPIを紹介します。「RegCreateKeyExA」です。このAPIは「レ ジストリのキーを作成する」ために使うものです。 2:では、右クリックして「検索」→「すべての外部関数呼び出し」を選択してく ださい。  すると、いろいろな関数があるので「RegCreateKeyExA」を見つけダブルクリッ クをしてください。  ちなみに、「RegCreateKeyExA」が4つほどあるのですが、アドレスが「004041 D9」のものを選んでください。 3:すると、次のような場所に出ます。 ----- 004041B4 . 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX 004041B8 . 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10] 004041BC . 50 PUSH EAX ; /pDisposition 004041BD . 8D4C24 18 LEA ECX,DWORD PTR SS:[ESP+18] ; | 004041C1 . 51 PUSH ECX ; |pHandle 004041C2 . 6A 00 PUSH 0 ; |pSecurity = NULL 004041C4 . 68 3F000F00 PUSH 0F003F ; |Access = KEY_ALL_ACCESS 004041C9 . 6A 00 PUSH 0 ; |Options = REG_OPTION_NON_VOLATILE 004041CB . 6A 00 PUSH 0 ; |Class = NULL 004041CD . 6A 00 PUSH 0 ; |Reserved = 0 004041CF . 68 30D14200 PUSH yakishok.0042D130 ; |Subkey = "SOFTWARE\SPOONsoftware\Yakishoku" 004041D4 . 68 02000080 PUSH 80000002 ; |hKey = HKEY_LOCAL_MACHINE 004041D9 . FF15 04C04200 CALL DWORD PTR DS:[<&ADVAPI32.RegCreateK>; \RegCreateKeyExA 004041DF . 85C0 TEST EAX,EAX 004041E1 . 0F85 23010000 JNZ yakishok.0040430A 004041E7 . 8B2D 00C04200 MOV EBP,DWORD PTR DS:[<&ADVAPI32.RegEnum>; ADVAPI32.RegEnumValueA 004041ED . 33DB XOR EBX,EBX -----  そうしたら、004041D9を選択してF2を押して、ブレークポイントを仕掛けてく ださい。そしたらF9を押して見ましょう。004041D9で止まるはずです。  ちなみに、ブレークポイントとは、プログラムの開発時にプログラムの動作状 態を確認するために、プログラムコード中に挿入される強制実行停止コードのこ とです。ブレークポイントではデバッガが処理を中止し、プログラマは停止直前 の変数やレジスタの値を確認することができます(「IT用語辞典 e-Words」参考)。  要するに、プログラムを任意の場所で止めることができる場所みたいな感じで すかね?  ここで重要な命令が出てきます。「TEST EAX,EAX」と「JNZ 」です。  TESTは論理演算で計算はするが、値は変化しない命令です。要するに仮想演算 みたいな感じですか? ○EAXの値によってのフラグの変化 ------------------ EAX | EAX | Flag ------------------ 0 | 0 | 0 1 | 0 | 0 0 | 1 | 0 1 | 1 | 1 ------------------  JNZはEAX・フラグの値によってジャンプするorしない命令で、EAXの値が1もし くはZ Flagの値が0の時にジャンプします。  今回は、何をしても004041E1のフラグが立ちません(私がいろいろ試してみた 限り・・・)。  それでは、F8を押して00404212まで来てください。 ----- 00404212周辺 00404208 . 53 PUSH EBX ; |Index => 0 00404209 . 52 PUSH EDX ; |hKey 0040420A . C74424 30 00010000 MOV DWORD PTR SS:[ESP+30],100 ; | 00404212 . FFD5 CALL EBP ; \RegEnumValueA -----  「RegEnumValueA」はレジストリのキーを列挙するAPIです。重要かどうかは知 りません・・・。  この下が重要です。今回はこのあたりをを書き換えてみたいと思います。  ここでまた重要な命令が現れます。「JMP」です。これは強制的にJMPの後ろに書 いてある場所へ移動する命令です。  00404212の下は次のようになっています。 ----- 00404214 . 85C0 TEST EAX,EAX 00404216 . 75 53 JNZ SHORT yakishok.0040426B 00404218 . EB 06 JMP SHORT yakishok.00404220 0040421A 8D9B 00000000 LEA EBX,DWORD PTR DS:[EBX] 00404220 > BF 20D14200 MOV EDI,yakishok.0042D120 ; ASCII "Install time" 00404225 . 8DB424 C4000000 LEA ESI,DWORD PTR SS:[ESP+C4] 0040422C . B9 0D000000 MOV ECX,0D 00404231 . 33C0 XOR EAX,EAX 00404233 . F3:A6 REPE CMPS BYTE PTR ES:[EDI],BYTE PTR DS:> 00404235 . 74 2C JE SHORT yakishok.00404263 00404237 . 50 PUSH EAX 00404238 . 50 PUSH EAX 00404239 . 8D4C24 20 LEA ECX,DWORD PTR SS:[ESP+20] 0040423D . 51 PUSH ECX -----  TESTで比較してEAXが1(Z Flag 0)なら0040426Bに飛びそれ以外は00404220に 飛ぶようになっています。 ====================簡易図====================== TESTで比較 |   | | EAXの値が1------------------------------------EAXの値が0 | | | | | | レジストリに新規値を書き込み レジストリの値をチェック =================================================  0040426B周辺を見てみると、「RegSetValueExA」があります。レジストリキー の下に指定された値のデータと型をこれは設定するAPIです。初回にレジストリ値 がないと飛ばされるようです。 ----- 0040426B > 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14] 0040426F . 6A 04 PUSH 4 ; /BufSize = 4 00404271 . 8D5424 20 LEA EDX,DWORD PTR SS:[ESP+20] ; | 00404275 . 52 PUSH EDX ; |Buffer 00404276 . 6A 03 PUSH 3 ; |ValueType = REG_BINARY 00404278 . 6A 00 PUSH 0 ; |Reserved = 0 0040427A . 68 20D14200 PUSH yakishok.0042D120 ; |ValueName = "Install time" 0040427F . 50 PUSH EAX ; |hKey 00404280 . C74424 30 0300>MOV DWORD PTR SS:[ESP+30],3 ; | 00404288 . C74424 38 0400>MOV DWORD PTR SS:[ESP+38],4 ; | 00404290 . FF15 24C04200 CALL DWORD PTR DS:[<&ADVAPI32.RegSetValu>; \RegSetValueExA -----  00404220周辺については正直あまりわかりません。動作を見た感じレジストリ 値があった場合に元々あるレジストリ値と現在仮に作ったレジストリ値を比較す るためにジャンプするようです。 ----- 00404220 > BF 20D14200 MOV EDI,yakishok.0042D120 ; ASCII "Install time" 00404225 . 8DB424 C400000>LEA ESI,DWORD PTR SS:[ESP+C4] 0040422C . B9 0D000000 MOV ECX,0D 00404231 . 33C0 XOR EAX,EAX 00404233 . F3:A6 REPE CMPS BYTE PTR ES:[EDI],BYTE PTR DS:> 00404235 . 74 2C JE SHORT yakishok.00404263 00404237 . 50 PUSH EAX 00404238 . 50 PUSH EAX 00404239 . 8D4C24 20 LEA ECX,DWORD PTR SS:[ESP+20] 0040423D . 51 PUSH ECX 0040423E . 8B4C24 20 MOV ECX,DWORD PTR SS:[ESP+20] 00404242 . 50 PUSH EAX 00404243 . 8D5424 20 LEA EDX,DWORD PTR SS:[ESP+20] 00404247 . 52 PUSH EDX 00404248 . 8D8424 D800000>LEA EAX,DWORD PTR SS:[ESP+D8] 0040424F . 50 PUSH EAX -----  この場合、故意にEAXの値を1に書き換えてジャンプする事もできますが、ここ は発想を変えて、レジストリ値がある場合も無い場合も両方とも現在の値に書き 換えればよいわけです。 ○方法 ----- 00404216 . 75 53 JNZ SHORT yakishok.0040426B 00404218 . EB 06 JMP SHORT yakishok.00404220 ----- を次のように書き換えます。 ----- 00404216 . 75 53 JMP SHORT yakishok.0040426B 00404218 . EB 06 JMP SHORT yakishok.00404220 ----- ○別の方法  EAXの値に関係なく 0040426B に飛ぶようにすればよいです。 ----- 00404216 . 75 53 JNZ SHORT yakishok.0040426B 00404218 . EB 06 JMP SHORT yakishok.0040426B -----  以上で、解析終了です。お疲れ様でした。 ■0x04.) おわりに  偶然この文章読んでいる皆さん初めまして。今回初参加で初歩解析についてレ ポートにまとめてみました。解析をまったく知らない人にも読みやすいように考 慮したつもりですが、どうだったでしょうか?解析の"か"の字を知っているかも 怪しい私(解析歴一ヶ月未満:05/6/06現在)が書いたので、意味不明な点がある かもしれませんが、多めに見てやってくださいませ〜。  次回に書く機会があったら、「初歩解析中級版!!」みたいになりそうですorz x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第10章: アセンブラとPEフォーマットとマシン語の注入 --- 著者:Kenji Aiko x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  私は以前、任意のプログラムを他プロセスへ注入する「DLLインジェクション」 のテクニックを紹介しました。このテクニックについての詳細は「常駐プログラ ム隠蔽テクニック」を参照してください。 常駐プログラム隠蔽テクニック http://ruffnex.oc.to/kenji/text/dll_inj/  さて、この「DLLインジェクション」は、任意のプログラムを現在実行中の他プ ロセスへ注入し、他プロセスの一部としてこちら側が用意したプログラムを実行 させるテクニックでした。これはとても面白く、任意のプロセスの情報を取得す るための手法としてはSetWindowsHookExと同じくらい強力であり、かつ実行した いプロセスの隠蔽という目的においても利用できるものでした。しかし、これは あくまでも実行中のプロセスへ注入したわけであり、EXEファイル自体を書き換え たわけではありません。よって、例えばそのプロセスが何かしらの理由で強制終 了し、再度起動された場合、もう一度任意のプログラムの注入処理をほどこさな ければ、我々の望む動作は得られません。もちろん、このテクニックも利用価値 は多々ありますが、今回はこの「任意のプログラムを他のプログラムへ注入する」 という行為を、「EXEファイルの変更」という角度から見ていくことにします。  今回、私が使用する環境はWindowsXPです。なお、このテキストを読むにあたっ て、PEフォーマットとアセンブラについての知識が必須となります。 ■0x02.) PEフォーマット  PEフォーマットとは、Win32のバイナリフォーマットであり「Portable Execut able」の略です。WindowsのEXEファイルは、このファイル形式で作られています。 このファイル形式の詳細は、「マシン語大研究」のページを参考にしてください。 このテキストでは、PEフォーマットについて簡単に解説します。まずは以下のEX Eファイルmsg.exeをダウンロードしてください。 msg.exe http://ruffnex.oc.to/kenji/text/exe_inj/msg.exe マシン語大研究 http://hp.vector.co.jp/authors/VA015412/colum/pe.htm  msg.exeをバイナリエディタで開くと、以下のようになっています。私はバイナ リエディタに「Stirling」を使用しています。 Stirling http://www.vector.co.jp/soft/win95/util/se079072.html ----- msg.exe(抜粋) 00000000 4D 5A 6C 00 01 00 00 00 02 00 00 00 FF FF 00 00 MZl............. 00000010 00 00 00 00 11 00 00 00 40 00 00 00 00 00 00 00 ........@....... 00000020 57 69 6E 33 32 20 50 72 6F 67 72 61 6D 21 0D 0A Win32 Program!.. 00000030 24 B4 09 BA 00 01 CD 21 B4 4C CD 21 60 00 00 00 $............... 00000040 47 6F 4C 69 6E 6B 20 77 77 77 2E 47 6F 44 65 76 GoLink www.GoDev 00000050 54 6F 6F 6C 2E 63 6F 6D 00 00 00 00 00 00 00 00 Tool.com........ -----  アドレス「00000020」以降は「Win32 Program!\r\n$」という17バイトの文字列 があるのがわかります。そして、アドレス「00000031」以降の「B4 09 BA 00 01 CD 21 B4 4C CD 21」は16ビット環境でのマシン語となっています。このマシン 語をアセンブリ言語に変換すると次のようになります。 ----- 355C:0011 B409 MOV AH, 09 355C:0013 BA0001 MOV DX, 0100 355C:0016 CD21 INT 21 355C:0018 B44C MOV AH, 4C 355C:001A CD21 INT 21 -----  「AH = 09」は文字列出力のシステムコールです。そして、出力すべき文字列の アドレスはDXレジスタに格納するので、「355C:0100」にある文字列を出力するこ とになります。さらに「AH = 4C」はプログラム終了のシステムコールなので、こ こで16ビットプログラムは終了となります。  そして、「0000003C」から続く4バイトがPEフォーマットの先頭アドレスとなり ます。つまり、「60 00 00 00」がPEフォーマットの先頭アドレスとなります。 ----- msg.exe(抜粋) 00000060 50 45 00 00 4C 01 01 00 E9 65 E4 42 00 00 00 00 PE..L........... 00000070 00 00 00 00 E0 00 0F 01 0B 01 00 25 00 04 00 00 ...........%.... -----  ご覧の通り、アドレス「00000060」以降は「50 45」(文字列にすると「PE」) となっています。  さて、重要なのは、この「0000003C」から続く4バイトなので、例えば「00000 03C」から続く4バイトを「40 00 00 00」に変更し、PEフォーマット部分も32バイ ト(20h)ずらし「00000040」から始めれば、msg.exeの「00000040から0000005F まで」のデータは削除することが可能です。それは、この領域のデータ(文字列) をみても、リンカが意図的に付加したものだとわかります。  では、次に「00000000から0000001Fまで」のフォーマットをみていくことにし ます。 ----- msg.exe(抜粋) 00000000 4D 5A 6C 00 01 00 00 00 02 00 00 00 FF FF 00 00 MZl............. 00000010 00 00 00 00 11 00 00 00 40 00 00 00 00 00 00 00 ........@....... ----- ----- 0000h 2byte 4D 5A "MZ"(固定) 0002h 2byte 6C 00 Number of bytes in last 512-byte page of executable 0004h 2byte 01 00 Total number of 512-byte pages in executable (including the last page) 0006h 2byte 00 00 Number of relocation entries 再配置エントリ数 0008h 2byte 02 00 Header size in paragraphs ヘッダのサイズ(16バイト単位) 000Ah 2byte 00 00 Minimum paragraphs of memory allocated in addition to the code size 割り当てるメモリの最小値 000Ch 2byte FF FF Maximum number of paragraphs allocated in addition to the code size 割り当てるメモリの最大値 000Eh 2byte 00 00 Initial SS relative to start of executable スタックセグメントの初期値 0010h 2byte 00 00 Initial SP スタックポインタの初期値 0012h 2byte 00 00 Checksum (or 0) of executable チェックサム 0014h 4byte 11 00 00 00 CS:IP relative to start of executable (entry point) プログラムのエントリーポイント 0018h 2byte 40 00 Offset of relocation table; 40h for new-(NE,LE,LX,W3,PE etc.) executable プログラムの開始アドレス 001Ah 2byte 00 00 Overlay number (0h = main program) 001Ch 4byte 00 00 00 00 reserved? 多分予約語です(^^;。 -----  さて、ここまでのバイナリデータは、DOS用に用意されたプログラムです。つま りWindowsプログラムが実行できない環境でmsg.exeが実行された場合、標準出力 に「Win32 Program!」と表示して、プログラムを終了するわけです。DOS用のデー タであるため、Windows環境で実行する場合は、意味がありません。よってPEフォ ーマットの解説でも、よくこの部分の説明は省かれることが多いです。なぜなら、 この部分はPEフォーマットというよりむしろMZフォーマットなので(笑)。とい うわけで、ここからがPEフォーマットの本番ということになります。ちなみにPE 以前のデータ(00000000から0000005Fまで)をtest.comというようなCOMファイル として作成し、コマンドプロンプトに「test.com」と入力すれば、ちゃんと実行 されます。よかったら一度試してみてください。 ----- test.com 00000000 4D 5A 6C 00 01 00 00 00 02 00 00 00 FF FF 00 00 MZl............. 00000010 00 00 00 00 11 00 00 00 40 00 00 00 00 00 00 00 ........@....... 00000020 57 69 6E 33 32 20 50 72 6F 67 72 61 6D 21 0D 0A Win32 Program!.. 00000030 24 B4 09 BA 00 01 CD 21 B4 4C CD 21 60 00 00 00 $............... 00000040 47 6F 4C 69 6E 6B 20 77 77 77 2E 47 6F 44 65 76 GoLink www.GoDev 00000050 54 6F 6F 6C 2E 63 6F 6D 00 00 00 00 00 00 00 00 Tool.com........ ----- ----- コマンドプロンプト C:\nasm>test.com Win32 Program! C:\nasm> -----  では、ここから本当のPEフォーマットを見ていくことにします。 ----- msg.exe(抜粋) 00000060 50 45 00 00 4C 01 01 00 E9 65 E4 42 00 00 00 00 PE..L........... 00000070 00 00 00 00 E0 00 0F 01 ........ ----- ----- PEヘッダ 0060h 4byte 50 45 00 00 "PE\0\0"(固定) 0064h 2byte 4C 01 CPUタイプ(「4C 01」はIntel386以降) 0066h 2byte 01 00 セクション数 0068h 4byte E9 65 E4 42 タイムスタンプ 006Ch 4byte 00 00 00 00 シンボルテーブルの位置(存在しなければ0) 0070h 4byte 00 00 00 00 シンボルテーブル内のエントリ数(存在しなければ0) 0074h 2byte E0 00 オプションヘッダのサイズ 0076h 2byte 0F 01 ファイルの特性 ----- ----- msg.exe(抜粋) 00000070 0B 01 00 25 00 04 00 00 ...........%.... 00000080 00 00 00 00 00 00 00 00 00 10 00 00 00 10 00 00 ................ 00000090 00 00 00 00 .... ----- ----- オプションヘッダ(標準フィールド) 0078h 2byte 0B 01 識別子(実行ファイル「0B 01」、ROMイメージ「07 01」) 007Ah 1byte 00 リンカのメジャーバージョン 007Bh 1byte 25 リンカのマイナーバージョン 007Ch 4byte 00 04 00 00 コードセクションのサイズ 0080h 4byte 00 00 00 00 初期化されたデータセクションのサイズ(.data) 0084h 4byte 00 00 00 00 初期化されていないデータセクションのサイズ(.bss) 0088h 4byte 00 10 00 00 メモリ上のベースアドレス相対のプログラム開始アドレス 008Ch 4byte 00 10 00 00 メモリ上のベースアドレス相対のコードセクションの先頭アドレス 0090h 4byte 00 00 00 00 メモリ上のベースアドレス相対のデータセクションの先頭アドレス ----- ----- msg.exe(抜粋) 00000090 00 00 40 00 00 10 00 00 00 02 00 00 ..@......... 000000A0 04 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 ................ 000000B0 00 20 00 00 00 02 00 00 B9 FC 00 00 02 00 00 00 . .............. 000000C0 00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................ 000000D0 00 00 00 00 10 00 00 00 ----- ----- オプションヘッダ(Windowsフィールド) 0094h 4byte 00 00 40 00 メモリ上のベースアドレス 0098h 4byte 00 10 00 00 メモリ上に割り当てられるセクションのサイズ 009Ch 4byte 00 02 00 00 実行ファイルのセクションの単位 00A0h 2byte 04 00 OSのメジャーバージョン 00A2h 2byte 00 00 OSのマイナーバージョン 00A4h 2byte 00 00 実行ファイルのメジャーバージョン 00A6h 2byte 00 00 実行ファイルのマイナーバージョン 00A8h 2byte 04 00 サブシステムのメジャーバージョン 00AAh 2byte 00 00 サブシステムのマイナーバージョン 00ACh 4byte 00 00 00 00 予約語(常に0) 00B0h 4byte 00 20 00 00 プログラムが利用するメモリサイズ 00B4h 4byte 00 02 00 00 セクションデータの先頭アドレス 00B8h 4byte B9 FC 00 00 チェックサム 00BCh 2byte 02 00 サブシステム(「02 00」はGUIで実行されるファイル) 00BEh 2byte 00 00 DLLの特性 00C0h 4byte 00 00 10 00 スタックのために予約された仮想メモリのサイズ 00C4h 4byte 00 10 00 00 実際に使われるスタックのサイズ 00C8h 4byte 00 00 10 00 ヒープ領域として予約された仮想メモリのサイズ 00CCh 4byte 00 10 00 00 実際に使われるヒープ領域のサイズ 00D0h 4byte 00 00 00 00 デバッグ用のフラグ 00D4h 4byte 10 00 00 00 データディレクトリ配列の数(8バイト単位) ----- ----- msg.exe(抜粋) 000000D0 00 00 00 00 00 00 00 00 ........ 000000E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000000F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000150 00 00 00 00 00 00 00 00 ........ ----- ----- データディレクトリ (最初の4バイトはアドレス、最後4バイトはサイズ) 00D8h 8byte 00 00 00 00 00 00 00 00 エクスポートテーブルのアドレスとサイズ 00E0h 8byte 00 00 00 00 00 00 00 00 インポートテーブルのアドレスとサイズ 00E8h 8byte 00 00 00 00 00 00 00 00 リソーステーブルのアドレスとサイズ 00F0h 8byte 00 00 00 00 00 00 00 00 例外テーブルのアドレスとサイズ 00F8h 8byte 00 00 00 00 00 00 00 00 属性認証テーブルのアドレスとサイズ 0100h 8byte 00 00 00 00 00 00 00 00 再配置テーブルのアドレスとサイズ 0108h 8byte 00 00 00 00 00 00 00 00 デバッグデータの開始アドレスとサイズ 0110h 8byte 00 00 00 00 00 00 00 00 アーキテクチャ固有データのアドレスとサイズ 0118h 8byte 00 00 00 00 00 00 00 00 グローバルポインタレジスタの相対仮想アドレスとサイズ 0120h 8byte 00 00 00 00 00 00 00 00 TLSテーブルのアドレスとサイズ 0128h 8byte 00 00 00 00 00 00 00 00 ロードコンフィグレーションテーブルのアドレスとサイズ 0130h 8byte 00 00 00 00 00 00 00 00 バウンドインポートテーブルのアドレスとサイズ 0138h 8byte 00 00 00 00 00 00 00 00 インポートアドレステーブルのアドレスとサイズ 0140h 8byte 00 00 00 00 00 00 00 00 遅延インポート記述子のアドレスとサイズ 0148h 8byte 00 00 00 00 00 00 00 00 予約語(常に0) 0150h 8byte 00 00 00 00 00 00 00 00 予約語(常に0) ----- ----- msg.exe(抜粋) 00000150 2E 74 65 78 74 00 00 00 .text... 00000160 60 02 00 00 00 10 00 00 00 04 00 00 00 02 00 00 ................ 00000170 00 00 00 00 00 00 00 00 00 00 00 00 20 00 50 60 ............ .P. ----- ----- セクションヘッダ 0158h 8byte 2E 74 65 78 セクション名(ASCII) 74 00 00 00 0160h 4byte 60 02 00 00 セクションサイズ 0164h 4byte 00 10 00 00 メモリ上のベースアドレスに相対なセクション先頭アドレス 0168h 4byte 00 04 00 00 セクション単位(アドレス009Ch以降の4バイトの値)の 倍数で表したセクションサイズ 016Ch 4byte 00 02 00 00 セクション単位(アドレス009Ch以降の4バイトの値)の 倍数で表したセクションの先頭アドレス 0170h 4byte 00 00 00 00 セクションの再配置エントリへのポインタ 0174h 4byte 00 00 00 00 セクションの行番号エントリへのポインタ 0176h 2byte 00 00 セクションの再配置エントリ数 0178h 2byte 00 00 セクションの行番号エントリ数 017Ch 4byte 20 00 50 60 セクションフラグ -----  「00000180から00000200まで」のデータはセクション単位(アドレス009Ch以降 の4バイトの値)にあわせるためにサイズを調整しているだけなので、すべて「0 0」となります。そして、実際に実行されるコードセクションのプログラムは、ア ドレス「00000200」から始まることになります。 ----- msg.exe(抜粋) 00000200 55 89 E5 81 EC 00 01 00 00 B8 47 65 74 50 89 45 ................ (省略) -----  セクションデータ自体もサイズをセクション単位(アドレス009Ch以降の4バイ トの値)の倍数にしなければならないので、実際のマシン語のサイズは260hバイ トですが、「セクション単位(アドレス009Ch以降の4バイトの値)の倍数で表し たセクションサイズ」は、400hバイトとなっています。つまり、「00000200から 00000600」までがコードセクションとなります。ちなみにこのプログラムはコー ドセクションしかありませんが、通常のプログラムでは、データセクションやイ ンポートセクションなど、他にも様々なものがあります。それらはまとめてセク ションヘッダで定義され、コードセクションデータ以降に順番に追加されること になります。 ■0x03.) EXEファイルへ任意のプログラムを追加する  PEフォーマットの解説に利用したプログラムmsg.exeは、ご覧の通りコードセク ションのみで実現されています。「Wizard Bible vol.17」にて、まひんさんが「 ウイルスプログラミングへの招待 〜インポートセクションを持たずにAPIを使う 方法〜」という記事を書かれていますが、これを参考にして、コードセクション のみのプログラムを作成することができます。コンパイラはNASMとGOLINKを使い ます。 NASM http://nasm.sourceforge.net/ GOLINK http://www.jorgon.freeserve.co.uk/  では、msg.exeのソースコードを見てください。 ----- msg.asm(http://ruffnex.oc.to/kenji/text/exe_inj/msg.asm) section .text global main main: push ebp mov ebp, esp sub esp, 100h ; [ebp] stack layout ; .bss ; -00h ebpレジスタ値 ; -04h kernel32.dllのベースアドレス ; -08h user32.dllのベースアドレス ; -0Ch MessageBox関数のアドレス ; -10h LoadLibrary関数のアドレス ; -14h GetProcAddress関数のアドレス ; -18h NumberOfNames ; -1Ch AddressOfFunctions ; -20h AddressOfNames ; -24h AddressOfNameOrdinals ; .data ; -34h 'GetProcAddressA', 0 ; -44h 'LoadLibraryA', 0 ; -54h ; -64h 'user32.dll', 0 ; -74h 'MessageBoxA', 0 ; -84h 'GetActiveWindow', 0 ; -A4h 'Wizard Bible vol.19', 0 ; -C4h 'Hello! This is Inject Code.', 0 ; 'GetProcAddressA', 0 mov eax, 050746547h mov dword [ebp - 34h], eax mov eax, 041636F72h mov dword [ebp - 30h], eax mov eax, 065726464h mov dword [ebp - 2Ch], eax mov eax, 000417373h mov dword [ebp - 28h], eax ; 'LoadLibraryA', 0 mov eax, 064616F4Ch mov dword [ebp - 44h], eax mov eax, 07262694Ch mov dword [ebp - 40h], eax mov eax, 041797261h mov dword [ebp - 3Ch], eax mov eax, 000000000h mov dword [ebp - 38h], eax ; 'ExitProcess', 0 mov eax, 074697845h mov dword [ebp - 54h], eax mov eax, 0636F7250h mov dword [ebp - 50h], eax mov eax, 000737365h mov dword [ebp - 4Ch], eax mov eax, 000000000h mov dword [ebp - 48h], eax ; 'user32.dll', 0 mov eax, 072657375h mov dword [ebp - 64h], eax mov eax, 0642E3233h mov dword [ebp - 60h], eax mov eax, 000006C6Ch mov dword [ebp - 5Ch], eax mov eax, 000000000h mov dword [ebp - 58h], eax ; 'MessageBoxA', 0 mov eax, 07373654Dh mov dword [ebp - 74h], eax mov eax, 042656761h mov dword [ebp - 70h], eax mov eax, 00041786Fh mov dword [ebp - 6Ch], eax mov eax, 000000000h mov dword [ebp - 68h], eax ; 'GetActiveWindow', 0 mov eax, 041746547h mov dword [ebp - 84h], eax mov eax, 076697463h mov dword [ebp - 80h], eax mov eax, 06E695765h mov dword [ebp - 7Ch], eax mov eax, 000776F64h mov dword [ebp - 78h], eax ; 'Wizard Bible vol.19', 0 mov eax, 0617A6957h mov dword [ebp - 0A4h], eax mov eax, 042206472h mov dword [ebp - 0A0h], eax mov eax, 0656C6269h mov dword [ebp - 9Ch], eax mov eax, 06C6F7620h mov dword [ebp - 98h], eax mov eax, 00039312Eh mov dword [ebp - 94h], eax ; 'Hello! This is Inject Code.', 0 mov eax, 06C6C6548h mov dword [ebp - 0C4h], eax mov eax, 05420216Fh mov dword [ebp - 0C0h], eax mov eax, 020736968h mov dword [ebp - 0BCh], eax mov eax, 049207369h mov dword [ebp - 0B8h], eax mov eax, 063656A6Eh mov dword [ebp - 0B4h], eax mov eax, 06F432074h mov dword [ebp - 0B0h], eax mov eax, 0002E6564h mov dword [ebp - 0ACh], eax ; ------------------------------------------- ; KERNEL32.DLLのベースアドレスを求める ; ------------------------------------------- ; KERNEL32.DLLへのリターンアドレス(ebp + 4h)取得 mov ebx, dword [ebp + 4] and ebx, 0FFFF0000h mov ecx, 5 .check_PE: ; 最初の2バイトが「MZ」であるならPEファイル判定処理へ cmp word [ebx], 5A4Dh je .check2 .check1: ; もしecx=0ならKERNEL32.DLLは発見できなかった sub ebx, 10000h dec ecx xor eax, eax cmp ecx, eax jne .check_PE jmp ExitProgram .check2: ; アドレス3Chからの4バイトが50450000h(PE\0\0) ; となっているかどうかを調べる mov eax, dword [ebx + 3Ch] add eax, ebx cmp dword [eax], 00004550h jne .check1 got_kernel: ; KERNEL32.DLLのベースアドレスを取得 mov dword [ebp - 4h], ebx ; ------------------------------------------- ; エクスポートディレクトリテーブルを探索 ; ------------------------------------------- cld ; DF = 0 ; -18h NumberOfNames ; -1Ch AddressOfFunctions ; -20h AddressOfNames ; -24h AddressOfNameOrdinals mov esi, [eax + 78h] ; エクスポートディレクトリテーブル add esi, [ebp - 4h] add esi, 18h ; esi = NumberOfNamesのアドレス lodsd ; [esi]の4バイトをeaxへ( if DF=0 then esi+=4 ) mov dword [ebp - 18h], eax lodsd ; [esi]の4バイトをeaxへ( if DF=0 then esi+=4 ) add eax, [ebp - 4h] mov dword [ebp - 1Ch], eax lodsd ; [esi]の4バイトをeaxへ( if DF=0 then esi+=4 ) add eax, [ebp - 4h] mov dword [ebp - 20h], eax lodsd ; [esi]の4バイトをeaxへ( if DF=0 then esi+=4 ) add eax, [ebp - 4h] mov dword [ebp - 24h], eax ; ------------------------------------------- ; GetProcAddressA関数とLoadLibraryA関数の検索 ; ------------------------------------------- ; フラグ xor edx, edx search_Func: ; ediにAPI名の羅列の先頭アドレスを入れる mov eax, dword [ebp - 20h] mov edi, dword [eax] add edi, [ebp - 4h] cld ; DF = 0 xor ecx, ecx .next: cmp dl, dh jnz .flag ; esiに"GetProcAddressA"文字列のアドレスを入れる lea esi, [ebp - 34h] jmp .check .flag: ; esiに"LoadLibraryA"文字列のアドレスを入れる lea esi, [ebp - 44h] .check: ; API名が一致しているかをチェックする ; 1文字比較 ; cmp byte [esi], [edi]( if DF=0 then esi++, edi++ ) cmpsb jne .nextAPI ; 文字列の終端ならば一致したAPIが見つかったのでgotへ ; 終端じゃなければcheckへ cmp byte [edi], 0 je .got jmp .check .nextAPI: ; 次のAPIへポインタを動かす inc ecx cmp ecx, dword [ebp - 18h] jnge .nextAPI_2 jmp ExitProgram .nextAPI_2: add eax, 4 mov edi, dword [eax] add edi, [ebp - 4h] jmp .next .got: ; GetProcAddress関数アドレス取得 shl ecx, 1 ; 左シフト(ecx = ecx * 2) mov esi, dword [ebp - 24h] add esi, ecx xor eax, eax mov ax, word [esi] shl eax, 2 ; 左シフト(eax = eax * 4) mov esi, [ebp - 1Ch] add esi, eax mov edi, dword [esi] add edi, [ebp - 4h] cmp dl, dh jnz .end mov dword [ebp -14h], edi inc dl jmp search_Func .end: mov dword [ebp -10h], edi ; ------------------------------------------- ; 使用する関数のアドレス取得 ; ------------------------------------------- get_Func: ; LoadLibraryを使ってuser32.dllのベースアドレス取得 mov eax, ebp sub eax, 64h push eax call dword [ebp - 10h] mov dword [ebp - 08h], eax ; MessageBoxの関数のアドレス取得 mov eax, ebp sub eax, 74h push eax push dword [ebp - 08h] call dword [ebp - 14h] mov dword [ebp - 0Ch], eax ; GetActiveWindowの関数のアドレス取得 mov eax, ebp sub eax, 84h push eax push dword [ebp - 08h] call dword [ebp - 14h] ; -04h kernel32.dllのベースアドレス ; -08h user32.dllのベースアドレス ; -0Ch MessageBox関数のアドレス ; -10h LoadLibrary関数のアドレス ; -14h GetProcAddress関数のアドレス ; ------------------------------------------- ; MessageBoxを表示する処理 ; ------------------------------------------- OutMessageBox: ; CALL GetActiveWindow call eax mov edx, eax ; CALL MessageBox push 0h mov eax, ebp sub eax, 0A4h push eax mov eax, ebp sub eax, 0C4h push eax push edx call dword [ebp - 0Ch] ; ------------------------------------------- ; プログラム終了 ; ------------------------------------------- ExitProgram: mov esp, ebp pop ebp ret ----- ----- コマンドプロンプト C:\nasm>nasmw -fwin32 msg.asm C:\nasm>golink -entry main msg.obj GoLink.Exe Version 0.25.4 - Copyright Jeremy Gordon 2002/4 - JG@JGnet.co.uk Output file: msg.exe size: 1,536 bytes C:\nasm> -----  このプログラムは、実行するとMessageBoxを表示するだけの簡単なものです。 ソースコードの解読にはPEフォーマットとアセンブリ言語の知識が必要です。で は、このプログラムを任意のEXEファイルへ追加することにしましょう。ターゲッ トのEXEファイルは特に何でもよいのですが、今回は自前で用意しましょう。次の プログラムをダウンロードしてください。 hello.exe http://ruffnex.oc.to/kenji/text/exe_inj/hello.exe  このターゲットプログラムhello.exeに、msg.exeのコードセクションのプログ ラムを追加します。msg.exeのコードセクションは次の通りです。 ----- 追加するマシン語(msg.exeのコードセクション) 00000200 55 89 E5 81 EC 00 01 00 00 B8 47 65 74 50 89 45 00000210 CC B8 72 6F 63 41 89 45 D0 B8 64 64 72 65 89 45 00000220 D4 B8 73 73 41 00 89 45 D8 B8 4C 6F 61 64 89 45 00000230 BC B8 4C 69 62 72 89 45 C0 B8 61 72 79 41 89 45 00000240 C4 B8 00 00 00 00 89 45 C8 B8 45 78 69 74 89 45 00000250 AC B8 50 72 6F 63 89 45 B0 B8 65 73 73 00 89 45 00000260 B4 B8 00 00 00 00 89 45 B8 B8 75 73 65 72 89 45 00000270 9C B8 33 32 2E 64 89 45 A0 B8 6C 6C 00 00 89 45 00000280 A4 B8 00 00 00 00 89 45 A8 B8 4D 65 73 73 89 45 00000290 8C B8 61 67 65 42 89 45 90 B8 6F 78 41 00 89 45 000002A0 94 B8 00 00 00 00 89 45 98 B8 47 65 74 41 89 85 000002B0 7C FF FF FF B8 63 74 69 76 89 45 80 B8 65 57 69 000002C0 6E 89 45 84 B8 64 6F 77 00 89 45 88 B8 57 69 7A 000002D0 61 89 85 5C FF FF FF B8 72 64 20 42 89 85 60 FF 000002E0 FF FF B8 69 62 6C 65 89 85 64 FF FF FF B8 20 76 000002F0 6F 6C 89 85 68 FF FF FF B8 2E 31 39 00 89 85 6C 00000300 FF FF FF B8 48 65 6C 6C 89 85 3C FF FF FF B8 6F 00000310 21 20 54 89 85 40 FF FF FF B8 68 69 73 20 89 85 00000320 44 FF FF FF B8 69 73 20 49 89 85 48 FF FF FF B8 00000330 6E 6A 65 63 89 85 4C FF FF FF B8 74 20 43 6F 89 00000340 85 50 FF FF FF B8 64 65 2E 00 89 85 54 FF FF FF 00000350 8B 5D 04 81 E3 00 00 FF FF B9 05 00 00 00 66 81 00000360 3B 4D 5A 74 12 81 EB 00 00 01 00 49 31 C0 39 C1 00000370 75 EC E9 E4 00 00 00 8B 43 3C 01 D8 81 38 50 45 00000380 00 00 75 E1 89 5D FC FC 8B 70 78 03 75 FC 81 C6 00000390 18 00 00 00 AD 89 45 E8 AD 03 45 FC 89 45 E4 AD 000003A0 03 45 FC 89 45 E0 AD 03 45 FC 89 45 DC 31 D2 8B 000003B0 45 E0 8B 38 03 7D FC FC 31 C9 38 F2 75 08 8D 75 000003C0 CC E9 03 00 00 00 8D 75 BC A6 75 07 80 3F 00 74 000003D0 19 EB F6 41 3B 4D E8 7C 05 E9 7D 00 00 00 05 04 000003E0 00 00 00 8B 38 03 7D FC EB D0 D1 E1 8B 75 DC 01 000003F0 CE 31 C0 66 8B 06 C1 E0 02 8B 75 E4 01 C6 8B 3E 00000400 03 7D FC 38 F2 75 07 89 7D EC FE C2 EB A1 89 7D 00000410 F0 89 E8 2D 64 00 00 00 50 FF 55 F0 89 45 F8 89 00000420 E8 2D 74 00 00 00 50 FF 75 F8 FF 55 EC 89 45 F4 00000430 89 E8 2D 84 00 00 00 50 FF 75 F8 FF 55 EC FF D0 00000440 89 C2 68 00 00 00 00 89 E8 2D A4 00 00 00 50 89 00000450 E8 2D C4 00 00 00 50 52 FF 55 F4 89 EC 5D C3 00 00000460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ....(省略).... 000005F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -----  msg.exeのコードセクションは400h(1024)バイトあります。EXEファイル(he llo.exe)に任意のプログラムを追加するためには、このマシン語をhello.exeの コードセクションの最初に追加し、しかもその後、もともとのhello.exeプログラ ムもちゃんと実行されるように配慮しなければなりません。そのためには、まず 一番最後の「00」以降のデータをすべてNOP「90」に変換しましょう。これらはコ ードセクションをセクション単位(アドレス009Ch以降の4バイトの値)の倍数に するための追加データであるため、すべて「00」です。そして、さらに最後のマ シン語命令である「C3」はret命令であり、KERNEL32.DLLへ処理を戻してしまうた め、これもNOP「90」にします。 ----- 変更前(00000450以降のデータ) 00000450 E8 2D C4 00 00 00 50 52 FF 55 F4 89 EC 5D C3 00 00000460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ....(省略).... 000005F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----- ----- 変更後(00000450以降のデータ) 00000450 E8 2D C4 00 00 00 50 52 FF 55 F4 89 EC 5D 90 90 00000460 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ....(省略).... 000005F0 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 -----  では、このコードセクションのデータ400hバイトをhello.exeのコードセクショ ンの先頭に追加します。追加することによって、EXEファイル(hello.exe)に次 のような変化が起きます。 1:コードセクションのサイズが変わる。 2:コードセクションの次に位置しているすべてのセクションのアドレスが変わる。  よって、これらをPEフォーマットのデータに反映させなければなりません。で は、ターゲットプログラムhello.exeのセクションヘッダをバイナリエディタで見 てください。 ----- hello.exeのセクションヘッダ 0158h 8byte 2E 74 65 78 セクション名(ASCII)「.text」(コードセクション) 74 00 00 00 0160h 4byte E0 01 00 00 セクションサイズ 0164h 4byte 00 10 00 00 メモリ上のベースアドレスに相対なセクション先頭アドレス 0168h 4byte 00 02 00 00 セクション単位(アドレス009Ch以降の4バイトの値)の 倍数で表したセクションサイズ 016Ch 4byte 00 02 00 00 セクション単位(アドレス009Ch以降の4バイトの値)の 倍数で表したセクションの先頭アドレス 0170h 4byte 00 00 00 00 セクションの再配置エントリへのポインタ 0174h 4byte 00 00 00 00 セクションの行番号エントリへのポインタ 0176h 2byte 00 00 セクションの再配置エントリ数 0178h 2byte 00 00 セクションの行番号エントリ数 017Ch 4byte 20 00 50 60 セクションフラグ 0180h 8byte 2E 74 65 78 セクション名(ASCII)「.data」(データセクション) 74 00 00 00 0188h 4byte 20 00 00 00 セクションサイズ 018Ch 4byte 00 20 00 00 メモリ上のベースアドレスに相対なセクション先頭アドレス 0190h 4byte 00 02 00 00 セクション単位(アドレス009Ch以降の4バイトの値)の 倍数で表したセクションサイズ 0194h 4byte 00 04 00 00 セクション単位(アドレス009Ch以降の4バイトの値)の 倍数で表したセクションの先頭アドレス 0198h 4byte 00 00 00 00 セクションの再配置エントリへのポインタ 019Ch 4byte 00 00 00 00 セクションの行番号エントリへのポインタ 01A0h 2byte 00 00 セクションの再配置エントリ数 01A2h 2byte 00 00 セクションの行番号エントリ数 01A4h 4byte 40 00 30 C0 セクションフラグ -----  0160h番目にセクションサイズがあります。また、0168h番目がセクション単位 のサイズ、016Ch番目がセクション単位の先頭アドレスとなっています。よって、 ターゲットのEXEファイルのこの部分を変更することで、OKだと考えられます。で は、実際にhello.exeのバイナリを変更していきます。  まず、コードセクションのサイズを変更します。先頭に400h(1024)バイト追 加したわけなので、hello.exeのアドレス「0169h」の「02」を「06」に変更しま す。さらにアドレス「0160h」のセクションサイズにも400hを加算しなければなら ないので、アドレス「0161h」の「01」を「05」に変更します。次にデータセクシ ョンのアドレスを変更します。アドレス「0194h」をみると、400h番目からデータ セクションとなっているので、アドレス「0195h」の「04」を「08」に変更します。 これで完了です。あとは、コードセクションの先頭(アドレス「0200h」)にさっ き用意したマシン語を追加すれば、マシン語コードの追加は完了です。変更後の EXEファイルを保存し、実行すると、追加したマシン語コードが実行された後に、 通常のプログラムが実行されます。 hello.exeの変更箇所 http://ruffnex.oc.to/kenji/text/exe_inj/1.png hello.exe(変更後) http://ruffnex.oc.to/kenji/text/exe_inj/hello2.exe  さて、今回は、hello.exeへの追加をバイナリエディタを使って手動で行いまし たが、これを自動化したプログラムを作成すれば、すべてのEXEファイルに任意の プログラムを感染させることができます。これは一般的にいうコンピュータウイ ルスです。自分自身を他のEXEファイルへ感染させることによって、ウイルス自体 の発見を難しくするわけです。EXEファイルに任意のプログラムを寄生させるテク ニックなんて、ウイルスの作成にしか役に立たない気もしますが、このテクニッ ク自体はとても興味深いものだと思います。ブラックか? ホワイトか? アン ダーグラウンドか? オーバーグラウンド(?)か? といった括りに関係なく、 こういった純粋な技術部分での話題はとても面白いものだと思いますので、興味 を持たれた方は、ぜひいろいろと調べてみてください。 ■0x04.) さいごに  さて、いかがだったでしょうか。本当はこの作成したマシン語を任意のEXEファ イルへ追加してくれるプログラムも作る予定だったのですが、最近なぜかやるべ きことが多く、なぜか忙しいのでちょっとそこまで手がまわりませんでした。申 し訳ないです。またいつか気が向いた時に作ってみることにしますので、そした らまたWBに投稿するのでよろしくお願いします(^^;。  さて、最後になりましたが、ここまで読んでくれて本当にありがとうございま す。  では、また会う日まで... x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第11章: ノイズの雑学 --- 著者:IPUSIRON x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) ノイズ  ノイズとは、「雑音」、「騒音」という意味の言葉です。 電磁的でシステムに 異常をもたらす現象のことです。音響として耳に聞こえるノイズもあるが、「聞 こえない」、「見えない」ノイズの方が圧倒的に多いです。 ■0x02.) ノイズ現象の4つの基本原理  次に示す4つの基本原理がすべて満たされないとトラブルは起きません。つまり 、ひとつでも欠けさえすれば、ノイズトラブルを回避することができるわけです。 ●基本原理1:ノイズ源がある  ノイズ現象の最大かつ基本的な要因は、ノイズ源の存在です。ということは、 ノイズ源を探して、取り除くあるいは対策を講じればよいように思われますが、 そう単純ではない。自然現象に起因するノイズ、意図しない行為に起因するノイ ズ、本来必要な信号が場合によってノイズとなるケースなどがもあるからです。 ●基本原理2:ノイズ電動経路がある  ノイズ対策の一般原則として最も注目されるのは、ノイズの伝導経路に対して 伝えないための対策を考えることです。電磁波ノイズであれば、地球上はもちろ ん宇宙空間の真空中も伝播してしまうが、一般にノイズトラブルに関係している ノイズの多くは導体伝導によって影響を伝えています。また、電磁波などの空間 伝導と導体伝導とが共に関与した伝導パターンもあります。 ○信号ケーブル  ノイズトラブルの原因として最大のものは、各種の信号ケーブルにノイズが乗 ることによります。  ケーブルはそれぞれ必要な信号を伝えるためにどうしてもひつようなもので、 ノイズトラブルの原因とわかっても簡単に撤去できるものではありません。 ○電源ライン  ノイズトラブルのノイズ伝導ルートとして、電源ラインからのノイズ伝導が注 目されています。  ここには、ACパワーラインのサージノイズなど突発的なノイズ、電源電圧の変 動や電圧低下、そして最近トラブルが増加している電源高調波電流など色々なタ イプのノイズが混在しています。  電源ラインの宿命として、どのような装置・機器にも電源に接続されています。 電源ラインは本質的にインピーダンスが低いという2つの要素があります。両方と も、ノイズ伝導には都合のいい条件なため、トラブルの原因とつながりやすいで す。 ○ケーブル→電磁波  ノイズ伝導ルートとして、信号ケーブルから空間への電磁波ノイズ放出があり ます。  従来からエレクトロニクス機器の本体はノイズ放出シールドなどの対策が施さ れてきましたが、実際の稼動状態では各種の信号ケーブルが接続され、ここがア ンテナとなって電磁波ノイズが放出されるというケースが起こることがあります。 そこで、最近のプリンタケーブルやモデムケーブルなどのPCと周辺機器との接続 ケーブルでは、ケーブルの途中になにやら太い円筒形の物体が入っているものが 主流になりました。この正体はフェライトコアというもので、磁性体であるフェ ライトを筒状に形成した一種の磁心で、電気的には何も繋がっておらず、ただ信 号ケーブルがフェライトコアを通過しているだけです。  これは信号ケーブルから発生する不要な電磁波ノイズを減衰させるためのもの で、システムとしてのノイズ放出を抑えるためには効果的な対策です。 ○電磁波→ケーブル  これは、「ケーブル→電磁波ノイズ」の逆の現象です。  外部の空間から伝播した電磁波ノイズが、信号ケーブルに飛び込むというタイ プのノイズ伝導ルートもああります。  この対策は基本的にはシールドの一種で、良好なグラウンドと共にきちんとシ ールド対策を講じることで、かなり有効なノイズ対策を実施できます。 ○信号→磁力線→信号  電子機器の高速化・軽薄短小化などによりクローズアップされてきたノイズト ラブルの原因として、信号間のクロストークがあります。これはノイズ伝導経路 としては、信号線と信号線とが、磁力線や静電誘導によって電気的に統合してし まうことにより発生するものです。  また、電力機器などのパワーラインと制御機器のための信号ケーブルが、工場 内の同じダクトの中を通っているというような環境で、電力ラインからの磁力線 が信号ケーブルにノイズを誘起したというノイズトラブルも実際に報告されてい ます。  外見上は繋がっていないケーブル同士が、実はノイズを伝播する場合もありま す。この場合、ケーブルが並走している(等価的にトランスになっている)とい う場所がポイントになります。 ○誘電誘導  磁界が媒介するノイズ伝導ルートがあれば、電界が媒介するノイズ伝導ルート があるのは当然です。  また、送電線や鉄道の送電ラインなどは、高電圧が長距離に渡って続いている ような環境なので、この周囲では静電誘導に起因するノイズが発生することがあ ります。 ●基本原理3:ノイズを受ける機器がある  具体的にノイズを受ける存在があるというのは当たり前のことですが、より正 確にいえばノイズの侵入を許してしまう機器があるということで、元々は機器メ ーカーの設計上の責任のようにも思えます。ところが、設置状況や使用方法によ ってもノイズ被害は大きく変わるために、ユーザーである工場・現場の側にも何 らかの原因があることが少なくありません。  具体的なノイズ対策として、次のような方法が挙げられます。 ・機器に繋がるケーブルの段階で対策する ・機器の入り口の水際のところで対策する ・機器の内部で対策する ・機器の設置環境に対策する ・対策装置、対策部品を付加していく ●基本原理4:ノイズによって動作が影響される  不幸にもノイズが発生し、伝導され、侵入したとしても、そのノイズによって 誤動作しなければ、ノイズトラブルにはなりません。この辺をもっと細かく見て いくと、次のような場合分けになります。 [1]ノイズがない→正常動作 [2]ノイズが侵入→システム(ハード)が抑えて影響なし→正常動作 [3]ノイズが侵入→影響を与えるがソフトで修正・対応→問題なし [4]ノイズが侵入→影響がありソフトで対応する→動作は一応継続(一部機能低下) [5]ノイズが侵入→影響がありソフトは安全対策を施して停止(フェイルセーフ) [6]ノイズが侵入→影響がありシステムは自動リセットにより再起動 [7]ノイズが侵入→リセットがかからずマイコンは暴走(自動リセット回路の不備) [8]ノイズが侵入→素子は可移により故障(落雷など) ■0x03.) ノイズトラブルの原因となるコンスタントノイズたち ●熱雑音  半導体は電流が流れることで増幅・発振などの色々な動作を行いますが、この 電流の招待である電子の振る舞いには基本的に熱雑音という一種なコンスタント なノイズが加わっています。  これは自然界のゆらぎ(量子力学的効果)が原因であり、理想的な直流(一定 の電圧)回路であっても、本質的にその電圧に微小なノイズが乗っていることを 意味します。  熱雑音のノイズとしてのレベルは非常に小さいので、通常の電子回路ではあま り問題ないが、微小電圧を扱うセンサー回路や高感度な増幅回路では影響を考慮 する必要があります。 ●電磁波の侵入  一般的なノイズトラブルの原因として多いのが、電磁波の侵入によるものです。  第1条件は、影響を受けるほど近くに電磁波源があることです。第2条件は、ト ラブル被害にあう機器が電磁波の侵入を許してしまうことです。  通信機器・送信機などは、電磁波を放出するのが本来の目的なので、電波を出 すなということにはなりません。そのため、不要な電磁波は受け入れない、侵入 しても影響されないように設計する必要がああります。 ●信号のクロストーク  これは、システムとして必要な複数の信号ライン同士が影響しあって、お互い の信号を変形させたり、ノイズとして乗ったりすることをいいます。システム動 作に関係無いノイズ成分に対しては、弱めたり消すといった方針で対策すればよ いが、必要な信号であればノイズ源だからといって止めてしまうわけにはいきま せん。そこで、対策は分離の部分だけで行うことになります。  クロストークノイズの代表的なものとしては、信号ラインに乗ってくるシステ ムクロック信号とバスラインのデータ間の相互影響があります。一般に最も周波 数が高いシステムクロック信号の方が影響が大きいです。 ●AC電源のフリッカ  広義のノイズトラブルには、ノイズ源が発するノイズばかりでなく、AC電源の フリッカのように本来は安定しているはずの信号(ここでは一定であるはずのAC 電源電圧)のゆらぎが原因となることもあります。  AC電源のフリッカとは、交流の電源電圧の振幅がさらに数Hz程度の周期で滑ら かに変動するという低周波の振動現象のことです。電源電圧自体が一種の振幅変 調(AM)を受けたような状態です。フリッカの原因には、電源系統のあちこちの 段階、即ち発電、変電、送電、配電のいずれかの段階で問題があることが多いで す。それと並び、工場・現場では、装置・機器までかなり長い電源ケーブルを延 ばしていることによる場合もあります。  長距離の電源ラインの延長によって、インピーダンスが増加して電源電圧の変 化やフリッカの原因となると共に、ノイズアンテナとして他の機器にノイズを放 出したり、他の機器からノイズを拾ってしまいます。 ●AC電源のハム  一般に電源ライン関係のノイズというのは、突発的なノイズや電源高調波がラ インに乗ることによるトラブルとして問題になります。元々AC電源が交流である ことは誰もが知っているから、この交流周波数自体の成分がノイズトラブルとし て作用するようなシステムは、最初から設計していないのです。  ところが、場合によっては50Hz/60Hzという交流電源の周波数そのものが、ノイ ズトラブルの主役となることがああります。この場合、感電防止のための保安用 設接地が充分でないことも多いので、危険防止のためにも重要なチェックポイン トとなります。  AC電源のハム音というのは、装置・機器から耳に聞こえてくるような状態で表 面化していると、空気を振動していることからわかるように、実際にどこかの物 理的振動を伴なっています。これがずっと持続してしまうと、金属疲労による破 壊、ネジ類のゆるみ、共振によって部品が外れるなどといった機械的なトラブル の原因となります。工場・現場でこれが起こった場合、電磁波ノイズよりも恐ろ しいことといえるでしょう。  ハム音を消すには、信号ラインのシールドを徹底し、ACラインの配線レイアウ トを改善します。 ●電源高調波  AC電源の周波数に同期した高調波成分(例えば50HzのACの場合、整数倍成分で ある100Hz、150Hz、200Hz、・・・という周波数成分のノイズ)が、AC電源ラインに いわば逆流して、同じ電源ラインから電源を取っているほかの電子機器に悪影響 を与えます。 他の機器からの電源高調波によって機器の電源回路に異常電流が流 れて加熱し、火災事故になったという事故が実際に起こっています。  これは普通のレギュレータ電源(トランスで電圧を変換して整流回路→平滑回 路と続くタイプの電源回路)でなく、スイッチング電源やインバータ電源、サイ リスタ方式の電力制御回路などによって発生します。  電源高調波ノイズは電源ラインを伝わってくるので、最も根源的な対策として は電気的に完全な分離とシールドを行うノイズカットトランス、ノイズキャンセ ラトランスなどと呼ばれるトランスによって、ACラインの電力を供給しながら高 調波・高周波帯域のノイズをカットしてしまうことであります。ただし、これは ノイズ対策だけのためにそれなりのコストがかかります。 ●モーターブラシ  工場・現場の多くの装置・機器で使われているモーターは、本質的な構造とし てブラシが存在します。電力ラインをブラシのような接触構造で伝達するという 電子回路にとっては想像できないモーターの動作によって、一種の火花放電とし てノイズが常時放出されていることになります。  このノイズは、ノイズキラーコンデンサなどによってかなり吸収されるし、ノ イズ放出を抑えるために電気的にシールド構造となったモーターやブラシレスモ ーターなどもあります。  工場・現場でのモーターが絡んだノイズトラブルとして、一般にノイズキラー コンデンサの寿命や破壊によって、それまで少なかったノイズ放出が突然増えた というものが多いようです。これはモーターの振動によって物理的にコンデンサ が剥落したというものも含みます。モーターに限らないが、電気的なノイズと思 って調べみると、機械的な振動や磨耗などの原因によるものが少なくありません。 ●インバータ  工場の高効率電源として活躍する汎用インバータは、ノイズトラブルの点でも 色々登場します。インバータが原因となるノイズは次の2種類があります。 ①電源と同期した高調波帯域(低周波)のノイズ  AC電源の周波数の整数倍の高調波成分で、電源ラインへの高調波電源となります。 ②スイッチング動作に伴なう高周波帯域のノイズ  インバータ回路の発振周波数の高周波成分で、電磁波のノイズや信号ラインへのノイズとなり、さらに電源ラインにも乗ってきます。  また、これらは非同期的に電源ラインに乗ってきますが、たまたま位相が合っ た瞬間には、個別に計測したよりも大きな瞬間的電圧になることがあり、相当に 長い時間をかけてデータを記録してみないと最大瞬間電圧はなかなかわかりませ ん。 ●大電力ラインからの磁力線  これは大電力ラインからの磁力線というもので、システムのグラウンドループ などの原因によって表面化するノイズです。工場・現場にある電磁力やソレノイ ドを使った機器からは、瞬間的に強い磁力線が発生することがあります。また、 大電力ラインの電源ケーブルからは、常時コンスタントな磁界が発生します。  大電力ラインの電源ケーブルからの常時コンスタントな磁界が発生します。こ れらの磁力線は時間と共に変化するために、近くに等価的なループとなる回路が 存在すれば、電磁誘導によってコモンモードノイズとなります。  サージに比べると地味なノイズですが、電源ラインのグランドループがあれば、 必ずそのループの中を通過する磁力線が存在するということを覚えておきましょ う。 ■0x04.) 突発的なノイズ ●インダクティブキック  AC電源ライン絡みのノイズの主役のひとつです。インダクティブキックとは、 誘導性回路(コイル)によるノイズです。  例えば、蛍光灯の安定器がよい例です。AC電源ラインにコイルが入ると高電圧 を発生するため、等価的にコイルの入った電力ラインでON/OFFがあると、急激な 磁力線の変化により高電圧のノイズを発生します。 ●ACラインノイズ(サージ)  ここでいうサージとは、定常的でない(突発的な)ノイズ、電源ラインに乗っ ている、AC電圧に比べて非常に高い電圧(数百V〜数kV)という現象の総称を指し ます。つまり、電源のON/OFFの際のノイズやインダクティブキックも、また静電 気放電や雷サージであっても、現象として電源ラインに乗った高電圧をすべて含 めた呼び方です。  このようにACラインノイズをまとめて扱うことが多いのは、原因はともかく現 象としてAC電源ラインに瞬間的な高電圧ノイズが乗ることが多く、工場・現場で はその原因にかかわらずノイズトラブルになるという切実な現実があるからです。  ACラインのサージに対しては、①「通常のAC電源電圧に比べて非常に電圧レベ ルが異なっている」、②「瞬間的現象で、ノイズの周波数成分が異なっている」 という2つのポイントとして攻略しなければなりません。つまり、電圧の違い、周 波数の違いに着目したノイズ対策装置・部品が効果を上げやすい分野であるとい えます。 ●溶接器の放電  溶接器は原理的に放電現象によるものなので、ノイズが豊富に放出されます。 メーカーがカタログデータで示しているノイズ放出や耐ノイズ性というのは電源 など最低限のケーブルを接続した状態での測定・実験データです。ところが、実 際の現場では、多くの周辺機器やセンサースイッチなどのケーブルが接続され、 ノイズの放出・受信アンテナとして作用してしまいます。  また、メーカーの測定では、機器の下に十分な面積のアース板を敷いているの に対して、現場では接地線を含めてアースが十分でなかったという事例もありま す。  溶接器のような高電圧危機では、不十分な接地はノイズトラブルだけでなく、 感電の危険もあり注意が必要です。 ●雷サージ  直接の落雷でなくても、雷の電気的衝撃というのは強烈なもので、他のノイズ トラブルとは比べ物になりません。非常に確率が低いものの、影響としては機器 にしてもデータにしても、ほぼ全滅を覚悟する必要があります。  落雷トラブルの対策として最も現実的なものは、ノイズ対策機器でもノイズ対 策部品でもなく、ずばり災害保険といえます。  直撃でない落雷なら、雷サージ(瞬間的高電圧ノイズ)に対する対策を講じて おくことができます。もっともポピュラーなものとしては、マイコン機器などデ リケートな電子機器の入出力信号コネクタの付近にずらりと並んでいるサージア ブソーバというノイズ対策部品が有名です。これは異常に高い電圧をバイパスし てしまうもので、高電圧がごく瞬間的なものでなければ破損してしまうのですが、 雷サージにしても静電気放電にしても持続時間はごく一瞬のために、かなりノイ ズトラブル対策として効果があります。 この部品が含まれている製品として、雷 サージ対策済みの電源タップがあります。 ●空電(大気雑音)  これは、非常に遠くでの雷ノイズなどを含めた、いわゆる短波帯域の通信に対 する妨害となるような電磁波ノイズの総称です。厳密にいえば、大気の摩擦によ って発生する積乱雲の静電気ノイズ、宇宙空間のバックグラウンドノイズ、太陽 黒点活動による太陽風の伊豆、竜巻・火山噴火・原子爆発などに伴なう電磁波ノ イズなどがあります。  しかし、工場・現場での誤作動・暴走といったノイズトラブルに関していえば、 空電はあまり関係ありません。 ●静電気放電  工場よりもオフィスで、最も深刻なノイズトラブルの原因となっているのが、 人間を媒介とした静電気放電(ESD)のノイズです。  人間は数百V〜数千Vの静電気を帯電していても何も感じず、金属などに触れる 瞬間に「バチッ」と放電して初めて気づくというある意味鈍感な動物といえます。 このため、もともと人間が操作するようにできているコンピュータ機器やエレク トロニクス機器では、本来の心臓部に近いキーボードやパネルスイッチの部分で、 静電気放電のショックを受けることになってしまいます。  静電気放電の具体的な影響として、次が挙げられます。 ①インタフェース回路の部品が静電気破壊する(永久破壊) ②マイコンが暴走する(リセットで復帰) ③CMOSタイプのICがラッチアップする(電源再投入で復帰) ④接続されている周辺機器に誤データ・誤制御を与える ●信号ラインのクロストーク  突発的なノイズとして見逃せないのが、本来の信号による相互干渉、即ち信号 ラインのクロストークです。  デジタル回路では、多くのビットのデジタル信号をまとめてバスとして処理し ますが、このバスライン(8ビットとか16ビットとか)の信号線は、一般にきれい に並んで配線されています。ところが、バスラインにおいては、ある瞬間に表現 されているデータというのは、それぞれのビットで完全に独立していますので、 本質的に常に同時スイッチングされます。次の瞬間にバスラインに現れるデータ は直前のデータとはまったく無関係で、これはすべてのビットについていえるこ とです。つまり、あるビットが1から0に状態が変わるのと同時に、すぐ隣のビッ トは0から1になったり、あるいは15ビットが一斉に0から1になる中で、ある1ビッ トだけが0のままなどということを繰り返えします。一般的なデジタル回路では、 この状態の変化は+5Vとゼロ電圧の瞬間的な変化だから、かなりの電圧変動(ノイ ズ源となる)といえます。  そこで最近の傾向としてコンピュータがさらに高速化していくと、この高速で 同時に多数のビットがスイッチングされるという信号自体の相互影響が問題とな ってきます。 ●瞬停  AC電源の1サイクルとか半サイクルなど、ごく一瞬だけ電圧がゼロになってしま う現象のことです。突発的に起きるものだけに、再現性の点でなかなか究明でき ないノイズトラブルの代表格といえます。  瞬停が起こると、PCのCPUにリセットがかかってしまい、システムが再起動して しまうことが多いです。一瞬とはいえ電源電圧が低下したために、マイコンがま ったく訳のわからない暴走をしてデータなどを破壊する目に、とりあえずリセッ トしてしまうという正しい誤動作対策の実行といえます。つまり、これはシステ ムとして当然のことをしたといえます。  また、マイコン制御回路以外の部分では、信号データが部分的にデータ化けを 起こしたり、高感度センサー回路の電源変動によって、アナログ回路の動作が不 安定になるといった影響が出る場合もあります。特に、データ通信などの場合に は、相手の機器とハンドシェイクの双方向通信をしていると、瞬停による一瞬だ けのデータ異常にシステムが敏感に対応して、システムリセットによる再起動や データ回復動作に突入してしまいます。  瞬停によるトラブルは、安定に供給されているのが当然のAC電源の異常です。 残念ながら、システム側としては決定的な対策はありません。最もポピュラーな 対策としては、UPS(無停電電源装置)を利用することです。 ●電源電圧低下  厳密にいえば、電源電圧低下はAC電源電圧の低下はノイズではありませんが、 工場・現場の電源周りのトラブルの原因としてよく登場するため、広義のノイズ の一種として考えてみることにします。  日本国内での商用AC電源は安定性が高いが、東南アジアの場合は電源電圧の低 下による誤動作のトラブルが多いです。現地での電源事情による電源電圧の変動 と電圧不足によるものです。日本国内であっても、長距離のケーブルやドラムを 利用すると、電圧が低下してしまうことがあります。 ●静電気帯電  具体的に火花として放電していないのに、乾燥した空気と空調の効いた空間( 大抵の場合、床が絨毯やカーペット)の中にある電子機器の内部のメモリのデー タがいつのまにか化けてしまっているというものです。放電するか否かで、静電 気放電(ESD)と違います。 ●停電  突発的なノイズトラブルの最後は停電です。一般的にこれはノイズに含まれな いが、電源周りのトラブルなのでこれも一緒に検討しておくことにします。  停電にも色々な種類がある。あらかじめ電力会社から予告されている停電もあ れば、突然停電してしまうこともあります。問題は後者の場合です。さらに、一 定時間停電している場合もあれば、ほんの一瞬だけ停電することもあります。後 者は瞬底と似ていますが、広い範囲に及ぶという点で異なります。 ■0x05.) ノイズトラブルの難しさ  機器の台数が増えると、それらの間のノイズトラブル相互作用の可能性は飛躍 的に増大します。例えば、2台の場合は1通り、3台の場合は3通り、4台の場合は6 通り、5台の場合は10通り、・・・、n台の場合はn(n-1)/2通りになります。つまり、 コンビネーション(組み合わせ)の計算になるわけです。  また、ケーブルの増加はノイズアンテナの増加に繋がります。  そして、多くの装置・機器をシステムとして統合化していった場合のノイズト ラブルの難しさは、機器の相互作用の組み合わせだけでなく、システム化そのも ののために必要な信号ケーブルが、ノイズ源となってしまうところにあります。 装置・機器がノイズ源となるなら、それをそれぞれ独立したシールドボックスに 入れれば、ノイズは軽減されます。  ネットワークの信号ラインには、それ自身に電気的ノイズが乗るという直接的 なノイズ媒体としてだけではなく、それぞれの装置に共通の電源、それぞれの装 置に共通のグラウンドと共に色々なループを構成してしまうという問題点もあり ます。つまり、ノイズとして問題となる電気的信号の成分をカットすれば別の種 類のノイズを拾うためのアンテナを構成している結果になってしまうこともあり ます。ケーブルはシールド線によるアースを用意して、信号シールドのアースは 大地と同電位のためノイズに対する保護になると単純に考えてしまってはいけま せん。これは理想的な状態だが、現実はもっと厳しい。というのも接地抵抗がゼ ロということはありえないからです。そして、離れた地点の設置間の抵抗成分も あるので、信号線のシールドまで全体として見ると、グラウンドループと呼ばれ る等価的な大きなコイルが構成されてしまっていることになります。すると、こ のループ内を通過することで、その変化に応じた起電力が発生して、このコイル はある種のノイズ信号を発生してしまいます。  さらに、元々ある種のノイズを防ぐために使っていたはずのノイズ対策製品同 士が、共振・干渉などによって新たなノイズを発生したり、ノイズ対策機器から のアース線をアンテナとしてノイズが逆に侵入したりといった弊害を生むことも 少なくありません。  ちょっと大型のノイズ対策製品を新たに取り付ける場合に、本来の信号線や電 源ラインがわざわざ最短経路から迂回して、延々と対策製品までケーブルが延び ているなどというあまり意味のない対策になってしまうこともあるので注意しま す。 ■0x06.) ノイズを発見する  人間の目には見えない電気信号を見るためにはオシロスコープやスペクトルア ナライザといった測定器が必要です。しかし、これらの測定器はかなり専門的な ものであり、使うだけでも専門的知識が必要となります。そこで、最も身近なノ イズ測定器として、短波ラジオを使ってみるとよいでしょう。雰囲気を掴むだけ なら、短波でなくAMやFMラジオであっても部分的には同じようなことができます。 ●短波ラジオ利用によるノイズ発見のアプローチ  マイコン機器などのデジタル電子機器は、電子回路の動作に必要なシステムク ロック信号が必ず存在します。このシステムクロックの条件としては、周囲の温 度変化や電源電圧の変動などで周波数が変動しないという安定度と精度が最も要 求されるため、一般に水晶振動子が使われます。水晶振動子とは水晶を結晶軸に 対して一定の角度で薄板状に切り出し、その表面に銀メッキなどで電極を設けた ものです。フィルタ、発振回路、クロックパルス発生回路などで利用される振動 子です。  回路の動作としては数百Hz(時計など)や数千Hzもあれば十分ですが、このよ うに低い周波数では水晶振動子が大きくなってしまいコスト高になるため、一般 に数MHz〜数十MHzぐらいの水晶振動子によるデジタル発振回路を用いて、整数で 分周していきます。分周していくと、10MHz→5MHz(÷2分周回路)→2.5MHz(÷ 2分周回路)と小さい周波数を取り出すことができるのです。この分周作業のとき に、ノイズが発生します。  例えば、10MHzクロック発生回路では20MHz、40MHz、・・・、10MHzが流れるところ では10MHz、30MHz、50MHz、・・・といったあらゆる周波数のノイズが生じます。こ れは、デジタル回路の信号が+5Vと0Vという2種類の電圧の振動であるため、奇数 次高調波成分が非常に含まれているためです。  このようにマイコン機器から放出されているノイズの周波数成分は、短波ラジ オの扱う周波数帯域とちょうど一致しているので、ノイズ測定器として活用でき るのである。また、電源ラインのスイッチングに伴なうノイズは数百kHzオーダー ですが、これも中波レンジで聞くことができます。さらに、短波のAMラジオでは モーターなどの瞬間的な電源の切断ノイズも高調波成分をラジオの周波数帯域と して、ちょうど雷のノイズのように聞くことができます。 ●ガスレンジの着火装置のノイズ探索  ガスレンジの着火装置とは、「カチカチ」という音がして小さな火花が出るも のです。これはICライターなどの着火装置と同じ仕組みです。簡単な昇圧回路に よって微小電流の高電圧を発生させ、実際に火花を飛ばしています。  昔、パチンコ台にマイコン制御が登場したばかりの頃には、パチンコ台の近く でICライターを点火させた火花でマイコンを暴走させて、フィーバーを出すとい うゴト行為が流行りました。つまり、この火花は確実にノイズといえるのです。 パチンコ台の例と同様に、ゲームセンターのゲーム台も同様の手口が使えたので、 知っている人もいることでしょう。  普通のAM放送がある中波帯域から短波帯域の周波数までの広いレンジで瞬間的 に「ガリッ」というノイズを聞くことができます。  鉄道沿いの領域では、電車が通るとラジオに入るノイズがあります。これはこ こでの火花と似ている高電圧の接触による火花放電のノイズです。これは、瞬間 的な火花ノイズが連続しているノイズ現象といえます。 ●冷蔵庫のモーターのノイズ探索  サーモスタット(温度によってスイッチング動作をする部品)により冷蔵庫の モーターがON/OFFするとき、ノイズが発生します。これはインダクティブキック と呼ばれるもので、モーターのコイルに流れる電流が瞬間的に大幅な変化をする 際に発生する高電圧のノイズです。  着火装置と違って自分の手でON/OFFできないので、ラジオではなかなか現象を 調べることができませんが、冷蔵庫の近くでBGMとしてラジオを流しっぱなしにし ておくと「ガリッ」という音を聞くことができます。  ラジオの音では火花放電とあまり違いませんが、この瞬間は部屋の明かりが一 瞬だけ暗くなることも多いです。つまり、瞬間的にコンセントの電源電圧が低下 するほど大電力の瞬間的変動が起きています。そのため、例えばコンセントから 10m以上のテーブルタップで電源を延長して、その先に冷蔵庫とPCの電源をタコ足 配線で取ると、冷蔵庫のサーモスタットのON/OFFでPCがリセットされてしまうこ ともああります。 ●電子レンジのノイズ探索  電子レンジは、電磁波で物質の水分子を励起することで加熱を起こすので、内 部では強力な電磁波で満ち溢れています。しかし、ラジオで調べてみても周波数 帯域が合いません。もし調査するとしたら、2GHz以上(具体的にいえば、無線LA NのIEEE802.11b/gと同じ帯域である2.4GHz帯)に対応した広帯域受信機を用いる 必要でしょう。ICOM製IC-R20ではこの周波数をカバーしているので検査できます。  ここで重要なことがあります。ひとつは感知できないノイズには気づかないと いうことです。もうひとつは漏れ出ないノイズは悪さをしないということです。 ●PCのノイズ探索  PCの種類(デスクトップかノートか)、機種によってもノイズ発生の差異が出 ます。他には、液晶なのかCRTなのかといった違いによってもノイズ発生の差異が 出ます。  例えば、100Hz台では、モニター前面(モニターから出るノイズ)、モニター背 面(モニターのAC電源ラインから出る電磁波ノイズ)からノイズが出ています。 PC用の小型ACアダプタは、一般に大型トランスの不要なスイッチング電源方式の 回路が使われています。この回路は数百Hz程度の高周波で電源ラインをスイッチ ングさせるため、この発振周波数がこの領域にあるのです。  300kHz付近や600kHz付近にも「ブーン」という音のピークがあります。スイッ チング動作の基本周波数だけでなく、デジタル信号特有の整数倍の高周波のノイ ズが、きれいに出ていることがはっきりとわかります。  1.25MHz付近の短波帯域では、「ピッピッ」というノイズが鳴る。液晶ディスプ レイの表示動作と同期してノイズ音が出ています。この基本周波数の倍数にあた る2.5MHz、3.75MHz、・・・でもノイズ音が聞こえます。  実験すると気づくと思いますが、偶数倍の高調波に比べて、奇数倍の高調波成 分にあたるところのノイズ音の方が、よりクリアに聞こえるはずです。デジタル 回路に特有の矩形波は、高調波成分が奇数次ばかりで構成されるという数学的事 実と関係あると推測できます。  他の特殊な例として、プリンタケーブルが長かったり、断線しかかっていると ノイズアンテナになります。人体の静電気ノイズや外部ノイズが、キーボードや マウスに影響を与えてPCへノイズが送られる可能性があります。  PCのACケーブルとプリンタのACケーブル、そしてPCとプリンタを結ぶ信号ケー ブルの合計3つのケーブルがグラウンドループになります。磁界がここを通過する とノイズが発生してしまうため、なるべくループが小さくなりまとめて結線しま す。そのためにはPCとプリンタを近づける必要があります。 ■0x07.) おわりに  今は夏真っ盛りで、雷サージや冷房等の使用といった、ノイズが発生しやすい 時期といえます。もし熱暴走とも違った変なPCトラブルが発生したら、電源周り やノイズ周りが影響している可能性もあります。その際には、このWBのテキスト を参考にしてもらえればと思います。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第12章:お知らせ --- 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 ---- 第13章:著者プロフィール --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x  今回は、各著者によく見るWebサイトを紹介してもらいました。 ■金床 ●Job: プログラマー ●Web: http://guardian.jumperz.net/, http://www.jumperz.net/ ●Mail: anvil@jumperz.net ●Team(Group):JUMPERZ.NET ●よく見るウェブサイトといえば小島先生のセキュmemoですね。日々の情報収集 という意味では、ウェブサイトよりもメーリングリストを利用することが多いで す。あとは釣況を調べるためにいくつか釣り系のサイトを見たりしてるかも… (笑 ■JH ●Job: Student ●Web: http://www.ps4.jp/ ●Mail: tema7アットマークexcite.co.jp ●Team(Group): www.ps4.jp ●Comment: ども。初投稿でした。JHと申します。 これを機にSEOに興味を持って頂ければ幸いです。 アフィリエイトに対してもそれなりに有効な手段ですので、是非SEOをお使いくだ さい。そういえば「アフィリエイトに特化したSEO」なんて記事、需要あるのかな 〜? ●よく見ているWebサイトまたはお気に入りのWebサイト  お気に入りはYahoo! JAPAN(http://www.yahoo.co.jp/)です。トピックスやお 知らせなど、最新ニュースが一括収集できちゃいます!!  後はGoogleや、http://code.ps4.jp/log/とかですかね。前者はGoogleニュース のニュース アラートってリンクから、 Yahoo!とかGoogleって単語を登録するだ けで、関連する最新ニュースが手元に即届きます。はてなアンテナ並に有益です。 後者は管理サイトなので、一応チェックしてます。 ■marodc ●Job: (一応)Student ●Web: http://marodc.xrea.jp/ ●Mail: ag.tmmr@gmail.com ●Team(Group):none ●Comment:  はじめまして、初投稿のmarodcと申します。拙著の感想はいかがでしたでしょ うか。至らない点多々あると思いますが、今後の勉強のためにも是非ご感想をメ イルしていただければと思います。  さて、一応得意分野は解析やらその辺のはずなのですが、今回はサリンと、化 学系の分野に走ってみました。ずいぶんとさわりだけですが、現在裏情報などと 称して出回っているサリン合成法などに比べればかなり踏み込んで解説したと自 負しております。反応過程に関しては実際の実験による裏付けをしていないため、 かなりアヤシイものが多々ありますが…KuRaReさん登場願います(笑)。  今後も、たぶん解析ネタ以外で投稿することになると思いますので、どうぞお 見知りおきのほどよろしくお願いします。 ●よく見ているWebサイト:  Sleipnirカウントによると、やはり某巨大掲示板が多いのですが、それにもま して「OCN翻訳」とか「cracks.am」などと言ったツール系のサイトがバシバシカ ウントに入っています。おれってこんなに翻訳したんだなあ、と(笑)。 ■Will ●Job:Student ●Web:http://will.wbjapan.com/ ●Mail:Will_net@hotmail.co.jp ●Team(Group): Anti-WMAC Network ●Comment: ついに脆弱性関係から脱出?しましたw あんまりUG系の話ではないのですが、 キーロガー関係で…ゴホゴホ。MFCは邪魔くさいのでcrackmeを作るときぐらいし か触りませんからかなりヤバイコードに…。趣味程度ならC#で十分だと思います がね。MFCなんか使わなくても。それにしても次回は何をテーマにするかな…。 ●よく見ているWebサイト  う〜んmixiでしょうか。多くの方と知り合えましたし、いろんな方の意外な一 面を見る事ができ自分の世界が広がりました。 ■Narusase ●Job: Student ●Web: (裏)雑学の博物館(http://k-o-m.hp.infoseek.co.jp/) ●Mail: narusase@mcn.ne.jp ●Team(Group): N/A ●Comment:  こんにちわ、Narusase(ナルサス)です。今回はようやっとハニーポットの本体 となるhoneydの登場です。色々と面白いソフトですので一度じっくり遊んでみる のもいいかも知れませんね(笑  今回でハニーポットの導入が完了し、次回から何回かかけて設定の話をしてい きたいと思っています。  続かないと思っていた、はてなダイアリーは気が付けばもう二ヶ月間もきっち り付けてることに最近気づきました。  ま、書いてる内容は独り言ばっかりで乏しいんですけどね(苦笑  サイトの方はまあ、ヘタレな文章と、未熟な技術、ヘボいプログラムを紹介す るサイトということで、暇があったらあら探しでもしてみてください。誤植とか ミスとかはBBSにでも書いてくだされば、こっそり修正しときます(笑 ●よく見ているWebサイトまたはお気に入りのWebサイト:  そうですね、自分の所のはてなはよく見ます・・・ぇ?だめ? 真面目に行きます か(笑 ・セキュリティホール memo (http://www.st.ryukoku.ac.jp/~kjm/security/memo/)  まあ、定番ですな。 ・極楽せきゅあ日記 (http://d.hatena.ne.jp/sonodam/) ・B-) の独り言(http://d.hatena.ne.jp/hideakii/) ・ハニーポッターの部屋(http://d.hatena.ne.jp/sonodam/) ・ハニーポット&フォレンジックな方々の所です。 ・*失 言 小 町*(http://d.hatena.ne.jp/ryoko_komachi/)  ネタ?  全体的にはセキュリティ関連の人のはてなが巡回ルートって感じですね・・・。 ■Taka John Brunkhorst ●Job: Training Flight Pilot ●Web: http://www.antiwmac.com/ ●Mail: contact[at]antiwmac[dot]com ●Team(Group): Anti-WMAC,EndorphineCoding,XlusiveHosting etc ●Comment:  つい最近SourceForgeで新しいプロジェクトを始めました。申し込みをしてから 何故か2、3時間でOKが出ました。いきなりOKされたので現時点ではまだ公開でき る状態じゃありません。べースはできているので近いうちに完成します。 http://uguru-utils.sourceforge.net/ ●よく見ているWebサイト: ・Slashdot(http://www.slashdot.org/) ・Gentoo Linux Forum(http://forums.gentoo.org/) ・LinuxForum(http://www.linuxforum.com/) ・SourceForge(http://sourceforge.net/) ■Defolos ●Job:Student ●Web:http://scel.fc2web.com/ ●Mail:pan1124@luck.ocn.ne.jp ●Team(Group):none ●Comment:  こんにちは、Defolosです。ピッキングとナイフメーキングとナイフファイティ ングの訓練(最近できてません)、PCが趣味のごく普通の学生です。 ●よく見るWebサイト: ・Packet Storm(http://www.packetstormsecurity.org/)  いわずと知れたハック関連サイトですね。よくPHSからアクセスして読んでます。 ・霜葉庵(http://ww4.enjoy.ne.jp/~momiji.osm/)  ここのラテン語の解説ページが分かりやすくてよく参照してます。 ・初心者のためのポイント学習C言語(http://www9.plala.or.jp/sgwr-t/)  よく参照してます。初歩的な関数を忘れてしまったときに便利ですよ。 ■くろいみやたん ●Job:Student ●Mail:hyouja@1mg.jp ●Team(Group):N/A ●Comment:  高校一年の時、終わりかけたUGブームに巻き込まれアンチフォレンジックスの 知識を蓄える。さらに高校三年の時夏キャンプと呼ばれるものに参加。以来一気 にセキュリティ界へのめり込む。  得意な分野は主に社会工学で、時々人格を変えていろんな人に近づきに行きま す。他にはmp3プレーヤ作りなど。よくそばを食べるオフを主催したりしています。 ●よく見るWebサイト:  mixiです。続かないと思っていたら、すごいすごい人とかと繋がったりして抜 けられなくなりました(汗。今では毎日しっかりチェックしています(笑)。 ■右サイド ●Job:Student ●Web:右サイド(http://www3.pf-x.net/~right-hand-side/) ●Mail:right-hand-side@mail3.pf-x.net ●Team(Group):N/A Comment:  今回初投稿の右サイドです。コメント書くの苦手なんです。一度しかないWBへ の投稿なので何回となくコメントを書き直したが、結局現在の文章へ至たる...orz ■Kenji Aiko ●Job: Student ●Web: http://ruffnex.oc.to/kenji/ ●Mail: kenji@ruffnex.oc.to ●Team(Group): N/A ●Comment:  今回ほどタイトルをどうしようかと迷った記事はありませんでした(笑)。一 時間ほどいろいろと考えた結果、結局「アセンブラとPEフォーマットとマシン語 の注入」というタイトルにおさまったのですが、これもあまり気に入っていなか ったりします(^^;。いや、タイトルを決めるって意外と大変なのかもしれないで すね。  さて、話は変わりますが、私の新著である「アセンブリ言語の教科書」が7月2 1日に発売されました。純粋なアセンブラの解説本なので、興味がある方はぜひ読 んでみてください。今回の内容はそれに関連した…というよりも、本当は本書に このネタも書きたかったのですが、紙面の関係で止めてしまったものです。なの で、「アセンブリ言語の教科書」を読んだあと、もう一度今回のテキストを読ん でもらえると有り難いです。 ●お気に入りのWebサイト: ・BLUE 雑文 BLUE(http://www.enpitu.ne.jp/usr8/bin/list?id=84955&pg=000000) ・我が妻との闘争(http://www.117.ne.jp/~kure/waga/yometop.html) ・WisdomSoft(http://wisdom.sakura.ne.jp/) ■IPUSIRON ●Job:ネオニート ●Web:http://akademeia.info/ ●Mail:ipusiron@ruffnex.oc.to ●Team(Group): ruffnex,h@cksection,backsection ●Comment:  『ハッカーの教科書・完全版』の最後の追い込みと重ったので、2ヶ月ぶりのW Bになってしまいました。新しい参加者も何人かいて嬉しい限りです。また、何人 かはレギュラーになりつつありますね。もっともっと盛り上がっていっていくと 楽しいです。とりあえずは継続が重要ですね。 ●よく見るWebサイト:  基本的にmixiでしょうか。mixi依存症になりつつあります。  意外にもセキュリティ関係サイトはあまり見ていません。特別な調べ物をする ということでなければ、紙媒体でないと文章を読む気になかなかならないのです。