(57)【特許請求の範囲】
【請求項１】
実行可能な元々のソフトウェア・アプリケーションから、前記実行可能な元々のアプリケーションと前記アプリケーション用のライセンス情報とを含む保護された実行可能なものを生成する方法であって、該方法は：
保護するべき元々のアプリケーションのためのスタートアップ・コードを生成するステップと；
前記元々のアプリケーションのコンピュータ実行可能コード、及び前記元々のアプリケーションのためのライセンス情報を入手するステップと；並びに
実行可能な保護されたアプリケーションをシェル化されたアプリケーションとして生成するステップであって、該シェル化されたアプリケーションが、前記実行可能な元々のアプリケーションとシェルとを含み、前記実行可能な元々のアプリケーションはアプリケーション・コードとして含まれ、前記シェルは、前記ライセンス情報が埋め込まれ、前記スタートアップ・コードをシェル・コードとして含むステップ；
を含み、
前記シェル化されたアプリケーションは：
前記アプリケーション・コードと前記シェル・コードとの間で、前記シェル化されたアプリケーション内の安全なトンネルを実装するための指示；及び
前記シェル・コード内の前記ライセンス情報にアクセスするために前記アプリケーション・コード用の少なくとも１つのアプリケーション・プログラミング・インターフェース（ＡＰＩ）を実装するための指示
を含み、
該指示により、前記シェル化されたアプリケーションは実行中に：
前記シェル化されたアプリケーション内の前記アプリケーション・コードから前記ＡＰＩを呼び出すステップ；
安全な通信セッション・キーを生成するステップ；
前記アプリケーション・コードと前記シェル・コードとの間で、前記シェル化されたアプリケーション内の安全なトンネルを確立するために前記キーを用いるステップ；及び
前記安全なトンネルを用いて、前記アプリケーション・コードと前記シェル・コードとの間で通信を行うステップ
を含む方法を実行することができ、
これにより、前記シェル化されたアプリケーションを起動した後で、前記埋め込まれたライセンス情報を使用する前記シェル化されたアプリケーションだけによって、前記元々のアプリケーションの使用を認可することができる該方法。
【請求項２】
請求項１に記載の方法であって、前記シェル化されたアプリケーションが実行する前記方法は、前記アプリケーション・コードからのライセンス情報の要求を扱うための通信サービス・スレッドを起動するステップを更に含み、
前記ＡＰＩ呼び出しに応答して前記サービス・スレッドは：
セッション・キーを生成する前記ステップ；
安全なトンネルを確立するために前記キーを用いる前記ステップ；及び
前記トンネルを用いて通信を行う前記ステップ；
を扱う該方法。
【請求項３】
請求項１に記載の方法であって、前記安全なトンネルによって使用される通信プロトコルが、プロセス間通信（ＩＰＣ）、伝送コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）、名前付きパイプ、及びメール・スロットのうち１つを含む方法。
【請求項４】
請求項１に記載の方法であって、前記シェル化されたアプリケーションを作成する前記ステップが、前記ライセンス情報を暗号化するステップを更に含む方法。
【請求項５】
請求項４に記載の方法であって、前記暗号化ステップが、ベンダー特有の情報を用いて達成される方法。
【請求項６】
請求項５に記載の方法であって、前記ベンダー特有の情報が、アプリケーション名称及びユニークなベンダーの識別子（ＩＤ）のうち少なくとも１つを含む方法。
【請求項７】
請求項１に記載の方法であって、前記ＡＰＩは、ライセンスハンドルを要求するために使用され；もし、前記ハンドルをリターンすることに成功した場合には、前記アプリケーションと前記シェルとの間で連続して送られる少なくとも１つのパケットを前記安全なトンネルを介して送る方法。
【請求項８】
請求項７に記載の方法であって、前記ＡＰＩは、少なくとも１つのライセンス制約を満たすために呼び出され、そして、前記制約を満たさない場合には、前記ハンドルはリターンされず、前記ＡＰＩはエラーをリターンする方法。
【請求項９】
請求項８に記載の方法であって、前記制約は、以下のうちの１つである方法：ユーザー名称、システム・パーティション・ボリュームのシリアル番号、ネットワーク・ケア・メディア・アクセス・コントロール（ＭＡＣ）アドレス、ホスト名称、インターネット・プロトコル（ＩＰ）アドレス、プロセッサＩＤ、オペレーティングシステム（ＯＳ）のインストール日時、ユニバーサル・シリアル・バス（ＵＳＢ）ストレージの種類若しくはシリアル番号、物理的なディスクの種類若しくはシリアル番号、ビデオ・カードの種類、ランダム・アクセス・メモリ（ＲＡＭ）のサイズ、クライアントのタイム・ゾーン、仮想マシンの検出、ターミナル・サービスの検出、デバッガの検出、試用開始日、及び試用終了日。
【請求項１０】
コンピュータで実装されるソフトウェア・アプリケーション保護システムであって、
該システムは、シェル化されたアプリケーションを作成するためのシステムであり、
該シェル化されたアプリケーションは、保護された元々のアプリケーション・コードとシェル・コードとを含み、
該シェル・コードは、前記元々のアプリケーション用の埋め込まれたライセンス情報を含み、
前記システムは：
スタートアップ・コードを生成するためのスタートアップ・コード・ジェネレータ；及び
前記スタートアップ・コード・ジェネレータに応答するシェル化アプリケーション・ジェネレータであって、前記スタートアップ・コード、実行可能な元々のソフトウェア・アプリケーション、及びアプリケーションのライセンス情報から、実行可能な保護されたアプリケーションを、シェル化されたアプリケーションとして生成するためのシェル化アプリケーション・ジェネレータ；
を含むプロセッサ実行コードを備え、
ここで、前記シェル化されたアプリケーションは、アプリケーション・コードとして、前記実行可能な元々のソフトウェア・アプリケーションを含み、並びに前記スタートアップ・コード及び前記ライセンス情報をシェル・コードとして含有するシェルを含むシステムであり、
前記シェル化されたアプリケーションは、擬似乱数ジェネレータと、擬似乱数ジェネレータによって生成され且つランダム化されたワン・タイム・セッション・キーとを更に備え、前記擬似乱数ジェネレータとランダム化されたワン・タイム・セッション・キーは、前記アプリケーション・コードと前記シェル・コードとの間で前記シェル化されたアプリケーション内の安全なトンネルを確立する、該システム。
【請求項１１】
請求項１０に記載のソフトウェア保護システムであって、前記シェル化されたアプリケーションの前記アプリケーション・コードは、少なくとも１つのアプリケーション・プログラミング・インターフェース（ＡＰＩ）を呼び出すためのコードを含み、前記シェル・コードは、前記呼び出されたＡＰＩを含み、前記ＡＰＩは、前記ライセンス情報にアクセスすることを可能にするシステム。
【請求項１２】
請求項１０に記載のソフトウェア保護システムであって、
前記アプリケーション・コードからの少なくとも１つのＡＰＩ呼び出しに応答して、起動時の前記シェル化されたアプリケーションは、通信サービス・スレッドを開始し、
前記セッション・キーは、前記アプリケーション・コードと前記シェル・コードとの間で、前記シェル化されたアプリケーション内の安全なトンネルを確立し、
前記トンネルは、前記ＡＰＩ呼び出しに応答してパケット通信を可能にする該システム。
【請求項１３】
コンピュータ読取可能記憶媒体であって、コンピュータが読み込んだときに前記コンピュータに以下の動作を実行させるコンピュータ指示を記録した媒体であり：
実行可能な元々のソフトウェア・アプリケーションから、前記実行可能な元々のアプリケーションを含み、且つ前記アプリケーション用のライセンス情報を含む保護された実行可能なものを：
スタートアップ情報及び保護すべき元々のアプリケーション用のライセンス情報を含むシェル・コードを生成するステップ；
前記元々のアプリケーションのコンピュータ実行可能コードを手に入れるステップ；並びに
実行可能な保護されたアプリケーションを、シェル化されたアプリケーションとして生成するステップであって、該シェル化されたアプリケーションは、前記実行可能な元々のアプリケーションをアプリケーション・コードとして含み、且つシェル・コードとして前記ライセンス情報が埋め込まれているシェルを含むステップ
を含む方法によって生成する媒体であり、
前記シェル化されたアプリケーションは：
前記アプリケーション・コードと前記シェル・コードとの間で前記シェル化されたアプリケーション内の安全なトンネルを実装するための指示；及び
前記シェル・コード内の前記ライセンス情報にアクセスするために前記アプリケーション・コード用の少なくとも１つのアプリケーション・プログラミング・インターフェース（ＡＰＩ）を実装するための指示；
を含み、
該指示により、前記シェル化されたアプリケーションは実行中に：
前記シェル化されたアプリケーション内の前記アプリケーション・コードから前記ＡＰＩを呼び出すステップ；
安全な通信セッション・キーを生成するステップ；
前記アプリケーション・コードと前記シェル・コードとの間で、前記シェル化されたアプリケーション内の安全なトンネルを確立するために前記キーを用いるステップ；及び
前記安全なトンネルを用いて、前記アプリケーション・コードと前記シェル・コードとの間で通信を行うステップ
を含む方法を実行することができ、
前記シェル化されたアプリケーションを起動した後、前記元々のアプリケーションの使用は、前記埋め込まれたライセンス情報を使用する前記シェル化されたアプリケーションによって認可することができる、該媒体。
【請求項１４】
請求項１３に記載のコンピュータ読取可能記憶媒体であって、前記シェル化されたアプリケーションが実行する前記方法は、前記アプリケーション・コードからのライセンス情報の要求を扱うための通信サービス・スレッドを起動するステップを更に含み、
前記ＡＰＩの呼び出しに応答して前記サービス・スレッドは：
セッション・キーを生成する前記ステップ；
安全なトンネルを確立するために前記キーを用いる前記ステップ；及び
前記トンネルを用いて通信を行う前記ステップ；
を扱う該媒体。
【請求項１５】
請求項１３に記載のコンピュータ読取可能記憶媒体であって、前記安全なトンネルによって使用される通信プロトコルが、プロセス間通信（ＩＰＣ）、伝送コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）、名前付きパイプ、及びメール・スロットのうち１つである媒体。
【請求項１６】
請求項１３に記載のコンピュータ読取可能記憶媒体であって、前記方法が、前記ライセンス情報を暗号化するステップを更に含む媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、許可されていない複製及び／又は実行からソフトウェアを保護するためのシステム及び方法に関する。特に、本発明は、埋め込まれたライセンス情報を含むシェル・コードを介して、及び／又は保護されたアプリケーションとの通信を安全なトンネルを介して行うシェル・コードを介してソフトウェアを保護するシステム及び方法に関する。
【背景技術】
【０００２】
関連分野の記載
ソフトウェアの著作権侵害行為は、 ソフトウェアベンダーにとって目下継続中の問題である。ソフトウェアの著作権侵害行為を防止するための数多くの技術が開発されてきた。そして、こうした技術を取り入れた製品がソフトウェア・ベンダーに利用可能となっており、彼らのソフトウェア・アプリケーションを、許可されていない複製及び／又は使用から保護している。
【０００３】
あるソフトウェア・アプリケーョン保護技術では、リンク・イン・モジュールを使用しており、該モジュールは、特定の関数（例えばライセンス条件をチェックする関数）を呼び出すように元々のアプリケーション・コードを改変することを開発者に要求する。また、ある保護技術は、シェリング（ｓｈｅｌｌｉｎｇ）と呼ばれており、該シェリングは、アプリケーション・コードに対する変更を通常は必要としない。前記シェリング技術を用いて、シェルを生成するプロセスは、実行可能な元々のアプリケーションを読み込み、そして、改変された新たな実行可能なものを、いわゆるシェル化されたアプリケーションとして生成する。該アプリケーションは、元々のアプリケーションをカプセル化する保護コードの「外層」を含む。更に、シェリングを使用する場合、１以上のアプリケーション・セクション（例えば、実行可能なコード、データ、インポート・テーブル、リソース等）は、シェル・コードが生成された際に暗号化及び／又は圧縮を介して保護することができる。そして、保護されたアプリケーションを実行する際には、シェルは、保護されたコード・セクションを必要に応じて利用可能にする。
【０００４】
シェルによって典型的に実行される１つの機能は、アプリケーション用の有効なライセンスが存在していることを確かめることである。例えば、従来のシェルに基づくアプリケーション保護の解決手段では、典型的には、保護されたアプリケーションをシェル・コードでパックし、該シェル・コードは、保護されたアプリケーションとは別の位置の記憶場所にライセンス情報又はキー情報を保存する。前記ライセンス情報は、レジストリ、データベース、ファイル、隠しディスク・セクタ等に記憶することができる。１以上のアプリケーション・プログラミング・インターフェース（ＡＰＩ）を設けてライセンス情報にアクセスし、シェル・コードは、ＡＰＩを呼び出して、保護されたアプリケーションが適切にライセンス付与されているか確認することができる。
【０００５】
シェリングに潜む脆弱性の１つとして、ソフトウェア・アプリケーション・プログラムの保護は、保護の外層のみによって設けられていることが挙げられる。従って、クラッカーは、保護の外層のみをクラックすることによって、保護されたアプリケーションへのアクセスを得ることができるかもしれない。シェル化されたアプリケーションが起動されると、元々のアプリケーション・コード、及びコードの実行が、通常、固定された認識可能なパターンで進む前に、シェル・コードが実行される。クラッカーはコードの実行を追跡し（例えば、デバッガの元でシェル化されたプログラムを実行することによって）、そして、一旦コード実行の順番を理解してしまうと、クラッカーはコードを書き換えて（例えば、実行可能なシェル化されたアプリケーションにパッチをあてることにより）、ライセンス・チェックをバイパス化及び／又は無能化することができる。
【０００６】
また、リンク・イン・モジュール及びシェリングは併用することも可能である。例えば、１つのシナリオにおいては、シェル・コードは、暗号化された及び／又は圧縮されたアプリケーション・セクションに付加することができる。シェル化されたアプリケーションを最初に実行した場合、シェルは最初にコントロールを得て、セキュリティ−関連機能（例えば、アプリケーションの一貫性（ｉｎｔｅｇｒｉｔｙ）のチェック）を実行することができ、デバッガの存在についてチェックし、アプリケーション・セクションの復号化及び／又は解凍を行い、並びにアプリケーションにコントロールを渡す前にアプリケーション・プロセス（例えば、機能や再割り当てテーブルのインポート）を初期化する。また、元々のアプリケーション・コードを改変して、いくつかのシステムＡＰＩをシェル・コードへリダイレクトすることもできる。そして、コントロールがアプリケーションに渡った後で、アプリケーションは、シェル・コードとの相互作用を継続することができる。更に、自己改変コード機能をシェルによって設けることができ、例えば、特定のアプリケーション・コードの切れ端部分はランタイムで暗号化され、また、シェル・コードは、実行する前にこれらのコードの切れ端を復号化して、実行した後は再度暗号化することができる。
【０００７】
しかし、シェリングを利用する解決手段においては、シェル化されたアプリケーションのアプリケーション・コード及びシェル・コードは、異なった識別アドレスを有するメモリの異なったセクションに存在する。従来技術のシェリングによる解決手段では、アプリケーション・コード・アドレスとシェル・コード・アドレスとの違いをマスクしていない。従って、クラッカーは、保護されたアプリケーション・コードをアンパックする（取り出す）ことができる可能性があり、どのコードがシェルの一部であるかを決定したり、及びどれがシェルが保護しているアプリケーションの部分であるかを決定したりすることができる可能性がある。もしそうであるならば、クラッカーは、シェル・コードとアプリケーション・コードとの間のリンクを削除したり、又は変更することができる可能性が出てくる。例えば、プログラム実行中のコードの暗号化及び復号化は、復号化及び暗号化の指示を置き換えるノーオペレーション（ＮＯＰ）命令を用いることによって不能となる。
【０００８】
図１は、実装された従来の自己改変コードの特徴の例を示している。図に示すように、保護すべきコードを配置するためのパッキング・ツールによって２つのマクロ（ＳＨＥＬＬ＿ＣＲＹＰＴ＿ＢＥＧＩＮ及びＳＨＥＬＬ＿ＣＲＹＰＴ＿ＥＮＤ）が使用されている。コンパイル及びパッキングの後で、逆アセンブルされたコードが図２Ａ及び２Ｂに示される。
【０００９】
アプリケーションをコンパイルした後、保護するシェル・コードが生成され、実行可能なシェル化されたアプリケーションが生成される。その後、実行可能なシェル化されたアプリケーションは、クラッカーによって、ＯｌｌｙＤｂｇ等のデバッグ・ツールを用いて検証され、例えば、実行可能なシェル化されたアプリケーションやバイナリ・コードを逆アセンブルする。ＯｌｌｙＤｂｇは、バイナリ・コード分析を強化したデバッガである。該デバッガは、レジスタを追跡し、手順、ＡＰＩコール、スイッチ、テーブル、定数、及び文字列を認識し、オブジェクト・ファイルやライブラリーからルーチンの位置を決定する。こうしたツールは、リバース・エンジニアリングやプログラムのクラッキングを行うために使用することができる。
【００１０】
図２Ａは、前記分解したコードの例示的な切れ端を示している。プログラム・アドレスは各行の先頭に示してあり、いずれも００４０ＸＸＸＸの形式となっている。アドレス００４０１３Ａ２でのコードは、アドレス００４Ａ６Ｂ８１（コードの最上行）のコードを呼び出して、該コードの続きの行を復号化する。アドレス００４０１３Ａ２でのコードを実行後、コードは図２Ｂに示すように変更される。明らかに、呼び出されたアドレス００４Ａ６Ｂ８１及び００４ＡＡＤＢＢ（図２Ａ及び２Ｂ中の行００４０１３Ａ２及び００４０１３ＢＤにおける呼び出しステートメントにおける下線部）は、プログラム・コードのアドレスとは異なるアドレス・セクション位置しており、プログラム・コードのアドレスは、コードの各行の先頭部分、即ちアドレス００４０ＸＸＸＸで表されている。形式００４０ＸＸＸＸのアドレス位置は、アプリケーション・コードのアドレス空間に属しており、一方で、形式００４ＡＸＸＸＸのアドレス位置は、シェル・コードのアドレス空間に属していることクラッカーは推測できる。
【００１１】
異なるコード・セクションが図３に示されており、異なるブロックは、異なるアドレス空間に位置するコード・セクションを表す。図に示すように、異なるコード・セクションのアドレス空間は、識別可能な境界を有している。例えば、プログラムを実行している間、シェル・コードは、必要に応じて、アプリケーション・コードのセクションを復号化及び暗号化することができ、それによって、アプリケーション・コードのセキュリティを強化している。仮にそうであったとしても、クラッカーにとっては、プログラムを分析することができ、シェル・プロセスの復号化及び暗号化の存在を認識することができ、そして、例えば、ノーオペレーション（ＮＯＰ）命令を用いて暗号化指示を置き換えることによって、シェル・コードとアプリケーション・コードとの間のリンクを削除することができる。同様に、クラッカーは、ライセンス・チェックを行うプロセスの存在を認識することができ、シェル化されたアプリケーション・コードとシェル化されたアプリケーションの外側に保存されたライセンス情報との間のリンクを削除することができる。
【発明の概要】
【発明が解決しようとする課題】
【００１２】
従って、ライセンス・チェックを無効化したり、及び／又はアプリケーション・コードとシェル・コードとの間の通信を変更したりすることがクラッカーにとってより困難になるようにすることによって、クラッキングに対抗するアプリケーション保護技術に関するニーズが存在する。
【課題を解決するための手段】
【００１３】
概要
ここで開示するのは、アプリケーション・ソフトウェア・ライセンス情報をシェル中に埋め込むこと、及び前記シェルとシェル化されたアプリケーションのアプリケーション・コードとの間の通信を安全にすることについてである。シェルを生成するプロセスの間に、ライセンスをシェル・コード中に埋め込むことができる。１セットのアプリケーション・プログラミング・インターフェース（ＡＰＩ）をシェル中に設けることができ、アプリケーションは、ライセンス情報にアクセスするために、前記ＡＰＩと相互作用すべく改変することができる。アプリケーション・コード及びシェル・コードは、安全なトンネルを用いて通信を行うことができ、これらの間の通信リンクのセキュリティを強化することができる。
一側面において、本発明は以下の発明を包含する。
（発明１）
実行可能な元々のソフトウェア・アプリケーションから、前記実行可能な元々のアプリケーションと前記アプリケーション用のライセンス情報とを含む保護された実行可能なものを生成する方法であって、該方法は：
保護するべき元々のアプリケーションのためのスタートアップ・コードを生成するステップと；
前記元々のアプリケーションのコンピュータ実行可能コード、及び前記元々のアプリケーションのためのライセンス情報を入手するステップと；並びに
実行可能な保護されたアプリケーションをシェル化されたアプリケーションとして生成するステップであって、該シェル化されたアプリケーションが、前記実行可能な元々のアプリケーションとシェルとを含み、前記実行可能な元々のアプリケーションはアプリケーション・コードとして含まれ、前記シェルは、前記ライセンス情報が埋め込まれ、前記スタートアップ・コードをシェル・コードとして含むステップ；
を含み、
前記シェル化されたアプリケーションを起動した後で、前記埋め込まれたライセンス情報を使用する前記シェル化されたアプリケーションだけによって、前記元々のアプリケーションの使用を認可することができる該方法。
（発明２）
発明１に記載の方法であって、前記シェル化されたアプリケーションは：
前記シェル化されたアプリケーション内の前記アプリケーション・コードと前記シェル・コードとの間で安全なトンネルを実装するための指示；及び
前記シェル・コード内の前記ライセンス情報にアクセスするために前記アプリケーション・コード用の少なくとも１つのアプリケーション・プログラミング・インターフェース（ＡＰＩ）を実装するための指示
を含み、
該指示により、前記シェル化されたアプリケーションは実行中に以下のステップを含む方法を実行することができる該方法：
前記シェル化されたアプリケーション内の前記アプリケーション・コードから前記ＡＰＩを呼び出すステップ；
安全な通信セッション・キーを生成するステップ；
前記シェル化されたアプリケーション内の前記アプリケーション・コードと前記シェル・コードとの間で安全なトンネルを確立するために前記キーを用いるステップ；及び
前記安全なトンネルを用いて、前記アプリケーション・コードと前記シェル・コードとの間で通信を行うステップ。
（発明３）
発明２に記載の方法であって、前記シェル化されたアプリケーションが実行する前記方法は、前記アプリケーション・コードからのライセンス情報の要求を扱うための通信サービス・スレッドを起動するステップを更に含み、
前記ＡＰＩ呼び出しに応答して前記サービス・スレッドは：
セッション・キーを生成する前記ステップ；
安全なトンネルを確立するために前記キーを用いる前記ステップ；及び
前記トンネルを用いて通信を行う前記ステップ；
を扱う該方法。
（発明４）
発明２に記載の方法であって、前記安全なトンネルによって使用される前記通信プロトコルが、プロセス間通信（ＩＰＣ）、伝送コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）、名前付きパイプ、及びメール・スロットのうち１つを含む方法。
（発明５）
発明１に記載の方法であって、前記シェル化されたアプリケーションを作成する前記ステップが、前記ライセンス情報を暗号化するステップを更に含む方法。
（発明６）
発明５に記載の方法であって、前記暗号化ステップが、ベンダー特有の情報を用いて達成される方法。
（発明７）
発明６に記載の方法であって、前記ベンダー特有の情報が、アプリケーション名称及びユニークなベンダーの識別子（ＩＤ）のうち少なくとも１つを含む方法。
（発明８）
発明２に記載の方法であって、前記ＡＰＩは、ライセンスハンドルを要求するために使用され；もし、前記ハンドルをリターンすることに成功した場合には、前記アプリケーションと前記シェルとの間で連続して送られる少なくとも１つのパケットを前記安全なトンネルを介して送る方法。
（発明９）
発明８に記載の方法であって、前記ＡＰＩは、少なくとも１つのライセンス制約を満たすために呼び出され、そして、前記制約を満たさない場合には、前記ハンドルはリターンされず、前記ＡＰＩはエラーをリターンする方法。
（発明１０）
発明９に記載の方法であって、前記制約は、以下のうちの１つである方法：ユーザー名称、システム・パーティション・ボリュームのシリアル番号、ネットワーク・ケア・メディア・アクセス・コントロール（ＭＡＣ）アドレス、ホスト名称、インターネット・プロトコル（ＩＰ）アドレス、プロセッサＩＤ、オペレーティングシステム（ＯＳ）のインストール日時、ユニバーサル・シリアル・バス（ＵＳＢ）ストレージの種類若しくはシリアル番号、物理的なディスクの種類若しくはシリアル番号、ビデオ・カードの種類、ランダム・アクセス・メモリ（ＲＡＭ）のサイズ、クライアントのタイム・ゾーン、仮想マシンの検出、ターミナル・サービスの検出、デバッガの検出、試用開始日、及び試用終了日。
（発明１１）
コンピュータで実装されるソフトウェア・アプリケーション保護システムであって、
該システムは、シェル化されたアプリケーションを作成するためのシステムであり、
該シェル化されたアプリケーションは、保護された元々のアプリケーション・コードとシェル・コードとを含み、
該シェルコードは、前記元々のアプリケーション用の埋め込まれたライセンス情報を含み、
前記システムは：
スタートアップ・コードを生成するためのスタートアップ・コード・ジェネレータ；及び
前記スタートアップ・コード、実行可能な元々のソフトウェア・アプリケーション、及びアプリケーションのライセンス情報から、実行可能な保護されたアプリケーションを、シェル化されたアプリケーションとして生成するためのシェル化アプリケーション・ジェネレータ；
を備え、
ここで、前記シェル化されたアプリケーションは、アプリケーション・コードとして、前記実行可能な元々のソフトウェア・アプリケーションを含み、並びに前記スタートアップ・コード及び前記ライセンス情報をシェル・コードとして含有するシェルを含むシステム。
（発明１２）
発明１１に記載のソフトウェア保護システムであって、前記シェル化されたアプリケーションの前記アプリケーション・コードは、少なくとも１つのアプリケーション・プログラミング・インターフェース（ＡＰＩ）を呼び出すためのコードを含み、前記シェル・コードは、前記呼び出されたＡＰＩを含み、前記ライセンス情報にアクセスするために前記ＡＰＩを使用するシステム。
（発明１３）
発明１２に記載のソフトウェア保護システムであって、前記シェル化されたアプリケーションは、擬似乱数ジェネレーターを更に備え、該ジェネレータは、前記シェル化されたアプリケーション内の前記アプリケーション・コードと前記シェル・コードとの間で安全なトンネルを確立するために、ランダム化したワン・タイム・セッション・キーを生成するためのものである該システム。
（発明１４）
発明１３に記載のソフトウェア保護システムであって、
前記シェル化されたアプリケーションは、通信サービス・スレッド・ジェネレーターを更に備え、
該ジェネレーターは、通信サービス・スレッドを生成するためのものであり、
該スレッドは、前記アプリケーション・コードからの少なくとも１つのＡＰＩ呼び出しを処理し、リターンを提供するためのものであり、
前記処理が、以下のステップを含むシステム：
セッション・キーを生成するステップ；
前記シェル化されたアプリケーション内の前記アプリケーション・コードと前記シェル・コードとの間で安全なトンネルを確立するために前記キーを使用するステップ；及び
前記ＡＰＩ呼び出しに応答し、前記トンネルを使用して、パケット通信を行うステップ。
（発明１５）
コンピュータ読取可能記憶媒体であって、コンピュータが読み込んだときに前記コンピュータに以下の動作を実行させるコンピュータ指示を記録した媒体：
実行可能な元々のソフトウェア・アプリケーションから、前記実行可能な元々のアプリケーションを含み、且つ前記アプリケーション用のライセンス情報を含む保護された実行可能なものを以下のステップを含む方法によって生成する動作：
スタートアップ情報及び保護すべき元々のアプリケーション用のライセンス情報を含むシェル・コードを生成するステップ；
前記元々のアプリケーションのコンピュータ実行可能コードを手に入れるステップ；並びに
実行可能な保護されたアプリケーションを、シェル化されたアプリケーションとして生成するステップであって、該シェル化されたアプリケーションは、前記実行可能な元々のアプリケーションをアプリケーション・コードとして含み、且つシェル・コードとして前記ライセンス情報が埋め込まれているシェルを含むステップ
（前記シェル化されたアプリケーションを起動した後、前記元々のアプリケーションの使用は、前記埋め込まれたライセンス情報を使用する前記シェル化されたアプリケーションによって認可することができる）。
（発明１６）
発明１５に記載のコンピュータ読取可能記憶媒体であって、前記シェル化されたアプリケーションは：
前記シェル化されたアプリケーション内の前記アプリケーション・コードと前記シェル・コードとの間で安全なトンネルを実装するための指示；及び
前記シェル・コード内の前記ライセンス情報にアクセスするために前記アプリケーション・コード用の少なくとも１つのアプリケーション・プログラミング・インターフェース（ＡＰＩ）を実装するための指示；
を含み、
該指示により、前記シェル化されたアプリケーションは実行中に以下のステップを含む方法を実行することができる該媒体：
前記シェル化されたアプリケーション内の前記アプリケーション・コードから前記ＡＰＩを呼び出すステップ；
安全な通信セッション・キーを生成するステップ；
前記シェル化されたアプリケーション内の前記アプリケーション・コードと前記シェル・コードとの間で安全なトンネルを確立するために前記キーを用いるステップ；及び
前記安全なトンネルを用いて、前記アプリケーション・コードと前記シェル・コードとの間で通信を行うステップ。
（発明１７）
発明１６に記載のコンピュータ読取可能記憶媒体であって、前記シェル化されたアプリケーションが実行する前記方法は、前記アプリケーション・コードからのライセンス情報の要求を扱うための通信サービス・スレッドを起動するステップを更に含み、
前記ＡＰＩの呼び出しに応答して前記サービス・スレッドは：
セッション・キーを生成する前記ステップ；
安全なトンネルを確立するために前記キーを用いる前記ステップ；及び
前記トンネルを用いて通信を行う前記ステップ；
を扱う該媒体。
（発明１８）
発明１６に記載のコンピュータ読取可能記憶媒体であって、前記安全なトンネルによって使用される前記通信プロトコルが、プロセス間通信（ＩＰＣ）、伝送コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）、名前付きパイプ、及びメール・スロットのうち１つを含む媒体。
（発明１９）
発明１５に記載のコンピュータ読取可能記憶媒体であって、前記方法が、前記ライセンス情報を暗号化するステップを更に含む媒体。
【００１４】
上記一般的な記載と以下の詳細な説明の両方は、例示的及び説明的なものであり、特許請求の範囲に記載された本発明の更なる説明を行うことを意図するものである点を理解されたい。
【００１５】
添付した図面は、本発明をより深く理解するため、そして本発明の例示的な実施形態や本発明の例示的な特徴を提示するために含まれる。本明細書の記載と共に、図面は、本発明の原理を説明することを助けるために寄与し、本発明の範囲については、添付した特許請求の範囲によって規定される。
【００１６】
添付した図面において：
【図面の簡単な説明】
【００１７】
【図１】図１は、保護するシェルの生成を開始するためのコードを表す。
【図２Ａ】図２Ａは、シェル化されたアプリケーションが実行されたときに、シェル化されたアプリケーション・コードが改変された様子を示している。
【図２Ｂ】図２Ｂは、シェル化されたアプリケーションが実行されたときに、シェル化されたアプリケーション・コードが改変された様子を示している。
【図３】図３は、シェル化されたアプリケーションのコードセクション間の境界と、シェル化されたアプリケーションにおいて行われる暗号化及び復号化操作とを表す。
【図４】図４は、ブロック図であり、本明細書で開示したシステム及び方法を実践するための例示的なハードウェア環境を示す。
【図５】図５は、ソフトウェア・アプリケーションを保護するために使用される例示的なシェリング・プロセスを表す図である。
【図６】図６は、図５において表したシェリング・プロセスによって保護されるソフトウェア・アプリケーションがどのようにか実行されるを表す図である。
【図７】図７は、シェル化されたアプリケーションのシェル・コード及びアプリケーション・コード間で確立された安全なトンネルを示す。
【図８】図８は、例示的なライセンス制約要素を表す。
【図９】図９は、例示的な制約の種類（タイプ）と記述を表す。
【図１０Ａ】図１０Ａは、例示的なシェル・ライセンスのアプリケーション・プログラミング・インターフェース（ＡＰＩ）関数を表す。
【図１０Ｂ】図１０Ｂは、例示的なシェル・ライセンスのアプリケーション・プログラミング・インターフェース（ＡＰＩ）関数を表す。
【００１８】
詳細な説明
図４は、例示的なコンピュータ・システム（４００）を表しており、本明細書に開示したシステム及び方法を実施するために使用することができる。コンピュータ（４０２）は、プロセッサ（４０４）及びメモリ（例えば、ランダム・アクセス・メモリ（ＲＡＭ））（４０６）を備える。コンピュータ（４０２）は、機能的に表示装置（４２２）と連結しており、該表示装置は、Ｗｉｎｄｏｗｓ（登録商標）等の画像を、グラフィカル・ユーザー・インターフェース （ＧＵＩ）（４１８Ｂ）上にユーザーに提示する。コンピュータ（４０２）は、他の装置と連結することができ、例えば、キーボード（４１４）、マウス（４１６）、印刷装置（４２８）等が挙げられる。上記構成要素、周辺装置、及び他の装置の任意の組合せを、コンピュータ（４０２）と共に使用することができることを当業者は認識するであろう。
【００１９】
一般的に、コンピュータ（４０２）は、メモリ（４０６）に保存されたオペレーティングシステム（４０８）のコントロールの下で動作し、グラフィカル・ユーザー・インターフェース（ＧＵＩ）モジュール（４１８Ａ）を介してユーザーとの仲介を行って入力及びコマンドを受け付けて結果を提示する。ＧＵＩモジュール（４１８Ａ）は、分離したモジュールとして描かれているが、ＧＵＩ機能を実行する指示は、オペレーティングシステム（４０８）、コンピュータ・プログラム（４１０）中に存在若しくは分散することができ、又は特定目的メモリ及びプロセッサを用いて実行することができる。また、コンピュータ（４０２）は、コンパイラ（４１２）を実装しており、該コンパイラにより、プログラミング言語（例えば、Ｃ、Ｃ＋＋、Ｖｉｓｕａｌ  Ｂａｓｉｃ、Ｄｅｌｐｈｉ、又は他のプログラミング言語）で元々記述されたアプリケーション・プログラム（４１０）を、プロセッサ（４０４）読取可能コードにコンパイル（変換）することを可能にする。完了後、コンパイラ（４１２）を用いて生成した関係及びロジックを用いて、コンパイルされたアプリケーション（４１０）は、コンピュータ（４０２）のメモリ（４０６）に保存されたデータにアクセス及び操作を行う。また、コンピュータ（４０２）は、他のコンピュータ、ストレージ・デバイス等の外部装置（４３０）と通信するために、任意で通信装置（４４０）を備えており、例えば、モデム、ネットワーク・カード、又は他の装置が挙げられる。
【００２０】
一実施形態において、オペレーティングシステム（４０８）、コンピュータ・プログラム（４１０）、及びコンパイラ（４１２）を実装する指示については、コンピュータ読取可能記憶媒体（例えば、データ・ストレージ・デバイス（４２０））で具体的に実行され、該媒体として、１以上の固定された又はリムーバブルなデータ・ストレージ・デバイスを含めることができ、例えば、ハード・ドライブ、光学ディスク・ドライブ、フラッシュ・ドライブ、テープ・ドライブ等が挙げられる。更に、オペレーティングシステム（４０８）及びコンピュータ・プログラム（４１０）は、指示を含んでおり、該指示とは、コンピュータ（４０２）が読み込んで実行したときに、本明細書に開示したシステム及び方法を実施及び／又は使用するのに必要なステップをコンピュータ（４０２）に実行させるものである。また、コンピュータ・プログラム（４１０）及び／又はオペレーティングシステム（４０８）の指示は、メモリ（４０６）、データ・ストレージ・デバイス（４２０）、及び／又は外部装置（４３０）で具体的に実行されてもよく、そのことにより、本明細書に開示したシステム及び方法に従ったコンピュータ・プログラム製品又は製造物品を製造する。このように、本明細書で使用される用語「製造物品」、「プログラム・ストレージ・デバイス」、及び「コンピュータ・プログラム製品」は、任意のコンピュータ読取可能装置又はコンピュータ読取可能記憶媒体からアクセス可能なコンピュータ・プログラムを包含することを意図している。
【００２１】
図５は、例示的なコンピュータで実装されるソフトウェア・アプリケーション保護システム及びシェリング・プロセスを表す図である。スタートアップ・コード（５０４）は、スタートアップ・コード・ジェネレータ（５０５）によって生成される。保護されていない実行可能な元々のアプリケーション・コード（５００）、アプリケーション・ライセンス情報（５０２）、及びスタートアップ・コード（５０４）が、シェル化アプリケーション・ジェネレータ（５０６）に提供される。これらから、シェル化アプリケーション・ジェネレータ（５０６）は、新たな保護された実行可能なファイルをシェル化されたアプリケーション（５０８）として生成する。スタートアップ・コードは、シェルに組み込むことができ、ライセンス情報は、シェルに埋め込むことができる。埋め込まれたライセンス情報を有するシェルと、実行可能なアプリケーションとを組み合せてシェル化されたアプリケーション（５０８）を形成し、該シェル化されたアプリケーションは、シェル・コード（５１０）とアプリケーション・コード（５１２）との両方を含む。実装の際、実行可能なアプリケーションは、シェリング・プロセス中に暗号化エンジン（５０７）によって暗号化することができ、その結果、シェル化されたアプリケーションは、暗号化されたバージョンの実行可能なアプリケーションを、アプリケーション・コード（５１２）として含む。また、ライセンス情報は、暗号化エンジン（５０７）によって暗号化することもでき、その結果、シェル化されたアプリケーションは、シェル・コード（５１０）に埋め込まれたライセンス情報の暗号化バージョンを含む。
【００２２】
図６は、シェル化されたアプリケーション（５０８）の実行を表すフロー図である。ブロック（６０２）において、シェル化されたアプリケーション（５０８）の実行が開始され、シェル・コード（５１０）が実行される（６０４）。シェル（５１０）中のスタートアップ・コードは、１以上の操作を開始して、実行可能なアプリケーションの実行が許可されているかどうかを決定する。実装の際に、認可プロセスには、１以上の有効なライセンス条件（６０６）についてアプリケーションがチェックを行うことを許可することが含まれる。保護された実行可能なものの実行が許可されていない場合（例えば、ライセンス情報がアクセス可能でない場合、及び／又はライセンス情報の要求に対してシェルが正しくない応答を提供した場合）、ブロック（６０８及び６１６）に示すように、シェル化されたアプリケーション（５０８）の実行はストップする。ライセンス情報を確認したら、その後、ブロック（６１４）に示すようにアプリケーション・コード（５１２）が実行される。また、必要であれば、他の操作を行うこともでき、例えば、以下の操作が挙げられる：データ・リンク・ライブラリ（ＤＬＬ）を再配置したり；、必要なインポート・テーブル等（６１０）をセットアップしたり；、及び／又はブロック（６１２）に示すように、暗号化して実行可能なアプリケーション・コードを生成している場合には、アプリケーション・コード（５１２）を復号化したりすること。
【００２３】
図７は、シェル化されたアプリケーション（７００）を表しており、該アプリケーションにおいて、アプリケーション・コード（７０２）は、シェル・コード（７０６）に埋め込まれたライセンス情報（７０４）にアクセスする。前述したように、ライセンス情報（７０４）は、パッキング・プロセスの間、即ち、シェル化されたアプリケーション（７００）を生成している間に、シェル・コード（７０６）中に埋め込まれる。シェル・ライセンス・ライブラリ（７０８）をシェル（７０６）に提供することができ、アプリケーション（７０２）が使用する目的でライセンス情報（７０４）にアクセスするための１セットのＡＰＩを含む。シェリング・プロセスを実行する前に、ソフトウェア・セキュリティ・モジュール（呼び出し可能なセキュリティ・チェックとも呼ばれるが）は、アプリケーション（７０２）に挿入することができ、例えば、ライセンス情報に関連した要求を行う目的で、シェル（７０６）と通信を行うことができる。アプリケーション中のソフトウェア・セキュリティ・モジュールのセットは、安全なクライアント・ライブラリ（７１０）を構成する。シェル化されたアプリケーション（７００）が起動されると、該アプリケーションは通信サービス・スレッド（７１２）を開始し、該スレッドは、アプリケーションからのライセンスに関連した要求を取り扱う。アプリケーション（７０２）は、安全なクライアント・ライブラリ（７１０）を利用して、ライセンス情報（７０４）を要求するＡＰＩを呼び出す。通信サービス・スレッド（７１２）は、シェル・ライセンス・ライブラリ（７０８）中のシェル・ライセンス・ＡＰＩにアクセスし、該ライブラリは、必要に応じて、要求を満たすべくライセンス情報（７０４）にアクセスしてリターンする。
【００２４】
ライセンスに関連した要求、応答、及び他のメッセージが、アプリケーション（７０２）とシェル（７０６）との間で送られる。通信サービス・スレッドにより、アプリケーション（７０２）とシェル（７０６）との間で、安全なトンネル（７１４）をセットアップすることができる。例えば、安全なクライアント・ライブラリ（７１０）は、１以上のソフトウェア・セキュリティ・モジュールを安全な通信のために含むことができる。シェル化されたアプリケーション（７００）は、擬似乱数ジェネレーターや安全なクライアント・ライブラリ（７１０）を含むことができ、及び／又は、通信サービス・スレッド（７１２）は、ランダム化されたワン・タイム・セッション・キーをそこから生成することができ、アプリケーションとシェルとの間で安全なトンネル（７１４）を介して通信が行われるメッセージの安全性を確保する。メッセージは、任意の適切なプロセス間通信（ＩＰＣ）方法（例えば、名前付きパイプ、ＴＣＰ／ＩＰ、メールボックス等）を使用することができる。
【００２５】
例示的な実施形態において、ライセンス情報は、様々な種類のうち１以上の特性を含むことができ、各特性ついては１以上の要素（エレメント）を含む。例として、特性の種類として、データ、楕円曲線暗号（ＥＣＣ）、新暗号規格（ＡＥＳ）、及び制約特性を含むことができる。また、更なる又は他の特性種類も使用できる。
【００２６】
データ特性種類に関して、アプリケーション開発者は、例えば、アプリケーションが使用するためのデータを、データ特性要素に保存することができる。アプリケーションは、ＡＰＩを呼び出して、保存されたデータを読み込む（例えば、他の例示的なＡＰＩとともに後述された例示的なＳＣＬ＿ＦｅａｔｕｒｅＲｅａｄ  ＡＰＩ）。ＥＣＣ特性は、ＥＣＣの秘密鍵を含むことができ、楕円曲線署名スキーム（例えば、ＥＣＣＳＨ等）を用いてメッセージ・コンテンツに署名するために使用することができる。アプリケーションは、ＡＰＩ（例えばＳＣＬ＿ＦｅａｔｕｒｅＳｉｇｎ）を呼び出すことができ、メッセージ・データに署名を行い、その後、別のＡＰＩ（例えば、ＳＣＬ＿ＦｅａｔｕｒｅＶｅｒｉｆｙ）を呼び出して、アプリケーション中で署名の結果を確認する。同様に、ＡＥＳ特性は、ＡＥＳアルゴリズム鍵を含むことができ、アプリケーションは、ＡＰＩ（例えば、ＳＣＬ＿ＦｅａｔｕｒｅＱｕｅｒｙ）を呼び出すことができ、応答を得て、該応答について、アプリケーション中に保存された以前の応答と比較を行う。また、アプリケーションは、ＡＰＩ（例えば、ＳＣＬ＿ＦｅａｔｕｒｅＥｎｃｒｙｐｔ及びＳＣＬ＿ＦｅａｔｕｒｅＤｅｃｒｙｐｔ）を呼び出すことができ、それぞれアプリケーション・データを暗号化及び／又は復号化する。最後に、制約特性はライセンス制約（例えば、アプリケーションを実行するために満たさなければならない制約、又は特定のアプリケーション機能が使用可能になる前に満たさなければならない制約）を提供する。シェル・ライセンス・ＡＰＩは、アプリケーション・コードによって呼び出すことができ、シェル・コードに埋め込まれたライセンス情報にアクセスする。
【００２７】
例示的な実施形態において、このようなライセンス情報は、シェル・コードとアプリケーション・コードとの間で通信が行われるメッセージ中で、長さが最大２５６バイトのタイプ−長さ−値（ＴＬＶ）要素として、使用されるデータ通信プロトコルの範囲内で、エンコードすることができる。こうした各要素は、ライセンス情報の一片のみ、又は「制約特性」を含む。ＴＬＶ要素は、少なくとも３種類のフィールドを含む：タイプ、長さ、及び値。タイプ・フィールドは、該要素によって表されるライセンス情報の種類を表す数値コードである。長さフィールドは、要素のサイズを表し、又は、値フィールドはバイトで表される。値フィールドは、サイズが変動可能なフィールドであり、ライセンス制約特性情報を含む。
【００２８】
また、各ライセンス制約要素では、追加のフィールドが存在してもよい。図８は、例示的なライセンス制約要素のフィールドを表す。前述したタイプ、長さ及び値のフィールドに加えて、各要素は、特性ＩＤフィールドやチェック・マーク・フィールドを含む。特性ＩＤフィールドは、要素が表す情報のソースを特定する。チェック・マーク・フィールドは、データの一貫性をチェックするために使用される。シェル・コードに埋め込まれたライセンス情報は、保存する際に暗号化することができ、アクセスする際に復号化することができる。
【００２９】
図９は、例示的な特性タイプ及びＩＤ並びに関連する特性の記述をリストアップしており、ライセンスの制約として使用することができる。図に示すように、３種利の制約が表示されている：ロック制約；環境制約；及びトライアル制約。各制約は、もし前記制約を満たさない場合に、アプリケーションが起動したり特定の機能を実行したりするのを防止するために使用することができる。ロック制約は、アプリケーションが実行されているコンピュータや、該コンピューターのユーザーに関連し、例えば以下の例が挙げれられる：ユーザー名称；シェル化されたアプリケーションを実行するコンピュータ中のネットワーク・カードのネットワーク・カード・メディア・アクセス・コントロール（ＭＡＣ）アドレス；、又はプロセッサＩＤ；、又はディスク・シリアル番号等。環境制約は、シェル化されたアプリケーションが実行されている稼動環境に関係し、例えば、デバッガの存在を検出したか否かが挙げられる。トライアル制約は、シェル化されたアプリケーションの利用を試用期間に制限することに関係する。図９に列挙した制約は、例示的な目的のためのものであり、他の制約タイプ、ＩＤ、及び記述も使用することができる。
【００３０】
図７に関連して上述したように、シェル・ライセンス・ライブラリ（７０８）は、アプリケーション（７０２）が使用してライセンス情報（７０４）にアクセスするために１セットのＡＰＩを含む。図１０Ａ及び１０Ｂは、例示的なＡＰＩの名称及び例示的なＡＰＩの形式を記述しており、下記の通り、シェル・コード中に埋め込まれたライセンス情報にアクセスするために、アプリケーションが呼び出すことができる。例示的なＡＰＩ名称において、「ＳＣＬ」は、Ｓｅｃｕｒｅ  Ｃｌｉｅｎｔ  Ｌｉｂｒａｒｙ（安全なクライアント・ライブラリ）の単純な略語である。
【００３１】
ＳＣＬ＿ＯｐｅｎＬｉｃｅｎｓｅ−該ＡＰＩは、シェル化されたアプリケーション内のシェル・コードとアプリケーション・コードとの間で安全なトンネルを作成するため、及びライセンス・ハンドルを得るために使用することができる。もし、該ＡＰＩによるリターンが成功した場合、連続的な通信パケットについて安全なトンネルを介して通信が行われる。もし、ライセンスが制約特性を持っており、該制約特性を満たすことができない場合には、エラーがリターンされるであろう。
【００３２】
ＳＣＬ＿ＦｅａｔｕｒｅＱｕｅｒｙ−該ＡＰＩは、新暗号規格（ＡＥＳ）特性ＩＤ及びクエリー・データに基づいて暗号化された応答を生成するために使用することができる。
【００３３】
ＳＣＬ＿ＦｅａｔｕｒｅＲｅａｄ−該ＡＰＩは、データ特性を介して保存されたデータを読み込むために使用することができる。
【００３４】
ＳＣＬ＿ＦｅａｔｕｒｅＥｎｃｒｙｐｔ−該ＡＰＩは、提供された平文データをＡＥＳ特性ＩＤに基づいて暗号化するために使用することができる。
【００３５】
ＳＣＬ＿ＦｅａｔｕｒｅＤｅｃｒｙｐｔ−該ＡＰＩは、提供された暗号データをＡＥＳ特性ＩＤに基づいて復号化するために使用することができる。
【００３６】
ＳＣＬ＿ＦｅａｔｕｒｅＶｅｒｉｆｙ−該ＡＰＩは、ＥＣＣ特性ＩＤに基づいてＥＣＣ特性の公開鍵を使用してデジタル署名されたコンテンツを確認するために使用することができる。
【００３７】
ＳＣＬ＿ＦｅａｔｕｒｅＳｉｇｎ−該ＡＰＩは、ＥＣＣ特性ＩＤに基づいてアルゴリズムを使用して、コンテンツに署名を行うために使用することができる。
【００３８】
ＳＣＬ＿ＣｌｏｓｅＬｉｃｅｎｓｅ−該ＡＰＩは、安全なトンネルを閉じて、ライセンス・ハンドルを開放するために使用することができる。
【００３９】
本明細書に記載したシステム及び方法の１つの利点として、プロセスをパッキングする前に、テスト目的で仮想シェル・ライセンスを提供できることがあげられる。仮想シェル・ライセンスは、全てのシェルライセンス機能をエミュレートすることができるサービスの１種である。デバッグや開発のプロセス中は、ライブラリは、前記サーバーにアクセスすることができ、シェルを追加した後では、アプリケーション中のライブラリは、シェル・コード中のライセンスにアクセスすることができる。例示的な操作において、本明細書に記載したシステム及び方法は、各シェル化されたアプリケーションのインスタンスをユニークにするために使用することができ、例えば、様々な圧縮又は暗号化の方法及び／又は組合せを介して行われる。また、ライセンス情報は、１以上のベンダーに関連する因子（例えば、ベンダーＩＤ又はアプリケーション名称）を用いて暗号化することができる。また、ライセンス情報は、１以上の非対称アルゴリズムによって署名することができる。
【００４０】
上述した例示的な実施形態に加えて、本発明の思想又は範囲を離れることなく、様々な他の改変及び変更を行うことができる。従って、添付した特許請求の範囲及びその均等物の範囲内に属するものであれば、本発明は、こうした改変及び変更もカバーすることを企図している。
【図１】
0005596159.tif 000002
【図２Ａ】
0005596159.tif 000003
【図２Ｂ】
0005596159.tif 000004
【図３】
0005596159.tif 000005
【図４】
0005596159.tif 000006
【図５】
0005596159.tif 000007
【図６】
0005596159.tif 000008
【図７】
0005596159.tif 000009
【図８】
0005596159.tif 000010
【図９】
0005596159.tif 000011
【図１０Ａ】
0005596159.tif 000012
【図１０Ｂ】
0005596159.tif 000013