動的APIフッキング時にフッキングを行うためのコードであるフックの再帰的な実行と定義されるフックの再進入を防止するための装置において、前記動的APIフッキングの開始時点に呼び出されるフック関数の呼び出し如何を示す状態情報フラグを設定または解除する状態情報管理モジュールと、前記フック関数の呼び出し時に前記状態情報フラグが設定されていれば、前記フック関数の呼び出しが前記フックの実行過程で行われたと判断し、元々実行の要請されたプログラムを行わせる再進入防止モジュールと、を備えることを特徴とするフック再進入防止装置。前記状態情報フラグは、前記フック関数に対応してスレッド別に識別可能な全域データ変数、スレッド地域保存所、静的データ変数またはデータ客体に記録されることを特徴とする請求項1に記載のフック再進入防止装置。前記フックの実行過程でスレッドが生成される時点に生成されたスレッドの状態情報を設定するスレッド生成感知モジュールをさらに備え、前記再進入防止モジュールは、前記スレッド生成感知モジュールによって状態情報が設定されているスレッドによって前記フック関数が呼び出されれば、前記フック関数の呼び出しが前記フックの実行過程で行われると判断することを特徴とする請求項1または2に記載のフック再進入防止装置。動的APIフッキング時にフッキングを行うためのコードであるフックの再帰的な実行と定義されるフックの再進入を防止するための方法をコンピュータで実行させるためのプログラムを記録したコンピュータで読み取り可能な記録媒体において、a原本関数または前記フックの実行過程で行われる下位関数によって、前記動的APIフッキングの開始時点に呼び出されるフック関数が呼び出されれば、前記フック関数に対応する関数情報に設定されている状態情報フラグの値を確認する段階と、b前記状態情報フラグ値が設定されていなければ、前記フック関数の呼び出しが前記原本関数により行われると判断して前記状態情報フラグ値を設定し、前記状態情報フラグ値が設定されていれば、前記フック関数の呼び出しが前記フックの実行過程で行われたと判断し、元々実行の要請されたプログラムを行わせる段階と、を含むことを特徴とする記録媒体。前記状態情報フラグは、前記フック関数に対応してスレッド別に識別可能な全域データ変数、スレッド地域保存所、静的データ変数またはデータ客体に記録されることを特徴とする請求項4に記載の記録媒体。前記フックの実行過程でスレッドの状態情報を設定する段階をさらに含み、前記b段階で、前記状態情報が設定されているスレッドによって前記フック関数が呼び出されれば、前記フック関数の呼び出しが前記フックの実行過程で行われると判断することを特徴とする請求項4または5に記載の記録媒体。本発明が解決しようとする技術的課題は、動的APIフッキング時に下位関数の原本関数の再呼び出しによるフック再進入を防止できる装置を提供するところにある。本発明が解決しようとする他の技術的課題は、動的APIフッキング時に下位関数の原本関数の再呼び出しによるフック再進入を防止するための方法をコンピュータで実行させるためのプログラムを記録したコンピュータで読み取り可能な記録媒体を提供するところにある。前記技術的課題を解決するための、本発明によるフック再進入防止装置に関する望ましい実施形態は、動的APIフッキング時にフッキングを行うためのコードであるフックの再帰的な実行と定義されるフックの再進入を防止するための装置において、前記動的APIフッキングの開始時点に呼び出されるフック関数の呼び出し如何を示す状態情報フラグを設定または解除する状態情報管理モジュール;前記フック関数の呼び出し時に前記状態情報フラグが設定されていれば、前記フック関数の呼び出しが前記フックの実行過程で行われたと判断し、元々実行の要請されたプログラムを行わせる再進入防止モジュール;を備える。前記他の技術的課題を解決するための、本発明による記録媒体は、動的APIフッキング時にフッキングを行うためのコードであるフックの再帰的な実行と定義されるフックの再進入を防止するための方法をコンピュータで実行させるためのプログラムを記録したコンピュータで読み取り可能な記録媒体において、a原本関数または前記フックの実行過程で行われる下位関数によって、前記動的APIフッキングの開始時点に呼び出されるフック関数が呼び出されれば、前記フック関数に対応する関数情報に設定されている状態情報フラグの値を確認する段階;b前記状態情報フラグ値が設定されていなければ、前記フック関数の呼び出しが前記原本関数により行われると判断して前記状態情報フラグ値を設定し、前記状態情報フラグ値が設定されていれば、前記フック関数の呼び出しが前記フックの実行過程で行われたと判断し、元々実行の要請されたプログラムを行わせる段階;を含むフック再進入防止方法をコンピュータで実行させるためのプログラムを持つ。本発明によるフック再進入防止装置及びその方法をコンピュータで実行させるためのプログラムを記録した記録媒体によれば、フックレイヤーとは独立的な進入/離脱レイヤーとして機能することで、フックレイヤーをフックから安全に隔離させるようになって、動的APIフッキング時にフックレイヤー内のフックルチンの実行過程で、下位関数の原本関数の再呼び出しによるフック再進入を防止できる。また応用プログラムからフックレイヤーに進入する開始点でフックの再進入如何を判断する構造を採用することで、プログラム作成時にフック再進入防止のための別途のコードを作成する負担を低減させる。以下、添付した図面を参照して、本発明によるフック再進入防止装置及びその方法をコンピュータで実行させるためのプログラムを記録した記録媒体の望ましい実施形態について詳細に説明する。図4は、本発明によるフック再進入防止装置に関する望ましい実施形態の構成を示す図面である。図4を参照すれば、本発明によるフック再進入防止装置に関する望ましい実施例400は、状態情報管理モジュール410及び再進入防止モジュール420を備える。状態情報管理モジュール410は、アプリケーションの原本関数の呼び出しによって駆動されるフック関数の呼び出し時点に、状態情報フラグの値に基づいてフック関数の呼び出し地点を判断する。この時、原本関数の呼び出しがフックレイヤーの内部から行われたか、またはフックレイヤーの外部から行われたかを識別できる最小単位を設定する必要がある。本発明では、識別単位としてスレッドthreadを使い、その理由は次の通りである。あらゆる関数は動作時点に一つのスレッドに属し、任意時点のスレッド上の関数は、フックレイヤーの内部と外部のうち一つに存在し、同時に2つの状態を持つか、または2つの状態にいずれも該当しない場合は発生しない。またフックレイヤーの内部で生成されるスレッドを除外すれば、フックレイヤーに進入した後で行われるあらゆる関数は、スレッド単位でフックレイヤーに進入した関数の下位関数である。このような状態情報フラグの値は、フック関数に対応する関数情報と設定され、メモリ430に保存される。この時、状態情報フラグの値はスレッド別に識別可能な全域データ変数、スレッド別に情報管理可能なスレッド地域保存所ThreadLocalStorage:TLS、スレッド別に情報管理可能な静的データ変数、スレッド別に情報管理可能なその他のデータ客体例えば、Workerthread、Singletonobectなどなどに設定される。そして、状態情報管理モジュール410は、該当値が保存されているメモリ430に状態情報フラグ値を設定または解除し、再進入防止モジュール420は、該当値の保存されているメモリ430から状態情報フラグ値を読み出す。このために状態情報フラグは、進入/退出情報を識別するために少なくともブーリアンBooleanの形態を持たねばならない。もし、フック関数に対応する関数情報に状態情報フラグの値が設定されていなければ、状態情報管理モジュール410は、フック関数がフックレイヤーの外部から呼び出されたと判断し、状態情報フラグの値を設定する。これとは異なってフック関数に対応する関数情報に状態情報フラグの値が設定されていれば、状態情報管理モジュール410は、フック関数がフックレイヤーの内部から呼び出されたと判断する。さらに状態情報管理モジュール410は、フックルチン上の最後の下位関数の実行による結果値がシステムレイヤーに返還されれば、フック関数に対応する関数情報に設定されている状態情報フラグの値を解除する。再進入防止モジュール420は、フック関数の再呼び出し時にメモリ430に記録されているフック関数に対応する状態情報フラグの値に基づいて、フックルチンの実行及びフックレイヤーの離脱を選択的に行う。図5には、状態情報フラグの値による再進入防止モジュール420によるAPI呼び出し分岐過程が図示されている。図5を参照すれば、再進入防止モジュール420は、アプリケーション510からフックレイヤー520に進入する開始点であるフック関数が進入点であり、フックレイヤー520で下位レイヤーの原本APIを呼び出してシステムレイヤー530に出かける位置が離脱点になる。この時、フックレイヤー520に対する進入点はフック関数に対する呼び出し点と一致する。離脱点の具現のためにプログラミング段階で明示的に原本関数を呼び出す構造は、前述したようにあらゆるモジュールに対して具現されねばならない問題のため、本発明では進入点で共に処理する。以上で述べた本発明によるフック再進入防止装置に関する望ましい実施例400は、実行単位に対応する複数の構成要素を備える。しかし、具現形態によって状態情報管理モジュール410及び再進入防止モジュール420は一つのモジュールに統合される。この時、本発明によるフック再進入防止装置は、システムレイヤーとフックレイヤーとの間に位置し、状態情報フラグの設定如何によってフックレイヤー上のフックルチンを行わせるか、またはシステムレイヤーに値を返還するフィルタの形態をとる。図6には、再進入防止モジュール420によるフック再進入防止過程が示されている。図6を参照すれば、呼び出し者であるアプリケーション610がシステムレイヤー620上の原本関数Hを呼び出せば、動的APIフッキングによってフックレイヤー630自体のフックルチンすなわち、下位関数であるH0、H1、H2、VCなどが行われる。この過程で、もし下位関数VCが原本関数Hを再び呼び出せば、フック再進入を考慮しないAPIフッキング技法では、図7に示したようなコールスタックから分かるように、H0、H1、H2、VCなどが再び行われるという問題が生じる。これに対して本発明では、状態情報管理モジュール410がフッキング関数であるH0に対応する関数情報の状態情報フラグ値を設定し、次いで、下位関数VCが原本関数Hを再び呼び出すことでフッキング関数H0が呼び出されれば、再進入防止モジュール420は、フッキング関数H0の状態情報フラグ値を確認した後でシステムレイヤー620に値を返還する。そして、システムレイヤー620は下位関数VCに値を返還し、したがって、VCが呼び出された以後に計画されているフックルチンによって、次の下位関数であるH3が行われる。図8には、このような本発明によるフック再進入防止手続きを行う時のコールスタックが示されている。図9は、本発明によるフック再進入防止方法に関する望ましい実施形態の実行過程を示すフローチャートである。図9を参照すれば、アプリケーション610が原本関数を呼び出すことで駆動されるか、または下位関数による呼び出しによってフック関数が呼び出されればS900、フック再進入防止装置400は、フック関数に対応する関数情報に設定されている状態情報フラグの値を確認するS910。もし状態情報フラグ値が設定されていなければ、フック再進入防止装置400は、フック関数がフックレイヤーの外部から呼び出されたと判断し、状態情報フラグの値を設定するS920。この場合には、フックルチンによる下位関数が順次に行われるS930。これに対して状態情報フラグ値が設定されていれば、フック再進入防止装置400は、フック関数がフックレイヤーの内部から呼び出されたと判断し、システムレイヤー620に値を返還するS940。したがって、この場合にはシステムレイヤー620が下位関数VCに値を返還し、次いで、フックルチンによって次下位関数が行われるS930。次いで、フック再進入防止装置400は、フックルチン上の最後の下位関数の実行による結果値が入力されればS950、システムレイヤー620に結果値を返還するS960。一方、前述したような本発明によるフック再進入防止装置及び方法についての実施形態は、外部からのフックレイヤーへの最初進入時にフック関数に対応する関数情報の状態情報フラグ値を設定することで、フックルチンの実行によってフックレイヤーの外部からフック関数が再び呼び出される場合に、フック関数に対応する関数情報の状態情報フラグ値に基づいて再進入を防止できる。しかし、前述したような本発明によるフック再進入防止装置及び方法についての実施形態は、フックレイヤーの内部で生成されたスレッドによってフック関数が再び呼び出されれば、再進入防止機能が行われないという問題がある。したがって、フックレイヤーの内部で生成されるスレッドにも再進入防止機能を提供するためには、スレッドの生成を監視し、生成されたスレッドについての識別フラグを設定する構成をさらに備えねばならない。図10は、本発明によるフック再進入防止装置及び方法で、フックレイヤーの内部で生成されるスレッドが存在しない場合の実行過程を示す図面である。図10に示された実施形態は、ファイル入出力を監視して生成されるファイルデータを暗号化するフック関数の実行過程で、フック関数の動作状況をファイルに記録するための付加的なログ関数を含む。図10を参照すれば、アプリケーション1010がデータ書き込み関数を呼び出すことでフック関数が呼び出されればS1000、フック再進入防止装置1020は、原本関数であるデータ書き込み関数に対応する状態情報フラグの値または、フック関数に対応する状態情報フラグの値を設定するS1005。次いで、フックレイヤー1030内に設定されたフックルチンによってデータの暗号化関数が呼び出されS1010、暗号化関数によってデータが暗号化されるS1015。そして、フック再進入防止装置1020は、フックレイヤー1030から暗号化されたデータを受信しS1020、暗号化されたデータをシステムレイヤー1040に伝達するS1025。次いで、システムレイヤー1040は、メモリにデータを記録するS1030。一方、フックレイヤー1030内に設定されたフックルチンによって、ログ関数によってデータの書き込み動作についてのログデータが生成されS1035、生成されたログデータをメモリに書き込むためのデータ書き込み関数が再び呼び出されるS1040。このようなデータ書き込み関数の再呼び出しによってフック関数も再び呼び出され、フック再進入防止装置1020は、データ書き込み関数に対応する状態情報フラグの値または、フック関数に対応する状態情報フラグの値を確認するS1045。前記のS1005段階で、データ書き込み関数に対応する状態情報フラグの値または、フック関数に対応する状態情報フラグの値が設定されたところ、フック再進入防止装置1020は、フックルチンへの進入を遮断してシステムレイヤー1040にログデータを伝達するS1050。次いで、システムレイヤー1040は、メモリにログデータを記録するS1055。以上の動作によってログ関数による再進入が防止されることで、ログデータが暗号化されずに平文に保存される。図11は、本発明によるフック再進入防止装置及び方法で、フックレイヤーの内部で生成されるスレッドが存在する場合の実行過程を示す図面である。図11に示された実施形態は、ファイル入出力を監視して生成されるファイルデータを暗号化するフック関数の実行過程で、フック関数の動作状況をファイルに記録するための付加的なログ関数を含み、ログ関数は、内部的にWorkerthreadLogThreadにログデータを伝送する。この時WorkerthreadLogThreadは、フックレイヤーの内部における入出力を引き起こす。図11を参照すれば、先ず、フックレイヤー1130の内部でWorkerthreadLogThreadが生成されるS1100。次いで、アプリケーション1110がデータ書き込み関数を呼び出すことでフック関数が呼び出されればS1105、フック再進入防止装置1120は、原本関数であるデータ書き込み関数に対応する状態情報フラグの値または、フック関数に対応する状態情報フラグの値を設定するS1110。次いで、フックレイヤー1130内に設定されたフックルチンによってデータの暗号化関数が呼び出されS1115、暗号化関数によってデータが暗号化されるS1120。そして、フックレイヤー1130から暗号化されたデータが受信されればS1125、フック再進入防止装置1120は、暗号化されたデータをシステムレイヤー1140に伝達するS1130。次いで、システムレイヤー1140はメモリにデータを記録するS1135。一方、フックレイヤー1130内に設定されたフックルチンによって呼び出されたログ関数が、データの書き込み動作についてのログデータを生成するS1140。そして、ログ関数は、フックレイヤー1130内でWorkerthreadLogThreadにログデータを伝送するS1145。次いで、WorkerthreadLogThreadは、フックレイヤー1130内で生成されたログデータをメモリに書き込むためにデータ書き込み関数を呼び出すS1150。このようなデータ書き込み関数の再呼び出しによってフック関数も再び呼び出されるが、フック再進入防止装置1120は、データ書き込み関数または、フック関数の再呼び出しがフックレイヤー1130の外部からの進入ではないため、再進入と認識できなくなる。したがって、フック再進入防止装置1120は暗号化関数を呼び出しS1155、呼び出された暗号化関数は、ログデータについての暗号化を行うS1160。そして、フックレイヤー1130から暗号化されたログデータを受信すればS1165、フック再進入防止装置1120は、受信された暗号化されたログデータをシステムレイヤー1140に伝達するS1170。次いで、システムレイヤー1140はメモリにデータを記録するS1175。図10及び図11を参照して説明したように、本発明によるフック再進入防止装置及び方法についての実施形態は、フックレイヤーの内部で生成されたスレッドによって原本関数またはフック関数が再び呼び出される場合にフック再進入を防止できないという問題がある。このような問題を解決するためには、スレッドの生成を感知する構成要素がさらに必要である。図12は、本発明によるフック再進入防止装置及び方法の他の実施形態によるフック再進入防止過程を示す図面である。図12に示されたフック再進入防止過程を行う装置は、図4に示された実施形態の構成要素に加えてスレッド生成感知モジュールを備える。図12を参照すれば、先ずフック再進入防止装置1220は、フックレイヤーの状態を初期化しS1200、フックレイヤー1230の内部でWorkerthreadが生成されるS1205。そして、フック再進入防止装置1220は、Workerthreadを生成するParentThreadを監視し、ParentThreadの状態がフックレイヤー1230の内部かまたは外部かを把握するS1210。そして、フック再進入防止装置1220は、ParentThreadの状態がフックレイヤー1230の内部である場合に生成されるChildThreadのフックレイヤー設定情報に、ParentThreadの設定情報を相続するS1215。このような動作は、スレッド生成感知モジュールによって行われる。この時、スレッド生成感知モジュールは、フックレイヤー1230の内部でスレッドが生成される時点にParentThreadの状態情報を進入と設定するか、またはスレッドの生成時点にParentThreadのスタック情報を追跡して、特定のスレッドがフックレイヤー1230の内部で生成されたか、または外部で生成されたかを感知する。またスレッド生成感知モジュールは、スレッドの生成を把握するためにスレッド生成API例えば、Win32システムではCreateThread、_beginthread、_beginthreadexなどを監視せねばならず、さらにはあらゆるスレッドの生成如何を監視せねばならない。次いで、アプリケーション1210がデータ書き込み関数を呼び出すことでフック関数が呼び出されればS1220、フック再進入防止装置1220は、原本関数であるデータ書き込み関数に対応する状態情報フラグの値または、フック関数に対応する状態情報フラグの値を設定するS1225。次いで、フックレイヤー1230内に設定されたフックルチンによってデータの暗号化関数が呼び出されS1230、暗号化関数によってデータが暗号化されるS1235。そしてフック再進入防止装置1220は、フックレイヤー1230から暗号化されたデータを受信しS1240、暗号化されたデータをシステムレイヤー1240に伝達するS1245。次いで、システ4ムレイヤー1240はメモリにデータを記録するS1250。一方、フックレイヤー1230内に設定されたフックルチンによって呼び出されたログ関数が、データの書き込み動作についてのログデータを生成するS1255。そして、ログ関数は、フックレイヤー1230内でWorkerthreadLogThreadにログデータを伝送するS1260。次いで、WorkerthreadLogThread関数は、フックレイヤー1230内で生成されたログデータをメモリに書き込むためにデータ書き込み関数を呼び出すS1265。この時、データ書き込み関数の再呼び出しによってフック関数も再び呼び出され、フック再進入防止装置1220は、WorkerthreadLogThread関数のフックレイヤー設定情報を確認するS1270。前記のS1115段階で、WorkerthreadLogThread関数の設定情報が進入と設定されたところ、フック再進入防止装置1220は、フックルチンへの進入を遮断してシステムレイヤー1240にログデータを伝達するS1275。次いで、システムレイヤー1240はメモリにログデータを記録するS1280。以上の動作によってログ関数による再進入が防止されることで、ログデータが暗号化されずに平文に保存される。本発明はまた、コンピュータで読み取り可能な記録媒体にコンピュータで読み取り可能なコードとして具現できる。コンピュータで読み取り可能な記録媒体は、コンピュータシステムによって読み取られるデータが保存されるあらゆる記録装置を含む。コンピュータで読み取り可能な記録媒体の例としては、ROM、RAM、CD-ROM、磁気テープ、フロッピー登録商標ディスク、光データ保存装置などがあり、またキャリアウエーブ例えば、インターネットを通じる伝送の形態で具現されるものも含む。またコンピュータで読み取り可能な記録媒体は、ネットワークに連結されたコンピュータシステムに分散され、分散方式でコンピュータで読み取り可能なコードが保存されて行われる。以上、本発明の望ましい実施形態について図示して説明したが、本発明は前述した特定の望ましい実施形態に限定されず、特許請求の範囲で請求する本発明の趣旨を逸脱せずに、当業者ならば多様な変形実施が可能であるということはいうまでもなく、かかる変更は、特許請求の範囲に記載の範囲内にある。