(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022051704
(43)【公開日】2022-04-01
(54)【発明の名称】変更されたプログラムデータを識別するためのシステムおよび方法
(51)【国際特許分類】
A63F 13/75 20140101AFI20220325BHJP
A63F 13/73 20140101ALI20220325BHJP
A63F 13/35 20140101ALI20220325BHJP
G06F 21/51 20130101ALI20220325BHJP
【FI】
A63F13/75
A63F13/73
A63F13/35
G06F21/51
【審査請求】未請求
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2021151851
(22)【出願日】2021-09-17
(31)【優先権主張番号】17/026,482
(32)【優先日】2020-09-21
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.BLUETOOTH
2.HDMI
3.BLU―RAY DISC
(71)【出願人】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】110001276
【氏名又は名称】特許業務法人 小笠原特許事務所
(74)【代理人】
【識別番号】100130269
【弁理士】
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】デイビッド トラン
(72)【発明者】
【氏名】ユージーン ボリソフ
(72)【発明者】
【氏名】タナー スティーブンス
(57)【要約】 (修正有)
【課題】「コード再利用」技術を採用する証明プログラムを使用することにより、従来手法を部分的に改良する。
【解決手段】他の様々な局面の中でも、プログラムが変更されたかどうかを検出するための、自動生成証明プログラムに関する。非限定的な一例において、本技術は使用可能なコードシーケンスを求めてソフトウエアプログラム(例えば、ビデオゲーム)コードを走査するツールを使用する。該ツールは、コードシーケンスを自動的に組み合わせて、多数の異なる様々な証明プログラム(例えば、メモリチェック、ハッシング)を生成する。
【選択図】なし
【特許請求の範囲】
【請求項1】
プログラムデータに対する変更を検出するためのシステムであって、
プロセッサと、
コンピュータ読み取り可能な指示を記憶するように構成されたメモリとを備え、
前記コンピュータ読み取り可能な指示は、前記プロセッサによって実行されると、前記システムに、
クライアント装置上で実行するように構成された第1のプログラム用のプログラムコードを取得し、
使用可能なコードシーケンスを求めて前記第1のプログラム用の前記プログラムコードを走査し、
前記使用可能なコードシーケンスの部分を組み合わせて、第1の証明結果を有する第1の証明プログラムを形成し、
前記第1の証明結果を有する前記第1の証明プログラムを前記システムの前記メモリ内のデータベースへ記憶し、
前記第1の証明プログラムに関連付けられたデータを前記クライアント装置へ送信して、前記クライアント装置上で実行している前記第1のプログラムに対して、第1の証明チェック結果を生成する証明チェックを実行させ、
前記クライアント装置から前記第1の証明チェック結果を受信し、
前記第1の証明チェック結果を前記第1の証明プログラムに関連付けられた前記第1の証明結果と比較して、前記第1の証明結果が前記第1の証明チェック結果と一致するかどうかを判断し、
前記比較に基づき前記クライアント装置に関連付けられたアクションを実行させる、
システム。
【請求項2】
前記第1のプログラムに対する変更の種類が前記比較に基づいて判断され得る、請求項1に記載のシステム。
【請求項3】
前記クライアント装置はゲーム装置であり、
前記第1のプログラムは前記ゲーム装置上で実行中のゲームプログラムであり、
前記第1のプログラムに対する前記変更は、前記ゲームプログラムに関連付けられたユーザチートを示す、
請求項1に記載のシステム。
【請求項4】
前記第1のプログラム用の前記プログラムコードは、ソフトウエアツールを使用して走査され、前記使用可能なコードシーケンスは、前記ソフトウエアツールを使用して前記第1のプログラムを走査することから検出される、請求項1に記載のシステム。
【請求項5】
前記使用可能なコードシーケンスは、ソフトウエア機能の端の部分に位置する、請求項4に記載のシステム。
【請求項6】
プログラムデータに対する変更を検出するためのシステムであって、
プロセッサと、
第1の証明結果を有する第1の証明プログラムを記憶するように構成されたメモリとを備え、前記第1の証明プログラムは第1のプログラムのプログラムコードに関連付けられた使用可能なコードシーケンスから形成され、前記メモリは更に、コンピュータ読み取り可能な指示を記憶するように構成されており、前記コンピュータ読み取り可能な指示は、前記プロセッサによって実行されると、前記システムに、
前記第1の証明プログラムに関連付けられたデータをクライアント装置へ送信して、前記クライアント装置上で実行している前記第1のプログラムに対して、第1の証明チェック結果を生成する証明チェックを実行させ、
前記クライアント装置から前記第1の証明チェック結果を受信し、
前記第1の証明チェック結果に基づき前記クライアント装置に関連付けられたアクションを実行させる、
システム。
【請求項7】
前記使用可能なコードシーケンスは組み合わされて、前記第1の証明プログラムを形成する、請求項6に記載のシステム。
【請求項8】
前記第1の証明プログラムを形成することは、
前記使用可能なコードシーケンスを組み合わせて第1の証明アルゴリズムを形成することと、
前記第1の証明アルゴリズムによって使用される順序で、前記第1のプログラムに関連付けられた第1のプログラムバイナリからのコードシーケンスに対する参照をリストアップすることにより、前記第1の証明アルゴリズムを前記第1の証明プログラムへ変換することと、
を含む、
請求項7に記載のシステム。
【請求項9】
前記第1の証明チェック結果は、前記第1の証明プログラムに関連付けられた前記第1の証明結果と比較されて、前記第1の証明結果が前記第1の証明チェック結果と一致するかどうかを判断する、請求項6に記載のシステム。
【請求項10】
前記クライアント装置に関連付けられて実行される前記アクションは、前記クライアント装置にフラグを付すこと、前記クライアント装置へ警告を送ること、前記クライアント装置をロックすること、前記クライアント装置を禁止すること、および/または前記クライアント装置に関連付けられたアクションをとらないこと、のうちの少なくとも1つを含む、請求項6に記載のシステム。
【請求項11】
コンピュータ読み取り可能な指示を記憶した非一時的なコンピュータ読み取り可能な記録媒体であって、前記コンピュータ読み取り可能な指示は、システムのプロセッサによって実行されると、前記システムに、
使用可能なコードシーケンスを求めて、クライアント装置上で実行するように構成された第1のプログラム用のプログラムコードを走査することと、
前記使用可能なコードシーケンスの部分を組み合わせて、第1の証明結果を有する第1の証明プログラムを形成し、前記第1の証明プログラムをメモリへ記憶することと、
前記第1の証明結果を有する前記第1の証明プログラムに関連付けて前記クライアント装置上で実行している前記第1のプログラムに対して証明チェックを実行させることと、
前記証明チェックに基づき前記クライアント装置に関連付けられたアクションを実行することと、
を実行させる、
非一時的なコンピュータ読み取り可能な記録媒体。
【請求項12】
前記クライアント装置上で実行している前記第1のプログラムに対して前記証明チェックを実行することは、第1の証明チェック結果を生成する、請求項11に記載の非一時的なコンピュータ読み取り可能な記録媒体。
【請求項13】
前記第1の証明チェック結果は、前記第1の証明プログラムに関連付けられた前記第1の証明結果と比較されて、前記第1の証明結果が前記第1の証明チェック結果と一致するかどうかを判断する、請求項12に記載の非一時的なコンピュータ読み取り可能な記録媒体。
【請求項14】
前記クライアント装置に関連付けられて実行される前記アクションは、前記クライアント装置にフラグを付すこと、前記クライアント装置へ警告を送ること、前記クライアント装置をロックすること、前記クライアント装置を禁止すること、および/または前記クライアント装置に関連付けられたアクションをとらないこと、のうちの少なくとも1つを含む、請求項11に記載の非一時的なコンピュータ読み取り可能な記録媒体。
【請求項15】
前記第1の証明プログラムは、リターン指向プログラミング技術を使用して形成される、請求項11に記載の非一時的なコンピュータ読み取り可能な記録媒体。
【請求項16】
プログラムデータに対する変更を検出するための方法であって、
使用可能なコードシーケンスを求めて、クライアント装置上で実行するように構成された第1のプログラム用のプログラムコードを走査することと、
前記使用可能なコードシーケンスの部分を組み合わせて、第1の証明結果を有する第1の証明プログラムを形成し、前記第1の証明プログラムをメモリへ記憶することと、
前記第1の証明プログラムに関連付けられたデータを前記クライアント装置へ送信して、前記クライアント装置上で実行している前記第1のプログラムに対して証明チェックを実行させて、第1の証明チェック結果を生成することと、
前記クライアント装置から前記第1の証明チェック結果を受信することと、
前記第1の証明チェック結果に基づき前記クライアント装置に関連付けられたアクションを実行することと、
を含む、方法。
【請求項17】
前記第1の証明チェック結果は、前記第1の証明プログラムに関連付けられた前記第1の証明結果と比較されて、前記第1の証明結果が前記第1の証明チェック結果と一致するかどうかを判断する、請求項16に記載の方法。
【請求項18】
前記クライアント装置に関連付けられて実行される前記アクションは、前記クライアント装置にフラグを付すこと、前記クライアント装置へ警告を送ること、前記クライアント装置をロックすること、前記クライアント装置を禁止すること、および/または前記クライアント装置に関連付けられたアクションをとらないこと、のうちの少なくとも1つを含む、請求項16に記載の方法。
【請求項19】
前記使用可能なコードシーケンスは、ソフトウエア機能の端の部分に位置する、請求項16に記載の方法。
【請求項20】
前記第1の証明プログラムは、リターン指向プログラミング技術を使用して生成される、請求項16に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
何十年もの間、ビデオゲームシステムは、様々な異なるゲーム環境にプレーヤが参加できるようにしてきた。ゲームは、パラメータ、境界、ゲームをプレイする際の規則の有限のセットがプレーヤに提示されるように、設計される。例えば、ビデオゲームは、プレーヤが一定の量「レベルアップ」できるようにしてよく、または、プレーヤは、ゲーム環境内においてある動き(例えば、壁を通り抜けて歩くこと)を「制限」されてもよい。プレーヤによっては、当該ゲームの元の設計者(複数可)が意図しなかったやり方でゲームプログラムおよび/またはゲームメタデータを変更することがあり得る。例えば、プレーヤは、ゲームにおいて、ゲームキャラクタがより速くレベルアップできるようにまたは壁を通り抜けて歩けるように、ソフトウエアを変更することがあり得る。したがって、このように変更を低減または制限するようにビデオゲーム環境を設計する際には、いくつかの欠点が存在する。
【0002】
著作権表示
本特許文献の開示の一部には、著作権保護の対象となる内容が含まれる。本特許文献または本特許開示は特許商標局の特許ファイルまたは記録されているため、著作権者は、これをファクシミリ再現する者に対して異議を唱えるものではないが、すべてのいかなる著作権も所有している。
【発明の概要】
【発明が解決しようとする課題】
【0003】
ソフトウエアプログラムは、様々な理由から、ユーザが特定のアクションを行うこと(または特定のフィーチャーにアクセスすること)を制限することができる。例えば、ビジネスソフトウエア製品(例えば、ワードプロセッシングアプリケーション)は、特定の機能(例えば、文書の印刷または編集)について、ユーザがそのようなフィーチャーを購入することに同意するまで、ユーザを制限することができる。同様に、ビデオゲーム技術は、ゲーム環境において、特定のフィーチャー(またはDLC)をロック解除すること、ならびに様々なアクション(すなわち「チート(cheating)」)をすることの両方をユーザが行えないように、ユーザを制限してもよい。
【0004】
ビデオゲームにおけるチートは、ゲーミングが始まった頃からずっと蔓延してきた。何十年も前、ユーザは、特定のゲームにおいて特定のボタンを特定の順序で押下して、プレーヤの「ライフ」の量などのフィーチャーをロック解除することができた。ビデオゲームチートは、年とともに非常に進化し、ソフトウエアおよび/またはメタデータをユーザが変更して不公正なアドバンテージを得られるまでになった。
【0005】
そのようなチートは、ゲーム環境がマルチプレーヤゲーム(特にインターネットを介したマルチプレーヤゲーム)へ展開される場合、蔓延がひどいものになる。特に、マルチプレーヤゲームでの異なるシステムにおいてユーザが他のプレーヤに対してアドバンテージを得ることができるように、ユーザはソフトウエアを変更できる。これらの不公正なアドバンテージにより、ゲームはユーザにとってより満足のいかないものになり、その結果、ゲームにおける全体的なヒューマン―ユーザ経験および相互作用に悪影響をおよぼす。更に、ゲームプログラムに対するそのような変更は、ゲームシステムに対する特定のセキュリティリスクを生み出す。
【0006】
ユーザが自身の特定のソフトウエアプログラムを変更した可能性のある時を検出するための、ある従来技術が存在する。例えば、ソフトウエアが変更されたかどうかを検出するために証明(attestation)プログラムを使用するための、ある従来の証明アーキテクチャが存在する。このシステムは、証明プログラムがサーバーから選択されクライアント装置へ送信される、クライアント―サーバーアーキテクチャを採用している。クライアントは、証明プログラムを実行しサーバーへ証明結果を返す。サーバーは、当該結果を期待される結果と比較し、不一致が検出されると、クライアントには「侵害(compromised)」というフラグが付される。システム管理者(複数可)は、「侵害」クライアントに対してどのような種類のアクション(例えば、ユーザを禁止にする、警告を送る、アクションしない)をとるかを決定できる。
【0007】
より具体的かつ非限定的な例として、サーバーは、ハッシング技術を使用してデータにおける「不一致」を検出してよい。特定のプログラムデータが証明プログラムを実行して、既知の(例えば固定長)値を出力として出すハッシュ結果を生成してもよいことを、理解されたい。ハッシュ結果は、サーバーにより取得され、当該既知の値に対して検証され、「不一致」が生じたかどうかを判断することができる。この結果が「不一致」を生成した場合、サーバーは、当該プログラムを変更されているものとして識別し、クライアントシステムは「侵害」とマークされる。
【0008】
この従来手法は、異なるユーザがソフトウエアを変更したかどうかをゲームシステムが判断でき、システム管理者(複数可)が適切なアクションをとれるようになるので、有利である。しかし、この従来手法にはいくつかの欠点がある。一例として、従来手法では、ゲームにおけるハッシュ機能(または証明論理)をユーザが侵害し得、すると、開発者が、パッチを作成し、当該ゲームプログラムを実行している全てのクライアント装置にパッチを配布しなければならなくなる。更に、従来手法では、クライアントにおいて証明論理を実行するためにクライアント側装置からの協力が必要であり、したがって、「チート」の真の検出をサーバー側(またはリモート側)システムで「リモートで」行うことができない。
【課題を解決するための手段】
【0009】
したがって、本明細書で記述する技術は、「コード再利用」技術を採用する証明プログラムを使用することにより、従来手法を部分的に改良する。非限定的な例として、特定のリターン指向(return-oriented)プログラミング(「ROP」)またはジャンプ指向(jump-oriented)プログラミング(「JOP」)技術は、「攻撃者」によって使用されて、システムメモリに既に存在する指示の特定のシーケンスを選択することによりセキュリティ防御を迂回し、意図された順序で指示を実行してソフトウエア内に元々は存在しなかったかもしれない機能を達成することができる。
【0010】
本明細書で記述する技術は、ゲーム内に既に存在するコードシーケンスから証明プログラムを自動的に構築するためにROP/JOP技術を使用できる。一例として、典型的なゲームには、何千もの使用可能なコードシーケンスがあり得る。それ自体では、これらのシーケンスは特定の証明プログラム/手法に必ずしも関するものではない。しかしこれらのコードシーケンスは、組み合わせて共に連鎖させて、新規の機能(例えばメモリチェック、ハッシング動作)を実行することができる。
【0011】
各証明プログラムによって計算される証明結果は、使用したコードシーケンスに依存する。典型的なゲームには何千もの使用可能なコードシーケンスがあるため、結果は容易に予測されたり偽造されたりし得ない。本明細書で記述する論理は、必ずしも秘密(例えば、鍵、アルゴリズム)に依拠するものではなく、システムが完全に侵害されたときでさえ機能することができる。
【0012】
したがって、本技術は、それぞれ異なる結果を生成し得る、多数の可能な組合せに依拠できる。証明論理の複雑さは、(例えば、異なるコードシーケンス、または連鎖されたより多くのコードシーケンスを使用することにより)特定の条件に応じてスケールアップできることを、理解されたい。このようにして論理を更新することにより、有利なことに、ソフトウエアプログラムのためのパッチをリリースする必要がなくなる。
【0013】
したがって、本明細書で記述する技術は、他の様々な局面の中でも、プログラムが変更されたかどうかを検出するための、自動生成証明プログラムに関する。非限定的な一例として、本技術は、使用可能なコードシーケンスを求めてソフトウエアプログラム(例えば、ビデオゲーム)コードを走査するツールを使用する。このツールは、自動的にコードシーケンスを組み合わせて、多数の異なる様々な証明プログラム(例えば、メモリチェック、ハッシング)を生成する。
【0014】
証明論理における各選択されたコードシーケンスは、特定の動作(例えば、メモリからのロード、数学演算、ハッシュ機能の呼出し)を実行してよい。最終証明結果は、ソフトウエアメモリ内のテスト位置における値と各コードシーケンスによって実行される動作との両方に基づいてよい。例えば、コードシーケンスNは、定数の掛け算または定数の加算を使用して、メモリから読み出した値を変換してよい。サーバーが、期待される「良い」結果のデータベース(複数可)を証明プログラム毎に維持してよい場合には、各プログラムは、固有の「良い」結果を生成できる。「証明チェック」は、特定のクライアント上で実行中のプログラムに基づきサーバーによって実行されて、クライアントがプログラムを変更した可能性があるかどうかを、判断できる。
【0015】
証明の結果を偽造するためには、攻撃者は、プログラムを分析し、コードシーケンスおよびコードシーケンスに関連付けられた順序を抽出し、各コードシーケンスが何を行うかを分析しなければならない。通常、典型的なソフトウエアプログラムには多数の使用可能なコードシーケンスがあり、リアルタイムでそのようなことを行うことは非常に困難である。したがって、本明細書で記述する技術は、有利なことに、システムが多数の証明プログラムを生成および保存できるようにし、プログラムが(例えば「チートする」ために)変更された時をシステムが「リモートで」検出できるようにする。
【0016】
本「発明の概要」は、以下の「発明を実施するための形態」において更に説明する一連の概念を単純な形式で導入するためのものである。本「発明の概要」は、クレームした主題のキーとなる特徴または必須の特徴を特定することを意図しておらず、また、クレームした主題の範囲を限定するために使用されることを意図するものでもない。むしろ、本「発明の概要」は、本文献に記載する主題の概要を提供することを意図している。したがって、上述の特徴は単なる例に過ぎず、本明細書で記述する主題の他の特徴、局面、利点は、以下の「発明を実施するための形態」、「図面」および「特許請求の範囲」から明らかになるであろう。
【0017】
以下の記述において、説明および非限定の目的で、説明する技術の理解を提供するために、特定のノード、機能体、技術、プロトコルなどの具体的な詳細を記述する。当業者にとっては、以下に記述する具体的な詳細とは別に他の実施形態が実施され得ることは、明らかであろう。他の例として、周知の方法、装置、技術などの詳細な記述は、当該記述を不明瞭にしない程度において、不必要な詳細は省略する。
【0018】
本「発明を実施するための形態」において使用するセクションは、読者に各セクションの一般的な主題について向けるためだけのものである。以下からわかるように、多くの特徴が複数のセクションにわたって記載される。見出しはセクションに含まれる記述の意味に影響するものであると、理解されるべきではない。
【図面の簡単な説明】
【0019】
【
図1】非限定的な例としてのシステムのブロック図を示す。
【
図2A】システムに関連付けられたクライアント装置によって生成および/または表示される非限定的な例としてのユーザインターフェースを示す。
【
図2B】システムに関連付けられたクライアント装置によって生成および/または表示される非限定的な例としてのユーザインターフェースを示す。
【
図3】サーバーシステムを構成する内部構成要素の非限定的な例としてのブロック図を示す。
【
図4】一例としての証明プログラムを生成する非限定的な例としてのブロック図を示す。
【
図5】システムのデータベースの非限定的な例としてのブロック図を示す。
【
図6A】システムによって実行される処理の非限定的な例としてのフローチャートを示す。
【
図6B】システムによって実行される処理の非限定的な例としてのフローチャートを示す。
【
図7】システムを構成するハードウエア構成要素の非限定的な例としてのブロック図を示す。
【発明を実施するための形態】
【0020】
[変更されたプログラムデータを識別するためのシステム例]
【0021】
図1は、ネットワーク30を介してサーバーシステム(複数可)20と通信する1以上のゲーム装置10A~nを含むシステム1の非限定的な例を示す。非限定的な例として、ゲーム装置10A~nは、ネットワーク30を介して様々なゲームをプレイしてマルチプレーヤゲーム環境に参加できる。各ゲーム装置10A~nは、携帯型ゲーム装置、据え置き型ゲームコンソール、ならびに/または据え置き型および携帯型構成の両方で使用可能なハイブリットマシンを構成し得る。これらの例は勿論非限定的なものであり、システムは、ゲーム装置10A~nを構成する任意の種類の情報処理装置を使用してよい。
【0022】
ネットワーク30は、インターネットなどの相互接続されたコンピューティング装置のネットワークを構成し得ることを、理解されたい。ネットワーク30は、ローカルエリアネットワーク(LAN)を備え得る、またはシステム1において異なる装置間のピアツーピア接続を備え得る。
【0023】
サーバーシステム(複数可)20は、様々なサーバー装置を備え得る。様々なサーバー装置は、データベースサーバー、ファイルサーバー、ウエブサーバー、アプリケーションサーバー、サーバークラスター(例えば、クラウドベースのコンピューティング環境)、スタンドアロンサーバー、および/または、サーバーベースの能力を有する任意の他の携帯型もしくは据え置き型コンピューティング装置を含むが、これに限定されない。サーバーシステム(複数可)20は、離れて位置するハードウエア(例えば、リモートハードウエア)を使用して実施されてもよく、または同一の(例えば、単一の筐体に入ったサーバー装置内における)ハードウエアを使用して実施されてもよいことを、理解されたい。
【0024】
非限定的な例として、ユーザ(複数可)は、ゲーム装置10A~nを使用してあるゲームを実行し、次いで、マルチプレーヤゲームモードで当該ゲームをプレイしてよい。そのようなモードにおいて、ユーザ(複数可)は、サーバーシステム(複数可)20とリモート接続を開始し、ゲームロビーに入って複数のユーザの間でマルチプレーヤゲーム環境をセットアップしてよい。マルチプレーヤゲーム環境のロビーにおいては、少なくとも一人のユーザが、他の様々な局面のうち、ゲームモードタイプ、ゲームマップおよび/またはゲーム特性(例えば、ゲームボット、武器の種類、シールドの種類の数や難度)を選択することによって、マルチプレーヤゲーム環境をカスタマイズしてよい。
【0025】
ユーザがマルチプレーヤゲーム環境においてプレイする際、ユーザは、特定のアクションを行って自身に利益をもたらしてよく、かつ/または、他のユーザを負かすために使用される特定のアクションを行ってもよい。非限定的な例として、ユーザは、ユーザが他の敵キャラクタを「射撃」しようと試みてよいマルチプレーヤのファーストパーソンシューティングゲームをプレイしてよい。これらのユーザは個人としてプレイし、他の全てのユーザが「敵」であってよく、または、これらのユーザはチームでプレイし、特定のキャラクタが「同盟」キャラクタであってもよく、他のキャラクタが「敵」キャラクタであってもよい。
【0026】
図2Aおよび
図2Bは、ゲーム装置10A~nを操作する1以上のユーザによってプレイされ得るゲームの非限定的な例としてのユーザインターフェース100を示す。非限定的な一例において、
図2Aおよび
図2Bは、ユーザが「一人称」視点から仮想空間において操作可能なファーストパーソンシューティングゲームを示す。ゲームをプレイしながら、ユーザは、ターゲティングレチクル101を動かして仮想空間内で照準を定めてもよい。
【0027】
非限定的な例として、
図2Aに示すように、ユーザは、ターゲティングレチクル101を向けることができる、異なる敵オブジェクト102Aおよび102Bを見てよい。ユーザインターフェース100はまた、ユーザが仮想空間において照準を定めたり射撃したりすることを回避してもよい、異なる同盟キャラクタ103Aおよび103Bを示す。特定の非限定的な例としてのゲームにおいて、ユーザは、「フレンドリーファイア」制限技術のもと、同盟キャラクタ103Aおよび103Bを射撃するおよび/またはダメージを与えることを制限されてもよい。
【0028】
図2Bは、ゲームにおいてユーザが敵オブジェクト102Bに照準を定めた時点の非限定的な例を示す。
図2Bに示す例では、ユーザはターゲティングレチクル101を位置付け、敵オブジェクト102Bがユーザ「視界」に入っており、したがって、ユーザは、敵オブジェクト102Bを射撃して打ち倒すことができるようになっている。そうすることで、ユーザは、敵オブジェクト102Bにダメージを与え(または破壊し)つつ、そのようなアクションをとることで「ポイント」を取得してよい。
【0029】
ゲームの終わりには、ユーザは、特定の基準(例えば、最高ポイント合計、「キル」の数)に基づいてランク付けられてよい。異なるプレーヤのスコアボードがゲームプレイの終わりに表示されて、特定のユーザが、他のユーザのうち、どこに「位置する」かを示してもよい。同様に、システムは、インゲーム成績をサーバーシステム(複数可)20に報告して、当該ユーザがより多くのユーザの間でランク付けされてもよい。同様に、サーバーシステム(複数可)20は、例えば、他の様々な局面のうち、ユーザに仮想通貨を与えたり、および/または特定のゲームフィーチャーをロック解除したりすることにより、特定の成績に対してユーザに報酬を与えてもよい。
【0030】
図2Bに示す例において、ユーザは、自身の特定のゲーム装置上で実行中のプログラムに対する変更を採用するかもしれず、したがって、ユーザは、マルチプレーヤゲーム環境において「チート」するかもしれない。例えば、ユーザは、ゲームプログラムを変更して「自動照準」チートを実行し、ユーザが容易にかつ自動的に敵オブジェクト102Bに照準を定められるようにしたかもしれない。そうすることで、ユーザは、非常に容易に異なる敵オブジェクト(102A/B)を狙うことができ、より速くより高いスコアを取得できる(それによって、より多くのゲームベネフィットをロック解除できる可能性がある)。本明細書で記述する技術は、非限定的な一例において、異なるゲームプログラムの変更を検出できる。
【0031】
図3~
図6Bは、クライアント側装置(例えば、ゲーム装置10A~n)において実行中のプログラムの変更を本システムが検出できる、本技術の様々な局面を示す。
図3は、特に、異なる証明プログラムを生成し維持するための非限定的な例としてのサーバーシステム20を示す。例としてのサーバーシステム20は、個々のゲームに関連付けられた異なる証明プログラムを自動的に作成するツールを使用してよく、ユーザの端末上で実行中のプログラムをユーザが変更したかどうかを判断してよい。
【0032】
非限定的な例として、サーバーシステム20は、異なるゲーム用のゲームコードを含むゲームコードライブラリ21を含んでよい。例えば、ゲームコードライブラリ21は、
図2Aおよび
図2Bに示すファーストパーソンシューティングゲーム用のゲームコードを含んでよい。ゲームコードライブラリ21は、勿論、異なるゲームの何百(または何千)ものコードを含み得、サーバーシステム20は、証明プログラムを構築する際にそのようなゲームコードを利用することができる。ゲームコードはゲームのオリジナルソースコードであってよいこと、またはゲームコードはゲームのプログラムバイナリを含んでよいことを、理解されたい。勿論、本願で説明する例は、ゲームコードに関するものであるが、これに限定されない。換言すれば、本技術は、本願で説明する新規の技術を任意のソフトウエアプログラムに関連付けづけて実施することを想定している。ソフトウエアプログラムは、他の様々な種類の中でも、システムソフトウエア、アプリケーションソフトウエア、フリーウエア、シェアウエア、オープンソース、および/または、クラウドベースのソフトウエアを含むが、これに限定されない。
【0033】
サーバーシステム20はまた、異なるゲームプログラム/ソフトウエアタイトルに関連付けられた1以上の証明プログラムを構築できる証明プログラムビルダー22を含む。非限定的な一例において、証明プログラムビルダー22は、ゲームコードライブラリ21からのゲームコードを使用して、異なる証明プログラムを生成するためのコードを分析してよい。これらの証明プログラムは、クライアント側装置においてゲーム/ソフトウエアプログラムを変更することに関連付けられた技術に対応する、異なる結果を生成し得る。
【0034】
サーバーシステム20はまた、サーバーシステム20のネットワーク機能を実行するためのネットワーキングモジュール(複数可)23を含んでよい。例えば、ネットワーキングモジュール(複数可)23は、ネットワーク30を介して通信するための伝送制御プロトコル(TCP)および/またはユーザデータグラムプロトコル(UDP)を実施できる。これらの例は、勿論、非限定的なものであり、ネットワーキングモジュール(複数可)23は、異なるプロトコルを使用する様々な通信を実行できる。異なるプロトコルは、ハイパーテキスト転送プロトコル(HTTP)、ファイル転送プロトコル(FTP)、インターネットプロトコル(IP)などを含むが、これに限定されない。
【0035】
サーバーシステム20はネットワーキングモジュール(複数可)23を使用して異なるゲーム装置10A~nと通信してもよいことを、理解されたい。非限定的な一例において、異なるサーバーシステム(複数可)20は、ネットワーキングモジュール(複数可)23を使用して、異なる装置10A~nの間でマルチプレーヤゲーム環境を実施してよい。他の非限定的な例において、サーバーシステム(複数可)20は、ネットワーキングモジュール(複数可)23を使用して装置10A~nと相互作用し、各装置10A~nにおいてソフトウエアが変更されたかどうかを判断する証明論理を実施してよい。これらの例は、勿論、非限定的なものであり、本明細書で記述する技術は、サーバーシステム(複数可)20が異なるゲーム装置10A~nと通信し得る様々な方法を想定している。
【0036】
本明細書において、システム(複数可)20は、(例えば、証明プログラムビルダー22を使用して)特定のゲームに関連付けられた異なる証明プログラムを生成してよい。各証明プログラムは一旦生成されると、プログラムは、システム20の証明プログラムデータベース24に記憶され得る。非限定的な一例において、証明プログラムデータベース24は、リレーショナルデータベース管理システム(RDBMS)、オブジェクト指向データベース管理システム(OODBMS)、オブジェクトリレーショナルデータベース管理システム(ORDBMS)、NoSQLデータストア、オブジェクトキャッシュ、分散ファイルシステム、(Hadoopなどの技術に基づく)データクラスター、および/または、他の適切な種類のデータ記憶システム、のうちの1以上を含む。
【0037】
サーバーシステム(複数可)20はまた、プログラムがクライアント側装置(例えば、ゲーム装置10A)によって変更されたかどうかを判断するための証明検出論理25を含んでよい。非限定的な例として、証明検出論理25は、ゲーム装置10A~nとのインターフェースをとってよく、証明プログラムデータベース24に記憶されている1以上の証明プログラムを使用してよい。証明検出論理25は、クライアント側装置から生成された結果を証明プログラムデータベース24に記憶されている結果と比較して、特定の変更(例えば、自動照準チート)がクライアント側装置24において実行されたかどうかを判断できる。
【0038】
サーバーシステム(複数可)20は、証明検出論理25の検出に基づき適切な決定を行うための証明決定(resolution)論理26を更に含む。非限定的な例として、(例えば証明検出論理25を使用して)クライアント側装置が特定のプログラムを変更したと判断すると、証明決定論理26は、当該検出を「決定(resolve)」する手順を実行してよい。例えば、証明決定論理26は、クライアント側装置に「フラグ」を立てて、当該装置を操作しているユーザが「チート」したことを示してよい。
【0039】
証明決定論理26は、ユーザアカウントをロックする(もしくは禁止する)、検出された「チート」のユーザに警告する、または(例えばソフトウエア「パッチ」を使用して)クライアント側装置を修正して「チート」を取り除くなどの、特定の修正/懲戒アクションを行うことができる。同様に、証明決定論理26は、いかなるアクションもとらず、単にユーザ(またはクライアント側装置)に「フラグ」を付し、後日特定のアクションをとる可能性のある「チート」であることを示してもよい。
【0040】
図3に示す構成要素は単一のシステム内において実施され得ることを理解されたい。構成要素はまた、複数のシステムおよび/または分散型コンピューティング環境(例えば、クラウドコンピューティング環境)に組み込まれてもよい。このように、本システムは、単一の構成要素に限定されず、複数の構成要素に組み込むことができる。
【0041】
図4は、ゲームコードライブラリ21からのコードを使用して1以上の証明プログラムを構築する証明プログラムビルダー22の特定の非限定的な例としての実施形態を示す。
図4に示す例では、ビルダー22は、ゲームコードライブラリ21に記憶されたゲームコード21Aを使用して特定証明プログラム22Aを構築できる。
【0042】
図4の例では、ゲームコード21Aは、異なるコードシーケンス1~nを含んでよい。非限定的な例として、これらの異なるコードシーケンスは、特定のプログラム言語での異なる指示の集合を含むことができる、または、異なるメモリ位置に対するポインタならびに異なる機能に対する「呼出し」を含む異なるプログラミング「ブロック」の組合せを含むことができる。
【0043】
図4に示す例では、ゲームコード21Aは、特定のゲームのゲームサイクルを実行するためのコードシーケンス1~nを含んでよい。例えば、コードシーケンス1~nは、ユーザ入力を受け付けて処理すること、当該入力に基づきゲーム論理を実行すること、人工知能論理を実行すること、ならびに/またはゲームの出力音声および表示を更新することを含む、機能を実行してよい。
【0044】
証明プログラムビルダー22は、コードシーケンス1~nの実行順序を自動的に並び替えて、任意の数の異なる様々な証明アルゴリズム(例えば、メモリチェック、ハッシング)を生成してよい。各コードシーケンスは特定の動作(例えば、メモリからのロード、数学演算、ハッシュ機能の呼出し)を実行してよい。証明プログラムビルダー22は、証明アルゴリズムに対応して、当該証明アルゴリズムによって使用される順序で、ゲームバイナリにおける使用可能なコードシーケンスに対する参照をリストアップすることにより、自動的に証明プログラムを生成してよい。
【0045】
最終証明結果(例えば、証明プログラム22A)は、ゲームの「メモリ」におけるテスト位置における値と、各コードシーケンスによって実行された動作との両方に依存してよい。例えば、(証明プログラム22Aにおいて示される)コードシーケンスnは、定数の掛け算または定数の加算を使用して、メモリから読み出した値を変換してよい。非限定的な例として、プログラム22Aのコードシーケンス2は、特定の位置(例えば、テストすべき位置)においてメモリから値を読み出し、次のコードシーケンスnは、何らかの種類の動作(例えば、定数の加算、論理的動作の実行)を通してその値を変換できる。それに続くコードシーケンス1は、メモリハッシュ動作を実行し、次のコードシーケンス3は、ハッシュ動作の結果を、読み出したメモリからの変換値と組み合わせることができる。証明プログラム22Aの最終出力は、クライアント側プログラムの変更が発生したかどうかを判断するために、記憶されて後にクライアント側装置からの結果と比較される結果を生み出す。
【0046】
他の例として、メモリ位置Aにおける変更をテストするための「最終」証明プログラムは、4つのコードシーケンスから構築されてよい。これらのシーケンスは、(1)メモリ位置Aから値を読み出し、読み出した値をレジスタR内に置く、(2)レジスタR内の値に定数1を掛け、結果をレジスタRに記憶する、(3)定数2をレジスタRに加算し、結果をレジスタRに記憶する、および/または(4)レジスタR内の結果をサーバーシステム(複数可)20へ返す、ことを含み得る。他のプログラムにおいて、シーケンス(2)および(3)の実行順序が入れ替わった(またはシーケンス(2)および(3)を使用せずにシーケンス(2)が続けて2回使用される)場合、サーバーシステム(複数可)20へ送られる証明プログラムの結果は変わることになる。結果は依然としてメモリ位置Aにおける値に依存しているが、結果は、シーケンスの実行順序と各シーケンスによって実行される動作にも依存する。メモリ位置Aにおける値はサーバーシステム(複数可)20に記憶される「ゴールデン値」を生じ得ることを、理解されたい。ユーザが(例えば、所望のゲームチートを達成するために)メモリ位置Aにおける結果を変更しようとすると、メモリ位置Aに関連付けて実行した証明プログラムの結果は、サーバーシステム(複数可)20に記憶されたものと異なることになり、それによって、システム(複数可)20に、当該ゲームにおいて変更が発生したことが通知される。
【0047】
サーバーシステム(複数可)20は証明プログラム毎に結果のデータベースを(例えば、データベース24において)維持できることを、理解されたい。これらの記憶された結果により、サーバーシステム(複数可)20は、クライアント側装置(例えば、ゲーム装置10A~n)から生成された結果を比較して、変更が検出されたかどうかを判断できる。
【0048】
証明プログラムの結果を偽造するためには、「攻撃者」はプログラムを分析し、コードシーケンスおよびそれらの順序を抽出し、各コードシーケンスが何を行うかを分析する必要があることを、理解されたい。典型的なゲームには、おびただしい量の使用可能なコードシーケンスがあり、この処理をリアルタイムに実施することは極めて困難である。したがって、本明細書で記述するシステム1は、有利なことに、チートの「リモート」検出を可能とする。
【0049】
図5は、様々なゲームに関連付けられた異なる証明プログラムについて異なる結果を記憶する証明プログラムデータベース24の非限定的な例を示す。非限定的な一例において、データベース24は、証明プログラムビルダー22によって生成された証明プログラムのそれぞれを記憶でき、証明検出論理25は、ソフトウエア変更がクライアント側装置において発生したかどうかを判断するためにアクセス可能である。
【0050】
図5に示す例では、証明プログラムデータベース24は、ゲーム1~Xのための異なる証明プログラムを含む。ゲーム1~Xは、任意の種類のビデオゲームを含む。このビデオゲームは、シューティングビデオゲーム(例えば、一人称シューティング、三人称シューティング)、アクションビデオゲーム、アドベンチャービデオゲーム、スポーツビデオゲーム、パズルビデオゲーム、および/またはダンスビデオゲームを含むが、これに限定されない。
【0051】
非限定的な例として、本明細書では、証明プログラムビルダー22は、ゲームコードライブラリ21におけるゲームからコードを走査して、各ゲームに関連付けられた異なる証明プログラムを生成することができる。証明プログラムは、クライアント側プログラムが変更されたかどうかを判断するために、クライアント側端末上で実行中のゲームと比較され得る特定の結果を生成する。
【0052】
図5に示す例では、証明プログラムデータベース24は、ゲーム1~Xを含む。ゲーム1~Xのそれぞれは、自身に関連付けられた証明プログラムを含む。例えば、ゲーム1はファーストパーソンシューティングゲームに向けられ、当該ファーストパーソンシューティングゲームは当該ゲームのために生成された証明プログラムAP1~nを有する。これらの証明プログラムAP1~nのそれぞれは、証明結果AR1~nを生成する。
【0053】
ゲーム2~Xのそれぞれは、各ゲームのための自身の関連付けられた証明プログラムAP1~nを有し、各プログラムAP1~nはそれぞれの証明結果AR1~nを生成することを、理解されたい。本明細書では、システム1は、クライアント側装置上で実行中のプログラムに対して「証明チェック」を実行し、それをデータベース24に記憶された結果AR1~nの1以上と比較できる。例えば、ある「証明チェック」は、ゲーム1のためにゲーム装置10Aに対して実行することができ、当該「証明チェック」は、ゲーム装置10Aから結果を生成できる。
【0054】
特定の例として、サーバーシステム(複数可)20は、証明プログラムをゲーム装置10Aへ送ってもよい。証明プログラムは、ゲーム装置10Aへ送信されるコードシーケンスに対する参照を含み得る。ゲーム装置10A~n上に記憶されている/ゲーム装置10A~n上で実行中の各プログラムは、サーバーシステム(複数可)20からの装置10A~nによって受信される証明要求を理解する、関連付けられたシン・ライブラリを有してよいことを、理解されたい。証明要求(例えば、証明プログラム)は、装置10Aに証明結果を生成させ、この証明結果は、サーバーシステム(複数可)20へ送り返される。
【0055】
更に詳細には、ゲーム装置10Aからの結果は、(例えば、ネットワーキングモジュール(複数可)23を使用して)サーバーシステム(複数可)20へ送信され、サーバーシステム(複数可)20は、当該結果をデータベース24に記憶されたものと比較する。例えば、「証明チェック」を、ゲーム1をプレイしているゲーム装置10Aに対して実行して、特定の「自動照準」チートフィーチャーを検出してよい。「自動照準」チートフィーチャーは、対応する証明結果AR1を有する証明プログラムAP1によって生成されたものに相当し得る。1つのターゲットは広く分散したエクスプロイト(例えば、チート)の検出であってもよいことを、理解されたい。例えば、所望のエクスプロイトは、何ら技術的知識を持たないユーザでも自身のシステムにインストールできるような種類のもの(そのようなエクスプロイトは「maxcheats.com」などのウエブサイトで見つけることができる)であってよい。本明細書で記述する技術は、そのような特定の変更を有するゲームについての証明結果を計算し、当該プログラムとともにそのような結果を記憶することができる。したがって、サーバーシステム(複数可)20に記憶された各証明プログラムは、(1)期待される「ゴールデン結果」、(2)1以上のエクスプロイトおよびそれらの対応する「悪い」結果、ならびに/または(3)エクスプロイトがまだ特定されていない可能性のある、特定の「未知の」結果、を有することになる。
【0056】
システム(複数可)20は、ゲーム1をプレイしているゲーム装置10Aによって生成された結果の問合せをデータベース24に対して実行し、特定の結果がデータベース24に記憶されているものと一致するかどうかを判断することができる。システム(複数可)20は、標準データベース問合せ言語(例えば、SQL)を使用してそのような問合せを実行できる。そうすることで、システム(複数可)20は、ゲーム1用のこの特定のフィーチャー(例えば、「自動照準」チート)に関連付けて特定の変更が装置10Aによってなされたかどうかを検出でき、検出すると、システム(複数可)20は、何らかの種類の管理アクションをとることができる。
【0057】
これらの例は、勿論、非限定的なものであり、システムは、証明結果を記憶し、クライアント側装置における異なる「証明チェック」から生成される結果と比較するための様々な方法を想定している。更に、ある「チート」が多数の異なる証明プログラムから検出されてもよく、したがって1つの「チート」は1つの証明プログラムのみに限定されない。別の言い方をすると、ゲームに対する特定のチートは、(それぞれ異なる証明結果を有する)多数の証明プログラムを使用して再現され得る。
【0058】
図6Aおよび
図6Bは、システム1によって実行される処理の非限定的な例としてのフローチャート600を示す。
図6Aは、特に、(例えば、証明プログラムビルダー22を使用して)1以上の証明プログラムを生成する非限定的な処理のフローチャート600を示す。
図6Bは、特に、(例えば、証明検出論理25および/または証明決定論理26を使用して)変更を検出し「修正」アクションを実施する非限定的な処理のフローチャート600を示す。
図6Aおよび
図6Bに示す処理は(例えば、サーバーシステム(複数可)20を使用して)システム1によって実行され得ることを、理解されたい。勿論、この例は非限定的なものであり、
図6Aおよび
図6Bに示す処理は様々な異なる方法で実行され得る。
【0059】
処理は、システム1が、所与のプログラム用に(例えば、ゲームコードライブラリ21から)プログラムコードを取得することで始まる(アクションS1)。例えば、システム1は、ファーストパーソンシューティングゲームに関するゲーム1用のプログラムコードを取得してよい。ゲームコードは、ゲームソフトウエアの様々な機能内にネストされた何千もの(または何十万もの)コードシーケンスを含み得る。これらの機能のそれぞれは、他の機能を呼出したり、特定のタスクを実行するためにメモリの異なるエリアに対するポインタを含んだりしててよい。本明細書では、プログラムはプログラムのソースコードを含んでよいこと、またはプログラムバイナリを含んでよいことを、理解されたい。
【0060】
アクションS2では、システム1は、使用可能なコードシーケンスを求めてプログラムコードを走査(例えば、証明プログラムビルダー22を使用してプログラムバイナリを走査)できる。非限定的な例として、プログラムコードは、証明目的にそれ自体は関係のない特定のコードシーケンスを含んでよい。しかし、特定のコードシーケンスを組み合わせて所望の証明アルゴリズムを生成することができる。
【0061】
アクションS3では、システム1は、これらのコードシーケンスを組み合わせて、特定の結果を生成する証明アルゴリズムを生成することができる。本明細書では、オリジナルゲームコードは、意図された実行シーケンス(すなわちゲーム論理を実施すること)を含んでよい。システム1は、これらのシーケンスを組み合わせて所望の機能を「戦略的に」達成することができる。一例では、所望の機能は、変更についてメモリ位置をチェックすること、および/またはメモリのハッシュチェックを実行することを含んでよい。
【0062】
アクションS4では、システム1は、これらの組み合わされたコードシーケンスを使用して証明プログラムを生成する。非限定的な例として、システム1は、組み合わされたコードシーケンスの集合を使用して、特定のゲームにおける特定の「チート」(例えば、自動照準、壁を通り抜けて歩く、プレーヤキャラクタのレベルアップ)を検出するための証明プログラムを生成できる。
【0063】
証明プログラムの結果は、システムのデータベース(例えば、証明プログラムデータベース24)に維持されてよい(アクションS5)。非限定的な一例では、証明結果は、特定のゲームのための各証明プログラムと関連付けられてよい。これらの組み合わせは、例えば、本明細書で説明した
図5に示されている。
【0064】
したがって、
図6Bは、1以上のクライアント側装置に対して「証明チェック」を実行するための非限定的な例としてのフローチャート600を示す。処理はアクションS6から始まり、システム1はクライアント側装置上で実行中の特定のプログラムを検出できる。非限定的な例として、サーバーシステム(複数可)20は、ゲーム装置10Aがマルチプレーヤゲーム環境においてゲーム1を実行していることを検出してよい。
【0065】
アクションS7において、システム1は、クライアント側装置に対して「証明チェック」を実行できる。例えば、サーバーシステム(複数可)20は、ネットワーク30を介しネットワーキングモジュール(複数可)23を使用してゲーム装置10Aと通信できる。サーバーシステム(複数可)20は、ゲーム装置10A上で実行中のゲーム1の「証明チェック」を実行して、1以上の証明結果を生成できる。非限定的な一例では、システム(複数可)20は、特定のコードシーケンスに対する参照をゲーム装置10Aへ送ってよい。ゲーム装置10Aは、特定のゲームに関連付けられたシン・ライブラリを利用して、システム(複数可)20から送られたコードシーケンスに対する参照に関連付けられた結果を生成してよい。結果は、生成されて、ゲーム装置10Aからサーバーシステム(複数可)20へ送られ得る。
【0066】
アクションS8において、システム1は、クライアント側装置によって生成された証明結果を、システム20のデータベースメモリ(例えば、証明プログラムデータベース24)に記憶されているものと比較できる。非限定的な例として、本明細書では、クライアント側装置は、特定のゲームチートに対応する証明結果を生成し得る。この結果は、当該特定のゲーム用のデータベース24に対して照会され得る。データベースはクライアント側装置上で適切に機能しているソフトウエアに対応する「良い」結果を含んでよいことを、理解されたい。データベース24はまた、既知のチートに対応する「悪い」結果も含んでよい。同様に、データベース24はまた、既知の「良い」結果と一致しないが既知の「悪い」結果(例えばチート)とも一致しない「未知の」結果も記憶してよい。
【0067】
一致が見つかった場合(アクションS9)、システムは、クライアント側装置にフラグを付し、かつ/または特定の修正アクションをとることができる(アクションS10)。結果が「良い」結果とも「悪い」結果とも一致しない状況では、クライアント側装置が変更を行わなかったがハードウエア誤動作がある、またはクライアント側装置がデータベース24内の結果に一致しない変更を行った、という可能性がある。同様に、クライアント側装置が「良い」結果を返す場合、ソフトウエアはクライアント側装置によって変更されていない可能性があるので、処理は終了してよい。
【0068】
一致が検出されたかどうかに基づいて、システム1は最も適切に進める仕方を判断できることを、理解されたい。すなわち、クライアント側装置によって返された結果が既知の「悪い」結果と一致する場合、または返された結果が「未知の」結果と一致する(もしくはデータベース24に記憶された値と一致しない)場合、システム1は、(例えば、チート目的で)特定のプログラムを変更したとして、クライアント側装置にフラグを付してもよい。システム1はまた、何らかの種類の管理/修正アクションを決定してクライアント側装置に対して実行してもよい。例えば、システム1は、(例えば、eメールまたはメッセージングサービス(複数可)を使用して)クライアント側装置へ警告を送り、ユーザに特定の変更が検出されたことを通知するのみでもよい。システム1はまた、ゲーム(もしくはユーザ端末)をロックする、および/または一時的にもしくは永久にユーザを禁止するなどの、特定の懲戒アクションを実行してよい。
【0069】
いくつかの例では、クライアント側装置から出力された結果が、記憶された「良い」または「悪い」結果と一致しない可能性があり、したがって、変更が発生したかどうかを判断するための十分な証拠がないことがあり得ることを、理解されたい。したがって、システム1はまた、クライアント側装置に対して修正アクションを行わないことを決定してもよい。例えば、システム1は、クライアント側装置によって取得された特定の結果が偶然にまたはクライアント側装置における何らかの種類の「不具合(glitch)」によって生じた可能性があると、判断してもよい。この場合、システム1は、クライアント側装置にフラグも付さず、当該装置に対して修正/管理アクションもとらなくてよい。同様に、システム1は、装置にはフラグを付すべきだが他の修正アクションは取るべきではないと、判断してもよい。
【0070】
特定の例としての実施形態において、システム1は、これらの装置にフラグを付し、同様の結果を生じるフラグ付き装置のリストを維持してもよい。より多くの装置が、フラグ付き装置の結果と同様の結果を返し始めた場合、それは、システム1がそのようなチートを検出するための対応する証明プログラムを有さない、新規のチートを示している可能性がある。しばらくすると、その結果は特定の種類のチートに対応すると判断されるかもしれず、その時点で、以前は「未知」であった結果を生じるクライアント側装置に対して、修正アクションがとられ得る。これらの例は、勿論、非限定的なものであり、システムは、「証明一致」が見つかった時点で実行され得る様々なアクションを想定している。
【0071】
上記では、アクションS1~アクションS5およびアクションS6~S10は所与の順序で行われる別々のアクションとして説明したが、これは説明を容易にするためのものであることを理解されたい。様々な実施形態において、上述したアクションは様々な順序で実行されてよいことを理解されたい。代替的にまたは追加的に、上述したアクション(アクションS1~アクションS10)の一部の順序を入れ替えたり、かつ/または他のアクション(アクションS1~アクションS10)の一部と同時に実行されたりしてもよい。
【0072】
図7は、システム1260のためのハードウエアアーキテクチャの非限定的な例としてのブロック図を示す。
図7に示す例において、クライアント装置1210はネットワーク1240を介してサーバーシステム1200と通信する。ネットワーク1240は、インターネットなどの相互接続されたコンピューティング装置のネットワークを備え得る。ネットワーク1240はまた、ローカルエリアネットワーク(LAN)を備えてもよく、またはクライアント装置1210とサーバーシステム1200との間のピアツーピア接続を備えてもよい。以下で説明するように、
図7に示すハードウエア要素は、クライアント装置1210およびサーバーシステム1200において含まれるおよび/または実行されるものとして、上述した様々なソフトウエア構成要素およびアクションを実施するのに使用され得る。
【0073】
いくつかの実施形態では、クライアント装置1210(本明細書では「クライアントシステム」とも称され得る)は、以下に示すものの1以上を含む:1以上のプロセッサ1212;1以上のメモリ装置1214;1以上のネットワークインターフェース装置1216;1以上の表示インターフェース1218;および1以上のユーザ入力アダプタ1220。更に、いくつかの実施形態では、クライアント装置1210は、表示装置1222に接続されている、または表示装置1222を含む。以下に説明するように、これらの要素(例えばプロセッサ1212、メモリ装置1214、ネットワークインターフェース装置1216、表示インターフェース1218、ユーザ入力アダプタ1220、表示装置1222)は、コンピューティング装置1210のために様々な異なる機能を実行するように構成されたハードウエア装置(例えば、電子回路、または回路の組合せ)である。
【0074】
いくつかの実施形態では、プロセッサ1212のそれぞれまたは任意のものは、例えば、シングルもしくはマルチコアプロセッサ、マイクロプロセッサ(例えば、これは中央処理装置すなわちCPUとも称され得る)、デジタル信号プロセッサ(DSP)、DSPコアに関連付けられたマイクロプロセッサ、専用集積回路(ASIC)、書替え可能ゲートアレイ(FPGA)回路、またはオンチップシステム(SOC)(例えば、CPUと、メモリ、ネットワークインターフェースなどの他のハードウエア構成要素とを含む集積回路)であるか、またはこれを含む。かつ/または、いくつかの実施形態では、プロセッサ1212のそれぞれまたは任意のものは、x86またはAdvanced RISC Machine(ARM)などの命令セットアーキテクチャを使用する。
【0075】
いくつかの実施形態では、メモリ装置1214のそれぞれまたは任意のものは、(ダイナミックRAM(DRAM)もしくはスタティックRAM(SRAM)などの)ランダムアクセスメモリ(RAM)、(例えばNAND or NOR技術に基づく)フラッシュメモリ、ハードディスク、光磁気記録媒体、光媒体、キャッシュメモリ、(例えば、指示を保持する)レジスタ、またはデータおよび/もしくは指示(例えば、プロセッサ1212に対してもしくはプロセッサ1212によって実行されるソフトウエア)の揮発性もしくは不揮発性記憶を実行する他の種類の装置、であるか、またはこれを含む。メモリ装置1214は、不揮発性コンピュータ読み取り可能記憶媒体の例である。
【0076】
いくつかの実施形態では、ネットワークインターフェース装置1216のそれぞれまたは任意のものは、(ベースバンドプロセッサおよび/または有線もしくは無線トランシーバなどの)1以上の回路を含み、1以上の有線通信技術(Ethernet(IEEE802.3)など)および/もしくは無線通信技術(Bluetooth、WiFi(IEEE802.11)、GSM、CDMA2000、UMTS、LTE、LTE-Advanced(LTE-A)、ならびに/または他の近距離、中距離、および/もしくは遠距離無線通信技術など)の、レイヤ1、レイヤ2、および/またはより高次のレイヤを実装する。トランシーバは、送信機および受信機のための回路を備えてよい。送信機および受信機は、筐体を共有してよく、筐体内のいくつかまたは全ての回路を共有して送信および受信を行ってよい。いくつかの実施形態では、トランシーバの送信機および受信機は、回路を共有しなくてもよく、かつ/または同一の筐体もしくは別個の筐体内にあってもよい。
【0077】
いくつかの実施形態では、表示インターフェース1218のそれぞれまたは任意のものは、プロセッサ1212からデータを受信する1以上の回路であるかもしくはこれを含み、受信データに基づく対応する画像データを(例えば、個別GPU、統合GPU、描画処理を実行するCPUなどを介して)生成し、かつ/または、生成した画像データを表示装置1222へ出力(例えば、高精細度マルチメディアインターフェース(HDMI)、ディスプレイポートインターフェース、ビデオグラフィックスアレイ(VGA)インターフェース、デジタルビデオインターフェース(DVI)など)する。表示装置1222は、画像データを表示する。代替的にまたは追加的に、いくつかの実施形態では、表示インターフェース1218のそれぞれまたは任意のものは、例えば、ビデオカード、ビデオアダプタ、またはグラフィック処理装置(GPU)であるかまたはこれを含む。
【0078】
いくつかの実施形態では、ユーザ入力アダプタ1220のそれぞれまたは任意のものは、1以上の回路であるかまたはこれを含む。この1以上の回路は、クライアント装置1210に含まれる、取り付けられる、または他の方法でクライアント装置1210と通信する1以上のユーザ入力装置(
図7に図示せず)からユーザ入力データを受信して処理し、受信した入力データに基づくデータをプロセッサ1212へ出力する。代替的にまたは追加的に、いくつかの実施形態では、ユーザ入力アダプタ1220のそれぞれまたは任意のものは、例えば、PS/2インターフェース、USBインターフェース、タッチスクリーンコントローラなどであるかまたはこれを含み、かつ/または、ユーザ入力アダプタ1220は、例えば、キーボード、マウス、トラックパッド、タッチスクリーンなどのユーザ入力装置(
図7に図示せず)からの入力を容易にする。
【0079】
いくつかの実施形態では、表示装置1222は、液晶表示(LCD)ディスプレイ、発光ダイオード(LED)ディスプレイ、または他の種類の表示装置であってよい。表示装置1222がクライアント装置1210の構成要素である実施形態(例えば、コンピューティング装置および表示装置が一体化筐体に含まれる)では、表示装置1222は、タッチスクリーンディスプレイまたは非タッチスクリーンディスプレイであってよい。表示装置1222がクライアント装置1210に接続されている実施形態(例えば、クライアント装置1210の外にあり、有線および/または無線通信技術を介してクライアント装置1210と通信する)では、表示装置1222は、例えば、外部モニタ、プロジェクタ、テレビ、表示画面などである。
【0080】
様々な実施形態において、クライアント装置1210は、上述の要素(例えば、プロセッサ1212、メモリ装置1214、ネットワークインターフェース装置1216、表示インターフェース1218、およびユーザ入力アダプタ1220)のそれぞれまたは任意のものを1つ、2つ、3つ、またはそれ以上含む。代替的にまたは追加的に、いくつかの実施形態では、クライアント装置1210は、プロセッサ1212を含む処理システム;メモリ装置1214を含むメモリまたは記憶システム;ネットワークインターフェース装置1216を含むネットワークインターフェースシステム、の1以上を含む。
【0081】
クライアント装置1210は、様々な実施形態において、多数の異なる様式で配置されてよい。単なる一例として、クライアント装置1210は、プロセッサ1212が以下のものを含むように配置されてよい:マルチ(またはシングル)コアプロセッサ;第1のネットワークインターフェース装置(これは、例えば、WiFi、Bluetooth、NFCなどを実装する);1以上のセルラー通信技術(例えば、3G、4GLTE、CDMAなど)を実装する第2のネットワークインターフェース装置;メモリまたは記憶装置(例えば、RAM、フラッシュメモリ、またはハードディスク)。プロセッサ、第1のネットワークインターフェース装置、第2のネットワークインターフェース装置、およびメモリ装置は、同じSOC(例えば、1つの集積回路チップ)の一部として統合されてもよい。他の例として、クライアント装置1210は、以下のように配置されてもよい:プロセッサ1212が、2つ、3つ、4つ、5つ、またはそれ以上のマルチコアプロセッサを含む;ネットワークインターフェース装置1216が、Ethernetを実装する第1のネットワークインターフェース装置とWiFiおよび/またはBluetoothを実装する第2のネットワークインターフェース装置とを含む;かつメモリ装置1214が、RAMおよびフラッシュメモリまたはハードディスクを含む。
【0082】
サーバーシステム1200はまた、サーバーシステム(複数可)20のためのソフトウエア要素を実装するのに使用される様々なハードウエア構成要素を備える。いくつかの実施形態では、サーバーシステム1200(本明細書では「サーバー装置」とも称され得る)は、以下に示すものの1以上を含む:1以上のプロセッサ1202;1以上のメモリ装置1204;および1以上のネットワークインターフェース装置1206。以下に説明するように、これらの要素(例えば、プロセッサ1202、メモリ装置1204、ネットワークインターフェース装置1206)は、サーバーシステム1200のために様々な異なる機能を実行するように構成されたハードウエア装置(例えば、電子回路、または回路の組合せ)である。
【0083】
いくつかの実施形態では、プロセッサ1202のそれぞれまたは任意のものは、例えば、シングルもしくはマルチコアプロセッサ、マイクロプロセッサ(例えば、これは中央処理装置すなわちCPUとも称され得る)、デジタル信号プロセッサ(DSP)、DSPコアに関連付けられたマイクロプロセッサ、専用集積回路(ASIC)、書替え可能ゲートアレイ(FPGA)回路、またはオンチップシステム(SOC)(例えば、CPUとメモリ、ネットワークインターフェースなどの他のハードウエア構成要素とを含む集積回路)であるか、またはこれを含む。かつ/または、いくつかの実施形態では、プロセッサ1202のそれぞれまたは任意のものは、x86またはAdvanced RISC Machine(ARM)などの命令セットアーキテクチャを使用する。
【0084】
いくつかの実施形態では、メモリ装置1204のそれぞれまたは任意のものは、(ダイナミックRAM(DRAM)もしくはスタティックRAM(SRAM)などの)ランダムアクセスメモリ(RAM)、(例えば、NAND or NOR技術に基づく)フラッシュメモリ、ハードディスク、光磁気記録媒体、光媒体、キャッシュメモリ、(例えば指示を保持する)レジスタ、またはデータおよび/もしくは指示(例えば、プロセッサ1202に対してもしくはプロセッサ1202によって実行されるソフトウエア)の揮発性もしくは不揮発性記憶を実行する他の種類の装置、であるか、またはこれを含む。メモリ装置1204は、不揮発性コンピュータ読み取り可能記憶媒体の例である。
【0085】
いくつかの実施形態では、ネットワークインターフェース装置1206のそれぞれまたは任意のものは、(ベースバンドプロセッサおよび/または有線もしくは無線トランシーバなどの)1以上の回路を含み、1以上の有線通信技術(Ethernet(IEEE802.3)など)および/もしくは無線通信技術(Bluetooth、WiFi(IEEE802.11)、GSM、CDMA2000、UMTS、LTE、LTE-Advanced(LTE-A)ならびに/または他の近距離中距離、および/もしくは遠距離無線通信技術など)の、レイヤ1、レイヤ2、および/またはより高次のレイヤを実装する。トランシーバは、送信機および受信機のための回路を備えてよい。送信機および受信機は、筐体を共有してよく、筐体内のいくつかまたは全ての回路を共有して送信および受信を行ってよい。いくつかの実施形態では、トランシーバの送信機および受信機は、回路を共有しなくてもよく、かつ/または同一の筐体もしくは別個の筐体内にあってもよい。
【0086】
様々な実施形態において、サーバーシステム1200は、上述の要素(例えば、プロセッサ1202、メモリ装置1204、ネットワークインターフェース装置1206)のそれぞれまたは任意のものを1つ、2つ、3つ、4つ、またはそれ以上含む。代替的にまたは追加的に、いくつかの実施形態では、サーバーシステム1200は、プロセッサ1202を含む処理システム;メモリ装置1204を含むメモリまたは記憶システム;ネットワークインターフェース装置1206を含むネットワークインターフェースシステム、の1以上を含む。
【0087】
サーバーシステム1200は、様々な実施形態において、多数の異なる様式で配置されてよい。単なる一例として、サーバーシステム1200は、プロセッサ1202が以下のものを含むように配置されてよい:マルチ(またはシングル)コアプロセッサ;第1のネットワークインターフェース装置(これは、例えば、WiFi、Bluetooth、NFCなどを実装する);1以上のセルラー通信技術(例えば、3G、4GLTE、CDMAなど)を実装する第2のネットワークインターフェース装置;メモリまたは記憶装置(例えば、RAM、フラッシュメモリ、またはハードディスク)。プロセッサ、第1のネットワークインターフェース装置、第2のネットワークインターフェース装置、およびメモリ装置は、同じSOC(例えば、1つの集積回路チップ)の一部として統合されてもよい。他の例として、サーバーシステム1200は、以下のように配置されてもよい:プロセッサ1202が、2つ、3つ、4つ、5つ、またはそれ以上のマルチコアプロセッサを含む;ネットワークインターフェース装置1206が、Ethernetを実装する第1のネットワークインターフェース装置とWiFiおよび/またはBluetoothを実装する第2のネットワークインターフェース装置とを含む;かつメモリ装置1204が、RAMおよびフラッシュメモリまたはハードディスクを含む。
【0088】
上述したように、ソフトウエアモジュールまたはソフトウエア処理が何らかのアクションを実行する、と本文献において記載される場合は常に、当該アクションは、実際には、ソフトウエアモジュールを構成する指示にしたがって、基礎をなすハードウエア要素によって実行される。上記と同様に、様々な実施形態において、クライアント装置1210またはサーバーシステム1200(それぞれは、本段落以降、明確さのために個々に「構成要素」と称される)のそれぞれまたは任意の組合せは、
図7のクライアント装置1210またはサーバーシステム1200の一例を使用して実施される。
【0089】
そのような実施形態において、各構成要素には以下のことが適用される。(a)
図7に示すクライアント装置1210の要素(すなわち、1以上のプロセッサ1212、1以上のメモリ装置1214、1以上のネットワークインターフェース装置1216、1以上の表示インターフェース1218、および1以上のユーザ入力アダプタ1220)、およびサーバーシステム1200の要素(すなわち、1以上のプロセッサ1202、1以上のメモリ装置1204、1以上のネットワークインターフェース装置1206)、または上記したものの適切な組合せもしくはサブセットが、構成要素によっておよび/または当該構成要素に含まれる本明細書で記述するソフトウエアモジュールによって実行される、本明細書で記述するアクション、アクティビティ、またはフィーチャーのそれぞれまたは任意の組合せを、実装するように構成され、適合され、かつ/またはプログラムされる。(b)代替的にまたは追加的に、1以上のソフトウエアモジュールが構成要素内に存在すると本明細書で記述されているという点において、いくつかの実施形態では、そのようなソフトウエアモジュール(ならびに、ソフトウエアモジュールによって取り扱われるおよび/または使用されると本明細書で記述されるデータ)は、それぞれのメモリ装置内に(例えば、様々な実施形態において、RAMまたは指示レジスタなどの揮発性メモリ装置内に、および/またはフラッシュメモリもしくはハードディスクなどの不揮発性メモリ装置内に)記憶され、そして、ソフトウエアモジュールによって実行されると本明細書で記述する全てのアクションは、クライアント装置1210もしくはサーバーシステム1200内にあるおよび/またはこれに接続された他の要素と適宜協働して、それぞれのプロセッサによって実行される。(c)代替的にまたは追加的に、構成要素がデータを処理するおよび/または他の方法で取り扱うと本明細書で記述されているという点において、いくつかの実施形態では、そのようなデータは、それぞれのメモリ装置内に(例えば、いくつかの実施形態では、RAMなどの揮発性メモリ装置内に、および/またはフラッシュメモリもしくはハードディスクなどの不揮発性メモリ装置内に)記憶され、かつ/または、クライアント装置1210もしくはサーバーシステム1200内にあるおよび/もしくはこれに接続された他の要素と適宜共同して、それぞれのプロセッサによって処理される/取り扱われる。(d)代替的にまたは追加的に、いくつかの実施形態では、それぞれのメモリ装置は、指示を記憶する。これらの指示は、それぞれのプロセッサによって実行されると、構成要素によっておよび/または当該構成要素に含まれる本明細書で記述するソフトウエアモジュールによって実行される、本明細書で記述するアクションのそれぞれまたは任意の組合せを、クライアント装置1210もしくはサーバーシステム1200内にあるおよび/またはこれに接続された他の要素と適宜協働して、プロセッサに、実施させる。
【0090】
図7に示し、上述したハードウエア構成は例として提供され、本明細書で記述する主題は、様々な異なるハードウエアアーキテクチャおよび要素と協働して利用され得る。例えば、本文献の図面の多くにおいて、個々の機能/アクションブロックが示されており、様々な実施形態において、これらのブロックの機能は、(a)個々のハードウエア回路を使用し、(b)説明した機能/アクションを実行するように特に構成された専用集積回路(ASIC)を使用し、(c)説明した機能/アクションを実行するように特に構成された1以上のデジタル信号プロセッサ(DSPs)使用し、(d)
図7を参照して上述したハードウエア構成を使用し、(e)他のハードウエア配置、アーキテクチャ、および構成を介してならびに/または(a)~(e)で説明した技術の組合せを介して、実施され得る。
【0091】
本文献における様々な箇所において、ソフトウエアモジュールおよびソフトウエアモジュールによって実行されるアクションを説明した。これは、記述を容易にするためになされたものである。ソフトウエアモジュールが何らかのアクションを実行する、と本文献において記載される場合は常に、当該アクションは、実際には、ソフトウエアモジュールを構成する指示にしたがって、基礎をなすハードウエア構成要素(プロセッサおよびメモリなど)によって実行されることを、理解されたい。
[技術上の利点]
【0092】
本明細書で記述した技術は、ユーザ装置上で実行されているプログラムをユーザが変更したかどうかを判断するための既存技術に対する改良を提供するものである。特に、本技術は、リモート側装置(例えば、サーバーシステム)に記憶され得る異なる証明プログラムの自動作成を可能とし、リモート側装置は、異なるクライアント装置上で実行されているプログラムに対して「証明チェック」を実行することができる。「証明チェック」中にクライアント装置から生成された結果を比較することによって、リモート側装置は、クライアント装置が特定のプログラムを変更したかどうかを判断できる。
【0093】
このように、本明細書の技術は、リモート側装置が、異なるクライアント側装置がクライアント側装置上のプログラムを変更したかどうかをリモートで検出するための証明プログラムを自動的に生成することを可能とする。そのような手法により、有利なことに、リモート側装置は、クライアント側装置における証明論理を必要とせずに「証明チェック」を実行できる。そうすることにより、本技術は、クライアント側装置による証明論理の変更を防止し、それによって、リモート側装置がそのような変更を、広く配布したソフトウエアパッチによって修正しなければならなくなることを、防止する。したがって、本技術は、システムの全般的なセキュリティならびにヒューマン―ユーザインターフェース経験を改良する。更に、様々なソフトウエアパッチを配布する必要が低減されるため、システムは、システム内の構成要素間の通信量を低減し、したがって、システムの通信帯域幅全体を改良する。
[選択した定義]
【0094】
本文献において、ある項目が、「いくつかの実施形態」、「様々な実施形態」、「特定の実施形態」、「特定の例としての実施形態」、「いくつかの例としての実施形態」、「代表例としての実施形態」に存在すると記載される場合は常に、または他の類似の表現が使用される場合は常に、当該項目は少なくとも1つの実施形態に存在するが必ずしも全ての実施形態に存在するとは限らないことを、理解されたい。上記と同様に、本文献において、あるアクションが実行され「て(も)よい」、「できる」、「得る」という記載、フィーチャー、要素、もしくは構成要素が、ある文脈に含まれ「て(も)よい」、「できる」、「得る」もしくはある文脈に適用可能であるという記載、ある項目がある属性を有し「て(も)よい」、有することが「できる」、有し「得る」という記載、がある場合は常に、または、「て(も)よい」、「できる」、「得る」という用語を伴う類似の句が使用される場合は常に、当該アクション、フィーチャー、要素、構成要素、属性などが少なくとも1つの実施形態に存在するが必ずしも全ての実施形態に存在するわけではないことを、理解されたい。本文献で使用する用語および句、ならびにその変形は、別段の定めがない限り、限定的表現ではなくオープン表現であると考えられるべきである。上記の例として:「および/または」は、関連するリストアップされた項目の1以上のあらゆる組合せを含む(例えば、aおよび/またはbは、a、b、またはaおよびbを意味する);単数表現(「a」「an」および「the」)は、「少なくとも1つ」、「1以上の」などを意味すると読まれるべきである;「例」という用語は、対象となる主体の例を提供するために使用されるのであって、その網羅的または限定的なリストではない;「備える」および「含む」(ならびに他の活用形および他の変形)という用語は、関連するリストアップされた項目の存在を指すものであるが、1以上の他の項目の存在または追加を排除するものではない;そして、項目が「オプション」として説明される場合、そのような記載は、他の項目もまたオプションではないことを示すものとして理解されるべきではない。
【0095】
本明細書では、「非一時的なコンピュータ読み取り可能な記録媒体」という用語は、レジスタ、キャッシュメモリ、ROM、(D-RAM、S-RAM、もしくは他のRAMなどの)半導体メモリ装置、フラッシュメモリなどの磁気媒体、ハードディスク、光磁気記録媒体、CD-ROM、DVD、もしくはBlu-Ray Discなどの光媒体、または非一時的な電子データ記憶のための他の種類の装置を含む。「非一時的なコンピュータ読み取り可能な記録媒体」という用語は、一時的な伝播電磁信号を含まない。
[説明した主題の更なる適用]
【0096】
限定することなく
図1~7を参照した処理ステップ、アルゴリズムなどは、特定の順序で説明またはクレームしてよいが、そのような処理は、異なる順序で作用するように構成されてもよい。換言すれば、本文献において明示的に説明またはクレームするステップのシーケンスまたは順序は、当該ステップがその順序で実行されなければならないことを必ずしも示すものではない。むしろ、本明細書で説明する処理のステップは、いかなる可能な順序で実行されてもよい。更に、いくつかのステップは、(例えば、1つのステップが他のステップの後に説明されるため)非同時的に発生すると記述または示唆されているにもかかわらず、同時に(または並行して)実行されてもよい。更に、ある図面に示した処理の図は、図示された処理がそれに対する他の変形および変更を除外することを示唆するものではなく、図示された処理またはそのステップのうちのいずれかが必要であることを示唆するものでもなく、図示された処理が好ましいことを示唆するものでもない。
【0097】
様々な実施形態を示し詳細に説明してきたが、特許請求の範囲は、いかなる特定の実施形態または例にも限定されない。上記記載のいかなる部分も、特定の要素、ステップ、範囲、または機能が必須であることを示唆すると読まれるべきではない。当業者に既知である上述した実施形態の要素に対する全ての構造的および機能的等価物は、参照により本明細書に明示的に組み込まれ、包含されることが意図される。更に、装置または方法が、本発明によって解決されるべきあらゆる問題に向けられる必要はない。なぜならば、それは、本発明に包括されるからである。本文献におけるいかなる実施形態、特徴、要素、構成要素、またはステップも、公共専用となることを意図していない。
【外国語明細書】