(57)【特許請求の範囲】
【請求項１】
実行可能モジュールに含まれたプロテクトコードの矛盾により処理を終了させる手続きを含む、暗号化済みのプロテクト対象オブジェクトを記憶した記憶手段と、
前記記憶手段から前記暗号化済みプロテクト対象オブジェクトを読み出し、当該暗号化済みプロテクト対象オブジェクトを復号する復号手段と、
前記復号後のプロテクト対象オブジェクトに前記プロテクトコードを書込み、当該プロテクトコードを書き込んだ復号後のプロテクト対象オブジェクトと他のオブジェクトとを結合して、前記実行可能モジュールを作成するコード書込み手段と、
前記復号後のプロテクト対象オブジェクトを、前記他のオブジェクトとの結合の後に消去する削除手段と、
を有することを特徴とする情報処理装置。
【請求項２】
実行可能モジュールに含まれた複数のプロテクトコードの矛盾により処理を終了させる手続きを含む、暗号化済みのプロテクト対象オブジェクトを記憶した記憶手段と、
前記記憶手段から前記暗号化済みプロテクト対象オブジェクトを読み出し、当該暗号化済みプロテクト対象オブジェクトを復号する復号手段と、
互いに関連付けられた第一のプロテクトコードと第二のプロテクトコードとを生成するコード生成手段と、
前記復号後のプロテクト対象オブジェクトに前記第一のプロテクトコードを埋め込み、当該第一のプロテクトコード埋込み済みのプロテクト対象オブジェクトと他のオブジェクトとの結合により実行可能モジュールが作成されたら、当該実行可能モジュールに、前記第二のプロテクトコードを埋め込むコード書込み手段と、
前記第一のプロテクトコード埋込み済みのプロテクト対象オブジェクトを、前記二のプロテクトコード埋込み前に消去する削除手段と、
を有することを特徴とする情報処理装置。
【請求項３】
請求項２記載の情報処理装置であって、
前記コード生成手段は、乱数から、前記第一のプロテクトコードと前記第二のプロテクトコードと、を生成することを特徴とする情報処理装置。
【請求項４】
請求項２または３記載の情報処理装置であって、
前記コード書込み手段は、前記第一のプロテクトコードと前記第二のプロテクトコードとにダミーデータを付加することを特徴とする情報処理装置。
【請求項５】
請求項１、２、３および４のいずれか１項に記載の情報処理装置であって、
前記コード書込み手段は、前記復号後のプロテクト対象オブジェクトに書き込むためのプロテクトコードを暗号化し、
前記プロテクト対象オブジェクトには、前記実行可能モジュールを読み込んだ装置に、当該実行可能モジュールに含まれた暗号化済みのプロテクトコードを、当該プロテクトコードの診断に際して復号させるための手続きを含む、ことを特徴とする情報処理装置。
【請求項６】
情報処理装置に処理を実行させるためのプログラムが格納された、機械読み取り可能な記憶媒体であって、
前記プログラムは、前記情報処理装置に、
実行可能モジュールに含まれたプロテクトコードの矛盾により処理を終了させる手続きを含むプロテクト対象オブジェクトを、暗号化済みのプロテクト対象オブジェクトの復号により生成する復号処理と、
前記復号後のプロテクト対象オブジェクトに前記プロテクトコードを書き込み、当該プロテクトコードを書き込んだ復号後のプロテクト対象オブジェクトと他のオブジェクトとを結合して、前記実行可能モジュールを作成する処理と、
前記復号処理で生成されたプロテクト対象オブジェクトを、前記他のオブジェクトとの結合後に消去する削除処理と、
を実行させることを特徴とする記憶媒体。
【請求項７】
情報処理装置に処理を実行させるためのプログラムが格納された、機械読み取り可能な記憶媒体であって、
前記プログラムは、前記情報処理装置に、
実行可能モジュールに含まれた複数のプロテクトコードの矛盾により処理を終了させる手続きを含むプロテクト対象オブジェクトを、暗号化済みのプロテクト対象オブジェクトの復号により生成する復号処理と、
互いに関連付けられた第一のプロテクトコードと第二のプロテクトコードとを生成するコード生成処理と、
前記復号処理後、当該復号処理で生成されたプロテクト対象オブジェクトに、前記第一のプロテクトコードを埋め込む第一コード書込み処理と、
前記コード書込み処理後、当該コード書込み処理で前記第一のプロテクトコードが埋め込まれたプロテクト対象オブジェクトと、他のオブジェクトとの結合により、実行可能モジュールを作成する結合処理と、
前記結合処理後、当該結合処理で作成された前記実行可能モジュールに前記第二のプロテクトコードを埋め込む第二コード書込み処理と、
前記第一コード書込み処理後、前記第二コード書込み処理前に、前記復号処理で生成された前記プロテクト対象オブジェクトを消去する削除処理と、
を実行させることを特徴とする記憶媒体。
【請求項８】
請求項７記載の記憶媒体であって、
前記プログラムは、前記コード生成処理において、前記情報処理装置に、乱数から、前記第一のプロテクトコードと前記第二のプロテクトコードを生成させることを特徴とする記憶媒体。
【請求項９】
請求項７または８記載の記憶媒体であって、
前記プログラムは、前記情報処理装置に、前記第一のプロテクトコードと前記第二のプロテクトコードとにダミーデータを付加させることを特徴とする記憶媒体。
【請求項１０】
請求項６、７、８および９のいずれか１項に記載の記憶媒体であって、
前記プログラムは、前記復号後のプロテクト対象オブジェクトに書き込むためのプロテクトコードを暗号化する処理を前記情報処理装置に実行させ、
前記プロテクト対象オブジェクトには、前記実行可能モジュールを読み込んだ装置に、当該実行可能モジュールに含まれた暗号化プロテクトコードを、当該プロテクトコードの診断に際して復号させるための手続きが含まれることを特徴とする記憶媒体。
【請求項１１】
複数のオブジェクトを結合して、実行可能モジュールを生成する処理を情報処理装置に実行させる実行可能モジュール生成方法であって、
前記情報処理装置は、実行可能モジュールに含まれたプロテクトコードの矛盾により処理を終了させる手続きを含むプロテクト対象オブジェクトを、暗号化済みのプロテクト対象オブジェクトの復号により生成し、前記復号後のプロテクト対象オブジェクトに前記プロテクトコードを書き込んで、当該プロテクトコードを書き込んだ復号後のプロテクト対象オブジェクトと他のオブジェクトとの結合により前記実行可能モジュールを作成して、前記復号後のプロテクト対象オブジェクトを、前記他のオブジェクトとの結合後に消去する、
ことを特徴とする実行モジュール生成方法。
【請求項１２】
複数のオブジェクトを結合して、実行可能モジュールを生成する処理を情報処理装置に実行させる実行可能モジュール生成方法であって、
前記情報処理装置は、実行可能モジュールに含まれた複数のプロテクトコードの矛盾により処理を終了させる手続きを含むプロテクト対象オブジェクトを、暗号化済みのプロテクト対象オブジェクトの復号により生成し、互いに関連付けられた第一のプロテクトコードと第二のプロテクトコードとを生成して、前記復号後のプロテクト対象オブジェクトに当該第一のプロテクトコードを埋め込み、当該第一のプロテクトコード埋込み済みのプロテクト対象オブジェクトと他のオブジェクトとの結合により実行可能モジュールを作成したら、当該実行可能モジュールに当該第二のプロテクトコードを埋め込み、前記第一のプロテクトコード埋込み済みのプロテクト対象オブジェクトは、前記二のプロテクトコード埋込み前に消去されることを特徴とする実行可能モジュール生成方法。
【請求項１３】
情報処理装置に実行されるプログラムであって、
前記情報処理装置に、
実行可能モジュールに含まれたプロテクトコードの矛盾により処理を終了させる手続きを含むプロテクト対象オブジェクトを、暗号化済みのプロテクト対象オブジェクトの復号により生成する復号処理と、
前記復号処理で生成されたプロテクト対象オブジェクトに前記プロテクトコードを書き込み、当該プロテクトコードを書き込んだプロテクト対象オブジェクトと他のオブジェクトとの結合により、前記実行可能モジュールを作成する処理と、
前記復号処理で生成されたプロテクト対象オブジェクトを、前記他のオブジェクトとの結合後に消去する削除処理と、
を実行させることを特徴とするプログラム。
【請求項１４】
情報処理装置に実行されるプログラムであって、
前記情報処理装置に、
実行可能モジュールに含まれた複数のプロテクトコードの矛盾により処理を終了させる手続きを含むプロテクト対象オブジェクトを、暗号化済みのプロテクト対象オブジェクトの復号により生成する復号処理と、
互いに関連付けられた第一のプロテクトコードと第二のプロテクトコードとを生成するコード生成処理と、
前記復号処理後、当該復号処理で生成されたプロテクト対象オブジェクトに、前記第一のプロテクトコードを埋め込む第一コード書込み処理と、
前記コード書込み処理後、当該コード書込み処理で前記第一のプロテクトコードが埋め込まれたプロテクト対象オブジェクトと、他のオブジェクトとの結合により、実行可能モジュールを作成する結合処理と、
前記結合処理後、当該結合処理で作成された前記実行可能モジュールに前記第二のプロテクトコードを埋め込む第二コード書込み処理と、
前記第一コード書込み処理後、前記第二コード書込み処理前に、前記復号処理で生成された前記プロテクト対象オブジェクトを消去する削除処理と、
を実行させることを特徴とするプログラム。
【請求項１５】
請求項１４記載のプログラムであって、
前記コード生成処理において、前記情報処理装置に、乱数から、前記第一のプロテクトコードと前記第二のプロテクトコードを生成させることを特徴とするプログラム。
【請求項１６】
請求項１４または１５記載のプログラムであって、
前記情報処理装置に、前記第一のプロテクトコードと前記第二のプロテクトコードとにダミーデータを付加させることを特徴とするプログラム。
【請求項１７】
請求項１３、１４、１５および１６のいずれか１項に記載のプログラムであって、
前記情報処理装置に、前記復号後のプロテクト対象オブジェクトに書込むためのプロテクトコードを暗号化する処理を実行させ、
前記プロテクト対象オブジェクトには、前記実行可能モジュールを読み込んだ装置に、当該実行可能モジュールに含まれた暗号化プロテクトコードを、当該プロテクトコードの診断に際して復号させるための手続きが含まれる、
ことを特徴とするプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラム開発環境等におけるリソース不正コピーの防止技術に関する。
【０００２】
【従来の技術】
プログラムの不正コピーを防止するための技術として、特許公報第２５６９５６４号記載の、ソフトウエアのコピープロテクト装置が知られている。この装置によれば、フロッピディスクから読み出したプロテクトコードが外部に出力されないため、その不正な書替えを防止することができる。これにより、不正に複製されたソフトウエアを実行可能とすることが困難となり、ソフトウエアの不正な複製を効果的に防止することができる。
【０００３】
【発明が解決しようとする課題】
プログラムが作成される際には、通常、グラフィック機能その他の基本的機能を提供するライブラリ等のリソースが使用される。このような、ライブラリ等のリソースに含まれているオブジェクトは、実行可能モジュールではない。そのため、不正コピー防止のためのプロテクトをライブラリにかけることが困難である。したがって、現在のところ、ライブラリ等のリソースは、メーカ側がプログラム開発者の良識を信頼するというかたちで、プロテクトがかけられていないまま提供されているのが実情である。
【０００４】
しかし、ライブラリ等のリソースは、プログラムと同様、重要な開発成果であるため、なんらかのコピープロテクトがかけられるようにすることが望まれている。
【０００５】
そこで、本発明は、実行可能モジュール以外のオブジェクトの不正コピーを防止することを目的とする。
【０００６】
上記課題を解決するため、本発明は、
実行可能モジュールに含まれたプロテクトコードの矛盾により処理を終了させる手続きを含む、暗号化済みのプロテクト対象オブジェクトを記憶した記憶手段と、
前記記憶手段から前記暗号化済みプロテクト対象オブジェクトを読み出し、当該暗号化済みプロテクト対象オブジェクトを復号する復号手段と、
前記復号後のプロテクト対象オブジェクトに前記プロテクトコードを書込み、当該プロテクトコードを書き込んだ復号後のプロテクト対象オブジェクトと他のオブジェクトとを結合して、前記実行可能モジュールを作成するコード書込み手段と、
前記復号後のプロテクト対象オブジェクトを、前記他のオブジェクトとの結合の後に消去する削除手段と、
を有することを特徴とする情報処理装置を提供する。
【０００７】
【発明の実施の形態】
以下、添付の図面を参照しながら、本発明に係る実施の一形態について説明する。ただし、ここでは、ライブラリをプロテクト対象オブジェクトとする。
【０００８】
まず、図１により、プログラム開発側で使用される情報処理システムの概略ハードウエア構成について説明する。
【０００９】
プログラム開発側の情報処理システムは、情報処理装置１００、ユーザ(プログラム開発者)からのデータ入力を受け付ける入力装置(マウス、キーボード等)１２０、各種データを出力する出力装置(ディスプレイ装置等)１３０、等から構成されている。さらに、このシステムには、その他の装置が必要に応じて増設されることもある。
【００１０】
情報処理装置１００は、後述の実行可能プログラムファイル作成処理等を実行するＣＰＵ１０１、グラフィック描画処理等を実行するグラフィックス機構１０２、主記憶１０３、ＣＰＵ１０１と主記憶１０３との間をつないだプロセッサバス１０５、ＣＰＵ１０１等と主記憶１０３またはバス１０６との間のデータ転送を制御するメモリ／バス制御チップ１０４、グラフィックス機構１０２のグラフィックス制御チップとメモリ／バス制御チップ１０４との間をつないだＡＧＰ、ソフトウエア開発のために必要となる各種データ(シリアル番号等の識別情報が埋め込まれたフロントエンドツール、フロントエンドツールによって起動されるリンカおよびコンパイラ、フロントエンドツールとともに提供された暗号化ライブラリファイル等)が格納されたハードディスク１０６、ハードディスク１０６に対するデータ読込み／書込み処理を実行するハードディスク・ドライブ１０７、ハードディスクドライブ１０７がつながれた高速バス１０６、記憶媒体Ａに対するデータ読込み読書き／書込み処理を実行するドライブ１１２、入力装置１２０からのデータ転送を制御するコントローラ１１１、出力装置１３０へのデータ転送を制御するコントローラ１１３、各コントローラ１１１,１１３とドライブ１１２とがつながれた低速バス１０９、低速バス１０９と高速バス１０６との間をつないだブリッジ回路１１０、通信ポート(シリアルポート、パラレルポート等)、等を備えている。なお、ここで示した情報処理装置１００の内部構成は、ソフトウエア開発に使用されるものとしての一例である。
【００１１】
つぎに、この情報処理システムのハードディスク１０６内の格納データについて説明する。
【００１２】
コンパイラは、ＣＰＵに、指定ソースプログラムファイルに記述されたソースを、解析処理(字句解析、構文解析、意味解析)等によってオブジェクトとして翻訳編集させ、そのオブジェクトをオブジェクトファイルに格納させる処理が定義されたソフトウエアである。リンカは、ＣＰＵに、指定オブジェクトファイル群のそれぞれに記述されているオブジェクトを結合編集させることによって実行可能モジュールを組み立てさせ、その実行可能モジュールを実行可能プログラムファイルに格納させる処理が定義されたソフトウエアである。そして、本実施の形態に係るフロントエンドツールは、ＣＰＵに、コンパイラおよびリンカを起動させ、後述の実行可能プログラムファイル作成処理を実行させる処理が定義されたソフトウエアである。
【００１３】
暗号化ライブラリファイルＬ1 (以下、暗号化ＬｉｂファイルＬ1と呼ぶ)は、フロントエンドツールとともに、ユーザ(プログラム開発者)に提供される。例えば、暗号化ＬｉｂファイルＬ1が記録されたインストール用ＣＤ−ＲＯＭと、フロントエンドツールが記録されたインストール用フロッピィディスクとがワンセットとしてユーザに提供される。
【００１４】
この暗号化ＬｉｂファイルＬ1は、１以上のライブラリファイルＬ２(以下、ＬｉｂファイルＬ２と呼ぶ)を適当な暗号化処理で暗号化することによって作成されたものである。ユーザは、実行可能プログラムファイル作成時に、この暗号化ＬｉｂファイルＬ1をフロントエンドツールで復号化することによって、実行可能プログラムファイル作成に必要な１以上のＬｉｂファイルＬ2を得る。このように、ライブラリファイルを、暗号化された状態で提供し、それと共に提供されたフロントエンドツールによってその復号化させるようにしたのは、後述するように、フロントエンドツールを持たないユーザによるＬｉｂファイル不正使用を禁じるためである。
【００１５】
暗号化ＬｉｂファイルＬ1の復号により生成されるＬｉｂファイルＬ2には、グラフィック機能、イベント処理等、アプリケーションにおいて使用される基本的な関数等のオブジェクトが部品化されて格納されている。また、すべてのアプリケーションにおいて呼び出される初期化関数が含まれている、ＬｉｂファイルＬ2内のオブジェクトには、さらに、初期化関数において呼び出されるプロテクトコードチェック手続きと、オブジェクトファイルＭ2との結合編集前に第一プロテクトコードＣ1が格納される第一プロテクトコード格納変数とが定義されている。ここで、プロテクトコードチェック手続きには、第一プロテクトコード格納変数の格納データとプログラムファイル末尾の格納データとが、正規のプロテクトコードＣ1,Ｃ2が満たす関係を満たしているか否かをチェックし、その関係を満たしていなければ実行中プログラムを初期化段階で終了させる手続きが定義されている。
【００１６】
なお、本実施の形態では、初期化関数が含まれているＬｉｂファイルＬ2だけにプロテクトコードチェック関数および第一プロテクトコード格納変数を含ませているが、すべてのＬｉｂファイルにプロテクトコードチェック関数および第一プロテクト格納変数を含ませることにしてもよい。または、代表的なＬｉｂファイル、例えば、プロテクトをかける必要のあるＬｉｂファイルだけにプロテクトコードチェック関数および第一プロテクト格納変数を含ませることにしてもよい。
【００１７】
本実施の形態に係る情報処理システムは、このようなハードウエア構成およびハードディスク格納データ(フロントエンドツール、コンパイラ、リンカ等のソフトウエア、暗号化ライブラリファイル)によって、図２に示すような機能構成を実現する。具体的には、(１)フロントエンドツールの起動コマンドの入力を受け付ける入力受付部２００、(２)起動時にフロントエンドツール複製チェック処理を実行する起動時チェック処理部２０１、(３)開発成果(ソースプログラムファイルＭ1、オブジェクトファイルＭ2、実行可能プログラムファイルＭ3)を格納するための開発成果記憶部２０２、(４)ソースプログラムファイルＭ1からオブジェクトファイルＭ2を生成するコンパイル処理部２０３、(５)暗号化ＬｉｂファイルＬ1を記憶したライブラリ記憶部２０４、(６)暗号化ＬｉｂファイルＬ1を複号する復号化処理部２０５、(７)復号化処理部２０４の復号化処理によって生成されたＬｉｂファイルを一時ファイルＬ2として記憶する一時ファイル記憶部(ｔｍｐ)２０６、(８)ＬｉｂファイルＬ2とオブジェクトファイルＭ2との結合編集により実行可能プログラムファイルＭ3を生成するリンク処理部２０７、(９)リンク処理部２０７の結合編集処理後に一時ファイルＬ2を削除する一時ファイル削除処理部２０８、(１０)リンク処理部２０７の結合編集処理前のＬｉｂファイルＬ2とこのＬｉｂファイルＬ2から作成された実行可能プログラムファイルＭ3とにそれぞれプロテクトコードＣ1,Ｃ2を付与するコード付与処理部２０９、(１１)これら各処理部を制御する制御処理部２１０、が実現される。
【００１８】
ここで、コード付与処理部２０９は、(１２)互いに関連付けられた１組のプロテクトコードＣ1,Ｃ2(例えば、Ｃ1＝ｆ(Ｃ2)の関係を満たす１組のプロテクトコードＣ1,Ｃ2)を生成するコード生成処理部２０９ａ、(１３)コード生成処理部２０９ａが生成した１組のプロテクトコードＣ1,Ｃ2のうちの一方のコードＣ1(第一プロテクトコードと呼ぶ)をＬｉｂファイルＬ2内のコード格納変数に書き込むとともに他方のコードＣ2(第二プロテクトコードと呼ぶ)を実行可能プログラムファイルＭ3の末尾に付加するコード書込処理部２０９ｂ、からなっている。
【００１９】
つぎに、これら各機能構成部により実行される実行可能プログラムファイル作成処理について説明する。
【００２０】
プログラム開発者は、コーディングが終了したら、ソースプログラムファイルＭ1をハードディスク１０８の所定の領域(図２の開発成果記憶部２０２に相当)に格納してから、そのソースプログラムファイル名と必要なライブラリファイル名とを指定してフロントエンドツールを起動する。これにより、ＣＰＵが、フロントエンドツールに定義された処理を実行し、以下に示す実行可能プログラムファイル作成処理(図３のフローチャート参照)が実現される。
【００２１】
まず、フロントエンドツールの起動コマンドを受け付けた入力受付部２００は、制御処理部２１０に処理開始を指示する(Ｓ３００)。制御処理部２１０は、この指示を受け付けると、フロントエンドツール複製チェック処理の実行を起動時チェック処理部２０１に指示する。起動時チェック処理部２０１は、この指示にしたがって、以下に示す方法により、フロントエンドツールの不正使用をチェックする(Ｓ３０１)。
【００２２】
例えば、プログラム開発環境にＬＡＮが構築されており、ネットワーク上で起動中のプログラムの識別情報が重複していないか否かを監視するチェックプログラムがネットワーク上に常駐している場合であれば、起動時チェック処理部２０１は、フロントエンドツールに付与されている識別情報をネットワーク上に送信する。これに応じて、チェックプログラムは、それと同じ識別情報がネットワーク上に存在するか否かを返信する。フロントエンドツールがコピー品であれば、同じ識別情報が複数ネットワーク上に存在し、フロントエンドツールがコピー品でなければ、同じ識別情報が複数ネットワーク上に存在することはないため、フロントエンドツールの不正使用のチェックが可能となる。
【００２３】
また、フロントエンドツールにドングルが割り当てられている場合であれば、起動時チェック処理部２０１は、情報処理装置の通信ポートに装着されているドングルに認証メッセージを送る。このメッセージに応じて、ドングルは、自身に割り当てられた識別情報を返信する。認証されたユーザがフロントエンドツールを起動した場合であれば、ドングルから返信された識別情報が、フロントエンドツールの識別情報と一致し、認証されたユーザ以外のユーザがフロントエンドツールを起動した場合であれば、ドングルの装着がないために識別情報の返信がないか、または、ドングルから返信された識別情報がフロントエンドツールの識別情報と一致しないことになるため、フロントエンドツールの不正使用のチェックが可能となる。
【００２４】
このようなチェックの結果に基づき、起動時チェック処理部２０１は、フロントエンドツールの使用に不正(フロントエンドツールが複製品である、認証ユーザ以外のユーザによる使用である、等)があるか否かを判断する(Ｓ３０２)。
【００２５】
その結果、起動時チェック処理部２０１がフロントエンドツールの使用に不正があると判断した場合には、制御処理部２１０が、エラーメッセージを出力してから(Ｓ３０３)、処理を終了させる(Ｓ３０８)。これにより、フロントエンドツールの不正使用が禁止されるため、フロントエンドツールの不正使用者には、暗号化ＬｉｂファイルＬ１を復号することが困難となる。したがって、ＬｉｂファイルＬ２の不正使用も禁止される。
【００２６】
一方、起動時チェック処理部２０１がフロントエンドツールの使用に不正がないと判断した場合には、制御処理部２１０が、指定のソースプログラムファイルＭ1の機械語翻訳をコンパイル処理部２０３に指示する。コンパイル処理部２０３は、この指示に応じて、指定のソースプログラムファイルＭ1をアセンブリプログラムにコンパイルし、そのアセンブリプログラムをオブジェクトにアセンブルする。その後、コンパイル処理部２０３は、このとき生成したオブジェクトファイルＭ2を開発成果記憶部２０２に格納してから、制御処理部２１０に正常終了を報告する。
【００２７】
制御処理部２１０は、コンパイル処理部２０３から正常終了報告を受け付けると、暗号化ＬｉｂファイルＬ１の復号化を復号化処理部２０５に指示する。復号化処理部２０５は、この指示に応じて、ライブラリ記憶部２０４から暗号化ＬｉｂファイルＬ1を取り出し、それを復号化する。これにより１以上のＬｉｂファイルＬ２が生成されると、復号化処理部２０５は、そのＬｉｂファイルＬ2を、適当なファイル名の一時ファイルとして一時ファイル記憶部２０６に格納し、制御処理部２１０に正常終了を報告する。
【００２８】
制御処理部２１０は、復号化処理部２０５からの正常終了報告を受け付けると、ＬｉｂファイルＬ2に対するプロテクトコード付与をコード付与処理部２０９に指示する。この指示に応じて、コード付与処理部２０９では、以下の処理が実行される。まず、コード生成処理部２０９ａが、図４に示すように、乱数Ｃを発生し、この乱数Ｃを２つの加工方法Ｆ1,Ｆ2(例えば、乱数Ｃを入力データとする２つの関数等)でそれぞれ加工することによって２つのプロテクトコードＣ1,Ｃ2を生成する。ここで生成された２つのプロテクトコードＣ1,Ｃ2には、前述したように、予め定められた関係(ここでは、Ｃ1＝ｆ(Ｃ2)とする)がある。これらのプロテクトコードＣ1,Ｃ2は、さらに、コード生成処理部２０９ａによって、適当な暗号化方法でそれぞれ暗号化される。ついで、コード書込み処理部２０９ｂが、第二プロテクトコードＣ2を保持するとともに、所定のＬｉｂファイルＬ2内の第一プロテクトコード格納変数に第一プロテクトコードＣ1を格納する(Ｓ３０４)。
【００２９】
このようにして、ＬｉｂファイルＬ2に対するプロテクトコード付与が終了すると、制御処理部２１０は、リンク処理部２０７に、オブジェクトファイルＭ2と指定のＬｉｂファイルＬ2との結合編集を指示する。リンク処理部２０７は、この指示に応じて、オブジェクトファイルＭ2と指定のＬｉｂファイルＬ2とを結合し、実際の番地の埋込み等を行う。これにより実行可能プログラムファイルＭ3が組み立てられると、リンク処理部２０７は、その実行可能プログラムファイルＭ3を、適当な名前で開発成果記憶部２０２に格納してから、正常終了を制御処理部２１０に報告する(Ｓ３０５)。
【００３０】
制御処理部２１０は、リンク処理部２０７からの正常終了報告を受け付けると、一時ファイル削除を一時ファイル削除処理部２０８に指示する。この指示に応じて、一時ファイル削除処理部２０８は、すべてのＬｉｂファイルＬ2を一時ファイル記憶部２０６から削除する(Ｓ３０６)。
【００３１】
その後、制御処理部２１０は、実行可能プログラムファイルＬ3に対するプロテクトコード付与をコード付与処理部２０９に指示する。この指示に応じて、コード付与処理部２０９のコード書込み処理部２０９ｂが、保持中の第二プロテクトコードＣ2を実行可能プログラムファイルＭ3に付加してから、正常終了を制御処理部２１０に報告する(Ｓ３０７)。なお、ライセンシー管理(例えば、プログラム作成会社の識別等)のために、このときフロントエンドツールの識別情報も、、コード付与処理部２０９によって実行可能プログラムファイルＭ3に埋め込まれるようにしてもよい。
【００３２】
制御処理部２１０は、コード付与処理部２０９からの正常終了報告を受け付けると、処理を終了させる(Ｓ３０８)。なお、以上の処理により作成された実行可能プログラムファイルＭ3は、例えば、光ディスク等の記憶媒体に焼き付けられて市場に供給される(図９参照)。
【００３３】
本実施の形態に係る実行可能プログラムファイル作成処理によれば、以下に示すように、ＬｉｂファイルＬ２の不正使用が防止される。
(１)ハードディスクに格納されたＬｉｂファイルが暗号化されており、かつ、それを復号するフロントエンドツールの不正使用が、起動時チェック(図２のＳ３０１)によって禁止される。このため、フロントエンドツールの正当使用者以外のユーザによる、Ｌｉｂファイルの使用が防止される。
(２)図５に示すように、実行中のプログラムファイルに埋め込まれたプロテクトコードに矛盾があった場合にその処理を終了させるプロテクトコードチェック手続きＥをＬｉｂファイルＬ2にあらかじめ含めておき、フロントエンドツールの使用によってＬｉｂファイルＬ2とオブジェクトファイルＭ2とが結合された実行可能プログラムファイルＭ3にだけ、実行可能プログラムファイル作成処理の過程(Ｓ３０４、Ｓ３０７)において適正なプロテクトコードＣ1,Ｃ2が埋め込まれるようにすることによって、フロントエンドツールの正当使用により作成された実行可能プログラムファイルＭ3のみを実行可能とすることができる。すなわち、フロントエンドツールによらずＬｉｂファイルが結合された実行可能プログラムファイル、具体的には、不正なプロテクトコード(一方または両方)が埋め込まれた実行可能プログラムファイル、プロテクトコード(一方または両方)が埋め込まれていない実行可能プログラムファイル等の実行が、初期化段階において阻止される。このため、フロントエンドツールの正当使用者以外のユーザによる、Ｌｉｂファイルの使用が防止される。
(３) 図５に示すように、乱数Ｃから生成された１組のプロテクトコードＣ1,Ｃ2のうち、第一プロテクトコードＣ1だけをＬｉｂファイルＬ2に埋め込んでおき(Ｓ３０４)、その後、ＬｉｂファイルＬ2とオブジェクトファイルＭ2との結合編集(Ｓ３０５)が終了したら、実行可能プログラムファイルＭ2へ第二プロテクトコードＣ2を埋め込む前にＬｉｂファイルＬ2を消去(Ｓ３０６)してしまうため、使用済みＬｉｂファイルＬ2の不正利用が防止される。すなわち、一方のプロテクトコードＣ1が埋め込まれた使用済みＬｉｂファイルＬ2を消去前に取り出すことができたとしても、その段階(Ｓ３０４〜Ｓ３０６)では、乱数Ｃから生成された他方のプロテクトコードＣ2の取り出しが不可能であるから、その使用済みＬｉｂファイルＬ2に埋め込まれている第一プロテクトコードＣ1と矛盾しない第二プロテクトコードＣ2を知ることは困難である。このため、消去前に取り出した使用済みＬｉｂファイルＬ2とオブジェクトファイルとを結合編集したとしても、使用済みＬｉｂファイルＬ2に埋込済みの第一プロテクトコードと適正な関係を有する第二プロテクトコードを実行可能プログラムファイルに埋め込むことは困難である。したがって、使用済みＬｉｂファイルの不正使用が防止される。
(４)最終的に作成された実行可能プログラムファイルＭ3の解析によって、それに埋め込まれた１組のプロテクトコードＣ1,Ｃ2を知ってから、つぎのフロントエンドツール起動時に使用済みＬｉｂファイルＬ2を消去前に取り出したとしても、プロテクトコードＣ1,Ｃ2は、毎回、乱数から生成されるため、消去前に取り出した使用済みＬｉｂファイルＬ2に埋め込まれている第一プロテクトコードＣ1に対応する第二プロテクトコードは、実行可能プログラムファイルＭ3の解析によって知った第二プロテクトコードＣ2とは必ずしも一致しない。このため、最終的に作成された実行可能プログラムファイルＭ3の解析によっても、適正な関係を有する１組のプロテクトコードを得ることは困難である。したがって、消去前に取り出した使用済みＬｉｂファイルＬ2とオブジェクトファイルとを結合編集したとしても、使用済みＬｉｂファイルＬ2に埋込済みの第一プロテクトコードと適正な関係を有する第二プロテクトコードを実行可能プログラムファイルに埋め込むことは困難である。このため、使用済みＬｉｂファイルの不正使用が防止される。
【００３４】
以上の４つの防止策によってＬｉｂファイル不正使用が防止されるが、ライブラリバージョンアップのたびに、Ｌｉｂファイルの暗号化方法とプロテクトコードチェック手続きの内容とをそれぞれ変更するようにすれば、Ｌｉｂファイルの不正使用防止が強化される。なお、このようにする場合には、Ｌｉｂファイル複合方法および乱数加工方法が変更されたフロントエンドツールが、新バージョンの暗号化Ｌｉｂファイルとともにリリースされる必要がある。
【００３５】
ところで、以上においては、ＬｉｂファイルＬ2内で定義された第一プロテクトコード格納変数に第一プロテクトコードＣ1を格納し、実行可能プログラムファイルＭ3の末尾に第二プロテクトコードＣ2を付加することとしているが、必ずしも、このようにする必要はない。例えば、プロテクトコード付与処理部が、図６に示すように、ＬｉｂファイルＬ2の末尾に、ダミーデータと第一プロテクトコードＣ1とを含んだ第一ダミーエリア▲１▼を付加し、実行可能プログラムファイルＭ3の末尾に、ダミーデータと第二プロテクトコードＣ2とを含んだ第二ダミーエリア▲２▼を付加するようにしてもよい。そして、２つのダミーエリア▲１▼▲２▼の合計データ量を変えないように、各ダミーエリア▲１▼▲２▼に含まれるダミーデータのデータ量をランダムに変化させるようにすれば、１つの実行可能プログラムファイルＭ3を作成するごとに、その内部におけるプロテクトコードＣ1,Ｃ2のアドレスが変化するため、プロテクトコードＣ1,Ｃ2の間にある関係の解析を困難にすることができる。
【００３６】
また、以上においては、プロテクトコードチェック手続きが組み込まれたＬｉｂファイルに第一プロテクトコードをリンク前に埋め込み、実行可能プログラムファイルが完成したときに、さらに、この実行可能プログラムファイルに第二プロテクトコードを埋め込むこととしているが、かならずしも、このようにする必要はない。例えば、プロテクトコードチェック手続きが組み込まれたＬｉｂファイルにはプロテクトコードを組み込まず、実行可能プログラムファイルが完成したときに、この実行可能プログラムファイルに、プロテクトコードチェック手続きによって正当性をチェック可能なプロテクトコード(例えば、互いに関連付けられた複数のプロテクトコード)を埋め込むようにしてもよい。
【００３７】
つぎに、本実施の形態に係るプログラムファイル作成処理により作成された実行可能プログラムファイルＭ3を実行することができるシステムの概略ハードウエア構成について説明する。ただし、ここでは、システムの一例として、エンタテインメント装置を挙げることとする。
【００３８】
図７は、本実施の形態に係るエンタテインメント装置７００およびその周辺機器の外観図であり、図８は、本実施の形態に係るエンタテインメント装置７００の概略ハードウエア構成図である。
【００３９】
本実施の形態に係るエンタテインメント装置７００は、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等の光ディスク９００からゲームプログラム(前述のプログラムファイル作成処理により作成された実行可能プログラムファイルＭ3等)を読み出し、そのゲームプログラムにしたがってゲームを実行するものである。ここで、「ゲームの実行」とは、エンタテインメント装置７００が、ユーザ(以下、ゲームプレイヤと呼ぶ)からの指示にしたがって、表示装置(ＣＲＴ、ＬＣＤ、プロジェクション装置等)上の表示映像およびオーディオ装置からの音声をゲームストーリ等にあわせて変化させることをいう。
【００４０】
図７に示すように、エンタテインメント装置７００の筐体前面部には、ゲームプレイヤがゲームを実行させるために必要となる各種の操作部が設けられている。このような操作部の具体例としては、ゲームプログラムが格納された光ディスク９００が装着されるディスク装着部７０１、ディスク装着部７０１からトレイを引き出すためのトレイ操作ボタン７０１Ａ、ゲームプレイヤからの入力を受け付ける各種入力受付け部(ボタン７５３Ａ,７５３Ｂ,７５４〜７５８、方向キー７５２、スティック７５１Ａ,７５１Ｂ等)を有するコントローラ７５０が接続される複数(ここでは２つ)のコントローラ接続部７０２Ａ,７０２Ｂ、実行中のゲームをリセットするためのリセットボタン７０３、ゲームデータ等を記録させるためのメモリカード７３０が装着される複数(ここでは２つ)のメモリカード装着部７０４Ａ,７０４Ｂ、等が挙げられる。ここでコントローラ接続部７０２Ａ,７０２Ｂが複数設けられているのは、各コントローラ接続部７０２Ａ,７０２Ｂにそれぞれコントローラを接続することによって、エンタテインメント装置７００が、複数のゲームプレイヤからの指示を受け付けることができるようにするためである。
【００４１】
また、エンタテインメント装置７００の筐体背面部(前面の反対側)には、電源オンオフスイッチ(不図示)、表示装置等が接続されるＡＶ端子(不図示)が設けられている。
【００４２】
そして、このエンタテインメント装置７００の内部には、図８に示すように、装置全体を制御するメインＣＰＵ８００、ＡＶ端子(不図示)から出力されるビデオ信号を生成するグラフィックプロセッサ(ＧＰ)８０１、コントローラ接続部７０２Ａ,７０２Ｂに接続されたコントローラ７５０およびメモリカード接続部７０４Ａ,７０４Ｂに接続されたメモリカード７３０とのデータ転送を制御するＩ／Ｏプロセッサ(ＩＯＰ)８０２、ディスク装着部７０１に装着された光ディスク９００からのデータ読出しを制御する光ディスク制御部８０３、ＡＶ端子(不図示)から出力されるオーディオ信号を生成するサウンド再生処理プロセッサ(ＳＰＵ)８０４、サウンドバッファ８０５、メインＣＰＵ８００およびＩＯＰ８０２が実行する各オペレーティングシステムプログラムが格納されたＯＳ−ＲＯＭ８０６、ＩＯＰのワークエリアとして用いられるＩＯＰメモリ８０７、メインＣＰＵ８００のワークエリアおよびバッファとして用いられるメインメモリ８０８、これら各部の間をつないだバス８０９等が搭載されている。
【００４３】
このエンタテインメント装置７００に電源が投入されると、２種類のオペレーティングシステムプログラム(メインＣＰＵ用、ＩＯＰ用)がそれぞれＯＳ−ＲＯＭ８０６から読みだされ、それらがメインＣＰＵ８００とＩＯＰ８０２とによってそれぞれ起動される。これにより、オペレーティングシステムによる、装置各部の統合制御が開始され、エンタテインメント装置としての各種機能がゲームプレイヤに提供される。具体的には、光ディスクからの実行可能プログラムファイル読込みおよびその実行、コントローラを介したゲームプレイヤからの指示受付け、ゲームプレイヤの指示に応じた映像表示および効果音・楽音出力等が可能な環境が提供される。
【００４４】
このような環境において、図９に示した光ディスク９００から、上述の実行可能プログラムファイル作成処理によって作成されたゲーム用実行可能プログラムファイルＭ3が読み込まれると、そのゲーム用実行可能プログラムファイルＭ3に定義された処理を実行するための機能構成が、メインＣＰＵ８００によってプロセスとして実現される。すなわち、図１０に示すように、エンタテインメント装置７００は、(１)実行可能プログラムファイルＭ3の所定領域(第一プログラム格納変数)の格納データ(実行可能プログラムファイルＭ3がＬｉｂファイルの正当使用により生成されたものであれば、正当な第一プロテクトコードＣ1)が格納された第一プロテクトコード格納部１０００、(２)実行可能プログラムファイルＭ3の末尾領域の格納データ(実行可能プログラムファイルＭ3がＬｉｂファイルの正当使用により生成されたものであれば、正当な第二プロテクトコードＣ2)が格納された第二プロテクトコード格納部１００１、(３)起動時にプロテクトコードチェック手続きを実行するプロテクトコードチェック処理部１００２、(４)プロテクトコードチェック処理部１００２からの開始指示に応じて、ゲームを実行するゲーム実行処理部１００３、(５)コントローラからの入力信号をゲーム実行処理部１００３に渡す入力データ受付処理部１００４、(６)ゲーム実行処理部１００３の指示にしたがって、効果音等のオーディオ信号を生成する音声制御処理部１００５、(７)ゲーム処理部１００３の指示にしたがって、ゲーム画面映像のビデオ信号を生成する映像制御処理部１００６、が実現される。ここで、プロテクトコードチェック処理部１００２には、(８)第一プロテクトコードＣ1および第二プロテクトコードＣ2を復号するコード復号処理部１００２ａ、(９)復号後の２つのプロテクトコードＣ1,Ｃ2の整合性をチェックするコードマッチング処理部１００２ｂ、(１０)与えられた終了指示にしたがって、処理を終了させる終了処理部１００２ｄ、(１１)コードマッチング処理部１００２ｂのチェック結果に応じて、終了処理部１００２ｄに終了指示またはゲーム処理部に開始指示を与える制御処理部１００２ｃ、が含まれている。
【００４５】
つぎに、図１１により、これらの機能構成部によって実行される処理について説明する。
【００４６】
図９の光ディスク９００から読み込まれた実行可能プログラムファイルＭ3が起動されると(Ｓ１１００)、図１０の機能構成部が以下の処理を開始する。
【００４７】
ゲームの開始前に、実行可能プログラムファイルＭ3に組み込まれたＬｉｂファイルＬ2が正当使用によるものか否かを判断するため、以下の自己診断処理がプロテクトコードチェック処理部１００２によって実行される。
【００４８】
まず、制御処理部１００２ｃが、コードの復号をコード復号処理部１００２ａに指示する。この指示に応じて、コード復号処理部１００２ａは、第一プロテクトコード格納部１０００の格納データと、第二プログラムコード格納部１００１の格納データとを取り出し、それらをそれぞれ復号する。
【００４９】
フロントエンドツールの正当使用により作成された実行可能プログラムファイルＭ3であれば、１組のプロテクトコード生成に用いられた関係(ここではＣ1＝Ｆ(Ｃ2))を満たすデータＣ1,Ｃ2が、このときの復号処理によって得られるはずである。そこで、コードマッチング処理部１００２ｂは、ここで得られた２つのデータがその関係を満たすか否かを診断し、その診断結果を制御処理部１１０２ｃに通知する(Ｓ１１０１)。
【００５０】
制御処理部１１０２ｃは、実行可能プログラムファイルＭ3に組み込まれたＬｉｂファイルＬ2が正当使用によるものか否かを、コードマッチング処理部１００２ｂの診断結果に基づき判断する(Ｓ１１０２)。具体的には、１組のプロテクトコード生成に用いた関係を満たさないという診断結果が通知された場合には、プロテクトコードに矛盾ありと判断し、１組のプロテクトコード生成に用いた関係を満たすという診断結果が通知された場合には、プロテクトコードに矛盾なしと判断する。
【００５１】
以上の自己診断処理によってプロテクトコードに矛盾ありと判断した場合には、制御処理部１１０２ｃは、その旨を表すエラーメッセージを出力し(Ｓ１００３)、終了処理部１００２ｄに終了指示を与える。この指示に応じて、終了処理部１００２ｄは、所定の終了処理を実行し、プログラムを終了させる(Ｓ１１０６)。
【００５２】
一方、プロテクトコードに矛盾なしと判断した場合には、制御処理部１００２ｄは、ゲーム実行処理部１００３に開始指示を与える。この指示に応じて、ゲーム実行処理部１００３は、ゲーム処理を開始する(Ｓ１１０４)。
【００５３】
以後、コントローラを介して送られてくる、ゲームプレイヤからの指示は、入力データ受付処理部１００４からゲーム実行処理部１００３に渡される。そして、ゲーム実行処理部１００３は、入力データ受付処理部１００４から渡された指示に応じて、表示装置上の表示映像およびオーディオ装置からの音声を変化させるべく、音声制御処理部１００５と映像制御処理部１００６とを制御する。この間、ゲーム実行処理部１００３は、ゲームオーバーの条件を満たしたか否かの判断(Ｓ１１０５)を定期的に行ない、ゲームオーバーと判断したら、ゲームを終了させる(Ｓ１１０６)。
【００５４】
このように、本実施の形態に係るエンタテインメント装置によれば、読み込んだゲーム用実行可能プログラムファイルに正当なプロテクトコードが埋め込まれている場合にだけゲームを開始させ、読み込んだゲーム用実行可能プログラムファイルに正当なプロテクトコードが埋め込まれていなければ、ゲームを終了させる。したがって、フロントエンドツールの正当使用によってゲーム用実行可能プログラムファイルが作成されていなけば、エンタテインメント装置でゲームをすることができない。このため、フロントエンドツールの正当使用者以外のユーザによるＬｉｂファイル使用を止することできる。
【００５５】
なお、以上においては、上述の実行可能プログラムファイル作成処理により作成された実行可能プログラムファイルを実行するための装置としてエンタテインメント装置を例に挙げたが、上述の実行可能プログラムファイル作成処理により作成された実行可能プログラムファイルを実行するための装置は、必ずしもエンタテインメント装置である必要はない。例えば、プログラムの実行能力のある、一般的な電子計算機であってもよい。もちろん、実行可能プログラムファイルも、ゲーム以外の処理を実行させるものであってもよい。
【００５６】
また、ここでは、記憶媒体から実行可能プログラムファイルが実行装置に読み込まれるようにしているが、ネットワーク等の伝送媒体によって実行可能プログラムファイルが伝送され、それが実行装置のハードディスクに格納されるようにしてもよい。
【００５７】
また、以上においては、ライブラリファイルをプロテクト対象としているが、その他のファイル(例えば、画像データ等が格納されたファイル等の、実行可能ファイル以外のファイル)をプロテクト対象としてもよい。
【００５８】
【発明の効果】
本発明によれば、ライブラリ等、実行可能ファイル以外のファイルの不正コピーを防止することができる。
【図面の簡単な説明】
【図１】本発明の実施の一形態に係る情報処理システムのハードウエア構成図である。
【図２】本発明の実施の一形態に係る情報処理システムの機能構成図である。
【図３】本発明の実施の一形態に係る実行可能プログラム作成処理のフローチャートである。
【図４】本発明の実施の一形態に係る１組のプロテクトコードの生成方法を概念的に示した図である。
【図５】本発明の実施の一形態に係る実施可能プログラムファイルが作成されるまでの処理を概念的に示した図である。
【図６】本発明の実施の一形態に係る実施可能プログラムファイルのデータ構造を概念的に示した図である。
【図７】本発明の実施の一形態に係るエンタテインメント装置およびその周辺機器の外観図である。
【図８】本発明の実施の一形態に係るエンタテインメント装置のハードウエア構成図である。
【図９】本発明の実施の一形態に係る光ディスクの格納データのデータ構造を概念的に示した図である。
【図１０】本発明の実施の一形態に係るエンタテインメント装置の機能構成図である。
【図１１】本発明の実施の一形態に係る実行可能プログラム作成処理のフローチャートである。
【符号の説明】
Ｌ1…暗号化ライブラリファイル          Ｌ2…ライブラリファイル
Ｍ1…ソースファイル                    Ｍ2…オブジェクトファイル
Ｍ3…実行可能ファイル
１００…情報処理装置                  １０１…ＣＰＵ
１０２…グラフィックス機構            １０３…主記憶
１０４…メモリバス制御チップ          １０５,１０６,１０９…バス
１０７…ハードディスクドライブ        １０８…ハードディスク
１１０…ブリッジ回路                  １１１…入力装置コントローラ
１１２…ＣＤ−ＲＯＭドライブ          １１３…出力装置コントローラ
１２０…入力装置                      １３０…出力装置
２００…入力受付部                    ２０１…起動時チェック処理部
２０２…開発成果記憶部                ２０３…コンパイル処理部
２０４…ライブラリ記憶部              ２０５…復号化処理部
２０６…一時ファイル記憶部            ２０７…リンク処理部
２０８…一時ファイル削除処理部        ２０９…コード付与処理部
２１０…制御処理部
７００…エンタテインメント装置        ８００…メインＣＰＵ
８０１…グラフィックプロセッサ        ８０２…Ｉ／Ｏプロセッサ
８０３…光ディスク制御部              ８０４…サウンド再生処理プロセッサ
８０５…サウンドバッファ              ８０６…ＯＳ−ＲＯＭ
８０７…ＩＯＰメモリ                  ８０８…メインメモリ
８０９…バス
１０００…第一プロテクトコード格納部
１００１…第二プロテクトコード格納部
１００２…プロテクトコードチェック処理部
１００３…ゲーム実行処理部
【図１】
0003712366.tif 000002
【図２】
0003712366.tif 000003
【図３】
0003712366.tif 000004
【図４】
0003712366.tif 000005
【図５】
0003712366.tif 000006
【図６】
0003712366.tif 000007
【図７】
0003712366.tif 000008
【図８】
0003712366.tif 000009
【図９】
0003712366.tif 000010
【図１０】
0003712366.tif 000011
【図１１】
0003712366.tif 000012