保護対象プログラムを記憶する記憶手段と、1つ以上の命令を複数回に亘って繰り返す繰り返し処理を、前記保護対象プログラムの中から検出する繰り返し処理検出手段と、前記繰り返し処理検出手段により検出された繰り返し処理に含まれる命令を、ダミーの命令に置換する偽装手段と、前記偽装手段により置換されたダミーの命令を元の命令に置換する復元処理を、前記保護対象プログラムのうち前記繰り返し処理検出手段により検出された繰り返し処理より前方に挿入する復元処理挿入手段と、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、前記保護対象プログラムのうち前記繰り返し処理検出手段により検出された繰り返し処理より後方に挿入する偽装処理挿入手段と、を備えることを特徴とする自己書き換え処理装置。1つ以上の命令を複数回に亘って繰り返す繰り返し処理を、保護対象プログラムの中から検出する第1のステップと、前記第1のステップにおいて検出した繰り返し処理に含まれる命令を、ダミーの命令に置換する第2のステップと、前記第2のステップにおいて置換したダミーの命令を元の命令に置換する復元処理を、前記保護対象プログラムのうち前記第1のステップにおいて検出した繰り返し処理より前方に挿入する第3のステップと、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、前記保護対象プログラムのうち前記第1のステップにおいて検出した繰り返し処理より後方に挿入する第4のステップと、を備えることを特徴とする自己書き換え処理方法。1つ以上の命令を複数回に亘って繰り返す繰り返し処理を、保護対象プログラムの中から検出する第1のステップと、前記第1のステップにおいて検出した繰り返し処理に含まれる命令を、ダミーの命令に置換する第2のステップと、前記第2のステップにおいて置換したダミーの命令を元の命令に置換する復元処理を、前記保護対象プログラムのうち前記第1のステップにおいて検出した繰り返し処理より前方に挿入する第3のステップと、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、前記保護対象プログラムのうち前記第1のステップにおいて検出した繰り返し処理より後方に挿入する第4のステップと、をコンピュータに実行させるためのプログラム。保護対象プログラムには、for文やwhile文のように、1つ以上の命令を複数回に亘って繰り返す繰り返し処理が含まれる場合がある。この場合において、繰り返し処理の中に、偽装した命令を元の命令に戻す処理や、命令を偽の命令で偽装する処理を挿入したとする。すると、保護対象プログラムの実行の際に、繰り返し処理を実行すると、上述の挿入した処理も複数回に亘って繰り返されることとなり、その結果、オーバーヘッドが大きくなり、パフォーマンスが低下してしまうおそれがあった。そこで、本発明は、上述の課題に鑑みてなされたものであり、保護対象プログラムの解析および改ざんを困難にする自己書き換え処理装置、自己書き換え処理方法、およびプログラムにおいて、保護対象プログラムの実行時におけるパフォーマンスの低下を抑制することを目的とする。本発明は、上記の課題を解決するために、以下の事項を提案している。1本発明は、保護対象プログラム例えば、図6の保護対象プログラム60、60Aに相当を記憶する記憶手段例えば、図1のキャッシュ20に相当と、1つ以上の命令例えば、図6の命令61に相当を複数回に亘って繰り返す繰り返し処理例えば、図6の繰り返し処理BBに相当を、前記保護対象プログラムの中から検出する繰り返し処理検出手段例えば、図1のCPU10に相当と、前記繰り返し処理検出手段により検出された繰り返し処理に含まれる命令例えば、図6の命令61に相当を、ダミーの命令例えば、図6の命令61Aに相当に置換する偽装手段例えば、図1のCPU10に相当と、前記偽装手段により置換されたダミーの命令を元の命令例えば、図6の命令61に相当に置換する復元処理例えば、図6の復元処理62に相当を、前記保護対象プログラムのうち前記繰り返し処理検出手段により検出された繰り返し処理より前方に挿入する復元処理挿入手段例えば、図1のCPU10に相当と、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理例えば、図6の偽装処理63に相当を、前記保護対象プログラムのうち前記繰り返し処理検出手段により検出された繰り返し処理より後方に挿入する偽装処理挿入手段例えば、図1のCPU10に相当と、を備えることを特徴とする自己書き換え処理装置を提案している。この発明によれば、自己書き換え処理装置に、記憶手段、繰り返し処理検出手段、偽装手段、復元処理挿入手段、および偽装処理挿入手段を設けた。そして、記憶手段により、保護対象プログラムを記憶し、繰り返し処理検出手段により、1つ以上の命令を複数回に亘って繰り返す繰り返し処理を保護対象プログラムの中から検出することとした。また、偽装手段により、繰り返し処理検出手段により検出された繰り返し処理に含まれる命令を、ダミーの命令に置換することとした。また、復元処理挿入手段により、偽装手段により置換されたダミーの命令を元の命令に置換する復元処理を、保護対象プログラムのうち繰り返し処理検出手段により検出された繰り返し処理より前方に挿入することとした。また、偽装処理挿入手段により、復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、保護対象プログラムのうち繰り返し処理検出手段により検出された繰り返し処理より後方に挿入することとした。このため、偽装手段により、繰り返し処理に含まれる命令をダミーの命令に置換することができる。したがって、保護対象プログラムの繰り返し処理に含まれる命令を偽装することができ、保護対象プログラムの解析および改ざんを困難にすることができる。また、偽装手段により命令を偽装した保護対象プログラムに対して、復元処理挿入手段により復元処理を挿入するとともに、偽装処理挿入手段により偽装処理を挿入することができる。このため、復元処理を実行することで、ダミーの命令を元の命令に戻すことができ、保護対象プログラムを正しく実行することができる。また、偽装処理を実行することで、処理を終えた命令をダミーの命令に置き換えて、偽装することができる。以上によれば、復元処理を実行してから偽装処理を実行するまでの期間でのみ、命令を正しく読み出すことができ、上述の期間以外では、命令を正しく読み出すことができなくなる。したがって、保護対象プログラムの解析および改ざんをより困難にすることができる。また、復元処理挿入手段により、復元処理を、保護対象プログラムのうち繰り返し処理より前方に挿入し、偽装処理挿入手段により、偽装処理を、保護対象プログラムのうち繰り返し処理より後方に挿入することができる。このため、命令は、繰り返し処理の内部にあるために複数回に亘って実行されるが、復元処理および偽装処理は、繰り返し処理の外部にあるために1回ずつ実行されることとなる。したがって、復元処理および偽装処理が、命令と同様に複数回に亘って実行されてしまうのを防止できるので、その結果、オーバーヘッドを小さくすることができ、保護対象プログラムの実行時におけるパフォーマンスの低下を抑制することができる。2本発明は、1つ以上の命令例えば、図6の命令61に相当を複数回に亘って繰り返す繰り返し処理例えば、図6の繰り返し処理BBに相当を、保護対象プログラム例えば、図6の保護対象プログラム60に相当の中から検出する第1のステップ例えば、図3のステップS11に相当と、前記第1のステップにおいて検出した繰り返し処理に含まれる命令例えば、図6の命令61に相当を、ダミーの命令例えば、図6の命令61Aに相当に置換する第2のステップ例えば、図3のステップS17に相当と、前記第2のステップにおいて置換したダミーの命令を元の命令例えば、図6の命令61に相当に置換する復元処理例えば、図6の復元処理62に相当を、前記保護対象プログラムのうち前記第1のステップにおいて検出した繰り返し処理より前方に挿入する第3のステップ例えば、図3のステップS18に相当と、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理例えば、図6の偽装処理63に相当を、前記保護対象プログラムのうち前記第1のステップにおいて検出した繰り返し処理より後方に挿入する第4のステップ例えば、図3のステップS19に相当と、を備えることを特徴とする自己書き換え処理方法を提案している。この発明によれば、1つ以上の命令を複数回に亘って繰り返す繰り返し処理を、保護対象プログラムの中から検出し、検出した繰り返し処理に含まれる命令を、ダミーの命令に置換することとした。そして、置換したダミーの命令を元の命令に置換する復元処理を、保護対象プログラムのうち検出した繰り返し処理より前方に挿入することとした。また、復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、保護対象プログラムのうち検出した繰り返し処理より後方に挿入することとした。これによれば、上述した効果と同様の効果を奏することができる。3本発明は、1つ以上の命令例えば、図6の命令61に相当を複数回に亘って繰り返す繰り返し処理例えば、図6の繰り返し処理BBに相当を、保護対象プログラム例えば、図6の保護対象プログラム60、60Aに相当の中から検出する第1のステップ例えば、図3のステップS11に相当と、前記第1のステップにおいて検出した繰り返し処理に含まれる命令例えば、図6の命令61に相当を、ダミーの命令例えば、図6の命令61Aに相当に置換する第2のステップ例えば、図3のステップS17に相当と、前記第2のステップにおいて置換したダミーの命令を元の命令例えば、図6の命令61に相当に置換する復元処理例えば、図6の復元処理62に相当を、前記保護対象プログラムのうち前記第1のステップにおいて検出した繰り返し処理より前方に挿入する第3のステップ例えば、図3のステップS18に相当と、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理例えば、図6の偽装処理63に相当を、前記保護対象プログラムのうち前記第1のステップにおいて検出した繰り返し処理より後方に挿入する第4のステップ例えば、図3のステップS19に相当と、をコンピュータに実行させるためのプログラムを提案している。この発明によれば、プログラムをコンピュータに実行させることで、1つ以上の命令を複数回に亘って繰り返す繰り返し処理を、保護対象プログラムの中から検出し、検出した繰り返し処理に含まれる命令を、ダミーの命令に置換することとした。そして、置換したダミーの命令を元の命令に置換する復元処理を、保護対象プログラムのうち検出した繰り返し処理より前方に挿入することとした。また、復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、保護対象プログラムのうち検出した繰り返し処理より後方に挿入することとした。これによれば、上述した効果と同様の効果を奏することができる。本発明によれば、保護対象プログラムの解析および改ざんを困難にすることができるとともに、保護対象プログラムの実行時におけるパフォーマンスの低下を抑制することができる。以下、本発明の実施形態について図面を参照しながら説明する。なお、以下の実施形態における構成要素は適宜、既存の構成要素などとの置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、以下の実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。[自己書き換え処理装置1の構成]図1は、本発明の一実施形態に係る自己書き換え処理装置1の構成を示すブロック図である。自己書き換え処理装置1は、様々な演算処理を行うCPUCentralProcessingUnit10と、保護対象プログラムを記憶するキャッシュ20と、を備える。自己書き換え処理装置1は、後述の第1の処理図2参照を実行した後に、後述の第2の処理図3参照を実行する。これによれば、保護対象プログラムに記述されている命令が偽装され、保護対象プログラムの解析および改ざんが困難となる。[第1の処理]図2は、上述の第1の処理のフローチャートである。ステップS1において、CPU10により、キャッシュ20に記憶されている保護対象プログラムのうち、保護する領域を選択し、ステップS2に処理を移す。なお、ステップS1における保護対象プログラムは、C言語やJava登録商標といった高級言語で記述されているものとする。また、保護する領域は、例えば自己書き換え処理装置1のユーザにより、保護対象プログラムの中から決定されるものとする。ステップS2において、CPU10により、キャッシュ20に記憶されている保護対象プログラムのうち、ステップS1において選択した領域について、アセンブラ記述を取得し、第1の処理を終了する。このステップでは、例えば、保護対象プログラムのうち上述の選択した領域について、コンパイルして、アセンブリプログラムに変換する。[第2の処理]図3は、上述の第2の処理のフローチャートである。ステップS11において、CPU10により、上述のステップS2において取得したアセンブラ記述の保護対象プログラムの制御構造を解析し、ステップS12に処理を移す。この保護対象プログラムの制御構造の解析について、図4を用いて以下に説明する。図4は、ステップS2の処理により得られたアセンブラ記述の保護対象プログラム100を示す図である。保護対象プログラム100には、計算や代入といった処理を行う命令と、条件を満たすか否かの判断を行う分岐の命令と、が記述されている。保護対象プログラム100に対してステップS11の処理が行われると、まず、分岐の命令がそれぞれ判定され、処理が分解される。次に、連続して実行される1以上の処理で構成され、分岐を含まないパスが検出される。次に、for文やwhile文のように、1つ以上の命令を複数回に亘って繰り返す繰り返し処理の含まれている箇所が、検出されたパスの中から特定される。例えば保護対象プログラム100では、破線で囲まれた部分AAが、繰り返し処理に相当する。以上のように、ステップS11の処理を行うと、繰り返し処理の含まれている箇所を特定することができる。図3に戻って、ステップS12において、CPU10により、ステップS11において制御構造を解析したアセンブラ記述の保護対象プログラムの中から、偽装させる命令を選択し、ステップS13に処理を移す。ステップS13において、CPU10により、ステップS12において選択した命令が、ステップS11において特定した繰り返し処理の内部にあるか否かを判別する。そして、内部にあると判別した場合には、ステップS17に処理を移し、内部にはないと判別した場合には、ステップS14に処理を移す。ステップS14において、CPU10により、ステップS12において選択した命令をダミーの命令に置換し、ステップS15に処理を移す。ステップS15において、CPU10により、ステップS14の処理を行った保護対象プログラムのうち、ステップS14において置換したダミーの命令より前方に、復元処理を挿入し後述の図5参照、ステップS16に処理を移す。なお、復元処理とは、ステップS14において置換したダミーの命令を、元の命令に戻す処理のことである。これによれば、保護対象プログラムにおいて、復元処理が、ダミーの命令より前方に記述されることになるので、この命令は、ダミーから元に戻された後に実行されることとなる。ステップS16において、CPU10により、ステップS15の処理を行った保護対象プログラムのうち、ステップS14において置換したダミーの命令より後方に、偽装処理を挿入し後述の図5参照、第2の処理を終了する。なお、偽装処理とは、復元処理の実行により置換された元の命令を、ダミーの命令に置換する処理のことである。これによれば、保護対象プログラムにおいて、偽装処理が、ダミーの命令より後方に記述されることになるので、この命令が実行された後に、偽装処理が実行され、この命令が偽装されることとなる。ステップS17において、CPU10により、ステップS12において選択した命令をダミーの命令に置換し、ステップS18に処理を移す。ステップS18において、CPU10により、ステップS17の処理を行った保護対象プログラムのうち、ステップS17において置換したダミーの命令を含む繰り返し処理より前方に、復元処理を挿入し後述の図6参照、ステップS19に処理を移す。これによれば、保護対象プログラムにおいて、復元処理が、ダミーの命令を含む繰り返し処理より前方に記述されることになるので、この命令は、ダミーから元に戻された後に実行されることとなる。ステップS19において、CPU10により、ステップS18の処理を行った保護対象プログラムのうち、ステップS17において置換したダミーの命令を含む繰り返し処理より後方に、偽装処理を挿入し後述の図6参照、第2の処理を終了する。これによれば、保護対象プログラムにおいて、偽装処理が、ダミーの命令を含む繰り返し処理より後方に記述されることになるので、この命令が実行された後に、偽装処理が実行され、この命令が偽装されることとなる。図5は、ステップS12において選択した命令が繰り返し処理の内部にはない場合における、ステップS14~S16の処理を行う前後での保護対象プログラムを示す図である。保護対象プログラム50は、ステップS12の処理を行った後の保護対象プログラムを示す。保護対象プログラム50には、ステップS1において選択された保護する領域Pが定められており、保護対象プログラム50のうち保護する領域Pには、ステップS12において選択された命令51が記述されている。以上の保護対象プログラム50に対してステップS14~S16の処理を行ったものが、保護対象プログラム50Aである。保護対象プログラム50Aのうち保護する領域Pには、ステップS12において選択された命令51をステップS14において置換した、ダミーの命令51Aが記述されている。また、ダミーの命令51Aより前方には、ステップS15において挿入した、復元処理52が記述されている。また、ダミーの命令51Aより後方には、ステップS16において挿入した、偽装処理53が記述されている。以上の保護対象プログラム50Aを実行する場合について、以下に説明する。まず、復元処理52が実行される。これによれば、ダミーの命令51Aが、元の命令であるステップS12において選択された命令51に戻ることとなる。次に、上述の復元処理52の実行により元に戻った、ステップS12において選択された命令51が実行される。次に、偽装処理53が実行される。これによれば、ステップS12において選択された命令51の実行後に、この命令51がダミーの命令に置換されることとなる。以上によれば、保護対象プログラム50Aでは、復元処理52が実行されてから、偽装処理53が実行されるまでの期間でのみ、元の命令であるステップS12において選択された命令51を正しく読み出すことができ、この期間以外では、命令51を読み出そうとしてもダミーの命令しか読み出すことができない。図6は、ステップS12において選択した命令が繰り返し処理の内部にある場合における、ステップS17~S19の処理を行う前後での保護対象プログラムを示す図である。保護対象プログラム60は、ステップS12の処理を行った後の保護対象プログラムを示す。保護対象プログラム60には、ステップS1において選択された保護する領域Qが定められており、保護対象プログラム60のうち保護する領域Qには、ステップS12において選択された命令61が記述されている。そして、この命令61は、繰り返し処理BBの内部に記述されている。以上の保護対象プログラム60に対してステップS17~S19の処理を行ったものが、保護対象プログラム60Aである。保護対象プログラム60Aのうち保護する領域Qには、ステップS12において選択された命令61をステップS17において置換した、ダミーの命令61Aが記述されている。また、ダミーの命令61Aを含む繰り返し処理BBより前方には、ステップS18において挿入した、復元処理62が記述されている。また、ダミーの命令61Aを含む繰り返し処理BBより後方には、ステップS19において挿入した、偽装処理63が記述されている。以上の保護対象プログラム60Aを実行する場合について、以下に説明する。まず、復元処理62が実行される。これによれば、ダミーの命令61Aが、元の命令であるステップS12において選択された命令61に戻ることとなる。次に、繰り返し処理BBが実行されて、上述の復元処理62の実行により元に戻った、ステップS12において選択された命令61が、複数回に亘って実行される。次に、繰り返し処理BBの実行が完了した後、偽装処理63が実行される。これによれば、ステップS12において選択された命令61の複数回に亘る実行後に、この命令61がダミーの命令に置換されることとなる。以上によれば、保護対象プログラム60Aでは、復元処理62が実行されてから、偽装処理63が実行されるまでの期間でのみ、元の命令であるステップS12において選択された命令61を正しく読み出すことができ、この期間以外では、命令61を読み出そうとしてもダミーの命令しか読み出すことができない。また、命令61は、繰り返し処理BBの内部にあるために複数回に亘って実行されるが、復元処理62および偽装処理63は、繰り返し処理BBの外部にあるために1回ずつ実行されることとなる。以上の自己書き換え処理装置1によれば、以下の効果を奏することができる。自己書き換え処理装置1は、ステップS11の処理を行って保護対象プログラムの制御構造を解析した後に、ステップS14またはステップS17の処理を行って、命令をダミーの命令に置換する。このため、自己書き換え処理装置1は、保護対象プログラムに記述されている命令を偽装することができ、保護対象プログラムの解析および改ざんを困難にすることができる。また、自己書き換え処理装置1は、ステップS14またはステップS17の処理を行って命令を偽装した保護対象プログラムに対して、ステップS15またはステップS18の処理により復元処理を挿入するとともに、ステップS16またはステップS19の処理により偽装処理を挿入する。このため、復元処理を実行することで、ダミーの命令を元の命令に戻すことができ、保護対象プログラムを正しく実行することができる。また、偽装処理を実行することで、処理を終えた命令をダミーの命令に置き換えて、偽装することができる。以上によれば、復元処理を実行してから偽装処理を実行するまでの期間でのみ、命令を正しく読み出すことができ、上述の期間以外では、命令を正しく読み出すことができなくなる。したがって、保護対象プログラムの解析および改ざんをより困難にすることができる。また、自己書き換え処理装置1は、偽装する命令が繰り返し処理の内部にある場合には、ステップS17~S19の処理を行って、復元処理および偽装処理を、偽装する命令を含む繰り返し処理の外部に挿入する。このため、命令は、繰り返し処理の内部にあるために複数回に亘って実行されるが、復元処理および偽装処理は、繰り返し処理の外部にあるために1回ずつ実行されることとなる。したがって、復元処理および偽装処理が、命令と同様に複数回に亘って実行されてしまうのを防止できるので、その結果、オーバーヘッドを小さくすることができ、パフォーマンスの低下を抑制することができる。以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計なども含まれる。例えば、上述の実施形態では、ステップS16またはステップS19において偽装処理を挿入することとした。このため、挿入した偽装処理を実行すると、命令は、ダミーの命令に置換される。ここで、偽装処理の実行により置換されるダミーの命令は、ステップS14またはステップS17において置換したダミーの命令と同一であってもよいし、異なっていてもよい。また、上述の実施形態では、ステップS15またはステップS18において復元処理を挿入した後、ステップS16またはステップS19において偽装処理を挿入したが、これに限らず、例えば偽装処理を挿入した後に復元処理を挿入してもよい。また、上述の実施形態では、偽装する命令について特に制約を設けていないが、goto文のように、無条件に処理を飛ばすことにより、無条件に処理の流れを変化させる命令については、除外することが好ましい。これによれば、オーバーヘッドを効率的に小さくすることができ、パフォーマンスの低下をさらに抑制することができる。