説明

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

【課題】保護対象プログラムの解析および改ざんを困難にする自己書き換え処理装置、自己書き換え処理方法、およびプログラムについて、命令だけでなくデータも偽装すること。
【解決手段】自己書き換え処理装置1は、CPU10と、保護対象プログラムを記憶するキャッシュ20と、を備える。CPU10は、保護対象プログラムに記述されている命令およびデータをダミーに置換するとともに、保護対象プログラムに、ダミーの命令およびデータを元に戻す復元処理と、元に戻った命令およびデータを再びダミーに置換する偽装処理と、を挿入する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、自己書き換え処理装置、自己書き換え処理方法、およびプログラムに関する。
【背景技術】
【0002】
従来より、保護対象プログラムの解析および改ざんを困難にする手法が提案されている(例えば、特許文献1参照)。特許文献1には、保護対象プログラムの解析および改ざんを困難にする手法として、自己書き換えの手法が示されている。この特許文献1に示されている自己書き換えでは、保護対象プログラムに記述されている命令を偽の命令で偽装する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2004−192068号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
一般的に、プログラムには、命令だけでなく、データも記述されている。ここで、データには、例えば、スタティックに定義された数値や、暗号化に用いるマスターキーなどが含まれる。
【0005】
上述の特許文献1に示されている手法では、保護対象プログラムに記述されている情報のうち、命令については、偽装できるが、マスターキーといった重要な情報を含むデータについては、偽装できなかった。
【0006】
そこで、本発明は、上述の課題に鑑みてなされたものであり、保護対象プログラムの解析および改ざんを困難にする自己書き換え処理装置、自己書き換え処理方法、およびプログラムについて、命令だけでなくデータも偽装することを目的とする。
【課題を解決するための手段】
【0007】
本発明は、上記の課題を解決するために、以下の事項を提案している。
【0008】
(1) 本発明は、保護対象プログラムを記憶する記憶手段(例えば、図1のキャッシュ20に相当)と、前記保護対象プログラムに記述されている命令またはデータのうち少なくとも1つを選択する選択手段(例えば、図1のCPU10に相当)と、前記選択手段により選択されたデータを参照する処理(例えば、図6の処理C1、C2、C3に相当)を、前記保護対象プログラムの中から検出する検出手段(例えば、図1のCPU10に相当)と、前記選択手段により選択された命令をダミーの命令に置換するとともに、前記検出手段により検出された処理について、当該処理で参照されるデータをダミーのデータに置換する偽装手段(例えば、図1のCPU10に相当)と、前記偽装手段により置換されたダミーの命令を元の命令に置換する第1復元処理(例えば、図7の復元処理52に相当)と、前記偽装手段により置換されたダミーのデータを元のデータに置換する第2復元処理(例えば、図8の復元処理63に相当)と、を前記保護対象プログラムに挿入する第1挿入手段(例えば、図1のCPU10に相当)と、前記第1復元処理の実行により置換された元の命令をダミーの命令に置換する第1偽装処理(例えば、図7の偽装処理53に相当)と、前記第2復元処理の実行により置換された元のデータをダミーのデータに置換する第2偽装処理(例えば、図8の偽装処理64に相当)と、を前記保護対象プログラムに挿入する第2挿入手段(例えば、図1のCPU10に相当)と、を備えることを特徴とする自己書き換え処理装置を提案している。
【0009】
この発明によれば、自己書き換え処理装置に、記憶手段、選択手段、検出手段、偽装手段、第1挿入手段、および第2挿入手段を設けた。そして、記憶手段により、保護対象プログラムを記憶することとした。また、選択手段により、保護対象プログラムに記述されている命令またはデータのうち少なくとも1つを選択することとした。また、検出手段により、選択手段により選択されたデータを参照する処理を、保護対象プログラムの中から検出することとした。また、偽装手段により、選択手段により選択された命令をダミーの命令に置換するとともに、検出手段により検出された処理について、この処理で参照されるデータをダミーのデータに置換することとした。また、第1挿入手段により、偽装手段により置換されたダミーの命令を元の命令に置換する第1復元処理と、偽装手段により置換されたダミーのデータを元のデータに置換する第2復元処理と、を保護対象プログラムに挿入することとした。また、第2挿入手段により、第1復元処理の実行により置換された元の命令をダミーの命令に置換する第1偽装処理と、第2復元処理の実行により置換された元のデータをダミーのデータに置換する第2偽装処理と、を保護対象プログラムに挿入することとした。
【0010】
このため、自己書き換え処理装置は、選択手段により、保護対象プログラムに記述されている命令を選択し、偽装手段により、選択手段により選択された命令をダミーの命令に置換する。したがって、自己書き換え処理装置は、保護対象プログラムに記述されている命令を偽装することができ、保護対象プログラムの解析および改ざんを困難にすることができる。
【0011】
また、自己書き換え処理装置は、選択手段により、保護対象プログラムに記述されているデータを選択し、検出手段により、選択手段により選択されたデータを参照する処理を、保護対象プログラムの中から検出する。これによれば、保護対象プログラムにおいて、どのデータがどの処理で参照されているのかを把握することができる。そして、自己書き換え処理装置は、偽装手段により、検出手段により検出された処理について、この処理で参照されるデータをダミーのデータに置換する。以上によれば、自己書き換え処理装置は、保護対象プログラムに記述されている処理で参照されるデータをダミーのデータに置換して、保護対象プログラムに記述されているデータを偽装することができ、保護対象プログラムの解析および改ざんをさらに困難にすることができる。
【0012】
また、自己書き換え処理装置は、命令やデータが偽装手段により偽装された保護対象プログラムに対して、第1挿入手段により第1復元処理および第2復元処理を挿入するとともに、第2挿入手段により第1偽装処理および第2偽装処理を挿入する。このため、第1復元処理を実行することで、ダミーの命令を元の命令に戻すことができ、第2復元処理を実行することで、ダミーのデータを参照する処理を元のデータを参照する処理に戻すことができ、保護対象プログラムを正しく実行することができる。また、第1偽装処理を実行することで、処理を終えた命令をダミーの命令に置き換えて偽装することができ、第2偽装処理を実行することで、処理を終えた元のデータを参照する処理について、ダミーのデータを参照する処理に置き換えて、偽装することができる。以上によれば、第1復元処理を実行してから第1偽装処理を実行するまでの期間でのみ、命令を正しく読み出すことができ、上述の期間以外では、命令を正しく読み出すことができなくなる。また、第2復元処理を実行してから第2偽装処理を実行するまでの期間でのみ、データを正しく読み出すことができ、上述の期間以外では、データを正しく読み出すことができなくなる。したがって、保護対象プログラムの解析および改ざんをより困難にすることができる。
【0013】
(2) 本発明は、(1)の自己書き換え処理装置について、前記第1挿入手段は、前記第1復元処理を、前記保護対象プログラムのうち、前記偽装手段により置換されたダミーの命令(例えば、図7のダミーの命令51Aに相当)より前方に挿入するとともに、前記第2復元処理を、前記保護対象プログラムのうち、前記偽装手段により置換されたダミーのデータを参照する処理(例えば、図8のステップS14において選択されたデータのダミーを参照する処理62Aに相当)より前方に挿入し、前記第2挿入手段は、前記第1偽装処理を、前記保護対象プログラムのうち、前記偽装手段により置換されたダミーの命令(例えば、図7のダミーの命令51Aに相当)より後方に挿入するとともに、前記第2偽装処理を、前記保護対象プログラムのうち、前記偽装手段により置換されたダミーのデータを参照する処理(例えば、図8のステップS14において選択されたデータのダミーを参照する処理62Aに相当)より後方に挿入することを特徴とする自己書き換え処理装置を提案している。
【0014】
この発明によれば、(1)の自己書き換え処理装置において、第1挿入手段は、第1復元処理を、保護対象プログラムのうち、偽装手段により置換されたダミーの命令より前方に挿入するとともに、第2復元処理を、保護対象プログラムのうち、偽装手段により置換されたダミーのデータを参照する処理より前方に挿入することとした。また、第2挿入手段は、第1偽装処理を、保護対象プログラムのうち、偽装手段により置換されたダミーの命令より後方に挿入するとともに、第2偽装処理を、保護対象プログラムのうち、偽装手段により置換されたダミーのデータを参照する処理より後方に挿入することとした。
【0015】
このため、第1復元処理が実行され、正しい命令が実行された後に、第1偽装処理が実行される。また、第2復元処理が実行され、正しいデータを参照する処理が実行された後に、第2偽装処理が実行される。これによれば、上述した効果と同様の効果を奏することができる。
【0016】
(3) 本発明は、(1)または(2)の自己書き換え処理装置について、前記選択手段による選択と、前記検出手段による検出と、前記偽装手段による置換と、前記第1挿入手段による挿入と、前記第2挿入手段による挿入と、を予め定められた回数(例えば、図3の反復回数Nに相当)だけ繰り返すことを特徴とする自己書き換え処理装置を提案している。
【0017】
この発明によれば、(1)または(2)の自己書き換え処理装置において、選択手段による選択と、検出手段による検出と、偽装手段による置換と、第1挿入手段による挿入と、第2挿入手段による挿入と、を予め定められた回数だけ繰り返すこととした。
【0018】
このため、上述の予め定められた回数として、1以上の値を設定することで、命令やデータを複数回に亘ってダミーに置換することができ、これら命令およびデータについて、何重にも偽装する多重偽造を施すことができる。したがって、保護対象プログラムの解析および改ざんをさらに困難にすることができる。
【0019】
(4) 本発明は、保護対象プログラムに記述されている命令またはデータのうち少なくとも1つを選択する第1ステップ(例えば、図3のステップS14に相当)と、前記第1ステップにおいて選択したデータを参照する処理を、前記保護対象プログラムの中から検出する第2ステップ(例えば、図3のステップS13およびステップS15に相当)と、前記第1ステップにおいて選択した命令をダミーの命令に置換するとともに、前記第2ステップにおいて検出した処理について、当該処理で参照されるデータをダミーのデータに置換する第3ステップ(例えば、図3のステップS16に相当)と、前記第3ステップにおいて置換したダミーの命令を元の命令に置換する第1復元処理(例えば、図7の復元処理52に相当)と、前記第3ステップにおいて置換したダミーのデータを元のデータに置換する第2復元処理(例えば、図8の復元処理63に相当)と、を前記保護対象プログラムに挿入する第4ステップ(例えば、図3のステップS17に相当)と、前記第1復元処理の実行により置換された元の命令をダミーの命令に置換する第1偽装処理(例えば、図7の偽装処理53に相当)と、前記第2復元処理の実行により置換された元のデータをダミーのデータに置換する第2偽装処理(例えば、図8の偽装処理64に相当)と、を前記保護対象プログラムに挿入する第5ステップ(例えば、図3のステップS18に相当)と、を備えることを特徴とする自己書き換え処理方法を提案している。
【0020】
この発明によれば、保護対象プログラムに記述されている命令またはデータのうち少なくとも1つを選択し、選択したデータを参照する処理を、保護対象プログラムの中から検出する。そして、選択した命令をダミーの命令に置換するとともに、検出した処理について、この処理で参照されるデータをダミーのデータに置換する。また、ダミーの命令を元の命令に置換する第1復元処理と、ダミーのデータを元のデータに置換する第2復元処理と、を保護対象プログラムに挿入する。また、元の命令をダミーの命令に置換する第1偽装処理と、元のデータをダミーのデータに置換する第2偽装処理と、を保護対象プログラムに挿入する。これによれば、上述した効果と同様の効果を奏することができる。
【0021】
(5) 本発明は、保護対象プログラムに記述されている命令またはデータのうち少なくとも1つを選択する第1ステップ(例えば、図3のステップS14に相当)と、前記第1ステップにおいて選択したデータを参照する処理を、前記保護対象プログラムの中から検出する第2ステップ(例えば、図3のステップS13およびステップS15に相当)と、前記第1ステップにおいて選択した命令をダミーの命令に置換するとともに、前記第2ステップにおいて検出した処理について、当該処理で参照されるデータをダミーのデータに置換する第3ステップ(例えば、図3のステップS16に相当)と、前記第3ステップにおいて置換したダミーの命令を元の命令に置換する第1復元処理(例えば、図7の復元処理52に相当)と、前記第3ステップにおいて置換したダミーのデータを元のデータに置換する第2復元処理(例えば、図8の復元処理63に相当)と、を前記保護対象プログラムに挿入する第4ステップ(例えば、図3のステップS17に相当)と、前記第1復元処理の実行により置換された元の命令をダミーの命令に置換する第1偽装処理(例えば、図7の偽装処理53に相当)と、前記第2復元処理の実行により置換された元のデータをダミーのデータに置換する第2偽装処理(例えば、図8の偽装処理64に相当)と、を前記保護対象プログラムに挿入する第5ステップ(例えば、図3のステップS18に相当)と、をコンピュータに実行させるためのプログラムを提案している。
【0022】
この発明によれば、プログラムをコンピュータに実行させることで、保護対象プログラムに記述されている命令またはデータのうち少なくとも1つを選択し、選択したデータを参照する処理を、保護対象プログラムの中から検出する。そして、選択した命令をダミーの命令に置換するとともに、検出した処理について、この処理で参照されるデータをダミーのデータに置換する。また、ダミーの命令を元の命令に置換する第1復元処理と、ダミーのデータを元のデータに置換する第2復元処理と、を保護対象プログラムに挿入する。また、元の命令をダミーの命令に置換する第1偽装処理と、元のデータをダミーのデータに置換する第2偽装処理と、を保護対象プログラムに挿入する。これによれば、上述した効果と同様の効果を奏することができる。
【発明の効果】
【0023】
本発明によれば、保護対象プログラムに記述されている命令だけでなくデータも偽装することができ、保護対象プログラムの解析および改ざんを困難にすることができる。
【図面の簡単な説明】
【0024】
【図1】本発明の一実施形態に係る自己書き換え処理装置の構成を示すブロック図である。
【図2】前記自己書き換え処理装置における第1の処理のフローチャートである。
【図3】前記自己書き換え処理装置における第2の処理のフローチャートである。
【図4】前記第2の処理を説明するための図である。
【図5】前記第2の処理を説明するための図である。
【図6】前記第2の処理を説明するための図である。
【図7】前記第2の処理を説明するための図である。
【図8】前記第2の処理を説明するための図である。
【発明を実施するための形態】
【0025】
以下、本発明の実施形態について図面を参照しながら説明する。なお、以下の実施形態における構成要素は適宜、既存の構成要素などとの置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、以下の実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【0026】
[自己書き換え処理装置1の構成]
図1は、本発明の一実施形態に係る自己書き換え処理装置1の構成を示すブロック図である。自己書き換え処理装置1は、様々な演算処理を行うCPU(Central Processing Unit)10と、保護対象プログラムを記憶するキャッシュ20と、を備える。
【0027】
自己書き換え処理装置1は、後述の第1の処理(図2参照)を実行した後、後述の第2の処理(図3参照)を行うことにより、保護対象プログラムに記述されている命令だけでなくデータも偽装して、保護対象プログラムの解析および改ざんを困難にする。
【0028】
[第1の処理]
図2は、上述の第1の処理のフローチャートである。
【0029】
ステップS1において、CPU10により、キャッシュ20に記憶されている保護対象プログラムのうち、保護する領域を選択し、ステップS2に移る。なお、ステップS1における保護対象プログラムは、C言語やJava(登録商標)といった高級言語で記述されているものとする。また、保護する領域は、例えば自己書き換え処理装置1のユーザにより、保護対象プログラムの中から決定されるものとする。
【0030】
ステップS2において、CPU10により、キャッシュ20に記憶されている保護対象プログラムのうち、ステップS1において選択した領域について、アセンブラ記述を取得し、第1の処理を終了する。このステップでは、例えば、保護対象プログラムのうち上述の選択した領域について、コンパイルして、アセンブリプログラムに変換する。
【0031】
[第2の処理]
図3は、上述の第2の処理のフローチャートである。
【0032】
ステップS11において、CPU10により、変数Mに「0」を代入することで変数Mを初期化し、ステップS12に移る。
【0033】
ステップS12において、CPU10により、反復回数N(Nは、N≧0を満たす整数)を設定し、ステップS13に移る。
【0034】
ステップS13において、CPU10により、上述のステップS2において取得したアセンブラ記述の保護対象プログラムの制御構造を解析し、ステップS14に移る。この保護対象プログラムの制御構造の解析について、図4および図5を用いて以下に説明する。
【0035】
図4、5は、ステップS2の処理により得られたアセンブラ記述の保護対象プログラム100を示す図である。保護対象プログラム100には、データの記述された領域110と、命令の記述された領域120と、がある。
【0036】
命令の記述された領域120には、図5に示すように、計算や代入といった処理を行う命令と、条件を満たすか否かの判断を行う分岐の命令と、が記述されている。保護対象プログラム100に対してステップS13の処理が行われると、命令の記述された領域120において、まず、分岐の命令がそれぞれ判定され、処理が分解される。次に、連続して実行される1以上の処理で構成され、分岐を含まないパスが検出される。図5においては、パスA1、A2、A3、A4、A5が検出されることを示している。
【0037】
以上のように、ステップS13の処理を行うと、保護対象プログラムのうち命令の記述された領域について、連続して実行される1以上の処理で構成され、分岐を含まないパスが検出される。
【0038】
図3に戻って、ステップS14において、CPU10により、ステップS13において制御構造を解析したアセンブラ記述の保護対象プログラムの中から、偽装させる命令またはデータを選択し、ステップS15に移る。
【0039】
ステップS15において、CPU10により、ステップS13において制御構造を解析したアセンブラ記述の保護対象プログラムの中から、ステップS14において選択したデータを参照する処理を検出し、ステップS16に移る。このステップS14において選択したデータを参照する処理の検出について、図5および図6を用いて以下に説明する。
【0040】
例えば、ステップS14において、図6に示すように、データB1が選択されたものとする。すると、このデータB1を参照する処理が、図5のパスA1〜A5の中から検出される。ここで、図6の処理C1、C2、C3のそれぞれにおいてデータB1が参照されるものとすると、ステップS15の処理が行われると、これら処理C1〜C3が検出されることとなる。
【0041】
なお、ステップS14において命令を選択した場合には、上述の検出を行うことなく、ステップS16に移る。
【0042】
図3に戻って、ステップS16において、CPU10により、ステップS14において選択した命令、または、ステップS15において検出した処理で参照されるデータを、ダミーに置換し、ステップS17に移る。具体的には、ステップS14において命令を選択した場合には、この命令をダミーの命令に置換する。また、ステップS14においてデータを選択した場合には、ステップS15において検出した処理で参照されるデータを、ダミーのデータに置換する。
【0043】
ステップS17において、CPU10により、ステップS16の処理を行った保護対象プログラムに復元処理を挿入し、ステップS18に移る。なお、復元処理とは、ステップS16において置換したダミーの命令およびダミーのデータを、それぞれ、元の命令および元のデータに戻す処理のことである。この復元処理を挿入する位置について、以下に説明する。
【0044】
ステップS14において命令を選択した場合には、ステップS16の処理を行った保護対象プログラムのうち、上述の命令をステップS16においてダミーに置換したものより前方に、復元処理を挿入する(後述の図7参照)。これによれば、保護対象プログラムにおいて、復元処理が、ダミーの命令より前方に記述されることになるので、この命令は、ダミーから元に戻された後に、実行されることとなる。
【0045】
一方、ステップS14においてデータを選択した場合には、ステップS16の処理を行った保護対象プログラムのうち、上述のデータを参照する処理について、参照されるデータをステップS16においてダミーに置換したものより前方に、復元処理を挿入する(後述の図8参照)。これによれば、保護対象プログラムにおいて、復元処理が、ダミーのデータを参照する処理より前方に記述されることになるので、ダミーのデータを参照する処理は、参照するデータをダミーから元に戻された後に、実行されることとなる。
【0046】
ステップS18において、CPU10により、ステップS17の処理を行った保護対象プログラムに偽装処理を挿入し、ステップS18に移る。なお、偽装処理とは、復元処理の実行により置換された元の命令および元のデータを、それぞれ、ダミーの命令およびダミーのデータに置換する処理のことである。この偽装処理を挿入する位置について、以下に説明する。
【0047】
ステップS14において命令を選択した場合には、ステップS17の処理を行った保護対象プログラムのうち、上述の命令をステップS16においてダミーに置換したものより後方に、偽装処理を挿入する(後述の図7参照)。これによれば、保護対象プログラムにおいて、偽装処理が、ダミーの命令より後方に記述されることになるので、この命令が実行された後に、偽装処理が実行され、この命令が偽装されることとなる。
【0048】
一方、ステップS14においてデータを選択した場合には、ステップS17の処理を行った保護対象プログラムのうち、上述のデータを参照する処理について、参照されるデータをステップS16においてダミーに置換したものより後方に、偽装処理を挿入する(後述の図8参照)。これによれば、保護対象プログラムにおいて、偽装処理が、ダミーのデータを参照する処理より後方に記述されることになるので、この処理が実行された後に、偽装処理が実行され、この処理により参照されるデータが偽装されることとなる。
【0049】
ステップS19において、CPU10により、変数Mに1を加算し、ステップS20に移る。
【0050】
ステップS20において、CPU10により、変数Mが反復回数N以下であるか否かを判別する。そして、変数Mが反復回数N以下である場合には、すなわち上述のステップS14〜S19を繰り返した回数が反復回数N以下である場合には、ステップS14に戻る。一方、変数Mが反復回数Nより大きい場合には、すなわち上述のステップS14〜S19を繰り返した回数が反復回数Nより多い場合には、第2の処理を終了する。
【0051】
図7は、ステップS14において命令を選択した場合における、ステップS15〜S18の処理を行う前後での保護対象プログラムを示す図である。
【0052】
保護対象プログラム50は、ステップS14の処理を行った後の保護対象プログラムを示す。保護対象プログラム50には、ステップS1において選択された保護する領域Pが定められており、保護対象プログラム50のうち保護する領域Pには、ステップS14において選択された命令51が記述されている。
【0053】
以上の保護対象プログラム50に対してステップS15〜S18の処理を行ったものが、保護対象プログラム50Aである。保護対象プログラム50Aのうち保護する領域Pには、ステップS14において選択された命令51をステップS16において置換した、ダミーの命令51Aが記述されている。また、ダミーの命令51Aの前方には、ステップS17において挿入した、復元処理52が記述されている。また、ダミーの命令51Aの後方には、ステップS18において挿入した、偽装処理53が記述されている。
【0054】
以上の保護対象プログラム50Aを実行する場合について、以下に説明する。まず、復元処理52が実行される。これによれば、ダミーの命令51Aが、元の命令であるステップS14において選択された命令51に戻ることとなる。
【0055】
次に、上述の復元処理52の実行により元に戻った、ステップS14において選択された命令51が実行される。
【0056】
次に、偽装処理53が実行される。これによれば、ステップS14において選択された命令51の実行後に、この命令51がダミーに置換されることとなる。
【0057】
以上によれば、保護対象プログラム50Aでは、復元処理52が実行されてから、偽装処理53が実行されるまでの期間でのみ、元の命令であるステップS14において選択された命令51を正しく読み出すことができ、この期間以外では、命令51を読み出そうとしてもダミーの命令しか読み出すことができない。
【0058】
図8は、ステップS14においてデータを選択した場合における、ステップS15〜S18の処理を行う前後での保護対象プログラムを示す図である。
【0059】
保護対象プログラム60は、ステップS14の処理を行った後の保護対象プログラムを示す。保護対象プログラム60には、ステップS1において選択された保護する領域Qが定められており、保護対象プログラム60のうち保護する領域Qには、ステップS14において選択されたデータ61と、このデータ61を参照する処理62と、が記述されている。
【0060】
以上の保護対象プログラム60に対してステップS15〜S18の処理を行ったものが、保護対象プログラム60Aである。保護対象プログラム60Aのうち保護する領域Qには、ステップS14において選択されたデータ61と、このデータ61のダミーを参照する処理62Aと、が記述されている。ここで、データ61のダミーを参照する処理62Aとは、データ61を参照する処理について、参照するデータをステップS16においてデータ61からダミーのデータに置換したもののことである。また、データ61のダミーを参照する処理62Aの前方には、ステップS17において挿入した、復元処理が記述されている。また、データ61のダミーを参照する処理62Aの後方には、ステップS18において挿入した、偽装処理64が記述されている。
【0061】
以上の保護対象プログラム60Aを実行する場合について、以下に説明する。まず、復元処理63が実行される。これによれば、データ61のダミーを参照する処理62Aが、データ61を参照する処理62に戻ることとなる。
【0062】
次に、上述の復元処理63の実行により元に戻った、データ61を参照する処理62が実行される。
【0063】
次に、偽装処理64が実行される。これによれば、データ61を参照する処理62の実行後に、データ61を参照する処理62が、データ61のダミーを参照する処理に、置換されることとなる。
【0064】
以上によれば、保護対象プログラム60Aでは、復元処理63が実行されてから、偽装処理64が実行されるまでの期間でのみ、元のデータであるステップS14において選択されたデータ61を正しく読み出すことができ、この期間以外では、データ61を読み出そうとしてもダミーのデータしか読み出すことができない。
【0065】
以上の自己書き換え処理装置1によれば、以下の効果を奏することができる。
【0066】
自己書き換え処理装置1は、ステップS2の処理を行って保護対象プログラムのアセンブラ記述を取得した後、ステップS16の処理を行って、命令をダミーの命令に置換したり、データを参照する処理をダミーのデータを参照する処理に置換したりする。したがって、自己書き換え処理装置は、保護対象プログラムに記述されている命令だけでなくデータも偽装することができ、保護対象プログラムの解析および改ざんを困難にすることができる。
【0067】
また、自己書き換え処理装置1は、ステップS16の処理を行って命令やデータを偽装した保護対象プログラムに対して、ステップS17の処理により復元処理を挿入するとともに、ステップS18の処理により偽装処理を挿入する。このため、復元処理を実行することで、ダミーの命令やダミーのデータを元の命令や元のデータに戻すことができ、保護対象プログラムを正しく実行することができる。また、偽装処理を実行することで、処理を終えた命令やデータについて、ダミーの命令やダミーのデータに置き換えて、偽装することができる。以上によれば、復元処理を実行してから偽装処理を実行するまでの期間でのみ、命令やデータを正しく読み出すことができ、上述の期間以外では、命令やデータを正しく読み出すことができなくなる。したがって、保護対象プログラムの解析および改ざんをより困難にすることができる。
【0068】
また、自己書き換え処理装置1は、ステップS12において設定した反復回数Nだけ、ステップS14〜S19の処理を繰り返す。このため、保護対象プログラムに記述されている命令およびデータについて、何重にも偽装する多重偽装を施すことができるので、保護対象プログラムの解析および改ざんをさらに困難にすることができる。
【0069】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【0070】
例えば、上述の実施形態では、ステップS18において偽装処理を挿入することとした。このため、挿入した偽装処理を実行すると、元の命令および元のデータは、それぞれ、ダミーの命令およびダミーのデータに置換される。ここで、偽装処理の実行により置換されるダミーの命令およびダミーのデータは、それぞれ、ステップS16において置換したダミーの命令およびダミーのデータと同一であってもよいし、異なっていてもよい。
【0071】
また、上述の実施形態では、ステップS17において復元処理を挿入した後、ステップS18において偽装処理を挿入したが、これに限らず、例えば偽装処理を挿入した後に復元処理を挿入してもよい。
【0072】
また、上述の実施形態では、ステップS12において反復回数Nを設定することとした。ここで、反復回数Nを大きくするに従って、保護対象プログラムの解析および改ざんの困難性を向上させることができるが、その一方で、自己書き換え処理装置1で処理された保護対象プログラムを実行する際のパフォーマンスが低下する。このため、反復回数Nは、保護対象プログラムの解析および改ざんの困難性の度合いと、自己書き換え処理装置1で処理された保護対象プログラムを実行する際のパフォーマンスと、を勘案して決定されることが好ましい。
【符号の説明】
【0073】
1・・・自己書き換え処理装置
10・・・CPU
20・・・キャッシュ
50、50A、60、60A、100・・・保護対象プログラム
52、63・・・復元処理
53、64・・・偽装処理

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

【図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−191993(P2011−191993A)
【公開日】平成23年9月29日(2011.9.29)
【国際特許分類】
【出願番号】特願2010−57210(P2010−57210)
【出願日】平成22年3月15日(2010.3.15)
【出願人】(000208891)KDDI株式会社 (2,700)
【Fターム(参考)】