(57)【要約】アプリケーションプログラムの実行を管理する方法は、アプリケーションの準備過程と、アプリケーションの実行過程とを含む。準備過程は、アプリケーションプログラムを関連するセグメントに分割し、かつ少なくとも１つのセグメントの命令を暗号化する。準備過程は、暗号化された命令を実行可能ファイルの中の少なくとも２つの離れた領域に配置し、かつヘッダ情報を少なくとも１つの離れた領域に対応づける。ヘッダは、復号鍵と他の離れた領域の位置とを識別する。したがって、結果として生じる実行ファイルは、実行されず、かつ反応するプロセスをオペレーティングシステムに呼び出させる部分を有する。実行過程は、アプリケーションの命令の少なくとも一部が暗号化された形式でのみそのコンピュータに入手可能であるとき、保護されたアプリケーションの実行を開始する。ユーザが認証され、その後、暗号化された部分が復号化され、かつ実行が再開される。【特許請求の範囲】
【請求項１】
アプリケーションコンピュータプログラムを修正するための方法であって、
前記アプリケーションコンピュータプログラムは、第１電子的実行環境内で実行するための修正されていない形式に構成され、
前記アプリケーションコンピュータプログラムのサブセクションの境界を識別するステップと、
前記アプリケーションコンピュータプログラムの前記サブセクションを、前記第１電子的実行環境内で実行されるときに前記第１電子的実行環境と異なる第２電子的実行環境の起動を引き起こす形式に修正するステップと、
前記アプリケーションコンピュータプログラムに、前記第２電子的実行環境内で前記アプリケーションコンピュータプログラムの実行を可能とする制御情報を含めるステップと、
を含む方法。
【請求項２】
前記サブセクションの境界はフロー制御命令である請求項１に記載の方法。
【請求項３】
前記第１電子的実行環境はコンピュータのオペレーティングシステムであり、前記第２電子的実行環境はデバッグ環境である請求項１に記載の方法。
【請求項４】
前記アプリケーションコンピュータプログラムの前記サブセクションを修正する前記ステップは、前記オペレーティングシステムに前記デバッグ環境へ実行制御の移行を生じさせる命令を追加するステップを含む請求項３に記載の方法。
【請求項５】
前記アプリケーションコンピュータプログラムの前記サブセクションを修正する前記ステップは、前記アプリケーションコンピュータプログラムファイルの前記サブセクションの少なくとも一部を暗号化するステップを含む請求項１に記載の方法。
【請求項６】
前記アプリケーションコンピュータプログラムの前記サブセクションを修正する前記ステップは、前記サブセクションの前記暗号化された部分の少なくとも一部を、前記アプリケーションコンピュータプログラムの対応する修正されていないサブセクションの位置とは異なる位置に再配置するステップをさらに含む請求項５に記載の方法。
【請求項７】
前記アプリケーションコンピュータプログラムの前記サブセクションを修正する前記ステップは、前記アプリケーションコンピュータプログラムに、前記第１または第２電子的実行環境のいずれの内部にもないリモートプロセスと通信する機能を追加するステップを含む請求項１に記載の方法。
【請求項８】
前記リモートプロセスは、前記アプリケーションコンピュータプログラムを継続して実行する権限を与えるプロセスである請求項１に記載の方法。
【請求項９】
前記リモートプロセスは、暗号鍵管理プロセスである請求項８に記載の方法。
【請求項１０】
前記アプリケーションコンピュータプログラムは、前記アプリケーションコンピュータプログラムの実行についての情報を伝達する請求項７に記載の方法。
【請求項１１】
前記情報は、前記アプリケーションコンピュータプログラムの変更についての情報である請求項１０に記載の方法。
【請求項１２】
アプリケーションコンピュータプログラムを実行するための装置であって、
オペレーティングシステムを有するコンピュータと、
実行可能でない形式の実行可能でない部分を有するアプリケーションコンピュータプログラムと、
前記オペレーティングシステムと異なる実行環境を提供し、前記アプリケーションコンピュータプログラムの実行可能でない部分を実行可能な形式に変換する操作が可能な実行コントローラと、
を具備する装置。
【請求項１３】
前記アプリケーションコンピュータプログラムの実行可能でない部分は暗号化された部分を含む請求項１２に記載の装置。
【請求項１４】
前記アプリケーションコンピュータプログラムは、前記オペレーティングシステムまたは実行コントローラのいずれの内部にもないリモートプロセスと通信が可能な部分を含む請求項１３に記載の装置。
【請求項１５】
前記リモートプロセスは、前記アプリケーションコンピュータプログラムを継続して実行する権限を与えるプロセスである請求項１４に記載の装置。
【請求項１６】
前記リモートプロセスは、暗号鍵管理プロセスである請求項１５に記載の装置。
【請求項１７】
前記アプリケーションコンピュータプログラムは、前記アプリケーションコンピュータプログラムの実行についての情報を前記リモートプロセスに伝達が可能な部分を含む請求項１４に記載の装置。
【請求項１８】
前記アプリケーションコンピュータプログラムの実行についての情報は、前記アプリケーションコンピュータプログラムの変更についての情報である請求項１７に記載の装置。
【請求項１９】
アプリケーションコンピュータプログラムを実行するための方法であって、
オペレーティングシステムを起動するステップと、
実行可能でない形式の実行可能でない部分を有する前記アプリケーションコンピュータプログラムを起動するステップと、
オペレーティングシステムと異なる実行環境を提供し、前記アプリケーションコンピュータプログラムの実行可能でない部分を実行可能な形式に変換することが可能な実行コントローラを起動するステップと、
前記実行コントローラの実行環境内で前記アプリケーションコンピュータプログラムを実行するステップと、
を有する方法。
【請求項２０】
前記実行コントローラはデバッガとして起動される請求項１９に記載の方法。
【請求項２１】
前記アプリケーションコンピュータプログラムの実行可能でない部分は暗号化された形式である請求項１９に記載の方法。
【請求項２２】
前記アプリケーションコンピュータプログラムは、前記オペレーティングシステムまたは前記実行コントローラのいずれの管理下にもないリモートプロセスと通信する請求項１９に記載の方法。
【請求項２３】
前記リモートプロセスは、暗号鍵管理プロセスの部分である請求項２２に記載の方法。
【請求項２４】
前記アプリケーションコンピュータプログラムは、前記前記アプリケーションコンピュータプログラムの実行についての情報を前記リモートプロセスに伝達する請求項１９に記載の方法。
【請求項２５】
前記情報は、前記アプリケーションコンピュータプログラムの変更についての情報である請求項２４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータソフトウェアの実行を管理するためのシステムおよび方法、そして、その管理に関するプログラミング構造を有するコンピュータプログラムに関する。
【０００２】
本出願は、２００３年２月１１日に出願された米国仮特許出願第６０／４６６，２６０号に基づいて優先権を主張し、特にその開示の全体を引用してここに組み込む。
【背景技術】
【０００３】
オペレーティングシステム（ＯＳ）は、その処理の実行においてコンピュータまたはネットワークを管理するコンピュータプログラムおよびルーチンの集合である。Ｗｉｎｄｏｗｓ  ２０００（登録商標）、Ｗｉｎｄｏｗｓ  ＮＴ（登録商標）、Ｗｉｎｄｏｗｓ  ＸＰ（登録商標）のようなＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）のバージョンは、オペレーティングシステムの例である。その他のオペレーティングシステムも知られている。
【０００４】
アプリケーションプログラム（ＡＰ）は、特定の処理を実行し、特定の問題を解き、特定のレポートを生成し、あるいは、特定のファイルを更新するために記載されたプログラムである。Ｍｉｃｒｏｓｏｆｔ  Ｗｏｒｄ（登録商標）、Ｍｉｃｒｏｓｏｆｔ  Ｅｘｃｅｌ（登録商標）、およびＭｉｃｒｏｓｏｆｔ  ＰｏｗｅｒＰｏｉｎｔ（登録商標）は、アプリケーションプログラムの例である。その他のアプリケーションも知られている。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
オペレーティングシステムおよびアプリケーションプログラムはそれぞれ、様々なときにコンピュータリソースの制御を引き受けることが可能である。ＯＳは典型的にコンピュータが最初にブートしたときにコンピュータリソースの制御を引き受ける。ＯＳは、ＡＰの設計に依存してコンピュータリソースのいくらかまたは全ての制御をＡＰに譲る。マルチタスキングＯＳにおいて、ＯＳおよび複数のＡＰは、ＯＳの設計、ＡＰの設計、および外部のイベントに依存して、様々なときにコンピュータリソースを占有および開放することが可能である。オペレーティングシステムは、通常、ＡＰが終了した後、コンピュータリソースの制御を取り戻す。
【０００６】
大部分の現在のオペレーティングシステムは、ＡＰの正規でない実行に反応する機能を提供する。ＡＰは、時折、例外と呼ばれる正規でないイベントを発生する。例外は、例えばゼロによる除算のような正規でない演算操作を生じるハードウェア誤りのために発生し得る。また、例外は、コンピュータリソースが利用できないため、またはその他の原因のために発生し得る。例外の場合には、ＯＳはＡＰを停止させ、コンピュータリソースの制御を引き受け、またはその他の行動をとる。
【０００７】
また、大部分の現在のオペレーティングシステムは、アプリケーションのデバッグを支援する機能を提供する。例えば、Ｍｉｃｒｏｓｏｆｔ（登録商標）のオペレーティングシステムは、デバッグに関する多数の機能を持つアプリケーションプログラムインタフェースを有する。ＡＰはブレークポイントのためのコマンドと共にプログラムすることができる。ＡＰがブレークポイントコマンドを実行すると、ＯＳはＡＰの実行を停止させる。そして、ＯＳはデバッガアプリケーションへ制御を移すことが可能である。（ＯＳは、例外イベントに反応してデバッガアプリケーションへ制御を渡すことも可能である。）ＡＰが停止されている間、ＯＳはデバッガアプリケーションに、メモリにある命令の変更を含めて、ＡＰに割り当てられたメモリ位置およびその他のコンピュータリソースにアクセスさせることが可能である。デバッガアプリケーションは、ＯＳにＡＰの実行の再開を指示することができる。個々のＯＳに依存してその他の機能も利用可能である。いくつかのオペレーティングシステムにおいては、指定されたときに、一つのデバッガプログラムのみを一つのＡＰに対応付けることも可能である。
【課題を解決するための手段】
【０００８】
本発明の好ましい実施形態について、ここで本発明のいくつかの形態を強調および前置きするために要約する。この要約においては単純化および省略がされている。そのような単純化および省略は、本発明の範囲を限定することを意図するものではない。
【０００９】
コンパイラのようなポストプロセッサプログラムは、存在するアプリケーションプログラムを入力とし、ファンクションエントリポイントをスキャンし、そしてエントリポイントを呼び出す。ポストプロセッサはアプリケーションのファンクションを暗号化し、ファンクションコードの位置についての情報をスクランブルし、復号化ルーチンを追加し、変更に対して検出および反応するコードを追加し、そして部分的に暗号化された実行可能ファイルを出力する。保護されたアプリケーションプログラムにおける保護されたファンクションは、たとえモジュールが復号化されていても、ファンクションが有効に実行されないように、オペレーティングシステムが正規でない命令として解釈する、それらのヘッダに書き込まれた情報を有する。新たな実行可能ファイルは、元のアプリケーションと同様に起動および動作するが、正常に動作するために復号鍵を取得しなければならない。ポストプロセッサは、ユーザから、鍵サーバから、ファイルから、またはその他の各種手段によって直接に復号鍵を取得できるように保護されたアプリケーションを設定することができる。
ポストプロセッサに代えて、アプリケーションのソースコードは、まず最初に保護された特性を含めて記載し、コンパイルし、そして暗号化することも可能である。
【００１０】
実行コントローラは、デバッガとしてオペレーティングシステムと相互に作用し、かつアプリケーションの実行を制御する。オペレーティングシステムが保護された実行可能ファイルの中に正規でないアドレス、命令、または変更された命令コードを検出したときに、実行の制御は（以後、実行コントローラと呼ばれる）デバッガ／復号化ルーチンに移される。
実行コントローラは、復号化を管理し、かつ変更から保護するためのそれ自身のコードを有する。また、実行コントローラは、アプリケーションの制御を行うためにユーザ自身がデバッガをロードすることを防止する。実行コントローラは、保護された実行可能ファイルを変更する試みが存在したか検出し、かつ変更に対して反応する。アプリケーションの保護を扱う者の判断において、変更されたアプリケーションは、実行の継続を許可するか、あるいは、変更した者またはハッカーが適用された保護の特性についての情報を取得することを防止する方法でデグレードすることができる。
復号化されたファンクションが実行を完了した後、制御は実行コントローラに戻され、実行コントローラはオペレーティングシステムのページング領域からモジュールの復号化されたバージョンを削除するか、またはそれを再度暗号化する。
【発明の効果】
【００１１】
この方法の利点は、攻撃者に対して復号化された形式におけるアプリケーション全体へのアクセスを拒否することである。この方法は、アプリケーションの著作権者または所有者が適用することを選択する保護および／または特性を攻撃者が除去または回避できるように、攻撃者がアプリケーションの修正を可能にする情報を取得することを事実上不可能にする。この方法は、保護されたプログラムを変更または修正するための試みが行われたときに検出および対策を行う。開示されたシステムおよび方法のもう１つの利点は、ソースコードにアクセスすることなく、また、その他のプログラムの内部構造の経験的な知識を必要とせずに、既存のコンピュータソフトウェアアプリケーションを処理することができることである。
これらおよびその他の目的は、以下に含まれる図面および記載から明らかになる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の好ましい実施形態について添付の図面を参照して説明する。
【００１３】
図１は、その実行を管理するためにＡＰを修正する過程を表す。そのような管理の目的はＡＰをデバッグすることではなく、その実行を権限が与えられたユーザに限定することである。例えば、ＡＰを開発した個人または会社はその利用に対して料金を課すことが可能である。あるいは、いくつかのコンピュータプログラムの米国外への輸出を制限することも可能である。管理の目的は、盗賊、ハッカー、泥棒、およびその他の権限のないユーザがＡＰを使用することを防止し、かつ変更に対して検出または反応することである。
【００１４】
管理過程の第１部分は、ＡＰの実行可能な命令列を修正することである。図１に示す例は、既にプログラムされ、デバッグされ、かつ実行可能ファイルにコンパイルされたＡＰのためのものである。あるいは、ＡＰは、以下で述べる実行管理の特性を利用するように最初から記載することができる。実行可能ＡＰは、カスタマＡＰファイル１０として示されている。
【００１５】
ポストプロセッサプログラム１２は、プログラム中のファンクションおよびその他の固有の区切りを識別するためにカスタマＡＰファイル１０を分析する。通常は、ポストプロセッサプログラム１２は、アプリケーションの実行を管理するためのＯＳの本来の機能に基づく管理の特性を含むようにカスタマＡＰファイル１０を修正する。
そのような特性の例は、以下でさらに説明される。ポストプロセッサプログラム１２は、追加の実行可能な命令を含む修正されたＡＰを生成する。修正されたカスタマＡＰファイルは、保護されたＡＰファイル１４として示されている。
【００１６】
管理過程の第２部分は、ユーザコンピュータ１６において前記保護されたＡＰファイル１４が実行されるときに発生する。通常は、ポストプロセシングの間に保護されたＡＰファイル１４に追加された実行可能な命令は、カスタマＡＰファイル１０の命令およびユーザコンピュータ１６のＯＳと相互に作用する。保護されたＡＰファイル１４は、認証処理の一部として外部のチャネル１７を介して復号鍵サーバ１８と通信するような処理を含むことが可能である。さらに、保護されたＡＰファイル１４は、保護されたＡＰファイル１４に対するどのような検出された変更にも反応し、そのような変更をオーソリティ２０へ報告する処理を含むことが可能である。
【００１７】
図２は、前記カスタマＡＰファイル１０の構成要素およびそれらの保護された実行可能ファイル１４への変換を表す。実行可能ファイルは、典型的に、それらを動作させようとする処理環境に依存して定義された構造を有する。図２の例において、カスタマＡＰファイルは実行可能コード２２の領域と、データ２４の領域と、その他の構成要素２６を含むもう１つの領域とを含む。実行可能コード２２の領域は、典型的に、メインルーチン２８と、一連の追加ルーチン３０とを含む。ファイルはライブラリのような他の形式も可能である。
【００１８】
前記ポストプロセッサプログラムは、前記カスタマＡＰファイル１０を読み出し、かつ実行可能コードにおける固有の境界を識別する。ファンクションの境界は、ジャンプまたはエントリポイントの呼び出しおよびリターン命令である。ポストプロセッサは、実行可能ファイルの始めから終わりまで、ジャンプ、呼び出し、およびその他の分岐またはフロー制御命令を追跡し、関連するエントリポイントを発見し、そして、リターン命令を求めて続くコードを調査する。ポストプロセッサは、そのファンクションを参照する全てのフロー制御命令とともに、全てのファンクションエントリポイントおよびファンクションの長さの記録を蓄積する。１つのファンクションが複数のエントリポイントを有する場合は、ポストプロセッサは、共通するファンクションを１つに併合する。カスタマアプリケーション（さらに実行可能コードそれ自体）について経験的な情報が入手可能である場合は、固有の境界を識別する処理は他の方法により行うことも可能である。例えば、ソースコードが入手可能ならば、ソースコードはファンクションの境界を識別するために手作業で調査することが可能であり、また、デバッグ情報が入手可能ならば、デバッグ情報はファンクションの境界を識別するためにスキャンすることが可能である。
【００１９】
ファンクションを識別した後、前記ポストプロセッサは、それらのいくつかまたは全てを暗号文ファンクション３２に暗号化する。暗号化されるファンクションの数は、アプリケーションの性質によって異なる。その数は、ファンクションのうちの固定されたパーセンテージとすることも可能である。最も高い呼び出し率を有するファンクションを暗号化することも可能である（例えば、ＡＰの中で多くの異なる場所から呼び出されるファンクション）。ファンクションは、データの出力および読み出しはできるがデータの書き込みまたは記憶はできないというような最小機能を許可するように選択することも可能である。選択処理は自動である必要はない。人手の介在および分析を含むことが可能である。
【００２０】
前記各々のファンクションは、可能であればそれぞれ異なる暗号鍵を用いて個々に暗号化される。暗号化および復号化の構成は、ＲＳＡ、ＭＤ５、ＲＣ４、およびその他の広範囲にわたる各種の暗号アルゴリズムのどのようなものを用いることも可能である。暗号化は、ソフトウェアまたは専用のハードウェア装置により行うことが可能である。
【００２１】
前記各々の暗号文ファンクション３２について、前記ポストプロセッサは、平文ファンクションに存在する第２エントリポイント３６ｃとともに、暗号文３６ａの第１バイトまたは複数バイトを、ＡＰがそれの下で動作するように書かれたＯＳの割り込み命令３７で置き換えることが好ましい。
【００２２】
また、前記ポストプロセッサは、前記各々の暗号文ファンクション３２について平文ヘッダ３４を生成する。平文ヘッダ３４は、ファンクションの復号鍵、ファンクションの長さ、平文（暗号化前の）ファンクションのチェックサム、および暗号文ファンクションのチェックサムを識別する情報を含む。平文ヘッダの複数バイトは、バイト交換または暗号化のような多数の周知技術からいずれかを用いて分かりにくくされる。このスクランブルを解除するための情報は、検出を妨げるような方法で保護されたＡＰファイルに含まれる。
【００２３】
前記ポストプロセッサは、前記暗号文ファンクションのうちかなりの部分を割り込み命令３７で置き換える。したがって、結果として生じるファンクションモジュールは、割り込み命令３７と暗号文サブルーチン部分３６ｂとの組み合わせとなる。組み合わせモジュールの長さは、元の平文ファンクションの長さに等しいことが好ましい。例えば、（ａ）平文ファンクションが１２８バイトの長さを有し、（ｂ）暗号化処理は等しい長さである１２８バイトの暗号文ファンクションを生成し、そして（ｃ）割り込み命令は２バイトであると仮定する。ポストプロセッサプログラムは、暗号文ファンクションのうち長さが２バイトに等しいかなりの部分を置換する。
【００２４】
前記ポストプロセッサプログラムは、前記暗号文ファンクションの置換された部分３６ａおよび３６ｃを、コードセクションの終わりのような実行可能ファイルの知られた位置に格納する。また、ポストプロセッサは、平文ヘッダの中に置換された暗号文のオフセット（相対アドレス）を格納する。
【００２５】
前記ポストプロセッサは、各要素部分からなるファンクション（すなわち、割り込み命令３７および暗号文部分３６ｂ）を実行コントローラ４０と呼ばれる追加プログラムのファンクションと結合する。また、ポストプロセッサは、移動されたファンクションを反映するためにエントリポイントアドレスを変更する。実行コントローラ４０の機能は以下でより詳しく説明する。
【００２６】
図３は、ユーザコンピュータにおいて前記保護されたＡＰファイルを実行するための処理環境を表す。与えられた例は、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）環境のためのものである。ＡＰファイルを起動すると、ユーザコンピュータは保護されたＡＰのメインプロセス５０を開始する。メインプロセス５０は、すぐに第２スレッド５４を起動するメインスレッド５２を有する。次に、第２スレッド５４は実行コントローラのための新たなプロセス５６を起動する。実行コントローラは、すぐにデバッガとしてメインプロセッサ５０に結合する。現在、実行コントローラ５６が結合されているため、他のデバッガはメインプロセッサ５０に結合することはできない。同時に生じたカーネル保護のため、どのようなデバッガも実行コントローラ５６に結合することはできない。
【００２７】
前記実行コントローラが前記メインプロセス５０に結合した後、メインプロセスのメインスレッドは、カスタマアプリケーションルーチン５８の実行を開始する。その後、実行コントローラ５６は、ＯＳ内のデバッガの状況にある。カスタマアプリケーションルーチン５８はデバッグされるアプリケーションの状況にある。
【００２８】
図４は、前記保護されたアプリケーションプログラムを実行するステップを表す。上述したように、メインプロセスの開始１０００を行い、次に実行コントローラの起動１００５を行う。実行コントローラはデバッガとしてメインプロセスへの結合１０１０を行う。
【００２９】
このとき、前記実行コントローラは、保護されたＡＰファイルのヘッダまたは他の場所からのキーインデックス（鍵識別子）の取得１０１５が可能である。そして、実行コントローラは、保護されたＡＰファイルからヘッダによって置換された対応する暗号文の検索１０２０も可能である。
【００３０】
前記メインプロセスは、保護されたファンクションの中でブレークポイントに出会うまでカスタマＡＰの命令の実行１０２５を行う。ブレークポイントはメインプロセスのメインスレッドの実行を停止する。
【００３１】
前記実行コントローラが暗号化されたファンクションに最初に出会ったときに、前記実行コントローラは、ユーザ認証および暗号鍵取得のための処理の開始１０３０を行う。認証処理は多数の知られた認証処理のいずれを用いることも可能である。そのような処理は、パスワード、スマートカード、またはその他の方法によって実行コントローラがコンピュータにユーザを認証させる最初となる。そして、実行コントローラは外部のサーバに接続し、そのユーザがそのアプリケーションの使用権限を有するか検証する。
【００３２】
ユーザが認証されると、前記実行コントローラは、鍵サーバから保護されたＡＰファイルのための１つ以上の復号鍵をダウンロードまたは他の方法で取得する。鍵サーバは送信のために個々の通信鍵を用いてその鍵を暗号化することが可能である。通信鍵は、スマートカードと共にユーザに提供したり、鍵サーバとの通信セッションの間に対話的に生成したり、または、その他の方法により取得して、保護されたＡＰファイルに含めることが可能である。実行コントローラは、１つ以上の通信セッションにおいて全ての復号鍵を取得することが可能である。あるいは、実行コントローラは、保護されたＡＰファイルそれ自身から、ユーザに提供されたスマートカードから、または、その他の情報源から、というようにその他の方法で鍵を取得することも可能である。実行コントローラは、多数の知られた保護技術のどのようなものを用いて鍵を格納してもよい。また、実行コントローラは、以下で説明する再暗号化されたファンクションにおいて用いるために暗号鍵を取得することも可能である。
【００３３】
前記実行コントローラは、ブレークポイントに出会うと、前に復号化されたカスタマアプリケーションファンクションを調査し、かつ浄化する。すなわち、実行が完了したものについて再暗号化１０３５を行う。実行コントローラは、メインプロセスのメインスレッドの命令カウンタを有効なファンクションのエントリポイントおよびリターンポイントのマップと比較することによって、そのようなファンクションが完了したか否かを決定することができる。実行コントローラは、完了したルーチンを暗号文のバージョンで上書きすることができる。暗号文は長期の記憶から検索するか、または、実行コントローラによってより容易にアクセス可能なメモリに保持することが可能である。ファンクションの特性が変更されたローカル変数を含むならば、実行コントローラは、モジュールを現在の変数値と共に再暗号化することができる。再暗号化は、ソフトウェアまたは専用のハードウェア装置を用いて実行することができる。
【００３４】
ユーザ認証およびファンクションの再暗号化（存在すれば）の後、前記実行コントローラは新たに出会うファンクションの変更の調査１０４０を行う。実行コントローラは、平文および暗号文ファンクションのチェックサムのようなチェックサムを検査する。その他の変更検出の方式を用いることも可能である。
【００３５】
前記実行コントローラは変更を検出すると、各種の反応１０４５を行う。１つの反応は、いわゆる“着色パケット（ｄｙｅ  ｐａｃｋｅｔ）”を有効にすることである。着色パケットは、レポートをオーソリティに送信するような方法によって、権限のない活動の検証を支援するコードである。実行コントローラは、ユーザと、変更が発見されたアプリケーションと、発見された変更の特性（例えば、失敗した平文チェックサム）とを識別するレポートを伝達することができる。また、実行コントローラは、一時的または恒久的に、アプリケーションの実行を停止することができる。この停止は、変更検出方法についてハッカーが入手可能な情報を制限するため、検出後のランダムな時間に行うことができる。実行コントローラは、恒久的な記憶から保護されたアプリケーションを削除することも可能である。
【００３６】
検出された変更が存在しない場合は、前記実行コントローラはファンクションの復号鍵の検索１０５０を行う。実行コントローラは、適切な置換バイトとヘッダ情報によって上書きされていないファンクションの暗号化されたバイトとから、暗号文バッファを構築する。実行コントローラは、暗号文ファンクションの復号化１０５５を行い、平文命令をメインプロセスのメインスレッドの命令メモリに書き戻す。実行コントローラは、実行を再開するため命令カウンタをリセットする。メインプロセスは、平文命令を用いて通常の実行を再開する。
【００３７】
前記メインプロセスのメインスレッドは、１０２５で他のブレークポイントに出会うまで実行を繰り返す。他のブレークポイントに出会ったとき、メインプロセスは再度停止し、かつ実行コントローラに通知する。実行コントローラは、完了したファンクションの再暗号化のステップ１０３５と、変更の検出および反応のステップ１０４０、１０４５と、新たに出会ったファンクションの復号化のステップ１０５０、１０５５とを繰り返す。この処理はカスタマＡＰの実行の始めから終わりまで繰り返す。
【００３８】
上述した例は、説明を目的として提供されたものに過ぎず、いかなる場合にも本発明を限定するものと解釈されてはならない。本発明は特定の実施形態を参照して記載されたが、ここで用いられる用語は限定するための用語ではなく、説明および解説のための用語である。その態様において本発明の範囲および思想から逸脱することなく、開示された範囲内で、現在記載されたものとしておよび修正されたものとして変更することが可能である。本発明は、特有の意味、構成要素、および実施形態を参照して記載されているが、本発明はここで開示された特有のものに限定されることを意図するものではなく、むしろ、本発明は全ての機能的に同等な構造、方法、および利用に拡張される。
【図面の簡単な説明】
【００３９】
【図１】その実行を管理するためにアプリケーションプログラムを修正する過程を表す。
【図２】カスタマアプリケーションプログラムファイルの構成要素およびそれらの保護された実行可能ファイルへの変換を表す。
【図３】ユーザコンピュータにおいて保護されたアプリケーションプログラムファイルを実行するための処理環境を表す。
【図４】保護されたアプリケーションプログラムの実行におけるステップを表す。
【符号の説明】
【００４０】
１０  カスタマＡＰファイル
１２  ポストプロセッサ
１４  保護されたＡＰファイル
１６  ユーザコンピュータ
１７  チャネル
１８  鍵サーバ
２０  変更オーソリティ
２２  実行可能コード
２４  データ
２６  その他の構成要素
２８  メインルーチン
３０  追加ルーチン
３２  暗号文ファンクション
３４  平文ヘッダ
３６ａ、３６ｂ、３６ｃ  暗号文
３７  割り込み命令
３８  追加ルーチン
４０  実行コントローラ
４１  デバッガ
５０  メインプロセス
５２  メインスレッド
５４  第２スレッド
５６  実行コントローラプロセス
５８  カスタマＡＰルーチン
【図１】
2006522387.tif 000002
【図２】
2006522387.tif 000003
【図３】
2006522387.tif 000004
【図４】
2006522387.tif 000005
【国際調査報告】
2006522387.tif 000006