【手続補正書】
【提出日】平成25年5月2日(2013.5.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
バイナリアプリケーションコードを含むバイナリソフトウェアアプリケーションを、元の形から、そのアプリケーションの全体または一部に、タンパリング、リバースエンジニアまたはリフティングを試みる静的および／または動的攻撃に耐性がある安全な形に変換する方法であって、前記方法が、
Ａ）前記バイナリアプリケーションコードに一連の変更を行って、変更されたバイナリアプリケーションコードを生成することにより、構築時フェーズにおいて、前記バイナリソフトウェアアプリケーションに対する複数のバイナリトランスミューテーションの組み合わせを実行するステップを含み、前記変更が、構築時に前記変更されたバイナリアプリケーションコードと絡みあった新しいコードをインプラントすることを含み、さらに、
Ｂ）トランスミューテーションの間に相互依存性を生成して配置することによって、前記トランスミューテーションをインターロックするステップと、
Ｃ）実行の間、トランスミューテーションの前記組み合わせとインターロッキングを、保護対象のバイナリアプリケーションコードとインプラントされたコードの両方に適用することにより、バイナリ保護が保護されるアプリケーションから分離されることがないように、元のアプリケーションに意味論的に等価だが、前記インターロックされたトランスミューテーションを含む保護されるアプリケーションを生成するステップとを含む、方法。
【請求項２】
前記複数のバイナリトランスミューテーションの組み合わせが、前記バイナリアプリケーションコードの連続的に入れ子になった層に適用される１以上の層間トランスミューテーションを含む、請求項１に記載の方法。
【請求項３】
ステップ（Ｂ）が、有効なインターロッキングデータの存在なしには正確に実行できない保護されるアプリケーションを生成するために、インターロッキングデータを付加することを含む、請求項２に記載の方法。
【請求項４】
ステップ（Ｂ）が、適正な実行のために、それ以前のトランスミューテーションの存在を必要とする１つのトランスミューテーションを有することを含む、請求項３に記載の方法。
【請求項５】
ステップ（Ｂ）が、１つのトランスミューテーションに、第２のトランスミューテーションのための入力として使用される出力を生成させることを含む、請求項４に記載の方法。
【請求項６】
ステップ（Ｂ）が、相補の特徴を有するトランスミューテーションを使用することを含む、請求項１から５のいずれかに記載の方法。
【請求項７】
前記連続的に入れ子になった層が、アプリケーションを含むモジュール、モジュールを含む機能、機能を含む命令の基本ブロックおよび個々の機械命令を含む、請求項２から６のいずれかに記載の方法。
【請求項８】
前記バイナリトランスミューテーションの組み合わせが、前記バイナリアプリケーションコードの層に適用される１以上の層内トランスミューテーションをさらに含む、請求項２から７のいずれかに記載の方法。
【請求項９】
前記１以上の層内トランスミューテーションが、構築時と実行時の両方において１以上の層に適用される１以上の完全性検証（ＩＶ）トランスミューテーションを含む、請求項８に記載の方法。
【請求項１０】
バイナリトランスミューテーションが、静的構築時プロセスを含み、該プロセスが、
ｉ）保護対象のアプリケーションのソースコード内にトランスミューテーション実行コードを挿入して、変更されたソースコードを生成するステップを含み、この変更ソースコードがコンパイルされて、前記バイナリアプリケーションコードが生成され、さらに
ｉｉ）相補の変更を保護対象のバイナリアプリケーションに挿入して、バイナリアプリケーションへの前記相補の変更が存在しない限り、アプリケーションソースコードへの変更が、正しく作用しないようにするステップと、
ｉｉｉ）保護対象のアプリケーションのバイナリ形式に対してバイナリトランスミューテーションに特定的なオペレーションを実行しかつ実行時に必要とされる関連の静的インターロッキングデータを生成するステップとを含み、
バイナリトランスミューテーションが、実行時プロセスをさらに含み、該プロセスが、
ａ）トランスミューテーションが除去されるか改変されれば、アプリケーションの元の意味が、保存されないような態様で、アプリケーションに挿入されたトランスミューテーション実行コードを実行するステップと、
ｂ）トランスミューテーション実行コードを実行しながらさらに必要な実行時インターロッキングデータを動的に生成するステップと、
ｃ）前記関連の静的および動的インターロッキングデータを使用して、適宜、インターロッキング依存性を検証するステップと、
ｄ）保護されるアプリケーションを実行しながら、１つのトランスミューテーションが、第２のトランスミューテーションの実行に適したアプリケーション状態を生成するのに必要になるように指定された順序で、一連の複数のトランスミューテーションを実行するステップとを含む、請求項１から９のいずれかに記載の方法。
【請求項１１】
バイナリトランスミューテーションがホワイトボックス変換プロセスを適用し、該プロセスが、構築時に、
ｉ）ホワイトボックス変換構築時ファシリティを用いて、ホワイトボックス変換キーおよびオペレーションコードを生成かつアセンブルするステップと、
ｉｉ）ホワイトボックス変換構築時キーでホワイトボックス変換オペレーションを行うことにより、前記バイナリコードおよび関連の重要情報を入力の形式から出力の形式に変換するステップと、
ｉｉｉ）実行時に、ホワイトボックス変換実行時キーで、ホワイトボックス変換逆オペレーションを行うことによって、ホワイトボックス変換実行時ファシリティを用いて、バイナリコードおよび関連の重要情報を出力の形式から、入力の形式に戻す変換を行うステップとを含む、請求項１から１０のいずれかに記載の方法。
【請求項１２】
ホワイトボックス変換構築時ファシリティが、
ａ）ホワイトボックス変換生成機と、
ｂ）ホワイトボックス変換構築時キーマスタと、
ｃ）ホワイトボックス変換オペレーションマスタと、
ｄ）ホワイトボックス変換構築時マネジャとを含み、かつ
ホワイトボックス変換実行時ファシリティが、
ｅ）ホワイトボックス変換実行時キーマスタと、
ｆ）ホワイトボックス変換逆オペレーションマスタと、
ｇ）ホワイトボックス変換実行時マネジャとを含む、請求項１１に記載の方法。
【請求項１３】
ホワイトボックス変換生成機が、元のキーデータと、ユーザが供給する変換アルゴリズム選択とを受け入れ、かつホワイトボックス変換構築時キーデータ（意味的オペレーションコードとともに）とこれに結合する対応のホワイトボックス変換実行時キーデータ（逆オペレーションコードとともに）の組み合わされたペアを生成する、請求項１２に記載の方法。
【請求項１４】
複数の変換を適用し、かつ前記ホワイトボックス変換オペレーションマスタが複数のホワイトボックス変換オペレーションを記憶し、前記ホワイトボックス構築時キーマスタが複数のホワイトボックス変換キーを記憶し、かつ前記ホワイトボックス変換実行時キーマスタが複数のホワイトボックス変換実行時キーを記憶し、かつ前記ホワイトボックス変換逆オペレーションマスタが、複数のホワイトボックス変換逆オペレーションを記憶する、請求項１２に記載の方法。
【請求項１５】
前記ホワイトボックス変換構築時キーマスタが、ホワイトボックス構築時マネジャによりアクセスされ、
前記ホワイトボックス変換オペレーションマスタが、複数のホワイトボックス変換意味的オペレーションコードを安全かつ有効に編成かつ配置し、
前記ホワイトボックス変換オペレーションマスタが、ホワイトボックス変換構築時マネジャによってのみアクセスされ、
前記ホワイトボックス変換構築時マネジャが、様々なホワイトボックス変換構築時キーとそれらの対応のホワイトボックス変換意味的オペレーションコードの記憶、回収およびマッチングを調整し、
それにより各ホワイトボックス変換プロセスが、ホワイトボックス変換構築時マネジャを使用し、実行時に対応するホワイトボックス変換構築時キーを用いて適切なホワイトボックス変換意味的オペレーションを起動し、
前記ホワイトボックス変換実行時キーマスタが、複数のホワイトボックス変換実行時キーを安全かつ有効に編成し、記憶しかつ配置し、
前記ホワイトボックス変換実行時キーマスタが、ホワイトボックス変換実行時マネジャによりアクセスされ、
前記ホワイトボックス変換逆オペレーションマスタが、複数のホワイトボックス変換逆オペレーションコードを安全かつ有効に編成しかつ配置し、
前記ホワイトボックス変換逆オペレーションマスタが、ホワイトボックス変換実行時マネジャによりアクセスされ、
前記ホワイトボックス変換実行時マネジャが、様々なホワイトボックス変換実行時キーとそれらに対応するホワイトボックス変換逆オペレーションコードの記憶、回収およびマッチングを調整し、
それにより、各ホワイトボックス変換プロセスが、ホワイトボックス変換実行時マネジャを使用し、実行時に対応のホワイトボックス変換実行時キーを用いて適切なホワイトボックス変換逆オペレーションを起動する、請求項１３に記載の方法。
【請求項１６】
暗号化アルゴリズムが選択され、暗号キーがユーザにより提供されると、ホワイトボックス変換生成機が、
ｂ）ホワイトボックス変換オペレーションコードとして、ホワイトボックス暗号オペレーションコードを生成し、
ｃ）ホワイトボックス変換逆オペレーションコードとして、ホワイトボックス復号オペレーションコードを生成し、
ｄ）ホワイトボックス変換構築時キーデータとして、ホワイトボックス暗号キーデータを生成し、
ｅ）ホワイトボックス変換実行時キーデータとして、ホワイトボックス復号キーデータを生成する、請求項１３に記載の方法。
【請求項１７】
方法が、保護されるアプリケーションが正しく機能するために両方の変更の存在が必要になるよう、バイナリ―コードに対して行われる変更に関連して作用する変更をソースコードに対して施すよう構成されるインターロッキング保護を付加し、かつインターロッキングが、トランスミューテーションのいずれかまたはすべてを除去するのが難しくなるような態様で、層間および層内トランスミューテーションの両方を含み、トランスニューテーションがトランスミューテーションを入れ子にすることによりインターロックされ、各入れ子になったトランスミューテーションが、各々がカプセル化する層に対する保護をさらに提供し、一方でカプセル化層からの保護をさらに受けかつ１以上の層内トランスミューテーションをさらに含み、各層内トランスミューテーションが、保護されるアプリケーションの１つの層内のまたは保護されるアプリケーション全体のための重複する保護を提供する、請求項１から１６のいずれかに記載の方法。
【請求項１８】
ＩＶトランスミューテーションが構築時ＩＶ処理から構成され、該処理が、
ａ）ＩＶに特定的なホワイトボックス変換キーおよびオペレーションコードを生成しかつアセンブルするステップと、
ｂ）構築時のアプリケーションバイナリコードのハッシング情報を表す静的ＩＶバウチャデータを計算するステップと、
ｃ）前記特定的ホワイトボックス変換キーおよびオペレーションコードを使用することによりＩＶに特定的なホワイトボックス変換を適用して、前記アプリケーションの前記バウチャデータを変換し、バウチャデータへの不正アクセスおよび攻撃を防止するステップと、
ｄ）前記専用ホワイトボックス変換キーおよびオペレーションコードに対応する隠しホワイトボックス変換実行時キーデータをアセンブルするステップとを含み、
ＩＶトランスミューテーションが、保護されるアプリケーションの始まりおよび実行の間の実行時アクションから構成され、該アクションが、
ｅ）ＩＶライブラリが起動される間、ＩＶイニシャライザーがホワイトボックス変換実行時ファシリティと対話して、ＩＶに特定的なホワイトボックス変換逆オペレーションをホワイトボックス変換実行時キーデータに対して行うことにより、ホワイトボックス変換されたＩＶデータをプレーンＩＶデータに逆変換し、かつプレーンデータを保護されたデータ構造にロードするステップと、
ｆ）ＯＳによりメモリにロードされるバイナリコードの動的ＩＶバウチャデータを計算し、かつ動的ＩＶバウチャデータを保護されるデータ構造に記憶するステップを含み、前記動的ＩＶバウチャデータが実行時のアプリケーションバイナリコードのハッシング情報を表し、さらに
ｇ）保護された形式で提示される、前記静的ＩＶバウチャデータを前記動的ＩＶバウチャデータに対して比較することにより、保護対象のアプリケーションコードの完全性をチェックするステップとを含む、請求項９に記載の方法。
【請求項１９】
ＩＶトランスミューテーションのアプリケーションが、ユーザが構築時フェーズにアプリケーションのソースコードの選択された場所に、ＩＶＡＰＩ呼び出しを挿入できるようにし、その後、実行時に実行される構築時のアプリケーションに対して、自動的に、自動完全性検証エンジンを付加することにより、指定されたオプションのユーザ指定により決定される完全性のチェックを含む、請求項１８に記載の方法。
【請求項２０】
前記バイナリトランスミューテーションの１つが、アプリケーションモジュールを保護するモジュールトランスミューテーション（ＭＴ）を含み、これは、前記アプリケーションモジュールに対する静的攻撃を防止するために構築時および実行時のＭＰ処理により実行可能なアプリケーションおよび／または動的に共有されるライブライモジュールであることが可能で、
構築時のＭＴ処理が、
ａ）ホワイトボックス変換構築時ファシリティと対話して、ＭＴに特定的なホワイトボックス変換キーおよびオペレーションを生成かつアセンブリするステップを含み、前記アセンブルされたＭＴに特定的なホワイトボックス変換キーおよびオペレーションがＭＴに特定的なホワイトボックス変換構築時キーデータおよびホワイトボックス変換オペレーションならびに対応するホワイトボックス変換実行時データおよびホワイトボックス逆オペレーションを含み、さらに、
ｂ）保護対象のアプリケーションモジュールのバイナリコードを圧縮して、圧縮されたバイナリコードを構成するステップと、
ｃ）前記ＭＴに特定的なホワイトボックス変換構築時キーデータおよびホワイトボックス変換オペレーション（ステップａ）からの）を使用することにより、前記ＭＴに特定的なホワイトボックス変換オペレーションを適用して前記圧縮バイナリコードを変換し、ホワイトボックス変換されたモジュールを形成するステップと、
ｄ）（ステップｃ）からの）前記ホワイトボックス変換されたモジュールと、隠し形式で（ステップａ）でアセンブルされた）前記ホワイトボックス変換実行時キーデータおよび逆オペレーションを含むレジデントセキュリティモジュール（ＲＳＭ）とを組み合わせることにより、前記アプリケーションモジュールのための安全にパッケージされたアプリケーションモジュールを生成するステップとを含み、
モジュールトランスミューテーション（ＭＴ）が、実行時処理からさらに構成され、該処理が、
ｅ）ＯＳが、安全にパッケージされたアプリケーションモジュールをロードしＲＳＭにおけるコードの実行をトリガしている間、ＲＳＭが、ホワイトボックス変換実行時ファシリティと対話して、ホワイトボックス変換実行時キーデータを使用してＩＶに特定的なホワイトボックス変換逆オペレーションを実行することにより、圧縮されたアプリケーションモジュールにホワイトボックス変換されたモジュールを逆変換し、
ｆ）圧縮されたアプリケーションモジュールに対して脱圧縮オペレーションを適用して、前記アプリケーションモジュールのバイナリコードを得るステップと、
ｇ）前記アプリケーションモジュールをメモリ内へマッピングおよびローディングしかつ制御をアプリケーションのエントリポイントに渡すステップとを含む、請求項１１から１８のいずれかに記載の方法。
【請求項２１】
前記バイナリトランスミューテーションの１つが、アプリケーションモジュール内の個々の機能への静的および動的攻撃を防止するため、構築時および実行時のＦＴ処理により前記機能を保護する１以上の機能トランスミューテーション（ＦＴ）を含み、機能トランスミューテーションが、構築時のＦＴ処理から構成され、該処理が、
ａ）ホワイトボックス変換構築時ファシリティと対話して、保護対象の機能の各々に独自の、ＦＴに特定的なホワイトボックス変換キーおよびオペレーションコードを生成しかつアセンブルするステップと、
ｂ）機能の各々に特定的なホワイトボックス変換構築時キーデータおよびホワイトボックス変換オペレーション（ステップａ）からの）を使用して、ＦＴに特定的なホワイトボックス変換を適用することにより前記機能の各々を含むバイナリコードを変換することで、変換された機能を生成するステップと、
ｃ）各変換された機能に対するすべての呼び出しがエントリ機能ハンドラを介して行われ、一方で機能からのリターンがその出口機能ハンドラを介して行われるように、前記変換された機能ごとに、エントリ機能ハンドラおよび出口機能ハンドラをインストールするステップと、
ｄ）ホワイトボックス変換された機能と、ステップｂ）に対して使用したホワイトボックス変換構築時キーデータおよびホワイトボックス変換オペレーションに対応するステップａ）においてアセンブルされた隠しホワイトボックス変換実行時キーデータおよび逆オペレーションと、すべての保護される機能用にステップｃ）においてインストールされたすべてのエントリ機能ハンドラおよび出口機能ハンドラとを組み合わせることにより、レジデントセキュリティモジュール（ＲＳＭ）およびすべての保護される機能を含む前記アプリケーションモジュールのための安全にパッケージされたアプリケーションモジュールを準備するステップを含み、
機能トランスミューテーション（ＦＴ）が、各ＦＴが保護する機能のための実行時アクションからさらに構成され、該アクションが、
ｅ）アプリケーションモジュールの実行中に、保護される機能が起動されると、そのエントリ機能ハンドラがまず実行されて、ホワイトボックス変換実行時ファシリティと対話し、その機能に特定的なホワイトボックス変換実行時キーデータおよびオペレーションコードを使用して、ホワイトボックス変換逆オペレーションを実行することにより、ホワイトボックス変換された機能コードを逆変換するステップと、
ｆ）実行メモリ内へ逆変換機能をロードするステップと、
ｇ）実行の制御を機能に渡し、かつ機能を出る時には、その機能の出口ハンドラを起動するステップとを含む、請求項１１から２０のいずれかに記載の方法。
【請求項２２】
追加の層内トランスミューテーション、すなわちブロックトランスミューテーション（ＢＴ）が、前記機能に対しての静的、動的および自動的攻撃に対するより強い保護を提供するために、かつ特定の実施例において、構築時および実行時にＢＴ処理を行うことによりアプリケーションモジュール内の個々の機能内のコードの基本ブロックを保護し、ブロックトランスミューテーションが、構築時のＢＴ処理から構成され、該処理が、
ａ）前記機能の制御フローおよびデータフローを解析して、ブロック情報および機能の構造を識別かつ決定するステップと、
ｂ）保護されているブロックの各々に到達する全実行路が、そのエントリブロックハンドラをまず起動し、その後、ブロックコードに到達し、最終的に出口ブロックハンドラを介してブロックを去るように、ブロックの各々にエントリブロックハンドラおよび出口ブロックハンドラをインストールすることで各ブロックを増強するステップと、
ｃ）ホワイトボックス変換構築時ファシリティと対話して、保護対象のブロックの各々に独自の、ＢＴに特定的なホワイトボックス変換キーおよびオペレーションコードを生成かつアセンブリするステップと、
ｄ）（ステップｃ）で生成かつアセンブルされた）ブロックの各々に特定的なホワイトボックス変換構築時キーデータおよびホワイトボックス変換オペレーションを使用することにより、ＢＴに特定的なホワイトボックス変換を適用して、（ステップｂ）で処理される）基本ブロックの各々の増強されたバイナリコードを変換するステップと、
ｅ）前記エントリブロックハンドラおよび出口ブロックハンドラを有する前記変換されたブロックを含むレジデントセキュリティモジュール（ＲＳＭ）と、アセンブルされた前記隠しホワイトボックス変換実行時キーデータおよび逆オペレーションとを含む前記アプリケーションモジュールために、安全にパッケージされたアプリケーションモジュールを準備するステップとを含み、
ブロックトランスミューテーション（ＢＴ）が、１つの特定のＦＴ保護される機能の全ての保護されるブロックのための実行時アクションからさらに構成され、該アクションが、
ｆ）アプリケーションモジュール実行の間、保護されるブロックを含む保護機能が起動されるたびに、同じ機能に属するすべてのブロックが、メモリにおいてランダムに転置され、さらに
ｇ）保護されるブロックを実行しようとするたびに、そのエントリブロックハンドラが起動され、これが、ホワイトボックス変換実行時ファシリティと対話して、ホワイトボックス変換実行時キーデータおよびブロックに特定的なオペレーションコードを使用して、ホワイトボックス変換逆オペレーションを実行することにより、ホワイトボックス変換されたブロックを逆変換し、
ｈ）指定された実行メモリに逆変換されたブロックをロードするステップと、
ｉ）ロードされたブロックに実行制御を渡すステップとを含み、ブロックから出る時には、出口ブロックハンドラが（随意に）メモリの足跡をクリアまたはスクランブルし、実行が次のブロックに渡り、保護される機能が出るまで、ステップＢ、ＣおよびＤを繰り返す、請求項２１に記載の方法。
【請求項２３】
前記機能に対する静的、動的および自動的攻撃に対する非常に強力な保護を提供するために、構築時および実行時のＩＴ処理により、アプリケーションモジュール内の個々の機能内のコードの単一命令を保護する、命令トランスミューテーション（ＩＴ）を含む、請求項２０から２２のいずれかに記載の方法。
【請求項２４】
バイナリコードを含むソフトウェアアプリケーションおよび随意には関連データを、元の形式から、アプリケーションの全部または一部に対し、タンパリング、リバースエンジニアまたはリフティングを試みる静的および／または動的攻撃に耐性があるより安全な形式で保護するシステムであって、前記システムが、
ａ）ソフトウェアアプリケーションのための安全なバイナリライブラリを提供して、ユーザが保護を望むコード位置で指定のトランスミューテーション実行挙動を起動することと、
ｂ）前記アプリケーションを含むモジュール、機能、ブロックおよび命令等の様々な粒度の異なるタイプのトランスミューテーションをユーザが適用するオプションを提供することと、
ｃ）構築時ツールセットを提供して、前記アプリケーションに対するバイナリトランスミューテーションの準備を行いかつツールセットを使用して、前記アプリケーションの元の実行を、安全な実行に変換することと、
ｄ）元のアプリケーションに意味的に等価でかつ前記インターロックされたトランスミューテーション実行を含む保護されるアプリケーションを生成するステップを含み、これらトランスミューテーション実行が、トランスミューテーションの準備ともインターロックされるので、バイナリ保護は、保護されるアプリケーションと分離されないようになり、
ｅ）保護されるアプリケーションの実行の間、インターロックされたトランスミューテーションの実行を含む前記保護されるアプリケーションの安全な実行が、静的かつ動的に攻撃を阻止するようにかつその実行のいずれの時においても、実行メモリ内に提示されるバイナリコードの非常に小さな部分のみがクリアな形式であるよう実行を保護するシステム。
【請求項２５】
ホワイトボックス変換によりホワイトボックス実行時キーデータを２以上の部分に分割することができ、１以上の部分が、内部でかつ保護されるアプリケーションに埋め込まれ、かつ残り部部分が外部でかつ１以上の別の記憶形式で記憶される、請求項２４に記載のシステム。
【請求項２６】
外部ホワイトボックス変換実行キー部が、装置に別々に準備されることを可能にすることを含み、保護されるアプリケーションが、内部ホワイトボックス実行時キー部で、装置の準備時の間にインストールされる、請求項２５に記載のシステム。
【請求項２７】
ホワイトボックス変換実行時キーマスタにより起動される特定のホワイトボックス実行時オペレーションを設けて、異なる別々のホワイトボックス実行時キーデータ部を使用可能な形式に再構築することをさらに含む請求項２５に記載のシステム。
【請求項２８】
保護されるアプリケーションとホワイトボックス変換実行時キーのこれらの別々に準備される外部部分との間にインターロック依存性を創出してセキュリティを以下のように向上させることをさらに含み、すなわち、
ａ）保護されるアプリケーションおよび外部キー情報が分配されかつ準備されるいずれかの期間の間、攻撃がより困難になりかつセキュリティリスクが低減されるように、攻撃者がキー全体を入手するためには、ホワイトボックスキーの複数の部分を破る必要があり、
ｂ）保護されるアプリケーションおよびホワイトボックス変換実行時キーの異なるインスタンスがキーデータ分割の異なる割合を有し得るため、実行者がキーの複数の異なる部分の比率を変更することによって多様性を導入することができ、
ｃ）保護されるアプリケーションのインスタンスを１つの装置とインターロックするかまたは保護されるアプリケーションの複数のインスタンスを装置の組にインターロックすること含み、該装置の組は、保護されるアプリケーションのインスタンスが単一の装置に対するのと同じキーデータフォーマットを共有し、いずれか不正でかつマッチングされた装置に対しては、装置からの意味的に等価なアプリケーションのすべてまたは一部のコードリフティングが機能しない、請求項２５に記載のシステム。
【請求項２９】
プロビジョニングが以下のような形をとり、すなわち、
ｄ）製造時に製造者によってまたはプロビジョニング時にサービスプロバイダによって装置上にホワイトボックス変換実行時キーの外部部分がインストールされ、
ｅ）初回または毎回アプリケーションが起動されると、ネットワークを介してホワイトボックス変換実行時キーの外部部分がダウンロードされ、
ｆ）アプリケーションが起動されると、装置に接続されるスマートカード等のユーザが供給する装置からホワイトボックス変換実行時キーの外部部分を取得し、かつ
ｇ）アプリケーションが起動されると、ユーザによりホワイトボックス変換実行時キーの外部部分を手動でエンターするという形をとる、請求項２８に記載のシステム。
【請求項３０】
前記変更が、
前記コンポーネントコードに１以上のＷＢ変更を適用しかつ前記バイナリアプリケーションのコードへの前記変更と絡み合された新しいコードをインプラントすることと、
前記変更間に相互依存性を生成かつ配置することにより前記変更をインターロックすることと、
保護対象のバイナリアプリケーションコードおよびインプラントされたコードの両方に前記変更を適用しかつインターロックを行って、元のアプリケーションに意味的に等価だが、バイナリ保護が保護されるアプリケーションと分離されないように前記インターロックされた変換を含むトランスミュートされたアプリケーションを生成することとを含む、請求項１に記載の方法。
【請求項３１】
ステップＡ＋Ｂが、保護対象のアプリケーションのバイナリ形式に対してバイナリトランスミューテーションに特定的なオペレーションを行いかつ実行時に必要とされる関連の静的インターロッキングデータを生成するステップを含み、
バイナリトランスミューテーションが、実行時プロセスをさらに含み、該プロセスが、
ａ）トランスミューテーションが除去または改変された場合には、アプリケーションの元の意味が保存されないような態様で、アプリケーションに挿入されるトランスミューテーション実行コードを実行するステップと、
ｂ）トランスミューテーション実行コードを実行しながらさらに必要な実行時インターロッキングデータを動的に生成するステップと、
ｃ）前記関連の静的かつ動的インターロッキングデータを使用して、適宜インターロッキング依存性を検証するステップと、
ｄ）保護されるアプリケーションを実行しながら、１つのトランスミューテーションが、第２のトランスミューテーションの実行に適したアプリケーション状態を生成するために必要になるように指定された順序で、一連の複数のトランスミューテーションを実行するステップとを含む、請求項１に記載の方法。
【請求項３２】
いずれか所与のトランスミューテーションが、ＩＶおよびＡＤＢルーチンに、それらの付随するインターロックファシリティを挿入することを含み、プログラムを、その後ＷＢ技術で変換される機能、ブロックおよび命令に分解が、実行のための特定的環境（エントリハンドラおよび出口ハンドラ、ＲＳＭその他を含む）を必要とするため、実際的には不可逆的になっている、請求項３１に記載の方法。
【請求項３３】
バイナリアプリケーションコード含むバイナリソフトウェアアプリケーションを、元の形式からそのアプリケーションの全体または一部に、タンパリング、リバースエンジニアまたはリフティングを試みる静的および／または動的攻撃に耐性がある安全な形式に変換する方法であって、前記方法が、
前記バイナリアプリケーションを解析して、バイナリトランスミューテーションを適用できる前記アプリケーションのコンポーネントを決定するステップを含み、各バイナリトランスミューテーションが、
前記コンポーネントコードに対して変換を適用することにより前記コードに変更を行いかつ前記変換されたコンポーネントコードと絡み合されたトランスミューテーション実行コードを付加的にインプラントするステップと、
前記変更と、主要なアプリケーションまたは他のコンポーネントを含み得る前記アプリケーションコードの他の局面との間に相互依存性を生成かつ配置することにより前記変更をインターロックするステップと、
保護対象のバイナリアプリケーションコードおよびインプラントされたコードの両方に前記変更およびインターロッキングを適用して元のアプリケーションと意味的に等価だが、バイナリ保護が、保護されるアプリケーションから分離されることがないように前記インターロックされた変換を含むトランスミュートされたアプリケーションを生成するステップとを含む、方法。
【請求項３４】
バイナリトランスミューテーションが、実行時に必要な関連の静的インターロッキングデータを生成することを含み、
バイナリトランスミューテーションが、実行時プロセスを含み、該プロセスが、
ａ）トランスミューテーションが除去されるか改変された場合にはアプリケーションの元の意味が保存されないような態様で、アプリケーションに挿入されたトランスミューテーション実行コードを実行するステップと、
ｂ）トランスミューテーション実行コードを実行しながらさらに必要とされる実行時インターロッキングデータを動的に生成するステップと、
ｃ）前記関連の静的および動的インターロッキングデータを使用して、適宜、インターロッキング相互依存性を検証するステップと、
ｄ）保護されるアプリケーションを実行しながら、１つのトランスミューテーションが、第２のトランスミューテーションの実行に適したアプリケーション状態を生成するために必要になるように指定された順序で、一連の複数のトランスミューテーションを実行するステップとを含む、請求項３２に記載の方法。
【請求項３５】
保護されたアプリケーションが、再構築、再テスト、および再配置と保護されたアプリケーション全体の再起動とを必要とせずに、保護された機能を容易に変更することを許可し、機能コードをコード形式ではなくデータ形式で、実行ファイルおよび動的にロードされるかまたは共有されるライブラリ等のコードバイナリを通常は許可しない標的システム上の領域に配置することを可能とする、動的機能ローディングステップをさらに含む、請求項１に記載の方法。
【請求項３６】
構築時の前記動的機能ローディングステップが、
１）アプリケーションからの動的機能ローディングにより保護されるべき機能を選択することと、
２）変換された機能と隠しホワイトボックス逆変換キーとを含む保護されたデータモジュールを生成するために、前記機能のそれぞれに対して供給されたホワイトボックス変換キーとアルゴリズム仕様とに基づいてホワイトボックス変換を適用することと、
３）保護されたアプリケーションを生成するために、保護された機能のオリジナルコードを除去し、動的機能ローディングライブラリを呼び出すことにより前記機能の呼び出しを置換するようアプリケーションを変更することとを含む、請求項３５に記載の方法。
【請求項３７】
実行時の前記動的機能ローディングステップが、以下を含む、請求項３６に記載の方法。
１）保護されたアプリケーションが保護された機能を呼び出す場合、前記アプリケーションが、呼び出すべき保護されたデータモジュールおよび機能を特定することにより、動的機能ローディングライブラリを呼び出し、
２）前記動的機能ローディングライブラリが、保護されたデータモジュールから機能データを発見し、ホワイトボックス逆変換キーを用いることにより前記データをコードへ変換し、当該コードを呼び出し準備ができたメモリへ実行可能形式でロードし、
３）前記動的機能ローディングライブラリが、前記機能へパラメータを供給することにより、呼び出しアプリケーションの代わりに前記機能を呼び出し、前記機能から戻される結果は、前記機能の実行が完了した後に呼び出し者へ送られ、
３）前記呼び出しアプリケーションが、前記動的機能ローディングライブラリから前記機能を安全に消去することを要求することができる。
【請求項３８】
動的機能ローディングエンジンをさらに含む、クレーム２４に記載のシステム。
【請求項３９】
機械で読み取り可能で実行可能な命令であって、プロセッサで実行されたときに当該プロセッサに請求項１から２３、および３０から３５のいずれかに記載の方法を実行させる命令を実体的に格納する機械読み取り可能媒体を含むコンピュータプログラム製品。