(57)【要約】バイナリコードおよび随意には関連データを含むソフトウェアアプリケーションを、元の形式からより安全な形式に変換するシステムおよび方法を提供する。この方法は、アプリケーションにバイナリトランスミューテーションの組み合わせを適用しかつトランスミューテーション間に相互依存性を生成かつ配置することによりトランスミューテーションをインターロックするステップを含み、トランスミューテーションは、アプリケーションにとって不可逆の変更となる。異なるタイプのトランスミューテーションが、アプリケーションの様々な粒度で適用される。トランスミューテーションは、アプリケーションコードおよびインプラントされたコードにも適用される。その結果、元のソフトウェアアプリケーションに意味的には等価だが、静的および／動的攻撃に耐性がある変換されたソフトウェアアプリケーションが得られる。【選択図】  図３
2012526310.tif 000002
【特許請求の範囲】
【請求項１】
バイナリアプリケーションコードを含むバイナリソフトウェアアプリケーションを、元の形から、そのアプリケーションの全体または一部に、タンパリング、リバースエンジニアまたはリフティングを試みる静的および／または動的攻撃に耐性がある安全な形に変換する方法であって、前記方法が、
Ａ）前記バイナリアプリケーションコードに一連の変更を行って、変更されたバイナリアプリケーションコードを生成することにより、構築時フェーズにおいて、前記バイナリソフトウェアアプリケーションに対する複数のバイナリトランスミューテーションの組み合わせを実行するステップを含み、前記変更が、構築時に前記変更されたバイナリアプリケーションコードと絡みあった新しいコードをインプラントすることを含み、さらに、
Ｂ）トランスミューテーションの間に相互依存性を生成して配置することによって、前記トランスミューテーションをインターロックするステップと、
Ｃ）実行の間、トランスミューテーションの前記組み合わせとインターロッキングを、保護対象のバイナリアプリケーションコードとインプラントされたコードの両方に適用するステップと、
Ｄ）バイナリ保護が、保護されるアプリケーションから分離されることがないように、元のアプリケーションに意味論的に等価だが、前記インターロックされたトランスミューテーションを含む保護されるアプリケーションを生成するステップとを含む、方法。
【請求項２】
前記複数のバイナリトランスミューテーションの組み合わせが、前記バイナリアプリケーションコードの連続的に入れ子になった層に適用される１以上の層間トランスミューテーションを含む、請求項２に記載の方法。
【請求項３】
ステップ（Ｂ）が、インターロッキングデータを付加することを含み、かつステップ（Ｄ）が、有効なインターロッキングデータの存在なしには、正確に実行できない保護されるアプリケーションを生成することを含む、請求項２に記載の方法。
【請求項４】
ステップ（Ｂ）が、適正な実行のために、１つのトランスミューテーションが、それ以前のトランスミューテーションの存在を必要とすることを含む、請求項３に記載の方法。
【請求項５】
ステップ（Ｂ）が、１つのトランスミューテーションに、第２のトランスミューテーションのための入力として使用される出力を生成させることを含む、請求項４に記載の方法。
【請求項６】
ステップ（Ｂ）が、相補の特徴を有するトランスミューテーションを使用することを含む、請求項１から５のいずれかに記載の方法。
【請求項７】
前記連続的に入れ子になった層が、アプリケーションを含むモジュール、モジュールを含む機能、機能を含む命令の基本ブロックおよび個々の機械命令を含む、請求項２から６のいずれかに記載の方法。
【請求項８】
前記バイナリトランスミューテーションの組み合わせが、前記バイナリアプリケーションコードの層に適用される１以上の層内トランスミューテーションをさらに含む、請求項２から７のいずれかに記載の方法。
【請求項９】
前記１以上の層内トランスミューテーションが、構築時と実行時の両方において１以上の層に適用される完全性検証（ＩＶ）トランスミューテーションを含む、請求項８に記載の方法。
【請求項１０】
前記１以上の層内トランスミューテーションが、１以上の層に適用されるアンチデバッグトランスミューテーションを含む、請求項８または９に記載の方法。
【請求項１１】
バイナリトランスミューテーションが、静的構築時プロセスを含み、該プロセスが、
ｉ）保護対象のアプリケーションのソースコード内にトランスミューテーション実行コードを挿入して、変更されたソースコードを生成するステップを含み、この変更ソースコードがコンパイルされて、前記バイナリアプリケーションコードが生成され、さらに
ｉｉ）相補の変更を保護対象のバイナリアプリケーションに挿入して、バイナリアプリケーションへの前記相補の変更が存在しない限り、アプリケーションソースコードへの変更が、正しく作用しないようにするステップと、
ｉｉｉ）保護対象のアプリケーションのバイナリ形式に対してバイナリトランスミューテーションに特定的なオペレーションを実行しかつ実行時に必要とされる関連の静的インターロッキングデータを生成するステップとを含み、
バイナリトランスミューテーションが、実行時プロセスをさらに含み、該プロセスが、
ａ）トランスミューテーションが除去されるか改変されれば、アプリケーションの元の意味が、保存されないような態様で、アプリケーションに挿入されたトランスミューテーション実行コードを実行するステップと、
ｂ）トランスミューテーション実行コードを実行しながらさらに必要な実行時インターロッキングデータを動的に生成するステップと、
ｃ）前記関連の静的および動的インターロッキングデータを使用して、適宜、インターロッキング依存性を検証するステップと、
ｄ）保護されるアプリケーションを実行しながら、１つのトランスミューテーションが、第２のトランスミューテーションの実行に適したアプリケーション状態を生成するのに必要になるように指定された順序で、一連の複数のトランスミューテーションを実行するステップとを含む、請求項２から１０のいずれかに記載の方法。
【請求項１２】
バイナリトランスミューテーションがホワイトボックス変換プロセスを適用し、該プロセスが、構築時に、
ｉ）ホワイトボックス変換構築時ファシリティを用いて、ホワイトボックス変換キーおよびオペレーションコードを生成かつアセンブルするステップと、
ｉｉ）ホワイトボックス変換構築時キーでホワイトボックス変換オペレーションを行うことにより、前記バイナリコードおよび関連の重要情報を入力の形式から出力の形式に変換するステップと、
ｉｉｉ）実行時に、ホワイトボックス変換実行時キーで、ホワイトボックス変換逆オペレーションを行うことによって、ホワイトボックス変換実行時ファシリティを用いて、バイナリコードおよび関連の重要情報を出力の形式から、入力の形式に戻す変換を行うステップとを含む、請求項１から１１のいずれかに記載の方法。
【請求項１３】
ホワイトボックス変換構築時ファシリティが、
ａ）ホワイトボックス変換生成機と、
ｂ）ホワイトボックス変換構築時キーマスタと、
ｃ）ホワイトボックス変換オペレーションマスタと、
ｄ）ホワイトボックス変換構築時マネジャとを含み、かつ
ホワイトボックス変換実行時ファシリティが、
ｅ）ホワイトボックス変換実行時キーマスタと、
ｆ）ホワイトボックス変換逆オペレーションマスタと、
ｇ）ホワイトボックス変換実行時マネジャとを含む、請求項１２に記載の方法。
【請求項１４】
ホワイトボックス変換生成機が、元のキーデータと、ユーザが供給する変換アルゴリズム選択とを受け入れ、かつホワイトボックス変換構築時キーデータ（意味的オペレーションコードとともに）とこれに結合する対応のホワイトボックス変換実行時キーデータ（逆オペレーションコードとともに）の組み合わされたペアを生成する、請求項１３に記載の方法。
【請求項１５】
対応のホワイトボックス変換逆オペレーションコードが実行されている間、予期しない漏洩を防止するために、ホワイトボックス変換実行時キーデータおよびオペレーションコードが生成された後に元のキーデータおよび重要な変換情報を隠すステップをさらに含む、請求項１４に記載の方法。
【請求項１６】
複数の変換を適用し、かつ前記ホワイトボックス変換オペレーションマスタが複数のホワイトボックス変換オペレーションを記憶し、前記ホワイトボックス構築時キーマスタが複数のホワイトボックス変換キーを記憶し、かつ前記ホワイトボックス変換実行時キーマスタが複数のホワイトボックス変換実行時キーを記憶し、かつ前記ホワイトボックス変換逆オペレーションマスタが、複数のホワイトボックス変換逆オペレーションを記憶する、請求項１３または１４に記載の方法。
【請求項１７】
前記ホワイトボックス変換構築時キーマスタが、ホワイトボックス構築時マネジャによりアクセスされ、
前記ホワイトボックス変換オペレーションマスタが、複数のホワイトボックス変換意味的オペレーションコードを安全かつ有効に編成かつ配置し、
前記ホワイトボックス変換オペレーションマスタが、ホワイトボックス変換構築時マネジャによってのみアクセスされ、
前記ホワイトボックス変換構築時マネジャが、様々なホワイトボックス変換構築時キーとそれらの対応のホワイトボックス変換意味的オペレーションコードの記憶、回収およびマッチングを調整し、
それにより各ホワイトボックス変換プロセスが、ホワイトボックス変換構築時マネジャを使用し、実行時に対応するホワイトボックス変換構築時キーを用いて適切なホワイトボックス変換意味的オペレーションを起動し、
前記ホワイトボックス変換実行時キーマスタが、複数のホワイトボックス変換実行時キーを安全かつ有効に編成し、記憶しかつ配置し、
前記ホワイトボックス変換実行時キーマスタが、ホワイトボックス変換実行時マネジャによりアクセスされ、
前記ホワイトボックス変換逆オペレーションマスタが、複数のホワイトボックス変換逆オペレーションコードを安全かつ有効に編成しかつ配置し、
前記ホワイトボックス変換逆オペレーションマスタが、ホワイトボックス変換実行時マネジャによりアクセスされ、
前記ホワイトボックス変換実行時マネジャが、様々なホワイトボックス変換実行時キーとそれらに対応するホワイトボックス変換逆オペレーションコードの記憶、回収およびマッチングを調整し、
それにより、各ホワイトボックス変換プロセスが、ホワイトボックス変換実行時マネジャを使用し、実行時に対応のホワイトボックス変換実行時キーを用いて適切なホワイトボックス変換逆オペレーションを起動する、請求項１３に記載の方法。
【請求項１８】
最も普及した暗号アルゴリズムを含む広範な計算アルゴリズムを、前記ホワイトボックス変換生成機により実現されるホワイトボックス変換アルゴリズム用に選択するステップをさらに含む、請求項１３に記載の方法。
【請求項１９】
暗号化アルゴリズムが選択され、暗号キーがユーザにより提供されると、ホワイトボックス変換生成機が、
ｂ）ホワイトボックス変換オペレーションコードとして、ホワイトボックス暗号オペレーションコードを生成し、
ｃ）ホワイトボックス変換逆オペレーションコードとして、ホワイトボックス復号オペレーションコードを生成し、
ｄ）ホワイトボックス変換構築時キーデータとして、ホワイトボックス暗号キーデータを生成し、
ｅ）ホワイトボックス変換実行時キーデータとして、ホワイトボックス復号キーデータを生成する、請求項１４に記載の方法。
【請求項２０】
異なる連続して入れ子になった層の異なるトランスミューテーション用に、異なるホワイトボックス構築時キーおよび実行時キーならびにオペレーションコードを生成しかつアセンブルする、請求項１２から１９のいずれかに記載の方法。
【請求項２１】
方法が、保護されるアプリケーションが正しく機能するために両方の変更の存在が必要になるよう、バイナリ―コードに対して行われる変更に関連して作用する変更をソースコードに対して施すよう構成されるインターロッキング保護を付加し、かつインターロッキングが、トランスミューテーションのいずれかまたはすべてを除去するのが難しくなるような態様で、層間および層内トランスミューテーションの両方を含み、トランスニューテーションがトランスミューテーションを入れ子にすることによりインターロックされ、各入れ子になったトランスミューテーションが、各々がカプセル化する層に対する保護をさらに提供し、一方でカプセル化層からの保護をさらに受けかつ１以上の層内トランスミューテーションをさらに含み、各層内トランスミューテーションが、保護されるアプリケーションの１つの層内のまたは保護されるアプリケーション全体のための重複する保護を提供する、請求項２から２０のいずれかに記載の方法。
【請求項２２】
ＩＶトランスミューテーションが構築時ＩＶ処理から構成され、該処理が、
ａ）ＩＶに特定的なホワイトボックス変換キーおよびオペレーションコードを生成しかつアセンブルするステップと、
ｂ）構築時のアプリケーションバイナリコードのハッシング情報を表す静的ＩＶバウチャデータを計算するステップと、
ｃ）前記特定的ホワイトボックス変換キーおよびオペレーションコードを使用することによりＩＶに特定的なホワイトボックス変換を適用して、前記アプリケーションの前記バウチャデータを変換し、バウチャデータへの不正アクセスおよび攻撃を防止するステップと、
ｄ）前記専用ホワイトボックス変換キーおよびオペレーションコードに対応する隠しホワイトボックス変換実行時キーデータをアセンブルするステップとを含み、
ＩＶトランスミューテーションが、保護されるアプリケーションの始まりおよび実行の間の実行時アクションから構成され、該アクションが、
ｅ）ＩＶライブラリが起動される間、ＩＶイニシャライザーがホワイトボックス変換実行時ファシリティと対話して、ＩＶに特定的なホワイトボックス変換逆オペレーションをホワイトボックス変換実行時キーデータに対して行うことにより、ホワイトボックス変換されたＩＶデータをプレーンＩＶデータに逆変換し、かつプレーンデータを保護されたデータ構造にロードするステップと、
ｆ）ＯＳによりメモリにロードされるバイナリコードの動的ＩＶバウチャデータを計算し、かつ動的ＩＶバウチャデータを保護されるデータ構造に記憶するステップを含み、前記動的ＩＶバウチャデータが実行時のアプリケーションバイナリコードのハッシング情報を表し、さらに
ｇ）保護された形式で提示される、前記静的ＩＶバウチャデータを前記動的ＩＶバウチャデータに対して比較することにより、保護対象のアプリケーションコードの完全性をチェックするステップとを含む、請求項９から２１のいずれかに記載の方法。
【請求項２３】
ＩＶトランスミューテーションのアプリケーションが、ユーザが構築時フェーズにアプリケーションのソースコードの選択された場所に、ＩＶＡＰＩ呼び出しを挿入できるようにし、その後、実行時に実行される構築時のアプリケーションに対して、自動的に、自動完全性検証エンジンを付加することにより、指定されたオプションのユーザ指定により決定される完全性のチェックを含む、請求項２２に記載の方法。
【請求項２４】
ＩＶトランスミューテーションが、バイナリアプリケーションコード自体の完全性をチェックしかつコードに適用されるいずれか他のバイナリトランスミューテーションのコードの完全性もチェックする、請求項２２または２３に記載の方法。
【請求項２５】
ＩＶトランスミューテーションの実行が、コールバック機能を起動することによりアプリケーションにインターロックされる、請求項２１から２４のいずれかに記載の方法。
【請求項２６】
構築時フェーズの間、コールバック機能が付加されかつＩＶトランスミューテーションの準備の間パラメータとしてコールバック機能をＩＶＡＰＩ呼び出しに挿入することによりＩＶトランスミューテーションの実行とインターロックされる、請求項２５に記載の方法。
【請求項２７】
前記バイナリトランスミューテーションの１つが、アプリケーションモジュールを保護するモジュールトランスミューテーション（ＭＴ）を含み、これは、前記アプリケーションモジュールに対する静的攻撃を防止するために構築時および実行時のＭＰ処理により実行可能なアプリケーションおよび／または動的に共有されるライブライモジュールであることが可能で、
構築時のＭＴ処理が、
ａ）ホワイトボックス変換構築時ファシリティと対話して、ＭＴに特定的なホワイトボックス変換キーおよびオペレーションを生成かつアセンブリするステップを含み、前記アセンブルされたＭＴに特定的なホワイトボックス変換キーおよびオペレーションがＭＴに特定的なホワイトボックス変換構築時キーデータおよびホワイトボックス変換オペレーションならびに対応するホワイトボックス変換実行時データおよびホワイトボックス逆オペレーションを含み、さらに、
ｂ）保護対象のアプリケーションモジュールのバイナリコードを圧縮して、圧縮されたバイナリコードを構成するステップと、
ｃ）前記ＭＴに特定的なホワイトボックス変換構築時キーデータおよびホワイトボックス変換オペレーション（ステップａ）からの）を使用することにより、前記ＭＴに特定的なホワイトボックス変換オペレーションを適用して前記圧縮バイナリコードを変換し、ホワイトボックス変換されたモジュールを形成するステップと、
ｄ）（ステップｃ）からの）前記ホワイトボックス変換されたモジュールと、隠し形式で（ステップａ）でアセンブルされた）前記ホワイトボックス変換実行時キーデータおよび逆オペレーションを含むレジデントセキュリティモジュール（ＲＳＭ）とを組み合わせることにより、前記アプリケーションモジュールのための安全にパッケージされたアプリケーションモジュールを生成するステップとを含み、
モジュールトランスミューテーション（ＭＴ）が、実行時処理からさらに構成され、該処理が、
ｅ）ＯＳが、安全にパッケージされたアプリケーションモジュールをロードしＲＳＭにおけるコードの実行をトリガしている間、ＲＳＭが、ホワイトボックス変換実行時ファシリティと対話して、ホワイトボックス変換実行時キーデータを使用してＩＶに特定的なホワイトボックス変換逆オペレーションを実行することにより、圧縮されたアプリケーションモジュールにホワイトボックス変換されたモジュールを逆変換し、
ｆ）圧縮されたアプリケーションモジュールに対して脱圧縮オペレーションを適用して、前記アプリケーションモジュールのバイナリコードを得るステップと、
ｇ）前記アプリケーションモジュールをメモリ内へマッピングおよびローディングしかつ制御をアプリケーションのエントリポイントに渡すステップとを含む、請求項１２から２６のいずれかに記載の方法。
【請求項２８】
前記ＲＳＭにＡＤＤおよびＩＶトランスミューテーションの一方または両方を適用することにより前記ＲＳＭが保護される、請求項２７に記載の方法。
【請求項２９】
前記バイナリトランスミューテーションの１つが、アプリケーションモジュール内の個々の機能への静的および動的攻撃を防止するため、構築時および実行時のＦＴ処理により前記機能を保護する１以上の機能トランスミューテーション（ＦＴ）を含み、機能トランスミューテーションが、構築時のＦＴ処理から構成され、該処理が、
ａ）ホワイトボックス変換構築時ファシリティと対話して、保護対象の機能の各々に独自の、ＦＴに特定的なホワイトボックス変換キーおよびオペレーションコードを生成しかつアセンブルするステップと、
ｂ）機能の各々に特定的なホワイトボックス変換構築時キーデータおよびホワイトボックス変換オペレーション（ステップａ）からの）を使用して、ＦＴに特定的なホワイトボックス変換を適用することにより前記機能の各々を含むバイナリコードを変換することで、変換された機能を生成するステップと、
ｃ）各変換された機能に対するすべての呼び出しがエントリ機能ハンドラを介して行われ、一方で機能からのリターンがその出口機能ハンドラを介して行われるように、前記変換された機能ごとに、エントリ機能ハンドラおよび出口機能ハンドラをインストールするステップと、
ｄ）ホワイトボックス変換された機能と、ステップｂ）に対して使用したホワイトボックス変換構築時キーデータおよびホワイトボックス変換オペレーションに対応するステップａ）においてアセンブルされた隠しホワイトボックス変換実行時キーデータおよび逆オペレーションと、すべての保護される機能用にステップｃ）においてインストールされたすべてのエントリ機能ハンドラおよび出口機能ハンドラとを組み合わせることにより、レジデントセキュリティモジュール（ＲＳＭ）およびすべての保護される機能を含む前記アプリケーションモジュールのための安全にパッケージされたアプリケーションモジュールを準備するステップを含み、
機能トランスミューテーション（ＦＴ）が、各ＦＴが保護する機能のための実行時アクションからさらに構成され、該アクションが、
ｅ）アプリケーションモジュールの実行中に、保護される機能が起動されると、そのエントリ機能ハンドラがまず実行されて、ホワイトボックス変換実行時ファシリティと対話し、その機能に特定的なホワイトボックス変換実行時キーデータおよびオペレーションコードを使用して、ホワイトボックス変換逆オペレーションを実行することにより、ホワイトボックス変換された機能コードを逆変換するステップと、
ｆ）実行メモリ内へ逆変換機能をロードするステップと、
ｇ）実行の制御を機能に渡し、かつ機能を出る時には、その機能の出口ハンドラを起動するステップとを含む、請求項１２から２８のいずれかに記載の方法。
【請求項３０】
機能ごとに、前記ＲＳＭが、リターンの前に機能のメモリの足跡をクリアまたはスクランブルする、請求項２９に記載の方法。
【請求項３１】
ＩＶまたはＡＤＢトランスミューテーションの一方または両方が、ＩＶ、ＡＤＢまたは両方のトランスミューテーションを暗示的にエントリ機能ハンドラおよび出口機能ハンドラに適用することによって、保護されている機能に適用されるＦＴとインターロックされるように層内保護が起動される、請求項２９または３０に記載の方法。
【請求項３２】
追加の層内トランスミューテーション、すなわちブロックトランスミューテーション（ＢＴ）が、前記機能に対しての静的、動的および自動的攻撃に対するより強い保護を提供するために、かつ特定の実施例において、構築時および実行時にＢＴ処理を行うことによりアプリケーションモジュール内の個々の機能内のコードの基本ブロックを保護し、ブロックトランスミューテーションが、構築時のＢＴ処理から構成され、該処理が、
ａ）前記機能の制御フローおよびデータフローを解析して、ブロック情報および機能の構造を識別かつ決定するステップと、
ｂ）保護されているブロックの各々に到達する全実行路が、そのエントリブロックハンドラをまず起動し、その後、ブロックコードに到達し、最終的に出口ブロックハンドラを介してブロックを去るように、ブロックの各々にエントリブロックハンドラおよび出口ブロックハンドラをインストールすることで各ブロックを増強するステップと、
ｃ）ホワイトボックス変換構築時ファシリティと対話して、保護対象のブロックの各々に独自の、ＢＴに特定的なホワイトボックス変換キーおよびオペレーションコードを生成かつアセンブリするステップと、
ｄ）（ステップｃ）で生成かつアセンブルされた）ブロックの各々に特定的なホワイトボックス変換構築時キーデータおよびホワイトボックス変換オペレーションを使用することにより、ＢＴに特定的なホワイトボックス変換を適用して、（ステップｂ）で処理される）基本ブロックの各々の増強されたバイナリコードを変換するステップと、
ｅ）前記エントリブロックハンドラおよび出口ブロックハンドラを有する前記変換されたブロックを含むレジデントセキュリティモジュール（ＲＳＭ）と、アセンブルされた前記隠しホワイトボックス変換実行時キーデータおよび逆オペレーションとを含む前記アプリケーションモジュールために、安全にパッケージされたアプリケーションモジュールを準備するステップとを含み、
ブロックトランスミューテーション（ＢＴ）が、１つの特定のＦＴ保護される機能の全ての保護されるブロックのための実行時アクションからさらに構成され、該アクションが、
ｆ）アプリケーションモジュール実行の間、保護されるブロックを含む保護機能が起動されるたびに、同じ機能に属するすべてのブロックが、メモリにおいてランダムに転置され、さらに
ｇ）保護されるブロックを実行しようとするたびに、そのエントリブロックハンドラが起動され、これが、ホワイトボックス変換実行時ファシリティと対話して、ホワイトボックス変換実行時キーデータおよびブロックに特定的なオペレーションコードを使用して、ホワイトボックス変換逆オペレーションを実行することにより、ホワイトボックス変換されたブロックを逆変換し、
ｈ）指定された実行メモリに逆変換されたブロックをロードするステップと、
ｉ）ロードされたブロックに実行制御を渡すステップとを含み、ブロックから出る時には、出口ブロックハンドラが（随意に）メモリの足跡をクリアまたはスクランブルし、実行が次のブロックに渡り、保護される機能が出るまで、ステップＢ、ＣおよびＤを繰り返す、請求項２９から３１のいずれかに記載の方法。
【請求項３３】
ブロックトランスミューテーション（ＢＴ）が、入力セキュリティオプションを介してユーザにより指定されるブロック転置の頻度に基づく、メモリにおける動的に逆変換されたブロックのランダムコード位置転置をさらに含む、請求項３２に記載の方法。
【請求項３４】
ブロックトランスミューテーション（ＢＴ）が、出口ブロックハンドラが、ホワイトボックス変換実行時ファシリティと随意に対話し、ブロックに特定的なホワイトボックス変換実行時キーデータおよびオペレーションコードを使用して、ホワイトボックス変換オペレーションを実行することにより、ホワイトボックス逆変換されたブロックを再変換できるようさらに構成される、請求項３２に記載の方法。
【請求項３５】
ブロックトランスミューテーションが、各ブロックのエントリハンドラおよび出口ブロックハンドラに対してＩＶおよび／またはＡＤＢトランスミューテーションの一方または両方を適用することによりさらに保護される、請求項３３または３４に記載の方法。
【請求項３６】
命令トランスミューテーション（ＩＴ）が、前記機能に対する静的、動的および自動的攻撃に対する非常に強力な保護を提供するために、構築時および実行時のＩＴ処理により、アプリケーションモジュール内の個々の機能内のコードの単一命令を保護する、請求項２７から３５のいずれかに記載の方法。
【請求項３７】
バイナリコードを含むソフトウェアアプリケーションおよび随意には関連データを、元の形式から、アプリケーションの全部または一部に対し、タンパリング、リバースエンジニアまたはリフティングを試みる静的および／または動的攻撃に耐性があるより安全な形式で保護するシステムであって、前記システムが、
ａ）ソフトウェアアプリケーションのための安全なバイナリライブラリを提供して、ユーザが保護を望むコード位置で指定のトランスミューテーション実行挙動を起動することと、
ｂ）前記アプリケーションを含むモジュール、機能、ブロックおよび命令等の様々な粒度の異なるタイプのトランスミューテーションをユーザが適用するオプションを提供することと、
ｃ）構築時ツールセットを提供して、前記アプリケーションに対するバイナリトランスミューテーションの準備を行いかつツールセットを使用して、前記アプリケーションの元の実行を、安全な実行に変換することと、
ｄ）元のアプリケーションに意味的に等価でかつ前記インターロックされたトランスミューテーション実行を含む保護されるアプリケーションを生成するステップを含み、これらトランスミューテーション実行が、トランスミューテーションの準備ともインターロックされるので、バイナリ保護は、保護されるアプリケーションと分離されないようになり、
ｅ）保護されるアプリケーションの実行の間、インターロックされたトランスミューテーションの実行を含む前記保護されるアプリケーションの安全な実行が、静的かつ動的に攻撃を阻止するようにかつその実行のいずれの時においても、実行メモリ内に提示されるバイナリコードの非常に小さな部分のみがクリアな形式であるよう実行を保護するシステム。
【請求項３８】
ｃ）、ｄ）およびｅ）が、トランスミューテーションの準備と実行とをインターロックすることによりインターロッキングデータおよびコードを生成し、配列しかつ付加し、かつ有効なインターロッキングデータおよびコードの存在がなければ、正しく実行することができない保護されるアプリケーションを生成することと、
異なるトランスミューテーションの実行間をインターロックすることによりインターロッキングデータおよびコードを生成し、配列しかつ付加し、かつ有効なインターロッキングデータおよびコードの存在なしでは正確に実行することができない保護されるアプリケーションを生成することと、
複数のトランスミューテーションに、前記アプリケーションに対する複数層の保護を生成させることを含み、
ｂ）が、１以上の粒度に対して１を超える数のトランスミューテーションを重ねることをさらに含む、請求項３７に記載のシステム。
【請求項３９】
各々ＩＶ、ＡＤＢまたはその両方により保護される相補な特徴を有する複数の入れ子になった保護の層を、入れ子になった相補のトランスミューテーションにより生成させることをさらに含む請求項３８に記載のシステム。
【請求項４０】
粒度をいくつかに分けかつ現在の粒度に対する現在のトランスミューテーションについてＩＶチェックの結果が成功と判断された場合にのみ粒度の次の部分についてトランスミューテーション実行を呼び出すことをさらに含む、請求項３９に記載のシステム。
【請求項４１】
トランスミューテーションの間でフェイルアンドサクセスコールバック機能性を提供することをさらに含み、所与の粒度に対するトランスミューテーションのホワイトボックス変換逆オペレーションが、もう１つのトランスミューテーションのホワイトボックス変換逆オペレーションが成功した時のみに進められる、請求項３７から４０のいずれかに記載のシステム。
【請求項４２】
前記トランスミューテーションが前記コードおよび関連データの双方に適用される、いずれかの先行の請求項に記載の方法／システム。
【請求項４３】
プロセッサにより実行されると、ここに開示および／または請求される方法のいずれかを前記プロセッサに実行させる、機械で読み出し可能かつ実行可能な命令を、有形的に記憶する機械で読み出し可能な媒体を含むコンピュータプログラム製品。
【請求項４４】
ホワイトボックス変換によりホワイトボックス実行時キーデータを２以上の部分に分割することができ、１以上の部分が、内部でかつ保護されるアプリケーションに埋め込まれ、かつ残り部部分が外部でかつ１以上の別の記憶形式で記憶される、請求項３７に記載のシステム。
【請求項４５】
外部ホワイトボックス変換実行キー部が、装置に別々に準備されることを可能にすることを含み、保護されるアプリケーションが、内部ホワイトボックス実行時キー部で、装置の準備時の間にインストールされる、請求項４４に記載のシステムおよび方法。
【請求項４６】
ホワイトボックス変換実行時キーマスタにより起動される特定のホワイトボックス実行時オペレーションを設けて、異なる別々のホワイトボックス実行時キーデータ部を使用可能な形式に再構築することをさらに含む請求項４４に記載のシステムおよび方法。
【請求項４７】
保護されるアプリケーションとホワイトボックス変換実行時キーのこれらの別々に準備される外部部分との間にインターロック依存性を創出してセキュリティを以下のように向上させることをさらに含み、すなわち、
ａ）保護されるアプリケーションおよび外部キー情報が分配されかつ準備されるいずれかの期間の間、攻撃がより困難になりかつセキュリティリスクが低減されるように、攻撃者がキー全体を入手するためには、ホワイトボックスキーの複数の部分を破る必要があり、
ｂ）保護されるアプリケーションおよびホワイトボックス変換実行時キーの異なるインスタンスがキーデータ分割の異なる割合を有し得るため、実行者がキーの複数の異なる部分の比率を変更することによって多様性を導入することができ、
ｃ）保護されるアプリケーションのインスタンスを１つの装置とインターロックするかまたは保護されるアプリケーションの複数のインスタンスを装置の組にインターロックすること含み、該装置の組は、保護されるアプリケーションのインスタンスが単一の装置に対するのと同じキーデータフォーマットを共有し、いずれか不正でかつマッチングされた装置に対しては、装置からの意味的に等価なアプリケーションのすべてまたは一部のコードリフティングが機能しない、請求項４４に記載のシステムおよび方法。
【請求項４８】
プロビジョニングが以下のような形をとり、すなわち、
ｄ）製造時に製造者によってまたはプロビジョニング時にサービスプロバイダによって装置上にホワイトボックス変換実行時キーの外部部分がインストールされ、
ｅ）初回または毎回アプリケーションが起動されると、ネットワークを介してホワイトボックス変換実行時キーの外部部分がダウンロードされ、
ｆ）アプリケーションが起動されると、装置に接続されるスマートカード等のユーザが供給する装置からホワイトボックス変換実行時キーの外部部分を取得し、かつ
ｇ）アプリケーションが起動されると、ユーザによりホワイトボックス変換実行時キーの外部部分を手動でエンターするという形をとる、請求項４７に記載のシステムおよび方法。
【請求項４９】
バイナリアプリケーションコードを含むバイナリソフトウェアアプリケーションを、元の形から、アプリケーションの全部または一部に対し、タンパリング、リバースエンジニアまたはリフティングを試みる静的および／または動的攻撃に耐性がある安全な形に変換する方法であって、前記方法が、
前記バイナリアプリケーションを解析して、１以上のバイナリトランスミューテーションを適用できる前記アプリケーションの１以上のコンポーネントを決定するステップを含み、前記コンポーネントがコンポーネントコードを含み、さらに
前記コンポーネントコードへ一連の変更を行って、変更されたコンポーネントコードを生成し、前記変更が、前記コンポーネントコードに１以上のＷＢ変更を適用しかつ前記バイナリアプリケーションのコードへの前記変更と絡み合された新しいコードをインプラントするステップと、
前記変更間に相互依存性を生成かつ配置することにより前記変更をインターロックするステップと、
保護対象のバイナリアプリケーションコードおよびインプラントされたコードの両方に前記変更を適用しかつインターロックを行って、元のアプリケーションに意味的に等価だが、バイナリ保護が保護されるアプリケーションと分離されないように前記インターロックされた変換を含むトランスミュートされたアプリケーションを生成するステップとを含む、方法。
【請求項５０】
バイナリコードと随意には関連のデータを含むソフトウェアアプリケーションを元の形式から、アプリケーションの全部または一部に対し、タンパリング、リバースエンジニアまたはリフティングを試みる静的および／または動的攻撃に耐性があるより安全な形式で保護する方法であって、前記方法が、
ｃ）構築時ツールセットを付与して、前記アプリケーションにバイナリトランスミューテーションの準備を行いかつツールセットを使用することにより前記アプリケーションの元の実行を安全な実行に変換するステップと、
ｄ）インターロックされたトランスミューテーション実行を含む、元のアプリケーションと意味的に等価な保護されるアプリケーションを生成するステップを含み、該実行がトランスミューテーション準備ともインターロックされて、それによりバイナリプロテクションが保護されるアプリケーションから分離されなくなっており、さらに
前記保護されるアプリケーションの安全な実行が、その実行のいずれの時においても、バイナリコードの小さな部分のみがクリアな形式になっているように構成されるインターロックされたトランスミューテーション実行を含む、方法。
【請求項５１】
ステップａ）が、トランスミューテーション準備および実行間をインターロックすることによりインターロッキングデータおよびコードを生成、配列かつ付加するステップと、有効なインターロックキングデータおよびコードの存在なしでは、正確に実行できない保護されつアプリケーションを生成するステップとを含む、請求項５０に記載の方法。
【請求項５２】
前記インターロッキングデータおよびコードを生成、配列かつ付加するステップが、異なる粒度の異なるトランスミューテーションの実行間をインターロックしかつ有効なインターロッキングデータおよびコードの存在なしでは、正確に実行できない保護されるアプリケーションを生成するするステップと、
複数のトランスミューテーションにより、前記アプリケーションに対する複数層の保護を生成させるステップとを含む、請求項５１に記載の方法。
【請求項５３】
前記異なる粒度の異なるトランスミューテーションが、入れ子になった相補的トランスミューテーションにより、各々ＩＶ、ＡＤＢまたはその両方により保護される相補的特徴を備える複数の入れ子になった保護の層を生成させる、請求項５２に記載の方法。
【請求項５４】
ａ）ソフトウェアアプリケーションのための安全なバイナリライブラリを提供して、ユーザが保護を希望するコード位置での指定されたトランスミューテーション実行の挙動を起動するステップと、
ｂ）前記アプリケーションを含むモジュール、機能、ブロックおよび命令等の様々な粒度で異なるタイプのトランスミューテーションを適用するユーザのためのオプションを提供するステップとを含む、請求項５０から５３のいずれかに記載の方法。
【請求項５５】
バイナリアプリケーションコードを含むバイナリソフトウェアアプリケーションを、元の形式からそのアプリケーションの全体または一部に、タンパリング、リバースエンジニアまたはリフティングを試みる静的および／または動的攻撃に耐性がある安全な形式に変換する方法であって、前記方法が、
Ａ）前記バイナリアプリケーションコードに一連の変更を行って変更されたバイナリアプリケーションコードを生成することによって、構築時フェーズにおいて、前記バイナリソフトウェアアプリケーションに複数のバイナリ変換の組み合わせを行うステップを含み、前記変更が、構築時の前記変更されたバイナリアプリケーションコードと絡み合された新しいコードをインプラントすることを含み、さらに
Ｂ）変換間の相互依存性を生成しかつ配置することにより前記変換をインターロックするステップと、
Ｃ）保護対象のバイナリアプリケーションコードとインプラントされたコードの両方に、前記変換の組み合わせとインターロックとを適用し、元のアプリケーションと意味的に等価だが、バイナリ保護が保護されるアプリから分離しないように、前記インターロックされた変換を含むトランスミュートされたアプリケーションを生成するステップとを含む、方法。
【請求項５６】
ステップＡ＋Ｂが、保護対象のアプリケーションのバイナリ形式に対してバイナリトランスミューテーションに特定的なオペレーションを行いかつ実行時に必要とされる関連の静的インターロッキングデータを生成するステップを含み、
バイナリトランスミューテーションが、実行時プロセスをさらに含み、該プロセスが、
ａ）トランスミューテーションが除去または改変された場合には、アプリケーションの元の意味が保存されないような態様で、アプリケーションに挿入されるトランスミューテーション実行コードを実行するステップと、
ｂ）トランスミューテーション実行コードを実行しながらさらに必要な実行時インターロッキングデータを動的に生成するステップと、
ｃ）前記関連の静的かつ動的インターロッキングデータを使用して、適宜インターロッキング依存性を検証するステップと、
ｄ）保護されるアプリケーションを実行しながら、１つのトランスミューテーションが、第２のトランスミューテーションの実行に適したアプリケーション状態を生成するために必要になるように指定された順序で、一連の複数のトランスミューテーションを実行するステップとを含む、請求項５５に記載の方法。
【請求項５７】
いずれか所与のトランスミューテーションが、ＩＶおよびＡＤＢルーチンに、それらの付随するインターロックファシリティを挿入することを含み、プログラムを、その後ＷＢ技術で変換される機能、ブロックおよび命令に分解が、実行のための特定的環境（エントリハンドラおよび出口ハンドラ、ＲＳＭその他を含む）を必要とするため、実際的には不可逆的になっている、請求項に５６に記載の方法。
【請求項５８】
バイナリアプリケーションコード含むバイナリソフトウェアアプリケーションを、元の形式からそのアプリケーションの全体または一部に、タンパリング、リバースエンジニアまたはリフティングを試みる静的および／または動的攻撃に耐性がある安全な形式に変換する方法であって、前記方法が、
前記バイナリアプリケーションを解析して、バイナリトランスミューテーションを適用できる前記アプリケーションのコンポーネントを決定するステップを含み、各バイナリトランスミューテーションが、
前記コンポーネントコードに対して変換を適用することにより前記コードに変更を行いかつ前記変換されたコンポーネントコードと絡み合されたトランスミューテーション実行コードを付加的にインプラントするステップと、
前記変更と前記アプリケーションコードの他の局面（主要なアプリケーションまたは他のコンポーネントを含み得る）との間に相互依存性を生成かつ配置することにより前記変更をインターロックするステップと、
保護対象のバイナリアプリケーションコードおよびインプラントされたコードの両方に前記変更およびインターロッキングを適用して元のアプリケーションと意味的に等価だが、バイナリ保護が、保護されるアプリケーションから分離されることがないように前記インターロックされた変換を含むトランスミュートされたアプリケーションを生成するステップとを含む、方法。
【請求項５９】
バイナリトランスミューテーションが、実行時に必要な関連の静的インターロッキングデータを生成することを含み、
バイナリトランスミューテーションが、実行時プロセスを含み、該プロセスが、
ａ）トランスミューテーションが除去されるか改変された場合にはアプリケーションの元の意味が保存されないような態様で、アプリケーションに挿入されたトランスミューテーション実行コードを実行するステップと、
ｂ）トランスミューテーション実行コードを実行しながらさらに必要とされる実行時インターロッキングデータを動的に生成するステップと、
ｃ）前記関連の静的および動的インターロッキングデータを使用して、適宜、インターロッキング相互依存性を検証するステップと、
ｄ）保護されるアプリケーションを実行しながら、１つのトランスミューテーションが、第２のトランスミューテーションの実行に適したアプリケーション状態を生成するために必要になるように指定された順序で、一連の複数のトランスミューテーションを実行するステップとを含む、請求項５８に記載の方法。
【請求項６０】
動的機能ローディングをさらに含む、先行の請求項のいずれかに記載の方法。
【請求項６１】
記載の動的機能ローディングの方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、暗号化技術およびコンピュータのセキュリティに関連する。より詳細には、本発明は、バイナリアプリケーションを静的および動的攻撃から守るための方法に関する。この出願は、２００９年５月６日提出の米国仮出願第ＵＳ６１／１７５９４５号の優先権を主張し、同出願の全文をここに引用により援用する。
【背景技術】
【０００２】
情報技術の時代には、直接的攻撃に対し広くオープンになっている数十億ものデバイスに展開されるアプリケーションがますます増えることになる。攻撃を阻止かつ防止することは、ソフトウェア設計者の間でも、主要な関心事として浮上するようになった。今日のソフトウェアは、ますます高度化するツールを用いてクラッキングされており、事前の知識がほとんどまたは全く無しで、平均的なユーザが取り扱いに注意を要する情報にアクセスできるようになっている。ブラックボックスにおいて保護されるプロセスが動作していれば出力は安全である（すなわち、ブラックボックスの中で動作するプロセスは攻撃者には閲覧されない）とする従前のセキュリティモデルは、すでに通用しない。攻撃の性質によっては、攻撃者がセキュリティの脆弱性を利用することで、１以上のセキュリティ属性が侵されることになる。
【０００３】
典型的には、デバッグのような活動が、ハッカーにアプリケーションの全体的または詳細な動作を理解させてしまう攻撃のもっとも一般的な原因である。ハッカーがひとたび重要なデータおよびコードに対するアクセスを得てしまうと、次の攻撃を集中する攻撃ポイントを見つけるのは時間の問題である。その後、攻撃者は、クローンプログラムを実行するか、プログラムのバイナリを改悪するか、または取り扱いに慎重を要するまたは著作権のある情報に対するアクセスを単に認める（重要なコードの一部または全部を複製する）ことにより、システムのセキュリティを危険にさらす。
【０００４】
さらに、現代のＯＳは、メモリリフティング攻撃等の他の攻撃に悪用される特徴を含む。攻撃者は、ＯＳが提供するタスクマネジメントアプリケーションプログラムインターフェース（ＡＰＩ）を利用することができる。たとえば、すべてのマルチプロセスＯＳに特徴的な処理を一時停止するＡＰＩにより、攻撃者は、処理がメモリで凍結されている間、重要な情報にアクセスすることができる。
【０００５】
ソフトウェアのセキュリティがこれらすべての攻撃に対処する必要がある一方で、現行のセキュリティエンジンは、多くのセキュリティ要素を無視し、かつ特定のセキュリティ上の関心事に排他的に集中して他のセキュリティ上の脅威を完全に無視するセキュリティエンジンとなっている。
【０００６】
たとえば、アンチデバッグ技術によりデバッガの存在を検出することはできるが、メモリリフティング攻撃に対してアプリケーションを保護することはできない。暗号化技術は、重要な情報を隠すが、本質的かつ自動的に、デバッギング行為を阻止するわけではない。他の有益な例は、アプリケーションをタンパリング攻撃に対して保護する完全性の検証であるが、これも静的または動的いずれの解析攻撃を阻止することもできない。一般的なパラダイムとしては、各セキュリティ技術は、１以上のいくつかの攻撃に対処するが、攻撃領域の全範囲に対処するわけではない。
【０００７】
すなわち、様々な攻撃領域に対する保護を提供するセキュリティシステムを提供することが望ましい。さらに、アプリケーションのソースコードを変換するために、ソフトウェアの難読化および変換技術が提案されている。しかしながら、本発明は、ソースコードが構築された後を含むバイナリレベルでの変換の適用を含む強化されたセキュリティ手段を提案する。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の目的は、従前のセキュリティシステムの１以上の欠点を除去または緩和することである。
【課題を解決するための手段】
【０００９】
本発明の１局面によれば、バイナリコードと随意には関連のデータを含むソフトウェアアプリケーションを保護する方法であって、元の形式から、アプリケーションの全部または一部に対し、タンパリング、リバースエンジニアまたはリフティングを試みる静的および／または動的攻撃に耐性があるより安全な形式にする方法が提供され、前記システムが、
ａ）構築時ツールセットを用意して、前記アプリケーションにバイナリトランスミューテーションの準備を行いかつツールセットを使用することにより前記アプリケーションの元の実行を安全な実行に変換するステップと、
ｂ）元のアプリケーションに意味的に等価な保護されるアプリケーションを生成するステップとを含み、該アプリケーションが、トランスミューテーションの準備ともインターロックされるインターロックされたトランスミューテーション実行を含み、それによりバイナリ保護が保護されるアプリケーションから分離されないようになっている。
この文脈において、「意味的に等価」という用語は、「同様の結果または出力を生成する」と言う意味に解釈されるべきである。
【００１０】
トランスミューテーションとは、変換が、一般に、その変換によって施された変更を逆にする逆オペレーションが存在するオペレーションを含み、一方トランスミューテーションが、単純な逆オペレーションが存在しない、より大きな変更を表すと言う意味で、単純な変換を超えるものを含むアプリケーションへの変更である。トランスミューテーションは、２つのフェーズを含む。すなわち、
構築時において、一連の変更をアプリケーションコードに対して適用しかつ変更されたアプリケーションコードと組み合わされた新しいコードをインプラントするトランスミューテーション準備と、
インプラントされたコードを含む保護されるアプリケーションの実行の際に、準備されたトランスミューテーション保護を行うトランスミューテーション実行とがそれである。
【００１１】
（Ａ）に規定される異なるタイプのトランスミューテーションがアプリケーションの異なる粒度で適用され、粒度は、アプリケーションを含むモジュール、モジュールを含む機能、機能を含む命令の基本ブロックおよび個々の機械命令を含む。異なるタイプのトランスミューテーションは、モジュールトランスミューテーション、機能トランスミューテーション、ブロックトランスミューテーション、命令トランスミューテーション、完全性検証（ＩＶ）トランスミューテーションおよびアンチデバッグトランスミューテーションを含む。トランスミューテーションは、１以上のホワイトボックストランスミューテーション組み込む。
【００１２】
保護プロセスは２つのフェーズに分割することができる。すなわち、
（Ａ）ソフトウェアアプリケーションが、実行の前に分析され静的に変換される構築時フェーズと、
（Ｂ）変換されたソフトウェアアプリケーションが、メモリ内で実行される実行時フェーズである。
【００１３】
本発明の一局面によれば、バイナリアプリケーションコードを含むバイナリソフトウェアアプリケーションを、元の形から、そのアプリケーションの全体または一部に、タンパリング、リバースエンジニアまたはリフティングを試みる静的および／または動的攻撃に耐性がある安全な形に変換する方法が提供され、前記方法が、
前記バイナリアプリケーションコードに一連の変更を行って、変更されたバイナリアプリケーションコードを生成することにより、構築時フェーズにおいて、前記バイナリソフトウェアアプリケーションに対する複数のバイナリトランスミューテーションの組み合わせを実行するステップを含み、前記変更が、構築時に前記変更されたバイナリアプリケーションコードと絡みあった新しいコードをインプラントすることを含み、
トランスミューテーションの間に相互依存性を生成して配置することによって、前記トランスミューテーションをインターロックするステップと、
トランスミューテーションの前記組み合わせとインターロッキングを、保護対象のバイナリアプリケーションコードとインプラントされたコードの両方に適用するステップと、
バイナリ保護が、保護されるアプリケーションから分離されることがないように、元のアプリケーションに意味的に等価で前記インターロックされたトランスミューテーションを含む保護されるアプリケーションを生成するステップとを含む。
【００１４】
本発明の他の局面によれば、バイナリアプリケーションコードを含むバイナリソフトウェアアプリケーションを、元の形から、アプリケーションの全部または一部に対し、タンパリング、リバースエンジニアまたはリフティングを試みる静的および／または動的攻撃に耐性がある安全な形に変換する方法が提供され、前記方法が、
前記バイナリアプリケーションを解析して、１以上のバイナリトランスミューテーションを適用できる前記アプリケーションの１以上のコンポーネントを決定するステップを含み、前記コンポーネントがコンポーネントコードを含み、さらに、
前記コンポーネントコードへ一連の変更を行って、変更されたコンポーネントコードを生成するステップを含み、前記変更が、前記コンポーネントコードに１以上のＷＢ変換を適用しかつ前記バイナリアプリケーションのコードへの前記変更と絡み合わされた新しいコードをインプラントすることを含み、さらに、
前記変更間に相互依存性を生成かつ配置することにより前記変更をインターロックするステップと、
保護対象のバイナリアプリケーションコードおよびインプラントされたコードの両方に前記変更を適用しかつインターロックを行って、元のアプリケーションに意味的に等価で、しかしバイナリ保護が保護されるアプリケーションと分離されないように前記インターロックされた変更を含むトランスミュートされたアプリケーションを生成するステップとを含む。
【００１５】
好ましくは、前記保護されるアプリケーションの安全な実行は、その実行のいずれの時においても、バイナリコードの小さな部分のみがクリアな形式（clear form）になっているように構成されるインターロックされたトランスミューテーション実行を含む。
【００１６】
構築時には、システムは、ホワイトボックス変換構築時ファシリティと対話して、ホワイトボックス変換キーおよびオペレーションコードを生成かつアセンブルしかつバイナリコードおよび関連の重要情報を、ホワイトボックス変換構築時キーを使用してホワイトボックス変換オペレーションを行うことにより入力形式から出力形式に変換することができる。
【００１７】
実行時には、システムは、ホワイトボックス変換実行時ファシリティと対話して、ホワイトボックス変換実行時キーを使用してホワイトボックス変換逆オペレーションを行うことにより、バイナリコードおよび関連の重要情報を変換して、出力形式から入力形式へ戻すことができる。
【００１８】
本発明の他の局面および特徴は、添付の図面を参照し、以下の発明の詳細な実施例の説明を読むことにより、当業者には明らかになるであろう。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施例による、自動ホワイトボックス（ＷＢ）コード生成のＷＢプロセスを示す図である。
【図２】本発明の実施例による、変換および逆変換プロセスのための自動ホワイトボックスキー生成を示す図である。
【図３】本発明の実施例による、本件のバイナリ保護システムを示す図であって、その主要なセキュリティコンポーネントが、インターロックされたセキュリティ層として保護されるバイナリアプリケーション内へ自動的に挿入されるところを示す図である。
【図４】本発明の実施例による、プリリンク保護プロセスの一部としてトランスコーダの使用を含む保護プロセスの模式図である。
【図５】本発明の実施例による、ソースコード変換が、保護対象のアプリケーションにより使用されるコードおよびバイナリ保護技術を含むコードの両方に適用できる様子を示す図である。
【図６】本発明の実施例による、構築時処理後の保護されるバイナリアプリケーションモジュールの構造を示す図である。
【図７】本発明の実施例による、入力がバイナリアプリケーションである保護フローを示す図である。
【図８】本発明の実施例による、ブロックトランスミューテーションコンポーネントの保護フローを示す図である。
【図９】本発明の実施例による、モジュールトランスミューテーションコンポーネントの保護プロセスを示す図である。
【図１０】本発明の実施例による、保護されるアプリケーションの挙動を改変しようと試みるタンパリング攻撃を検出する完全性検証コンポーネントを有する保護プロセスを示す図である。
【図１１】本発明の実施例による、実行時において保護されるアプリケーションが安全に実行される様子を示す概略図である。
【図１２】本発明の実施例による、実行時実行におけるモジュールトランスミューテーション（ＭＴ）コンポーネントを示す図である。
【図１３】本発明の実施例による、完全性検証コンポーネントの実行時プロセスを示す図である。
【図１４】本発明の実施例による、自動ＩＶ呼び出しの例を示す図であって、ＩＶがある場合とない場合両方の実行時機能処理を示す図である。
【図１５】本発明の実施例による、実行時実行における、機能トランスミューテーション（ＦＴ）コンポーネントを示す図である。
【図１６】本発明の実施例による、ブロックトランスミューテーション（ＢＴ）の実行時プロセスを示す図である。
【図１７】本発明の実施例による、実行の様々な瞬間における保護されるアプリケーションの例を示す図である。
【図１８】本発明の実施例による、動的機能ローディングの構築時プロセスを示す図である。
【図１９】本発明の実施例による、動的機能ローディングの実行時プロセスを示す図である。
【図２０】本発明の実施例による、動的機能ローディングのプロセスの第１のフェーズの例を示す図である。
【図２１】本発明の実施例による、動的機能ローディングのプロセスの第２のフェーズの例を示す図である。
【図２２】本発明の実施例による、動的機能ローディングのプロセスの第３のフェーズの例を示す図である。
【図２３】本発明の実施例による、動的機能ローディングのプロセスの第４のフェーズの例を示す図である。
【図２４】本発明の実施例による、呼び出しアプリケーションが、機能を安全に消去するよう要求できる最終フェーズを示す図である。
【図２５】本発明の実施例による、コードトランスミューテーションおよびインターロッキングによる動的機能ローディングのための構築時プロセスの例を示す図である。
【図２６】本発明の実施例による、ＢＴおよびＩＶコンポーネントのインターロックされた形を示す図である。
【図２７】本発明の実施例による、保護時間において、隠し復号化キーが分解されるキー分割の例を示す図である。
【図２８】本発明の実施例による、連続的に入れ子になった層を構成するプログラムの異なる粒度またはコンポーネントを示す図である。
【図２９】本発明の実施例による、連続的に入れ子になった層およびそれらにトランスミューテーションが適用される様子を示す図である。
【発明を実施するための形態】
【００２０】
本発明は、一般に、バイナリコードおよび随意には関連のデータを含むソフトウェアアプリケーションを元の形式からより安全な形式に変換するためのシステムおよび方法を提供する。この方法は、アプリケーションに対するバイナリトランスミューテーションの組み合わせを実行することと、実際には、アプリケーションに対する不可逆な変更であるトランスミューテーション間に相互依存性を生成しかつ配置することによりトランスミューテーションをインターロックすることを含む。実際には、必要な難しさのレベルに関して、インターロックされたトランスミューテーションの組み合わせが、実際に不可逆であるアプリケーションへのトランスミューテーションを生成する。というのも、インターロックすることで、適用される変換をリバースエンジニアすることが難しくなるだけでなく、変換の逆のことを適用するだけでは元のコードは得られないからである。より明確に述べると、不可逆ということは、抽象的な意味で、プロセス全体を逆にすることができないことを必ずしも意味するのではなく、むしろ、現実的には、トランスミューテーションを逆にすることで、保護の対象である元のプログラムそのままを回復することにはならないことを意味する。様々なタイプのトランスミューテーションをアプリケーションの様々な粒度または層で適用することができる。トランスミューテーションは、アプリケーションコードおよびインプラントされたコードにも同様に適用することができる。結果として、意味的には元のソフトウェアアプリケーションと等価だが、静的および／または動的攻撃に耐性がある変換されたソフトウェアアプリケーションが得られる。なお、「インプラントする」という用語は、このプロセスが、一般にコードを単純に挿入するより多くのことを含むことを明確にするために使用する。「インプラントする」とは、挿入された新しいコードが、変更後のアプリケーションにおいて使用可能になるように、元のコードに置換および／または改変を行うことを含む。
【００２１】
上記のとおり、本発明は、単純な逆変換が起こらないようにインターロックされた様々な粒度または層で変換の組み合わせを適用する。図２８は、連続的に入れ子になった層を構成する、これら様々な粒度を示す。アプリケーション６０１には、１以上のモジュール６１０を含むことが可能で、このモジュールが、１以上の機能６２０をカプセル化し、この機能が１以上のブロック６３０をカプセル化し、このブロックが１以上の命令６４０をカプセル化することが可能である。本発明の実施例は、様々な変換をこれら連続して入れ子になった層の各々に対して適用し、かつまた層間の相互依存性も付加する。
【００２２】
発明の実施例は、セキュリティアーキテクチャにおけるギャップを軽減するポストリンクバイナリ保護システム内の様々な技術を結合または相互接続する。ホワイトボックス暗号化技術に関連して、本発明の実施例は、保護対象のコードに適用されるバイナリトランスミューテーションの組み合わせを含む防護方法を可能にする。ホワイトボックス暗号化技術の実施例については、同一所有者の米国特許第７３９７９１６号および米国特許出願第１１／０２０３１３号（これら文献の全文をここに引用により援用）および同一所有者の米国特許第６５９４７６１号、６７７９１１４号および６８４２８６２号ならびに米国特許出願第１１／０３９８１７号（これらの全文をここに引用により援用）に開示される。
【００２３】
これらのトランスミューテーションについては以下のとおりである。
・アンチデバッグトランスミューテーション（ＡＤ）は、保護されるアプリケーションがデバッガにアタッチされているかどうかを確認。
・保護されるアプリケーションが、メモリ内で実行される間、ブロックトランスミューテーション（ＢＴ）は、動的コード解析および攻撃からのバイナリ保護を提供する。その主な役割は、バイナリアプリケーションをホワイトボックス変換されたブロックに分割し、その後、実行時における要求の際に、変換を取り除き、かつその後実行の後にそれらを破壊することから構成される。したがって、現在実行中のコードのブロックのみが露出される。
・機能トランスミューテーション（ＦＴ）が、ブロックトランスミューテーションとして働くも、多くの機能ブロックを含み得る機能に対してホワイトボックス変換を適用し、実行時に、機能を起動しながら変換を除去しかつ機能からのリターン後その機能を破壊する。
・完全性検証トランスミューテーション（ＩＶ）は、保護されるアプリケーションのインメモリコードセグメントまたはそのコンポーネントのいずれかが、タンパリングを受けていないことかつ／またはアプリケーションのコンポーネントのディスクイメージが改変されていないことを保証する。
・モジュールトランスミューテーション（ＭＴ）は、バイナリ―コードがメモリにロードされる前に静的コード解析および攻撃からのバイナリ保護を提供する。
・命令トランスミューテーション（ＩＴ）は、命令により、実行前に変換が取り除かれなければならないように、ホワイトボックス変換を用いて個々の命令を改変する。さらに、これらの変更は、保護される命令自体を変更することさえ含み得る（たとえば、エントリハンドラおよび出口ハンドラを挿入するかまたは命令により操作されたアドレスをその元の値から変更するよう要求することにより）。
【００２４】
実施例によりセキュリティオプションの組を選択することができ、それにより、これらのトランスミューテーションが、好ましくはどのようにインターロックされた形のバイナリアプリケーションモジュールに自動的に適用されるかが決定される。インターロックというのは、アプリケーション内に依存性を作りだし、それにより最終的な変換されたアプリケーションにおいて、インターロックされた２つのコンポーネントが、各々他方の存在を必要とするようになっていることを意味する。たとえば、完全性の検証呼び出しを、ブロックまたは機能の各々の実行において挿入して、それによりそのブロックまたは機能が、ＩＶ呼び出しの成功なしには、適正に機能しなくなりかつＩＶ呼び出しは、ブロックまたは機能がタンパリングされていない場合にのみ成功するようになっている。さらに、セキュリティコンポーネント自体が、他のセキュリティコンポーネントにより保護される（すなわち、完全性検証は、機能トランスミューテーションエンジンを保護し、かつブロックトランスミューテーションは、完全性の検証を保護する）。
【００２５】
アンチデバッグを除いては、上記のトランスミューテーションは、ホワイトボックス変換を使用して、セキュリティを増強することができる。アプリケーションが攻撃者に露出された場合でさえ、ホワイトボックス変換は、キーおよび変換アルゴリズムが保護されるという事実により区別される。しかしながら、数学的変換を、変換コードによってのみ知られるキーに適用するため、キーは、決してクリアな形式では存在しない。本明細書において取り上げられるホワイトボックス技術について、図１および図２に示す。
【００２６】
図１は、変換および逆変換プロセスの両方用の自動コード発生１０を示し、図２は、変換１５および逆変換２０プロセス用自動ホワイトボックスキー生成を示す。ＷＢ逆変換コード２０および隠しキー３５は、同じキーおよび変換アルゴリズム２５から生成する。さらに、各隠しＷＢキー３５は、ＷＢ変換コード１５により変換を逆転する逆変換２０に関連する。保護フェーズの間、ユーザが、様々なＷＢキーを使用でき、各セキュリティコンポーネントが、それ自体のホワイトボックスキーの組を有することができる。たとえば、完全性検証およびモジュール変換コンポーネントは、異なるキーを使う。さらに、機能変換コンポーネントは、多数のキーを使用して機能を変換する。セキュリティ−性能のトレードオフを調整するために、ユーザは、広範なホワイトボックス変換技術を有するが、その技術は複雑ＡＥＳ暗号化アルゴリズムから、ＸＯＲ演算等の単純変換まで多岐にわたる。これについては、キー分割に関する後の項でより詳細に説明する。
【００２７】
バイナリ保護システム
図３は、本発明の実施例による本件のバイナリ保護システム１００を示し、その主要なセキュリティコンポーネントが、インターロックされたセキュリティ層として保護されるバイナリアプリケーション１０５に自動的に挿入される。各セキュリティ層は、ＩＶトランスミューテーション１２５、ＦＴトランスミューテーション１３０、ＢＴトランスミューテーション１３５またはＭＴトランスミューテーション１２０のいずれを実現するものであれ、実行可能なコードにより実現される。セキュリティ層およびそれらが保護するコードは、いずれも、層間でインターロックする関係の生成を図る、先行／後続の関係を有するコードにより実現される。なお、図３は、実際は模式化された図である。ＭＴ、ＦＴ、ＢＴおよび命令トランスミューテーション（ＩＴ）（図示せず）は、好ましくは、一連の層間トランスミューテーションにおいて、連続的に入れ子になった層（すなわち、図２８に示すように、ＭＴがＦＴをカプセル化し、次にＦＴがＢＴをカプセル化し、ＢＴがＩＴをカプセル化する）において構成され、一方、ＩＶ１２５およびＡＤＢ１４０が、内層的に適用され得る（すなわち、各入れ子になった層、層からなるグループまたは保護されるアプリケーション全体に適用される）。
【００２８】
さらに、セキュリティ層は、それぞれシーケンスで実行される。各層はコントロールを得ると、その適正な実行について、先行する層が生成する値に依存するよう設定することができる。たとえば、ＭＴは、実行時において、実行可能なコードにＦＴまたはＢＴにより訂正される特定のエラーをロードする。バイナリ保護ツールは、入力として、所望のセキュリティコンポーネントを可能化しかつ準備する一組のセキュリティオプション１１０を受け入れる。さらに、ユーザは、セキュリティコンポーネントと結合する変換キーを入力する。さらに、バイナリツールにより、ユーザは、一組の変換キーをセキュリティコンポーネントに関連付けることができる。たとえば、機能トランスミューテーションコンポーネントは、異なるキーで機能を変換する。
【００２９】
実施例によれば、高いレベルのソースコード保護でインターロックする能力が得られる。たとえば、ユーザは、セキュリティを高めるためにソースコードにおける変換を適用することができる。これらの高レベルの変換は、トランスコーダにより自動的に適用される。トランスコーダの詳細については、同一所有者の米国特許第６５９４７６１号、第６７７９１１４号および第６８４２８６２号ならびに米国特許出願第１１／０３９８１７号に記載されており、これらの全文をここに引用により援用する。
【００３０】
図４は、ソースコードも変換される実施例について、プリリンク保護プロセスの一部としてのトランスコーダ２２０の使用を含む保護プロセスの模式図である。バイナリ保護システム１００ボックスは、図３に示すブロック図全体を含むものとして考えることができる。また、ソースレベルでは、ユーザは、いくつかのセキュリティ機構を挿入するが、これらが提供する保護は、バイナリレベルの明示的セキュリティエンジンが同様に挿入されるまでは完全ではない。たとえば、ソースコードにおいては、ユーザは、いくつかのセキュリティＡＰＩを採用するが、結合ののちに得られるバイナリは、対応のセキュリティコンポーネントがバイナリレベルで挿入された後のほうがより安全になる。
【００３１】
図４において、バイナリ保護ライブラリ２３０は、ユーザとセキュリティコンポーネントとの間のインターフェースを表す。一組のＡＰＩを提供する静的ライブラリが、プログラムにより行われるセキュリティ要求をサポートする。このようなＡＰＩは、完全性検証およびアンチデバッグ機能を提供する。バイナリ保護プロセスにおけるもう一つ重要なモジュールは、５つの主要なセキュリティコンポーネントエンジンを含むレジデントセキュリティモジュール（ＲＳＭ）３００である。ＲＳＭについては、以下により詳細に説明することにする。ポストリンク保護フェーズにおいて、レジデントセキュリティモジュール３００は、アプリケーションバイナリモジュール２００（ペイロードと称す）をパッケージされる。ペイロードモジュールは、ホワイトボックス変換されたブロックまたは機能に分解され、その後全体が圧縮かつ変換されて、ＲＳＭがパッケージされ、保護されたアプリケーションになる。この新しい保護されたアプリケーションが元の実行可能なプログラムおよび展開されたアプリケーションにおける共有のライブラリを置換する。さらに、レジデントセキュリティモジュールは、主なセキュリティコンポーネントの実行時エンジン、ホワイトボックス逆変換コード手続きおよび変換されたキーを含む。ポストリンク保護プロセス全体が、自動化される。セキュリティオプションの選択を行う場合を除いては、ユーザはレジデントセキュリティモジュールと対話しない。バイナリ保護ライブラリおよびレジデントセキュリティモジュールの両方が高レベルコードで保護されていて、かつ図５に概要を示すソースコード変換を取り入れる。図５に示すように、ソースコード変換は、保護対象のアプリケーションにより使用されるコードおよびバイナリ保護技術を含むコードの両方に適用することができる。つまり、保護対象のアプリケーションへリンクされるライブラリと保護フェーズにおいてアプリケーションに挿入されるコードの両方ともに、ソースコード変換を使用することによりセキュリティの強化が可能となり、攻撃を困難にすることができる。
【００３２】
上記のとおり、本件に記載の方法およびシステムは、一般に、構築時特性／コンポーネントと実行時特性／コンポーネントとに分割することができる。図６は、本発明の実施例による構築時処理後の保護されたバイナリアプリケーションモジュールの構成を表す。基本的には、保護されたバイナリアプリケーションの構成は、レジデントセキュリティモジュール３３０およびその変換されたペイロード３５０からなる。レジデントセキュリティモジュールは、静的かつ動的保護を実現する。これは、ホワイトボックス逆変換ルーチン、自動完全性検証およびアンチデバッグエンジンならびに動的ブロック転置（permutation）マネジャ等のユーザの対話を必要としないセキュリティコンポーネントを含む。さらに、レジデントセキュリティモジュールは、実行時フェーズの間にペイロードをメモリにロードする責任を負う。そして、様々なバイナリトランスミューテーションにサービスを提供できるようそこに常駐する（またはその一部が常駐する）。たとえば、機能保護のためのエントリハンドラがエンターした場合、ハンドラは、ＲＳＭ内に呼びかけて解読した機能の残りの部分を入手することができる等である。
【００３３】
構築時処理
図６は、このような保護されたバイナリアプリケーションモジュールを構築するためのプロセス、すなわち構築時プロセスを説明することにより最善の理解が得られる。この項では、各セキュリティコンポーネントの保護フェーズおよびそれが個々に適用される態様を説明する。保護のフローと保護されるバイナリアプリケーションの構造を表現しかつ分析する。また、この項では、セキュリティコンポーネント同士の対話についても指摘する。一般に、これらのセキュリティコンポーネントは、バイナリアプリケーションに対して直接的に自動的に適用される。セキュリティコンポーネントのセキュリティエンジンは、レジデントセキュリティモジュール３００内に常駐する。セキュリティコンポーネントをインストールするために何らのユーザ対話も要求されないのが一般的である。バイナリアプリケーションは、大量に変換され、レジデントセキュリティモジュールのペイロード３５０として含まれる。こうして、たとえばペイロードは、変換された機能４１０（および各変換された機能についてのエントリハンドラおよび出口ハンドラ（図示せず））を含む。望ましいセキュリティ技術によれば、アプリケーションは、バイナリレベルで改変されていくつかの段で変換される。バイナリアプリケーションがモジュールトランスミューテーションで保護されている場合、ペイロードの構造は重要ではなく、ペイロードは単一のエンティティとして考えられる。
【００３４】
しかしながら、完全性検証およびアンチデバッグコンポーネントは、ユーザ対話を必要とする追加のモードを持つことも可能である。この場合、セキュリティコンポーネントの機能的エンジンは、保護されるバイナリアプリケーション内に静的にリンクされるバイナリ保護ライブラリ２３０内に常駐する。重要な指摘としては、セキュリティコンポーネントを両方のモードで適用することができる。たとえば、ユーザが完全性検証ＡＰＩを適用する場合には、完全性検証コンポーネントをリンクフェーズ１０３に適用できる。さらに、完全性検証を、なんらの競合もなくポストリンク保護の一部として結果として得られたバイナリに再び適用することができる。
【００３５】
機能トランスミューテーション構築時
図７は、入力がバイナリアプリケーションである本発明の実施例による保護のフローを示す。機能トランスミューテーションは、アプリケーションを動的攻撃から守るポストリンク保護技術である。元のバイナリアプリケーション１０５をその複合機能に分解し（機能１、機能２、機能３、・・・機能Ｎ等）、これらをＦＴ処理ブロック１３０によりＷＢアルゴリズムで変換する。ＦＴ処理１３０を、ホワイトボックス変換構築時ファシリティ１４０により実行し、ホワイトボックス変換キーおよび各機能用のオペレーションコードを生成しかつアセンブルする。変換された各機能４１０は、レジデントセキュリティモジュールのペイロードとして含まれる。ＦＴ処理も、各機能用エントリハンドラ４２０および出口ハンドラ４２０もインストールする。各機能は、それ自体のホワイトボックスキー（およびそれ自体の変換コード）で変換されるので、結果として保護されるバイナリモジュールには、各機能用の隠しＷＢ逆変換キー（変換コード）が含まれる。この時点で、キーとコードという用語について混乱を避けるため、ここでコードとは、変換を実行するために使用するアルゴリズム／ソフトウェアコードを意味し、それが一般に独自のキーを使用することとする。
【００３６】
機能トランスミューテーションコンポーネントの利点は、実行中のある所与の瞬間においてクリアな形式の機能の数を制限する点である。さらに、レジデントセキュリティモジュールは、変換された機能４１０への呼び出しをインターセプトし、機能ごとのエントリハンドラ４２０および出口ハンドラ４２０と協働する。エントリハンドラは、機能に対するＷＢ変換を逆転することについて責任を負いかつホワイトボックスキーの管理について責任を負い、一方で出口ハンドラは、メモリにおける機能を破壊する。こうして、機能への呼び出しは、エントリハンドラを介して行われ、機能からのリターンは、出口ハンドラを介して行われる。機能トランスミューテーションコンポーネントに特定的なオペレーション（機能トランスミューテーションおよび破壊）以外に、エントリハンドラおよび出口ハンドラは、ブロック転置、完全性チェック、デバッガの存在テストなど、様々なオペレーションを行う。なお、図面は実際は模式的なものであり、システムの作用の様子を説明するためのものであって、すべてを包含することを意図していない。したがって、図６は、エントリハンドラおよび出口ハンドラを示していない（主に雑然としすぎることを避けるため）一方で、図７は、変換された機能自体に関連するＲＳＭおよびペイロードの一部のみを示す。
【００３７】
ブロックトランスミューテーション―構築時
図８は、本発明の実施例による、ブロックトランスミューテーションコンポーネント１３５の保護フローを示す。ブロックトランスミューテーションコンポーネント１３５は、保護されるアプリケーションがメモリ内で実行される間、動的コード解析および攻撃からのバイナリ保護を行う。ブロックトランスミューテーションは、バイナリ命令を挿入かつ置換することによりバイナリアプリケーションを改変する。さらに、バイナリアプリケーションコードを、実行時で要求があった際に実行するために、実行可能な状態に戻す必要があるホワイトボックス変換ブロックへ分解する。ＢＴ処理ブロック１３５は、アプリケーションのバイナリモジュールをその必要な機能へ分解し、その後各機能をブロックに分割する。その後、ホワイトボックス変換コードを使用して、ブロックを変換する。ＢＴは、アプリケーションバイナリ構造に最大の影響を与える。ＢＴで保護される機能は、大きく改変される。たとえば、元の命令のいくつかは、新しい命令で置換され、それ以外のいくつかの命令は、機能アドレス空間内で再配置される。新しい命令を挿入するので、ＢＴで保護される各機能のサイズはより大きくなる。したがって、ＢＴ保護による機能は、専用のバイナリロケーションへ再配置される。実行時では、ＢＴで保護される機能は、ＷＢ変換ブロック４４０に分割された大きなコードセグメントからなる。ブロックはグループに分割され、かつブロックからなる各グループは、独自のホワイトボックスキーで変換される。結果として得られるバイナリアプリケーションは、その元の挙動を維持しつつ、よりタンパリングに対する耐性が高まる。変換されたホワイトボックスキーおよび逆変換ルーチンは、保護されるバイナリモジュールの一部である。さらに、プログラム実行の間、恒常的に、元のアプリケーションの制御フローを遮断しかつ変更することで、バイナリアプリケーションを自動的な攻撃から保護する。レジデントセキュリティモジュールは、ブロックの物理メモリアドレスをランダムに改変する動的ブロック転置マネジャ１５５を含む。ホワイトボックス変換されたブロックは、レジデントセキュリティモジュールはと結合されたペイロード内に含まれる。
【００３８】
モジュールトランスミューテーション―構築時
図９は、本発明の実施例による静的解析および攻撃からバイナリアプリケーションを保護するモジュールトランスミューテーション１２０のコンポーネントによる保護プロセスを示す図である。一般に、保護されるアプリケーションには、保護されるアプリケーションが複数のトランスミュートされたモジュールを含むように、このプロセスが各モジュールについて繰り返されるいくつかのモジュール（実行ファイル共有ライブラリ）からなることが可能である。元のバイナリアプリケーション１０５が変換され、圧縮され、かつレジデントセキュリティモジュールのペイロードとして含まれる。結果として得られる保護されたバイナリモジュールが、デプロイされたアプリケーションにおける元のモジュールを置換する。図９の右側のボックスは、モジュールトランスミューテーションで保護するアプリケーションバイナリモジュール２００を明らかにする。静的な保護のため、メモリにアプリケーションをロードする機能性を別にすれば、レジデントセキュリティモジュール３００は、実行時でペイロード３６０に対して逆変換を行う経過を含みかつ完全性検証能力も含む。図９は、ペイロード３５０の一部を構成するペイロード３６０の一部を示す。
【００３９】
完全性検証−構築時
図１０は、本発明の実施例に従い、保護されるアプリケーションの挙動を改変しようとするタンパリング攻撃を検出する完全性検証コンポーネントによる保護プロセスを示す。構築時において、入力バイナリモジュールは、デジタル署名されており、バウチャデータを作る。バウチャは、署名の集まりと、保護されるアプリケーションに関する他の情報を含む。バウチャデータは、ホワイトボックスアルゴリズムを用いてＩＶプロセス１２５により変換され、かつ変換されたバウチャデータは、保護されるアプリケーションに埋め込まれるかまたは別のファイルにエキスポートされる。一般には、保護されるアプリケーションは、いくつかのモジュール（実行ファイルおよび共有ライブラリ）から構成することができる。この場合、アプリケーションにタンパリング耐性を持たせるということは、すべてのモジュールが署名されかつバウチャデータがすべてのモジュールのシングルエンティティに記憶できるかまたは好ましくは、各モジュールがそれ自体のバウチャデータを個別に記憶させることを意味する。モジュールごとにバウチャデータを可能にすることで、アプリケーションに、再署名なしで個々のモジュールを更新する柔軟性が付与されるのみならず、各バウチャを異なるキーで変換できることによりセキュリティが向上する。
【００４０】
完全性検証トランスミューテーションは、自動および／またはユーザ対話モードで実行できる。これらのモードはともに挙動と原則を共有するが、ＩＶ機構が、保護されるバイナリアプリケーションに挿入される態様が異なる。自動モードでは、ＩＶエンジン５４０は、レジデントセキュリティモジュールに常駐し、ＩＶコンポーネントは、戦略ポイントで、保護されるバイナリアプリケーションに自動的に挿入される。ユーザ対話モードの場合、ＩＶ機構５５０は、ＩＶライブラリ５５５に対する呼び出しに基づき、アプリケーション内に静的にリンクされるバイナリ保護ライブラリ内に常駐し、このライブラリは、コンパイルフェーズの前にユーザのソースコード内に挿入される。
【００４１】
典型的には、実行時、保護されるアプリケーションの構造は、適用された様々なバイナリトランスミューテーションによって動的にそれらの状態が変化する多数のコードセグメントからなる。実際、保護されるアプリケーションの構造は、前記バイナリアプリケーションコードの連続的に入れ子になった層に適用される１以上の層間トランスミューテーションを含む複数のバイナリトランスミューテーションの組み合わせを含み、この連続的に入れ子になった層は、アプリケーションを含むモジュール、モジュールを含む機能、機能を含む命令の基本ブロックおよび個々の機械命令を含む。多くのセキュリティ上重要な機能は、ＢＴで保護され、他のいくつかの機能はＦＴで保護される。保護されるアプリケーションが自己改変コード性のものであっても、ＩＶトランスミューテーションが、モジュール、機能またはブロックの完全性をチェックする能力を提供することが好ましい。したがって、署名フェーズは、署名の組を、実行の際にその状態を変更する各コードセグメントと関連付けることから構成される。これらは、変換される前後に署名される。たとえば、等式１は、変換後および変換前両方の状態のブロックの署名を示す。結果として、ＢＴで保護される機能の署名は、等式２で表すことができ、これは、機能を構成するブロックの署名の和である。機能がＦＴで保護される場合には、これらは単一のピースとして変換される。等式３は、ＦＴで保護される機能の署名を表す。                      
【数１】
2012526310.tif 000003
【００４２】
実行時処理の実施例について説明する前に、ここで、本発明の実施例による、連続的に入れ子になった層およびトランスミューテーションがそれらに適用される様子を示す別の模式図である図２９を参照する。この例では、１つのモジュールのみを説明するが、追加のモジュールを含みうることは当然である。この例では、モジュールを３つの機能に分割する。ここでは、１つの機能の例、すなわち７７０で表す機能１についてのみ説明する。この機能は、複数のブロックを含み、その各々が、複数の命令を含む。ＦＴ処理ブロックは、機能１をトランスミュートして、変換された形７７５にする。これは、エントリハンドラ７７３および出口ハンドラ７７８を含み、ＲＳＭおよびＷＢ変換エンジン８１０からのインターロッキングコード／データなしには動作することはない。しかしながら、機能１は、複数のブロックを含み、その各々も、トランスミュートされる。たとえば、ＢＴ処理ブロックはあるブロックをトランスミュートして、変換された形７８０にするが、これは、エントリハンドラ７８３と出口ハンドラ７８５とを含み、これらもまた、ＲＳＭ７９０およびＷＢ変換エンジン８１０からのインターロッキングコード／データなしには動作することはない。同様に、ブロック７８０は、１以上の命令を含み、これらの命令は、変換された形７９０に変換され、これも同様にＲＳＭ７９０およびＷＢ変換エンジン８１０からのインターロッキングコード／データなしには、動作することはない。さらに、ＲＳＭ８００は、上記の連続的に入れ子になった層間トランスミューテーションを組み込むのみならず、前記層の１以上の層および／または前記トランスミュートされたモジュール全体に、保護の内層を付加するＩＶエンジン８２０およびＡＤＢエンジン８３０も組み込む。
【００４３】
なお、上記は、上位から下位の順に記載した。すなわち、機能がブロックをカプセル化するので、ＦＴをＢＴの前に記載した。しかしながら、実際には、実施例では、まず機能を解析し、各機能をブロックに分解し、ブロックを変換し、効果的に機能を変換することは当然である。上記のとおり、ＦＴ処理を、次に、変換した機能に適用する。実行時には、プロセスを逆にして、機能の変換をまず除去して、変換されたブロックを露出し、実行する際に、変換されたブロックから、変換を除去することが考えられる。
【００４４】
実行時処理
図１１は、保護されるアプリケーションが実行時で安全に実行される様子を示す概略図である。図６に示すとおり、保護されたバイナリアプリケーションは、ＲＳＭ３００とその変換されたペイロード３５０とからなる。ペイロードの構造は、構築時に適用されるバイナリトランスミューテーションに依存する。保護されるバイナリアプリケーションが開始されると、ＲＳＭは制御を行い、ペイロードを実行する準備をする。効果的には、ＲＳＭはＯＳローディングプロセスを置換する。ＲＳＭは、保護されるアプリケーションについての情報を含み、逆変換が適用されると、変換されたペイロードが配置されることになるメモリ空間を割り当てる。ペイロードに対して変換を扱う前に、ＲＳＭは、３つのオペレーションを行う。すなわち、１）セキュリティエンジンを初期設定する、２）アンチデバッグコンポーネントを実行する、および３）ペイロードの完全性をチェックする。
【００４５】
ペイロードがメモリにセットアップされた後、ＲＳＭは、実行時セキュリティサポートを準備し、制御をペイロードに渡すが、これは、変換された機能および変換されたブロックから構成される。さらに、アプリケーションは、ブロック、機能およびアプリケーションモジュール全体に関連する完全性情報を含む。機能およびブロックは、要求に応じて、実行可能な状態へ動的に変換されかつ実行の後に破壊される。結果として、コードの一部のみが実行時においてはクリーンな形式になる。初期化フェーズにおいて、ＲＳＭは、エントリハンドラおよび出口ハンドラを管理し、これらは機能およびブロック変換ならびに破壊についての責任を負う。さらに、これらのハンドラは、完全性チェック、コード再配置、コードデプロイおよび保護されるアプリケーションにアタッチされるデバッガの検出等の他のセキュリティ活動も行う。完全性検証によりブロック、機能またはアプリケーション全体の完全性の自動的なチェックが図られる。
【００４６】
コード再配置能力とは、各機能の起動の後、機能が構造上動的に変化することを意味する。これは、機能ブロックの物理メモリアドレスを置換することにより可能になる。動的コード再配置は、自動かつ動的攻撃に対しての優れた防御を表す。エントリハンドラおよび出口ハンドラは、動的保護を付与する上で重要な要素となるので、これら自体も保護することが好ましい。各ハンドラが、自己の完全性を定期的にチェックしかつ自身を再構築することができる。さらに、ハンドラは、保護されるアプリケーションにデバッガがアタッチされているかどうかをチェックする。
【００４７】
モジュールトランスミューテーション−実行時プロセス
図１２は、実行時実施の際のモジュールトランスミューテーション（ＭＴ）コンポーネントを示す。保護されるアプリケーションが、メモリにロードされる際、ＲＳＭがコントロールしいくつかのセキュリティオペレーションを行う。第１に、ＲＳＭは、保護されるアプリケーションがデバッガの制御下にないことを確認しかつ自身およびペイロードの完全性をチェックし、ペイロードを実行の準備ができた状態に変換する。ＭＴコンポーネントは、基本的には静的保護のためのものである。攻撃者がディスク上のペイロードを解析しないようにする。ペイロードがデプロイされた後、ペイロードおよびＲＳＭに埋め込まれた他のセキュリティコンポーネントが制御を行い、動的解析および攻撃からアプリケーションを守る。さらに、ペイロードはバイナリ保護アプリケーションに関連する実行時データを含む。
【００４８】
完全性検証−実行時処理
図１３は、完全性検証コンポーネントの実行時処理を示す。
保護されるアプリケーションがメモリ内に配備されると、その構造は、要求に応じて実行可能な状態に動的に変換されかつ実行の後に再び破壊されるコードセグメントから構成される。ＩＶトランスミューテーション（ＩＶ）により、保護されるアプリケーションまたはそのコンポーネントのいずれかのインメモリコードセグメントが、タンパリングされずかつアプリケーションのディスクイメージが外部から改変されていないことが確定する。基本原則は、保護／構築時に生成される完全性検証データと、保護されるバイナリアプリケーションの実行時イメージとの比較に基づく。ブロックまたは機能がその変換状態を変えるたびに、実行時署名を適切に更新する。したがって、それらの変換状態を動的に変更するセグメントから構成されるバイナリアプリケーション等の自己改変コードアプリケーションの完全性をチェックすることが可能である。
【００４９】
自動モードにおいては、ＩＶは、モジュール、機能またはブロックの完全性を検証することができる。希望するセキュリティレベルにより、様々な形で戦略ポイントにＩＶへの呼び出しが挿入される。たとえば、機能をブロックトランスミューテーション（ＢＴ）で保護すれば、ＩＶは、各ブロックの実行の前に、そのブロックの完全性または機能を構成するブロックすべての完全性をチェックする。機能の完全性チェックとは、機能を構成する全ブロックの完全性をチェックすることを意味し、モジュールの完全性は、ＢＴ／ＦＴ保護機能に属する複数の署名値およびアプリケーションコードの残部からなる。図１４は、ＩＶがある場合とない場合両方の実行時機能処理を示すことにより、自動ＩＶ呼び出しの他の例を示す。二重署名スキームを利用することにより、実行の前に機能を検証することができ、これは、優れた防御方法である。図１４のａ）は、ＦＴ保護される機能に対する基本呼び出しを示し、図１４のｂ）は、呼び出し者と呼び出された機能の両方の完全性チェックを含むＦＴ保護される機能への呼び出しを示す図である。
【００５０】
ユーザモードでは、ＩＶは、モジュールまたは機能の完全性をチェックするＡＰＩの組を提供する。さらに、これらをソースコードに挿入して、ＩＶチェックを行う時期をユーザが制御できる。この完全性検証機能性によって、ユーザは、複数の方法でモジュールの完全性をチェックすることができる。まず、対応のＩＶＡＰＩが起動される場合は常に、アプリケーションを構成する不変のバイトの組全部（すなわちコードおよびリードオンリーデータ）をチェックできる。このＡＰＩにより、ユーザは、性能を調整する目的で、起動ごとに、アプリケーションのうちどれだけをチェックするかを特定することができる。この全体のモジュールチェックに加えて、ＩＶＡＰＩでは、ユーザが、現在実行中の機能が、構築時以降改変されたかどうかをチェックすることができる。上記のとおり、動的に変換かつ実行される機能およびブロックを、実行の前後で、完全性についてチェックすることができる。
【００５１】
機能トランスミューテーション−実行時プロセス
一般に、アプリケーションモジュール実行の間、保護される機能が起動されると、そのエントリ機能ハンドラがまず実行され、ホワイトボックス変換実行時ファシリティと対話し、その機能に特定的なホワイトボックス変換実行時キーデータおよびオペレーションコードを使用して、ホワイトボックス変換逆オペレーションを実行することによりホワイトボックス変換された機能コードが逆変換され、実行メモリに逆変換された機能がロードされ、かつ機能から出る時には、実行制御が機能に渡されて、機能の出口ハンドラが起動される。随意には、各機能についてＲＳＭが、リターンの前に機能のメモリ足跡をクリアするかスクランブルする。さらに、ＩＶ、ＡＤＢの一方または両方のトランスミューテーションをエントリ機能ハンドラおよび出口機能ハンドラに暗示的に適用することにより保護されている機能に対して適用されるＦＴと、ＩＶまたはＡＤＢトランスミューテーションのうちいずれかまたは両方がインターロックされるように、層内保護を起動することができる。
【００５２】
図１５は、本発明の実施例による、実行時実行の際の機能トランスミューテーション（ＦＴ）コンポーネントを示す図である。ＲＳＭがペイロードを実行可能な状態に変換した後でさえ、いくつかの機能は変換されたままにすることができる。さらに、ＲＳＭは、保護される機能ごとに、エントリハンドラおよび出口ハンドラをインストールする。保護される変換後の機能が起動されると、そのエントリハンドラが、コントロールを掌握し、必要なホワイトボックスキーを使用して、適切な逆変換を行って機能を実行可能な状態に復元する。この明細書ですでに説明のとおり、各機能は、独自のキーを用いて変換することができる。変換動作を行う前に、適宜、エントリハンドラが、保護時に指定される、様々な他のオペレーション（完全性チェック、アンチデバッグ）を行う。機能を実行可能な状態に変換した後、エントリハンドラが、制御を機能に渡して実行する。機能からのリターンは、機能の出口ハンドラによりインターセプトされるが、出口ハンドラの主な役割は、機能のコンテントを破壊し、制御を呼び出し者に返すことである。エントリハンドラの場合と同様、出口ハンドラは、保護時に指定された広範なセキュリティオペレーションを行うことができる。
【００５３】
ＦＴコンポーネントにより、ユーザは、機能の実行時破壊／変換の頻度を指定する動的カウンタを規定することができる。デフォルトで、カウンタを１に設定する。各機能は、その独自の動的保護カウンタを有する。このカウンタによりユーザはセキュリティ対性能について、保護を調整することができる。たとえば、カウンタが５に設定されれば、出口ハンドラが機能のコンテントを破壊する前に、その機能を５回起動できる。
【００５４】
ブロックトランスミューテーション−実行時プロセス
図１６は、動的解析および攻撃に対する保護でチャージされるブロックトランスミューテーション（ＢＴ）コンポーネントの実行時プロセスを示す。中心となる原則は、バイナリアプリケーションをディスクリートなブロックに分解することに基づく。構築時に、ブロックは、ホワイトボックス変換を用いて変換される。実行時に、ブロックは、要求に応じて動的に変換され、実行可能な状態に戻される。実行時では、最小数のブロックのみが（かつ理想的には単一のブロックのみ）が、クリーンな形になり、残りのブロックが未変換のままであることが好ましい。実行の後、ブロックは破壊され、ＢＴおよびＦＴは、変換−実行−破壊という同じ基本原則を共有するが、これらは異なった態様で実現される。ＢＥで保護される機能は構築時に改変される。たとえば、変換ルーチンへの呼び出しが、保護される機能内に挿入される。
【００５５】
全機能ではなく、ブロックを動的に変換することは、ＦＴが提供するものに追加の保護層を構成する。たとえば、機能の入力パラメータにより、いくつかのブロックは実行されない。その結果、これらは、決して実行可能な状態に変換されず、解析、リフティングおよびタンパリングに対して脆弱にならない。
【００５６】
さらに、同じ機能に属するブロックは、定常的にメモリにおいて置換される。動的にブロックを変換し、メモリにおけるそれらの位置を置換することは、自動的かつ動的攻撃に対する良好な防御方法となる。図１７は、その実行の様々な瞬間において保護されるアプリケーションの例を示す。ブロック置換の頻度は、入力セキュリティオプションでユーザが規定することができる。
【００５７】
動的機能ローディング
上に説明した技術に加えて、このシステムが提供する技術的インフラストラクチャは、保護される機能の動的ローディングも可能化する。この動的ローディング機能性により、ユーザは、ホワイトボックス変換を用いて機能を保護することができ、必要な時にこの機能をロードでき、この機能を起動でき、メモリから安全にこの機能を消去することができる。基礎のアプリケーションを変更することなく容易に機能のアップデートができることに加え、このシステムでは、保護される機能がメモリにおいてクリアな形式になる時間が最小になる。
【００５８】
動的機能ローディング−構築時
図１８は、動的機能ローディングの構築時処理を示す。ユーザは、保護対象の機能を供給する。これらは、ユーザが供給するホワイトボックス変換キーおよびアルゴリズム仕様に関連して動的機能ローダー処理エンジンを介して処理される。このプロセスにより、変換された機能および隠しホワイトボックス逆変換キーを含む保護された変換データモジュールが生成される。このデータモジュールを様々な方法で（ダウンロード等）アプリケーションに供給ことができる。これにより、ユーザは、元のアプリケーションを再構築、再テストおよび再配備する必要なしに、機能の性質または保護レベルを簡単に変更できる。また、ユーザは、通常、実行ファイルおよび動的にロードされるかまたは共有されるライブラリ等のコードバイナリを可能にしないかもしれない標的システム上の領域に、機能コードを（このデータモジュールの形で）配置することもできる。
【００５９】
動的機能ローディング−実行時プロセス
図１９は、動的機能ローディングの実行時プロセスを示す。実行時で、アプリケーションは、どの保護データモジュールをロードし、かつどの機能を起動すべきかを指定する動的機能ローディングライブラリへの呼び出しを行う。そこで、ライブラリは、保護データモジュールにおける機能を発見し、これをメモリ内に実行可能な形で変換する。ライブラリは、アプリケーションのために機能を起動し、その結果を戻す。機能を起動したのち、アプリケーションは、その機能をメモリから安全に消去することを依頼することができる。
【００６０】
動的機能ローディングの実行時プロセスは、いくつかのフェーズに分割される。図２０は、プロセスの第１のフェーズの例を示す。このフェーズでは、呼び出しアプリケーションは、どの保護データモジュールが所望の機能を含むかを特定する。動的機能ローディングライブラリは、そこでライブラリ内の機能を識別する。
【００６１】
図２１は、プロセスの第２フェーズの例を示す。このフェーズでは、動的機能ローディングライブラリは、隠しホワイトボックス変換キーを含み、所望の機能に逆変換を適用する準備をする。図２２は、プロセスの第３フェーズの例を示す。このフェーズでは、所望の機能のコードを含むデータが、実行可能な状態に変換され、メモリ内へ配置され、起動の準備がされる。
【００６２】
図２３は、このプロセスの第４のフェーズの例を示す。このフェーズでは、動的機能ローディングライブラリは、呼び出しアプリケーションのために機能を起動する。アプリケーションは、パラメータを機能に供給し、これがライブラリによって伝達される。機能からのリターンコードは、機能が完了した後に、呼び出し者に送られる。図２４は、最終フェーズを示し、呼び出しアプリケーションが、機能を安全に消去することを要求できる。ライブラリは、そこで、機能をメモリから消去する。この機能を再び起動する必要がある場合は、再び実行可能な状態に変換して、ライブラリによりロードしなければならない。
【００６３】
図２５は、コードトランスミューテーションおよびインターロッキングを伴う動的機能ローディングの構築時プロセスの例を示す。動的機能ローディングにより、適用されるより高度なセキュリティ技術のためのインフラストラクチャが提供される。たとえば、上の項で説明した機能保護技術はどれでも使用することができる。すなわち、それらは、以下のとおりである。
・ブロックトランスミューテーション
・機能に基づく完全性検証
・ブロックに基づく完全性検証
・アンチデバッグ
【００６４】
動的機能ローディングとソースコード変換を組み合わせることで、より高度なセキュリティを得ることができる。図２５に示す例では、ユーザは、保護する必要がある３つの機能を含むアプリケーションを供給する。トランスコーダを介してソースコード変換を適用することにより、システムは、変換された機能と強くインターロックされた機能のための変換スタブを含むアプリケーションを作ることができる。これらの機能を、動的機能ローディング機構を用いて保護することができる。このようにコード変換を用いることによって、攻撃者が保護される機能を置換することが非常に困難になる一方で、動的機能ローディング技術により、保護される機能をメモリからリフティングすることが困難となる。さらに、この技術により、ユーザは保護される機能を容易に置換することができ、おそらく最初の構築時に攻撃を受けた際に、対応することができる。
【００６５】
インターロッキングセキュリティ技術
インターロッキングは、様々なセキュリティ技術間に強い相関を創出することによりセキュリティ標準を向上させることを目的とするものである。これはクリティカルコードおよびデータを中心とする。あるセキュリティエンジンの重要なコンポーネントが、他のセキュリティコンポーネントにより生成される値に依存する。このようなインターロックセキュリティエンジンの例を図１４に示すが、検証された機能の動的変換の前に、完全性をチェックする。しかしながら、インターロッキングは、より複雑にすることが可能である。たとえば、ＩＶおよびＡＤのコンポーネントにより、他のセキュリティコンポーネントの部分（実行可能コード）を含むフェイルアンドサクセス（Fail and Success）コールバックルーチンが提供される。
【００６６】
たとえば、図２６は、ＢＴおよびＩＶコンポーネントのインターロックされた形を示す。ブロックを構成する命令の一部が、ＩＶエンジンのサクセスコールバックに再配置される。したがって、これらは、検証の成功または失敗に応じて実行される。ＩＶ失敗の場合には、計算は完了せず、ハッカーの攻撃が失敗する。
【００６７】
キーの分割
暗号技術において大切なセキュリティ上のパラダイムは、復号化キーを保護することから構成される。ホワイトボックス技術を使用することは、この要件を満たす大きな前進の一歩である。数学的変換が復号化ルーチンによってのみ知られる復号化キーに適用され、攻撃者が各命令の実行を観察している場合でも、キーが露出しない復号化オペレーションが得られる。本発明は、隠し復号化キーを２つの部分に分割することから構成される追加のセキュリティ対策を導入する。一方の内部部分は、保護されるバイナリアプリケーションに埋め込まれ、外部部分は、エンドユーザが、実行フェーズで付与する必要がある。図２は、暗号化３０および隠し復号化キー３５両方を生成するプロセスを示す。保護時には、隠し復号化キーが、図２７に示すように分解される。実行時には、ＲＳＭがキーの復元の役割を果たす。この技術は、いずれのホワイトボックス変換にもおよぶ。キー分割の特徴は、ＷＢ変換すなわちＭＴ、ＩＶおよびＢＴを利用するすべてのセキュリティコンポーネントに当てはまる。
【００６８】
たとえば、装置の製造業者は、キーの一部を装置上の安全な記憶装置に置くことができる。保護されるアプリケーションが起動されると、キーのこの部分を、安全な記憶装置からキーを回収する装置上のコードを実行することにより回収できる。完全なホワイトボックスキーをここで再構築し、保護されるアプリケーションのペイロードの復号化、バウチャデータの復号化、または機能および／ブロック変換に使用できる。安全な記憶装置からのキーの断片を手に入れた攻撃者も、それをどうすることもできず、また、アプリケーションからキーの断片を抽出することに成功した攻撃者もどうすることもできない。インターロック技術をさらに使用することで、安全な記憶装置を有する装置の上で実行される保護されるアプリケーションのコンテクスト外では、いかなる復号化オペレーションを行うことも非常に困難になる。もちろん、キー上の変換により、ホワイトボックスコンテクスト以外での使用が困難になる。すなわち攻撃者は、それ自体の暗号化ルーチンで変換されたキーを使用できない。
【００６９】
上記では、説明の目的で、発明の実施例を完全に理解する上で、様々な詳細について述べた。しかしながら、発明を実施するためこれら特定の詳細が不要であることは、当業者には明らかになるであろう。
【００７０】
本発明の実施例の代表的なものは、機械で読み出し可能な媒体（コンピュータ読み出し可能媒体、プロセッサ読み出し可能媒体または内部にコンピュータ読み出し可能プログラムコードが埋め込まれたコンピュータ使用可能媒体とも呼ぶ）に記憶されたソフトウェア製品をあげることができる。機械で読み出し可能な媒体は、ディスケット、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、メモリ装置（揮発性または不揮発性）または同様の記憶機構を含む磁気、光学または電気記憶媒体を含む何らかの有形の媒体が可能である。機械で読み出し可能な媒体は、実行されば、プロセッサに、本発明の実施例による方法における工程を実行させる、様々な命令の組、コードシーケンス、構成情報または他のデータを含むことが可能である。記載の発明を実現するために必要な他の命令およびオペレーションも機械で読み出し可能な媒体上に記憶できることは、当業者には理解されるであろう。機械で読み出し可能な媒体から実行するソフトウェアは、回路と対話して記載のタスクを実行することができる。
【００７１】
特に、ソースコードは、１つの計算装置上に展開でき、構築時処理は、他の装置で実行することができ、その一方で保護されるアプリケーションは実際にもう一つの装置上で実行できることは当然である。各装置は、プロセッサ、メモリおよびプロセッサにより実行されると、同プロセッサに、本件記載の方法を実行させる機械で読み出し可能かつ実行可能な命令を有形的に記憶する機械で読み出し可能な媒体を含みうる。
【００７２】
上記の発明の実施例は、例示目的のみのものである。本発明の範囲を逸脱することなく、特定の実施例について、代替、変形および変更は、当業者により実行可能であり、発明の範囲は添付の請求項によってのみ規定される。
【図１】
2012526310.tif 000004
【図２】
2012526310.tif 000005
【図３】
2012526310.tif 000006
【図４】
2012526310.tif 000007
【図５】
2012526310.tif 000008
【図６】
2012526310.tif 000009
【図７】
2012526310.tif 000010
【図８】
2012526310.tif 000011
【図９】
2012526310.tif 000012
【図１０】
2012526310.tif 000013
【図１１】
2012526310.tif 000014
【図１２】
2012526310.tif 000015
【図１３】
2012526310.tif 000016
【図１４】
2012526310.tif 000017
【図１５】
2012526310.tif 000018
【図１６】
2012526310.tif 000019
【図１７】
2012526310.tif 000020
【図１８】
2012526310.tif 000021
【図１９】
2012526310.tif 000022
【図２０】
2012526310.tif 000023
【図２１】
2012526310.tif 000024
【図２２】
2012526310.tif 000025
【図２３】
2012526310.tif 000026
【図２４】
2012526310.tif 000027
【図２５】
2012526310.tif 000028
【図２６】
2012526310.tif 000029
【図２７】
2012526310.tif 000030
【図２８】
2012526310.tif 000031
【図２９】
2012526310.tif 000032
【国際調査報告】
2012526310.tif 000033
2012526310.tif 000034