分かりやす〜い
コンピュータ技術情報

TOPに戻る
▼Processor
バッファオーバーフロー
┣ 異常な動作
┣ 本当に怖い事
┣ プログラムを作る
┣ バッファオーバーフロ
┃ ーを発生させる

┣ スタック領域の構成
┣ 何故強制終了されるの
┃ か?

┣ 強制終了されないよう
┃ に作り変える

┣ 任意のコードを実行す
┃ る

┣ of1.cとof2.cとの違い
┣ 例外
┣ 例外ハンドラの行う事
┣ of3.cを作る
┣ of1.cとof3.cとの違い
┣ of3.exeの例外ハンド
┃ ラ

┣ of3.exeを強制終了す
┃ るのは?

┣ 例外ハンドラの特徴
┣ Blue Screen
┣ BufferOverFlow応用
┃ プログラム

┗ 機械語の説明

Copyright(C) 2001-2002.ugpop. All rights reserved.




■デジタル用語辞典:
■ 例外ハンドラの行う事 ■

前回は「割り込み」について説明しました。
「割込み」というのは、ある処理を行っている時に、何らかの
理由により別の処理を行わなければならなくなった時の為に用
意されているのでした。

前回のイメージをもう1度見てみましょう。


┌──────────────────────────┐
│         OF1.EXE          │
│                          │
└───┬──────────────────────┘
    │                       スタック領域
    │call命令               格納 ┌──────┐
    ├─────────────────────→│ 呼出し元 │
    │    制御を移行┌────────┐   └──────┘
    ├────────→│ main関数 │
    │         │        │
    │         └───┬────┘
    │             │
               ┌──┴──┐
               │コピー処理│
               └──┬──┘
                  │×バッファオーバーフロー発生
                  │         スタック領域
                  │        ┌──────┐
                  ├───────→│1F 1E 1D 1C │
                  │        └──────┘
                  │処理終了     スタック領域
                  │どこへ戻るか参照┌──────┐
                  │←───────┤1F 1E 1D 1C │
                  │        └──────┘
               ×××××××
               ×そんな所に×
               ×実行可能な×
               ×プログラム×
               ×ありません×
               ×××××××
                  │
            ┌─────┘★例外発生
            │
            ↓
      ┌──────────┐
      │          │
      │例外ハンドラ動作開始│
      │          │
      └──────────┘


バッファオーバーフローが発生し、インテルプロセッサは次に
どこに制御を移行させれば良いのか分からなくなっています。

この様に、どうにも動きようの無くなってしまった時に動作す
る割込みの事を特に「例外」と呼ぶのでした。

また、例外発生時に動作するプログラムの事を「例外ハンドラ」
という事も前回説明しました。

今回は、「例外ハンドラ」起動後にどの様なことが行われるの
か説明します。


UNIXなどの場合、例外が発生した場合はcore(コア)ダンプと
いうデバッグ用のファイルを出力してアプリケーションソフト
を強制終了する処理が行われます。

Windowsの場合、「不正な処理が行われたので強制終了します。」
などのメッセージを表示する為のプログラムが起動されます。

以下に、例外発生後に「メッセージを表示するプログラム」が
起動されているイメージを示します。


            ┌─────┘★例外発生
            │
            ↓
      ┌──────────┐
      │          │
      │例外ハンドラ動作開始│
      │          │
      └─────┬────┘
            │
            │
            ↓
      ┌──────────┐
      │          │
      │メッセージを表示する│
      │プログラム起動   │
      │          │
      └──────────┘


ここで、「メッセージを表示するためのプログラム」が起動さ
れると書きましたが、実はこのプログラムはただ単にメッセー
ジを表示するだけのプログラムではなく、割込み発生時点のア
プリケーションソフトウェアのさまざまな情報を取得する処理
も行っているようです。

そしてVisual Studioなどをインストールしている方であれば
お分かりになるかと思いますが、アプリケーションソフトウェ
アが強制終了される時に、自動的にデバッガが起動されたりす
ると思います。

このデバッガを起動したりするのもこのプログラムが行うよう
です。

上のイメージでは、「メッセージを表示するプログラム」とだ
け書いていますが、この様にさまざまな処理も行われている、
という事も認識しておきましょう。


そして、ここからが今回1番大切なところなのですが、例外ハ
ンドラが起動するプログラムはそれぞれのアプリケーションソ
フトウェア毎に指定でき、「何を起動するか」という情報は
「スタック領域」に格納されています。

以下に例外ハンドラがスタック領域を参照して、指定された場
所へ制御を移行させているイメージを示します。


            ┌─────┘★例外発生
            │
            ↓
      ┌──────────┐
      │          │
      │例外ハンドラ動作開始│
      │          │
      └─────┬────┘          スタック領域
            │何を起動するか参照     ┌──────┐
            │←─────────────┤メッセージを│
            ↓              │表示するプロ│
      ┌──────────┐         │グラムの場所│
      │          │         └──────┘
      │メッセージを表示する│
      │プログラム起動   │
      │          │
      └──────────┘


上のイメージの様に、例外ハンドラは「どこに制御を移行させ
れば良いか」という情報を、スタック領域から得ているのです。

鋭い方であればここですぐに気が付いたと思いますが、バッフ
ァオーバーフローのバグを利用する事により、「スタック領域
を書き換えてしまう」事が出来ます。

という事は、つまり上のイメージにある「メッセージを表示す
るプログラムの場所」情報も書き換えてしまう事が出来るとい
う事です。

コンピュータウィルスは、「メッセージを表示するプログラム
の場所」情報を書き換えてしまう事により、プログラムを意図
した場所へ移行させようとします。

次回は「メッセージを表示するプログラムの場所」情報を書き
換えてしまうプログラムを実際に作成し、どの様に動作するの
か、確認してみましょう。



▲このページの上へ

▲このページの上へ

←前に戻る    ▲このページの上へ    続きを読む→