(57)【要約】本発明は、実行可能イメージを暗号化し実行する方法に関し、該方法は、前記実行可能イメージの暗号化すべきセクションに、ソースファイル内のコマンドを用いてフラグを付け、前記実行可能イメージをコンパイルしてオブジェクトファイルを生成するステップと、前記実行可能イメージの１つ以上をリンカを用いてリンクして最終実行可能イメージを生成するステップと、前記リンクされた実行可能イメージをポストリンカ暗号化エンジンに通して、再配置フィックスアップパッチテーブル及び暗号化のためにフラグが付けられた前記実行可能イメージのセクションを暗号化して、ロード時間に前記実行可能イメージを復号化し、再配置し、実行できるようにするステップとを具える。
2009512087.tif 000002
【特許請求の範囲】
【請求項１】
実行可能イメージを暗号化する方法であって、該方法は、前記実行可能イメージの暗号化すべきセクションに、ソースファイル内のコマンドを用いてフラグを付け、前記実行可能イメージをコンパイルしてオブジェクトファイルを生成するステップと、前記実行可能イメージの１つ以上をリンカを用いてリンクして最終実行可能イメージを生成するステップと、前記リンクされた実行可能イメージをポストリンカ暗号化エンジンに通して、再配置フィックスアップパッチテーブル及び暗号化のためにフラグが付けられた前記実行可能イメージのセクションを暗号化して、ロード時間に前記実行可能イメージを復号化し、再配置し、実行できるようにするフィックスアッププロセッシングを行うステップとを具えることを特徴とする符号化方法。
【請求項２】
前記フィックスアップテーブルを復号化するステップは、前記フィックスアッププロセッシングステップと併合されることを特徴とする請求項１記載の符号化方法。
【請求項３】
前記暗号化すべきセクションにフラグを付けるステップは、コンパイラ又はリンカディレクティブを用い、前記セクションにソースレベル段で名前を付けて、リンカが前記フラグ付きセクションをリンカ又はポストリンカ段で暗号化できるようにすることを特徴とする請求項１記載の符号化方法。
【請求項４】
前記セクションにフラグを付けるステップは、プログラム実行可能イメージのヘッダセクションにフラグを付けるステップを具えることを特徴とする請求項１記載の符号化方法。
【請求項５】
前記ヘッダセクションはプログラム実行可能イメージ用のフィックスアップテーブルを含むことを特徴とする請求項４記載の符号化方法。
【請求項６】
前記再配置フィックスアップテーブルは、前記フィックスアップテーブルを復号化しなければ前記実行可能イメージが再配置できないように、暗号化することを特徴とする請求項１記載の符号化方法。
【請求項７】
暗号化エンジンが、ソースファイルに含まれるコマンドを用いて、プログラム実行可能イメージのフラグ付きセクションを暗号化することを特徴とする請求項１記載の符号化方法。
【請求項８】
ソースコードのセクションにフラグを付ける前記ステップは、実行可能コードセクション、データセクション及び／又はブロック記憶セグメントセクションの１つ以上にフラグを付けることを特徴とする請求項１−７の何れかに記載の符号化方法。
【請求項９】
前記フラグ付けステップは、ソースコードに含まれるコマンドを用いて又はリンカ段でリンカフラグを用いて実施されることを特徴とする請求項１−８の何れかに記載の符号化方法。
【請求項１０】
ランタイムイメージを形成するために実行可能イメージの暗号化されたセクションが復号化エンジンで復号化されて実行可能イメージを生成することを特徴とする請求項１記載の符号化方法。
【請求項１１】
前記復号化エンジンは、ロード時間に、暗号化されたフィックスアップテーブル及び実行可能コードセクションを復号化する復号化メカニズムを用いることを特徴とする請求項１記載の符号化方法。
【請求項１２】
ローダが実行可能イメージを処理して最終実行可能イメージをランタイムで生成することを特徴とする請求項９又は１０記載の符号化方法。
【請求項１３】
マイクロプロセッサに請求項１−１２の何れかに記載の方法を実行させる命令を備えるコンピュータ実行可能プロセッサ。
【請求項１４】
請求項１３に記載のコンピュータ実行可能プログラムが格納されたコンピュータ読取り可能媒体。
【請求項１５】
実行可能イメージを暗号化するシステムであって、該システムは、
前記実行可能イメージの暗号化すべきセクションにフラグを付け、前記実行可能イメージをコンパイルしてオブジェクトファイルを生成するように構成されたコンパイラと、
前記オブジェクトファイルの１つ以上をリンクして最終実行可能イメージを生成するように構成され、且つ更に前記リンクされた実行可能イメージをポストリンカ暗号化エンジンに通すことによってフィックスアップテーブルを処理するように構成されたリンカとを具え、
前記ポストリンカ暗号化エンジンが、ロード時間に前記実行可能イメージが復号化され、再配置され、実行されるように、再配置フィックスアップパッチテーブル及び暗号化のためにフラグが付けられた前記実行可能イメージのセクションを暗号化するように構成されていることを特徴とする暗号化システム。
【請求項１６】
前記復号化手段は、フィックスアップテーブルを処理すると同時にフィックスアップテーブルを復号化するように構成されていることを特徴とする請求項１５記載の暗号化システム。
【請求項１７】
コンパイラ又はリンカディレクティブが、暗号化すべきセクションにフラグを付けるように構成され、更にリンカが前記フラグ付きセクションをリンク又はポストリンク段で暗号化できるように前記セクションにソースレベル段で名前の付けるように構成されていることを特徴とする請求項１５記載の暗号化システム。
【請求項１８】
前記フラグが付けられたセクションは、プログラム実行可能イメージのヘッダセクションにフラグが付けられていることを特徴とする請求項１５記載の符号化システム。
【請求項１９】
前記ヘッダセクションはプログラム実行可能イメージ用のフィックスアップテーブルを含むことを特徴とする請求項１８記載の符号化システム。
【請求項２０】
符号化エンジンが、ソースファイルに含まれるコマンドを用いて、又はリンク段でリンカフラグを用いて、プログラム実行可能イメージのフラグ付きセクションを暗号化するよう構成されていることを特徴とする請求項１５記載の符号化システム。
【請求項２１】
ソースコードの前記フラグ付きセクションは、実行可能コードセクション、データセクション及び／又はブロック記憶セグメントセクションの１つ以上を含むことを特徴とする請求項１５−２０の何れかに記載の符号化システム。
【請求項２２】
ソースコードに含まれるコマンドがセクションにフラグを付けるよう構成されていることを特徴とする請求項１５−２１の何れかに記載の符号化システム。
【請求項２３】
ランタイムイメージを形成するために、実行可能イメージの暗号化されたセクションが復号化エンジンで復号化されて実行可能イメージを生成することを特徴とする請求項１５記載の符号化システム。
【請求項２４】
前記復号化エンジンは、復号化メカニズムを用いて、ロード時間に、暗号化されたフィックスアップテーブル及び実行可能コードセクションを復号化するよう構成されていることを特徴とする請求項１５記載の符号化システム。
【請求項２５】
ローダが実行可能イメージを処理して最終実行可能イメージをランタイムで生成することを特徴とする請求項２３又は２４記載の符号化システム。
【請求項２６】
前記セクションが、プログラムプログラムセクション、データセクション及びブロック記憶セグメントセクションを含むことを特徴とする請求項１５，１７−２２の何れかに記載の符号化システム。
【請求項２７】
前記符号化エンジンが、再配置フィックスアップテーブルを復号化しなければ実行可能イメージが前記再配置できないように、再配置フィックスアップテーブルを暗号化するよう構成されていることを特徴とする請求項１５記載の符号化システム。
【請求項２８】
前記暗号化エンジンがポストリンカ暗号化エンジンであることを特徴とする請求項１５記載の符号化システム。
【請求項２９】
請求項１５−２８の何れかに記載のシステムを含むマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行可能イメージを暗号化し実行する方法及びシステムに関する。特に、本発明は実行可能イメージコンテンツを暗号化しローディングする方法及びシステムに関する。
【背景技術】
【０００２】
ソフトウェアの開発は多大の時間と費用を必要とし、不正コピーや不正共有のようなソフトウェアの不正使用が最終的にソフトウェア開発者の利益損失になっている。不正ソフトウェアの例には、必要な許可を得ないで第３者が複製したコピー又はピアツーピアネットワークを介する不正コピーの共有がある。このようなソフトウェアは、同様にコピー保護を必要とする実行可能イメージやサウンドファイルを含むことができる。
【０００３】
このような保護を実現するために、暗号化手段を用いてソフトウェアの不正コピーの実行を防止することが周知である。このような手段は、一般に、ソフトウェアの完全な実行を防止できるようにソフトウェアの１つ以上の実行可能部分を暗号化すること又はソフトウェアの次善の実行がなされるようにソフトウェアの１つ以上の個別機能をディセーブルすることを含む。一例として、実行可能プログラムコンテンツを実行前に暗号化して、該コンテンツに含まれるアルゴリズムの実行を保護することが周知である。このような実行可能コンテンツの例は、イメージ及びサウンドファイルを圧縮するのに一般に使用されているＪＰＥＧ，ＭＰ３及びＷＭＡのようなプログラムファイルに含まれるコーデックを含むことができる。コーデックは（多くの場合伝送、記憶又は暗号化のために）データを符号化された形に変換すること及び視聴のために又は特定のオペレーションにふさわしいフォーマットで操作するために該データを復元又は復号化することができる。コーデックはビデオ会議やストリーミングメディアソリューションにしばしば使用されている。
【０００４】
一例として、米国特許出願公開第２００４／０１２５９５４号明細書には、ソフトウェアプログラムにより必要とされるデータエレメントを暗号化された形で維持するデータ暗号化／復号化システムが開示されている。ソフトウェアプロデューサが、実行可能プログラム内のクリティカルデータエレメントと呼ばれる１以上のプログラムデータセクション及び／又はテキストセクションを選択し暗号化する。ソフトウェアを実行するためには、ユーザはライセンスキーを入手してプログラムで使用されるクリティカルデータエレメントを復号化する必要がある。種々のライセンスキーを付与することにより、種々のライセンスオプション、即ち付与されたライセンスキーにより可能化される機能に依存してプログラムの機能レベルを制御することをソフトウェアプロデューサ又はサプライヤに可能とすることができる。
【０００５】
しかし、米国特許出願公開第２００４／０１２５９５４号明細書に提案された解決手段は、プログラムイメージが実行される前に実行可能イメージを復号化することが貴重なプロセッササイクルを消費し、応答の遅いシステムを生じるために、低い処理速度になる。更に、米国特許出願公開第２００４／０１２５９５４号明細書のクリティカルデータセクションは、プログラムコード自体、例えばプログラムデータセクション及びテキストセクションに適用され、プログラムローダにプログラムをメモリの所望位置に再配置させるフィックスアップテーブルのような必要な情報を含むプログラムヘッダに適用されない。
【０００６】
このような暗号化技術を組み込みシステムとして知られている専用コンピュータシステムに使用することは周知である。組み込みシステムは予め決められたタスクを実行するように構成されたマイクロプロセッサ又はマイクロコンピュータを含む。コンシューマエレクトロニクスに使用されるこれらのシステムのような組込みシステムにおいては、そのコンポーネントは一般に小形で安価なものである必要がある。オンチップメモリマネジメントユニット（ＭＭＵ）ハードウェアを有するマイクロプロセッサは複雑且つ高価になる傾向があり、このような複雑なハードウェアを必要としない組み込みシステムには一般に使用されない。プロセッサ内において、ＭＭＵがシステムリソースを望ましくないアクセスから保護するとともに、仮想メモリを処理する能力も与える責任を持つ。組み込みシステムにおけるこのようなコンポーネントコストを低減するために、いわゆる「ＭＭＵ無し」プロセッサを用いることが周知であり、その一例はフィリップス社のトライメディア（ＴｒｉＭｅｄｉａ）メディアプロセッサである。しかし、実行可能ファイルがＭＭＵ無しプロセッサにロードされるとき、実行可能ファイルはそれが実行可能になる前に所望のメモリ位置に再配置されなければならない。
【０００７】
実行可能イメージの再配置は、再配置フィックスアップテーブルを用いてイメージをメモリ内の新アドレスに再配置することにより達成される。このフィックスアップテーブルはパッチテーブルとしても知られ、実行可能イメージをメモリ内の所望の位置で実行できるように変更することができる。この処理は、一般に、フィックスアップデータを暗号化し、暗号化されたフィックスアップデータを再配置し、フィックスアップデータを復号化して最終のフィックスアップされた実行可能イメージを生成する個別のステップを含む。しかし、フィックスアップ又はパッチプロセスは貴重なプロセッササイクルを消費し、プロセッサの低速動作をまねく。実行可能コードを別個の処理として復号化及び再配置するプロセスは比較的時間を要するプロセスになる。従って、これらの処理を処理数の低減によりもっと短時間に完了させればもっと高速のローディング及びもっと高速に応答するシステムを得ることができる。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明の目的は、実行可能イメージを高速に効率的に暗号化し実行する方法及びシステムであって、既知の方法及びシステムより優れた利点を有する方法及びシステムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明の一つの態様によれば、実行可能イメージを暗号化する方法が提供され、この方法は、前記実行可能イメージの暗号化すべきセクションに、ソースフィル内のコマンドを用いてフラグを付け、前記実行可能イメージをコンパイルしてオブジェクトファイルを生成するステップと、前記実行可能イメージの１つ以上をリンカを用いてリンクして最終実行可能イメージを生成するステップと、前記リンクされた実行可能イメージをポストリンカ暗号化エンジンに通して、再配置フィックスアップパッチテーブル及び暗号化のためにフラグが付けられた前記実行可能イメージのセクションを暗号化することによってロード時間に前記実行可能イメージを復号化し、再配置し、実行することができるようにするフィックスアッププロセスとを具えることを特徴とする。
【００１０】
特に、本発明は、実行可能ファイルの違法使用を、上述した欠点の1つ以上が克服され特に実行可能ファイルの違法コピーが防止されるように、防止しようとするものである。
【００１１】
有利なことに、本発明によれば、保護を必要とするコードのみが暗号化のためにマークされ、重要でないコードは暗号化されないままにできる。暗号化を必要とするコードのみを選択することによって、実行可能コンテンツをより高速にロードできるとともに、費用効率がよく実現が簡単なより高速応答のシステムが提供される。
【００１２】
フィックスアップテーブルを復号化するステップは、復号化ステップとフィックスアッププロセスとを組み合わせるのが好ましい。このようなステップの組み合わせは、有利なことに、メモリスペースの効率的使用を提供するとともに高速応答システムも提供する。
【００１３】
暗号化すべきセクションにフラグを付けるステップは、コンパイラ又はリンカディレクティブを用い且つ前記セクションにソースレベル段で名前を付けてリンカが前記セクションをリンカ又はポストリンカ段で暗号化できるようにするのが好ましい。
【００１４】
更に、セクションリネームメカニズムを用いることによって、オブジェクトコードのセクションを、そのセクションを暗号化すべきか否かマークすることができる。有利なことに、これもメモリスペースの効率的使用を提供するとともに高速応答システムも提供するのに役立つ。
【００１５】
本発明の他の態様によれば、実行可能イメージを暗号化するシステムが提供され、このシステムは、
前記実行可能イメージの暗号化すべきセクションにフラグを付け、前記実行可能イメージをコンパイルしてオブジェクトファイルを生成するように構成されたコンパイラと、
前記オブジェクトファイルの１つ以上をリンクして最終実行可能イメージを生成するように構成され、更に前記リンクされた実行可能イメージをポストリンカ暗号化エンジンに通すことによってフィックスアップテーブルを処理するように構成されたリンカとを具え、
前記ポストリンカ暗号化エンジンが、ロード時間に前記実行可能イメージを復号化し、再配置し、実行することができるように、再配置フィックスアップパッチテーブル及び暗号化のためにフラグが付けられた前記実行可能イメージのセクションを暗号化するように構成されていることを特徴とする。
【００１６】
特に、本発明は、実行可能ファイルの違法使用を、上述した欠点の1つ以上が克服され特に実行可能ファイルの違法コピーが防止されるように、防止しようとするものである。
【００１７】
有利なことに、本発明によれば、保護を必要とするコードのみが暗号化のためにマークされ、重要でないコードは暗号化されないままにできる。暗号化を必要とするコードのみを選択することによって、実行可能コンテンツをより高速にロードできるとともに、コスト効率がよく実現が簡単なより高速応答のシステムが提供される。
【００１８】
復号化手段は、フィックスアップテーブルを処理すると同時にフィックスアップテーブルを復号化するように構成するのが好ましい。有利なことに、これはメモリスペースの効率的使用を提供するとともに高速応答システムも提供する。
【００１９】
コンパイラ又はリンカディレクティブは、暗号化すべきセクションにフラグを付けるように構成し、更にリンカが前記フラグ付きセクションをリンカ又はポストリンカ段で暗号化できるように前記セクションにソースレベル段で名前を付けるように構成するのが好ましい。
【００２０】
更に、セクションリネームメカニズムを用いることによって、オブジェクトコードのセクションを、そのセクションを暗号化すべきか否かマークすることができる。有利なことに、これは、保護を必要とするコードのみを暗号化のためにマークし、重要でないコードは符号化されないままにすることができる。暗号化を必要とするコードのみを選択することによって、システムを高速にロードすることができ、コスト効率がよく実現が簡単なもっと高速応答のシステムを提供することもできる。
【００２１】
本発明を、図面を参照して、単なる一例として、以下に更に説明する。
【発明を実施するための最良の形態】
【００２２】
プログラムの実行可能イメージはセクション情報を含み、伝統的な実行可能イメージはいくつかのコンポーネント又はセクション、例えば実行可能プログラムコードを構成するテキストコンポーネント、初期化された又は初期化されてないプログラムスタティックデータのためのスペースを具えるデータコンポーネント、及びゼロに初期化されたスタティックデータを含むローダにより割り当てられる領域を具えるブロックストレージセグメント（ＢＳＳ）コンポーネントを有する。ＢＳＳは実行時間にバイナリイメージに割り当てられたデータを含むメモリマッピングコンポーネントである。システム内のコンポーネントが多くなればなるほど、粒度が増大し、フレキシビリティが増大する。粒度は、システムがどの程度個別のコンポーネントを含むかに関連する。例えば、フィリップスのトライメディアＣコンパイラは、生成されたオブジェクトファイル内のセクション又はコンポーネントを、コンパイル時間後でオブジェクトをリンクして最終実行可能ファイルにする前に、リネームすることができる。
【００２３】
ＧＮＵ  ＧＣＣ  Ｃコンパイラのようなコンパイラは、特別のＣ拡張を用いてコンパイル時間に又はリンカファイルを用いてリンク時間に、セクションにラベルを付けることができる。ＧＮＵ  ＧＣＣコンパイラによれば、セクションに、トライメディアＣコンパイラで使用される標準テキスト、データ及びＢＳＳタイトル以外のタイトルを、特別コンパイル時間ディレクティブ、例えばコンパイラディレクティブに続くコードがオブジェクトコード内に指定の名前で置かれることを指定するインラインアセンブラディレクティブで与えることができる。これは、特別リンカを用いてＮＧＵ  ＧＣＣコンパイラからのコンパイルされたＣソースコードから生成されたオブジェクトファイルにリンカによって付けられたフラグをリネームすることにより行われる。セクションリネームメカニズムを用いることにより、オブジェクトコードのセクションを特別のネーム変換により、そのセクションを暗号化すべきか否かを指示することができる。従って、大きなアプリケーションに対しては、重要なコード、例えば特許権保護又は著作権保護すべきコード又は秘密情報を含むコードのみをを暗号化のためにマークする必要があるが、Ｃライブラリのような低重要度のコードは暗号化されないままにできる。コンパイラにより生成されたオブジェクトコードは一般にマークされたコード内に置かれる。ＵＮＩＸ（登録商標）又はＬｉｎｕｘシステムにおいては、伝統的に、これらのセクションは、以下に詳細に検討されるように、テキスト、データ及びＢＳＳのタイトルが付与される。しかし、オブジェクトコードに一旦名前が付けられると、それを暗号化のためにマークするためにリネームすることはできない。
【００２４】
要約すると、本発明は、プログラムの実行可能イメージをフィックスアップテーブルのようなデバイスを用いて処理するためのメモリ位置に再配置できる、実行可能イメージを暗号化し実行する方法及びシステムを提供する。フィックスアップテーブルは、相対アドレス含むアドレスに対するポインタのリストを含む。ファイルがメモリにロードされるとき、コンパイラはポインタを有する各アドレスに行き、プログラムの開始命令の絶対アドレスをプログラム内の相対アドレスに加える。これによりローダは実行可能イメージをパッチ又は再配置して、実効可能イメージ内のアドレスに対する基準が再配置された実行可能イメージの所望のアドレスに合致するようにパッチされる。
【００２５】
暗号化メカニズムは実行可能プログラムの一部分をリンク時間に又はリンク時間後に暗号化する。リンク時間は、例えば種々のソースモジュールからコンパイルされたファイルが単一プログラムにリンクされる時間である。リンカにより行われる決定は、コンパイルされたコードにより制約され、最終的にはソースコードに含まれる情報により制約される。このときフィックスアップテーブルを暗号化し、フィックスアップテーブルを最初に復号化しなければイメージを再配置することができないようにする。
【００２６】
保護すべき実行可能コードのセクションは暗号化される特別のテキスト（及びデータ）セクションに置かれる。他のすべてのコード及びデータは暗号化されないままにされる。復号化メカニズムを、暗号化されたフィックスアップテーブル及び特に暗号化されたテキスト（及びデータ）セクションを、実行可能イメージの実行前のロード時間に復号化するために使用する。
【００２７】
動作において、コンパイル時間に、プログラムソースコードがコンパイラでオブジェクトコードにコンパイルされる。ソースコード内の特別のコンパイラデリバティブ又はコマンドを用いることにより、又はソースのコンパイル後にオブジェクトコードを変更することにより、保護する必要があるプログラムソースコードのセクションにフラグを付ける。コンパイル時間に行われる決定は、ソースファイル内の符号化された情報の量及び種類により制約される。コンパイラディレクティブは、コンパイラに所定のアクションを実行可能にするプログラムに加えられる特別のコメントであり、コンパイラフィーチャをスイッチオン又はオフするスイッチディレクティブ、コンパイレーションに影響を与えるパラメータを指定するパラメータディレクティブ及びソーステキストの一部分のコンディショナルコンパイルを制御するコンディショナルディレクティブを含むことができる。コンパイラディレクティブは、実行可能コードに直接変換できない非実行可能ステートメントである。
【００２８】
フィックスアップテーブルは、パッチ又は再配置する必要があるデータの実行可能イメージ内の位置を含む。パッチする必要があるデータは次の通りである。
１．新しい再配置アドレスに合致するように変更する必要があるプログラム内の位置に関連するプログラム命令。例えば、命令内のプログラムアドレスに関するジャンプアドレス、ロード／格納命令。命令コード内のオペランドを変更する必要がある（例えば、ｊｍｐ＿ｍａｉｎ  ｌｏａｄ  ｓｏｍｅ＿ｔａｂｌｅ→ｒｅｇ０）。
２．新しい再配置アドレスに合致するように変更する必要があるプログラム内の特定の位置に関連するポインタのようなデータ。例えば、データ構造又は関数に対するポインタを実行可能イメージの新しい再配置アドレスに合致するように変更する必要がある。
【００２９】
実行可能イメージはメモリの位置０で開始するようコンパイルされているものと仮定する。実行可能イメージは新しい固定のメモリ位置Ｎに再配置される。従って、実行可能イメージ内のすべてのアドレス基準にオフセットＮを加えて実行可能イメージを開始アドレスＮに再配置する必要がある。
【００３０】
最初に、復号化されたプログラムがアドレスＮで始まる新しいアドレス空間にコピーされる。次に、フィックスアップテーブルがエンティティ毎に復号化され処理される。各エンティティはＮだけオフセットする必要がある実行可能イメージ内の命令又は命令オペランド及びデータ（例えばポインタ）の位置Ｌを含む。次に、アドレスＬ＋Ｎにあるプログラムコード又はデータが次のように変換される。位置Ｌ＋Ｎの内容が変数Ｘに読み込まれ、Ｘが再配置オフセットＮだけ変更され（即ちＸ＝Ｘ＋Ｎ）、Ｘが位置Ｌ＋Ｎに書き戻される。
【００３１】
この動作がフィックスアップテーブル内のすべてのエンティティに対して繰り返される。フィックスアップが完了したらフィックスアップテーブルはもはや必要ないので、フィックスアップテーブルは捨てられ、フリーメモリアロケータに戻る。
【００３２】
例えば、フィリップス社のトライメディアＣコンパイラは、コンパイルされたオブジェクトコードをリネームすることができるが、ＧＮＵ  ＧＣＣ  Ｃコンパイラはディレクティブを用いてソースコード自体内のセクションをリネームすることができる。既知のネーム変換、例えばセクションに‘＿ｅｎｃｒｙｐｔ＿’のような文字列をプレフィックスすることにより、最終リンク段で、リンカにより生成された最終実行可能イメージ内のどのセクションが暗号化を必要とするかを決定することができる。本発明は、当業者により理解されるように、任意の適切なコンパイラを用いて実現でき、任意の適切なプロセスを用いてソースコードをオブジェクトコードにコンパイルすることができる。
【００３３】
図１は、ソースコード部分Ａ，Ｂ，Ｃ及びテキスト又はデータ部分Ｄ，Ｅを含む単一のソースファイルを示し、これらの部分がＣコンパイラＣＣによりコンパイルされる。ソースコードＢ及びデータＤがソースコード内においてコンパイラディレクティブにより符号化すべきものとマークされる。コンパイラにより生成されるその結果のオブジェクトコードは符号化すべきテキスト及びデータセクションＢ’及びＤ’と、通常のテキスト及びデータセクションＡ’，Ｃ’及びＥ’を含む。
【００３４】
次に、オブジェクトファイルの１つ以上がリンカにより互いにリンクされて図２に示すような最終実行可能イメージを生成する。実行可能イメージはテキスト、データ及びＢＳＳを含み、いくつかのセクションは上述したようにコンパイラディレクティブで暗号化のためにマークされている。セクションをマークする方法は処理系依存であり、コンパイラ及び／又はリンカの性質に基づく。
【００３５】
最終実行可能イメージの一例が図３に示され、本例ではヘッダ３０１は実行可能フォーマット情報、例えば業界標準ＥＬＦ（Excutable and Linking Format）、ＣＯＦＦ（Common Object FileFormats）又は“ａ．ｏｕｔ”実行可能イメージフォーマットを含む。再配置フィックスアップパッチテーブル３０２は、ローダに、実行可能イメージのアドレスに対する基準を新しい再配置された実行可能アドレスを指し示すようにパッチする実行可能イメージの再配置及びパッチ処理を実行可能とする情報を含む。各ＥＬＦファイルは一つのＥＬＦヘッダに零以上のセグメント及び零以上のセクションを後続させて構成することができる。セグメントはファイルのランタイム実行に必要な情報を含む。しかし、ＣＯＦＦフォーマットの方が、１つのオブジェクファイル内に複数の名前付きセクションを許すので、好ましい。
【００３６】
テキストセクション３０３は通常の実行可能プログラムコードを含むが、暗号化すべきテキストセクション３０４は暗号化により保護すべき実行可能コードを含む。データセクション３０５は通常のプログラムデータを含むが、暗号化すべきデータセクション３０６は暗号化により保護すべきプログラムデータを含む。ＢＳＳセクション３０７は、プログラム開始時に零にすべきデータを含む。
【００３７】
実行可能イメージ４０１が形成されると、図４に示すように、この実行可能イメージはポストリンカ暗号化エンジンに通される。暗号化エンジン４０２は実行可能イメージを読み込み、再配置フィックスアップオブジェクパッチテーブルと暗号化のためにマークされた任意のテキスト又はデータセクションを暗号化する。この実行可能イメージがロードされるべきとき、図５に示すように、ロード時間に、この実行可能イメージが復号化され、パッチ／再配置され、実行される。実行可能イメージの暗号化されたセクションは復号化エンジンＧにより復号されて実行可能イメージを生成し、復号化されたセクションをローダＪが再配置して最終ランタイムイメージＬを生成する。
【００３８】
上述した暗号化及び復号化ステップは当業者に明らかなように適切な手段によって実施できる。しかし、本発明を実施するためには、暗号化手段は、最終出力の実行可能オブジェクフォーマットを理解して実行可能オブジェクコードを処理し、暗号化を必要とするセクションを決定できる必要がある。実際上、最終実行可能イメージをリンクし生成するステップを合成でき、これによりポストリンク実行可能オブジェクコードを理解してポストリンク処理及び暗号化を実行する別個の手段の必要性を取り除くことができる。
【００３９】
図６に示す本発明の他の実施例では、ローダが復号化エンジンを含み、ローダが復号化されたフィックスアップパッチテーブルを１つの複合動作で読み込み、復号化し、処理することができるように最適化され、復号化されたフィックスアップテーブルをローダに通す前に格納する必要がなくなる。実行可能イメージデータ及びテキストセクションは第１の復号化エンジン６０１で復号化される。ローダ内の第２の復号化エンジン６０２はフィックスアップパッチテーブルのみを復号化する。
【００４０】
図６に示すように、フィックスアップテーブルの復号化はフィックスアップ処理と１つの個別のステップに結合される。フィックスアップテーブルの復号化は暗号化されたフィックスアップテーブル情報を取り出し、それをフィックスアップテーブルエントリに復号化する。復号化されたフィックスアップテーブルエントリが復号化エンジンにより得られたら、それを用いて実行可能コードをパッチすることができる。これは、復号化されたフィックスアップエントリをフィックスアップテーブルへライトバックし、次いでこのデータをフィックスアップ処理に通しこのデータをリードバックしなければならない別個の復号及びフィックスアップ処理フェーズに比較して、節約になる。
【００４１】
従って、各フィックスアップエントリに対して、復号化されたフィックスアップデータのメモリへのライトバック及びメモリからの復号化されたフィックスアップデータのリードバックを省くことができる。これは、リード／ライト処理はプロセッサ速度に比較して低速であるため、フィックスアップテーブルが大きい場合に大きな節約をもたらし、従って多大なメモリ帯域幅を節約できるとともにデータキャッシュストールを防止できる。
【００４２】
また、復号化エンジンとフィックスアップ処理コードが十分密接に結合されている場合には、復号化とフィックスアップ処理をプロセッサ命令キャッシュに当てはめることができ、命令キャッシュストールの回数が低く維持される結果として処理時間を低減することができる。このようなメモリ帯域幅の節約及び処理時間の低減は、小さい命令及びデータキャッシュを有するトライメディアのようなプロセッサを用いる際に動作をスピードアップする。
【００４３】
このように、本発明は、実行可能ファイルの違法使用を防止でき、費用効率がよく簡単に実現できる、高速ローディングで高速応答のシステムを提供する。
【図面の簡単な説明】
【００４４】
【図１】コンパイラでコンパイルできるソースコード部分、テキスト及びデータ部分を含む一つのソースファイルのブロック図である。
【図２】リンカにより互いにリンクされた、最終実行可能イメージを生成するオブジェクトファイルのブロック図である。
【図３】ヘッダが実行可能フォーマット情報を含む最終実行可能イメージのブロック図である。
【図４】ポストリンカ暗号化エンジンに通される実行可能イメージのブロック図である。
【図５】ロード時間における実行可能イメージの復号化、再配置及び実行をブロック形式で示す。
【図６】本発明による複合ローダ及び復号化エンジンのブロック図である。
【図１】
2009512087.tif 000003
【図２】
2009512087.tif 000004
【図３】
2009512087.tif 000005
【図４】
2009512087.tif 000006
【図５】
2009512087.tif 000007
【図６】
2009512087.tif 000008
【国際調査報告】
2009512087.tif 000009
2009512087.tif 000010