説明

自己書き換え処理装置、自己書き換え処理方法、およびプログラム

【課題】保護対象プログラムの解析および改ざんの困難性を向上させることができる自己書き換え処理装置、自己書き換え処理方法、およびプログラムを提供する。
【解決手段】自己書き換え処理装置1は、CPU10と、保護対象プログラムを記憶するキャッシュ20と、を備える。CPU10は、保護対象プログラムに記述されている命令をダミーの命令に偽装し、ダミーに偽装した命令の元の命令を暗号化するとともに、暗号化に用いる鍵を偽装する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、自己書き換え処理装置、自己書き換え処理方法、およびプログラムに関する。
【背景技術】
【0002】
従来より、保護対象プログラムの解析および改ざんを困難にする手法が提案されている(例えば、特許文献1参照)。特許文献1には、保護対象プログラムの解析および改ざんを困難にする手法として、自己書き換えの手法が示されている。
【0003】
特許文献1の自己書き換えでは、まず、保護対象プログラムに記述されている命令を偽の命令で偽装する。次に、偽の命令の前方に、この偽の命令を元の命令に置換する第1の処理を挿入するとともに、偽の命令の後方に、第1の処理の実行により置換された元の命令を偽の命令に置換する第2の処理を挿入する。
【0004】
このため、特許文献1の自己書き換えを行った保護対象プログラムを実行すると、偽の命令が実行されるより前に、第1の処理が実行される。このため、偽の命令が元に戻った状態で実行されることとなる。また、偽の命令が元に戻った状態で実行された後に、第2の処理が実行される。このため、元に戻った命令が再度偽装されることとなる。したがって、偽装した命令は、実行前後の所定の期間でのみ元の命令に戻り、他の期間では偽装された状態となるので、保護対象プログラムの解析および改ざんが困難となる。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2004−192068号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1の自己書き換えを行った保護対象プログラムでは、第1の処理を実行するために、元の命令が保護対象プログラムに記述される。このため、どのような置換が行われるのかが容易に推測できてしまい、保護対象プログラムの解析および改ざんの困難性を向上できなかった。
【0007】
そこで、保護対象プログラムに記述される元の命令を予め暗号化しておき、偽装した偽の命令を元に戻す際に復号する手法が考えられる。ところが、この暗号化する手法では、暗号化の際に用いる鍵を保護対象プログラムに記述を記述しなくてはならない。このため、鍵が容易に漏洩してしまい、保護対象プログラムの解析および改ざんの困難性を向上できなかった。
【0008】
そこで、本発明は、上述の課題に鑑みてなされたものであり、保護対象プログラムの解析および改ざんの困難性を向上させることができる自己書き換え処理装置、自己書き換え処理方法、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
本発明は、上記の課題を解決するために、以下の事項を提案している。
【0010】
(1) 本発明は、保護対象プログラムを記憶する記憶手段(例えば、図1のキャッシュ20に相当)と、前記保護対象プログラムに記述されている命令を少なくとも1つ選択する選択手段(例えば、図1のCPU10に相当)と、前記選択手段により選択された命令を、鍵を用いて暗号化する命令暗号化手段(例えば、図1のCPU10に相当)と、前記命令暗号化手段により用いられた鍵を、ダミーの鍵に置換する鍵偽装手段(例えば、図1のCPU10に相当)と、前記鍵偽装手段により置換されたダミーの鍵を元の鍵に置換する鍵復元処理(例えば、図5の鍵復元処理55に相当)を、前記保護対象プログラムに挿入する鍵復元処理挿入手段(例えば、図1のCPU10に相当)と、前記命令暗号化手段により暗号化された命令を、前記鍵復元処理の実行により置換された元の鍵を用いて復号する命令復号処理(例えば、図5の命令復号処理52Aに相当)を、前記保護対象プログラムに挿入する命令復号処理挿入手段(例えば、図1のCPU10に相当)と、前記鍵復元処理の実行により置換された元の鍵をダミーの鍵に置換する鍵偽装処理(例えば、図5の鍵偽装処理56に相当)を、前記保護対象プログラムに挿入する鍵偽装処理挿入手段(例えば、図1のCPU10に相当)と、前記選択手段により選択された命令をダミーの命令に置換する命令偽装手段(例えば、図1のCPU10に相当)と、前記命令偽装手段により置換されたダミーの命令を、前記命令復号処理の実行により復号された元の命令に置換する命令復元処理(例えば、図5の命令復元処理53に相当)を、前記保護対象プログラムに挿入する命令復元処理挿入手段(例えば、図1のCPU10に相当)と、前記命令復元処理の実行により置換された元の命令をダミーの命令に置換する命令偽装処理(例えば、図5の命令偽装処理54に相当)を、前記保護対象プログラムに挿入する命令偽装処理挿入手段(例えば、図1のCPU10に相当)と、を備えることを特徴とする自己書き換え処理装置を提案している。
【0011】
この発明によれば、自己書き換え処理装置に、記憶手段、選択手段、命令暗号化手段、鍵偽装手段、鍵復元処理挿入手段、命令復号処理挿入手段、鍵偽装処理挿入手段、命令偽装手段、命令復元処理挿入手段、および命令偽装処理挿入手段を設けた。そして、記憶手段により、保護対象プログラムを記憶することとした。また、選択手段により、保護対象プログラムに記述されている命令を少なくとも1つ選択することとした。また、命令暗号化手段により、選択手段により選択された命令を、鍵を用いて暗号化することとした。また、鍵偽装手段により、命令暗号化手段により用いられた鍵を、ダミーの鍵に置換することとした。また、鍵復元処理挿入手段により、鍵復元処理を保護対象プログラムに挿入することとした。ここで、鍵復元処理とは、鍵偽装手段により置換されたダミーの鍵を元の鍵に置換する処理のことである。また、命令復号処理挿入手段により、命令復号処理を保護対象プログラムに挿入することとした。ここで、命令復号処理とは、命令暗号化手段により暗号化された命令を、鍵復元処理の実行により置換された元の鍵を用いて復号する処理のことである。また、鍵偽装処理挿入手段により、鍵偽装処理を保護対象プログラムに挿入することとした。ここで、鍵偽装処理とは、鍵復元処理の実行により置換された元の鍵をダミーの鍵に置換する処理のことである。また、命令偽装手段により、選択手段により選択された命令をダミーの命令に置換することとした。また、命令復元処理挿入手段により、命令復元処理を保護対象プログラムに挿入することとした。ここで、命令復元処理とは、命令偽装手段により置換されたダミーの命令を、命令復号処理の実行により復号された元の命令に置換する処理のことである。また、命令偽装処理挿入手段により、命令偽装処理を保護対象プログラムに挿入することとした。ここで、命令偽装処理とは、命令復元処理の実行により置換された元の命令をダミーの命令に置換する処理のことである。
【0012】
このため、自己書き換え処理装置は、命令偽装手段により、保護対象プログラムに記述されている命令をダミーの命令に置換するとともに、命令暗号化手段により、元の命令を暗号化する。これによれば、ダミーに偽装された命令の元の命令は、暗号化された状態となる。
【0013】
また、自己書き換え処理装置は、鍵偽装処理により、命令暗号化手段により命令を暗号化する際に用いる鍵を、鍵偽装手段によりダミーの鍵に予め偽装する。
【0014】
以上によれば、自己書き換え処理装置は、ダミーに偽装した命令の元の命令を暗号化するとともに、暗号化に用いる鍵を偽装するため、保護対象プログラムの解析および改ざんの困難性を向上させることができる。
【0015】
(2) 本発明は、(1)の自己書き換え処理装置について、前記命令復号処理挿入手段は、前記命令復号処理を、前記保護対象プログラムのうち、前記命令偽装手段により置換されたダミーの命令(例えば、図5のダミーの第1命令セット51Aに相当)より前方に挿入し、前記命令復元処理挿入手段は、前記命令復元処理を、前記保護対象プログラムのうち、前記命令復号処理(例えば、図5の命令復号処理52Aに相当)と、前記命令偽装手段により置換されたダミーの命令(例えば、図5のダミーの第1命令セット51Aに相当)と、の間に挿入し、前記命令偽装処理挿入手段は、前記命令偽装処理を、前記保護対象プログラムのうち、前記命令偽装手段により置換されたダミーの命令(例えば、図5のダミーの第1命令セット51Aに相当)の後方に挿入し、前記鍵復元処理挿入手段は、前記鍵復元処理を、前記保護対象プログラムのうち前記命令復号処理(例えば、図5の命令復号処理52Aに相当)より前方に挿入し、前記鍵偽装処理挿入手段は、前記鍵偽装処理を、前記保護対象プログラムのうち前記命令復号処理(例えば、図5の命令復号処理52Aに相当)より後方に挿入することを特徴とする自己書き換え処理装置を提案している。
【0016】
この発明によれば、(1)の自己書き換え処理装置において、命令復号処理挿入手段は、命令復号処理を、保護対象プログラムのうち、命令偽装手段により置換されたダミーの命令より前方に挿入することとした。また、命令復元処理挿入手段は、命令復元処理を、保護対象プログラムのうち、命令復号処理と、命令偽装手段により置換されたダミーの命令と、の間に挿入することとした。また、命令偽装処理挿入手段は、命令偽装処理を、保護対象プログラムのうち、命令偽装手段により置換されたダミーの命令の後方に挿入することとした。また、鍵復元処理挿入手段は、鍵復元処理を、保護対象プログラムのうち命令復号処理より前方に挿入することとした。また、鍵偽装処理挿入手段は、鍵偽装処理を、保護対象プログラムのうち命令復号処理より後方に挿入することとした。
【0017】
このため、自己書き換え処理装置により上述の各処理が行われた後の保護対象プログラムを実行すると、まず、鍵復元処理が実行され、偽装されていた鍵が元に戻ることになる。次に、命令復号処理が実行され、元に戻った鍵を用いて命令が復号されることになる。次に、鍵偽装処理が実行され、復号に用いた鍵が再度偽装されるとともに、命令復元処理が実行され、偽装されていた命令が復号した命令に戻ることになる。次に、この命令が実行された後に、命令偽装処理が実行され、この命令が再度偽装されることになる。これによれば、上述した効果と同様の効果を奏することができる。
【0018】
(3) 本発明は、(1)または(2)の自己書き換え処理装置について、前記選択手段による選択と、前記命令暗号化手段よる暗号化と、前記鍵偽装手段による置換と、前記鍵復元処理挿入手段による挿入と、前記命令復号処理挿入手段による挿入と、前記鍵偽装処理挿入手段による挿入と、前記命令偽装手段による置換と、前記命令復元処理挿入手段による挿入と、前記命令偽装処理挿入手段による挿入と、を予め定められた回数(例えば、図2および図3の反復回数Nに相当)だけ繰り返すことを特徴とする自己書き換え処理装置を提案している。
【0019】
この発明によれば、選択手段による選択と、命令暗号化手段よる暗号化と、鍵偽装手段による置換と、鍵復元処理挿入手段による挿入と、命令復号処理挿入手段による挿入と、鍵偽装処理挿入手段による挿入と、命令偽装手段による置換と、命令復元処理挿入手段による挿入と、命令偽装処理挿入手段による挿入と、を予め定められた回数だけ繰り返すこととした。
【0020】
このため、上述の予め定められた回数として、1以上の値を設定することで、ダミーに偽装した命令の元の命令の暗号化と、暗号化に用いる鍵の偽装と、を複数回行うことができ、保護対象プログラムの解析および改ざんの困難性をさらに向上させることができる。
【0021】
(4) 本発明は、保護対象プログラムに記述されている命令を少なくとも1つ選択する第1ステップ(例えば、図2のステップS6および図3のステップS22に相当)と、前記第1ステップにおいて選択した命令を、鍵を用いて暗号化する第2ステップ(例えば、図3のステップS23に相当)と、前記第2ステップにおいて用いた鍵を、ダミーの鍵に置換する第3ステップ(例えば、図3のステップS30に相当)と、前記第3ステップにおいて置換したダミーの鍵を元の鍵に置換する鍵復元処理(例えば、図5の鍵復元処理55に相当)を、前記保護対象プログラムに挿入する第4ステップ(例えば、図3のステップS31に相当)と、前記第2ステップにおいて暗号化した命令を、前記鍵復元処理の実行により置換された元の鍵を用いて復号する命令復号処理(例えば、図5の命令復号処理52Aに相当)を、前記保護対象プログラムに挿入する第5ステップ(例えば、図2のステップS7および図3のステップS26に相当)と、前記鍵復元処理の実行により置換された元の鍵をダミーの鍵に置換する鍵偽装処理(例えば、図5の鍵偽装処理56に相当)を、前記保護対象プログラムに挿入する第6ステップ(例えば、図3のステップS32に相当)と、前記第1ステップにおいて選択した命令をダミーの命令に置換する第7ステップ(例えば、図3のステップS25に相当)と、前記第7ステップにおいて置換したダミーの命令を、前記命令復号処理の実行により復号された元の命令に置換する命令復元処理(例えば、図5の命令復元処理53に相当)を、前記保護対象プログラムに挿入する第8ステップ(例えば、図3のステップS27に相当)と、前記命令復元処理の実行により置換された元の命令をダミーの命令に置換する命令偽装処理(例えば、図5の命令偽装処理54に相当)を、前記保護対象プログラムに挿入する第9ステップ(例えば、図3のステップS28に相当)と、を備えることを特徴とする自己書き換え処理方法を提案している。
【0022】
この発明によれば、保護対象プログラムに記述されている命令を少なくとも1つ選択する。そして、選択した命令を鍵を用いて暗号化し、この鍵をダミーの鍵に置換する。そして、ダミーの鍵を元の鍵に置換する鍵復元処理と、暗号化した命令を鍵復元処理の実行により置換された元の鍵を用いて復号する命令復号処理と、鍵復元処理の実行により置換された元の鍵をダミーの鍵に置換する鍵偽装処理と、を保護対象プログラムに挿入する。また、上述の選択した命令をダミーの命令に置換し、ダミーの命令を命令復号処理の実行により復号された元の命令に置換する命令復元処理と、命令復元処理の実行により置換された元の命令をダミーの命令に置換する命令偽装処理と、を保護対象プログラムに挿入する。以上によれば、上述した効果と同様の効果を奏することができる。
【0023】
(5) 本発明は、保護対象プログラムに記述されている命令を少なくとも1つ選択する第1ステップ(例えば、図2のステップS6および図3のステップS22に相当)と、前記第1ステップにおいて選択した命令を、鍵を用いて暗号化する第2ステップ(例えば、図3のステップS23に相当)と、前記第2ステップにおいて用いた鍵を、ダミーの鍵に置換する第3ステップ(例えば、図3のステップS30に相当)と、前記第3ステップにおいて置換したダミーの鍵を元の鍵に置換する鍵復元処理(例えば、図5の鍵復元処理55に相当)を、前記保護対象プログラムに挿入する第4ステップ(例えば、図3のステップS31に相当)と、前記第2ステップにおいて暗号化した命令を、前記鍵復元処理の実行により置換された元の鍵を用いて復号する命令復号処理(例えば、図5の命令復号処理52Aに相当)を、前記保護対象プログラムに挿入する第5ステップ(例えば、図2のステップS7および図3のステップS26に相当)と、前記鍵復元処理の実行により置換された元の鍵をダミーの鍵に置換する鍵偽装処理(例えば、図5の鍵偽装処理56に相当)を、前記保護対象プログラムに挿入する第6ステップ(例えば、図3のステップS32に相当)と、前記第1ステップにおいて選択した命令をダミーの命令に置換する第7ステップ(例えば、図3のステップS25に相当)と、前記第7ステップにおいて置換したダミーの命令を、前記命令復号処理の実行により復号された元の命令に置換する命令復元処理(例えば、図5の命令復元処理53に相当)を、前記保護対象プログラムに挿入する第8ステップ(例えば、図3のステップS27に相当)と、前記命令復元処理の実行により置換された元の命令をダミーの命令に置換する命令偽装処理(例えば、図5の命令偽装処理54に相当)を、前記保護対象プログラムに挿入する第9ステップ(例えば、図3のステップS28に相当)と、コンピュータに実行させるためのプログラムを提案している。
【0024】
この発明によれば、プログラムをコンピュータに実行させることで、保護対象プログラムに記述されている命令を少なくとも1つ選択する。そして、選択した命令を鍵を用いて暗号化し、この鍵をダミーの鍵に置換する。そして、ダミーの鍵を元の鍵に置換する鍵復元処理と、暗号化した命令を鍵復元処理の実行により置換された元の鍵を用いて復号する命令復号処理と、鍵復元処理の実行により置換された元の鍵をダミーの鍵に置換する鍵偽装処理と、を保護対象プログラムに挿入する。また、上述の選択した命令をダミーの命令に置換し、ダミーの命令を命令復号処理の実行により復号された元の命令に置換する命令復元処理と、命令復元処理の実行により置換された元の命令をダミーの命令に置換する命令偽装処理と、を保護対象プログラムに挿入する。以上によれば、上述した効果と同様の効果を奏することができる。
【発明の効果】
【0025】
本発明によれば、ダミーに偽装した命令の元の命令を暗号化するとともに、暗号化に用いる鍵を偽装するため、保護対象プログラムの解析および改ざんの困難性を向上させることができる。
【図面の簡単な説明】
【0026】
【図1】本発明の一実施形態に係る自己書き換え処理装置の構成を示すブロック図である。
【図2】前記自己書き換え処理装置における第1の処理のフローチャートである。
【図3】前記自己書き換え処理装置における第2の処理のフローチャートである。
【図4】前記第1の処理および前記第2の処理を説明するための図である。
【図5】前記第1の処理および前記第2の処理を説明するための図である。
【図6】前記第1の処理および前記第2の処理を説明するための図である。
【図7】前記第1の処理および前記第2の処理を説明するための図である。
【図8】前記第1の処理および前記第2の処理を説明するための図である。
【発明を実施するための形態】
【0027】
以下、本発明の実施形態について図面を参照しながら説明する。なお、以下の実施形態における構成要素は適宜、既存の構成要素などとの置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、以下の実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【0028】
[自己書き換え処理装置1の構成]
図1は、本発明の一実施形態に係る自己書き換え処理装置1の構成を示すブロック図である。自己書き換え処理装置1は、様々な演算処理を行うCPU(Central Processing Unit)10と、保護対象プログラムを記憶するキャッシュ20と、を備える。
【0029】
自己書き換え処理装置1は、後述の第1の処理(図2参照)を実行した後、後述の第2の処理(図3参照)を実行することにより、保護対象プログラムの解析および改ざんの困難性を向上させる。
【0030】
[第1の処理]
図2は、上述の第1の処理のフローチャートである。
【0031】
ステップS1において、自己書き換え処理装置1は、CPU10により、暗号化するビットサイズL(Lは、L>0を満たす整数)を設定し、ステップS2に処理を移す。具体的には、暗号化する命令の数と、1命令当たりのビット数と、を乗算してビットサイズLとする。例えば、1つの命令が32ビットである環境において、4つの命令を暗号化する場合には、ビットサイズLは、128ビットとなる。なお、暗号化する命令の数は、例えば自己書き換え処理装置1のユーザにより決定される。
【0032】
ステップS2において、自己書き換え処理装置1は、CPU10により、反復回数N(Nは、N≧0を満たす整数)を設定し、ステップS3に処理を移す。
【0033】
ステップS3において、自己書き換え処理装置1は、CPU10により、変数Pに「0」を代入することで変数Pを初期化し、ステップS4に処理を移す。
【0034】
ステップS4において、自己書き換え処理装置1は、CPU10により、暗号化した命令を格納するためのデータ領域をキャッシュ20に確保し、ステップS5に処理を移す。なお、命令の暗号化は、後述の図3のステップS23において行われるため、暗号化した命令は、ステップS4が実行された段階では存在していない。このため、ステップS4を実行した段階では、暗号化した命令を格納するためにキャッシュ20に確保したデータ領域には、nullが格納される。
【0035】
ステップS5において、自己書き換え処理装置1は、CPU10により、命令を暗号化する際に用いる鍵を生成し、この鍵を格納するためのデータ領域をキャッシュ20に確保し、上述の生成した鍵を上述の確保したデータ領域に格納し、ステップS6に処理を移す。鍵の生成には、暗号鍵生成用疑似乱数を用いる。暗号鍵生成用疑似乱数は、CPU10で生成してもよいし、CPU10とは別に、乱数を生成する乱数生成器と、乱数生成器で生成された乱数をサンプリングするサンプリング部と、を設け、これら乱数生成器およびサンプリング部で生成してもよい。
【0036】
ステップS6において、自己書き換え処理装置1は、CPU10により、キャッシュ20に記憶されている保護対象プログラムのうち、保護する領域を選択し、ステップS7に処理を移す。なお、保護する領域は、例えば自己書き換え処理装置1のユーザにより、保護対象プログラムの中から決定されるものとする。また、キャッシュ20に記憶されている保護対象プログラムとは、C言語やJava(登録商標)といった高級言語で記述されているものとする。
【0037】
ステップS7において、自己書き換え処理装置1は、CPU10により、命令復号処理を、ステップS6の処理を行った保護対象プログラムに挿入し、ステップS8に処理を移す。なお、命令復号処理とは、暗号化した命令を復号する処理のことである。この命令復号処理は、ステップS6の処理が行われた保護対象プログラムのうち、ステップS6において選択された領域の前方に、挿入される。なお、保護対象プログラムに記述されているどの命令を暗号化するのかは、後述の図3のステップS22において定まるため、ステップS7が実行された段階では分からない。このため、ステップS7を実行した段階では、命令復号処理には仮引数が割り当てられる。
【0038】
ステップS8において、自己書き換え処理装置1は、CPU10により、変数Pに1を加算し、ステップS9に処理を移す。
【0039】
ステップS9において、自己書き換え処理装置1は、CPU10により、変数Pが反復回数N以下であるか否かを判別する。そして、変数Pが反復回数N以下である場合には、すなわち上述のステップS7、S8の各処理を行った回数が反復回数N以下である場合には、ステップS7に処理を戻す。一方、変数Pが反復回数Nより大きい場合には、すなわち上述のステップS7、S8の各処理を行った回数が反復回数Nより多い場合には、ステップS10に処理を移す。
【0040】
ステップS10において、自己書き換え処理装置1は、CPU10により、ステップS7の処理を行った保護対象プログラムについて、アセンブラ記述を取得し、第1の処理を終了する。具体的には、ステップS7の処理を行った保護対象プログラムについて、コンパイルして、アセンブリプログラムに変換する。
【0041】
[第2の処理]
図3は、上述の第2の処理のフローチャートである。
【0042】
ステップS21において、自己書き換え処理装置1は、CPU10により、変数Qに「0」を代入することで変数Qを初期化し、ステップS22に処理を移す。
【0043】
ステップS22において、自己書き換え処理装置1は、CPU10により、ステップS10において取得したアセンブラ記述の保護対象プログラムのうち、ステップS6において選択した保護する領域に対応する領域から、第1命令セットを選択し、ステップS23に処理を移す。なお、第1命令セットとは、暗号化する命令の集合のことであり、ステップS1において設定したビットサイズLに応じた数の命令で構成されるもののことである。例えば、1つの命令が32ビットである環境において、ビットサイズLとして128ビットを設定した場合には、第1命令セットは、4つの命令で構成されることとなる。
【0044】
ステップS23において、自己書き換え処理装置1は、CPU10により、ステップS5において生成した鍵を用いて第1命令セットを暗号化し、ステップS24に処理を移す。
【0045】
ステップS24において、自己書き換え処理装置1は、CPU10により、ステップS23において暗号化した第1命令セットを、ステップS4において確保したデータ領域に格納し、ステップS25に処理を移す。
【0046】
ステップS25において、自己書き換え処理装置1は、CPU10により、第1命令セットをダミーの第1命令セットに置換し、ステップS26に処理を移す。これによれば、第1命令セットが偽装されることとなる。
【0047】
ステップS26において、自己書き換え処理装置1は、CPU10により、ステップS7において挿入した命令復号処理の引数に、ステップS22において選択した第1命令セットのアドレスと、ステップS24において格納した第1命令セットのアドレスと、を代入し、ステップS27に処理を移す。これによれば、鍵を用意した上で命令復号処理を実行すると、ステップS23において暗号化した第1命令セットが、復号されることとなる。
【0048】
ステップS27において、自己書き換え処理装置1は、CPU10により、命令復元処理を、ステップS26の処理を行った保護対象プログラムに挿入し、ステップS28に処理を移す。なお、命令復元処理とは、ダミーの第1命令セットを元の第1命令セットに置換する処理のことである。この命令復元処理は、ステップS26の処理が行われた保護対象プログラムのうち、ステップS26において引数を代入された命令復号処理と、ステップS25において置換されたダミーの第1命令セットと、の間に挿入される。これによれば、命令復号処理、命令復元処理の順に実行された後、第1命令セットが実行されることとなる。
【0049】
なお、上述のように、第1命令セットは、ステップS23において暗号化される。このため、仮に、命令復号処理が実行されることなく、命令復元処理が実行された場合には、元の第1命令セットが暗号化された状態のまま、命令復元処理が実行されることになるので、ダミーの第1命令セットを元の第1命令セットに正しく置換することができなくなる。ところが、本実施形態では、命令復号処理が実行された後に、命令復元処理が実行されるので、ダミーの第1命令セットを元の第1命令セットに正しく置換することができる。
【0050】
ステップS28において、自己書き換え処理装置1は、CPU10により、命令偽装処理を、ステップS27の処理を行った保護対象プログラムに挿入し、ステップS29に処理を移す。なお、命令偽装処理とは、元の第1命令セットをダミーの第1命令セットに置換する処理のことである。この命令偽装処理は、ステップS27の処理が行われた保護対象プログラムのうち、ステップS25において置換されたダミーの第1命令セットの後方に、挿入される。これによれば、第1命令セットが実行された後に、命令偽装処理が実行されることとなる。このため、第1命令セットが実行された後に、この第1命令セットは、再度偽装されることとなる。
【0051】
ステップS29において、自己書き換え処理装置1は、CPU10により、ステップS23において用いた鍵にあたる命令セットを、第2命令セットとして選択し、ステップS30に処理を移す。
【0052】
ステップS30において、自己書き換え処理装置1は、CPU10により、第2命令セットをダミーの第2命令セットに置換し、ステップS31に処理を移す。これによれば、第2命令セットが偽装されることとなる。
【0053】
ステップS31において、自己書き換え処理装置1は、CPU10により、鍵復元処理を、ステップS30の処理を行った保護対象プログラムに挿入し、ステップS32に処理を移す。なお、鍵復元処理とは、ダミーの第2命令セットを元の第2命令セットに置換する処理のことである。この鍵復元処理は、ステップS30の処理が行われた保護対象プログラムのうち、ステップS26において引数を代入された命令復号処理の前方に、挿入される。これによれば、鍵復元処理が実行された後に、命令復号処理が実行されることとなる。このため、命令復号処理が実行される時点では、偽装されていた鍵が元に戻された状態となる。
【0054】
ステップS32において、自己書き換え処理装置1は、CPU10により、鍵偽装処理を、ステップS31の処理を行った保護対象プログラムに挿入し、ステップS33に処理を移す。なお、鍵偽装処理とは、元の第2命令セットをダミーの第2命令セットに置換する処理のことである。この鍵偽装処理は、ステップS31の処理が行われた保護対象プログラムのうち、ステップS26において引数を代入された命令復号処理の後方に、挿入される。これによれば、命令復号処理が実行された後に、鍵偽装処理が実行されることとなる。このため、命令復号処理において鍵が用いられた後に、この鍵は、再度偽装されることとなる。
【0055】
ステップS33において、自己書き換え処理装置1は、CPU10により、変数Qに1を加算し、ステップS34に処理を移す。
【0056】
ステップS34において、自己書き換え処理装置1は、CPU10により、変数Qが反復回数N以下であるか否かを判別する。そして、変数Qが反復回数N以下である場合には、すなわち上述のステップS22〜S33の各処理を行った回数が反復回数N以下である場合には、ステップS22に処理を戻す。一方、変数Qが反復回数Nより大きい場合には、すなわち上述のステップS22〜S33の各処理を行った回数が反復回数Nより多い場合には、第2の処理を終了する。
【0057】
[第1の処理および第2の処理を行った後の保護対象プログラム]
まず、反復回数Nを「1」として、上述の第1の処理および上述の第2の処理を行った場合について、図4および図5を用いて以下に説明する。
【0058】
図4は、反復回数Nを「1」として上述の第1の処理を行った場合の、保護対象プログラム50を示す図である。
【0059】
まず、ステップS1〜S4の各処理が行われた後に、ステップS5の処理が行われ、暗号化に用いる鍵が生成され、キャッシュ20に確保されたデータ領域に格納される。このため、暗号化に用いる鍵は、保護対象プログラム50には記述されない。
【0060】
次に、ステップS6の処理が行われ、保護する領域が選択される。なお、選択された領域には、保護したい命令の集合である命令セットが記述されていることとなる。
【0061】
次に、ステップS7の処理が行われ、ステップS6において選択された領域の前方に、すなわち保護したい命令セットの前方に、命令復号処理が挿入される。なお、ステップS7において命令復号処理が挿入された時点では、上述のステップS26の処理が行われていないので、命令復号処理には仮引数が割り当てられている。
【0062】
次に、ステップS8、S9の各処理が行われた後に、ステップS10の処理が行われ、ステップS7の処理が行われた保護対象プログラムのアセンブラ記述が取得される。これによれば、上述の保護したい命令セットが、アセンブラで記述された保護したい命令セット51に変換されるとともに、上述の命令復号処理が、アセンブラで記述された命令復号処理52に変換されることとなる。
【0063】
図5は、保護対象プログラム50Aを示す図である。保護対象プログラム50Aは、図4に示した保護対象プログラム50に対して、反復回数Nを「1」として上述の第2の処理を行ったものである。
【0064】
まず、ステップS21の処理が行われた後に、ステップS22の処理が行われ、第1命令セットが選択される。ここでは、第1命令セットとして、図4に示した保護したい命令セット51が選択されたものとする。
【0065】
次に、ステップS23の処理が行われ、第1命令セットとしての保護したい命令セット51が暗号化される。暗号化された第1命令セットは、ステップS24において、ステップS4において確保されたデータ領域に格納されるため、保護対象プログラム50Aには記述されない。
【0066】
次に、ステップS25の処理が行われ、第1命令セットとしての保護したい命令セット51が、ダミーの第1命令セット51Aに置換され、偽装される。
【0067】
次に、ステップS26の処理が行われ、図4に示した命令復号処理52の仮引数が上述の各アドレスに置き換えられる。ここでは、図4に示した命令復号処理52に対してステップS26の処理を行ったものを、命令復号処理52Aとする。
【0068】
次に、ステップS27の処理が行われ、命令復号処理52Aとダミーの第1命令セット51Aとの間に、命令復元処理53が挿入される。
【0069】
次に、ステップS28の処理が行われ、ダミーの第1命令セット51Aの後方に、命令偽装処理54が挿入される。
【0070】
次に、ステップS29の処理が行われた後に、ステップS30の処理が行われ、ステップS23において保護したい命令セット51を暗号化する際に用いられた鍵が、ダミーの鍵に置換され、偽装される。
【0071】
次に、ステップS31の処理が行われ、命令復号処理52Aの前方に、鍵復元処理55が挿入される。
【0072】
次に、ステップS32の処理が行われ、命令復号処理52Aの後方に、鍵偽装処理56が挿入される。
【0073】
次に、反復回数Nを「2」として、上述の第1の処理および上述の第2の処理を行った場合について、図6〜図8を用いて以下に説明する。
【0074】
図6は、反復回数Nを「2」として上述の第1の処理を行った場合の、保護対象プログラム60を示す図である。
【0075】
保護対象プログラム60は、図4に示した保護対象プログラム50とは、挿入される命令復号処理の数が異なる。具体的には、保護対象プログラム60には、保護したい命令セット61の前方に、命令復号処理621、622が挿入される。
【0076】
図7は、保護対象プログラム60Aを示す図である。保護対象プログラム60Aは、図6に示した保護対象プログラム60に対して、ステップS21の処理を行った後に、ステップS22〜S33の各処理を1回行ったものである。
【0077】
保護対象プログラム60Aにおいては、保護対象プログラム50Aと同様に、ステップS22において、第1命令セットとして保護したい命令セット61が選択され、保護したい命令セット61に関してステップS23〜S33の各処理が行われる。このため、保護対象プログラム60Aには、図5に示した保護対象プログラム50Aの鍵復元処理55、命令復号処理52A、鍵偽装処理56、命令復元処理53、ダミーの第1命令セット51A、および命令偽装処理54のそれぞれに相当するものとして、鍵復元処理65、命令復号処理621A、鍵偽装処理66、命令復元処理63、ダミーの第1命令セット61A、および命令偽装処理64がそれぞれ記述されることとなる。また、保護対象プログラム60Aには、鍵復元処理65の前方に、図6に示した命令復号処理622が記述されることとなる。
【0078】
図8は、保護対象プログラム60Bを示す図である。保護対象プログラム60Bは、図7に示した保護対象プログラム60Aに対して、ステップS22〜S33の各処理を1回行ったものである。
【0079】
まず、ステップS21の処理が行われた後に、ステップS22の処理が行われ、第1命令セットが選択される。ここでは、第1命令セットとして、図7に示した鍵復元処理65が選択されたものとする。
【0080】
次に、ステップS23の処理が行われ、第1命令セットとしての鍵復元処理65が暗号化される。暗号化された第1命令セットは、ステップS24において、ステップS4において確保されたデータ領域に格納されるため、保護対象プログラム60Bには記述されない。
【0081】
次に、ステップS25の処理が行われ、第1命令セットとしての鍵復元処理65が、ダミーの第1命令セット65Aに置換され、偽装される。
【0082】
次に、ステップS26の処理が行われ、図7に示した命令復号処理622の仮引数が上述の各アドレスに置き換えられる。ここでは、図7に示した命令復号処理622に対してステップS26の処理を行ったものを、命令復号処理622Aとする。
【0083】
次に、ステップS27の処理が行われ、命令復号処理622Aとダミーの第1命令セット65Aとの間に、命令復元処理653が挿入される。
【0084】
次に、ステップS28の処理が行われ、ダミーの第1命令セット65Aの後方に、命令偽装処理654が挿入される。
【0085】
次に、ステップS29の処理が行われた後に、ステップS30の処理が行われ、ステップS23において鍵復元処理65を暗号化する際に用いられた鍵が、ダミーの鍵に置換され、偽装される。
【0086】
次に、ステップS31の処理が行われ、命令復号処理622Aの前方に、鍵復元処理655が挿入される。
【0087】
次に、ステップS32の処理が行われ、命令復号処理622Aの後方に、鍵偽装処理656が挿入される。
【0088】
以上の自己書き換え処理装置1によれば、以下の効果を奏することができる。
【0089】
自己書き換え処理装置1は、ステップS25の処理を行って、保護対象プログラムに記述されている命令をダミーの命令に置換するとともに、ステップS23の処理を行って、元の命令を暗号化する。これによれば、ダミーに偽装された命令の元の命令は、暗号化された状態となる。
【0090】
また、自己書き換え処理装置1は、ステップS30の処理を行って、ステップS23において命令を暗号化する際に用いる鍵を、ダミーの鍵に予め偽装する。
【0091】
以上によれば、自己書き換え処理装置1は、ダミーに偽装した命令の元の命令を暗号化するとともに、暗号化に用いる鍵を偽装するため、保護対象プログラムの解析および改ざんの困難性を向上させることができる。
【0092】
また、自己書き換え処理装置1は、ステップS2において設定した反復回数Nだけ、ステップS7、S8の処理と、ステップS22〜S33の処理と、を繰り返す。このため、保護対象プログラムに記述されている命令の偽装と、この命令の暗号化と、暗号化に用いた鍵の偽装と、を複数回行うことができるので、保護対象プログラムの解析および改ざんの困難性をさらに向上させることができる。
【0093】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【0094】
例えば、上述の実施形態では、ステップS5において鍵を生成したが、これに限らず、例えば自己書き換え処理装置1とは異なる装置により予め生成してもよい。
【0095】
また、上述の実施形態では、ステップS28において命令偽装処理を挿入することとした。このため、命令偽装処理を実行すると、元の命令がダミーの命令に置換される。ここで、命令偽装処理の実行により置換されるダミーの命令は、ステップS25において置換したダミーの命令と同一であってもよいし、異なっていてもよい。また、命令を暗号化する際に用いた鍵についても、ステップS32において挿入した鍵偽装処理の実行により置換されるダミーの鍵は、ステップS30において置換したダミーの鍵と同一であってもよいし、異なっていてもよい。
【0096】
また、上述の実施形態では、ステップS27において命令復元処理を挿入した後に、ステップS28において命令偽装処理を挿入することとしたが、これに限らず、命令偽装処理を挿入した後に命令復元処理を挿入することとしてもよい。また、鍵復元処理および鍵偽装処理についても、鍵偽装処理を挿入した後に鍵復元処理を挿入することとしてもよい。
【0097】
また、上述の実施形態では、ステップS2において反復回数Nを設定することとした。ここで、反復回数Nを大きくするに従って、保護対象プログラムの解析および改ざんの困難性を向上させることができるが、その一方で、自己書き換え処理装置1で処理された保護対象プログラムを実行する際のパフォーマンスが低下する。このため、反復回数Nは、保護対象プログラムの解析および改ざんの困難性の度合いと、自己書き換え処理装置1で処理された保護対象プログラムを実行する際のパフォーマンスと、を勘案して決定されることが好ましい。
【符号の説明】
【0098】
1・・・自己書き換え処理装置
10・・・CPU
20・・・キャッシュ
50、50A、60、60A、60B・・・保護対象プログラム

【特許請求の範囲】
【請求項1】
保護対象プログラムを記憶する記憶手段と、
前記保護対象プログラムに記述されている命令を少なくとも1つ選択する選択手段と、
前記選択手段により選択された命令を、鍵を用いて暗号化する命令暗号化手段と、
前記命令暗号化手段により用いられた鍵を、ダミーの鍵に置換する鍵偽装手段と、
前記鍵偽装手段により置換されたダミーの鍵を元の鍵に置換する鍵復元処理を、前記保護対象プログラムに挿入する鍵復元処理挿入手段と、
前記命令暗号化手段により暗号化された命令を、前記鍵復元処理の実行により置換された元の鍵を用いて復号する命令復号処理を、前記保護対象プログラムに挿入する命令復号処理挿入手段と、
前記鍵復元処理の実行により置換された元の鍵をダミーの鍵に置換する鍵偽装処理を、前記保護対象プログラムに挿入する鍵偽装処理挿入手段と、
前記選択手段により選択された命令をダミーの命令に置換する命令偽装手段と、
前記命令偽装手段により置換されたダミーの命令を、前記命令復号処理の実行により復号された元の命令に置換する命令復元処理を、前記保護対象プログラムに挿入する命令復元処理挿入手段と、
前記命令復元処理の実行により置換された元の命令をダミーの命令に置換する命令偽装処理を、前記保護対象プログラムに挿入する命令偽装処理挿入手段と、を備えることを特徴とする自己書き換え処理装置。
【請求項2】
前記命令復号処理挿入手段は、前記命令復号処理を、前記保護対象プログラムのうち、前記命令偽装手段により置換されたダミーの命令より前方に挿入し、
前記命令復元処理挿入手段は、前記命令復元処理を、前記保護対象プログラムのうち、前記命令復号処理と、前記命令偽装手段により置換されたダミーの命令と、の間に挿入し、
前記命令偽装処理挿入手段は、前記命令偽装処理を、前記保護対象プログラムのうち、前記命令偽装手段により置換されたダミーの命令の後方に挿入し、
前記鍵復元処理挿入手段は、前記鍵復元処理を、前記保護対象プログラムのうち前記命令復号処理より前方に挿入し、
前記鍵偽装処理挿入手段は、前記鍵偽装処理を、前記保護対象プログラムのうち前記命令復号処理より後方に挿入することを特徴とする請求項1に記載の自己書き換え処理装置。
【請求項3】
前記選択手段による選択と、前記命令暗号化手段よる暗号化と、前記鍵偽装手段による置換と、前記鍵復元処理挿入手段による挿入と、前記命令復号処理挿入手段による挿入と、前記鍵偽装処理挿入手段による挿入と、前記命令偽装手段による置換と、前記命令復元処理挿入手段による挿入と、前記命令偽装処理挿入手段による挿入と、を予め定められた回数だけ繰り返すことを特徴とする請求項1または2に記載の自己書き換え処理装置。
【請求項4】
保護対象プログラムに記述されている命令を少なくとも1つ選択する第1ステップと、
前記第1ステップにおいて選択した命令を、鍵を用いて暗号化する第2ステップと、
前記第2ステップにおいて用いた鍵を、ダミーの鍵に置換する第3ステップと、
前記第3ステップにおいて置換したダミーの鍵を元の鍵に置換する鍵復元処理を、前記保護対象プログラムに挿入する第4ステップと、
前記第2ステップにおいて暗号化した命令を、前記鍵復元処理の実行により置換された元の鍵を用いて復号する命令復号処理を、前記保護対象プログラムに挿入する第5ステップと、
前記鍵復元処理の実行により置換された元の鍵をダミーの鍵に置換する鍵偽装処理を、前記保護対象プログラムに挿入する第6ステップと、
前記第1ステップにおいて選択した命令をダミーの命令に置換する第7ステップと、
前記第7ステップにおいて置換したダミーの命令を、前記命令復号処理の実行により復号された元の命令に置換する命令復元処理を、前記保護対象プログラムに挿入する第8ステップと、
前記命令復元処理の実行により置換された元の命令をダミーの命令に置換する命令偽装処理を、前記保護対象プログラムに挿入する第9ステップと、を備えることを特徴とする自己書き換え処理方法。
【請求項5】
保護対象プログラムに記述されている命令を少なくとも1つ選択する第1ステップと、
前記第1ステップにおいて選択した命令を、鍵を用いて暗号化する第2ステップと、
前記第2ステップにおいて用いた鍵を、ダミーの鍵に置換する第3ステップと、
前記第3ステップにおいて置換したダミーの鍵を元の鍵に置換する鍵復元処理を、前記保護対象プログラムに挿入する第4ステップと、
前記第2ステップにおいて暗号化した命令を、前記鍵復元処理の実行により置換された元の鍵を用いて復号する命令復号処理を、前記保護対象プログラムに挿入する第5ステップと、
前記鍵復元処理の実行により置換された元の鍵をダミーの鍵に置換する鍵偽装処理を、前記保護対象プログラムに挿入する第6ステップと、
前記第1ステップにおいて選択した命令をダミーの命令に置換する第7ステップと、
前記第7ステップにおいて置換したダミーの命令を、前記命令復号処理の実行により復号された元の命令に置換する命令復元処理を、前記保護対象プログラムに挿入する第8ステップと、
前記命令復元処理の実行により置換された元の命令をダミーの命令に置換する命令偽装処理を、前記保護対象プログラムに挿入する第9ステップと、をコンピュータに実行させるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2011−221922(P2011−221922A)
【公開日】平成23年11月4日(2011.11.4)
【国際特許分類】
【出願番号】特願2010−92497(P2010−92497)
【出願日】平成22年4月13日(2010.4.13)
【出願人】(000208891)KDDI株式会社 (2,700)
【Fターム(参考)】