(57)【特許請求の範囲】
【請求項１】
保護対象プログラムを記憶する記憶手段と、
前記保護対象プログラムに記述されている命令またはデータのうち少なくとも１つを選択する選択手段と、
前記選択手段により選択された命令およびデータを、それぞれ、ダミーの命令およびダミーのデータに置換する偽装手段と、
前記記憶手段とアドレス空間との整合性を確保する整合性確保処理を、前記保護対象プログラムのうち、前記偽装手段により置換されたダミーの命令より前方と、前記偽装手段により置換されたダミーのデータを参照する処理より前方と、に挿入する第１挿入手段と、
前記偽装手段により置換されたダミーの命令およびダミーのデータを、それぞれ、前記選択手段により選択された元の命令および元のデータに置換する復元処理を、前記保護対象プログラムのうち前記整合性確保処理が挿入された位置より前方に挿入する第２挿入手段と、
前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、前記保護対象プログラムのうち前記偽装手段により置換されたダミーの命令より後方に挿入するとともに、前記復元処理の実行により置換された元のデータをダミーのデータに置換する偽装処理を、前記保護対象プログラムのうち前記偽装手段により置換されたダミーのデータを参照する処理より後方に挿入する第３挿入手段と、を備えることを特徴とする自己書き換え処理装置。
【請求項２】
前記偽装手段は、前記選択手段により選択された命令をダミーの命令に置換するとともに、前記選択手段により選択されたデータを参照する処理について、当該処理で参照されるデータをダミーのデータに置換し、
前記第１挿入手段は、前記整合性確保処理を、前記保護対象プログラムのうち、前記偽装手段により置換されたダミーの命令より前方に挿入するとともに、前記偽装手段により置換されたダミーのデータを参照する処理より前方に挿入することを特徴とする請求項１に記載の自己書き換え処理装置。
【請求項３】
前記選択手段による選択と、前記偽装手段による置換と、前記第１挿入手段による挿入と、前記第２挿入手段による挿入と、前記第３挿入手段による挿入と、を予め定められた回数だけ繰り返すことを特徴とする請求項１または２に記載の自己書き換え処理装置。
【請求項４】
選択手段、偽装手段、第１挿入手段、第２挿入手段、および第３挿入手段を備える自己書き換え処理装置における自己書き換え処理方法であって、
前記選択手段が、保護対象プログラムに記述されている命令またはデータのうち少なくとも１つを選択する第１ステップと、
前記偽装手段が、前記第１ステップにおいて選択した命令およびデータを、それぞれ、ダミーの命令およびダミーのデータに置換する第２ステップと、
前記第１挿入手段が、前記保護対象プログラムを記憶する記憶手段と、アドレス空間と、の整合性を確保する整合性確保処理を、当該保護対象プログラムのうち、前記第２ステップにおいて置換したダミーの命令より前方と、前記第２ステップにおいて置換したダミーのデータを参照する処理より前方と、に挿入する第３ステップと、
前記第２挿入手段が、前記第２ステップにおいて置換したダミーの命令およびダミーのデータを、それぞれ、前記第１ステップにおいて選択した元の命令および元のデータに置換する復元処理を、前記保護対象プログラムのうち前記整合性確保処理を挿入した位置より前方に挿入する第４ステップと、
前記第３挿入手段が、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、前記保護対象プログラムのうち前記第２ステップにおいて置換したダミーの命令より後方に挿入するとともに、前記復元処理の実行により置換された元のデータをダミーのデータに置換する偽装処理を、前記保護対象プログラムのうち前記第２ステップにおいて置換したダミーのデータを参照する処理より後方に挿入する第５ステップと、を備えることを特徴とする自己書き換え処理方法。
【請求項５】
保護対象プログラムに記述されている命令またはデータのうち少なくとも１つを選択する第１ステップと、
前記第１ステップにおいて選択した命令およびデータを、それぞれ、ダミーの命令およびダミーのデータに置換する第２ステップと、
前記保護対象プログラムを記憶する記憶手段と、アドレス空間と、の整合性を確保する整合性確保処理を、当該保護対象プログラムのうち、前記第２ステップにおいて置換したダミーの命令より前方と、前記第２ステップにおいて置換したダミーのデータを参照する処理より前方と、に挿入する第３ステップと、
前記第３ステップにおいて置換したダミーの命令およびダミーのデータを、それぞれ、前記第１ステップにおいて選択した元の命令および元のデータに置換する復元処理を、前記保護対象プログラムのうち前記整合性確保処理を挿入した位置より前方に挿入する第４ステップと、
前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、前記保護対象プログラムのうち前記第２ステップにおいて置換したダミーの命令より後方に挿入するとともに、前記復元処理の実行により置換された元のデータをダミーのデータに置換する偽装処理を、前記保護対象プログラムのうち前記第２ステップにおいて置換したダミーのデータを参照する処理より後方に挿入する第５ステップと、をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自己書き換え処理装置、自己書き換え処理方法、およびプログラムに関する。
【背景技術】
【０００２】
従来より、保護対象プログラムの解析および改ざんを困難にする手法が提案されている（例えば、特許文献１参照）。特許文献１には、保護対象プログラムの解析および改ざんを困難にする手法として、自己書き換えの手法が示されている。この特許文献１に示されている自己書き換えでは、保護対象プログラムに記述されている命令を偽の命令で偽装する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−１９２０６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
プログラムを実行する際には、このプログラムを記憶する記憶手段と、アドレス空間と、の間で不整合が発生する場合がある。この不整合が発生したままの状態でプログラムの実行を行うと、誤った命令を実行したり、誤ったデータを参照したりして、誤動作が発生してしまう。
【０００５】
上述の特許文献１に示されている手法では、上述の不整合を解消できないため、保護対象プログラムの実行時に誤動作が発生してしまうおそれがあった。
【０００６】
そこで、本発明は、上述の課題に鑑みてなされたものであり、保護対象プログラムの解析および改ざんを困難にする自己書き換え処理装置、自己書き換え処理方法、およびプログラムについて、保護対象プログラムの実行時に記憶手段とアドレス空間との不整合を解消できるようにすることを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、上記の課題を解決するために、以下の事項を提案している。
【０００８】
（１）  本発明は、保護対象プログラムを記憶する記憶手段（例えば、図１のキャッシュ２０に相当）と、前記保護対象プログラムに記述されている命令またはデータのうち少なくとも１つを選択する選択手段（例えば、図１のＣＰＵ１０に相当）と、前記選択手段により選択された命令およびデータを、それぞれ、ダミーの命令およびダミーのデータに置換する偽装手段（例えば、図１のＣＰＵ１０に相当）と、前記記憶手段とアドレス空間との整合性を確保する整合性確保処理（例えば、図４のキャッシュフラッシュ５２や、図５のキャッシュフラッシュ６３に相当）を、前記保護対象プログラムのうち、前記偽装手段により置換されたダミーの命令より前方と、前記偽装手段により置換されたダミーのデータを参照する処理より前方と、に挿入する第１挿入手段（例えば、図１のＣＰＵ１０に相当）と、前記偽装手段により置換されたダミーの命令およびダミーのデータを、それぞれ、前記選択手段により選択された元の命令および元のデータに置換する復元処理（例えば、後述の復元処理に相当）を、前記保護対象プログラムのうち前記整合性確保処理が挿入された位置より前方に挿入する第２挿入手段（例えば、図１のＣＰＵ１０に相当）と、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理（例えば、後述の偽装処理に相当）を、前記保護対象プログラムのうち前記偽装手段により置換されたダミーの命令（例えば、図４のダミーの命令５１Ａに相当）より後方に挿入するとともに、前記復元処理の実行により置換された元のデータをダミーのデータに置換する偽装処理（例えば、後述の偽装処理に相当）を、前記保護対象プログラムのうち前記偽装手段により置換されたダミーのデータを参照する処理（例えば、図５のステップＳ１３において選択されたデータのダミーを参照する処理６２Ａに相当）より後方に挿入する第３挿入手段（例えば、図１のＣＰＵ１０に相当）と、を備えることを特徴とする自己書き換え処理装置を提案している。
【０００９】
この発明によれば、自己書き換え処理装置に、記憶手段、選択手段、偽装手段、第１挿入手段、第２挿入手段、および第３挿入手段を設けた。そして、記憶手段により、保護対象プログラムを記憶することとした。また、選択手段により、保護対象プログラムに記述されている命令またはデータのうち少なくとも１つを選択し、偽装手段により、選択手段により選択された命令およびデータを、それぞれ、ダミーの命令およびダミーのデータに置換することとした。また、第１挿入手段により、記憶手段とアドレス空間との整合性を確保する整合性確保処理を、保護対象プログラムに挿入することとした。また、第２挿入手段により、復元処理を保護対象プログラムに挿入し、第３挿入手段により、偽装処理を保護対象プログラムに挿入することとした。ここで、復元処理とは、偽装手段により置換されたダミーの命令およびダミーのデータを、それぞれ、選択手段により選択された元の命令および元のデータに置換する処理のことである。また、偽装処理とは、復元処理の実行により置換された元の命令および元のデータを、それぞれ、ダミーの命令およびダミーのデータに置換する処理のことである。
【００１０】
このため、自己書き換え処理装置は、選択手段により、保護対象プログラムに記述されている命令やデータを選択し、偽装手段により、選択手段により選択された命令やデータを、ダミーの命令やダミーのデータに置換する。これによれば、保護対象プログラムに記述されている命令やデータは、偽装されることとなる。したがって、自己書き換え処理装置は、保護対象プログラムの解析および改ざんを困難にすることができる。
【００１１】
また、自己書き換え処理装置は、命令やデータが偽装手段により偽装された保護対象プログラムに対して、第２挿入手段により復元処理を挿入するとともに、第３挿入手段により偽装処理を挿入する。このため、復元処理を実行することで、ダミーの命令やダミーのデータを元の命令や元のデータに戻すことができ、保護対象プログラムを正しく実行することができる。また、偽装処理を実行することで、処理を終えた命令やデータについて、ダミーの命令やダミーのデータに置き換えて、偽装することができる。以上によれば、復元処理を実行してから偽装処理を実行するまでの期間でのみ、命令やデータを正しく読み出すことができ、上述の期間以外では、命令やデータを正しく読み出すことができなくなる。したがって、保護対象プログラムの解析および改ざんをより困難にすることができる。
【００１２】
また、自己書き換え処理装置は、命令やデータが偽装手段により偽装された保護対象プログラムに対して、第１挿入手段により整合性確保処理を挿入する。このため、保護対象プログラムが実行される際には、整合性確保処理が実行されることになるので、記憶手段とアドレス空間との間で生じる不整合を解消できる。
【００１３】
（２）  本発明は、（１）の自己書き換え処理装置について、前記偽装手段は、前記選択手段により選択された命令をダミーの命令に置換するとともに、前記選択手段により選択されたデータを参照する処理について、当該処理で参照されるデータをダミーのデータに置換し、前記第１挿入手段は、前記整合性確保処理を、前記保護対象プログラムのうち、前記偽装手段により置換されたダミーの命令（例えば、図４のダミーの命令５１Ａに相当）より前方に挿入するとともに、前記偽装手段により置換されたダミーのデータを参照する処理より前方（例えば、図５のステップＳ１３において選択されたデータのダミーを参照する処理６２Ａより前方に相当）に挿入することを特徴とする自己書き換え処理装置を提案している。
【００１４】
この発明によれば、（１）の自己書き換え処理装置において、偽装手段は、選択手段により選択された命令をダミーの命令に置換するとともに、選択手段により選択されたデータを参照する処理について、この処理で参照されるデータをダミーのデータに置換することとした。また、第１挿入手段は、整合性確保処理を、保護対象プログラムのうち、偽装手段により置換されたダミーの命令より前方に挿入するとともに、偽装手段により置換されたダミーのデータを参照する処理より前方に挿入することとした。
【００１５】
このため、命令や、データを参照する処理が実行されるより前に、整合性確保処理が実行され、記憶手段とアドレス空間との不整合が解消されることとなる。したがって、保護対象プログラムの実行時に、記憶手段とアドレス空間との間で不整合が生じても、誤った命令を実行したり、誤ったデータを参照したりするのを防止して、誤動作が発生してしまうのを防止できる。
【００１９】
（３）  本発明は、（１）または（２）の自己書き換え処理装置について、前記選択手段による選択と、前記偽装手段による置換と、前記第１挿入手段による挿入と、前記第２挿入手段による挿入と、前記第３挿入手段による挿入と、を予め定められた回数（例えば、図３の反復回数Ｎに相当）だけ繰り返すことを特徴とする自己書き換え処理装置を提案している。
【００２０】
この発明によれば、（１）または（２）の自己書き換え処理装置において、選択手段による選択と、偽装手段による置換と、第１挿入手段による挿入と、第２挿入手段による挿入と、第３挿入手段による挿入と、を予め定められた回数だけ繰り返すこととした。
【００２１】
このため、上述の予め定められた回数として、１以上の値を設定することで、命令やデータを複数回に亘ってダミーに置換することができ、これら命令およびデータについて、何重にも偽装する多重偽造を施すことができる。したがって、保護対象プログラムの解析および改ざんをさらに困難にすることができる。
【００２２】
（４）  本発明は、選択手段（例えば、図１のＣＰＵ１０に相当）、偽装手段（例えば、図１のＣＰＵ１０に相当）、第１挿入手段（例えば、図１のＣＰＵ１０に相当）、第２挿入手段（例えば、図１のＣＰＵ１０に相当）、および第３挿入手段（例えば、図１のＣＰＵ１０に相当）を備える自己書き換え処理装置における自己書き換え処理方法であって、前記選択手段が、保護対象プログラムに記述されている命令またはデータのうち少なくとも１つを選択する第１ステップ（例えば、図３のステップＳ１３に相当）と、前記偽装手段が、前記第１ステップにおいて選択した命令およびデータを、それぞれ、ダミーの命令およびダミーのデータに置換する第２ステップ（例えば、図３のステップＳ１４に相当）と、前記第１挿入手段が、前記保護対象プログラムを記憶する記憶手段と、アドレス空間と、の整合性を確保する整合性確保処理（例えば、後述のキャッシュフラッシュに相当）を、当該保護対象プログラムのうち、前記第２ステップにおいて置換したダミーの命令より前方と、前記第２ステップにおいて置換したダミーのデータを参照する処理より前方と、に挿入する第３ステップ（例えば、図３のステップＳ１５に相当）と、前記第２挿入手段が、前記第２ステップにおいて置換したダミーの命令およびダミーのデータを、それぞれ、前記第１ステップにおいて選択した元の命令および元のデータに置換する復元処理（例えば、後述の復元処理に相当）を、前記保護対象プログラムのうち前記整合性確保処理を挿入した位置より前方に挿入する第４ステップ（例えば、図３のステップＳ１６に相当）と、前記第３挿入手段が、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、前記保護対象プログラムのうち前記第２ステップにおいて置換したダミーの命令（例えば、図４のダミーの命令５１Ａに相当）より後方に挿入するとともに、前記復元処理の実行により置換された元のデータをダミーのデータに置換する偽装処理を、前記保護対象プログラムのうち前記第２ステップにおいて置換したダミーのデータを参照する処理（例えば、図５のステップＳ１３において選択されたデータのダミーを参照する処理６２Ａに相当）より後方に挿入する第５ステップ（例えば、図３のステップＳ１７に相当）と、を備えることを特徴とする自己書き換え処理方法を提案している。
【００２３】
この発明によれば、保護対象プログラムに記述されている命令またはデータのうち少なくとも１つを選択し、選択した命令およびデータを、それぞれ、ダミーの命令およびダミーのデータに置換する。そして、保護対象プログラムを記憶する記憶手段と、アドレス空間と、の整合性を確保する整合性確保処理を、保護対象プログラムに挿入する。また、保護対象プログラムに、復元処理と偽装処理とを挿入する。ここで、復元処理とは、ダミーの命令およびダミーのデータを、それぞれ、元の命令および元のデータに置換する処理のことである。また、偽装処理とは、復元処理の実行により置換された元の命令および元のデータを、それぞれ、ダミーの命令およびダミーのデータに置換する処理のことである。これによれば、上述した効果と同様の効果を奏することができる。
【００２４】
（５）  本発明は、保護対象プログラムに記述されている命令またはデータのうち少なくとも１つを選択する第１ステップ（例えば、図３のステップＳ１３に相当）と、前記第１ステップにおいて選択した命令およびデータを、それぞれ、ダミーの命令およびダミーのデータに置換する第２ステップ（例えば、図３のステップＳ１４に相当）と、前記保護対象プログラムを記憶する記憶手段と、アドレス空間と、の整合性を確保する整合性確保処理を、当該保護対象プログラムのうち、前記第２ステップにおいて置換したダミーの命令より前方と、前記第２ステップにおいて置換したダミーのデータを参照する処理より前方と、に挿入する第３ステップ（例えば、図３のステップＳ１５に相当）と、前記第３ステップにおいて置換したダミーの命令およびダミーのデータを、それぞれ、前記第１ステップにおいて選択した元の命令および元のデータに置換する復元処理を、前記保護対象プログラムのうち前記整合性確保処理が挿入された位置より前方に挿入する第４ステップ（例えば、図３のステップＳ１６に相当）と、前記復元処理の実行により置換された元の命令をダミーの命令に置換する偽装処理を、前記保護対象プログラムのうち前記第２ステップにおいて置換したダミーの命令（例えば、図４のダミーの命令５１Ａに相当）より後方に挿入するとともに、前記復元処理の実行により置換された元のデータをダミーのデータに置換する偽装処理を、前記保護対象プログラムのうち前記第２ステップにおいて置換したダミーのデータを参照する処理（例えば、図５のステップＳ１３において選択されたデータのダミーを参照する処理６２Ａに相当）より後方に挿入する第５ステップ（例えば、図３のステップＳ１７に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００２５】
この発明によれば、プログラムをコンピュータに実行させることで、保護対象プログラムに記述されている命令またはデータのうち少なくとも１つを選択し、選択した命令およびデータを、それぞれ、ダミーの命令およびダミーのデータに置換する。そして、保護対象プログラムを記憶する記憶手段と、アドレス空間と、の整合性を確保する整合性確保処理を、保護対象プログラムに挿入する。また、保護対象プログラムに、復元処理と偽装処理とを挿入する。ここで、復元処理とは、ダミーの命令およびダミーのデータを、それぞれ、元の命令および元のデータに置換する処理のことである。また、偽装処理とは、復元処理の実行により置換された元の命令および元のデータを、それぞれ、ダミーの命令およびダミーのデータに置換する処理のことである。これによれば、上述した効果と同様の効果を奏することができる。
【発明の効果】
【００２６】
本発明によれば、保護対象プログラムの解析および改ざんを困難にすることができるとともに、保護対象プログラムの実行時に記憶手段とアドレス空間との不整合を解消できるようにすることができる。
【図面の簡単な説明】
【００２７】
【図１】本発明の一実施形態に係る自己書き換え処理装置の構成を示すブロック図である。
【図２】前記自己書き換え処理装置における第１の処理のフローチャートである。
【図３】前記自己書き換え処理装置における第２の処理のフローチャートである。
【図４】前記第２の処理を説明するための図である。
【図５】前記第２の処理を説明するための図である。
【発明を実施するための形態】
【００２８】
以下、本発明の実施形態について図面を参照しながら説明する。なお、以下の実施形態における構成要素は適宜、既存の構成要素などとの置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、以下の実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００２９】
［自己書き換え処理装置１の構成］
図１は、本発明の一実施形態に係る自己書き換え処理装置１の構成を示すブロック図である。自己書き換え処理装置１は、様々な演算処理を行うＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０と、保護対象プログラムを記憶するキャッシュ２０と、を備える。
【００３０】
自己書き換え処理装置１は、後述の第１の処理（図２参照）を実行した後、後述の第２の処理（図３参照）を行うことにより、保護対象プログラムの実行時にキャッシュ２０とアドレス空間との不整合を解消できるように、保護対象プログラムの解析および改ざんを困難にする。
【００３１】
［第１の処理］
図２は、上述の第１の処理のフローチャートである。
【００３２】
ステップＳ１において、ＣＰＵ１０により、キャッシュ２０に記憶されている保護対象プログラムのうち、保護する領域を選択し、ステップＳ２に移る。なお、ステップＳ１における保護対象プログラムは、Ｃ言語やＪａｖａ（登録商標）といった高級言語で記述されているものとする。また、保護する領域は、例えば自己書き換え処理装置１のユーザにより、保護対象プログラムの中から決定されるものとする。
【００３３】
ステップＳ２において、ＣＰＵ１０により、キャッシュ２０に記憶されている保護対象プログラムのうち、ステップＳ１において選択した領域について、アセンブラ記述を取得し、第１の処理を終了する。このステップでは、例えば、保護対象プログラムのうち上述の選択した領域について、コンパイルして、アセンブリプログラムに変換する。
【００３４】
［第２の処理］
図３は、上述の第２の処理のフローチャートである。
【００３５】
ステップＳ１１において、ＣＰＵ１０により、変数Ｍに「０」を代入することで変数Ｍを初期化し、ステップＳ１２に移る。
【００３６】
ステップＳ１２において、ＣＰＵ１０により、反復回数Ｎ（Ｎは、Ｎ≧０を満たす整数）を設定し、ステップＳ１３に移る。
【００３７】
ステップＳ１３において、ＣＰＵ１０により、上述のステップＳ２において取得したアセンブラ記述の保護対象プログラムの中から、偽装させる命令またはデータを選択し、ステップＳ１４に移る。
【００３８】
ステップＳ１４において、ＣＰＵ１０により、ステップＳ１３において選択した命令またはデータをダミーの命令またはデータに置換し、ステップＳ１５に移る。具体的には、ステップＳ１３において命令を選択した場合には、この命令をダミーの命令に置換する。また、ステップＳ１３においてデータを選択した場合には、ステップＳ１３において選択したデータを参照する処理のことを参照処理と呼ぶこととすると、参照処理において参照されるデータをダミーのデータに置換する。
【００３９】
ステップＳ１５において、ＣＰＵ１０により、ステップＳ１４の処理を行った保護対象プログラムに、インラインアセンブラにてキャッシュフラッシュを挿入し、ステップＳ１６に移る。なお、キャッシュフラッシュとは、キャッシュ２０とアドレス空間との整合性を確保する命令のことであり、例えば、自己書き換え処理装置１のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が用意しているライブラリを用いて実装される。このキャッシュフラッシュを挿入する位置について、以下に説明する。
【００４０】
ステップＳ１３において命令を選択した場合には、ステップＳ１４の処理を行った保護対象プログラムのうち、上述の命令をステップＳ１４においてダミーに置換したものより前方に、キャッシュフラッシュを挿入する（後述の図４参照）。これによれば、保護対象プログラムにおいて、キャッシュフラッシュが、ダミーの命令より前方に記述されることになるので、この命令が実行されるより前に、キャッシュフラッシュが実行され、キャッシュ２０とアドレス空間との不整合が解消されることとなる。
【００４１】
一方、ステップＳ１３においてデータを選択した場合には、ステップＳ１４の処理を行った保護対象プログラムのうち、上述のデータを参照する処理について、参照されるデータをステップＳ１４においてダミーに置換したものより前方に、キャッシュフラッシュを挿入する（後述の図５参照）。これによれば、保護対象プログラムにおいて、キャッシュフラッシュが、ダミーのデータを参照する処理より前方に記述されることになるので、この処理が実行されるより前に、キャッシュフラッシュが実行され、キャッシュ２０とアドレス空間との不整合が解消されることとなる。
【００４２】
ステップＳ１６において、ＣＰＵ１０により、ステップＳ１５の処理を行った保護対象プログラムに復元処理を挿入し、ステップＳ１７に移る。なお、復元処理とは、ステップＳ１４において置換したダミーの命令およびダミーのデータを、それぞれ、元の命令および元のデータに置換する処理のことである。この復元処理を挿入する位置について、以下に説明する。
【００４３】
ステップＳ１３において命令を選択した場合には、ステップＳ１５の処理を行った保護対象プログラムのうち、ステップＳ１５において挿入したキャッシュフラッシュより前方に、復元処理を挿入する（後述の図４参照）。これによれば、保護対象プログラムにおいて、復元処理が、ダミーの命令より前方に記述されることになるので、この命令は、ダミーから元に戻された後に、実行されることとなる。
【００４４】
一方、ステップＳ１３においてデータを選択した場合には、ステップＳ１５の処理を行った保護対象プログラムのうち、ステップＳ１５において挿入したキャッシュフラッシュより前方に、復元処理を挿入する（後述の図５参照）。これによれば、保護対象プログラムにおいて、復元処理が、ダミーのデータを参照する処理より前方に記述されることになるので、ダミーのデータを参照する処理は、参照するデータをダミーから元に戻された後に、実行されることとなる。
【００４５】
ステップＳ１７において、ＣＰＵ１０により、ステップＳ１６の処理を行った保護対象プログラムに偽装処理を挿入し、ステップＳ１８に移る。なお、偽装処理とは、復元処理の実行により置換された元の命令および元のデータを、それぞれ、ダミーの命令およびダミーのデータに置換する処理のことである。この偽装処理を挿入する位置について、以下に説明する。
【００４６】
ステップＳ１３において命令を選択した場合には、ステップＳ１６の処理を行った保護対象プログラムのうち、上述の命令をステップＳ１４においてダミーに置換したものより後方に、偽装処理を挿入する（後述の図４参照）。これによれば、保護対象プログラムにおいて、偽装処理が、ダミーの命令より後方に記述されることになるので、この命令が実行された後に、偽装処理が実行され、この命令が偽装されることとなる。
【００４７】
一方、ステップＳ１３においてデータを選択した場合には、ステップＳ１６の処理を行った保護対象プログラムのうち、ダミーのデータを参照する処理より後方に、偽装処理を挿入する（後述の図５参照）。これによれば、保護対象プログラムにおいて、偽装処理が、ダミーのデータを参照する処理より後方に記述されることになるので、この処理が実行された後に、偽装処理が実行され、この処理により参照されるデータが偽装されることとなる。
【００４８】
ステップＳ１８において、ＣＰＵ１０により、変数Ｍに１を加算し、ステップＳ１９に移る。
【００４９】
ステップＳ１９において、ＣＰＵ１０により、変数Ｍが反復回数Ｎ以下であるか否かを判別する。そして、変数Ｍが反復回数Ｎ以下である場合には、すなわち上述のステップＳ１３〜Ｓ１８を繰り返した回数が反復回数Ｎ以下である場合には、ステップＳ１３に戻る。一方、変数Ｍが反復回数Ｎより大きい場合には、すなわち上述のステップＳ１３〜Ｓ１８を繰り返した回数が反復回数Ｎより多い場合には、第２の処理を終了する。
【００５０】
図４は、ステップＳ１３において命令を選択した場合における、ステップＳ１４〜Ｓ１７の処理を行う前後での保護対象プログラムを示す図である。
【００５１】
保護対象プログラム５０は、ステップＳ１３の処理を行った後の保護対象プログラムを示す。保護対象プログラム５０には、ステップＳ１において選択された保護する領域Ｐが定められており、保護対象プログラム５０のうち保護する領域Ｐには、ステップＳ１３において選択された命令５１が記述されている。
【００５２】
以上の保護対象プログラム５０に対してステップＳ１４〜Ｓ１７の処理を行ったものが、保護対象プログラム５０Ａである。保護対象プログラム５０Ａのうち保護する領域Ｐには、ステップＳ１３において選択された命令５１をステップＳ１４において置換した、ダミーの命令５１Ａが記述されている。また、ダミーの命令５１Ａの前方には、ステップＳ１５において挿入した、キャッシュフラッシュ５２が記述されている。また、キャッシュフラッシュ５２の前方には、ステップＳ１６において挿入した、復元処理５３が記述されている。また、ダミーの命令５１Ａの後方には、ステップＳ１７において挿入した、偽装処理５４が記述されている。
【００５３】
以上の保護対象プログラム５０Ａを実行する場合について、以下に説明する。まず、復元処理５３が実行される。これによれば、ダミーの命令５１Ａが、元の命令であるステップＳ１３において選択された命令５１に戻ることとなる。
【００５４】
次に、キャッシュフラッシュ５２が実行される。これによれば、キャッシュ２０とアドレス空間との整合性が確保され、これらの間に生じる不整合が解消されることとなる。
【００５５】
次に、上述の復元処理５３の実行により元に戻った、ステップＳ１３において選択された命令５１が実行される。
【００５６】
次に、偽装処理５４が実行される。これによれば、ステップＳ１３において選択された命令５１の実行後に、この命令５１がダミーに置換されることとなる。
【００５７】
以上によれば、保護対象プログラム５０Ａでは、復元処理５３が実行されてから、偽装処理５４が実行されるまでの期間でのみ、元の命令であるステップＳ１３において選択された命令５１を正しく読み出すことができ、この期間以外では、命令５１を読み出そうとしてもダミーの命令しか読み出すことができない。
【００５８】
図５は、ステップＳ１３においてデータを選択した場合における、ステップＳ１４〜Ｓ１７の処理を行う前後での保護対象プログラムを示す図である。
【００５９】
保護対象プログラム６０は、ステップＳ１３の処理を行った後の保護対象プログラムを示す。保護対象プログラム６０には、ステップＳ１において選択された保護する領域Ｑが定められており、保護対象プログラム６０のうち保護する領域Ｑには、ステップＳ１３において選択されたデータ６１と、このデータ６１を参照する処理６２と、が記述されている。
【００６０】
以上の保護対象プログラム６０に対してステップＳ１４〜Ｓ１７の処理を行ったものが、保護対象プログラム６０Ａである。保護対象プログラム６０Ａのうち保護する領域Ｑには、ステップＳ１３において選択されたデータ６１と、このデータ６１のダミーを参照する処理６２Ａと、が記述されている。ここで、データ６１のダミーを参照する処理６２Ａとは、データ６１を参照する処理について、参照するデータをステップＳ１４においてデータ６１からダミーのデータに置換したもののことである。また、データ６１のダミーを参照する処理６２Ａの前方には、ステップＳ１５において挿入した、キャッシュフラッシュ６３が記述されている。また、キャッシュフラッシュ６３の前方には、ステップＳ１６において挿入した、復元処理が記述されている。また、データ６１のダミーを参照する処理６２Ａの後方には、ステップＳ１７において挿入した、偽装処理６５が記述されている。
【００６１】
以上の保護対象プログラム６０Ａを実行する場合について、以下に説明する。まず、復元処理６４が実行される。これによれば、データ６１のダミーを参照する処理６２Ａが、データ６１を参照する処理６２に戻ることとなる。
【００６２】
次に、キャッシュフラッシュ６３が実行される。これによれば、キャッシュ２０とアドレス空間との整合性が確保され、これらの間に生じる不整合が解消されることとなる。
【００６３】
次に、上述の復元処理６４の実行により元に戻った、データ６１を参照する処理６２が実行される。
【００６４】
次に、偽装処理６５が実行される。これによれば、データ６１を参照する処理６２の実行後に、データ６１を参照する処理６２が、データ６１のダミーを参照する処理に、置換されることとなる。
【００６５】
以上によれば、保護対象プログラム６０Ａでは、復元処理６４が実行されてから、偽装処理６５が実行されるまでの期間でのみ、元のデータであるステップＳ１３において選択されたデータ６１を正しく読み出すことができ、この期間以外では、データ６１を読み出そうとしてもダミーのデータしか読み出すことができない。
【００６６】
以上の自己書き換え処理装置１によれば、以下の効果を奏することができる。
【００６７】
自己書き換え処理装置１は、ステップＳ２の処理を行って保護対象プログラムのアセンブラ記述を取得した後、ステップＳ１４の処理を行って、命令をダミーの命令に置換したり、データを参照する処理をダミーのデータを参照する処理に置換したりする。これによれば、保護対象プログラムに記述されている命令やデータは、偽装されることとなる。したがって、自己書き換え処理装置は、保護対象プログラムの解析および改ざんを困難にすることができる。
【００６８】
また、自己書き換え処理装置１は、ステップＳ１４の処理を行って命令やデータを偽装した保護対象プログラムに対して、ステップＳ１６の処理により復元処理を挿入するとともに、ステップＳ１７の処理により偽装処理を挿入する。このため、復元処理を実行することで、ダミーの命令やダミーのデータを元の命令や元のデータに戻すことができ、保護対象プログラムを正しく実行することができる。また、偽装処理を実行することで、処理を終えた命令やデータについて、ダミーの命令やダミーのデータに置き換えて、偽装することができる。以上によれば、復元処理を実行してから偽装処理を実行するまでの期間でのみ、命令やデータを正しく読み出すことができ、上述の期間以外では、命令やデータを正しく読み出すことができなくなる。したがって、保護対象プログラムの解析および改ざんをより困難にすることができる。
【００６９】
また、自己書き換え処理装置１は、ステップＳ１４の処理を行って命令やデータを偽装した保護対象プログラムに対して、ステップＳ１５の処理によりキャッシュフラッシュを挿入する。このため、命令や、データを参照する処理が実行される前に、キャッシュフラッシュを実行して、キャッシュ２０とアドレス空間との間で生じる不整合を解消できる。
【００７０】
また、自己書き換え処理装置１は、ステップＳ１２において設定した反復回数Ｎだけ、ステップＳ１３〜Ｓ１８の処理を繰り返す。このため、保護対象プログラムに記述されている命令およびデータについて、何重にも偽装する多重偽装を施すことができるので、保護対象プログラムの解析および改ざんをさらに困難にすることができる。
【００７１】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【００７２】
例えば、上述の実施形態では、ステップＳ１７において偽装処理を挿入することとした。このため、挿入した偽装処理を実行すると、元の命令および元のデータは、それぞれ、ダミーの命令およびダミーのデータに置換される。ここで、偽装処理の実行により置換されるダミーの命令およびダミーのデータは、それぞれ、ステップＳ１４において置換したダミーの命令およびダミーのデータと同一であってもよいし、異なっていてもよい。
【００７３】
また、上述の実施形態では、ステップＳ１６において復元処理を挿入した後、ステップＳ１７において偽装処理を挿入したが、これに限らず、例えば偽装処理を挿入した後に復元処理を挿入してもよい。
【００７４】
また、上述の実施形態では、ステップＳ１２において反復回数Ｎを設定することとした。ここで、反復回数Ｎを大きくするに従って、保護対象プログラムの解析および改ざんの困難性を向上させることができるが、その一方で、自己書き換え処理装置１で処理された保護対象プログラムを実行する際のパフォーマンスが低下する。このため、反復回数Ｎは、保護対象プログラムの解析および改ざんの困難性の度合いと、自己書き換え処理装置１で処理された保護対象プログラムを実行する際のパフォーマンスと、を勘案して決定されることが好ましい。
【００７５】
また、上述の実施形態では、命令に対しても、データに対しても、ステップＳ１５の処理を行うことでキャッシュフラッシュを挿入したが、これに限らない。例えば、データに対してはキャッシュ２０とアドレス空間との不整合が発生しない場合には、命令に対してのみ、ステップＳ１５の処理を行うことでキャッシュフラッシュの挿入を行ってもよい。
【符号の説明】
【００７６】
１・・・自己書き換え処理装置
１０・・・ＣＰＵ
２０・・・キャッシュ
５０、５０Ａ、６０、６０Ａ・・・保護対象プログラム
５２、６３・・・キャッシュフラッシュ
５３、６４・・・復元処理
５４、６５・・・偽装処理
【図１】
0005417228.tif 000002
【図２】
0005417228.tif 000003
【図３】
0005417228.tif 000004
【図４】
0005417228.tif 000005
【図５】
0005417228.tif 000006