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