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