(57)【要約】      （修正有）【課題】保護対象プログラムの解析および改ざんを困難にする自己書き換え処理装置、自己書き換え処理方法、およびプログラムにおいて、保護対象プログラムの実行時におけるパフォーマンスの低下を抑制する。【解決手段】自己書き換え処理装置は、ＣＰＵと、保護対象プログラムを記憶するキャッシュと、を備える。ＣＰＵは、保護対象プログラムの制御構造を解析し（Ｓ１１）、ダミーの命令に偽装する命令が繰り返し処理の内部にある場合（Ｓ１３でＹＥＳ）には、選択した命令をダミーの命令に置換し（Ｓ１７）、ダミーの命令を元に戻す復元処理を繰り返し処理の前方に挿入し（Ｓ１８）、元の命令を再びダミーの命令に偽装する偽装処理を繰り返し処理の後方に挿入する（Ｓ１９）。【選択図】図３
2012208655.tif 000002
【特許請求の範囲】
【請求項１】
保護対象プログラムを記憶する記憶手段と、
１つ以上の命令を複数回に亘って繰り返す繰り返し処理を、前記保護対象プログラムの中から検出する繰り返し処理検出手段と、
前記繰り返し処理検出手段により検出された繰り返し処理に含まれる命令を、ダミーの命令に置換する偽装手段と、
前記偽装手段により置換されたダミーの命令を元の命令に置換する復元処理を、前記保護対象プログラムのうち前記繰り返し処理検出手段により検出された繰り返し処理より前方に挿入する復元処理挿入手段と、
前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、前記保護対象プログラムのうち前記繰り返し処理検出手段により検出された繰り返し処理より後方に挿入する偽装処理挿入手段と、を備えることを特徴とする自己書き換え処理装置。
【請求項２】
１つ以上の命令を複数回に亘って繰り返す繰り返し処理を、保護対象プログラムの中から検出する第１のステップと、
前記第１のステップにおいて検出した繰り返し処理に含まれる命令を、ダミーの命令に置換する第２のステップと、
前記第２のステップにおいて置換したダミーの命令を元の命令に置換する復元処理を、前記保護対象プログラムのうち前記第１のステップにおいて検出した繰り返し処理より前方に挿入する第３のステップと、
前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、前記保護対象プログラムのうち前記第１のステップにおいて検出した繰り返し処理より後方に挿入する第４のステップと、を備えることを特徴とする自己書き換え処理方法。
【請求項３】
１つ以上の命令を複数回に亘って繰り返す繰り返し処理を、保護対象プログラムの中から検出する第１のステップと、
前記第１のステップにおいて検出した繰り返し処理に含まれる命令を、ダミーの命令に置換する第２のステップと、
前記第２のステップにおいて置換したダミーの命令を元の命令に置換する復元処理を、前記保護対象プログラムのうち前記第１のステップにおいて検出した繰り返し処理より前方に挿入する第３のステップと、
前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、前記保護対象プログラムのうち前記第１のステップにおいて検出した繰り返し処理より後方に挿入する第４のステップと、をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自己書き換え処理装置、自己書き換え処理方法、およびプログラムに関する。
【背景技術】
【０００２】
従来より、保護対象プログラムの解析および改ざんを困難にする手法が提案されている（例えば、特許文献１参照）。特許文献１には、保護対象プログラムの解析および改ざんを困難にする手法として、自己書き換えの手法が示されている。この特許文献１に示されている自己書き換えでは、保護対象プログラムに記述されている命令を偽の命令で偽装する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−１９２０６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
保護対象プログラムには、ｆｏｒ文やｗｈｉｌｅ文のように、１つ以上の命令を複数回に亘って繰り返す繰り返し処理が含まれる場合がある。この場合において、繰り返し処理の中に、偽装した命令を元の命令に戻す処理や、命令を偽の命令で偽装する処理を挿入したとする。すると、保護対象プログラムの実行の際に、繰り返し処理を実行すると、上述の挿入した処理も複数回に亘って繰り返されることとなり、その結果、オーバーヘッドが大きくなり、パフォーマンスが低下してしまうおそれがあった。
【０００５】
そこで、本発明は、上述の課題に鑑みてなされたものであり、保護対象プログラムの解析および改ざんを困難にする自己書き換え処理装置、自己書き換え処理方法、およびプログラムにおいて、保護対象プログラムの実行時におけるパフォーマンスの低下を抑制することを目的とする。
【課題を解決するための手段】
【０００６】
本発明は、上記の課題を解決するために、以下の事項を提案している。
【０００７】
（１）  本発明は、保護対象プログラム（例えば、図６の保護対象プログラム６０、６０Ａに相当）を記憶する記憶手段（例えば、図１のキャッシュ２０に相当）と、１つ以上の命令（例えば、図６の命令６１に相当）を複数回に亘って繰り返す繰り返し処理（例えば、図６の繰り返し処理ＢＢに相当）を、前記保護対象プログラムの中から検出する繰り返し処理検出手段（例えば、図１のＣＰＵ１０に相当）と、前記繰り返し処理検出手段により検出された繰り返し処理に含まれる命令（例えば、図６の命令６１に相当）を、ダミーの命令（例えば、図６の命令６１Ａに相当）に置換する偽装手段（例えば、図１のＣＰＵ１０に相当）と、前記偽装手段により置換されたダミーの命令を元の命令（例えば、図６の命令６１に相当）に置換する復元処理（例えば、図６の復元処理６２に相当）を、前記保護対象プログラムのうち前記繰り返し処理検出手段により検出された繰り返し処理より前方に挿入する復元処理挿入手段（例えば、図１のＣＰＵ１０に相当）と、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理（例えば、図６の偽装処理６３に相当）を、前記保護対象プログラムのうち前記繰り返し処理検出手段により検出された繰り返し処理より後方に挿入する偽装処理挿入手段（例えば、図１のＣＰＵ１０に相当）と、を備えることを特徴とする自己書き換え処理装置を提案している。
【０００８】
この発明によれば、自己書き換え処理装置に、記憶手段、繰り返し処理検出手段、偽装手段、復元処理挿入手段、および偽装処理挿入手段を設けた。そして、記憶手段により、保護対象プログラムを記憶し、繰り返し処理検出手段により、１つ以上の命令を複数回に亘って繰り返す繰り返し処理を保護対象プログラムの中から検出することとした。また、偽装手段により、繰り返し処理検出手段により検出された繰り返し処理に含まれる命令を、ダミーの命令に置換することとした。また、復元処理挿入手段により、偽装手段により置換されたダミーの命令を元の命令に置換する復元処理を、保護対象プログラムのうち繰り返し処理検出手段により検出された繰り返し処理より前方に挿入することとした。また、偽装処理挿入手段により、復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、保護対象プログラムのうち繰り返し処理検出手段により検出された繰り返し処理より後方に挿入することとした。
【０００９】
このため、偽装手段により、繰り返し処理に含まれる命令をダミーの命令に置換することができる。したがって、保護対象プログラムの繰り返し処理に含まれる命令を偽装することができ、保護対象プログラムの解析および改ざんを困難にすることができる。
【００１０】
また、偽装手段により命令を偽装した保護対象プログラムに対して、復元処理挿入手段により復元処理を挿入するとともに、偽装処理挿入手段により偽装処理を挿入することができる。このため、復元処理を実行することで、ダミーの命令を元の命令に戻すことができ、保護対象プログラムを正しく実行することができる。また、偽装処理を実行することで、処理を終えた命令をダミーの命令に置き換えて、偽装することができる。以上によれば、復元処理を実行してから偽装処理を実行するまでの期間でのみ、命令を正しく読み出すことができ、上述の期間以外では、命令を正しく読み出すことができなくなる。したがって、保護対象プログラムの解析および改ざんをより困難にすることができる。
【００１１】
また、復元処理挿入手段により、復元処理を、保護対象プログラムのうち繰り返し処理より前方に挿入し、偽装処理挿入手段により、偽装処理を、保護対象プログラムのうち繰り返し処理より後方に挿入することができる。このため、命令は、繰り返し処理の内部にあるために複数回に亘って実行されるが、復元処理および偽装処理は、繰り返し処理の外部にあるために１回ずつ実行されることとなる。したがって、復元処理および偽装処理が、命令と同様に複数回に亘って実行されてしまうのを防止できるので、その結果、オーバーヘッドを小さくすることができ、保護対象プログラムの実行時におけるパフォーマンスの低下を抑制することができる。
【００１２】
（２）  本発明は、１つ以上の命令（例えば、図６の命令６１に相当）を複数回に亘って繰り返す繰り返し処理（例えば、図６の繰り返し処理ＢＢに相当）を、保護対象プログラム（例えば、図６の保護対象プログラム６０に相当）の中から検出する第１のステップ（例えば、図３のステップＳ１１に相当）と、前記第１のステップにおいて検出した繰り返し処理に含まれる命令（例えば、図６の命令６１に相当）を、ダミーの命令（例えば、図６の命令６１Ａに相当）に置換する第２のステップ（例えば、図３のステップＳ１７に相当）と、前記第２のステップにおいて置換したダミーの命令を元の命令（例えば、図６の命令６１に相当）に置換する復元処理（例えば、図６の復元処理６２に相当）を、前記保護対象プログラムのうち前記第１のステップにおいて検出した繰り返し処理より前方に挿入する第３のステップ（例えば、図３のステップＳ１８に相当）と、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理（例えば、図６の偽装処理６３に相当）を、前記保護対象プログラムのうち前記第１のステップにおいて検出した繰り返し処理より後方に挿入する第４のステップ（例えば、図３のステップＳ１９に相当）と、を備えることを特徴とする自己書き換え処理方法を提案している。
【００１３】
この発明によれば、１つ以上の命令を複数回に亘って繰り返す繰り返し処理を、保護対象プログラムの中から検出し、検出した繰り返し処理に含まれる命令を、ダミーの命令に置換することとした。そして、置換したダミーの命令を元の命令に置換する復元処理を、保護対象プログラムのうち検出した繰り返し処理より前方に挿入することとした。また、復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、保護対象プログラムのうち検出した繰り返し処理より後方に挿入することとした。これによれば、上述した効果と同様の効果を奏することができる。
【００１４】
（３）  本発明は、１つ以上の命令（例えば、図６の命令６１に相当）を複数回に亘って繰り返す繰り返し処理（例えば、図６の繰り返し処理ＢＢに相当）を、保護対象プログラム（例えば、図６の保護対象プログラム６０、６０Ａに相当）の中から検出する第１のステップ（例えば、図３のステップＳ１１に相当）と、前記第１のステップにおいて検出した繰り返し処理に含まれる命令（例えば、図６の命令６１に相当）を、ダミーの命令（例えば、図６の命令６１Ａに相当）に置換する第２のステップ（例えば、図３のステップＳ１７に相当）と、前記第２のステップにおいて置換したダミーの命令を元の命令（例えば、図６の命令６１に相当）に置換する復元処理（例えば、図６の復元処理６２に相当）を、前記保護対象プログラムのうち前記第１のステップにおいて検出した繰り返し処理より前方に挿入する第３のステップ（例えば、図３のステップＳ１８に相当）と、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理（例えば、図６の偽装処理６３に相当）を、前記保護対象プログラムのうち前記第１のステップにおいて検出した繰り返し処理より後方に挿入する第４のステップ（例えば、図３のステップＳ１９に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００１５】
この発明によれば、プログラムをコンピュータに実行させることで、１つ以上の命令を複数回に亘って繰り返す繰り返し処理を、保護対象プログラムの中から検出し、検出した繰り返し処理に含まれる命令を、ダミーの命令に置換することとした。そして、置換したダミーの命令を元の命令に置換する復元処理を、保護対象プログラムのうち検出した繰り返し処理より前方に挿入することとした。また、復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、保護対象プログラムのうち検出した繰り返し処理より後方に挿入することとした。これによれば、上述した効果と同様の効果を奏することができる。
【発明の効果】
【００１６】
本発明によれば、保護対象プログラムの解析および改ざんを困難にすることができるとともに、保護対象プログラムの実行時におけるパフォーマンスの低下を抑制することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の一実施形態に係る自己書き換え処理装置の構成を示すブロック図である。
【図２】前記自己書き換え処理装置における第１の処理のフローチャートである。
【図３】前記自己書き換え処理装置における第２の処理のフローチャートである。
【図４】前記第２の処理を説明するための図である。
【図５】前記第２の処理を説明するための図である。
【図６】前記第２の処理を説明するための図である。
【発明を実施するための形態】
【００１８】
以下、本発明の実施形態について図面を参照しながら説明する。なお、以下の実施形態における構成要素は適宜、既存の構成要素などとの置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、以下の実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００１９】
［自己書き換え処理装置１の構成］
図１は、本発明の一実施形態に係る自己書き換え処理装置１の構成を示すブロック図である。自己書き換え処理装置１は、様々な演算処理を行うＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０と、保護対象プログラムを記憶するキャッシュ２０と、を備える。
【００２０】
自己書き換え処理装置１は、後述の第１の処理（図２参照）を実行した後に、後述の第２の処理（図３参照）を実行する。これによれば、保護対象プログラムに記述されている命令が偽装され、保護対象プログラムの解析および改ざんが困難となる。
【００２１】
［第１の処理］
図２は、上述の第１の処理のフローチャートである。
【００２２】
ステップＳ１において、ＣＰＵ１０により、キャッシュ２０に記憶されている保護対象プログラムのうち、保護する領域を選択し、ステップＳ２に処理を移す。なお、ステップＳ１における保護対象プログラムは、Ｃ言語やＪａｖａ（登録商標）といった高級言語で記述されているものとする。また、保護する領域は、例えば自己書き換え処理装置１のユーザにより、保護対象プログラムの中から決定されるものとする。
【００２３】
ステップＳ２において、ＣＰＵ１０により、キャッシュ２０に記憶されている保護対象プログラムのうち、ステップＳ１において選択した領域について、アセンブラ記述を取得し、第１の処理を終了する。このステップでは、例えば、保護対象プログラムのうち上述の選択した領域について、コンパイルして、アセンブリプログラムに変換する。
【００２４】
［第２の処理］
図３は、上述の第２の処理のフローチャートである。
【００２５】
ステップＳ１１において、ＣＰＵ１０により、上述のステップＳ２において取得したアセンブラ記述の保護対象プログラムの制御構造を解析し、ステップＳ１２に処理を移す。この保護対象プログラムの制御構造の解析について、図４を用いて以下に説明する。
【００２６】
図４は、ステップＳ２の処理により得られたアセンブラ記述の保護対象プログラム１００を示す図である。保護対象プログラム１００には、計算や代入といった処理を行う命令と、条件を満たすか否かの判断を行う分岐の命令と、が記述されている。保護対象プログラム１００に対してステップＳ１１の処理が行われると、まず、分岐の命令がそれぞれ判定され、処理が分解される。次に、連続して実行される１以上の処理で構成され、分岐を含まないパスが検出される。次に、ｆｏｒ文やｗｈｉｌｅ文のように、１つ以上の命令を複数回に亘って繰り返す繰り返し処理の含まれている箇所が、検出されたパスの中から特定される。例えば保護対象プログラム１００では、破線で囲まれた部分ＡＡが、繰り返し処理に相当する。
【００２７】
以上のように、ステップＳ１１の処理を行うと、繰り返し処理の含まれている箇所を特定することができる。
【００２８】
図３に戻って、ステップＳ１２において、ＣＰＵ１０により、ステップＳ１１において制御構造を解析したアセンブラ記述の保護対象プログラムの中から、偽装させる命令を選択し、ステップＳ１３に処理を移す。
【００２９】
ステップＳ１３において、ＣＰＵ１０により、ステップＳ１２において選択した命令が、ステップＳ１１において特定した繰り返し処理の内部にあるか否かを判別する。そして、内部にあると判別した場合には、ステップＳ１７に処理を移し、内部にはないと判別した場合には、ステップＳ１４に処理を移す。
【００３０】
ステップＳ１４において、ＣＰＵ１０により、ステップＳ１２において選択した命令をダミーの命令に置換し、ステップＳ１５に処理を移す。
【００３１】
ステップＳ１５において、ＣＰＵ１０により、ステップＳ１４の処理を行った保護対象プログラムのうち、ステップＳ１４において置換したダミーの命令より前方に、復元処理を挿入し（後述の図５参照）、ステップＳ１６に処理を移す。なお、復元処理とは、ステップＳ１４において置換したダミーの命令を、元の命令に戻す処理のことである。これによれば、保護対象プログラムにおいて、復元処理が、ダミーの命令より前方に記述されることになるので、この命令は、ダミーから元に戻された後に実行されることとなる。
【００３２】
ステップＳ１６において、ＣＰＵ１０により、ステップＳ１５の処理を行った保護対象プログラムのうち、ステップＳ１４において置換したダミーの命令より後方に、偽装処理を挿入し（後述の図５参照）、第２の処理を終了する。なお、偽装処理とは、復元処理の実行により置換された元の命令を、ダミーの命令に置換する処理のことである。これによれば、保護対象プログラムにおいて、偽装処理が、ダミーの命令より後方に記述されることになるので、この命令が実行された後に、偽装処理が実行され、この命令が偽装されることとなる。
【００３３】
ステップＳ１７において、ＣＰＵ１０により、ステップＳ１２において選択した命令をダミーの命令に置換し、ステップＳ１８に処理を移す。
【００３４】
ステップＳ１８において、ＣＰＵ１０により、ステップＳ１７の処理を行った保護対象プログラムのうち、ステップＳ１７において置換したダミーの命令を含む繰り返し処理より前方に、復元処理を挿入し（後述の図６参照）、ステップＳ１９に処理を移す。これによれば、保護対象プログラムにおいて、復元処理が、ダミーの命令を含む繰り返し処理より前方に記述されることになるので、この命令は、ダミーから元に戻された後に実行されることとなる。
【００３５】
ステップＳ１９において、ＣＰＵ１０により、ステップＳ１８の処理を行った保護対象プログラムのうち、ステップＳ１７において置換したダミーの命令を含む繰り返し処理より後方に、偽装処理を挿入し（後述の図６参照）、第２の処理を終了する。これによれば、保護対象プログラムにおいて、偽装処理が、ダミーの命令を含む繰り返し処理より後方に記述されることになるので、この命令が実行された後に、偽装処理が実行され、この命令が偽装されることとなる。
【００３６】
図５は、ステップＳ１２において選択した命令が繰り返し処理の内部にはない場合における、ステップＳ１４〜Ｓ１６の処理を行う前後での保護対象プログラムを示す図である。
【００３７】
保護対象プログラム５０は、ステップＳ１２の処理を行った後の保護対象プログラムを示す。保護対象プログラム５０には、ステップＳ１において選択された保護する領域Ｐが定められており、保護対象プログラム５０のうち保護する領域Ｐには、ステップＳ１２において選択された命令５１が記述されている。
【００３８】
以上の保護対象プログラム５０に対してステップＳ１４〜Ｓ１６の処理を行ったものが、保護対象プログラム５０Ａである。保護対象プログラム５０Ａのうち保護する領域Ｐには、ステップＳ１２において選択された命令５１をステップＳ１４において置換した、ダミーの命令５１Ａが記述されている。また、ダミーの命令５１Ａより前方には、ステップＳ１５において挿入した、復元処理５２が記述されている。また、ダミーの命令５１Ａより後方には、ステップＳ１６において挿入した、偽装処理５３が記述されている。
【００３９】
以上の保護対象プログラム５０Ａを実行する場合について、以下に説明する。まず、復元処理５２が実行される。これによれば、ダミーの命令５１Ａが、元の命令であるステップＳ１２において選択された命令５１に戻ることとなる。
【００４０】
次に、上述の復元処理５２の実行により元に戻った、ステップＳ１２において選択された命令５１が実行される。
【００４１】
次に、偽装処理５３が実行される。これによれば、ステップＳ１２において選択された命令５１の実行後に、この命令５１がダミーの命令に置換されることとなる。
【００４２】
以上によれば、保護対象プログラム５０Ａでは、復元処理５２が実行されてから、偽装処理５３が実行されるまでの期間でのみ、元の命令であるステップＳ１２において選択された命令５１を正しく読み出すことができ、この期間以外では、命令５１を読み出そうとしてもダミーの命令しか読み出すことができない。
【００４３】
図６は、ステップＳ１２において選択した命令が繰り返し処理の内部にある場合における、ステップＳ１７〜Ｓ１９の処理を行う前後での保護対象プログラムを示す図である。
【００４４】
保護対象プログラム６０は、ステップＳ１２の処理を行った後の保護対象プログラムを示す。保護対象プログラム６０には、ステップＳ１において選択された保護する領域Ｑが定められており、保護対象プログラム６０のうち保護する領域Ｑには、ステップＳ１２において選択された命令６１が記述されている。そして、この命令６１は、繰り返し処理ＢＢの内部に記述されている。
【００４５】
以上の保護対象プログラム６０に対してステップＳ１７〜Ｓ１９の処理を行ったものが、保護対象プログラム６０Ａである。保護対象プログラム６０Ａのうち保護する領域Ｑには、ステップＳ１２において選択された命令６１をステップＳ１７において置換した、ダミーの命令６１Ａが記述されている。また、ダミーの命令６１Ａを含む繰り返し処理ＢＢより前方には、ステップＳ１８において挿入した、復元処理６２が記述されている。また、ダミーの命令６１Ａを含む繰り返し処理ＢＢより後方には、ステップＳ１９において挿入した、偽装処理６３が記述されている。
【００４６】
以上の保護対象プログラム６０Ａを実行する場合について、以下に説明する。まず、復元処理６２が実行される。これによれば、ダミーの命令６１Ａが、元の命令であるステップＳ１２において選択された命令６１に戻ることとなる。
【００４７】
次に、繰り返し処理ＢＢが実行されて、上述の復元処理６２の実行により元に戻った、ステップＳ１２において選択された命令６１が、複数回に亘って実行される。
【００４８】
次に、繰り返し処理ＢＢの実行が完了した後、偽装処理６３が実行される。これによれば、ステップＳ１２において選択された命令６１の複数回に亘る実行後に、この命令６１がダミーの命令に置換されることとなる。
【００４９】
以上によれば、保護対象プログラム６０Ａでは、復元処理６２が実行されてから、偽装処理６３が実行されるまでの期間でのみ、元の命令であるステップＳ１２において選択された命令６１を正しく読み出すことができ、この期間以外では、命令６１を読み出そうとしてもダミーの命令しか読み出すことができない。また、命令６１は、繰り返し処理ＢＢの内部にあるために複数回に亘って実行されるが、復元処理６２および偽装処理６３は、繰り返し処理ＢＢの外部にあるために１回ずつ実行されることとなる。
【００５０】
以上の自己書き換え処理装置１によれば、以下の効果を奏することができる。
【００５１】
自己書き換え処理装置１は、ステップＳ１１の処理を行って保護対象プログラムの制御構造を解析した後に、ステップＳ１４またはステップＳ１７の処理を行って、命令をダミーの命令に置換する。このため、自己書き換え処理装置１は、保護対象プログラムに記述されている命令を偽装することができ、保護対象プログラムの解析および改ざんを困難にすることができる。
【００５２】
また、自己書き換え処理装置１は、ステップＳ１４またはステップＳ１７の処理を行って命令を偽装した保護対象プログラムに対して、ステップＳ１５またはステップＳ１８の処理により復元処理を挿入するとともに、ステップＳ１６またはステップＳ１９の処理により偽装処理を挿入する。このため、復元処理を実行することで、ダミーの命令を元の命令に戻すことができ、保護対象プログラムを正しく実行することができる。また、偽装処理を実行することで、処理を終えた命令をダミーの命令に置き換えて、偽装することができる。以上によれば、復元処理を実行してから偽装処理を実行するまでの期間でのみ、命令を正しく読み出すことができ、上述の期間以外では、命令を正しく読み出すことができなくなる。したがって、保護対象プログラムの解析および改ざんをより困難にすることができる。
【００５３】
また、自己書き換え処理装置１は、偽装する命令が繰り返し処理の内部にある場合には、ステップＳ１７〜Ｓ１９の処理を行って、復元処理および偽装処理を、偽装する命令を含む繰り返し処理の外部に挿入する。このため、命令は、繰り返し処理の内部にあるために複数回に亘って実行されるが、復元処理および偽装処理は、繰り返し処理の外部にあるために１回ずつ実行されることとなる。したがって、復元処理および偽装処理が、命令と同様に複数回に亘って実行されてしまうのを防止できるので、その結果、オーバーヘッドを小さくすることができ、パフォーマンスの低下を抑制することができる。
【００５４】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計なども含まれる。
【００５５】
例えば、上述の実施形態では、ステップＳ１６またはステップＳ１９において偽装処理を挿入することとした。このため、挿入した偽装処理を実行すると、命令は、ダミーの命令に置換される。ここで、偽装処理の実行により置換されるダミーの命令は、ステップＳ１４またはステップＳ１７において置換したダミーの命令と同一であってもよいし、異なっていてもよい。
【００５６】
また、上述の実施形態では、ステップＳ１５またはステップＳ１８において復元処理を挿入した後、ステップＳ１６またはステップＳ１９において偽装処理を挿入したが、これに限らず、例えば偽装処理を挿入した後に復元処理を挿入してもよい。
【００５７】
また、上述の実施形態では、偽装する命令について特に制約を設けていないが、ｇｏｔｏ文のように、無条件に処理を飛ばすことにより、無条件に処理の流れを変化させる命令については、除外することが好ましい。これによれば、オーバーヘッドを効率的に小さくすることができ、パフォーマンスの低下をさらに抑制することができる。
【符号の説明】
【００５８】
１・・・自己書き換え処理装置
１０・・・ＣＰＵ
２０・・・キャッシュ
５０、５０Ａ、６０、６０Ａ、１００・・・保護対象プログラム
５２、６２・・・復元処理
５３、６３・・・偽装処理
ＡＡ、ＢＢ・・・繰り返し処理
【図１】
2012208655.tif 000003
【図２】
2012208655.tif 000004
【図３】
2012208655.tif 000005
【図４】
2012208655.tif 000006
【図５】
2012208655.tif 000007
【図６】
2012208655.tif 000008