(57)【要約】  ハッカーがソフトウェアイメージを構成するソフトウェア群をリバースエンジニアリングする際に、ハッカーを混乱させるためのソフトウェアイメージの難読化が提供される（４０２）。コンピューティングマシン上の中央処理装置やキャッシュメモリなどのハードウェアリソースが、ソフトウェア改ざんの抑止が可能なクラスに属するか否かを判定するためのプロセスもまた提供される（４４２）。スレッド保護は、保護ソフトウェアを実行する様々なスレッドによって改ざんを抑止する（４４３）。サービス保護は、様々な許可されていないサービスの実行を可能にする改ざんを抑止する（４０７）。インストールセットアップ保護は、様々なソフトウェアがインストールされる間の改ざんを抑止する（２０２）。ハードウェア保護は、ハッカーが様々なソフトウェアを許可されていないハードウェア上で実行させるのを防止する（３Ｂ）。
2008503014.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止する方法であって、
許可されていないサービスの実行を抑止するための、難読化された保護ダイナミックリンクライブラリの保護関数（protection function）を呼び出すことと、
中央階層型データベースのキーおよび値を保護するための、前記難読化された保護ダイナミックリンクライブラリの別の保護関数を呼び出すことと
を備えることを特徴とする方法。
【請求項２】
ログオンモジュールを実行することをさらに備え、前記ログオンモジュールは、前記ソフトウェアが分類される製品クラスに対する保護が利用可能な場合に、前記難読化された保護ダイナミックリンクライブラリをロードすることを特徴とする請求項１に記載の方法。
【請求項３】
前記難読化された保護ダイナミックリンクライブラリを前記ロードする動作が失敗した場合、前記コンピューティングマシンをシャットダウンすることをさらに備えることを特徴とする請求項２に記載の方法。
【請求項４】
許可されていないサービスの実行を抑止するための、難読化された保護ダイナミックリンクライブラリの保護関数を前記呼び出す動作は、許可されたサービスのリストをチェックして許可されていないサービスの実行を削除するスレッドを生成することを特徴とする請求項３に記載の方法。
【請求項５】
中央階層型データベースのキーおよび値を保護するための、前記難読化された保護ダイナミックリンクライブラリの別の保護関数を前記呼び出す動作は、システムコンテキストのキーおよび値を保護するためのスレッドを生成することを含むことを特徴とする請求項４に記載の方法。
【請求項６】
中央階層型データベースのキーおよび値を保護するための、前記難読化された保護ダイナミックリンクライブラリの別の保護関数を前記呼び出す動作は、ユーザコンテキストのキーおよび値を保護するためのスレッドを生成することを含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記スレッドが確実に実行されていることを定期的に判定するためのタイマを生成することをさらに備えることを特徴とする請求項６に記載の方法。
【請求項８】
ログオフが開始した場合であって、かつ、前記ソフトウェアが分類される製品クラスに対する保護が利用可能な場合、前記スレッドを停止することをさらに備えることを特徴とする請求項７に記載の方法。
【請求項９】
コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を有するコンピュータ読取り可能な媒体であって、
前記方法は、
許可されていないサービスの実行を抑止するための、難読化された保護ダイナミックリンクライブラリの保護関数を呼び出すことと、
中央階層型データベースのキーおよび値を保護するための、前記難読化された保護ダイナミックリンクライブラリの別の保護関数を呼び出すことと
を備えることを特徴とするコンピュータ読取り可能な媒体。
【請求項１０】
前記方法は、ログオンモジュールを実行することをさらに備え、前記ログオンモジュールは、前記ソフトウェアが分類される製品クラスに対する保護が利用可能な場合に、前記難読化された保護ダイナミックリンクライブラリをロードすることを特徴とする請求項９に記載のコンピュータ読取り可能な媒体。
【請求項１１】
前記方法は、前記難読化された保護ダイナミックリンクライブラリを前記ロードする動作が失敗した場合、前記コンピューティングマシンをシャットダウンすることをさらに備えることを特徴とする請求項１０に記載のコンピュータ読取り可能な媒体。
【請求項１２】
許可されていないサービスの実行を抑止するための、難読化された保護ダイナミックリンクライブラリの保護関数を前記呼び出す動作は、許可されたサービスのリストをチェックして許可されていないサービスの実行を削除するスレッドを生成することを特徴とする請求項１１に記載のコンピュータ読取り可能な媒体。
【請求項１３】
中央階層型データベースのキーおよび値を保護するための、前記難読化された保護ダイナミックリンクライブラリの別の保護関数を前記呼び出す動作は、システムコンテキストのキーおよび値を保護するためのスレッドを生成することを含むことを特徴とする請求項１２に記載のコンピュータ読取り可能な媒体。
【請求項１４】
中央階層型データベースのキーおよび値を保護するための、前記難読化された保護ダイナミックリンクライブラリの別の保護関数を前記呼び出す動作は、ユーザコンテキストのキーおよび値を保護するためのスレッドを生成することを含むことを特徴とする請求項１３に記載のコンピュータ読取り可能な媒体。
【請求項１５】
前記方法は、前記スレッドが確実に実行されていることを定期的に判定するためのタイマを生成することをさらに備えることを特徴とする請求項１４に記載のコンピュータ読取り可能な媒体。
【請求項１６】
前記方法は、ログオフが開始した場合であって、かつ、前記ソフトウェアが分類される製品クラスに対する利用保護が可能な場合、前記スレッドを停止することをさらに備えることを特徴とする請求項１５に記載のコンピュータ読取り可能な媒体。
【請求項１７】
コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止するためのシステムであって、
許可されていないサービスの実行を抑止するための、難読化された保護ダイナミックリンクライブラリの保護関数を呼び出す手段と、
中央階層型データベースのキーおよび値を保護するための、前記難読化された保護ダイナミックリンクライブラリの別の保護関数を呼び出す手段と
を備えたことを特徴とするシステム。
【請求項１８】
ログオンモジュールを実行する手段をさらに備え、前記ログオンモジュールは、前記ソフトウェアが分類される製品クラスに対する保護が利用可能な場合に、前記難読化された保護ダイナミックリンクライブラリをロードすることを特徴とする請求項１７に記載のシステム。
【請求項１９】
前記難読化された保護ダイナミックリンクライブラリを前記ロードする動作が失敗した場合、前記コンピューティングマシンをシャットダウンする手段をさらに備えたことを特徴とする請求項１８に記載のシステム。
【請求項２０】
許可されていないサービスの実行を抑止するための、難読化された保護ダイナミックリンクライブラリの保護関数を前記呼び出す手段は、許可されたサービスのリストをチェックして許可されていないサービスの実行を削除するスレッドを生成することを特徴とする請求項１９に記載のシステム。
【請求項２１】
情報のオリジナル性を検証するための、コンピューティングシステムによって使用されるコンピュータ実行可能命令と、１つまたは複数のデータ構造とを記憶したコンピュータ読取り可能な媒体であって、
保護ダイナミックリンクライブラリの秘密ライブラリキーを用いて暗号化されたプロファイル
を備え、前記プロファイルは、プロファイルデータを含み、前記プロファイルデータのサイズおよびフォーマットは、プロファイルタイプに依存し、前記プロファイルは、前記保護ダイナミックリンクライブラリの公開ライブラリキーを用いてデジタル署名されたシグネチャをさらに含み、前記プロファイルは、前記プロファイルを識別する識別子と前記プロファイルデータとのチェックサムを含むベリファイアブロブ（verifier blob）をさらに含むことを特徴とするコンピュータ読取り可能な媒体。
【請求項２２】
前記プロファイルが記憶される中央階層型データベースを有することを特徴とする請求項２１に記載のコンピュータ読取り可能な媒体。
【請求項２３】
秘密呼び出しキーおよび公開呼び出しキーを含むログオンモジュールをさらに備え、前記プロファイルの前記ベリファイアブロブは、前記秘密呼び出しキーを用いて暗号化され、前記公開呼び出しキーを用いて署名されることを特徴とする請求項２２に記載のコンピュータ読取り可能な媒体。
【請求項２４】
前記保護ダイナミックリンクライブラリは、公開ライブラリキーおよび秘密ライブラリキーを含み、前記プロファイルの前記シグネチャは、前記公開ライブラリキーを用いて署名され、前記プロファイルは、前記秘密ライブラリキーを用いて暗号化されることを特徴とする請求項２２に記載のコンピュータ読取り可能な媒体。
【請求項２５】
前記プロファイルの前記プロファイルデータ、前記シグネチャ、および前記ベリファイアブロブの構造は、別のプロファイルとは異なることを特徴とする請求項２２に記載のコンピュータ読取り可能な媒体。
【請求項２６】
ソフトウェア間の相互動作を保護するためのコンピュータで実施される方法であって、
公開呼び出しキーおよび秘密呼び出しキーを有する第１のソフトウェアによって、中央階層型データベースに記憶されたプロファイルへのアクセスを開始することであって、前記第１のソフトウェアはランダムなソルト値を送る、アクセスを開始することと、
秘密ライブラリキーを有する第２のソフトウェアによって、前記ランダムなソルト値を受け取った後、前記第２のソフトウェアは、前記中央階層型データベース内で前記プロファイルを見つけて、前記秘密ライブラリキーを使用して前記プロファイルを解読することと
を備えることを特徴とする方法。
【請求項２７】
前記第２のソフトウェアは、前記プロファイルの識別子と、前記プロファイルのデータと、前記プロファイルを見つけた結果と、前記ランダムなソルト値とを含む情報集合の第１のチェックサムを計算することを特徴とする請求項２６に記載の方法。
【請求項２８】
前記第２のソフトウェアは、前記プロファイルを見つけた結果と、前記公開呼び出しキーを用いて署名され、かつ、前記秘密呼び出しキーを用いて暗号化された前記プロファイルのベリファイアブロブと、前記第２のソフトウェアによって計算された前記第１のチェックサムとを送ることを特徴とする請求項２７に記載の方法。
【請求項２９】
前記第１のソフトウェアは、前記プロファイルの結果と、前記ベリファイアブロブと、前記第１のチェックサムとを受け取った後、前記秘密呼び出しキーを使用して前記ベリファイアブロブを解読し、前記公開呼び出しキーを使用してシグネチャを検証し、前記第１のソフトウェアは、前記プロファイルの識別子と、前記プロファイルのデータと、前記プロファイルを見つけた結果と、前記ランダムなソルト値とを含む情報集合の第２のチェックサムを計算することをさらに備えることを特徴とする請求項２８に記載の方法。
【請求項３０】
前記第１のチェックサムと前記第２のチェックサムとを比較することをさらに備え、前記第１のチェックサムと前記第２のチェックサムとが一致しない場合、改ざんが行われたとの結論を下すことを特徴とする請求項２９に記載の方法。
【請求項３１】
ソフトウェア間の相互動作を保護するためのコンピュータで実施される方法を実行するためのコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体であって、
前記方法は、
公開呼び出しキーおよび秘密呼び出しキーを有する第１のソフトウェアによって、中央階層型データベースに記憶されたプロファイルへのアクセスを開始することであって、前記第１のソフトウェアはランダムなソルト値を送る、アクセスを開始することと、
秘密ライブラリキーを有する第２のソフトウェアによって、前記ランダムなソルト値を受け取った後、前記中央階層型データベース内で前記プロファイルを見つけて、前記秘密ライブラリキーを使用して前記プロファイルを解読することと
を備えることを特徴とするコンピュータ読取り可能な媒体。
【請求項３２】
前記第２のソフトウェアは、前記プロファイルの識別子と、前記プロファイルのデータと、前記プロファイルを見つけた結果と、前記ランダムなソルト値とを含む情報集合の第１のチェックサムを計算することを特徴とする請求項３１に記載のコンピュータ読取り可能な媒体。
【請求項３３】
前記第２のソフトウェアは、前記プロファイルを見つけた結果と、前記公開呼び出しキーを用いて署名され、かつ、前記秘密呼び出しキーを用いて暗号化された前記プロファイルのベリファイアブロブと、前記第２のソフトウェアによって計算された前記第１のチェックサムとを送ることを特徴とする請求項３２に記載のコンピュータ読取り可能な媒体。
【請求項３４】
前記方法は、前記第１のソフトウェアが、前記プロファイルの結果と、前記ベリファイアブロブと、前記第１のチェックサムとを受け取った後、前記秘密呼び出しキーを使用して前記ベリファイアブロブを解読し、前記公開呼び出しキーを使用してシグネチャを検証し、前記第１のソフトウェアが、前記プロファイルの識別子と、前記プロファイルのデータと、前記プロファイルを見つけた結果と、前記ランダムなソルト値とを含む情報集合の第２のチェックサムを計算することをさらに備えることを特徴とする請求項３３に記載のコンピュータ読取り可能な媒体。
【請求項３５】
前記方法は、前記第１のチェックサムと前記第２のチェックサムとを比較することをさらに備え、前記第１のチェックサムと前記第２のチェックサムとが一致しない場合、改ざんが行われたとの結論を下すことを特徴とする請求項３４に記載のコンピュータ読取り可能な媒体。
【請求項３６】
ソフトウェア間の相互動作を保護するためのシステムであって、
公開呼び出しキーおよび秘密呼び出しキーを有する第１のソフトウェアによって、中央階層型データベースに記憶されたプロファイルへのアクセスを開始する手段であって、前記第１のソフトウェアはランダムなソルト値を送る、アクセスを開始する手段と、
秘密ライブラリキーを有する第２のソフトウェアによって、前記ランダムなソルト値を受け取った後、前記第２のソフトウェアによって実行される、前記中央階層型データベース内で前記プロファイルを見つけて、前記秘密ライブラリキーを使用して前記プロファイルを解読する手段と
を備えたことを特徴とするシステム。
【請求項３７】
前記第２のソフトウェアは、前記プロファイルの識別子と、前記プロファイルのデータと、前記プロファイルを見つけた結果と、前記ランダムなソルト値とを含む情報集合の第１のチェックサムを計算する手段を使用することを特徴とする請求項３６に記載のシステム。
【請求項３８】
前記第２のソフトウェアは、前記プロファイルを見つけた結果と、前記公開呼び出しキーを用いて署名され、かつ、前記秘密呼び出しキーを用いて暗号化された前記プロファイルのベリファイアブロブと、前記第２のソフトウェアによって計算された前記第１のチェックサムとを送る手段を使用することを特徴とする請求項３７に記載のシステム。
【請求項３９】
前記第１のソフトウェアが、前記プロファイルの結果と、前記ベリファイアブロブと、前記第１のチェックサムとを受け取った後、前記第１のソフトウェアによって実行される、前記秘密呼び出しキーを使用して前記ベリファイアブロブを解読し、前記公開呼び出しキーを使用してシグネチャを検証する手段をさらに備え、前記第１のソフトウェアは、前記プロファイルの識別子と、前記プロファイルのデータと、前記プロファイルを見つけた結果と、前記ランダムなソルト値とを含む情報集合の第２のチェックサムを計算することを特徴とする請求項３８に記載のシステム。
【請求項４０】
コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止する方法であって、
前記ソフトウェアが分類される製品クラスに対する保護が利用可能な場合、難読化された保護ダイナミックリンクライブラリを前記コンピューティングマシンにロードすることと、
前記コンピューティングマシン上で実行される前記ソフトウェアが、改ざんからの保護が利用可能である前記製品クラス内に依然として存在することを監視するための、システムタイマを生成することと
を備えることを特徴とする方法。
【請求項４１】
前記システムタイマは無期限のスレッド内で実行されることを特徴とする請求項４０に記載の方法。
【請求項４２】
前記システムタイマは、予め設定された期間に関連付けられ、前記予め設定されたタイマ期間が過ぎると、タイマルーチンが実行されることを特徴とする請求項４１に記載の方法。
【請求項４３】
前記タイマルーチンは、中央階層型データベースに記憶されたアクティベーションキー（activation key）をチェックして、前記製品クラスを復号することを特徴とする請求項４２に記載の方法。
【請求項４４】
前記復号した製品クラスに対する利用可能な保護がなく、前記ソフトウェアが改ざんされたことを示す場合、前記タイマルーチンは、セキュリティエラー対策を講じることを特徴とする請求項４３に記載の方法。
【請求項４５】
ユーザの構成が、前記中央階層型データベースに記憶された予め定められたプロファイルと一致しない場合、前記タイマルーチンは、セキュリティエラー対策を講じることを特徴とする請求項４４に記載の方法。
【請求項４６】
コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体であって、
前記方法は、
前記ソフトウェアが分類される製品クラスに対する保護が利用可能な場合、難読化された保護ダイナミックリンクライブラリを前記コンピューティングマシンにロードすることと、
前記コンピューティングマシン上で実行される前記ソフトウェアが、改ざんからの保護が利用可能である前記製品クラス内に依然として存在することを監視するための、システムタイマを生成することと
を備えることを特徴とするコンピュータ読取り可能な媒体。
【請求項４７】
前記システムタイマは無期限のスレッド内で実行されることを特徴とする請求項４６に記載のコンピュータ読取り可能な媒体。
【請求項４８】
前記システムタイマは、予め設定された期間に関連付けられ、前記予め設定されたタイマ期間が過ぎると、タイマルーチンが実行されることを特徴とする請求項４７に記載のコンピュータ読取り可能な媒体。
【請求項４９】
前記タイマルーチンは、中央階層型データベースに記憶されたアクティベーションキーをチェックして、前記製品クラスを復号することを特徴とする請求項４８に記載のコンピュータ可読媒体。
【請求項５０】
前記復号した製品クラスに対する利用可能な保護がなく、前記ソフトウェアが改ざんされたことを示す場合、前記タイマルーチンは、セキュリティエラー対策を講じることを特徴とする請求項４９に記載のコンピュータ読取り可能な媒体。
【請求項５１】
ユーザの構成が、前記中央階層型データベースに記憶された予め定められたプロファイルと一致しない場合、前記タイマルーチンは、セキュリティエラー対策を講じることを特徴とする請求項５０に記載のコンピュータ読取り可能な媒体。
【請求項５２】
コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止する方法であって、
前記コンピューティングマシン上で、難読化された保護ダイナミックリンクライブラリの保護関数を呼び出すことから、複数の実行スレッドを生成することであって、前記複数のスレッドのうちの１つのスレッドは、許可されていないサービスの実行を抑止し、前記複数のスレッドのうちの他のスレッドは、中央階層型データベースのキーおよび値を保護する、複数の実行スレッドを生成することと、
前記複数のスレッドが実行されていることを監視するためのタイマを生成することと
を備えることを特徴とする方法。
【請求項５３】
前記タイマは無期限のスレッド内で実行されることを特徴とする請求項５２に記載の方法。
【請求項５４】
前記タイマは、予め設定された期間に関連付けられ、前記予め設定されたタイマ期間が過ぎると、タイマルーチンが実行されることを特徴とする請求項５３に記載の方法。
【請求項５５】
前記複数のスレッドのうちの前記１つのスレッドが終了または一時停止して、前記複数のスレッドのうちの前記１つのスレッドが改ざんされたことを示す場合、前記タイマルーチンは、セキュリティエラー対策を講じることを特徴とする請求項５４に記載の方法。
【請求項５６】
前記複数のスレッドのうちの前記他のスレッドが終了または一時停止して、前記複数のスレッドのうちの前記他のスレッドが改ざんされたことを示す場合、前記タイマルーチンは、セキュリティエラー対策を講じることを特徴とする請求項５５に記載の方法。
【請求項５７】
コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体であって、
前記方法は、
前記コンピューティングマシン上で、難読化された保護ダイナミックリンクライブラリの保護関数を呼び出すことから、複数の実行スレッドを生成することであって、前記複数のスレッドのうちの１つのスレッドは、許可されていないサービスの実行を抑止し、前記複数のスレッドのうちの他のスレッドは、中央階層型データベースのキーおよび値を保護する、複数の実行スレッドを生成することと、
前記複数のスレッドが実行されていることを監視するためのタイマを生成することと
を備えることを特徴とするコンピュータ読取り可能な媒体。
【請求項５８】
前記複数のスレッドのうちの前記１つのスレッドが終了または一時停止して、前記複数のスレッドのうちの前記１つのスレッドが改ざんされたことを示す場合、前記方法は、セキュリティエラー対策を講じることを特徴とする請求項５７に記載のコンピュータ読取り可能な媒体。
【請求項５９】
前記複数のスレッドのうちの前記他のスレッドが終了または一時停止して、前記複数のスレッドのうちの前記他のスレッドが改ざんされたことを示す場合、前記方法は、セキュリティエラー対策を講じることを特徴とする請求項５８に記載のコンピュータ読取り可能な媒体。
【請求項６０】
サービス改ざんを抑止する方法であって、
コンピューティングマシンの起動時に、ログオンモジュールによって、難読化されたダイナミックリンクライブラリの保護関数を呼び出して、許可されていないサービスの実行を抑止するスレッドを生成することと、
難読化された保護ダイナミックリンクライブラリと通信して、許可されていないサービスのリストに関連する暗号化された保護プロファイルにアクセスすることと
を備えることを特徴とする方法。
【請求項６１】
前記呼び出す動作は、前記難読化されたダイナミックリンクライブラリによって、前記ログオンモジュールに前記スレッドへのハンドルを返すことを含むことを特徴とする請求項６０に記載の方法。
【請求項６２】
許可されていないサービスの実行を抑止する前記スレッドの継続性をチェックするためのタイマを生成することをさらに備えることを特徴とする請求項６１に記載の方法。
【請求項６３】
予め設定された期間が過ぎて、前記スレッドが終了した場合、システムのシャットダウンを開始することをさらに備えることを特徴とする請求項６２に記載の方法。
【請求項６４】
予め設定された期間が過ぎて、前記スレッドが一時停止した場合、システムのシャットダウンを開始することをさらに備えることを特徴とする請求項６３に記載の方法。
【請求項６５】
前記難読化されたダイナミックリンクライブラリによって、前記許可されていないサービスのリストを含むプロファイルを見つけ、前記プロファイルのＩＤと、前記プロファイルのデータと、前記ログオンモジュールから前記難読化された保護ダイナミックリンクライブラリに送られたソルト値とから、チェックサムを計算することをさらに備えることを特徴とする請求項６４に記載の方法。
【請求項６６】
前記難読化された保護ダイナミックリンクライブラリによって、結果データ構造と、前記プロファイルのベリファイアブロブと、前記計算したチェックサムとを、前記ログオンモジュールに返すことをさらに備えることを特徴とする請求項６５に記載の方法。
【請求項６７】
前記ログオンモジュールによって計算されたチェックサムと、前記保護ダイナミックリンクライブラリによって計算されたチェックサムとが一致しなかった場合、セキュリティエラー対策を講じることをさらに備え、前記ログオンモジュールによって計算された前記チェックサムは、解読されたベリファイアチェックサムと、受け取った前記結果データ構造と、前記ソルト値とに依存することを特徴とする請求項６６に記載の方法。
【請求項６８】
許可されていないサービスが実行されている場合、前記許可されていないサービスに依存するすべてのサービスを停止し、前記許可されていないサービスを削除することをさらに備えることを特徴とする請求項６７に記載の方法。
【請求項６９】
予め設定された期間の間、前記スレッドをスリープさせることをさらに備えることを特徴とする請求項６８に記載の方法。
【請求項７０】
サービス改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体であって、
前記方法は、
コンピューティングマシンの起動時に、ログオンモジュールによって、難読化されたダイナミックリンクライブラリの保護関数を呼び出して、許可されていないサービスの実行を抑止するスレッドを生成することと、
難読化された保護ダイナミックリンクライブラリと通信して、許可されていないサービスのリストに関連する暗号化された保護プロファイルにアクセスすることと
を備えることを特徴とするコンピュータ読取り可能な媒体。
【請求項７１】
前記呼び出す動作は、前記難読化されたダイナミックリンクライブラリによって、前記スレッドへのハンドルを前記ログオンモジュールに返すことを含むことを特徴とする請求項７０に記載のコンピュータ読取り可能な媒体。
【請求項７２】
前記方法は、許可されていないサービスの実行を抑止する前記スレッドの継続性をチェックするためのタイマを生成することをさらに備えることを特徴とする請求項７１に記載のコンピュータ読取り可能な媒体。
【請求項７３】
前記方法は、予め設定された期間が過ぎて、前記スレッドが終了した場合、システムのシャットダウンを開始することをさらに備えることを特徴とする請求項７２に記載のコンピュータ読取り可能な媒体。
【請求項７４】
前記方法は、予め設定された期間が過ぎて、前記スレッドが一時停止した場合、システムのシャットダウンを開始することをさらに備えることを特徴とする請求項７３に記載のコンピュータ読取り可能な媒体。
【請求項７５】
前記方法は、前記難読化されたダイナミックリンクライブラリによって、前記許可されていないサービスのリストを含むプロファイルを見つけ、前記プロファイルのＩＤと、前記プロファイルのデータと、前記ログオンモジュールから前記難読化された保護ダイナミックリンクライブラリに送られたソルト値とから、チェックサムを計算することをさらに備えることを特徴とする請求項７４に記載のコンピュータ読取り可能な媒体。
【請求項７６】
前記方法は、前記難読化されたダイナミックリンクライブラリによって、結果データ構造と、前記プロファイルのベリファイアブロブと、前記計算したチェックサムとを、前記ログオンモジュールに返すことをさらに備えることを特徴とする請求項７５に記載のコンピュータ読取り可能な媒体。
【請求項７７】
前記方法は、前記ログオンモジュールによって計算されたチェックサムと、前記保護ダイナミックリンクライブラリによって計算されたチェックサムとが一致しなかった場合、セキュリティエラー対策を講じることをさらに備え、前記ログオンモジュールによって計算されたチェックサムは、解読されたベリファイアチェックサムと、受け取った前記結果データ構造と、前記ソルト値とに依存することを特徴とする請求項７６に記載のコンピュータ読取り可能な媒体。
【請求項７８】
前記方法は、許可されていないサービスが実行されている場合、前記許可されていないサービスに依存するすべてのサービスを停止し、前記許可されていないサービスを削除することをさらに備えることを特徴とする請求項７７に記載のコンピュータ読取り可能な媒体。
【請求項７９】
前記方法は、予め設定された期間の間、前記スレッドをスリープさせることをさらに備えることを特徴とする請求項７８に記載のコンピュータ読取り可能な媒体。
【請求項８０】
ソフトウェアをインストールするための、コンピューティングシステムによって使用されるコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体であって、
コンピュータ実行可能命令を含む保護ダイナミックリンクライブラリであって、前記コンピュータ実行可能命令は、改ざんがあるか否かについて中央階層型データベースを監視し、前記コンピューティングシステムに記憶されたファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止する、保護ダイナミックリンクライブラリ
を備えたことを特徴とするコンピュータ読取り可能な媒体。
【請求項８１】
一意な製品識別子を生成して、前記生成した製品識別子を前記中央階層型データベースに記憶するための製品識別子ダイナミックリンクライブラリと、
ダイナミックリンクライブラリをセットアップするための情報を含むセットアップ情報ファイルと、
前記セットアップ情報ファイル内の情報を使用して、前記ダイナミックリンクライブラリをセットアップするためのセットアップソフトウェアと
をさらに備えたことを特徴とする請求項８０に記載のコンピュータ読取り可能な媒体。
【請求項８２】
前記セットアップソフトウェアによって、前記セットアップ情報ファイルを使用して生成されたインストールダイナミックリンクライブラリと、
市販のソフトウェアパッケージに関連するファイルに関する情報を含む保護情報ファイルと
をさらに備えたことを特徴とする請求項８１に記載のコンピュータ読取り可能な媒体。
【請求項８３】
前記中央階層型データベースは、前記一意な製品識別子と、前記コンピューティングシステムが前記市販のソフトウェアパッケージを実行していることの検証を助けるための、前記一意な製品識別子から得られるアクティベーションキーと、前記システムに記憶された前記ファイルのセットのオリジナル性の検証を容易にするための、前記ファイルのセットのシグネチャを含む暗号化された保護プロファイルとを含むことを特徴とする請求項８２に記載のコンピュータ読取り可能な媒体。
【請求項８４】
前記保護ダイナミックリンクライブラリは、前記インストールダイナミックリンクライブラリによって、前記保護情報ファイルに記憶された情報を使用して生成されることを特徴とする請求項８３に記載のコンピュータ読取り可能な媒体。
【請求項８５】
ソフトウェアセットアップを保護するためのコンピュータで実施される方法であって、
市販のソフトウェアパッケージのクラスに属するものとしてソフトウェアを識別するための製品識別子を生成することと、
前記ソフトウェアが、前記製品識別子に基づいて、ソフトウェア改ざんからの保護が利用可能である市販のソフトウェアパッケージのクラスに属する場合、ソフトウェア改ざんを抑止するための保護ダイナミックリンクライブラリのインストールを容易にすることと
を備えることを特徴とする方法。
【請求項８６】
保護情報ファイルからの情報を使用して、ソフトウェア改ざんを抑止するための前記保護ダイナミックリンクライブラリを生成するセットアップソフトウェアによって、インストールダイナミックリンクライブラリを実行することをさらに備えることを特徴とする請求項８５に記載の方法。
【請求項８７】
実行ソフトウェアが市販のソフトウェアパッケージのクラスに属するか否かの検証を容易にするために、前記製品識別子に基づいて、アクティベーションキーを中央階層型データベースに記録することをさらに備えることを特徴とする請求項８６に記載の方法。
【請求項８８】
サポートされる言語、ハードウェア、およびその他の情報に関するファイルのシグネチャを含む暗号化された保護プロファイルを前記中央階層型データベースに記録することをさらに備えることを特徴とする請求項８７に記載の方法。
【請求項８９】
前記保護ダイナミックリンクライブラリによって使用される情報を含むシステムファイルをインストールすることをさらに備えることを特徴とする請求項８８に記載の方法。
【請求項９０】
ソフトウェアセットアップを保護するためのコンピュータで実施される方法を実行するためのコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体であって、
前記方法は、
市販のソフトウェアパッケージのクラスに属するものとしてソフトウェアを識別するための製品識別子を生成することと、
前記ソフトウェアが、前記製品識別子に基づいて、ソフトウェア改ざんからの保護が利用可能である市販のソフトウェアパッケージのクラスに属する場合、ソフトウェア改ざんを抑止するための保護ダイナミックリンクライブラリのインストールを容易にすることと
を備えることを特徴とするコンピュータ読取り可能な媒体。
【請求項９１】
前記方法は、保護情報ファイルからの情報を使用して、ソフトウェア改ざんを抑止するための前記保護ダイナミックリンクライブラリを生成するセットアップソフトウェアによって、インストールダイナミックリンクライブラリを実行することをさらに備えることを特徴とする請求項９０に記載のコンピュータ読取り可能な媒体。
【請求項９２】
前記方法は、実行ソフトウェアが市販のソフトウェアパッケージのクラスに属するか否かの検証を容易にするために、前記製品識別子に基づいて、アクティベーションキーを中央階層型データベースに記録することをさらに備えることを特徴とする請求項９１に記載のコンピュータ読取り可能な媒体。
【請求項９３】
前記方法は、サポートされる言語、ハードウェア、およびその他の情報に関するファイルのシグネチャを含む暗号化された保護プロファイルを前記中央階層型データベースに記録することをさらに備えることを特徴とする請求項９２に記載のコンピュータ読取り可能な媒体。
【請求項９４】
前記方法は、前記保護ダイナミックリンクライブラリによって使用される情報を含むシステムファイルをインストールすることをさらに備えることを特徴とする請求項９３に記載のコンピュータ読取り可能な媒体。
【請求項９５】
ソフトウェアセットアップを保護するためのシステムであって、
市販のソフトウェアパッケージのクラスに属するものとしてソフトウェアを識別するための製品識別子を生成する手段と、
前記ソフトウェアが、前記製品識別子に基づいて、ソフトウェア改ざんからの保護が利用可能である市販のソフトウェアパッケージのクラスに属する場合、ソフトウェア改ざんを抑止するための保護ダイナミックリンクライブラリのインストールを容易にする手段と
を備えたことを特徴とするシステム。
【請求項９６】
保護情報ファイルからの情報を使用して、ソフトウェア改ざんを抑止するための前記保護ダイナミックリンクライブラリを生成するセットアップソフトウェアによって、インストールダイナミックリンクライブラリを実行する手段をさらに備えたことを特徴とする請求項９５に記載のシステム。
【請求項９７】
実行ソフトウェアが市販のソフトウェアパッケージのクラスに属するか否かの検証を容易にするために、前記製品識別子に基づいて、アクティベーションキーを中央階層型データベースに記録する手段をさらに備えたことを特徴とする請求項９６に記載のシステム。
【請求項９８】
サポートされる言語、ハードウェア、およびその他の情報に関するファイルのシグネチャを含む暗号化された保護プロファイルを前記中央階層型データベースに記録する手段をさらに備えたことを特徴とする請求項９７に記載のシステム。
【請求項９９】
前記保護ダイナミックリンクライブラリによって使用される情報を含むシステムファイルをインストールする手段をさらに備えたことを特徴とする請求項９８に記載のシステム。
【請求項１００】
ソフトウェア改ざんから保護するための、コンピューティングシステムによって使用されるコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体であって、
難読化されたコンピュータ実行可能命令を含む保護ダイナミックリンクライブラリであって、前記難読化されたコンピュータ実行可能命令は、改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止する、保護ダイナミックリンクライブラリ
を備えたことを特徴とするコンピュータ読取り可能な媒体。
【請求項１０１】
コンパイルしてリンクすることができるソースコードであって、改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止する難読化されていないコンピュータ実行可能命令を含む保護ダイナミックリンクライブラリを生成するソースコードをさらに備えたことを特徴とする請求項１００に記載のコンピュータ読取り可能な媒体。
【請求項１０２】
難読化されていないコンピュータ実行可能命令を含む前記保護ダイナミックリンクライブラリにおけるクラス、メソッド、およびフィールドの名前を含む難読化制御ファイルをさらに備え、前記難読化ファイルを使用して、難読化されていないコンピュータ実行可能命令を含む前記保護ダイナミックリンクライブラリにおけるクラス、メソッド、およびフィールドの前記名前が難読化されて、難読化されたコンピュータ実行可能命令を含む前記保護ダイナミックリンクライブラリが生成されることを特徴とする請求項１０１に記載のコンピュータ読取り可能な媒体。
【請求項１０３】
前記保護ダイナミックリンクライブラリのチェックサムを含むカタログファイルをさらに備えたことを特徴とする請求項１０２に記載のコンピュータ読取り可能な媒体。
【請求項１０４】
前記カタログファイルを含むデジタル署名されたカタログファイルと、前記デジタル署名されたカタログファイルの、非公開の秘密キーを使用して暗号化されたチェックサムとをさらに備えたことを特徴とする請求項１０３に記載のコンピュータ読取り可能な媒体。
【請求項１０５】
ソフトウェア改ざんを抑止するための、コンピューティングシステムによって使用されるコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体を作成するためのコンピュータで実施される方法であって、
改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止する難読化された保護ダイナミックリンクライブラリを形成することであって、前記難読化された保護ダイナミックリンクライブラリでは、クラス、メソッド、フィールド、および制御フローの名前が難読化されている、難読化された保護ダイナミックリンクライブラリを形成することと、
前記難読化された保護ダイナミックリンクライブラリのチェックサムを含むデジタル署名されたカタログファイルを生成することと
を備えることを特徴とする方法。
【請求項１０６】
改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止するコンピュータ実行可能命令を含むソースコードを生成することをさらに備え、前記ソースコードを生成する動作は、難読化された保護ダイナミックリンクライブラリを前記形成する動作の前に行われることを特徴とする請求項１０５に記載の方法。
【請求項１０７】
改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止するコンピュータ実行可能命令を含む保護ダイナミックリンクライブラリを形成するために、前記ソースコードをコンパイルしてリンクすることをさらに備えることを特徴とする請求項１０６に記載の方法。
【請求項１０８】
前記難読化された保護ダイナミックリンクライブラリの前記チェックサムを計算することと、
前記難読化された保護ダイナミックリンクライブラリの前記チェックサムを記憶するためのカタログファイルを生成することと
をさらに備えることを特徴とする請求項１０７に記載の方法。
【請求項１０９】
前記カタログファイルのチェックサムを計算することと、
非公開の秘密キーを使用して前記カタログファイルの前記チェックサムを暗号化することと、
前記カタログファイルにデジタル署名して、デジタル署名されたカタログファイルを生成することと
をさらに備えることを特徴とする請求項１０８に記載の方法。
【請求項１１０】
ソフトウェア改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体であって、
前記方法は、
改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止する難読化された保護ダイナミックリンクライブラリを形成することであって、前記難読化された保護ダイナミックリンクライブラリでは、クラス、メソッド、フィールド、および制御フローの名前が難読化されている、難読化された保護ダイナミックリンクライブラリを形成することと、
前記難読化された保護ダイナミックリンクライブラリのチェックサムを含むデジタル署名されたカタログファイルを生成することと
を備えることを特徴とするコンピュータ読取り可能な媒体。
【請求項１１１】
改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止するコンピュータ実行可能命令を含むソースコードを生成し、前記ソースコードを生成する動作は、難読化された保護ダイナミックリンクライブラリを前記形成する動作の前に行われることを特徴とする請求項１１０に記載のコンピュータ読取り可能な媒体。
【請求項１１２】
改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止するコンピュータ実行可能命令を含む保護ダイナミックリンクライブラリを形成するために、前記ソースコードをコンパイルしてリンクすることを特徴とする請求項１１１に記載のコンピュータ読取り可能な媒体。
【請求項１１３】
前記方法は、前記難読化された保護ダイナミックリンクライブラリの前記チェックサムを計算することと、前記難読化された保護ダイナミックリンクライブラリの前記チェックサムを記憶するためのカタログファイルを生成することとをさらに備えることを特徴とする請求項１１２に記載のコンピュータ読取り可能な媒体。
【請求項１１４】
前記方法は、前記カタログファイルのチェックサムを計算することと、非公開の秘密キーを使用して前記カタログファイルの前記チェックサムを暗号化することと、前記カタログファイルにデジタル署名して、デジタル署名されたカタログファイルを生成することとをさらに備えることを特徴とする請求項１１３に記載のコンピュータ読取り可能な媒体。
【請求項１１５】
ソフトウェア改ざんを抑止するための、コンピューティングシステムによって使用されるコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体を作成するためのシステムであって、
改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止する難読化された保護ダイナミックリンクライブラリを形成する手段であって、前記難読化された保護ダイナミックリンクライブラリでは、クラス、メソッド、フィールド、および制御フローの名前が難読化されている、難読化された保護ダイナミックリンクライブラリを形成する手段と、
前記難読化された保護ダイナミックリンクライブラリのチェックサムを含むデジタル署名されたカタログファイルを生成する手段と
を備えたことを特徴とするシステム。
【請求項１１６】
改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止するコンピュータ実行可能命令を含むソースコードを生成する手段をさらに備え、前記ソースコードを生成する動作は、難読化された保護ダイナミックリンクライブラリを前記形成する動作の前に行われることを特徴とする請求項１１５に記載のシステム。
【請求項１１７】
改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止するコンピュータ実行可能命令を含む保護ダイナミックリンクライブラリを形成するために、前記ソースコードをコンパイルしてリンクする手段をさらに備えたことを特徴とする請求項１１６に記載のシステム。
【請求項１１８】
前記難読化された保護ダイナミックリンクライブラリの前記チェックサムを計算する手段と、前記難読化された保護ダイナミックリンクライブラリの前記チェックサムを記憶するためのカタログファイルを生成する手段とをさらに備えたことを特徴とする請求項１１７に記載のシステム。
【請求項１１９】
前記カタログファイルのチェックサムを計算する手段と、非公開の秘密キーを使用して前記カタログファイルの前記チェックサムを暗号化する手段と、前記カタログファイルにデジタル署名して、デジタル署名されたカタログファイルを生成する手段とをさらに備えたことを特徴とする請求項１１８に記載のシステム。
【請求項１２０】
ソフトウェア改ざんを抑止する方法であって、
難読化された保護ダイナミックリンクライブラリをコンピューティングマシンにロードする前に、前記難読化された保護ダイナミックリンクライブラリの第１のチェックサムを計算することと、
ソフトウェア改ざんを抑止するためのセキュリティエラー対策を講じるべきか否かを判定するために、前記難読化された保護ダイナミックリンクライブラリのソフトウェアイメージのオリジナル性を検証することと
を備えることを特徴とする方法。
【請求項１２１】
システムファイルに含まれるカタログファイルのリストを得ることと、前記カタログファイルのリスト内のカタログファイルに含まれる第２のチェックサムを検索することとをさらに備えることを特徴とする請求項１２０に記載の方法。
【請求項１２２】
前記検証する動作は、前記第１のチェックサムと前記第２のチェックサムとが一致しない場合、前記ソフトウェアイメージが、オリジナルの難読化された保護ダイナミックリンクライブラリではないと判定することを特徴とする請求項１２１に記載の方法。
【請求項１２３】
前記難読化された保護ダイナミックリンクライブラリと、前記第２のチェックサムを含む前記カタログファイルとが信用できるか否かを判定するために、信用チェック用（trust-checking）アプリケーションプログラミングインターフェースのセットを呼び出すことをさらに備え、前記信用チェック用アプリケーションプログラミングインターフェースのセットは、状態データを返すことを特徴とする請求項１２２に記載の方法。
【請求項１２４】
前記信用チェック用アプリケーションプログラミングインターフェースのセットを呼び出し、前記状態データを使用して信用できるプロバイダ情報（trust provider information）を検索することをさらに備えることを特徴とする請求項１２３に記載の方法。
【請求項１２５】
前記信用チェック用アプリケーションプログラミングインターフェースのセットを呼び出し、前記信用できるプロバイダ情報を使用してベースサイナ（base signer）を検索することをさらに備えることを特徴とする請求項１２４に記載の方法。
【請求項１２６】
前記信用チェック用アプリケーションプログラミングインターフェースのセットを呼び出し、前記ベースサイナのコンテキストを使用して証明書チェーン（certificate chain）内の最後の要素を妥当性検査することをさらに備えることを特徴とする請求項１２５に記載の方法。
【請求項１２７】
前記検証する動作は、前記最後の要素が前記ソフトウェアイメージのメーカからの正しい公開キーを含む場合、前記ソフトウェアイメージがオリジナルであるとの結論を下すことを特徴とする請求項１２６に記載の方法。
【請求項１２８】
ソフトウェア改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を有するコンピュータ読取り可能な媒体であって、
前記方法は、
難読化された保護ダイナミックリンクライブラリをコンピューティングマシンにロードする前に、前記難読化された保護ダイナミックリンクライブラリの第１のチェックサムを計算することと、
ソフトウェア改ざんを抑止するためのセキュリティエラー対策を講じるべきか否かを判定するために、前記難読化された保護ダイナミックリンクライブラリのソフトウェアイメージのオリジナル性を検証することと
を備えることを特徴とするコンピュータ読取り可能な媒体。
【請求項１２９】
前記方法は、システムファイルに含まれるカタログファイルのリストを得ることと、前記カタログファイルのリスト内のカタログファイルに含まれる第２のチェックサムを検索することとをさらに備えることを特徴とする請求項１２８に記載のコンピュータ読取り可能な媒体。
【請求項１３０】
前記検証する動作は、前記第１のチェックサムと前記第２のチェックサムとが一致しない場合、前記ソフトウェアイメージが、オリジナルの難読化された保護ダイナミックリンクライブラリではないと判定することを特徴とする請求項１２９に記載のコンピュータ読取り可能な媒体。
【請求項１３１】
前記方法は、前記難読化された保護ダイナミックリンクライブラリと、前記第２のチェックサムを含む前記カタログファイルとが信用できるか否かを判定するために、信用チェック用アプリケーションプログラミングインターフェースのセットを呼び出すことをさらに備え、前記信用チェック用アプリケーションプログラミングインターフェースのセットは、状態データを返すことを特徴とする請求項１３０に記載のコンピュータ読取り可能な媒体。
【請求項１３２】
前記方法は、前記信用チェック用アプリケーションプログラミングインターフェースのセットを呼び出し、前記状態データを使用して信用できるプロバイダ情報を検索することをさらに備えることを特徴とする請求項１３１に記載のコンピュータ読取り可能な媒体。
【請求項１３３】
前記方法は、前記信用チェック用アプリケーションプログラミングインターフェースのセットを呼び出し、前記信用できるプロバイダ情報を使用してベースサイナを検索することをさらに備えることを特徴とする請求項１３２に記載のコンピュータ読取り可能な媒体。
【請求項１３４】
前記方法は、前記信用チェック用アプリケーションプログラミングインターフェースのセットを呼び出し、前記ベースサイナのコンテキストを使用して証明書チェーン内の最後の要素を妥当性検査することをさらに備えることを特徴とする請求項１３３に記載のコンピュータ読取り可能な媒体。
【請求項１３５】
前記検証する動作は、前記最後の要素が前記ソフトウェアイメージのメーカからの正しい公開キーを含む場合、前記ソフトウェアイメージがオリジナルであるとの結論を下すことを特徴とする請求項１３４に記載のコンピュータ読取り可能な媒体。
【請求項１３６】
ソフトウェア改ざんを抑止するためのシステムであって、
難読化された保護ダイナミックリンクライブラリをコンピューティングマシンにロードする前に、前記難読化された保護ダイナミックリンクライブラリの第１のチェックサムを計算する手段と、
ソフトウェア改ざんを抑止するためのセキュリティエラー対策を講じるべきか否かを判定するために、前記難読化された保護ダイナミックリンクライブラリのソフトウェアイメージのオリジナル性を検証する手段と
を備えたことを特徴とするシステム。
【請求項１３７】
システムファイルに含まれるカタログファイルのリストを得る手段と、前記カタログファイルのリスト内のカタログファイルに含まれる第２のチェックサムを検索する手段とをさらに備えたことを特徴とする請求項１３６に記載のシステム。
【請求項１３８】
前記検証する手段は、前記第１のチェックサムと前記第２のチェックサムとが一致しない場合、前記ソフトウェアイメージが、オリジナルの難読化された保護ダイナミックリンクライブラリではないと判定することを特徴とする請求項１３７に記載のシステム。
【請求項１３９】
前記難読化された保護ダイナミックリンクライブラリと、前記第２のチェックサムを含む前記カタログファイルとが信用できるか否かを判定するために、信用チェック用アプリケーションプログラミングインターフェースのセットを呼び出す手段をさらに備え、前記信用チェック用アプリケーションプログラミングインターフェースのセットは、状態データを返すことを特徴とする請求項１３８に記載のシステム。
【請求項１４０】
ソフトウェアに対してサポート可能なマシンのクラスにコンピューティングマシンが属するか否かを判定するためのコンピュータで実施される方法であって、
前記コンピューティングマシンの中央処理装置のＩＤを明らかにする、前記中央処理装置に対する命令セットが存在するかを検証することと、
前記中央処理装置が自己識別をサポートするアーキテクチャを有する場合、難読化された保護ダイナミックリンクライブラリを前記コンピューティングマシンにロードすることと
を備えることを特徴とする方法。
【請求項１４１】
前記難読化された保護ダイナミックリンクライブラリと通信して、除外される中央処理装置クラスに関連する暗号化された保護プロファイルにアクセスすることをさらに備えることを特徴とする請求項１４０に記載の方法。
【請求項１４２】
暗号化された保護プロファイルから、除外されるコンピューティングマシンクラスのリストを抽出することをさらに備えることを特徴とする請求項１４１に記載の方法。
【請求項１４３】
前記中央処理装置に関する情報を前記コンピューティングマシンに明らかにさせることをさらに備え、前記情報は、ベンダＩＤと、タイプと、ファミリと、モデル番号と、ブランドＩＤと、特徴セット（feature set）とからなるグループから選択されることを特徴とする請求項１４２に記載の方法。
【請求項１４４】
前記ベンダＩＤが、前記除外されるコンピューティングマシンクラスのリストに存在しない場合、前記難読化された保護ダイナミックリンクライブラリを前記コンピューティングマシンにロードする動作を実行することをさらに備えることを特徴とする請求項１４３に記載の方法。
【請求項１４５】
前記タイプ、前記ファミリ、および前記モデル番号が、前記除外されるコンピューティングマシンクラスのリストに存在する場合、前記コンピューティングマシンに対する利用可能な保護がないことを伝えるエラーメッセージを発して、前記コンピューティングマシンのシャットダウンを開始することをさらに備えることを特徴とする請求項１４４に記載の方法。
【請求項１４６】
前記ブランドＩＤおよび前記特徴セットが、前記除外されるコンピューティングマシンクラスのリストに存在する場合、前記コンピューティングマシンに対する利用可能な保護がないことを伝えるエラーメッセージを発して、前記コンピューティングマシンのシャットダウンを開始することをさらに備えることを特徴とする請求項１４５に記載の方法。
【請求項１４７】
前記中央処理装置のＩＤを判定する拡張命令が存在しない場合、前記難読化された保護ダイナミックリンクライブラリを前記コンピューティングマシンにロードする動作を実行することをさらに備えることを特徴とする請求項１４６に記載の方法。
【請求項１４８】
前記中央処理装置の名前を明らかにする拡張命令の実行により、前記名前が、前記除外されるコンピューティングマシンクラスのリストに存在しないことが示された場合、前記難読化された保護ダイナミックリンクライブラリを前記コンピューティングマシンにロードする動作を実行することをさらに備えることを特徴とする請求項１４７に記載の方法。
【請求項１４９】
前記中央処理装置のキャッシュサイズを明らかにする拡張命令の実行により、前記キャッシュサイズが、前記除外されるコンピューティングマシンクラスのリストに存在しないことが示された場合、前記難読化された保護ダイナミックリンクライブラリを前記コンピューティングマシンにロードする動作を実行することをさらに備えることを特徴とする請求項１４８に記載の方法。
【請求項１５０】
ソフトウェアに対してサポート可能なマシンのクラスにコンピューティングマシンが属するか否かを判定する方法を実行するためのコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体であって、
前記方法は、
前記コンピューティングマシンの中央処理装置のＩＤを明らかにする、前記中央処理装置に対する命令セットが存在するかを検証することと、
前記中央処理装置が自己識別をサポートするアーキテクチャを有する場合、難読化された保護ダイナミックリンクライブラリを前記コンピューティングマシンにロードすることと
を備えることを特徴とするコンピュータ読取り可能な媒体。
【請求項１５１】
前記方法は、前記難読化された保護ダイナミックリンクライブラリと通信して、除外される中央処理装置クラスに関連する暗号化された保護プロファイルにアクセスすることをさらに備えることを特徴とする請求項１５０に記載のコンピュータ読取り可能な媒体。
【請求項１５２】
前記方法は、暗号化された保護プロファイルから、除外されるコンピューティングマシンクラスのリストを抽出することをさらに備えることを特徴とする請求項１５１に記載のコンピュータ読取り可能な媒体。
【請求項１５３】
前記方法は、前記中央処理装置に関する情報を前記コンピューティングマシンに明らかにさせることをさらに備え、前記情報は、ベンダＩＤと、タイプと、ファミリと、モデル番号と、ブランドＩＤと、特徴セットとからなるグループから選択されることを特徴とする請求項１５２に記載のコンピュータ読取り可能な媒体。
【請求項１５４】
前記方法は、前記ベンダＩＤが、前記除外されるコンピューティングマシンクラスのリストに存在しない場合、前記難読化された保護ダイナミックリンクライブラリを前記コンピューティングマシンにロードする動作を実行することをさらに備えることを特徴とする請求項１５３に記載のコンピュータ読取り可能な媒体。
【請求項１５５】
前記方法は、前記タイプ、前記ファミリ、および前記モデル番号が、前記除外されるコンピューティングマシンクラスのリストに存在する場合、前記コンピューティングマシンに対する利用可能な保護がないことを伝えるエラーメッセージを発して、前記コンピューティングマシンのシャットダウンを開始することをさらに備えることを特徴とする請求項１５４に記載のコンピュータ読取り可能な媒体。
【請求項１５６】
前記方法は、前記ブランドＩＤおよび前記特徴セットが、前記除外されるコンピューティングマシンクラスのリストに存在する場合、前記コンピューティングマシンに対する利用可能な保護がないことを伝えるエラーメッセージを発して、前記コンピューティングマシンのシャットダウンを開始することをさらに備えることを特徴とする請求項１５５に記載のコンピュータ読取り可能な媒体。
【請求項１５７】
前記方法は、前記中央処理装置のＩＤを判定する拡張命令が存在しない場合、前記難読化された保護ダイナミックリンクライブラリを前記コンピューティングマシンにロードする動作を実行することをさらに備えることを特徴とする請求項１５６に記載のコンピュータ読取り可能な媒体。
【請求項１５８】
前記方法は、前記中央処理装置の名前を明らかにする拡張命令の実行により、前記名前が、前記除外されるコンピューティングマシンクラスのリストに存在しないことが示された場合、前記難読化された保護ダイナミックリンクライブラリを前記コンピューティングマシンにロードする動作を実行することをさらに備えることを特徴とする請求項１５７に記載のコンピュータ読取り可能な媒体。
【請求項１５９】
前記方法は、前記中央処理装置のキャッシュサイズを明らかにする拡張命令の実行により、前記キャッシュサイズが、前記除外されるコンピューティングマシンクラスのリストに存在しないことが示された場合、前記難読化された保護ダイナミックリンクライブラリを前記コンピューティングマシンにロードする動作を実行することをさらに備えることを特徴とする請求項１５８に記載のコンピュータ読取り可能な媒体。
【請求項１６０】
ソフトウェア改ざんを抑止する方法であって、
コンピューティングマシンの起動時に、ログオンモジュールによって、難読化されたダイナミックリンクライブラリの保護関数を呼び出して、システムに関連付けられた中央階層型データベースのキーおよび値を保護する第１のスレッドを生成することと、
ユーザが前記コンピューティングマシンにログオンしたときに、前記ログオンモジュールによって、前記難読化されたダイナミックリンクライブラリの前記保護関数を呼び出して、前記ユーザに関連付けられた前記中央階層型データベースのキーおよび値を保護する第２のスレッドを生成することと
を備えることを特徴とする方法。
【請求項１６１】
改ざんから保護すべき前記中央階層型データベースの各キーについての変更通知を行うことをさらに備えることを特徴とする請求項１６０に記載の方法。
【請求項１６２】
キーの変更についての前記変更通知を受け取り、ソフトウェア改ざんを抑止するために、前記キーおよびキーの値の少なくとも一方を修復することをさらに備えることを特徴とする請求項１６１に記載の方法。
【請求項１６３】
前記システムに関連付けられた前記中央階層型データベースの前記キーおよび前記値を保護する前記第１のスレッドの実行の継続性をチェックするための第１のタイマに、前記第１のスレッドのハンドルを提供することをさらに備えることを特徴とする請求項１６２に記載の方法。
【請求項１６４】
予め設定された期間が過ぎた後、前記第１のスレッドが終了または一時停止した場合、前記第１のタイマに関連付けられたソフトウェアが、システムのシャットダウンを開始することをさらに備えることを特徴とする請求項１６３に記載の方法。
【請求項１６５】
前記第１のスレッドにより、前記難読化された保護ダイナミックリンクライブラリと通信して、前記中央階層型データベース内のシステムキーおよび値に関連する暗号化された保護プロファイルにアクセスすることをさらに備えることを特徴とする請求項１６４に記載の方法。
【請求項１６６】
前記ユーザに関連付けられた前記中央階層型データベースの前記キーおよび前記値を保護する前記第２のスレッドの実行の継続性をチェックするための第２のタイマに、前記第２のスレッドのハンドルを提供することをさらに備えることを特徴とする請求項１６２に記載の方法。
【請求項１６７】
予め設定された期間が過ぎた後、前記第２のスレッドが終了または一時停止した場合、前記第２のタイマに関連付けられたソフトウェアが、システムのシャットダウンを開始することをさらに備えることを特徴とする請求項１６６に記載の方法。
【請求項１６８】
前記第２のスレッドにより、前記難読化された保護ダイナミックリンクライブラリと通信して、前記中央階層型データベース内のユーザレジストリキーおよび値に関連する暗号化された保護プロファイルにアクセスすることをさらに備えることを特徴とする請求項１６７に記載の方法。
【請求項１６９】
ソフトウェア改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を有するコンピュータ読取り可能な媒体であって、
前記方法は、
コンピューティングマシンの起動時に、ログオンモジュールによって、難読化されたダイナミックリンクライブラリの保護関数を呼び出して、システムに関連付けられた中央階層型データベースのキーおよび値を保護する第１のスレッドを生成することと、
ユーザが前記コンピューティングマシンにログオンしたときに、前記ログオンモジュールによって、前記難読化されたダイナミックリンクライブラリの前記保護関数を呼び出して、前記ユーザに関連付けられた前記中央階層型データベースのキーおよび値を保護する第２のスレッドを生成することと
を備えることを特徴とするコンピュータ読取り可能な媒体。
【請求項１７０】
前記方法は、改ざんから保護すべき前記中央階層型データベースの各キーについての変更通知を行うことをさらに備えることを特徴とする請求項１６９に記載のコンピュータ読取り可能な媒体。
【請求項１７１】
前記方法は、キーの変更についての前記変更通知を受け取り、ソフトウェア改ざんを抑止するために、前記キーおよびキーの値の少なくとも一方を修復することをさらに備えることを特徴とする請求項１７０に記載のコンピュータ読取り可能な媒体。
【請求項１７２】
前記方法は、前記システムに関連付けられた前記中央階層型データベースの前記キーおよび前記値を保護する前記第１のスレッドの実行の継続性をチェックするための第１のタイマに、前記第１のスレッドのハンドルを提供することをさらに備えることを特徴とする請求項１７１に記載のコンピュータ読取り可能な媒体。
【請求項１７３】
前記方法は、予め設定された期間が過ぎた後、前記第１のスレッドが終了または一時停止した場合、前記第１のタイマに関連付けられたソフトウェアが、システムのシャットダウンを開始することをさらに備えることを特徴とする請求項１７２に記載のコンピュータ読取り可能な媒体。
【請求項１７４】
前記方法は、前記第１のスレッドにより、前記難読化された保護ダイナミックリンクライブラリと通信して、前記中央階層型データベース内のシステムキーおよび値に関連する暗号化された保護プロファイルにアクセスすることをさらに備えることを特徴とする請求項１７３に記載のコンピュータ読取り可能な媒体。
【請求項１７５】
前記方法は、前記ユーザに関連付けられた前記中央階層型データベースの前記キーおよび前記値を保護する前記第２のスレッドの実行の継続性をチェックするための第２のタイマに、前記第２のスレッドのハンドルを提供することをさらに備えることを特徴とする請求項１７１に記載のコンピュータ読取り可能な媒体。
【請求項１７６】
前記方法は、予め設定された期間が過ぎた後、前記第２のスレッドが終了または一時停止した場合、前記第２のタイマに関連付けられたソフトウェアが、システムのシャットダウンを開始することをさらに備えることを特徴とする請求項１７５に記載のコンピュータ読取り可能な媒体。
【請求項１７７】
前記方法は、前記第２のスレッドにより、前記難読化された保護ダイナミックリンクライブラリと通信して、前記中央階層型データベース内のユーザレジストリキーおよび値に関連する暗号化された保護プロファイルにアクセスすることをさらに備えることを特徴とする請求項１７６に記載のコンピュータ読取り可能な媒体。
【請求項１７８】
ソフトウェア改ざんを抑止するためのシステムであって、
コンピューティングマシンの起動時に、ログオンモジュールによって、難読化されたダイナミックリンクライブラリの保護関数を呼び出して、システムに関連付けられた中央階層型データベースのキーおよび値を保護する第１のスレッドを生成する手段と、
ユーザが前記コンピューティングマシンにログオンしたときに、前記ログオンモジュールによって、前記難読化されたダイナミックリンクライブラリの前記保護関数を呼び出して、前記ユーザに関連付けられた前記中央階層型データベースのキーおよび値を保護する第２のスレッドを生成する手段と
を備えたことを特徴とするシステム。
【請求項１７９】
改ざんから保護すべき前記中央階層型データベースの各キーについての変更通知を行い、キーの変更についての前記変更通知を受け取り、ソフトウェア改ざんを抑止するために、前記キーおよびキーの値の少なくとも一方を修復することをさらに備えたことを特徴とする請求項１７８に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にセキュリティに関し、より詳細には、許可されていない個人、または許可されていないソフトウェアによる変更を防止することによって、ソフトウェア改ざんを抑止することに関する。
【背景技術】
【０００２】
ソフトウェアは、コンピューティングマシンを強力にする。このようなマシンは、人の欠陥のある心臓の不規則なリズムを正すことができ、あるいは、人々が天空の星座に手を伸ばすことを可能にすることができる。それにもかかわらず、ソフトウェアは、偶発的な被害や意図的な危害のような単純なものに対して脆弱である。様々な例の中でも特に、何らかの方法で親のパーソナルコンピュータにアクセスした子供が、物理的なデータ損失を引き起こしたり、あるいは、コンピューティングマシンの使用に悪影響を及ぼすよう設定を変更したりすることから、偶発的な被害は、悪意なしに生じ得る。意図的な危害は通常、「ハッカー」によって引き起こされる。ハッカーとは、悪質なソフトウェアをコンピューティングマシン上で実行させたり、許可なくコンピューティングマシンに直接アクセスしてプログラムおよびデータを改ざんしたりすることによって、コンピューティングの専門知識を不正目的に使用する人間に対する、非難を込めた用語である。
【０００３】
オペレーティングシステムは、メモリ、中央処理装置（ＣＰＵ）時間、ディスクスペース、周辺デバイスなどのコンピューティングマシンリソースの割り振りと使用率とを制御するソフトウェアである。オペレーティングシステムは、アプリケーションが依存する基本ソフトウェアである。普及しているオペレーティングシステムとして、Ｗｉｎｄｏｗｓ（登録商標）  ９８、Ｗｉｎｄｏｗｓ（登録商標）  ＮＴ、Ｗｉｎｄｏｗｓ（登録商標）  ＸＰ、Ｍａｃ  ＯＳ（登録商標）、ＵＮＩＸ（登録商標）、およびＬｉｎｕｘ（登録商標）が挙げられる。オペレーティングシステムは、特定の市場に適するよう、パッケージされることがある。例えば、ソフトウェアメーカは、小規模のニッチなサーバ市場に使用される強力なオペレーティングシステムを、大規模な一般消費者市場の初心者ユーザに適するよう様々な方法で改造する（retrofit）ことがある。１つの問題は、初心者ユーザが、改造されたオペレーティングシステムをうっかり変更してしまい、不具合を生じさせる場合があることである。しかしながら、最も悪質な問題は、ハッカーが、他の不正目的で使用するために、改造されたオペレーティングシステムをリバースエンジニアリングして変更する可能性があり、それによりソフトウェアメーカが損害を被ることである。図１は、この問題および他の問題をより詳細に示している。
【０００４】
ソフトウェアイメージ１０８は、コンピュータハードウェアを動作させる命令を含むオペレーティングシステムの複製またはコピーを表している。ソフトウェアイメージ１０８は通常、コンピュータハードウェア内のどこかに記憶されたファイルなので、ハッカーまたは悪質なソフトウェア１０２は、ソフトウェアイメージ１０８を変更する可能性もあるし、あるいは、ソフトウェアイメージ１０８を容易に置き換えるようにする可能性もある。ユーザ１１０が、次回、ソフトウェアイメージを呼び出して、オペレーティングシステムなどのシステムソフトウェアを実行するときは、ソフトウェアメーカから提供されたオリジナルのソフトウェアイメージではなく、変更された、または置き換えられたソフトウェアイメージが実行される。
【０００５】
ソフトウェアイメージ１０８の改ざんは、通常、ハッカーまたは悪質なソフトウェア１０２によって行われ、ユーザ１１０によって行われることはめったにない。しかしながら、レジストリ１０６は、ハッカーまたは悪質なソフトウェア１０２によってだけでなく、ユーザ１１０によって意図せずに改ざんされる場合もある。レジストリ１０６は、１人または複数のユーザ、１つまたは複数のアプリケーション、および、１つまたは複数のハードウェアデバイスを対象とするシステムを構成するために利用できる情報を記憶するのに使用されるシステムソフトウェアである。例えば、レジストリを使用して、消費者コンピューティングマシンに対しては、３次元レンダリングおよびハードウェアアクセラレーションサポートを有効にする一方で、サーバコンピューティングマシンに対しては、これらと同じ機能を無効にすることができる。
【０００６】
これらの情報は、ユーザ１１０が管理許可を得て行動するとき、あるいは、レジストリを変更する権限を不正に得たハッカーまたは悪質なソフトウェア１０２によって、変更される可能性がある。ハッカーおよび悪質なソフトウェア１０２は、レジストリ１０６を操作して、ライセンシング制約を破ろうとする場合があり、それによりレジストリ内の情報およびレジストリ設定を変更して、特定の消費者またはマーケティングチャネルに対しては意図されていなかった追加機能のロックを解除する可能性がある。１つの問題は、レジストリが変更されると、コンピューティングマシンが、動作を停止するか、または予測できない挙動を示す場合があることである。
【０００７】
別の問題は、実行ソフトウェア１０４の改ざんに関連する。ハッカーまたは悪質なソフトウェア１０２は、本来の実行ソフトウェア１０４を不正に破棄し、本来の実行ソフトウェア１０４に代えて、許可されていない、または禁止されたソフトウェアサービスに置き換える可能性がある。さらに、ハッカーまたは悪質なソフトウェア１０２は、ソフトウェア応答またはソフトウェアコールをエミュレートして、実行ソフトウェア１０４の稼動を改ざんする可能性もある。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
偶発的な被害および意図的な危害の両方によるソフトウェア改ざんの問題を考えると、悪質なハッカーおよび悪質なソフトウェアが、ソフトウェアを脆弱にし得ることは驚くに当たらない。ソフトウェア改ざんの問題に対する解決策がなければ、ユーザは最終的に、コンピュータメーカが、許可されていない個人からのアクセスを防止しながら安全なコンピューティング体験を提供するとは、もはや信用しなくなるであろう。したがって、既存のシステムに関連する上記の問題を回避または軽減するとともに、ソフトウェアのセキュリティを確保するためのシステム、方法、およびコンピュータ読取り可能な媒体が必要とされる。
【課題を解決するための手段】
【０００９】
本発明によれば、ソフトウェア改ざんを抑止するためのシステム、方法、およびコンピュータ読取り可能な媒体が提供される。本発明のシステムの形態は、コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止するためのシステムを含む。このシステムは、許可されていないサービスの実行を抑止するための、難読化された保護ダイナミックリンクライブラリ（protection dynamic-link library）の保護関数（protection function）を呼び出す手段を備える。このシステムは、中央階層型データベースのキーおよび値を保護するための、難読化された保護ダイナミックリンクライブラリの別の保護関数を呼び出す手段をさらに備える。
【００１０】
本発明の別の態様によれば、本発明の方法の形態は、コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止するための方法を含む。この方法は、許可されていないサービスの実行を抑止するための、難読化された保護ダイナミックリンクライブラリの保護関数を呼び出すことを備える。この方法は、中央階層型データベースのキーおよび値を保護するための、難読化された保護ダイナミックリンクライブラリの別の保護関数を呼び出すことをさらに備える。
【００１１】
本発明の別の態様によれば、本発明のコンピュータ読取り可能な媒体の形態は、コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を有するコンピュータ読取り可能な媒体を含む。この方法は、許可されていないサービスの実行を抑止するための、難読化された保護ダイナミックリンクライブラリの保護関数を呼び出すことを備える。この方法は、中央階層型データベースのキーおよび値を保護するための、難読化された保護ダイナミックリンクライブラリの別の保護関数を呼び出すことをさらに備える。
【００１２】
本発明によれば、ソフトウェア改ざんを抑止するためのシステム、方法、およびコンピュータ読取り可能な媒体が提供される。本発明のコンピュータ読取り可能な媒体の形態は、情報のオリジナル性（originality）を検証するための、コンピューティングシステムによって使用されるコンピュータ実行可能命令と、１つまたは複数のデータ構造とを記憶したコンピュータ読取り可能な媒体を含む。このコンピュータ読取り可能な媒体は、保護ダイナミックリンクライブラリの秘密ライブラリキーを用いて暗号化されたプロファイルを備え、このプロファイルは、プロファイルデータを含む。プロファイルデータのサイズおよびフォーマットは、プロファイルタイプに依存する。このプロファイルは、保護ダイナミックリンクライブラリの公開ライブラリキーを用いてデジタル署名されたシグネチャをさらに含む。このプロファイルは、プロファイルを識別する識別子とプロファイルデータとのチェックサムが含まれるベリファイアブロブ（verifier blob）をさらに含む。
【００１３】
本発明の別の態様によれば、本発明の方法の形態は、ソフトウェア間の相互動作を保護するためのコンピュータで実施される方法を含む。このコンピュータで実施される方法は、公開呼び出しキー（public calling key）と秘密呼び出しキー（private calling key）とを有する第１のソフトウェアによって、中央階層型データベースに記憶されたプロファイルへのアクセスを開始することを備え、第１のソフトウェアは、ランダムなソルト値を送る。このコンピュータで実施される方法は、秘密ライブラリキーを有する第２のソフトウェアによって、ランダムなソルト値を受け取ることをさらに備える。次いで、第２のソフトウェアは、中央階層型データベース内でプロファイルを見つけ、秘密ライブラリキーを使用して、プロファイルを解読する。
【００１４】
本発明の別の態様によれば、本発明のコンピュータ読取り可能な媒体の形態は、ソフトウェア間の相互動作を保護するためのコンピュータで実施される方法を含む。このコンピュータで実施される方法は、公開呼び出しキーと秘密呼び出しキーとを有する第１のソフトウェアによって、中央階層型データベースに記憶されたプロファイルへのアクセスを開始することを備え、第１のソフトウェアは、ランダムなソルト値を送る。このコンピュータで実施される方法は、秘密ライブラリキーを有する第２のソフトウェアによって、ランダムなソルト値を受け取ることをさらに備える。次いで、第２のソフトウェアは、中央階層型データベース内でプロファイルを見つけて、秘密ライブラリキーを使用して、プロファイルを解読する。
【００１５】
本発明の別の態様によれば、本発明のシステムの形態は、ソフトウェア間の相互動作を保護するためのシステムを含む。このシステムは、公開呼び出しキーと秘密呼び出しキーとを有する第１のソフトウェアによって、中央階層型データベースに記憶されたプロファイルへのアクセスを開始する手段を備え、第１のソフトウェアは、ランダムなソルト値を送る。このシステムは、秘密ライブラリキーを有する第２のソフトウェアによって、ランダムなソルト値を受け取る手段をさらに備える。次いで、第２のソフトウェアは、中央階層型データベース内でプロファイルを見つけて、秘密ライブラリキーを使用して、プロファイルを解読する手段を実行する。
【００１６】
本発明によれば、ソフトウェア改ざんを抑止するためのシステム、方法、およびコンピュータ読取り可能な媒体が提供される。本発明の方法の形態は、コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止するための方法を含む。この方法は、ソフトウェアが分類される製品クラスに対する保護が利用可能な場合に、難読化された保護ダイナミックリンクライブラリをコンピューティングマシンにロードすることを備える。この方法は、コンピューティングマシン上で実行されるソフトウェアが、改ざんからの保護が利用可能である製品クラス内に依然として存在することを監視するための、システムタイマを生成することをさらに備える。
【００１７】
本発明の別の態様によれば、本発明のコンピュータ読取り可能な媒体の形態は、コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止するための方法を含む。この方法は、ソフトウェアが分類される製品クラスに対する保護が利用可能な場合に、難読化された保護ダイナミックリンクライブラリをコンピューティングマシンにロードすることを備える。この方法は、コンピューティングマシン上で実行されるソフトウェアが、改ざんからの保護が利用可能である製品クラス内に依然として存在することを監視するための、システムタイマを生成することをさらに備える。
【００１８】
本発明の別の態様によれば、本発明の方法の形態は、コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止するための方法を含む。この方法は、コンピューティングマシン上で、難読化された保護ダイナミックリンクライブラリの保護関数を呼び出すことから、複数の実行スレッドを生成することを備える。複数のスレッドのうちの１つのスレッドは、許可されていないサービスの実行を抑止し、複数のスレッドのうちの他のスレッドは、中央階層型データベースのキーおよび値を保護する。この方法は、複数のスレッドが実行されていることを監視するためのタイマを生成することをさらに備える。
【００１９】
本発明の別の態様によれば、本発明のコンピュータ読取り可能な媒体の形態は、コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体を含む。このコンピュータ読取り可能な媒体は、コンピューティングマシン上で、難読化された保護ダイナミックリンクライブラリの保護関数を呼び出すことから、複数の実行スレッドを生成することを備える。複数のスレッドのうちの１つのスレッドは、許可されていないサービスの実行を抑止し、複数のスレッドのうちの他のスレッドは、中央階層型データベースのキーおよび値を保護する。この方法は、複数のスレッドが実行されていることを監視するためのタイマを生成することをさらに備える。
【００２０】
本発明によれば、ソフトウェアを抑止するためのシステム、方法、およびコンピュータ読取り可能な媒体が提供される。本発明の方法の形態は、サービス改ざんを抑止するための方法を含む。この方法は、コンピューティングマシンの起動時に、ログオンモジュールによって、難読化されたダイナミックリンクライブラリの保護関数を呼び出して、許可されていないサービスの実行を抑止するスレッドを生成することを備える。この方法は、難読化された保護ダイナミックリンクライブラリと通信して、許可されていないサービスのリストに関連する暗号化された保護プロファイルにアクセスすることをさらに備える。
【００２１】
本発明の別の態様によれば、本発明のコンピュータ読取り可能な媒体の形態は、サービス改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体を含む。この方法は、コンピューティングマシンの起動時に、ログオンモジュールによって、難読化されたダイナミックリンクライブラリの保護関数を呼び出して、許可されていないサービスの実行を抑止するスレッドを生成することを備える。この方法は、難読化された保護ダイナミックリンクライブラリと通信して、許可されていないサービスのリストに関連する暗号化された保護プロファイルにアクセスすることをさらに備える。
【００２２】
本発明の別の態様によれば、本発明のコンピュータ読取り可能な媒体の形態は、コンピューティングマシン上で実行されるソフトウェアの改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を有するコンピュータ読取り可能な媒体を含む。この方法は、許可されていないサービスの実行を抑止するための、難読化された保護ダイナミックリンクライブラリの保護関数を呼び出すことを備える。この方法は、中央階層型データベースのキーおよび値を保護するための、難読化された保護ダイナミックリンクライブラリの別の保護関数を呼び出すことをさらに備える。
【００２３】
本発明によれば、ソフトウェア改ざんを抑止するためのシステム、方法、およびコンピュータ読取り可能な媒体が提供される。本発明のコンピュータ読取り可能な媒体の形態は、ソフトウェアをインストールするための、コンピューティングシステムによって使用されるコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体を含む。このコンピュータ読取り可能な媒体は、改ざんがあるか否かについて中央階層型データベースを監視し、コンピューティングシステムに記憶されたファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止するコンピュータ実行可能命令を含む保護ダイナミックリンクライブラリを備える。
【００２４】
本発明の別の態様によれば、本発明の方法の形態は、ソフトウェアセットアップを保護するためのコンピュータで実施される方法を含む。この方法は、市販のソフトウェアパッケージのクラスに属するものとしてソフトウェアを識別するための製品識別子を生成することを備える。この方法は、ソフトウェアが、製品識別子に基づいて、ソフトウェア改ざんからの保護が利用可能である市販のソフトウェアパッケージのクラスに属する場合に、ソフトウェア改ざんを抑止するための保護ダイナミックリンクライブラリのインストールを容易にすることをさらに備える。
【００２５】
本発明の別の態様によれば、本発明のコンピュータ読取り可能な媒体の形態は、ソフトウェアセットアップを保護するためのコンピュータで実施される方法を実行するためのコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体を含む。この方法は、市販のソフトウェアパッケージのクラスに属するものとしてソフトウェアを識別するための製品識別子を生成することを備える。この方法は、ソフトウェアが、製品識別子に基づいて、ソフトウェア改ざんからの保護が利用可能である市販のソフトウェアパッケージのクラスに属する場合に、ソフトウェア改ざんを抑止するための保護ダイナミックリンクライブラリのインストールを容易にすることをさらに備える。
【００２６】
本発明の別の態様によれば、本発明のシステムの形態は、ソフトウェアセットアップを保護するためのシステムを含む。このシステムは、市販のソフトウェアパッケージのクラスに属するものとしてソフトウェアを識別するための製品識別子を生成する手段を備える。このシステムは、ソフトウェアが、製品識別子に基づいて、ソフトウェア改ざんからの保護が利用可能である市販のソフトウェアパッケージのクラスに属する場合に、ソフトウェア改ざんを抑止するための保護ダイナミックリンクライブラリのインストールを容易にする手段をさらに備える。
【００２７】
本発明によれば、ソフトウェア改ざんを抑止するためのシステム、方法、およびコンピュータ読取り可能な媒体が提供される。本発明のコンピュータ読取り可能な媒体の形態は、ソフトウェア改ざんから保護するための、コンピューティングシステムによって使用されるコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体を含む。このコンピュータ読取り可能な媒体は、改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止する難読化されたコンピュータ実行可能命令を含む保護ダイナミックリンクライブラリを備える。
【００２８】
本発明の別の態様によれば、本発明の方法の形態は、ソフトウェア改ざんを抑止するための、コンピューティングシステムによって使用されるコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体を作成するためのコンピュータで実施される方法を含む。この方法は、改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止する難読化された保護ダイナミックリンクライブラリを形成することを備える。難読化された保護ダイナミックリンクライブラリでは、クラス、メソッド、フィールド、および制御フローの名前が難読化されている。この方法は、難読化された保護ダイナミックリンクライブラリのチェックサムを含む、デジタル署名されたカタログファイルを生成することをさらに備える。
【００２９】
本発明の別の態様によれば、本発明のコンピュータ読取り可能な媒体の形態は、ソフトウェア改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体を含む。この方法は、改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止する難読化された保護ダイナミックリンクライブラリを形成することを備える。難読化された保護ダイナミックリンクライブラリでは、クラス、メソッド、フィールド、および制御フローの名前が難読化されている。この方法は、難読化された保護ダイナミックリンクライブラリのチェックサムを含む、デジタル署名されたカタログファイルを生成することをさらに備える。
【００３０】
本発明の別の態様によれば、本発明のコンピュータ読取り可能な媒体の形態は、ソフトウェア改ざんを抑止するための、コンピューティングシステムによって使用されるコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体を作成するためのシステムを含む。このシステムは、改ざんがあるか否かについてデータベースを監視し、ファイルのセットのオリジナル性を検証し、許可されていないサービスの実行を防止する難読化された保護ダイナミックリンクライブラリを形成する手段を備える。難読化された保護ダイナミックリンクライブラリでは、クラス、メソッド、フィールド、および制御フローの名前が難読化されている。このシステムは、難読化された保護ダイナミックリンクライブラリのチェックサムを含む、デジタル署名されたカタログファイルを生成する手段をさらに備える。
【００３１】
本発明によれば、ソフトウェア改ざんを抑止するためのシステム、方法、およびコンピュータ読取り可能な媒体が提供される。本発明の方法の形態は、ソフトウェア改ざんを抑止する方法を含む。この方法は、難読化された保護ダイナミックリンクライブラリをコンピューティングマシンにロードする前に、難読化された保護ダイナミックリンクライブラリの第１のチェックサムを計算することを備える。この方法は、ソフトウェア改ざんを抑止するためのセキュリティエラー対策を講じるべきか否かを判定するために、難読化された保護ダイナミックリンクライブラリのソフトウェアイメージのオリジナル性を検証することをさらに備える。
【００３２】
本発明の別の態様によれば、本発明のコンピュータ読取り可能な媒体の形態は、ソフトウェア改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を有するコンピュータ読取り可能な媒体を含む。この方法は、難読化された保護ダイナミックリンクライブラリをコンピューティングマシンにロードする前に、難読化された保護ダイナミックリンクライブラリの第１のチェックサムを計算することを備える。この方法は、ソフトウェア改ざんを抑止するためのセキュリティエラー対策を講じるべきか否かを判定するために、難読化された保護ダイナミックリンクライブラリのソフトウェアイメージのオリジナル性を検証することをさらに備える。
【００３３】
本発明の別の態様によれば、本発明のシステムの形態は、ソフトウェア改ざんを抑止するためのシステムを含む。このシステムは、難読化された保護ダイナミックリンクライブラリをコンピューティングマシンにロードする前に、難読化された保護ダイナミックリンクライブラリの第１のチェックサムを計算する手段を備える。このシステムは、ソフトウェア改ざんを抑止するためのセキュリティエラー対策を講じるべきか否かを判定するために、難読化された保護ダイナミックリンクライブラリのソフトウェアイメージのオリジナル性を検証する手段をさらに備える。
【００３４】
本発明によれば、ソフトウェア改ざんを抑止するためのシステム、方法、およびコンピュータ読取り可能な媒体が提供される。本発明の方法の形態は、ソフトウェアに対してサポート可能なマシンのクラスにコンピューティングマシンが属するか否かを判定するためのコンピュータで実施される方法を含む。この方法は、コンピューティングマシンの中央処理装置のＩＤ（identification）を明らかにする、中央処理装置に対する命令セットが存在するかを検証することを備える。この方法は、中央処理装置が、自己識別（self identification）をサポートするアーキテクチャを有する場合に、難読化された保護ダイナミックリンクライブラリをコンピューティングマシンにロードすることをさらに備える。
【００３５】
本発明の別の態様によれば、本発明のコンピュータ読取り可能な媒体の形態は、ソフトウェアに対してサポート可能なマシンのクラスにコンピューティングマシンが属するか否かを判定する方法を実行するためのコンピュータ実行可能命令を記憶したコンピュータ読取り可能な媒体を含む。この方法は、コンピューティングマシンの中央処理装置のＩＤを明らかにする、中央処理装置に対する命令セットが存在するかを検証することを備える。この方法は、中央処理装置が、自己識別をサポートするアーキテクチャを有する場合に、難読化された保護ダイナミックリンクライブラリをコンピューティングマシンにロードすることをさらに備える。
【００３６】
本発明によれば、ソフトウェア改ざんを抑止するためのシステム、方法、およびコンピュータ読取り可能な媒体が提供される。本発明の方法の形態は、ソフトウェア改ざんを抑止する方法を含む。この方法は、コンピューティングマシンの起動時に、ログオンモジュールによって、難読化されたダイナミックリンクライブラリの保護関数を呼び出して、システムに関連付けられた中央階層型データベースのキーおよび値を保護する第１のスレッドを生成することを備える。この方法は、ユーザがコンピューティングマシンにログオンしたときに、ログオンモジュールによって、難読化されたダイナミックリンクライブラリの保護関数を呼び出して、ユーザに関連付けられた中央階層型データベースのキーおよび値を保護する第２のスレッドを生成することをさらに備える。
【００３７】
本発明の別の態様によれば、本発明のコンピュータ読取り可能な媒体の形態は、ソフトウェア改ざんを抑止する方法を実行するためのコンピュータ実行可能命令を有するコンピュータ読取り可能な媒体を含む。この方法は、コンピューティングマシンの起動時に、ログオンモジュールによって、難読化されたダイナミックリンクライブラリの保護関数を呼び出して、システムに関連付けられた中央階層型データベースのキーおよび値を保護する第１のスレッドを生成することを備える。この方法は、ユーザがコンピューティングマシンにログオンしたときに、ログオンモジュールによって、難読化されたダイナミックリンクライブラリの保護関数を呼び出して、ユーザに関連付けられた中央階層型データベースのキーおよび値を保護する第２のスレッドを生成することをさらに備える。
【発明を実施するための最良の形態】
【００３８】
本発明の前述した態様、および多くの付随する利点は、添付の図面と共に以下の詳細な説明を参照することによって、よりよく理解されるとともに、より容易に認識されるであろう。
【００３９】
強力ではあるが脆弱であることは、ソフトウェアの相反する性質（dichotomy）である。本発明の様々な実施形態により、ソフトウェアの改ざんが抑止される。一実施形態は、ハッカーが、ソフトウェアイメージを構成するソフトウェア群をリバースエンジニアリングする際、ハッカーを混乱させるために、ソフトウェアイメージを難読化するものである。別の実施形態は、これらのソフトウェア群が互いに、改ざんからの保護を必要とするソフトウェアパッケージを構成するか否かを検証するものである。さらに別の実施形態は、コンピューティングマシン上の中央処理装置やキャッシュメモリなどのハードウェアリソースが、ソフトウェア改ざんを抑止することが可能なクラスに属するか否かを判定するものである。さらに別の実施形態は、コンピューティングマシン上の何らかの重大な（critical）ファイルが改ざんされたか否かをチェックすることを含む。さらに別の実施形態は、レジストリが改ざんされたか否かを判定することを含む。他のいくつかの実施形態は、実行されているソフトウェアサービスが改ざんされたか否かを判定することを含む。
【００４０】
図２は、ソフトウェアコンポーネント２００を示している。ソフトウェアコンポーネント２００は、製品識別子（ＰＩＤ）ダイナミックリンクライブラリ２００Ａ、セットアップソフトウェア２００Ｂ、およびセットアップ情報ファイル２００Ｃを含む。セットアップソフトウェアコンポーネント２００は、改ざんを抑止するためのソフトウェアをコンピュータシステムにインストールすることができるか否かを判定することを担う。このソフトウェアは、システムソフトウェア（オペレーティングシステム）、アプリケーションソフトウェア、およびネットワークソフトウェアなどの、任意の適切なソフトウェア群を含む。製品識別子ダイナミックリンクライブラリ２００Ａは、ファイルとは別に記憶された実行可能ルーチンのクラスに属する。このルーチンは、「ＤＬＬ」などの特定の拡張子を有し、プログラムによって必要とされるときにだけロードされる。このダイナミックリンクライブラリは、Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｗｉｎｄｏｗｓ（登録商標）ファミリのオペレーティングシステム、およびＯＳ／２の機能として、適切に見つけることができる。ダイナミックリンクライブラリは、いくつかの特徴を有する。第１に、ダイナミックリンクライブラリは通常、使用されるまでメモリをまったく消費しない。第２に、各ダイナミックリンクライブラリは別個のファイルなので、プログラマは、呼び出し元プログラム、または他の任意のダイナミックリンクライブラリの動作に影響を与えることなく、そのモジュールだけを修正または改良することができる。最後に、プログラマは、同じダイナミックリンクライブラリを、他のプログラムと共に使用することができる。
【００４１】
セットアップ情報ファイル２００Ｃは、テキストベースのファイルのクラスに属し、インストール中にセットアップソフトウェア２００Ｂなどのセットアップアプリケーションによって使用される情報を含む。他のセットアップ情報ファイル（保護情報ファイル２０２Ａなど）と比べて特にセットアップ情報ファイル２００Ｃは、通常、セットアップソフトウェア２００Ｂなどのセットアップアプリケーションがオーサリングされる前に生成される。情報ファイルに記憶することができる情報の例には、レジストリ変更、ファイル名、および、ソース媒体上におけるソースファイルの位置が含まれる。セットアップ情報ファイル２００Ｃ、および保護情報ファイル２０２Ａはまた、秘密セクション（private section）を含むこともできる。これらの秘密セクションは、セットアップソフトウェア２００Ｂによって異なる。これらの秘密セクションを使用して、セットアップソフトウェア２００Ｂなどの特定のセットアップアプリケーションがソフトウェア改ざんを抑止するソフトウェアをインストールするために使用する、特殊な情報を記憶することができる。
【００４２】
セットアップソフトウェア２００Ｂはプログラムであり、その機能は、システムソフトウェア、アプリケーションソフトウェア、またはネットワークソフトウェアなどの別のプログラムを、記憶媒体またはメモリにインストールすることである。セットアップソフトウェア２００Ｂを使用して、マシン、プリンタ、モニタ、およびネットワークの特定の組合せに関するアプリケーションの、しばしば複雑となり得るセットアッププロセス中に、ユーザを誘導することができる。製品識別子ダイナミックリンクライブラリ２００Ａは、一意な製品識別子を生成して、生成した製品識別子２０４Ａをレジストリ２０４に記憶する。レジストリ２０４については後述する。セットアップ情報ファイル２００Ｃは、ソフトウェア改ざんを抑止するソフトウェアをインストールするために、インストールダイナミックリンクライブラリ２０２Ｂを準備する。インストールコンポーネント２０２は、保護情報ファイル２０２Ａおよびインストールダイナミックリンクライブラリ２０２Ｂを含む。保護情報ファイル２０２Ａは、ソフトウェア改ざんを抑止するソフトウェアをインストールするための様々な情報を含む。これらの情報には、レジストリ変更、ファイル名、ソースファイルの位置などがある。加えて、保護情報ファイル２０２Ａは、システムファイル２０６Ｂと、市販のソフトウェアパッケージに特有の様々なソフトウェアコンポーネントとをインストールするための情報も含む。
【００４３】
ソフトウェアコンポーネント２０２に含まれるインストールダイナミックリンクライブラリ２０２Ｂは、保護ダイナミックリンクライブラリ２０６Ａなどの、実際のソフトウェア改ざんを抑止するソフトウェアをインストールする。保護ダイナミックリンクライブラリ２０６Ａは、特定の市場セグメントに特有であって、その特定の市場セグメントに適したコンテンツまたは言語を提供することができる。インストールダイナミックリンクライブラリ２０２Ｂはまた、アクティベーションキー（activation key）２０４Ｃを設定して、それにより、保護ダイナミックリンクライブラリ２０６Ａに組み入れられた改ざんを抑止するソフトウェアが、インストールが安全なインストールであることを素早く識別できるようにする。さらに、インストールダイナミックリンクライブラリ２０２Ｂはまた、ハードウェアおよび／または言語に関連する情報が特に含まれるいくつかの暗号化された保護プロファイルと、様々なシステムファイル２０６Ｂとをインストールし、それにより、何かが改ざんされたか否かを判定できるようにする。
【００４４】
ランタイムコンポーネント２０６は、システムファイル２０６Ｂと共に、ソフトウェア改ざんを抑止するソフトウェアを組み入れた保護ダイナミックリンクライブラリ２０６Ａを含む。システムファイル２０６Ｂは、ヘルプファイルと、言語などの市場に特有のコンテンツファイルとを含む。
【００４５】
中央階層型データベース２０４は、製品識別子２０４Ａ、アクティベーションキー２０４Ｃ、および暗号化された保護プロファイル２０４Ｄを含む。中央階層型データベース２０４は、１人または複数のユーザ、１つまたは複数のアプリケーション、および、１つまたは複数のハードウェアデバイスを対象とするシステムを構成するために必要な情報を記憶するのに使用される。中央階層型データベース２０４は、オペレーティングシステムが動作中に頻繁に参照する情報を含む。その情報には、各ユーザに関するプロファイル、コンピュータにインストールされたアプリケーション、および、それぞれが作成することのできる文書のタイプ；フォルダおよびアプリケーションアイコンに関するプロパティシート設定；どんなハードウェアがシステム上に存在するか；および、どのポートが使用されているか、などがある。加えて、中央階層型データベース２０４を使用して、前述したように、ソフトウェア改ざんの抑止を助ける情報を記憶することもできる。１つの適切な情報は、チェックサムを含む。チェックサムは、ハッカーがファイルを変更したときなどに、改ざんがあるか否かについて、データをテストするのに使用される計算値である。チェックサムは、所与のデータチャンクに対して、一連の算術演算または論理演算を用いてすべてのデータバイトを順次結合することによって計算されることが好ましい。ソフトウェア改ざんが検証または妥当性検査されている期間中に、記憶されたデータを使用して、新たなチェックサムを同じ方法で計算することができる。２つのチェックサムが一致しない場合は、ソフトウェア改ざんが行われた可能性があり、改ざんを修復するか、または、コンピューティングマシンをシャットダウンするために、適切なステップをとることができる。
【００４６】
図３Ａは、保護ダイナミックリンクライブラリ３０６Ａに組み入れられたソフトウェア改ざんを抑止するソフトウェアの実行を示している。図３Ａの様々な要素は、図２の様々な要素と同様であり、簡潔にするために、これらについてはさらに論じない。ログオンコンポーネント３０８はログオンモジュール３０８Ａを含む。コンピュータシステムの起動時、ログオンモジュール３０８Ａは、製品識別子３０４Ａに応じて、保護ダイナミックリンクライブラリ３０６Ａをロードしようとする。適切な製品識別子が中央階層型データベース３０４内に存在する場合、保護ダイナミックリンクライブラリ３０６Ａが、ログオンモジュール３０８Ａによってロードされる。ログオンモジュール３０８Ａは、コンピューティングマシン上のシステムソフトウェアへのアクセスをユーザに許可する前に、ユーザ名およびパスワードを受け取って、この情報を妥当性検査するソフトウェアであることが好ましい。
【００４７】
保護ダイナミックリンクライブラリ３０６Ａは、コンピュータシステムのソフトウェアが実行されている間、様々な暗号化された保護プロファイル３０４Ｄを読み取ることによって、様々なシステムファイル３０６Ｂが改ざんされていないかを検証する。加えて、保護ダイナミックリンクライブラリ３０６Ａは、キーおよびキーに関連付けられた値の様々な設定を検証して、これらが改ざんされたか否かを判定する。保護ダイナミックリンクライブラリ３０６Ａはまず、レジストリをチェックするため、ならびに、コンピュータシステム上で実行することが許可されているサービスをチェックするために、タイマを生成する。システムが改ざんされていた場合、保護ダイナミックリンクライブラリ３０６Ａは、改ざんに対処する適切な方法の中でも特に、改ざんの修復を試みるか、あるいはコンピューティングマシンのシャットダウンを開始することが好ましい。
【００４８】
例えば、保護ダイナミックリンクライブラリ３０６Ａは、中央階層型データベース３０４を監視し、改ざんがあった場合は、キーおよびキーに関連付けられた値をリセットする。保護ダイナミックリンクライブラリ３０６Ａはまた、様々なシステムファイル３０６Ｂなどの重大なファイルを、暗号化された保護プロファイル３０４Ｄおよび保護ダイナミックリンクライブラリ３０６Ａに含まれる情報と照合して、改ざんがあったか否かを判定する。さらに、保護ダイナミックリンクライブラリ３０６Ａは、コンピュータシステム上で実行されるソフトウェアサービスが確実に許可されているものであるようチェックして、許可されていないソフトウェアサービスを取り除く。
【００４９】
図３Ｂは、ログオンモジュール３０８Ａなどのソフトウェアからアクセス可能な暗号化された保護プロファイル３０４Ｄを示している。ログオンモジュール３０８Ａは、保護ダイナミックリンクライブラリ３０６Ｂと通信して、暗号化された保護プロファイル３０４Ｄにアクセスする。ログオンモジュール３０８Ａと保護ダイナミックリンクライブラリ３０６Ｂとの間の相互動作は、ソフトウェア間で情報の通信または転送を安全に行えることが可能となる適切なプロトコルを介することが好ましい。
【００５０】
１つの適切なプロトコルは、ランダムなソルト値の送信を含む。このソルト値は、ログオンモジュール３０８Ａから保護ダイナミックリンクライブラリ３０６Ｂに送られる数字、英字、または英数字情報のストリングを含むことができる。保護ダイナミックリンクライブラリ３０６Ｂは、公開ライブラリキーと秘密ライブラリキーという２つのキーを有することが好ましい。暗号化およびデジタル署名において、これらのキーは、送信または受信される情報を暗号化または解読するのに使用されるビットのストリングを含む。暗号化は一般に、複数の人が知っている公開キーと、１人だけしか知らない秘密キーという、異なる２つのタイプのキーに依拠する。
【００５１】
保護ダイナミックリンクライブラリ３０６Ｂは、秘密ライブラリキーを使用して、プロファイル３１２〜３１６などのプロファイルを解読する。各プロファイルは、様々な情報を記憶することができる不定形のデータ構造であるブロブ（blob）と呼ばれるデータ構造として適切に構成される。プロファイル３１２〜３１６のブロブは、保護ダイナミックリンクライブラリ３０６Ｂの秘密ライブラリキーを使用して暗号化されることが好ましい。プロファイル３１２にはブロブ１が含まれる。ブロブ１は、保護ダイナミックリンクライブラリ３０６Ｂの秘密ライブラリキーを用いて暗号化されている。ブロブ１にはプロファイルデータ１  ３１２Ａが含まれる。プロファイルデータ１  ３１２Ａのサイズおよびフォーマットは、ハードウェアプロファイルや言語プロファイルなどのプロファイルタイプに依存する。ブロブ１にはシグネチャ１  ３１２Ｂも含まれる。シグネチャ１  ３１２Ｂは、保護ダイナミックリンクライブラリ３０６Ｂの公開ライブラリキーを用いてデジタル署名された、プロファイルデータ１  ３１２Ａのチェックサムを含む。ブロブ１にはベリファイアブロブ１  ３１２Ｃも含まれる。ベリファイブロブ１  ３１２Ｃは、ログオンモジュール３０８Ａの公開呼び出しキーを用いてデジタル署名されるとともに、ログオンモジュール３０８Ａの秘密呼び出しキーを用いて暗号化もされた、プロファイル３１２の識別子と、プロファイルデータ１  ３１２Ａとのチェックサムである。
【００５２】
プロファイル３１４はブロブ２として構成され、ブロブ２にはベリファイアブロブ２  ３１４Ａが含まれる。ベリファイアブロブ２  ３１４Ａは、ログオンモジュール３０８Ａの秘密呼び出しキーを用いてデジタル署名されるとともに、ログオンモジュール３０８Ａの秘密呼び出しキーを用いて暗号化もされた、プロファイル３１４の識別子と、プロファイルデータ２  ３１４Ｂによって記述されるデータとのチェックサムである。ブロブ２にはプロファイルデータ２  ３１４Ｂが含まれる。プロファイルデータ２  ３１４Ｂのサイズおよびフォーマットは、ハードウェアプロファイルや言語プロファイルなどのプロファイルタイプに依存する。ブロブ２にはシグネチャ２  ３１４Ｃも含まれる。シグネチャ２  ３１４Ｃは、保護ダイナミックリンクライブラリ３０６Ｂの公開ライブラリキーを用いてデジタル署名された、プロファイルデータ２  ３１４Ｂのチェックサムである。
【００５３】
プロファイル３１６はブロブ３として構成される。ブロブ３にはシグネチャ３  ３１６Ａが含まれる。シグネチャ３  ３１６Ａは、保護ダイナミックリンクライブラリ３０６Ｂの公開ライブラリキーを用いてデジタル署名された、プロファイルデータ３  ３１６Ｃのチェックサムである。ブロブ３にはベリファイアブロブ３  ３１６Ｂが含まれる。ベリファイアブロブ３  ３１６Ｂは、ログオンモジュール３０８Ａの公開呼び出しキーを用いてデジタル署名されるとともに、ログオンモジュール３０８Ａの秘密呼び出しキーを用いて暗号化もされた、プロファイル３１６の識別子と、プロファイルデータ３  ３１６Ｃとのチェックサムである。ブロブ３にはプロファイルデータ３  ３１６Ｃが含まれる。プロファイルデータ３  ３１６Ｃのサイズおよびフォーマットは、ハードウェアプロファイルや言語プロファイルなどのプロファイルタイプに依存する。プロファイル３１２〜３１６の各ブロブ１〜３では、プロファイルデータ１〜３、シグネチャ１〜３、およびベリファイア１〜３などの様々な名前付き構造は、各ブロブ１〜３または各プロファイル３１２〜３１６内で配置が異なっていることに留意されたい。これらの異なる配置は、レジストリ３０４に含まれるプロファイルデータの改ざんを抑止する助けとなる。配置情報を含むヘッダがブロブ１〜３内に存在し、それにより、名前付き構造が各ブロブ１〜３内のどこに位置するかを判定することができる。
【００５４】
保護ダイナミックリンクライブラリ３０６Ｂは、自身の秘密ライブラリキーを使用してプロファイルまたはブロブを解読することによって、所望のプロファイルを見つけると、プロファイルをログオンモジュール３０８Ａに返す。保護ダイナミックリンクライブラリ３０６Ｂは、ログオンモジュール３０８Ａにそのデータを返す前に、見つかったプロファイルの識別子およびプロファイルデータからチェックサムを計算する。このチェックサムは、プロファイルと、ログオンモジュール３０８Ａから元々送られたランダムなソルト値とを比較した結果を含む。ソルト値は本質的に、ハッカーが単純に保護ダイナミックリンクライブラリ３０６Ａをエミュレートして、誤ったプロファイルをログオンモジュール３０８Ａに返すことができないようにするものである。
【００５５】
チェックサムの計算を行うと、保護ダイナミックリンクライブラリ３０６Ｂは、本質的に様々な情報（例えば、成功、失敗、および、成功または失敗を詳述するフラグ）を含む結果データ構造である結果と、見つかったプロファイルのベリファイアブロブと、プロファイルの識別子、そのデータ、結果、およびランダムなソルト値から算出した計算したチェックサムとを、ログオンモジュール３０８Ａに返す。ログオンモジュール３０８Ａは、保護ダイナミックリンクライブラリ３０６Ｂから返された結果を検証する。ログオンモジュール３０８Ａは、自身の秘密呼び出しキーを使用してベリファイアブロブを解読し、プロファイルの識別子とプロファイルのデータとのチェックサムを得る。加えて、ログオンモジュール３０８Ａは、自身の公開呼び出しキーを使用して、ベリファイアブロブのシグネチャを検証する。さらに、ログオンモジュール３０８Ａは、解読したベリファイアブロブチェックサム、ＤＬＬの結果、および、保護ダイナミックリンクライブラリ３０６Ａに元々送られたランダムなソルト値から、チェックサムを計算する。ログオンモジュール３０８Ａは、計算したチェックサムが、保護ダイナミックリンクライブラリ３０６Ｂから返されたチェックサムと一致するか否かを判定するテストを実行する。チェックサムが一致しない場合、ログオンモジュール３０８Ａは、システムが改ざんされたと結論を下す。
【００５６】
図４Ａ〜４Ｚは、ソフトウェア改ざんを抑止する方法４００を示している。わかりやすくするために、方法４００に関する以下の説明では、図２のソフトウェアコンポーネント２００、２０２、２０４、および２０６に関連して示した様々な要素と、図３Ａ〜３Ｂのログオンモジュール３０８Ａおよび保護ダイナミックリンクライブラリ３０６Ｂとを参照する。方法４００は、開始ブロックから、継続端（「端Ａ」）と出口端（「端Ｂ」）との間に定義された方法ステップのセット４０２に進む。方法ステップのセット４０２は、ソフトウェア改ざんを抑止するための、ソフトウェアの難読化を記述している。
【００５７】
方法４００は、端Ａ（図４Ｃ）から、ブロック４１４に進み、ブロック４１４で、ソフトウェア改ざんを抑止するソフトウェアを組み入れた保護ダイナミックリンクライブラリのソースコードが生成される。ソースコードはコンパイルされてリンクされ、保護ダイナミックリンクライブラリ（ＤＬＬ）が生成される（ブロック４１６を参照）。次いで、ブロック４１８で、クラス、メソッド、およびフィールドの名前を含む難読化制御ファイルが生成される。次いで、方法４００はブロック４２０に進み、ブロック４２０で、保護ＤＬＬおよび難読化制御ファイルを入力として使用して、難読化プロセスが実行される。クラス、メソッド、フィールド、および制御フローの名前が難読化された、難読化されたＤＬＬが生成される（ブロック４２２を参照）。この難読化プロセスにより、保護ダイナミックリンクライブラリは、リバースエンジニアリングしようとするハッカーによってデバッグされにくいものとなる。難読化の例として、ジャンプ命令を保護ダイナミックリンクライブラリに挿入すること、または、プログラム命令を並べ替えることが挙げられる。
【００５８】
前述した難読化プロセスは、ソフトウェアを不正目的でリバースエンジニアリングしようとするデコンパイラを失敗させるために、ソフトウェアのアセンブリにおいてシンボルのリネームを可能にする、多くの適した技法のうちの１つである。難読化プロセスは、アプリケーションが損なわれないようにしながら、不正なデコンパイルに対する保護を増大させることができる。難読化の目標は混乱であり、これは、ソフトウェアの多面的な知的概念を理解しようとするハッカーの心理に負担をかける。難読化プロセスは、人間であるインタープリタ、すなわちハッカーを混乱させるだけでなく、論理の確実性に依存するデコンパイラをも役に立たなくさせる（break）可能性が高い。難読化プロセスは、無数のデコンパイルの可能性を生成するが、これらの一部は誤った論理につながり、したがって変換における不確実性をもたらす。
【００５９】
方法４００は、端Ａ１（図４Ｄ）から、ブロック４２６に進み、ブロック４２６で、この方法により、難読化された保護ＤＬＬのチェックサムが計算される。次いで、カタログファイルが生成される（ブロック４２８を参照）。カタログファイルの適切な一実装例は、データベースである。カタログファイルは、各ソフトウェアコンポーネントの名前、そのバージョン、および、そのシグネチャ（例えば、チェックサム）を含む。次いで、ブロック４３０で、難読化された保護ＤＬＬのチェックサムが、カタログファイルに配置される。次いで、方法４００はブロック４３２に進み、ブロック４３２で、この方法により、難読化されたＤＬＬのチェックサムを含むカタログファイルのチェックサムが計算される。カタログファイルのチェックサムもまた、秘密キーを用いて暗号化される（ブロック４３４を参照）。言い換えれば、カタログファイルは、秘密キーを用いてデジタル署名される。この時点で、方法４００により、検証することのできる難読化された保護ＤＬＬおよびカタログファイルが生成される。検証は、難読化された保護ＤＬＬが、特定のソフトウェアメーカなどの既知のソースから生じたものであるかどうか、および、難読化された保護ＤＬＬが改ざんされていないかどうかを確認する助けとなる。次いで、方法４００は出口端Ｂに進む。
【００６０】
方法４００は、端Ｂ（図４Ａ）から、継続端（「端Ｃ」）と出口端（「端Ｄ」）との間に定義された方法ステップのセット４０４に進む。方法ステップのセット４０４は、ソフトウェア改ざんを抑止するソフトウェアを組み入れた保護ダイナミックリンクライブラリを、コンピューティングマシン上でセットアップすることを記述している。
【００６１】
方法４００は、端Ｃ（図４Ｅ）から、ブロック４３８に進み、ブロック４３８で、この方法により、ソフトウェアの製品識別子が得られ、ソフトウェアの製品識別子が、レジストリなどの中央階層型データベースに記憶される。製品識別子は、ユーザから提供される。ユーザは、ソフトウェアの包装に通常は添えられているキーから、製品識別子を得ることができる。この方法により、製品識別子が復号され、ソフトウェアが分類されるクラスが識別される（ブロック４４０を参照）。ソフトウェアは、システムソフトウェア、アプリケーションソフトウェア、またはネットワークソフトウェアなど、任意の適切なソフトウェア群を含むことができる。次いで、判定ブロック４４２で、識別されたクラスに対して、保護が利用可能か否かを判定するテストが行われる。判定がＮＯである場合、方法４００は別の継続端（「端Ｌ」）に進み、実行を終了する。一方、判定ブロック４４２におけるテストの判定がＹＥＳである場合、方法４００はブロック４４４に進み、ブロック４４４で、インストールダイナミックリンクライブラリが呼び出される。インストールダイナミックリンクライブラリは、製品識別子に基づいて、アクティベーションキーを、レジストリなどの中央階層型データベースにインストールする（ブロック４４６を参照）。アクティベーションキーにより、コンピューティングマシンは、時間がかかる可能性のある製品識別子の復号を行わずに、ソフトウェア改ざんを抑止するソフトウェアがコンピューティングマシン上で実行されているか否かを素早くチェックして判定することができる。
【００６２】
端Ｃ１（図４Ｆ）から、インストールダイナミックリンクライブラリは、暗号化された保護プロファイルを、レジストリなどの中央階層型データベースにインストールする。コンピューティングマシンの起動時に、システムソフトウェアなどのソフトウェアのログオンモジュールが実行される（ブロック４５０を参照）。次いで、ブロック４５２で、ログオンモジュールは、レジストリなどの中央階層型データベースに記憶された製品識別子を復号し、ソフトウェアが分類される製品クラスを得る。方法４００は判定ブロック４５４に進み、判定ブロック４５４で、識別された製品クラスに対して、保護が利用可能か否かを判定するテストが行われる。判定ブロック４５４におけるテストの判定がＮＯである場合、方法４００は端Ｌに進み、実行を終了する。一方、判定ブロック４５４におけるテストの判定がＹＥＳである場合、ログオンモジュール３０８Ａは、難読化された保護ダイナミックリンクライブラリをコンピューティングマシンにロードすることを試みる（ブロック４５６を参照）。方法４００は別の継続端（「端Ｃ２」）に進む。
【００６３】
方法４００は、端Ｃ２（図４Ｇ）から、ブロック４５８に進み、ブロック４５８で、この方法により、インストールされることになる保護ダイナミックリンクライブラリのチェックサムが計算される。以下、簡潔にするために、難読化された保護ダイナミックリンクライブラリを保護ダイナミックリンクライブラリとも呼ぶことに留意されたい。この方法により、システムファイルに含まれるカタログファイルのリストが得られる（ブロック４６０を参照）。次いで、ブロック４６２で、この方法により、リストからカタログファイルが選択され、カタログファイルに含まれるチェックサムが検索される。シグネチャの解読および検証が行われる。方法４００は判定ブロック４６４に進み、判定ブロック４６４で、２つのチェックサムが一致するか否かを判定するテストが行われる。判定ブロック４６４におけるテストの判定がＮＯである場合、方法４００は別の継続端（「端Ｃ３」）に進む。一方、判定ブロック４６４におけるテストの判定がＹＥＳである場合、方法４００は別の継続端（「端Ｃ４」）に進む。図４Ｇに関連して説明した処理ステップは、難読化された保護ダイナミックリンクライブラリのソフトウェアイメージを検証して、ソフトウェアイメージのオリジナル性（すなわち、ソフトウェアイメージが所望のソフトウェアメーカによって元々出荷または配布されたものか否か）を判定するためのプロセスを記述している。改ざんが行われた場合、検証プロセスは、ロードされることになる難読化された保護ダイナミックリンクライブラリのソフトウェアイメージが改ざんされたことを示し、コンピューティングマシンをシャットダウンするなどのセキュリティエラー対策を講じなければならない場合がある。
【００６４】
方法４００は、端Ｃ３（図４Ｈ）から、判定ブロック４６６に進み、判定ブロック４６６で、検索すべきカタログファイルが他にあるか否かを判定するテストが行われる。判定ブロック４６６におけるテストの判定がＹＥＳである場合、方法４００は別の継続端（「端Ｃ５」）に進む。端Ｃ５（図４Ｇ）から、方法４００はブロック４６２にループバックし、前述した処理ステップが繰り返される。一方、判定ブロック４６６におけるテストの判定がＮＯである場合、方法４００はブロック４６８に進む。この場合、インストールされることになる保護ダイナミックリンクライブラリは、カタログファイルに含まれていたオリジナルではなく、これは、保護ダイナミックリンクライブラリが改ざんされたおそれがあることを示す。次いで、方法４００は別の継続端（「端Ｃ７」）に進む。方法４００は、端Ｃ４（図４Ｈ）から、判定ブロック４７０に進み、判定ブロック４７０で、保護ダイナミックリンクライブラリ、および信用できるカタログファイルがあるか否かを判定するテストが行われる。判定ブロック４７０におけるテストの判定がＮＯである場合、方法４００は端Ｃ５に進み、ブロック４６２にループバックして、前述した処理ステップが繰り返される。判定ブロック４７０で説明したテストの適切な一実装例は、Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｗｉｎｄｏｗｓ（登録商標）から提供される信用チェック用（trust-checking）アプリケーションプログラミングインターフェースのセットである。一方、判定ブロック４７０におけるテストの判定がＹＥＳである場合、方法４００は別の継続端（「端Ｃ６」）に進む。
【００６５】
方法４００は、端Ｃ６（図４Ｉ）から、ブロック４７２に進み、ブロック４７２で、この方法により、信用チェック用アプリケーションプログラミングインターフェースのセットを呼び出すことによって、見つかったカタログファイルが検証され、状態データが、戻り値として得られる。この方法により、信用チェック用アプリケーションプログラミングインターフェースのセットを介して得られた状態データを使用して、信用できるプロバイダ情報（trust provider information）が得られる（ブロック４７４を参照）。次いで、ブロック４７６で、この方法により、得られた信用できるプロバイダ情報を使用して、証明書チェーン（certificate chain）からベースサイナ（base signer）が得られる。方法４００はブロック４７８に進み、ブロック４７８で、この方法により、ベースサイナのコンテキストを使用して、証明書チェーンの最後の要素が妥当性検査される。最後の要素が正しい公開キーを含んでいたか否かを判定するテストが行われる（判定ブロック４８０を参照）。判定ブロック４８０におけるテストの判定がＹＥＳである場合、方法４００は端Ｃ７に進む。一方、判定ブロック４８０におけるテストの判定がＮＯである場合、方法４００は端Ｃ５に進み、ブロック４６２にループバックして、前述した処理ステップが繰り返される。
【００６６】
方法４００は、端Ｃ７（図４Ｊ）から、判定ブロック４８２に進み、判定ブロック４８２で、保護ダイナミックリンクライブラリがうまくロードされたか否かを判定するテストが行われる。判定ブロック４８２におけるテストの判定がＮＯである場合、この方法により、システムのシャットダウンが開始される（ブロック４８４を参照）。方法４００は端Ｌに進み、実行を終了する。一方、判定ブロック４８２におけるテストの判定がＹＥＳである場合、方法４００はブロック４８６に進み、ブロック４８６で、この方法により、無期限のスレッド内で実行される第１のタイマが生成される。次いで、方法４００は、継続端（「端Ｃ８」）および出口端Ｄにより表される２つの実行パスに進む。図４Ｊにおけるこの実行パスの分岐は、コンピューティングマシン上で実行される複数のソフトウェアの同時性を示すものである。
【００６７】
方法４００は、端Ｃ８（図４Ｋ）から、判定ブロック４８８に進み、判定ブロック４８８で、予め設定された期間が過ぎたか否かを判定するテストが行われる。判定がＮＯである場合、方法４００は判定ブロック４８８にループバックし、前述した処理ステップが繰り返される。判定ブロック４８８におけるテストの判定がＹＥＳである場合、方法４００はブロック４９０に進み、ブロック４９０で、この方法により、レジストリなどの中央階層型データベースに記憶されたアクティベーションキーがチェックされて、製品クラスが復号される。復号された製品クラスに対する利用可能な保護があるか否かを判定する別のテストが行われる（判定ブロック４９２を参照）。判定ブロック４９２におけるテストの判定がＹＥＳである場合、方法４００は端Ｃ８にループバックし、前述した処理ステップが繰り返される。一方、判定ブロック４９２におけるテストの判定がＮＯである場合、コアアプリケーションプログラミングインターフェースが改ざんされており、この方法により、コンピューティングマシンをシャットダウンするなどのセキュリティ対策が講じられる（ブロック４９４を参照）。次いで、方法４００は端Ｌに進み、実行を終了する。
【００６８】
方法４００は、端Ｄ（図４Ａ）から、継続端（「端Ｅ」）と出口端（「端Ｆ」）との間に定義された方法ステップのセット４０６に進む。方法ステップのセット４０６は、コンピューティングマシンが、サポート可能なマシンのクラスに属するか否かを判定する。
【００６９】
方法４００は、端Ｅ（図４Ｌ）から、ブロック４９６に進み、ブロック４９６で、この方法により、そのコンピューティングマシンの中央処理装置のＩＤを得るための、中央処理装置に対する命令セットが存在するかが検証される。命令セットが利用可能か否かを判定するテストが行われる（判定ブロック４９８を参照）。判定ブロック４９８におけるテストの判定がＮＯである場合、コンピューティングマシンの中央処理装置は、自己識別をサポートしないアーキテクチャを有する（ブロック４９９を参照）。１つの適切な結論は、この中央処理装置が、ソフトウェア改ざんを抑止するソフトウェアをサポートできるということである。次いで、方法４００は出口端Ｆに進む。一方、判定ブロック４９８におけるテストの判定がＹＥＳである場合、ログオンモジュールは、保護ダイナミックリンクライブラリと通信して、除外される中央処理装置クラスに関連する暗号化された保護プロファイルにアクセスする（ブロック４９７を参照）。言い換えれば、コンピューティングマシンが動作の際に使用する様々なパラメータを記述している、コンピューティングマシンにインストールされたファイルが存在する。例えば、言語ファイルは、オペレーティングシステムがユーザに情報を提示する際に使用する言語を記述している。別の例として、ハードウェアファイルは、オペレーティングシステムがサポートするコンピューティングマシン群を記述している。問題は、ハッカーまたは悪質なソフトウェアによってファイルが容易に改ざんされるおそれがあることである。暗号化された保護プロファイルには、コンピューティングマシンにインストールされたオリジナルのファイルを示すチェックサムが含まれる。オリジナルのファイルが改ざんされた場合、改ざんされたファイルのチェックサムと、暗号化された保護プロファイルに記憶されたチェックサムとは一致しないことになり、このことは、オリジナルのファイルが改ざんされたことを示す。例えば、ハッカーがハードウェアファイルを変更して、オペレーティングシステムを欺いてサポートできないコンピューティングマシンをサポートさせようとした場合、変更されたハードウェアファイルのチェックサムは、暗号化された保護プロファイルに記憶されたチェックサムとは異なる可能性が高く、したがって改ざんの判定が可能となる。図４Ｌに戻ると、ログオンモジュールは、セキュリティを高めるのに使用されるランダムなソルト値を保護ダイナミックリンクライブラリに送る（ブロック４９５を参照）。ランダムなソルト値により、ハッカーが、関数呼び出し、またはコールを無効にする（defeat）こと、または妨害（intercept）することが困難になる。後述するように、ランダムなソルト値は、ランダムなソルト値と、保護ダイナミックリンクライブラリから送られたデータとに基づくチェックサムの計算において使用される。このチェックサムが、保護ダイナミックリンクライブラリによって計算されたチェックサムと照合されて、改ざんが行われたか否かが判定される。次いで、方法４００は別の継続端（「端Ｅ１」）に進む。
【００７０】
方法４００は、端Ｅ１（図４Ｍ）から、ブロック４９３に進み、ブロック４９３で、保護ダイナミックリンクライブラリは、秘密ライブラリキーを使用して、暗号化された保護プロファイル（「プロファイル」）を解読する。保護ダイナミックリンクライブラリは、プロファイルをシステムと比較する（ブロック４９１を参照）。次いで、判定ブロック４８９で、プロファイルが見つかったか否かを判定するテストが行われる。各プロファイルは、好ましくは複数ビット（例えば、６４ビット）である名前を有する。判定ブロック４８９におけるテストの判定がＮＯである場合、方法４００はブロック４９３にループバックし、前述した処理ステップが繰り返される。一方、判定ブロック４８９におけるテストの判定がＹＥＳである場合、方法４００はブロック４８７に進み、ブロック４８７で、保護ダイナミックリンクライブラリは、プロファイルのＩＤ、そのデータ、比較結果、およびソルト値に対して、チェックサムを計算する。保護ダイナミックリンクライブラリは、結果データ構造、プロファイルのベリファイアブロブ、および計算したチェックサムを返す（ブロック４８５を参照）。次いで、方法４００は別の継続端（「端Ｅ２」）に進む。
【００７１】
方法４００は、端Ｅ２（図４Ｎ）から、ブロック４８３に進み、ブロック４８３で、ログオンモジュールは、秘密呼び出しキーを使用して、ベリファイアブロブを解読し、ベリファイアチェックサムを得る。ログオンモジュールは、公開呼び出しキーを使用して、チェックサムのシグネチャを妥当性検査する（ブロック４８１を参照）。次いで、ブロック４７９で、ログオンモジュールは、解読したベリファイアチェックサム、受け取った結果データ構造、およびソルト値から、チェックサムを計算する。方法４００はブロック４７７に進み、ブロック４７７で、この方法により、ログオンモジュールおよび保護ダイナミックリンクライブラリによって計算されたチェックサムが比較される。これらのチェックサムが一致するか否かを判定するテストが行われる（判定ブロック４７５を参照）。判定ブロック４７５におけるテストの判定がＮＯである場合、方法４００は端Ｌに進み、実行を終了する。一方、判定ブロック４７５におけるテストの判定がＹＥＳである場合、方法４００は別の継続端（「端Ｅ３」）に進む。
【００７２】
方法４００は、端Ｅ３（図４Ｏ）から、ブロック４７３に進み、ブロック４７３で、この方法により、プロファイルから、除外されるコンピューティングマシンクラスのリストが抽出される。次いで、この方法により、コンピューティングマシンは、ＣＰＵ情報（例えば、ベンダＩＤ、タイプ、ファミリ、モデル番号、ブランドＩＤ、特徴セット（feature set））を確認する（ブロック４７１を参照）。次いで、判定ブロック４６９で、ベンダＩＤが、除外されるリストに存在するか否かを判定するテストが行われる。判定ブロック４６９におけるテストの判定がＮＯである場合、方法４００は端Ｆに進む。一方、テストの判定がＹＥＳである場合、方法４００は別の継続端（「端Ｅ４」）に進む。
【００７３】
方法４００は、端Ｅ４（図４Ｐ）から、判定ブロック４６７に進み、判定ブロック４６７で、タイプ、ファミリ、およびモデル番号が、除外されるリストに存在するか否かを判定するテストが行われる。判定ブロック４６７におけるテストの判定がＹＥＳである場合、方法４００は別の継続端（「端Ｅ７」）に進む。一方、判定ブロック４６７におけるテストの判定がＮＯである場合、方法４００は別の判定ブロック４６５に進み、判定ブロック４６５で、ブランドＩＤおよび特徴セットが、除外されるリストに存在するか否かを判定するテストが行われる。判定ブロック４６５におけるテストの判定がＹＥＳである場合、方法４００は端Ｅ７に進む。一方、判定ブロック４６５におけるテストの判定がＮＯである場合、方法４００は別の継続端（「端Ｅ５」）に進む。
【００７４】
方法４００は、端Ｅ５（図４Ｑ）から、判定ブロック４６３に進み、判定ブロック４６３で、コンピューティングマシンのＣＰＵすなわち中央処理装置のＩＤを判定する拡張命令が存在するか否かを判定するテストが行われる。判定ブロック４６３におけるテストの判定がＮＯである場合、方法４００は端Ｆに進む。一方、判定ブロック４６３におけるテストの判定がＹＥＳである場合、この方法により、コンピューティングマシンのＣＰＵすなわち中央処理装置の名前を得るための拡張命令が呼び出される（ブロック４６１を参照）。次いで、ブロック４５９で、この方法により、中央処理装置のキャッシュサイズを得るための拡張命令が呼び出される。方法４００は別の継続端（「端Ｅ６」）に進む。
【００７５】
方法４００は、端Ｅ６（図４Ｒ）から、判定ブロック４５７に進み、判定ブロック４５７で、中央処理装置の名前が、除外されるリストに存在するか否かを判定するテストが行われる。判定ブロック４５７におけるテストの判定がＹＥＳである場合、方法４００は端Ｅ７に進む。判定ブロック４５７におけるテストの判定がＮＯである場合、ＣＰＵのキャッシュサイズが、除外されるリストに存在するか否かを判定する別のテストが行われる（判定ブロック４５５を参照）。判定ブロック４５５におけるテストの判定がＹＥＳである場合、方法４００は端Ｅ７に進む。一方、判定がＮＯである場合、方法４００は端Ｆに進む。
【００７６】
端Ｅ７（図４Ｓ）から、この方法により、コンピュータマシンに対する利用可能な保護がないことを伝えるエラーメッセージが発せられ、システムのシャットダウンが開始される（ブロック４５５を参照）。次いで、方法４００は端Ｌに進み、実行を終了する。
【００７７】
方法４００は、端Ｆ（図４Ｂ）から、継続端（「端Ｇ」）と出口端（「端Ｈ」）との間に定義された方法ステップのセット４０８に進む。方法ステップのセット４０８は、インストールファイルが改ざんされたか否かを検証する。
【００７８】
端Ｇ（図４Ｓ）から、ログオンモジュールは、保護ダイナミックリンクライブラリと通信して、コンピューティングマシン上の重大なファイルに関連する暗号化された保護プロファイルにアクセスする（ブロック４５３を参照）。図４Ｌ〜４Ｎ中の（図示したシーケンスの）ステップ４９５〜４７５が、コンピューティングマシン上の重大なファイルに関連する暗号化された保護プロファイルを見つけるというコンテキストにおいて実行される（ブロック４５１を参照）。次いで、ブロック４４９で、この方法により、重大なファイルのリストが、プロファイルから抽出される。コンピューティングマシン上の重大なファイルが変更されたか否かを判定するテストが行われる（判定ブロック４４７を参照）。判定ブロック４４７におけるテストの判定がＹＥＳである場合、方法４００は端Ｌに進み、実行を終了する。一方、判定ブロック４４７のテストの判定がＮＯである場合、方法４００は端Ｈに進む。端Ｇと端Ｈとの間の処理ステップは、コンピューティングマシン上の重大なファイルが変更または改ざんされたか否かを継続的にチェックするために、同時に実行できることに留意されたい。
【００７９】
方法４００は、端Ｈ（図４Ｂ）から、継続端（「端Ｉ」）と出口端（「端Ｊ」）との間に定義された方法ステップのセット４１０に進む。方法ステップのセット４１０は、レジストリが改ざんされたか否かを判定する。
【００８０】
端Ｉ（図４Ｔ）から、起動時に、ログオンモジュールは、システムコンテキストのレジストリのキーおよび値を保護するための、保護ダイナミックリンクライブラリの保護関数を呼び出す（ブロック４４５を参照）。保護ダイナミックリンクライブラリは、システムコンテキストのレジストリの様々なキーおよび値を保護するためのスレッドを生成する（ブロック４４３を参照）。次いで、ブロック４４１で、保護ダイナミックリンクライブラリは、生成したばかりのスレッドへのハンドルを、ログオンモジュールに返す。方法４００はブロック４３９に進み、ブロック４３９で、この方法により、システムコンテキストのレジストリのキーおよび値を保護するスレッドの継続性をチェックするためのタイマが生成される。次いで、方法４００は３つの独立した実行パスに進む。これら実行パスは、継続端（「端Ｉ２」）、判定ブロック４３７、および別の継続端（「端Ｉ４」）により表されている。これらの独立した実行パスは同時性を示している。判定ブロック４３７で、予め設定された期間が過ぎたか否かを判定するテストが行われる。判定ブロック４３７におけるテストの判定がＮＯである場合、方法４００は別の継続端（「端Ｉ３」）に進み、判定ブロック４３７にループバックして、前述した処理ステップが繰り返される。一方、判定ブロック４３７におけるテストの判定がＹＥＳである場合、方法４００は別の継続端（「端Ｉ１」）に進む。
【００８１】
方法４００は、端Ｉ１（図４Ｕ）から、判定ブロック４３５に進み、判定ブロック４３５で、スレッドが終了したか否かを判定するテストが行われる。判定ブロック４３５におけるテストの判定がＮＯである場合、方法４００は別の判定ブロック４３３に進み、判定ブロック４３３で、スレッドが一時停止したか否かを判定するテストが行われる。判定ブロック４３３におけるテストの判定がＮＯである場合、方法４００は端Ｉ３に進み、判定ブロック４３７にループバックして、前述した処理ステップが繰り返される。判定ブロック４３５、４３３におけるテストの判定がＹＥＳである場合、方法４００はブロック４３１に進む。この場合はシステムが改ざんされたと考えられ、ブロック４３１で、この方法により、システムのシャットダウンが開始される。次いで、方法４００は端Ｌに進み、実行を終了する。
【００８２】
方法４００は、端Ｉ２（図４Ｖ）から、ブロック４２９に進み、ブロック４２９で、スレッドは、保護ダイナミックリンクライブラリと通信して、保護すべきシステムレジストリキーおよび値のリストにアクセスする。図４Ｌ〜４Ｎ中の（図示したシーケンスの）ステップ４９５〜４７５が実行される（ブロック４２７を参照）。次いで、ブロック４２５で、スレッドは、レジストリキーを保護するための変更があれば、その変更の通知を行う（subscribe）。判定ブロック４２３で、変更の通知があるか否かを判定するテストが行われる。判定ブロック４２３におけるテストの判定がＮＯである場合、方法４００は判定ブロック４２３にループバックし、前述した処理ステップが繰り返される。一方、判定ブロック４２３におけるテストの判定がＹＥＳである場合、この方法により、改ざんされたキーおよびその値が修復される（ブロック４２１を参照）。次いで、方法４００は判定ブロック４２３にループバックし、前述した処理ステップが繰り返される。
【００８３】
方法４００は、端Ｉ４（図４Ｗ）から、ブロック４１９に進み、ブロック４１９で、ユーザがログオンしたときに、ログオンモジュールは、ユーザコンテキストのレジストリのキーおよび値を保護するための、保護ダイナミックリンクライブラリの保護関数を呼び出す。保護ダイナミックリンクライブラリは、ユーザコンテキストのレジストリの様々なキーおよび値を保護するためのスレッドを生成する（ブロック４１７を参照）。次いで、ブロック４１５で、保護ダイナミックリンクライブラリは、生成したばかりのスレッドへのハンドルを、ログオンモジュールに返す。方法４００はブロック４１３に進み、ブロック４１３で、この方法により、ユーザコンテキストのレジストリのキーおよび値を保護するスレッドの継続性をチェックするためのタイマが生成される。図４Ｔ〜４Ｕの（図示したシーケンスの）ステップ４３７〜４２１が、ユーザコンテキストについて実行される。次いで、方法４００は端Ｊに進む。
【００８４】
方法４００は、端Ｊ（図４Ｂ）から、継続端（「端Ｋ」）と出口端（「端Ｌ」）との間に定義された方法ステップのセット４１２に進む。方法のセット４１２は、サービスが改ざんされたか否か、または、許可されていないサービスが実行されているか否かを判定する。端Ｋ（図４Ｘ）から、起動時に、ログオンモジュールは、許可されていないサービスの実行を抑止するための、保護ダイナミックリンクライブラリの保護関数を呼び出す。保護ダイナミックリンクライブラリは、許可されていないサービスの実行を抑止するためのスレッドを生成する（ブロック４０７を参照）。次いで、ブロック４０５で、保護ダイナミックリンクライブラリは、生成したばかりのスレッドへのハンドルを、ログオンモジュールに返す。次いで、方法４００はブロック４０３に進み、ブロック４０３で、この方法により、許可されていないサービスの実行を抑止するスレッドの継続性をチェックするためのタイマが生成される。図４Ｔ〜４Ｕのステップ４３７〜４３１が実行される（ブロック４０１を参照）。次いで、ブロック４０１Ａで、スレッドは、保護ダイナミックリンクライブラリと通信して、許可されていないサービスのリストに関連する暗号化された保護プロファイルにアクセスする。次いで、方法４００は別の継続端（「端Ｋ１」）に進む。
【００８５】
端Ｋ１（「図４Ｙ」）から、図４Ｌ〜４Ｎのステップ４９５〜４７５が実行される。判定ブロック４０１Ｃで、許可されていないサービスが実行されているか否かを判定するテストが行われる。判定ブロック４０１Ｃにおけるテストの判定がＮＯである場合、方法４００は別の継続端（「端Ｋ２」）に進む。一方、判定ブロック４０１Ｃにおけるテストの判定がＹＥＳである場合、方法４００はブロック４０１Ｄに進み、ブロック４０１Ｄで、この方法により、許可されていないサービスに依存するすべてのサービスが停止される。次いで、許可されていないサービスが、実行から削除される（ブロック４０１Ｅを参照）。
【００８６】
方法４００は、端Ｋ２（図４Ｚ）から、判定ブロック４０１Ｆに進み、判定ブロック４０１Ｆで、許可されていないサービスが他にもあるか否かを判定するテストが行われる。判定ブロック４０１Ｆにおけるテストの判定がＹＥＳである場合、別の継続端（「端Ｋ３」）に進む。端Ｋ３（図４Ｙ）から、方法４００は判定ブロック４０１Ｃにループバックし、前述した処理ステップが繰り返される。一方、判定ブロック４０１Ｆにおけるテストの判定がＮＯである場合、方法４００はブロック４０１Ｇに進み、ブロック４０１Ｇで、スレッドは、予め設定された期間の間、スリープする。次いで、方法４００は端Ｋ３を介して判定ブロック４０１Ｃにループバックし、前述した処理ステップが繰り返される。端Ｋと端Ｌとの間に定義された方法ステップのセット４１２に関連して説明したステップは、他の方法ステップのセットと同時に実行されることが好ましい。
【００８７】
本発明の好ましい実施形態について、図示して説明したが、本発明の趣旨および範囲を逸脱することなく、これに様々な変更を加えることができることが理解されよう。
【図面の簡単な説明】
【００８８】
【図１】許可されていない個人によるコンピューティングマシンにおけるソフトウェア改ざんの問題を示す従来システムを例示するブロック図である。
【図２】改ざんを抑止するソフトウェアをセットアップするための例示的なソフトウェアコンポーネントを示すブロック図である。
【図３Ａ】ソフトウェア改ざんを抑止するために相互動作する例示的なソフトウェアコンポーネントを示すブロック図である。
【図３Ｂ】本発明の一実施形態による、レジストリまたはダイナミックリンクライブラリに記憶された例示的なプロファイルと、ソフトウェア群の安全な相互動作によるプロファイルの抽出とを示すブロック図である。
【図４Ａ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｂ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｃ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｄ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｅ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｆ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｇ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｈ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｉ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｊ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｋ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｌ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｍ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｎ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｏ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｐ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｑ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｒ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｓ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｔ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｕ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｖ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｗ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｘ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｙ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図４Ｚ】本発明の一実施形態による、ソフトウェア改ざんを抑止する方法を示すプロセス図である。
【図１】
2008503014.tif 000003
【図２】
2008503014.tif 000004
【図３Ａ】
2008503014.tif 000005
【図３Ｂ】
2008503014.tif 000006
【図４Ａ】
2008503014.tif 000007
【図４Ｂ】
2008503014.tif 000008
【図４Ｃ】
2008503014.tif 000009
【図４Ｄ】
2008503014.tif 000010
【図４Ｅ】
2008503014.tif 000011
【図４Ｆ】
2008503014.tif 000012
【図４Ｇ】
2008503014.tif 000013
【図４Ｈ】
2008503014.tif 000014
【図４Ｉ】
2008503014.tif 000015
【図４Ｊ】
2008503014.tif 000016
【図４Ｋ】
2008503014.tif 000017
【図４Ｌ】
2008503014.tif 000018
【図４Ｍ】
2008503014.tif 000019
【図４Ｎ】
2008503014.tif 000020
【図４Ｏ】
2008503014.tif 000021
【図４Ｐ】
2008503014.tif 000022
【図４Ｑ】
2008503014.tif 000023
【図４Ｒ】
2008503014.tif 000024
【図４Ｓ】
2008503014.tif 000025
【図４Ｔ】
2008503014.tif 000026
【図４Ｕ】
2008503014.tif 000027
【図４Ｖ】
2008503014.tif 000028
【図４Ｗ】
2008503014.tif 000029
【図４Ｘ】
2008503014.tif 000030
【図４Ｙ】
2008503014.tif 000031
【図４Ｚ】
2008503014.tif 000032
【国際調査報告】
2008503014.tif 000033