(57)【要約】【課題】開発者に負担をかけることなく、プログラムの処理内容の解析の防止を図り得る、プログラム保護装置、プログラム保護方法、及びプログラムを提供する。【解決手段】プログラム保護装置１０は、暗号化部１１、復号化処理モジュール生成部１２、コード書換部１３を備えている。暗号化部１１は、保護対象プログラム２０中の暗号化対象となる特定処理モジュール２２を暗号化する。復号化処理モジュール生成部１２は、暗号化された特定処理モジュール２２ａの復号化及び復号化された特定処理モジュール２２ｂの実行を行なう復号化処理モジュール２３を生成する。コード書換部１３は、保護対象プログラム２０において、特定処理モジュール２２が呼び出されると、代わりに、復号化処理モジュール２３が呼び出されるように、保護対象プログラム２０のコードを書き換える。【選択図】図１
2013137646.tif 000002
【特許請求の範囲】
【請求項１】
保護対象となるプログラム中の暗号化対象となる特定のモジュールを暗号化する、暗号化部と、
暗号化された前記特定のモジュールの復号化及び復号化された前記特定のモジュールの実行を行なう復号化処理モジュールを生成する、復号化処理モジュール生成部と、
前記保護対象となるプログラムにおいて、前記特定のモジュールが呼び出されると、代わりに、前記復号化処理モジュールが呼び出されるように、前記復号化処理モジュールのコードを書き換える、コード書換部と、
を備えていることを特徴とするプログラム保護装置。
【請求項２】
前記復号化処理モジュール生成部は、
前記復号化処理モジュールが、前記特定のモジュールの実行の終了後に、前記保護対象となるプログラムを実行している装置のメモリに対して、別のデータによる上書き処理を行なうように、
前記復号化処理モジュールを生成する、
請求項１に記載のプログラム保護装置。
【請求項３】
前記復号化処理モジュール生成部は、
前記復号化処理モジュールにアタッチするダミープログラムを、前記復号化処理モジュールと共に、前記保護対象となるプログラムに組み込む、
請求項１または２に記載のプログラム保護装置。
【請求項４】
前記復号化処理モジュール生成部は、
前記復号化処理モジュールが、前記ダミープログラム以外のプログラムにアタッチされている場合に、その処理を停止するように、
前記復号化処理モジュールを生成する、
請求項３に記載のプログラム保護装置。
【請求項５】
前記復号化処理モジュール生成部は、
前記復号化処理モジュールが、前記保護対象となるプログラムを実行している装置において、前記特定のモジュールの一部又は全部についてのスワップを禁止するように、
前記復号化処理モジュールを生成する、
請求項１〜４のいずれかに記載のプログラム保護装置。
【請求項６】
（ａ）保護対象となるプログラム中の暗号化対象となる特定のモジュールを暗号化する、ステップと、
（ｂ）暗号化された前記特定のモジュールの復号化及び復号化された前記特定のモジュールの実行を行なう復号化処理モジュールを生成する、ステップと、
（ｃ）前記保護対象となるプログラムにおいて、前記特定のモジュールが呼び出されると、代わりに、前記復号化処理モジュールが呼び出されるように、前記復号化処理モジュールのコードを書き換える、ステップと、
を備えていることを特徴とするプログラム保護方法。
【請求項７】
前記（ｂ）のステップにおいて、
前記復号化処理モジュールが、前記特定のモジュールの実行の終了後に、前記保護対象となるプログラムを実行している装置のメモリに対して、別のデータによる上書き処理を行なうように、
前記復号化処理モジュールを生成する、
請求項６に記載のプログラム保護方法。
【請求項８】
前記（ｂ）のステップにおいて、
前記復号化処理モジュールにアタッチするダミープログラムを、前記復号化処理モジュールと共に、前記保護対象となるプログラムに組み込む、
請求項６または７に記載のプログラム保護方法。
【請求項９】
前記（ｂ）のステップにおいて、
前記復号化処理モジュールが、前記ダミープログラム以外のプログラムにアタッチされている場合に、その処理を停止するように、
前記復号化処理モジュールを生成する、
請求項８に記載のプログラム保護方法。
【請求項１０】
前記（ｂ）のステップにおいて、
前記復号化処理モジュールが、前記保護対象となるプログラムを実行している装置において、前記特定のモジュールの一部又は全部についてのスワップを禁止するように、
前記復号化処理モジュールを生成する、
請求項６〜９のいずれかに記載のプログラム保護方法。
【請求項１１】
保護対象となるプログラムを、コンピュータによって保護するためのプログラムであって、
前記コンピュータに、
（ａ）前記保護対象となるプログラム中の暗号化対象となる特定のモジュールを暗号化する、ステップと、
（ｂ）暗号化された前記特定のモジュールの復号化及び復号化された前記特定のモジュールの実行を行なう復号化処理モジュールを生成する、ステップと、
（ｃ）前記保護対象となるプログラムにおいて、前記特定のモジュールが呼び出されると、代わりに、前記復号化処理モジュールが呼び出されるように、前記復号化処理モジュールのコードを書き換える、ステップと、
を実行させるプログラム。
【請求項１２】
前記（ｂ）のステップにおいて、
前記復号化処理モジュールが、前記特定のモジュールの実行の終了後に、前記保護対象となるプログラムを実行している装置のメモリに対して、別のデータによる上書き処理を行なうように、
前記復号化処理モジュールを生成する、
請求項１１に記載のプログラム。
【請求項１３】
前記（ｂ）のステップにおいて、
前記復号化処理モジュールにアタッチするダミープログラムを、前記復号化処理モジュールと共に、前記保護対象となるプログラムに組み込む、
請求項１１または１２に記載のプログラム。
【請求項１４】
前記（ｂ）のステップにおいて、
前記復号化処理モジュールが、前記ダミープログラム以外のプログラムにアタッチされている場合に、その処理を停止するように、
前記復号化処理モジュールを生成する、
請求項１３に記載のプログラム。
【請求項１５】
前記（ｂ）のステップにおいて、
前記復号化処理モジュールが、前記保護対象となるプログラムを実行している装置において、前記特定のモジュールの一部又は全部についてのスワップを禁止するように、
前記復号化処理モジュールを生成する、
請求項１１〜１４のいずれかに記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、保護対象となるプログラムの処理内容の解析を防止するための、プログラム保護装置、プログラム保護方法、及びプログラムに関する。
【背景技術】
【０００２】
近年、家庭用機器、産業用機器、医療用機器、自動車等においては、組み込みシステムと呼ばれるコンピュータシステムによって制御が実現されている。組み込みシステムが登場する以前では、制御は電子回路及び機構によって行なわれていたが、マイクロプロセッサなどのハードウェアにかかるコストが低減したことから、組み込みシステムの利用はますます増加している。
【０００３】
また、組み込みシステムでは、ソフトウェアによって様々な複雑な機能を実現できるため、同じ汎用のハードウェアによって種々の機器に対応できるという利点がある。このことは、機器の製造コストの低減化にも貢献する。
【０００４】
但し、組み込みシステムが組み込まれた機器では、プログラムの処理内容が解析されて、ソフトウェアがコピーされてしまうと、機器自体のコピーも簡単に行なわれてしまうこととなる。また、この問題は世界中で実際に多数発生しており、プログラムの処理内容の解析、ひいてはソフトウェアのコピーを防ぐことは急務である。
【０００５】
このような問題に対応するため、例えば、特許文献１は、ソフトウェアのコピー防止技術の一つを開示している。特許文献１に開示されたコピー防止技術によれば、コンパイル後の実行プログラムの一部に保護作用が適用され、実行プログラムの非実行時に、その解析が困難になる。
【０００６】
具体的には、まず、開発者によってプログラムのソースコードが記述される。その際、開発者は、保護対象となるコードの前に、保護箇所検索ルーチン呼出しコードと、保護作用解除ルーチン呼出しコードと、保護箇所開始識別子とを挿入する。また、開発者は、保護対象となるコードの後ろには、保護箇所終了識別子を挿入する。
【０００７】
次に、コンパイラによってソースコードはコンパイルされ、オブジェクトコードで構成された実行プログラムが生成される。この実行プログラムに対しては、暗号化プログラムによる暗号化が行なわれる。但し、暗号化は、上述の挿入されたコードに基づいて、保護対象となるコードに対して行なわれる。
【０００８】
また、実行プログラムを実行する機器では、各コードの実行の際に、保護箇所検索ルーチン呼出しコード及び保護作用解除ルーチン呼出しコードが実行されると、保護箇所開始識別子と保護箇所終了識別子とが特定される。そして、保護箇所開始識別子と保護箇所終了識別子とに基づいて、暗号化されたコードの復号化が行なわれ、復号化されたコードが実行される。
【０００９】
このように、特許文献１に開示されたコピー防止技術を用いれば、実行プログラムの非実行時において、その解析は困難になることから、組み込みシステムにおけるコピーの防止を図ることができると考えられる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特許第４５１７６３６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、上述したように、上記の特許文献１に開示されたコピー防止技術を採用するためには、開発者は、暗号化の仕組みと、プログラム実行時の復号化の仕組みとを理解した上で、必要なコードを組み込んでいく必要がある。このため、上記の特許文献１に開示されたコピー防止技術を採用する場合は、開発者における負担が大きく、プログラム開発にかかる時間と製造コストとがかかり過ぎるという問題が発生してしまう。
【００１２】
本発明の目的の一例は、上記問題を解消し、開発者に負担をかけることなく、プログラムの処理内容の解析の防止を図り得る、プログラム保護装置、プログラム保護方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、本発明の一側面におけるプログラム保護装置は、
保護対象となるプログラム中の暗号化対象となる特定のモジュールを暗号化する、暗号化部と、
暗号化された前記特定のモジュールの復号化及び復号化された前記特定のモジュールの実行を行なう復号化処理モジュールを生成する、復号化処理モジュール生成部と、
前記保護対象となるプログラムにおいて、前記特定のモジュールが呼び出されると、代わりに、前記復号化処理モジュールが呼び出されるように、前記復号化処理モジュールのコードを書き換える、コード書換部と、
を備えていることを特徴とする。
【００１４】
また、上記目的を達成するため、本発明の一側面におけるプログラム保護方法は、
（ａ）保護対象となるプログラム中の暗号化対象となる特定のモジュールを暗号化する、ステップと、
（ｂ）暗号化された前記特定のモジュールの復号化及び復号化された前記特定のモジュールの実行を行なう復号化処理モジュールを生成する、ステップと、
（ｃ）前記保護対象となるプログラムにおいて、前記特定のモジュールが呼び出されると、代わりに、前記復号化処理モジュールが呼び出されるように、前記復号化処理モジュールのコードを書き換える、ステップと、
を備えていることを特徴とする。
【００１５】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、保護対象となるプログラムを、コンピュータによって保護するためのプログラムであって、
前記コンピュータに、
（ａ）前記保護対象となるプログラム中の暗号化対象となる特定のモジュールを暗号化する、ステップと、
（ｂ）暗号化された前記特定のモジュールの復号化及び復号化された前記特定のモジュールの実行を行なう復号化処理モジュールを生成する、ステップと、
（ｃ）前記保護対象となるプログラムにおいて、前記特定のモジュールが呼び出されると、代わりに、前記復号化処理モジュールが呼び出されるように、前記復号化処理モジュールのコードを書き換える、ステップと、
を実行させることを特徴とする。
【発明の効果】
【００１６】
以上のように、本発明によれば、開発者に負担をかけることなく、プログラムの処理内容の解析の防止を図ることができる。
【図面の簡単な説明】
【００１７】
【図１】図１は、本発明の実施の形態１におけるプログラム保護装置の構成を示すブロック図である。
【図２】図２は、本発明の実施の形態１におけるプログラム保護装置の動作を示すフロー図である。
【図３】図３は、本発明の実施の形態１での保護処理がなされた保護対象プログラムを搭載する機器を示す図である。
【図４】図４は、本発明の実施の形態２におけるプログラム保護装置の構成を示すブロック図である。
【図５】図５は、本発明の実施の形態２におけるプログラム保護装置の動作を示すフロー図である。
【図６】図６は、本発明の実施の形態２での保護処理がなされた保護対象プログラムを搭載する機器を示す図である。
【図７】図７は、本発明の実施の形態３におけるプログラム保護装置の構成を示すブロック図である。
【図８】図８は、本発明の実施の形態３におけるプログラム保護装置の動作を示すフロー図である。
【図９】図９は、本発明の実施の形態３での保護処理がなされた保護対象プログラムを搭載する機器を示す図である。
【図１０】図１０は、本発明の実施の形態４におけるプログラム保護装置の構成を示すブロック図である。
【図１１】図１１は、本発明の実施の形態４におけるプログラム保護装置の動作を示すフロー図である。
【図１２】図１２は、本発明の実施の形態４での保護処理がなされた保護対象プログラムを搭載する機器を示す図である。
【図１３】図１３は、本発明の実施の形態１〜４におけるプログラム保護装置を実現するコンピュータの一例を示すブロック図である。
【発明を実施するための形態】
【００１８】
（実施の形態１）
以下、本発明の実施の形態１における、プログラム保護装置、プログラム保護方法、及びプログラムについて、図１〜図３を参照しながら説明する。
【００１９】
［装置構成］
最初に、図１を用いて本実施の形態１におけるプログラム保護装置の構成について説明する。図１は、本発明の実施の形態１におけるプログラム保護装置の構成を示すブロック図である。
【００２０】
図１に示す本実施の形態１におけるプログラム保護装置１０は、保護対象となるプログラム（以下「保護対象プログラム」と表記する。）２０の処理内容の解析を防止するための装置である。また、本実施の形態１において、保護対象プログラム２０は、家庭用機器、産業用機器、医療用機器、自動車といった各種機器に組み込まれ、これら機器の制御に用いられる。
【００２１】
図１に示すように、プログラム保護装置１０は、暗号化部１１と、復号化処理モジュール生成部１２と、コード書換部１３と、を備えている。
【００２２】
暗号化部１１は、保護処理前の保護対象プログラム２０中の暗号化対象となる特定のモジュール（以下「特定処理モジュール」と表記する。）２２の暗号化を実行する。
【００２３】
復号化処理モジュール生成部１２は、復号化処理モジュール２３を生成する。復号化処理モジュール２３は、暗号化された特定処理モジュール２２の復号化と、復号化した特定処理モジュール２２の実行と、を行うモジュールである。
【００２４】
コード書換部１３は、保護対象プログラム２０において、特定処理モジュール２２が呼び出されると、代わりに、復号化処理モジュール２３が呼び出されるように、復号化処理モジュール２３のコードを書き換える。
【００２５】
そして、保護対象プログラム２０において、特定処理モジュールの代わりに、暗号化部１１によって暗号化された特定処理モジュール２２と、復号化処理モジュール２３とが、組み込まれる。このようにして得られた保護対象プログラム２０、即ち、保護処理が終了した保護対象プログラムが、機器（図示せず）に組み込まれる。
【００２６】
なお、図１において、保護処理が終了した保護対象プログラムは、「保護対象プログラム２０ａ」と表記されている。また、図１において、２２ａは、暗号化された特定処理モジュールであり、２２ｂは、復号化された特定処理モジュールである。
【００２７】
このように、プログラム保護装置１０を用いれば、開発者に面倒な処理を行わせることなく、保護対象プログラム２０に対して保護処理が行われる。また、保護処理後の保護対象プログラム２０ａでは、特定処理モジュールは暗号化されているので、第三者による保護対象プログラムの処理内容の解析が防止される。
【００２８】
ここで、本実施の形態１におけるプログラム保護装置１０の構成について更に具体的に説明する。まず、図１に示すように、保護対象プログラム２０は、メイン処理モジュール２１と、暗号化対象となる特定処理モジュール２２とを含んでいる。特定処理モジュール２２は、メイン処理モジュール２１によって、その実行時に呼び出される。
【００２９】
本実施の形態１では、まず、保護対象プログラム２０の開発者によって、保護対象プログラム２０中の特定処理モジュール２２が、プログラム保護装置１０に入力される。プログラム保護装置１０は、特定処理モジュール２２それぞれの入力を受け付ける。
【００３０】
本実施の形態１では、暗号化部１１は、まず、特定処理モジュール２２のプログラムコードを解析し、メイン処理モジュール１２から呼び出される関数及びその引数についての情報を抽出する。そして、暗号化部１１は、特定処理モジュール２２を暗号化する。
【００３１】
具体的には、本実施の形態１では、暗号化部１１は、発生させた乱数データ又は予め設定されたデータを特定の数式に代入して、共通鍵を作成し、作成した共通鍵を用いて特定処理モジュール２２を暗号化する。
【００３２】
復号化処理モジュール生成部１２は、復号化処理モジュール２３を生成する。この復号化処理モジュール２３が組み込まれた保護対象プログラム２０ａが、機器上で実行されると、復号化処理モジュール２３は、暗号化された特定処理モジュール２２ａを復号化する。
【００３３】
具体的には、本実施の形態１では、復号化処理モジュール２３には、暗号化部１１が共通鍵の作成で使用したデータと特定の数式とが組み込まれている。よって、復号化処理モジュール２３は、これらのデータと特定の数式とを用いて共通鍵を作成し、作成した共通鍵を用いて、暗号化された特定処理モジュール２２ａを復号化する。このように、本実施の形態１では、復号化の度に鍵の生成が行なわれるので、この点から、よりいっそう、保護対象プログラムの処理内容の解析が防止される。
【００３４】
コード書換部１３は、本実施の形態１では、メイン処理モジュール２１によって特定処理モジュール２２が呼び出された場合に、代わりに復号化処理モジュール２３が呼び出されるように、暗号化部１１によって抽出された情報を用いて、復号化処理モジュール２３のコードを書き換える。
【００３５】
これにより、保護対象プログラム２０ａが機器上で実行され、メイン処理モジュール２１が特定処理モジュール２２を呼び出すと、その代わりに、復号化処理モジュール２３が呼び出されて、復号化された特定処理モジュール２２ｂが実行される。
【００３６】
また、プログラム保護装置１０において、コードの書き換えの終了した復号化処理モジュール２３と、暗号化された特定処理モジュール２２ａとは、別々に出力される。その後、保護対象プログラム２０の開発者によって、これらのモジュールは、メイン処理モジュール２１に結合され、保護対象プログラム２０ａとされる。
【００３７】
また、本実施の形態１では、コード書換部１３は、本実施の形態１では、コードの書き換えの終了後、復号化処理モジュール２３と、暗号化された特定処理モジュール２２ａとを、一つのファイルにまとめて出力することもできる。この場合は、保護対象プログラム２０の開発者は、このファイルをメイン処理モジュール２１に結合して、保護対象プログラム２０ａとする。
【００３８】
［装置動作］
次に、本発明の実施の形態１におけるプログラム保護装置１０の動作について図２を用いて説明する。図２は、本発明の実施の形態１におけるプログラム保護装置の動作を示すフロー図である。以下の説明においては、適宜図１を参酌する。また、本実施の形態１では、プログラム保護装置１０を動作させることによって、プログラム保護方法が実施される。よって、本実施の形態１におけるプログラム保護方法の説明は、以下のプログラム保護装置１０の動作説明に代える。
【００３９】
最初に、保護対象プログラム２０の開発者によって、特定処理モジュール２２が、プログラム保護装置１０に入力される。これにより、図２に示すように、プログラム保護装置１０は、特定処理モジュール２２の入力を受け付ける。（ステップＡ１）。
【００４０】
次に、暗号化部１１は、暗号用の共通鍵を生成し、これを用いて、入力が受け付けられた特定処理モジュール２２を暗号化する（ステップＡ２）。
【００４１】
次に、復号化処理モジュール生成部１２が、復号化処理モジュール２３を生成する（ステップＡ３）。このとき、復号化処理モジュール生成部１２は、復号化処理モジュール２３が復号化用の共通鍵を生成できるようにするため、ステップＡ２での共通鍵の作成で使用したデータと特定の数式とを、復号化処理モジュール２３に保持させる。
【００４２】
次に、コード書換部１３が、保護対象プログラム２０において、特定処理モジュール２２が呼び出されると、代わりに、復号化処理モジュール２３が呼び出されるように、復号化処理モジュール２３のコードを書き換える（ステップＡ４）。
【００４３】
また、ステップＡ４において、コード書換部１３は、復号化処理モジュール２３と暗号化された特定処理モジュール２２ａとを一つのファイルにまとめることができる。なお、ステップＡ４は、ステップＡ３と同時に実行されても良い。
【００４４】
次に、プログラム保護装置１０は、復号化処理モジュール２３と暗号化された特定処理モジュール２２ａとを、例えば、開発者の端末等に出力する（ステップＡ５）。これにより、プログラム保護装置１０における処理は終了する。
【００４５】
その後、開発者は、メイン処理モジュール２１に、復号化処理モジュール２３と暗号化された特定処理モジュール２２ａとを付加し、保護対象プログラム２０ａを構築する。また、保護対象プログラム２０ａは、組み込み対象となる機器に、組み込まれ、機器の動作に貢献する。
【００４６】
［保護処理用プログラム］
本実施の形態１におけるプログラム（保護対象プログラムを除く）は、コンピュータに、図２に示すステップＡ１〜Ａ５を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態１におけるプログラム保護装置１０とプログラム保護方法とを実現することができる。
【００４７】
上記の場合、コンピュータのＣＰＵ（Central Processing Unit）は、暗号化部１１、復号化処理モジュール生成部１２、コード書換部１３として機能し、処理を行なう。なお、本明細書においてプログラム保護装置を構築するためのプログラムは、保護対象プログラムと区別するため、「保護処理用プログラム」と表記することもある。
【００４８】
［機器］
ここで、図３を用いて、本実施の形態１において保護処理が行なわれた保護対象プログラム２０ａが搭載された機器について説明する。図３は、本発明の実施の形態１での保護処理がなされた保護対象プログラムを搭載する機器を示す図である。
【００４９】
図３に示す機器５０は、家庭用機器、産業用機器、医療用機器、及び自動車といった機器である。図３に示すように、機器５０には、ＣＰＵ、メモリ、バス、インターフェイス（これらについては図示せず）等が一体となったコンピュータシステム４０が搭載されている。図１に示した保護処理済の保護対象プログラム２０ａは、このコンピュータシステム４０上で実行される。
【００５０】
図３に示すように、保護対象プログラム２０ａは、コンピュータシステム４０のメモリ４４上に展開される。これにより、コンピュータシステム４０のオペレーティングシステム（ＯＳ）４３上に、メイン処理モジュール２１を実行するメイン処理実行部４１と、復号化処理モジュール２３を実行する復号化処理部４２とが構築される。なお、実際には、コンピュータシステム４０のＣＰＵが、メイン処理実行部４１及び復号化処理部４２として機能する。
【００５１】
復号化処理部４２は、メイン処理実行部４１が特定処理モジュール２２（図１参照）を呼び出すと、暗号化された特定処理モジュール２２ａの復号化を行ない、復号化した特定処理モジュール２２ｂをメモリ４４上に展開する。そして、復号化処理部４２は、復号化した特定処理モジュール２２ｂを実行する。
【００５２】
［実施の形態１における効果］
以上のように、本実施の形態１によれば、特定処理モジュール２２は、保護対象プログラム２０ａにおいて暗号化された状態で結合している。このため、特定処理モジュールをリバースエンジニアリングによって静的解析することは困難である。また、機器５０のコンピュータシステム４０では、特定処理モジュール２２の復号化は、必要な場合にのみ行なわれるので、特定処理モジュール２２のメモリ４４上への展開は最小限とされるので、デバッガ等によって動的解析することも困難となる。
【００５３】
また、メイン処理モジュール２１は、プログラム保護処理の前後のいずれにおいても、同じインターフェイスで特定処理モジュールを呼び出すことができる。従って、保護対象プログラムの開発者が、暗号化処理のアルゴリズム、復号化処理のアルゴリズム、更には、復号化処理の内部構造を把握する必要性はない。また、開発者は、復号化処理モジュール２３を呼び出すためにメイン処理モジュール２１を改造しなくても良く、その作業も発生しない。このため、開発者における負担は軽減され、結果、開発期間及び開発コストの低減化も図られる。
【００５４】
（実施の形態２）
次に、本発明の実施の形態２における、プログラム保護装置、プログラム保護方法、及びプログラムについて、図４〜図６を参照しながら説明する。
【００５５】
［装置構成］
最初に、図４を用いて本実施の形態２におけるプログラム保護装置の構成について説明する。図４は、本発明の実施の形態２におけるプログラム保護装置の構成を示すブロック図である。
【００５６】
図４に示す本実施の形態２におけるプログラム保護装置６０は、復号化処理モジュール生成部６１の機能の点で、実施の形態１において図１に示したプログラム保護装置１０と異なっている。以下、相違点を中心に説明する。
【００５７】
本実施の形態２では、復号化処理モジュール生成部６１は、復号化処理モジュール６２を生成する。復号化処理モジュール６２は、図１に示した復号化処理モジュール２３が備える機能に加え、特定処理モジュール２２ｂの実行後に、保護対象プログラム２０ａを実行している装置（機器）のメモリ（図６参照）に対して、別のデータによる上書き処理を行なう機能を備えている。
【００５８】
具体的には、復号化処理モジュール生成部６１は、復号化処理モジュール６２に、図１に示した復号化処理モジュール２３の機能に加え、パタンデータ６３によってメモリを上書きする機能も付与する。そして、復号化処理モジュール生成部６１は、メモリを上書きするためのパタンデータ６３を出力する。
【００５９】
パタンデータ６３の具体例としては、定数値、乱数、ダミー処理を行なうためのプログラムコード、及び錯誤しやすいプログラムコード（別方式暗号の復号プログラム等）、警告メッセージ等のうちの、いずれか、又はこれらの組合せが挙げられる。
【００６０】
［装置動作］
次に、本発明の実施の形態２におけるプログラム保護装置６０の動作について図５を用いて説明する。図５は、本発明の実施の形態２におけるプログラム保護装置の動作を示すフロー図である。以下の説明においては、適宜図４を参酌する。また、本実施の形態２では、プログラム保護装置６０を動作させることによって、プログラム保護方法が実施される。よって、本実施の形態２におけるプログラム保護方法の説明は、以下のプログラム保護装置６０の動作説明に代える。
【００６１】
最初に、保護対象プログラム２０の開発者によって、特定処理モジュール２２が、プログラム保護装置６０に入力される。これにより、図５に示すように、プログラム保護装置６０は、特定処理モジュール２２の入力を受け付ける。（ステップＢ１）。
【００６２】
次に、暗号化部１１は、暗号用の共通鍵を生成し、これを用いて、入力が受け付けられた特定処理モジュール２２を暗号化する（ステップＢ２）。なお、ステップＢ１及びＢ２は、実施の形態１において図２に示したステップＡ１及びＡ２と同様のステップである。
【００６３】
次に、復号化処理モジュール生成部６１は、プログラム保護装置６０を使用している開発者から、特定処理モジュール２２の実行後に、特定処理モジュール２２を機器のメモリから削除する旨の指示が出されているかどうかを判定する（ステップＢ３）。
【００６４】
具体的には、ステップＢ３では、復号化処理モジュール生成部６１は、プログラム保護装置６０の表示装置（図示せず）の画面に、メモリ削除が必要かどうかを問い合わせるメッセージを表示させる。そして、開発者が、キーボード等の入力機器を介して、必要又は不必要の旨を入力すると、復号化処理モジュール生成部６１は、入力結果に基づいて判定を行なう。
【００６５】
また、本実施の形態２では、プログラム保護装置６０は、開発者に対して、メモリ削除の有無を予め指定させることもできる。指定は、例えば、開発者に、オプション指定としてメモリ削除の有無を入力させることによって、又は、開発者にメモリ削除の有無が登録された設定ファイルを入力させることによって行なわれる。そして、この場合、ステップＢ４において、復号化処理モジュール生成部６１は、指定された内容に基づいて判定を行なう。
【００６６】
ステップＢ３の判定の結果、特定処理モジュールを機器のメモリから削除する旨の指示が出されている場合は、復号化処理モジュール生成部６１は、ステップＢ４を実行する。ステップＢ４では、復号化処理モジュール生成部６１は、復号化処理モジュール６２を生成し、加えて、予め用意されているパタンデータ６３を出力する。出力先は、後述する開発者の端末等である。
【００６７】
また、ステップＢ４では、復号化処理モジュール生成部６１は、復号化処理モジュール６２に、暗号化された特定処理モジュール２２ａを復号化する機能と、復号化された特定処理モジュール２２ｂを実行する機能とに加えて、パタンデータ６３によってメモリを上書きする機能も付与する。
【００６８】
更に、復号化処理モジュール生成部６１は、復号化処理モジュール６２が復号化用の共通鍵を生成できるようにするため、ステップＢ２での共通鍵の作成で使用したデータと特定の数式とを、復号化処理モジュール６２に保持させる。
【００６９】
一方、ステップＢ３の判定の結果、特定処理モジュールを機器のメモリから削除する旨の指示が出されていない場合は、復号化処理モジュール生成部６１は、復号化処理モジュール６２の生成のみを行なう（ステップＢ５）。なお、ステップＢ５でも、復号化処理モジュール生成部６１は、ステップＢ２での共通鍵の作成で使用したデータと特定の数式とを、復号化処理モジュール６２に保持させる。
【００７０】
次に、ステップＢ４又はステップＢ５の実行後、コード書換部１３が、復号化処理モジュール６２のコードの書き換えを実行する（ステップＢ６）。ステップＢ６は、実施の形態１において図２に示したステップＡ４と同様のステップである。なお、本実施の形態２では、コード書換部１３は、復号化処理モジュール２３と暗号化された特定処理モジュール２２ａとに加えて、パタンデータ６３も一つのファイルにまとめることができる。
【００７１】
次に、プログラム保護装置６０は、復号化処理モジュール６２と暗号化された特定処理モジュール２２ａとを、例えば、開発者の端末等に出力する（ステップＢ７）。これにより、プログラム保護装置６０における処理は終了する。
【００７２】
ステップＢ７は、実施の形態１において図２に示したステップＡ５と同様のステップである。その後、開発者は、メイン処理モジュール２１に、復号化処理モジュール６２と、暗号化された特定処理モジュール２２ａと、パタンデータ６３とを付加し、保護対象プログラム２０ａを構築する。また、保護対象プログラム２０ａは、組み込み対象となる機器に、組み込まれ、機器の動作に貢献する。
【００７３】
［保護処理用プログラム］
本実施の形態２における保護処理用プログラムは、コンピュータに、図５に示すステップＢ１〜Ｂ７を実行させるプログラムであれば良い。この保護処理用プログラムをコンピュータにインストールし、実行することによって、本実施の形態２におけるプログラム保護装置６０とプログラム保護方法とを実現することができる。上記の場合、コンピュータのＣＰＵ（Central Processing Unit）は、暗号化部１１、復号化処理モジュール生成部６１、コード書換部１３として機能し、処理を行なう。
【００７４】
［機器］
ここで、図６を用いて、本実施の形態２において保護処理が行なわれた保護対象プログラム２０ａが搭載された機器について説明する。図６は、本発明の実施の形態２での保護処理がなされた保護対象プログラムを搭載する機器を示す図である。
【００７５】
図６に示す機器５０は、家庭用機器、産業用機器、医療用機器、及び自動車といった機器である。図６に示すように、機器５０には、ＣＰＵ、メモリ、バス、インターフェイス（これらについては図示せず）等が一体となったコンピュータシステム４０が搭載されている。図４に示した保護処理済の保護対象プログラム２０ａは、このコンピュータシステム４０上で実行される。
【００７６】
図６に示すように、保護対象プログラム２０ａは、コンピュータシステム４０のメモリ４４上に展開される。これにより、コンピュータシステム４０のオペレーティングシステム（ＯＳ）４３上に、メイン処理モジュール２１を実行するメイン処理実行部４１と、復号化処理モジュール６２を実行する復号化処理部６４とが構築される。なお、実際には、コンピュータシステム４０のＣＰＵが、メイン処理実行部４１及び復号化処理部６４として機能する。
【００７７】
また、本実施の形態２でも、実施の形態１において図３に示した復号化処理部４２と同様に、復号化処理部６４は、メイン処理実行部４１が特定処理モジュール２２（図１参照）を呼び出すと、暗号化された特定処理モジュール２２ａの復号化を行ない、復号化した特定処理モジュール２２ｂをメモリ４４上に展開する。そして、復号化処理部６４は、復号化した特定処理モジュール２２ｂを実行する。
【００７８】
但し、本実施の形態１では、実施の形態１と異なり、復号化処理部６４は、復号化した特定処理モジュール２２ｂを実行した後、設定されたタイミングで、メモリ４４の特定処理モジュール２２ｂが展開されている領域上に、パタンデータ６３を上書きする。これにより、復号化された特定処理モジュール２２ｂは、メモリ４４上から、完全に削除される。なお、パタンデータ６３を上書きするタイミングは、特に限定されず、特定処理モジュール２２ｂの処理が終了する度であっても良いし、機器５０の電源がオフにされる度であっても良い。
【００７９】
［実施の形態２における効果］
以上のように、本実施の形態２によれば、実施の形態１と同様に、リバースエンジニアリングによって静的解析することが困難となる。また、パタンデータによる上書きにより、特定処理モジュール２２のメモリ４４上への展開は更に最小限とされるので、いっそうデバッガ等による動的解析は困難となる。
【００８０】
また、実施の形態２を用いた場合も、実施の形態１と同様に、開発者における負担は軽減され、結果、開発期間及び開発コストの低減化も図られる。
【００８１】
（実施の形態３）
次に、本発明の実施の形態３における、プログラム保護装置、プログラム保護方法、及びプログラムについて、図７〜図９を参照しながら説明する。
【００８２】
［装置構成］
最初に、図７を用いて本実施の形態３におけるプログラム保護装置の構成について説明する。図７は、本発明の実施の形態３におけるプログラム保護装置の構成を示すブロック図である。
【００８３】
図７に示す本実施の形態３におけるプログラム保護装置７０は、復号化処理モジュール生成部７１の機能の点で、実施の形態１において図１に示したプログラム保護装置１０と異なっている。以下、相違点を中心に説明する。
【００８４】
本実施の形態３では、復号化処理モジュール生成部７１は、復号化処理モジュール７２にアタッチするダミープログラム７３を、復号化処理モジュール７２と共に、出力することができる。なお、ダミープログラム７３は、予め作成されていても良いし、保護対象プログラム２０毎に作成されても良い。
【００８５】
この構成では、復号化処理モジュール７２には、実行中、常に、ダミープログラム７３によるアタッチが行なわれるため、第３者が保護対象プログラムの解析のために、デバッガを利用しようとしても、デバッガはアタッチできない状態となる。
【００８６】
また、本実施の形態３では、復号化処理モジュール生成部７１は、復号化処理モジュール７２に、図１に示した復号化処理モジュール２３が備える機能に加えて、新たな機能を付加する。新たな機能は、復号化処理モジュール７２が、ダミープログラム７３以外のプログラムにアタッチされている場合に、その処理を停止する機能である。
【００８７】
［装置動作］
次に、本発明の実施の形態３におけるプログラム保護装置７０の動作について図８を用いて説明する。図８は、本発明の実施の形態３におけるプログラム保護装置の動作を示すフロー図である。以下の説明においては、適宜図７を参酌する。また、本実施の形態３では、プログラム保護装置７０を動作させることによって、プログラム保護方法が実施される。よって、本実施の形態３におけるプログラム保護方法の説明は、以下のプログラム保護装置７０の動作説明に代える。
【００８８】
最初に、保護対象プログラム２０の開発者によって、特定処理モジュール２２が、プログラム保護装置７０に入力される。これにより、図８に示すように、プログラム保護装置７０は、特定処理モジュール２２の入力を受け付ける。（ステップＣ１）。
【００８９】
次に、暗号化部１１は、暗号用の共通鍵を生成し、これを用いて、入力が受け付けられた特定処理モジュール２２を暗号化する（ステップＣ２）。なお、ステップＣ１及びＣ２は、実施の形態１において図２に示したステップＡ１及びＡ２と同様のステップである。
【００９０】
次に、復号化処理モジュール生成部７１は、プログラム保護装置７０を使用している開発者から、デバッガ対策用のダミープログラムを使用する旨の指示が出されているかどうかを判定する（ステップＣ３）。
【００９１】
具体的には、ステップＣ３では、復号化処理モジュール生成部７１は、プログラム保護装置７０の表示装置（図示せず）の画面に、デバッガ対策用のダミープログラムを使用するかどうかを問い合わせるメッセージを表示させる。そして、開発者が、キーボード等の入力機器を介して、使用又は不使用の旨を入力すると、復号化処理モジュール生成部７１は、入力結果に基づいて判定を行なう。
【００９２】
また、本実施の形態３でも、実施の形態２と同様に、プログラム保護装置７０は、開発者に対して、ダミープログラム７３の使用の有無を予め指定させることもできる。この場合ステップＣ３において、復号化処理モジュール生成部７１は、指定された内容に基づいて判定を行なう。
【００９３】
ステップＣ３の判定の結果、ダミープログラム７３を使用する旨の指示が出されている場合は、復号化処理モジュール生成部７１は、ステップＣ４を実行する。ステップＣ４では、復号化処理モジュール生成部７１は、復号化処理モジュール７２を生成し、加えて、予め用意されているダミープログラム７３を出力する。出力先は、後述する開発者の端末等である。
【００９４】
また、ステップＣ４では、復号化処理モジュール生成部７１は、復号化処理モジュール７２に、暗号化された特定処理モジュール２２ａを復号化する機能と、復号化された特定処理モジュール２２ｂを実行する機能とに加えて、ダミープログラム７３以外のプログラムにアタッチされている場合に処理を停止する機能も付与する。
【００９５】
更に、復号化処理モジュール生成部７１は、復号化処理モジュール７２が復号化用の共通鍵を生成できるようにするため、ステップＣ２での共通鍵の作成で使用したデータと特定の数式とを、復号化処理モジュール７２に保持させる。
【００９６】
一方、ステップＣ３の判定の結果、ダミープログラム７３を使用する旨の指示が出されていない場合は、復号化処理モジュール生成部７１は、復号化処理モジュール７２の生成のみを行なう（ステップＣ５）。なお、ステップＣ５でも、復号化処理モジュール生成部７１は、ステップＣ２での共通鍵の作成で使用したデータと特定の数式とを、復号化処理モジュール７２に保持させる。
【００９７】
次に、ステップＣ４又はステップＣ５の実行後、コード書換部１３が、復号化処理モジュール７２のコードの書き換えを実行する（ステップＣ６）。ステップＣ６は、実施の形態１において図２に示したステップＡ５と同様のステップである。なお、本実施の形態３では、コード書換部１３は、復号化処理モジュール２３と暗号化された特定処理モジュール２２ａとに加えて、ダミープログラム７３も一つのファイルにまとめることができる。
【００９８】
次に、プログラム保護装置７０は、復号化処理モジュール７２と暗号化された特定処理モジュール２２ａとを、例えば、開発者の端末等に出力する（ステップＣ７）。これにより、プログラム保護装置７０における処理は終了する。
【００９９】
ステップＣ７は、実施の形態１において図２に示したステップＡ５と同様のステップである。その後、開発者は、メイン処理モジュール２１に、復号化処理モジュール７２と、暗号化された特定処理モジュール２２ａと、ダミープログラム７３とを付加し、保護対象プログラム２０ａを構築する。また、保護対象プログラム２０ａは、組み込み対象となる機器に、組み込まれ、機器の動作に貢献する。
【０１００】
［保護処理用プログラム］
本実施の形態３における保護処理用プログラムは、コンピュータに、図８に示すステップＣ１〜Ｃ７を実行させるプログラムであれば良い。この保護処理用プログラムをコンピュータにインストールし、実行することによって、本実施の形態３におけるプログラム保護装置７０とプログラム保護方法とを実現することができる。上記の場合、コンピュータのＣＰＵ（Central Processing Unit）は、暗号化部１１、復号化処理モジュール生成部７１、コード書換部１３として機能し、処理を行なう。
【０１０１】
［機器］
ここで、図９を用いて、本実施の形態３において保護処理が行なわれた保護対象プログラム２０ａが搭載された機器について説明する。図９は、本発明の実施の形態３での保護処理がなされた保護対象プログラムを搭載する機器を示す図である。
【０１０２】
図９に示す機器５０は、家庭用機器、産業用機器、医療用機器、及び自動車といった機器である。図９に示すように、機器５０には、ＣＰＵ、メモリ、バス、インターフェイス（これらについては図示せず）等が一体となったコンピュータシステム４０が搭載されている。図７に示した保護処理済の保護対象プログラム２０ａは、このコンピュータシステム４０上で実行される。
【０１０３】
図９に示すように、保護対象プログラム２０ａは、コンピュータシステム４０のメモリ４４上に展開される。これにより、コンピュータシステム４０のオペレーティングシステム（ＯＳ）４３上に、メイン処理モジュール２１を実行するメイン処理実行部４１と、復号化処理モジュール７２を実行する復号化処理部７４とが構築される。なお、実際には、コンピュータシステム４０のＣＰＵが、メイン処理実行部４１及び復号化処理部７４として機能する。
【０１０４】
また、本実施の形態３でも、実施の形態１において図３に示した復号化処理部４２と同様に、復号化処理部７４は、メイン処理実行部４１が特定処理モジュール２２（図１参照）を呼び出すと、暗号化された特定処理モジュール２２ａの復号化を行ない、復号化した特定処理モジュール２２ｂをメモリ４４上に展開する。そして、復号化処理部７４は、復号化した特定処理モジュール２２ｂを実行する。
【０１０５】
但し、本実施の形態３では、メモリ４４上にダミープログラム７３も展開されるので、ＯＳ４３上には、ダミープログラム７３を実行するダミープログラム実行部７５も構築される。そして、ダミープログラム実行部７５によって、復号化処理部７４に対するアタッチが常に行なわれている状態となる。
【０１０６】
言い換えると、本実施の形態３では、特定処理モジュール２２ｂを実行する親プロセスとは別に、ダミープログラム７３によって新たな子プロセスが生成され、子プロセスは、親プロセスに常にアタッチしている状態となる。このため、図９に示すように、外部から、デバッガ７６が親プロセスにアタッチすることができない状態となる。
【０１０７】
また、仮に、ダミープログラム実行部７５より先にデバッガ７６が親プロセスにアタッチしている場合は、ダミープログラム実行部７５はアタッチできない状態となるので、復号化処理部７４は、特定処理モジュール２２ａの復号化といった処理を中断する。この場合、デバッガ７６はデバッグを実行できなくなる。
【０１０８】
［実施の形態３における効果］
以上のように、本実施の形態３によれば、デバッガによる特定処理モジュール２２ｂへのアクセスを防ぐことができるので、よりいっそう特定処理モジュールをリバースエンジニアリングによって動的解析することが困難となる。また、実施の形態３を用いた場合も、実施の形態１と同様に、リバースエンジニアリングによって静的解析することは困難となる。更に、開発者における負担は軽減され、結果、開発期間及び開発コストの低減化も図られる。
【０１０９】
（実施の形態４）
次に、本発明の実施の形態４における、プログラム保護装置、プログラム保護方法、及びプログラムについて、図１０〜図１２を参照しながら説明する。
【０１１０】
［装置構成］
最初に、図１０を用いて本実施の形態４におけるプログラム保護装置の構成について説明する。図１０は、本発明の実施の形態４におけるプログラム保護装置の構成を示すブロック図である。
【０１１１】
図１０に示す本実施の形態４におけるプログラム保護装置８０は、復号化処理モジュール生成部８１の機能の点で、実施の形態１において図１に示したプログラム保護装置１０と異なっている。以下、相違点を中心に説明する。
【０１１２】
本実施の形態４では、復号化処理モジュール生成部８１は、復号化処理モジュール８２を生成する。復号化処理モジュール８２は、図１に示した復号化処理モジュール２３が備える機能に加え、保護対象プログラム２０ａを実行している装置（機器）に対して、特定処理モジュール２２ｂの一部又は全部についてのスワップを禁止する機能を備えている。
【０１１３】
具体的には、復号化処理モジュール８２には、特定処理モジュール２２ｂのスワップファイル（図１２参照）への書込みを禁止する命令（以下「スワップファイル書込み禁止命令」と表記する。」が記述されている。よって、保護対象プログラム２０ａを実行している装置（機器）のメモリ上に、特定処理モジュール２２ｂが展開されると、復号化処理モジュール８２のスワップファイル書込みを禁止命令によって、その展開された領域に対してスワップファイルへの書込みが禁止される。
【０１１４】
［装置動作］
次に、本発明の実施の形態４におけるプログラム保護装置８０の動作について図１１を用いて説明する。図１１は、本発明の実施の形態４におけるプログラム保護装置の動作を示すフロー図である。以下の説明においては、適宜図１０を参酌する。また、本実施の形態４では、プログラム保護装置８０を動作させることによって、プログラム保護方法が実施される。よって、本実施の形態４におけるプログラム保護方法の説明は、以下のプログラム保護装置８０の動作説明に代える。
【０１１５】
最初に、保護対象プログラム２０の開発者によって、特定処理モジュール２２が、プログラム保護装置８０に入力される。これにより、図１１に示すように、プログラム保護装置８０は、特定処理モジュール２２の入力を受け付ける。（ステップＤ１）。
【０１１６】
次に、暗号化部１１は、暗号用の共通鍵を生成し、これを用いて、入力が受け付けられた特定処理モジュール２２を暗号化する（ステップＤ２）。なお、ステップＤ１及びＤ２は、実施の形態１において図２に示したステップＡ１及びＡ２と同様のステップである。
【０１１７】
次に、復号化処理モジュール生成部８１は、プログラム保護装置８０を使用している開発者から、スワップ処理を禁止する旨の指示が出されているかどうかを判定する（ステップＤ３）。
【０１１８】
具体的には、ステップＤ３では、復号化処理モジュール生成部８１は、プログラム保護装置８０の表示装置（図示せず）の画面に、スワップ処理の禁止が必要かどうかを問い合わせるメッセージを表示させる。そして、開発者が、キーボード等の入力機器を介して、必要又は不必要の旨を入力すると、復号化処理モジュール生成部８１は、入力結果に基づいて判定を行なう。
【０１１９】
また、本実施の形態４でも、実施の形態２で述べたように、プログラム保護装置８０は、開発者に対して、スワップ処理の禁止の有無を予め指定させることもできる。この場合ステップＤ３において、復号化処理モジュール生成部８１は、指定された内容に基づいて判定を行なう。
【０１２０】
ステップＤ３の判定の結果、スワップ処理を禁止する旨の指示が出されている場合は、復号化処理モジュール生成部８１は、ステップＤ４を実行する。ステップＤ４では、復号化処理モジュール生成部８１は、特定処理モジュール２２ｂのスワップファイル（図１２参照）への書込みを禁止させる機能を備えた復号化処理モジュール８２を生成する。
【０１２１】
一方、ステップＤ３の判定の結果、スワップ処理を禁止する旨の指示が出されていない場合は、復号化処理モジュール生成部８１は、特定処理モジュール２２ｂのスワップファイルへの書込みを禁止させる機能を備えていない復号化処理モジュール８２を生成する。
【０１２２】
次に、ステップＤ４又はステップＤ５の実行後、コード書換部１３が、復号化処理モジュール８２のコードの書き換えを実行する（ステップＤ６）。ステップＤ６は、実施の形態１において図２に示したステップＡ４と同様のステップである。なお、本実施の形態４では、コード書換部１３は、復号化処理モジュール８２と暗号化された特定処理モジュール２２ａとを一つのファイルにまとめることができる。
【０１２３】
次に、プログラム保護装置８０は、復号化処理モジュール８２と暗号化された特定処理モジュール２２ａとを、例えば、開発者の端末等に出力する（ステップＤ７）。これにより、プログラム保護装置８０における処理は終了する。
【０１２４】
ステップＤ７は、実施の形態１において図２に示したステップＡ５と同様のステップである。その後、開発者は、メイン処理モジュール２１に、復号化処理モジュール８２と、暗号化された特定処理モジュール２２ａとを付加し、保護対象プログラム２０ａを構築する。また、保護対象プログラム２０ａは、組み込み対象となる機器に、組み込まれ、機器の動作に貢献する。
【０１２５】
［保護処理用プログラム］
本実施の形態４における保護処理用プログラムは、コンピュータに、図１１に示すステップＤ１〜Ｄ７を実行させるプログラムであれば良い。この保護処理用プログラムをコンピュータにインストールし、実行することによって、本実施の形態４におけるプログラム保護装置８０とプログラム保護方法とを実現することができる。上記の場合、コンピュータのＣＰＵ（Central Processing Unit）は、暗号化部１１、復号化処理モジュール生成部８１、コード書換部１３として機能し、処理を行なう。
【０１２６】
［機器］
ここで、図１２を用いて、本実施の形態４において保護処理が行なわれた保護対象プログラム２０ａが搭載された機器について説明する。図１２は、本発明の実施の形態４での保護処理がなされた保護対象プログラムを搭載する機器を示す図である。
【０１２７】
図１２に示す機器５０は、家庭用機器、産業用機器、医療用機器、及び自動車といった機器である。図１２に示すように、機器５０には、ＣＰＵ、メモリ、バス、インターフェイス（これらについては図示せず）等が一体となったコンピュータシステム４０が搭載されている。図１２に示した保護処理済の保護対象プログラム２０ａは、このコンピュータシステム４０上で実行される。
【０１２８】
図１２に示すように、保護対象プログラム２０ａは、コンピュータシステム４０のメモリ４４上に展開される。これにより、コンピュータシステム４０のオペレーティングシステム（ＯＳ）４３上に、メイン処理モジュール２１を実行するメイン処理実行部４１と、復号化処理モジュール８２を実行する復号化処理部８３とが構築される。なお、実際には、コンピュータシステム４０のＣＰＵが、メイン処理実行部４１及び復号化処理部８３として機能する。
【０１２９】
また、本実施の形態４でも、実施の形態１において図３に示した復号化処理部４２と同様に、復号化処理部８３は、メイン処理実行部４１が特定処理モジュール２２（図１参照）を呼び出すと、暗号化された特定処理モジュール２２ａの復号化を行ない、復号化した特定処理モジュール２２ｂをメモリ４４上に展開する。そして、復号化処理部８３は、復号化した特定処理モジュール２２ｂを実行する。
【０１３０】
但し、本実施の形態４では、復号化処理部８３は、メモリ４４上に展開されている特定処理モジュール２２ｂに対してスワップファイル８４への書込みを禁止している。具体的には、復号化処理部８３は、復号化処理モジュール８２に記述されたスワップファイル書込み禁止命令により、メモリ４４上に、特定処理モジュール２２ｂが展開されると、その展開された領域に対してスワップファイルへの書込みを禁止する。よって、特定処理モジュール２２ｂのメモリ以外の記憶装置のスワップファイル８４への書込みは禁止される。
【０１３１】
［実施の形態４における効果］
以上のように、本実施の形態４によれば、特定処理モジュール２２ｂのスワップファイル８４への書込みを防ぐことができるので、よりいっそう特定処理モジュールをリバースエンジニアリングによって動的解析することが困難となる。また、実施の形態４を用いた場合も、実施の形態１と同様に、リバースエンジニアリングによって静的解析することは困難となる。更に、開発者における負担は軽減され、結果、開発期間及び開発コストの低減化も図られる。
【０１３２】
（保護処理用プログラムを実行するコンピュータ）
ここで、本発明の実施の形態１〜４における保護処理用プログラムを実行可能なコンピュータについて図１３を用いて説明する。図１３は、本発明の実施の形態１〜４におけるプログラム保護装置を実現するコンピュータの一例を示すブロック図である。
【０１３３】
図１３に示すように、コンピュータ１１０は、ＣＰＵ１１１と、メインメモリ１１２と、記憶装置１１３と、入力インターフェイス１１４と、表示コントローラ１１５と、データリーダ／ライタ１１６と、通信インターフェイス１１７とを備える。これらの各部は、バス１２１を介して、互いにデータ通信可能に接続される。
【０１３４】
ＣＰＵ１１１は、記憶装置１１３に格納された、本実施の形態における保護処理用プログラム（コード）をメインメモリ１１２に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ１１２は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）等の揮発性の記憶装置である。
【０１３５】
また、本実施の形態における保護処理用プログラムは、コンピュータ読み取り可能な記録媒体１２０に格納された状態で提供される。なお、保護処理用プログラムは、通信インターフェイス１１７を介して接続されたインターネット上で流通するものであっても良い。
【０１３６】
また、記憶装置１１３の具体例としては、ハードディスクの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス１１４は、ＣＰＵ１１１と、キーボード及びマウスといった入力機器１１８との間のデータ伝送を仲介する。表示コントローラ１１５は、ディスプレイ装置１１９と接続され、ディスプレイ装置１１９での表示を制御する。データリーダ／ライタ１１６は、ＣＰＵ１１１と記録媒体１２０との間のデータ伝送を仲介し、記録媒体１２０からのプログラムの読み出し、及びコンピュータ１１０における処理結果の記録媒体１２０への書き込みを実行する。通信インターフェイス１１７は、ＣＰＵ１１１と、他のコンピュータとの間のデータ伝送を仲介する。
【０１３７】
また、記録媒体１２０の具体例としては、ＣＦ（Compact Flash（登録商標））及びＳＤ（Secure Digital）等の汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）等の磁気記憶媒体、又はＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記憶媒体が挙げられる。
【産業上の利用可能性】
【０１３８】
以上のように、本発明によれば、プログラムの開発者に負担をかけることなく、第３者によるプログラムの処理内容の解析を防止することができる。本発明は、特に、組み込みシステムに用いられるプログラムの開発に有用である。
【符号の説明】
【０１３９】
１０  プログラム保護装置（実施の形態１）
１１  暗号化部
１２  復号化処理モジュール生成部
１３  コード書換部
２０  保護対象プログラム（保護処理前）
２０ａ  保護対象プログラム（保護処理後）
２１  メイン処理モジュール
２２  特定処理モジュール
２２ａ  暗号化された特定処理モジュール
２２ｂ  復号化された特定処理モジュール
２３  復号化処理モジュール
４０  コンピュータシステム
４１  メイン処理実行部
４２  復号化処理部
５０  機器
６０  プログラム保護装置（実施の形態２）
６１  復号化処理モジュール生成部
６２  復号化処理モジュール
６３  パタンデータ
６４  復号化処理部
７０  プログラム保護装置（実施の形態３）
７１  復号化処理モジュール生成部
７２  復号化処理モジュール
７３  ダミープログラム
７４  復号化処理部
７５  ダミープログラム実行部
７６  デバッガ
８０  プログラム保護装置（実施の形態４）
８１  復号化処理モジュール生成部
８２  復号化処理モジュール
８３  復号化処理部
８４  スワップファイル
１１０  コンピュータ
１１１  ＣＰＵ
１１２  メインメモリ
１１３  記憶装置
１１４  入力インターフェイス
１１５  表示コントローラ
１１６  データリーダ／ライタ
１１７  通信インターフェイス
１１８  入力機器
１１９  ディスプレイ装置
１２０  記録媒体
１２１  バス
【図１】
2013137646.tif 000003
【図２】
2013137646.tif 000004
【図３】
2013137646.tif 000005
【図４】
2013137646.tif 000006
【図５】
2013137646.tif 000007
【図６】
2013137646.tif 000008
【図７】
2013137646.tif 000009
【図８】
2013137646.tif 000010
【図９】
2013137646.tif 000011
【図１０】
2013137646.tif 000012
【図１１】
2013137646.tif 000013
【図１２】
2013137646.tif 000014
【図１３】
2013137646.tif 000015