(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-04-13
(54)【発明の名称】実行可能コードでの改ざんを検出するための方法及びシステム
(51)【国際特許分類】
G06F 21/52 20130101AFI20230406BHJP
【FI】
G06F21/52
【審査請求】未請求
【予備審査請求】有
(21)【出願番号】P 2022533052
(86)(22)【出願日】2020-12-11
(85)【翻訳文提出日】2022-06-02
(86)【国際出願番号】 FI2020050833
(87)【国際公開番号】W WO2021140268
(87)【国際公開日】2021-07-15
(32)【優先日】2020-01-07
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】513136528
【氏名又は名称】スーパーセル オーワイ
【氏名又は名称原語表記】Supercell Oy
【住所又は居所原語表記】Jatkasaarenlaituri 1 FI-00180 HELSINKI Finland
(74)【代理人】
【識別番号】100127188
【氏名又は名称】川守田 光紀
(72)【発明者】
【氏名】インモネン アキ
(57)【要約】
1つ又は複数のコードブロック202A、202B、202C~202Nを備える実行可能コード112での改ざんを検出するための方法が開示される。前記方法は、前記実行可能コードに対応付けられるコールスタックデータ構造200での前記実行可能コードの実行を監視することと、アクセスされると、前記1つ又は複数のアドレス空間についての情報を受信することと、1つ又は複数のアクセスされたアドレス空間についての前記受信された情報を、前記実行可能コードの前記コールスタックデータ構造で定義される1つ又は複数の許可されたアドレス空間についての情報と比較することと、前記比較に基づいて、前記1つ又は複数のアクセスされたアドレス空間が前記1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立てることと、前記立てられたフラグに基づいて動作を実行することと、を含む。また、前記実行可能コードの実行は、1つ又は複数のアドレス空間204A、204B、204C~204Nにアクセスすることを含む。
【選択図】
図3
【特許請求の範囲】
【請求項1】
1つ又は複数のコードブロック(202A、202B、202C、202N)を備える実行可能コード(112)での改ざんを検出するための方法であって、
・ 前記実行可能コードに対応付けられるコールスタックデータ構造(200)での前記実行可能コードの実行を監視することであって、前記実行は、1つ又は複数のアドレス空間(204A、204B、204C、204N)にアクセスすることを含む、監視することと、
・ アクセスされると、前記1つ又は複数のアドレス空間についての情報を受信することと、
・ 1つ又は複数のアクセスされたアドレス空間についての前記受信された情報を、前記実行可能コードの前記コールスタックデータ構造で定義される1つ又は複数の許可されたアドレス空間についての情報と比較することと、
・ 前記比較に基づいて、前記1つ又は複数のアクセスされたアドレス空間が前記1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立てることと、
・ 前記立てられたフラグに基づいて動作を実行することと、
を含む方法。
【請求項2】
前記実行可能コードの前記1つ又は複数のコードブロックの各々の実行を監視することを更に含む、請求項1に記載の方法。
【請求項3】
前記実行可能コードの1つ又は複数の所定のコードブロックの実行を監視することを更に含む、請求項1又は2に記載の方法。
【請求項4】
前記実行可能コードの最初の1~3つのコードブロックの実行を監視することを更に含む、請求項1から3のいずれかに記載の方法。
【請求項5】
前記フラグを立てたときに前記実行可能コードの実行を終了させることを更に含む、請求項1から4のいずれかに記載の方法。
【請求項6】
前記フラグを立てたときに、
・ 前記実行可能コードの実行のためにアクセスされている前記アドレス空間を修正する1つ又は複数のプログラム、
・ 前記実行可能コードを採用するユーザデバイス(102)のインターネットプロトコル(Internet Protocol:IP)アドレスに関する情報、及び
・ 前記ユーザデバイスに対応付けられるユーザプロファイルについての情報
のうちの1つ以上に関する情報をサーバ機構(108)に送信することを更に含む、請求項1から5のいずれかに記載の方法。
【請求項7】
前記フラグをグローバル変数として前記実行可能コードに追加することを更に含む、請求項1から6のいずれかに記載の方法。
【請求項8】
実行可能コードでの改ざんを検出するためのシステム(100A、100B)であって、
1つ又は複数のコードブロックを備える前記実行可能コード、及び前記実行可能コードに対応付けられるコールスタックデータ構造、ならびに改ざん検出コード(114)を保存するように構成されたメモリ(104)と、
プロセッサと、
を備え、前記プロセッサは、前記改ざん検出コードを実行して、
・ 1つ又は複数のアドレス空間にアクセスすることを含む、前記実行可能コードの実行を監視し、
・ アクセスされると、前記1つ又は複数のアドレス空間についての情報を受信し、
・ 1つ又は複数のアクセスされたアドレス空間についての前記受信された情報を、前記実行可能コードの前記コールスタックデータ構造で定義される1つ又は複数の許可されたアドレス空間についての情報と比較し、
・ 前記比較に基づいて、前記1つ又は複数のアクセスされたアドレス空間が前記1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立て、
・ 前記立てられたフラグに基づいて動作を実行する
ように構成される、システム。
【請求項9】
前記プロセッサは、前記改ざん検出コードを実行して、前記実行可能コードの前記1つ又は複数のコードブロックの各々の実行を監視するように構成されている、請求項8に記載のシステム。
【請求項10】
前記プロセッサは、前記改ざん検出コードを実行して、前記実行可能コードの1つ又は複数の所定のコードブロックの実行を監視するように構成されている、請求項8又は9に記載のシステム。
【請求項11】
前記プロセッサは、前記改ざん検出コードを実行して、前記実行可能コードの最初の1~3つのコードブロックの実行を監視するように構成されている、請求項8から10のいずれかに記載のシステム。
【請求項12】
前記プロセッサは、前記改ざん検出コードを実行して、前記フラグを立てたときに前記実行可能コードの実行を終了させるように構成されている、請求項8から11のいずれかに記載のシステム。
【請求項13】
前記プロセッサは、前記フラグを立てたときに、
・ 前記実行可能コードの実行のためにアクセスされている前記アドレス空間を修正する1つ又は複数のプログラム、
・ 前記実行可能コードを採用するユーザデバイスのインターネットプロトコル(Internet Protocol:IP)アドレスに関する情報、
・ 前記ユーザデバイスに対応付けられるユーザプロファイルについての情報、
のうちの1つ以上に関する情報をサーバ機構に送信するように構成されている、請求項8から12のいずれかに記載のシステム。
【請求項14】
前記実行可能コードは、少なくとも1つの読み取り専用セグメントを備え、前記少なくとも1つの読み取り専用セグメントは、その前記1つ又は複数の許可されたアドレス空間に関する情報を含み、
前記プロセッサは、前記改ざん検出コードを実行して、前記少なくとも1つの読み取り専用セグメントから、前記1つ又は複数の許可されたアドレス空間に関する前記情報をロードするように構成されている、請求項8から13のいずれかに記載のシステム。
【請求項15】
前記改ざん検出コードは、前記実行可能コードにインラインで追加される、請求項8から14のいずれかに記載のシステム。
【請求項16】
前記改ざん検出コードは、前記実行可能コードの実行のために呼び出される関数である、請求項8から15のいずれかに記載のシステム。
【請求項17】
前記改ざん検出コードは、スタックポインタ関数である、請求項8から16のいずれかに記載のシステム。
【請求項18】
前記プロセッサは、前記改ざん検出コードの改ざんを防止するためにチェックサム関数を実装するように構成されている、請求項8から17のいずれかに記載のシステム。
【請求項19】
前記フラグは、前記実行可能コードに追加されるグローバル変数である、請求項8から18のいずれかに記載のシステム。
【請求項20】
前記実行可能コードは、ゲームアプリケーションに対応付けられている、請求項8から19のいずれかに記載のシステム。
【請求項21】
コンピュータで実行されると、前記コンピュータに、請求項1から7のいずれかに記載の方法を実行させるように準備された、コンピュータ可読改ざん検出コード手段を備える、コンピュータプログラム製品。
【請求項22】
非一時的記憶媒体上に保存される、請求項21に記載のコンピュータプログラム製品。
【請求項23】
実行可能コードでの改ざんを検出するためのシステムであって、
・ 1つ又は複数のコードブロックを備える前記実行可能コード、及び前記実行可能コードに対応付けられるコールスタックデータ構造、ならびに請求項21又は22に記載のコンピュータプログラム製品を保存するように構成されたメモリと、
・ 前記コンピュータプログラム製品を実行するように構成されたプロセッサと、
を備えるシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概して、実行可能コードの不正な改変を防止することに関し、より具体的には、実行可能コードでの改ざんを検出するための方法に関する。本開示はまた、実行可能コードでの改ざんを検出するためのシステムに関する。更に、本開示は、前記方法を実行するためのコンピュータプログラム製品に関する。
【背景】
【0002】
技術の発展に伴い、ゲーム、eショッピング、eラーニングなどの様々なアプリケーションについて、いくつかのソフトウェアプログラムが開発されている。しかしながら、これらのソフトウェアプログラムは多くの場合、結果としてソフトウェアプログラムが変更される不正アクセスを受けやすい。一例では、多人数参加型のビデオゲームは、不正ユーザが不正アクセスでソフトウェアプログラムを操作することによって他のユーザよりも優位に立とうとするように、不正ユーザによって攻撃を受けやすい。
【0003】
更に、不正ユーザは、ソフトウェアプログラムの内部にフック機能などの悪質な機能を導入する。結果として、ソフトウェアプログラムの実行のフローがリダイレクトされ、それによって、ソフトウェアプログラムは不正ユーザの命令に従う。悪質な機能は、不正ユーザによって改ざんされたソフトウェアプログラムの機能である。一例では、悪質な機能は、ソフトウェアプログラムに、不正ユーザによって提供されるライブラリにアクセスさせる。別の例では、悪質な機能により、ビデオゲームで不正ユーザの弾薬の数を不正ユーザが操作することが可能になる。
【0004】
悪質な機能は、不正ユーザに不当な利益を与える。更に、悪質な機能により、ソフトウェアプログラムはデータの盗難に遭いやすくなり、その結果、悪質な機能により、(ソフトウェアプログラムにアクセスする他のユーザに関するデータなどの)機密データに不正ユーザがアクセスして抽出することが可能になる。更に、不正ユーザは、悪質な機能のチートコードを他のユーザに販売する。不正ユーザはまた、悪質な機能を使用することによって身代金などの金銭的な利益を得ようとする。更に、他のユーザによってアクセスされるソフトウェアプログラムに悪質な機能を導入することによって、不正ユーザは、ソフトウェアプログラムにアクセスするために他のユーザによって採用されるプロセッサにかかる計算負荷を増加させる。結果として、プロセッサの処理速度が低下し、ソフトウェアプログラムの機能が遅くなる。更に、悪質な機能により、他のユーザによって使用されるソフトウェアプログラムの機能を不正ユーザが遠隔で制御することも可能になる。
【0005】
従来、不正アクセスを克服するために、パターンマッチング技術が使用されている。当該パターンマッチング技術は、悪質な機能に対応付けられる特定のパターン又はシーケンスに関する既知の情報を保存する。パターンマッチング技術は、既知の情報に基づいてパターン又はシーケンスを識別することによって、ソフトウェアプログラムでの悪質な機能を識別する。しかしながら、悪質な機能が、以前に知られていなかったパターンを含み得るか、又は既知のパターンのわずかな差異を含み得、これによって悪質な機能が検出できなくなるため、当該技術は効果的でない。
【0006】
したがって、前述の説明に照らして、ソフトウェアプログラムでの悪質な機能の検出に伴う前述の欠点を克服する必要がある。
【摘要】
【0007】
本開示は、1つ又は複数のコードブロックを備える実行可能コードでの改ざんを検出するための方法を提供しようとするものである。本開示はまた、実行可能コードでの改ざんを検出するためのシステムを提供しようとするものである。本開示は更に、前記方法を実行するためのコンピュータプログラム製品を提供しようとするものである。本開示は、不正ユーザが実行可能コードを改ざんすることによって他のユーザよりも優位に立とうとするという既存の問題に対する解決策を提供しようとするものである。本開示の目的は、従来技術における問題を少なくとも部分的に克服し、かつ以前には知られてもいない実行可能コードでの改ざんの検出を提供して、実行可能コードの任意のユーザが不当な利益を求めることを防止する解決策を提供することである。
【0008】
一態様では、本開示の一実施形態は、1つ又は複数のコードブロックを備える実行可能コードでの改ざんを検出するための方法を提供する。この方法は、
・ 前記実行可能コードに対応付けられるコールスタックデータ構造での前記実行可能コードの実行を監視することであって、前記実行は、1つ又は複数のアドレス空間にアクセスすることを含む、監視することと、
・ アクセスされると、前記1つ又は複数のアドレス空間についての情報を受信することと、
・ 1つ又は複数のアクセスされたアドレス空間についての前記受信された情報を、前記実行可能コードの前記コールスタックデータ構造で定義される1つ又は複数の許可されたアドレス空間についての情報と比較することと、
・ 前記比較に基づいて、前記1つ又は複数のアクセスされたアドレス空間が前記1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立てることと、
・ 前記立てられたフラグに基づいて動作を実行することと、
を含む。
【0009】
別の態様では、本開示の一実施形態は、実行可能コードでの改ざんを検出するためのシステムを提供する。このシステムは、
・ 1つ又は複数のコードブロックを備える前記実行可能コード、及び前記実行可能コードに対応付けられるコールスタックデータ構造、ならびに改ざん検出コードを保存するように構成されたメモリと、
プロセッサと、
を備え、前記プロセッサは、前記改ざん検出コードを実行して、
・ 1つ又は複数のアドレス空間にアクセスすることを含む、前記実行可能コードの実行を監視し、
・ アクセスされると、前記1つ又は複数のアドレス空間についての情報を受信し、
・ 1つ又は複数のアクセスされたアドレス空間についての前記受信された情報を、前記実行可能コードの前記コールスタックデータ構造で定義される1つ又は複数の許可されたアドレス空間についての情報と比較し、
・ 前記比較に基づいて、前記1つ又は複数のアクセスされたアドレス空間が前記1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立て、
・ 前記立てられたフラグに基づいて動作を実行する
ように構成される。
【0010】
更に別の態様では、本開示の一実施形態は、コンピュータで実行されると、前記コンピュータに、1つ又は複数のコードブロックを備える実行可能コードでの改ざんを検出するための前記方法を実行させるように準備された、コンピュータ可読改ざん検出コード手段を備える、コンピュータプログラム製品を提供する。
【0011】
別の態様では、本開示の一実施形態は、実行可能コードでの改ざんを検出するためのシステムを提供する。このシステムは、
・ 1つ又は複数のコードブロックを備える前記実行可能コード、及び前記実行可能コードに対応付けられるコールスタックデータ構造、ならびにコンピュータプログラム製品を保存するように構成されたメモリと、
・ 前記コンピュータプログラム製品を実行するように構成されたプロセッサと、
を備える。
【0012】
本開示の実施形態は、従来技術での前述の問題を実質的に除去するか、又は少なくとも部分的に対処し、実行可能コードでの改ざんの検出を可能にし、改ざんを実行する不正ユーザに対して措置を講じ、実行可能コードの任意のユーザが不当な利益を求めることを防止する。
【0013】
本開示の追加の態様、利益、特徴、及び目的は、添付の特許請求の範囲と共に解釈される図面及び例示的な実施形態の詳細説明から明確にされるであろう。
【0014】
本開示の特徴は、添付の特許請求の範囲によって定義される本開示の範囲から逸脱することなく、様々な組合せで組み合わせ可能であることが理解されるであろう。
【図面の簡単な説明】
【0015】
上記摘要及び以下の例示的な実施形態の詳細説明は、添付の図面と共に読むとよりよく理解される。本開示を示す目的で、本開示の例示的な構成が図面に示されている。しかしながら、本開示は、本明細書で開示される特定の方法及び手段に限定されない。更に、当業者は、図面が縮尺どおりでないことを理解するであろう。可能な限り、同様の要素は、同一の番号で示されている。
【0016】
ここで、本開示の実施形態は、以下の図面を参照して、例示としてのみ記載される。
【
図1A】本開示の一実施形態に係る、実行可能コードでの改ざんを検出するためのシステムのブロック図である。
【
図1B】本開示の一実施形態に係る、
図1Aのシステムのネットワーク環境を示す。
【
図1C】本開示の別の実施形態に係る、
図1Aのシステムのネットワーク環境を示す。
【
図2】本開示の一実施形態に係る、
図1Aのシステムのメモリの詳細を示すブロック図である。
【
図3】本開示の一実施形態に係る、実行可能コードでの改ざんを検出するための方法のフローチャートである。
【0017】
添付図面では、下線付き番号は、その番号が位置している部材、又はその番号が隣接している部材を表すために用いられる。下線無しの番号は、その番号を部材につなぐ線によって識別される部材に関する。番号が下線無しであり、対応付けられた矢印を伴うとき、その番号は、矢印が指している部材全体を識別するために使用される。
【実施形態の詳細説明】
【0018】
以下の詳細説明は、本開示の実施形態及び実施形態が実装され得る方法を示す。本開示を実行するいくつかのモードが開示されているが、当業者は、本開示を実行又は実施するための他の実施形態もまた可能であることを認識するであろう。
【0019】
一態様では、本開示の一実施形態は、1つ又は複数のコードブロックを備える実行可能コードでの改ざんを検出するための方法を提供する。この方法は、
・ 前記実行可能コードに対応付けられるコールスタックデータ構造での前記実行可能コードの実行を監視することであって、前記実行は、1つ又は複数のアドレス空間にアクセスすることを含む、監視することと、
・ アクセスされると、前記1つ又は複数のアドレス空間についての情報を受信することと、
・ 1つ又は複数のアクセスされたアドレス空間についての前記受信された情報を、前記実行可能コードの前記コールスタックデータ構造で定義される1つ又は複数の許可されたアドレス空間についての情報と比較することと、
・ 前記比較に基づいて、前記1つ又は複数のアクセスされたアドレス空間が前記1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立てることと、
・ 前記立てられたフラグに基づいて動作を実行することと、
を含む。
【0020】
別の態様では、本開示の一実施形態は、実行可能コードでの改ざんを検出するためのシステムを提供する。このシステムは、
1つ又は複数のコードブロックを備える前記実行可能コード、及び前記実行可能コードに対応付けられるコールスタックデータ構造、ならびに改ざん検出コードを保存するように構成されたメモリと、
プロセッサと、
を備え、前記プロセッサは、前記改ざん検出コードを実行して、
・ 1つ又は複数のアドレス空間にアクセスすることを含む、前記実行可能コードの実行を監視し、
・ アクセスされると、前記1つ又は複数のアドレス空間についての情報を受信し、
・ 1つ又は複数のアクセスされたアドレス空間についての前記受信された情報を、前記実行可能コードの前記コールスタックデータ構造で定義される1つ又は複数の許可されたアドレス空間についての情報と比較し、
・ 前記比較に基づいて、前記1つ又は複数のアクセスされたアドレス空間が前記1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立て、
・ 前記立てられたフラグに基づいて動作を実行する
ように構成される。
【0021】
更に別の態様では、本開示の一実施形態は、コンピュータで実行されると、前記コンピュータに、1つ又は複数のコードブロックを備える実行可能コードでの改ざんを検出するための前記方法を実行させるように準備された、コンピュータ可読改ざん検出コード手段を備える、コンピュータプログラム製品を提供する。
【0022】
別の態様では、本開示の一実施形態は、実行可能コードでの改ざんを検出するためのシステムを提供する。このシステムは、
・ 1つ又は複数のコードブロックを備える前記実行可能コード、及び前記実行可能コードに対応付けられるコールスタックデータ構造、ならびにコンピュータプログラム製品を保存するように構成されたメモリと、
・ 前記コンピュータプログラム製品を実行するように構成されたプロセッサと、
を備える。
【0023】
本開示は、実行可能コードでの改ざんの検出を可能にし、改ざんを実行する不正ユーザに対して措置を講じ、かつ任意のユーザが不当な利益を求めることを防止する方法及びシステムを提供する。本明細書で論じられる方法は、実行可能コードでの改ざんを検出するための以前に知られているパターンに依存せず、したがって、改ざん検出のために使用される従来の技術と比較して、改ざんの検出がより正確である。前記方法は、実行可能コードでの改ざんを検出したときに、この実行可能コードを有するクライアントデバイスで実行可能コードの実行を終了させるように構成されている。結果として、不正ユーザは、他のユーザに対するいかなる不当な利益も得ることはない。有利なことに、前記方法は、1つ又は複数の所定のコードブロックについてのみ、実行可能コードでの改ざんを確認するように構成されている。結果として、実行可能コードの改ざん検出に対応付けられる計算スペース及び速度が低減され、ユーザ体験が向上する。前記方法は、実行可能コードでの改ざんの検出を向上させる、実行可能コードで読み取り専用セグメントを採用することを含む。本開示で採用される改ざん検出コードはまた、改ざんを防止する機能があり、不正ユーザは、改ざん検出コードを改ざんすることはできない。一例では、戦闘戦略ゲームの実行可能コードでの改ざん検出により、任意のユーザが不当な利益を得ることを防止することが可能になる。
【0024】
本開示は、実行可能コードでの改ざんを検出するための方法及びシステムを提供する。本開示の全体を通じて、本明細書で「実行可能コード」という用語は、実行可能コードが意図する1つ又は複数のタスクを実行するようにコンピュータ又は他のデジタルシステムを構成するように、このコンピュータ又は他のデジタルシステムによって実行可能な命令/コマンドの任意の集合又はセットを指す。言い換えると、実行可能コードは、スマートフォン、タブレットなどのクライアントデバイス(すなわち、コンピュータ)のためのプログラム又はアプリケーションである。更に、実行可能コードは、RAM、ハードディスク、光ディスクなどの記憶媒体(詳細は後述)に保存された前述の命令を包含することを意図しており、また、ROMなどに保存されたソフトウェアである、いわゆる「ファームウェア」を包含することを意図している。実施例によっては、実行可能コードは、システムレベルのコードを呼び出し得るか、又は特定の機能を実行するために、サーバもしくは他の場所に存在する他のソフトウェアにコールする。更に、実行可能コードは、予め構成され、オペレーティングシステムと予め統合され、ソフトウェアアプライアンスを構築し得る。一例では、実行可能コードは、スマートフォン又はタブレット上で実行され、かつゲームサーバに接続された多人数参加型のゲームである。別の例では、実行可能コードは、ユーザが、ショッピング及び金融タスクを実行すること、他のユーザとの通信を確立すること、電子書籍などの電子ソースから教育を受けることなどを可能にするように構成されている。
【0025】
実行可能コードは、1つ又は複数のコードブロックを備える。本明細書で使用される「コードブロック」という用語は、実行可能コードの1つ又は複数の意図されたタスクのうちの特定のタスクを実行するように構成された実行可能コードのモジュールを指す。一般に、コードブロックは、入力を受信して当該入力を処理し、かつ当該入力の処理に基づいて出力として結果を返すように構成されている。1つ又は複数のコードブロックの各々は、アドレス空間に対応付けられる。一例では、戦闘戦略ゲームにおいて、第1のコードブロックが、ゲームのアバターを前方向に移動させるタスクを実行するように構成され、第2のコードブロックが、アバターを後方向に移動させるタスクを実行するように構成され、第3のコードブロックが、アバターを左方向に移動させるタスクを実行するように構成され、第4のコードブロックが、アバターを右方向に移動させるタスクを実行するように構成されている。
【0026】
本開示で使用される「改ざん」という用語は、結果として実行可能コードの改変となる、不正ユーザによる不正アクセスを指す。不正アクセスにより、実行可能コードの意図されたタスクを実行可能コードが実行しないように、実行可能コードに新しい不正なコードを追加することが可能になる。不正な改変は、不正ユーザが実行可能コードを使用して他のユーザに対して利益を得るように実行可能コードで実行される。不正ユーザは、実行可能コードの実行を改ざんするようにフックする関数を実行する。関数フックは、実行可能コードの実行フローを、不正ユーザによって提供されるライブラリにリダイレクトするために、通常、コードブロックの先頭で、実行可能コードの小さいコード片を修正することによって実装される。本開示は、実行可能コードの改ざんを検出して、改ざんを実行する不正ユーザを識別し、不正ユーザが当該改ざんを今後実行することを防止し、不正ユーザによって実行される改ざんの影響から他のユーザを保護し、それによって、実行可能コードにアクセスするすべてのユーザに安全で公正な環境を提供する。一例では、戦闘戦略ゲームにおいて、不正ユーザは、自身のアバターの弾薬の量を増加させるために実行可能コードの改ざんを実行し得る。このような場合、不正ユーザは、他のユーザに対して利益を得る。
【0027】
システムは、メモリと、プロセッサと、を備える。本明細書で使用される「メモリ」という用語は、データ又はソフトウェアが任意の期間保存される、電気回路、磁気ディスク、仮想メモリ、又は光ディスクなどの揮発性又は永続性媒体を指す。実施例によっては、メモリは、物理記憶媒体などの不揮発性大容量記憶装置である。実施例によっては、メモリは、前述のデータ又はソフトウェアを受信するためにサーバに接続されている。本明細書で使用される「プロセッサ」という用語は、前記方法を駆動する命令に応答し処理するように動作可能な計算要素を指す。実施例によっては、プロセッサは、マイクロプロセッサ、マイクロコントローラ、複合命令セットコンピューティング(Complex Instruction Set Computing:CISC)マイクロプロセッサ、縮小命令セット(Reduced Instruction Set:RISC)マイクロプロセッサ、超長命令語(Very Long Instruction Word:VLIW)マイクロプロセッサ、又は任意の他のタイプの処理回路を含むが、これらに限定されない。更に、「プロセッサ」という用語は、1つ又は複数の個々のプロセッサ、処理デバイス、及び他の処理デバイスによって共有され得る処理デバイスに対応付けられる様々な要素を指し得る。更に、1つ又は複数の個々のプロセッサ、処理デバイス、及び要素は、前記方法を駆動する命令に応答し処理するために様々なアーキテクチャで配置されている。メモリ及びプロセッサは、クライアントデバイスの一部である。
【0028】
メモリは、1つ又は複数のコードブロックを備える実行可能コード、及び当該実行可能コードに対応付けられるコールスタックデータ構造、ならびに改ざん検出コードを保存するように構成されている。実施例によっては、メモリは、実行可能コード、コールスタックデータ構造、及び改ざん検出コードをサーバから受信するように構成されている。本明細書で使用される「コールスタックデータ構造」という用語は、1つ又は複数のコードブロックの実行のシーケンスに関する情報を保存するように構成されたデータ構造を指す。実施例によっては、コールスタックデータ構造により、出力が後のコードブロックについての入力として使用されるコードブロックを決定することが可能になる。更に、コールスタックデータ構造は、コードブロックの各々に対応付けられるアドレス空間を更に備える。一例では、コールスタックデータ構造は、第1のコードブロックによって生成される出力が第3のコードブロックへの入力として提供され、更に第3のコードブロックによって生成される出力が第2のコードブロックへの入力として提供されるように、第1のコードブロック、第2のコードブロック、及び第3のコードブロックのシーケンスを備える。本明細書で使用される「改ざん検出コード」という用語は、1つ又は複数のコードブロックに対応付けられるアドレス空間の差異を識別することによって、実行可能コードで不正ユーザによって実行される改ざんを検出するように構成された命令の集合又はセットを指す。改ざん検出コードは、コールスタックデータ構造の実行時間確認を実行するように構成されている。改ざん検出コードは、1つ又は複数のコードブロックに対応付けられるすべてのアドレス空間を検証する。改ざんされた実行可能コードは実行可能コードの外側に向けられる1つ又は複数のアドレス空間を有するため、アドレス空間のすべてが実行可能コード内にある場合、実行可能コードに改ざんはない。
【0029】
改ざん検出コードは、実行可能コードの実行を監視し、1つ又は複数のコードブロックのアドレス空間についての情報を受信し、アクセスされたアドレス空間についての受信された情報を、許可されたアドレス空間についての情報と比較し、比較に基づいて、アクセスされたアドレス空間が許可されたアドレス空間と異なることを検出したときにフラグを立て、かつ立てられたフラグに基づいて動作を実行するように構成されている。
【0030】
一実施形態では、前記改ざん検出コードは、前記実行可能コードにインラインで追加される。実施例によっては、改ざん検出コードは、実行可能コードの1つ又は複数のコードブロックの前に、実行可能コードにインラインで追加される。一実施形態では、前記改ざん検出コードは、前記実行可能コードの実行のために呼び出される関数である。言い換えると、改ざん検出コードは、実行可能コードとは別個のものである。改ざん検出コードに対応付けられる関数は、1つ又は複数のコードブロックに対応付けられるアドレス空間を検証するために呼び出される。実施例によっては、改ざん検出コードは、実行可能コードでの1つ又は複数の位置で実装され得る。一実施形態では、前記改ざん検出コードは、スタックポインタ関数である。実施例によっては、スタックポインタ関数は、コールスタックデータ構造の先頭を表す。実施例によっては、データがコールスタックデータ構造にプッシュされると、当該データは、スタックポインタ関数が指すメモリにコピーされ、スタックポインタ関数がインクリメントされる。しかしながら、データがコールスタックデータ構造からポップされると、スタックポインタ関数はデクリメントされるが、データは、コールスタックデータ構造にとどまり、何らかの他のデータがコールスタックデータ構造にプッシュされるまでデータが読み取られ得る。
【0031】
前記方法は、実行可能コードに対応付けられるコールスタックデータ構造での実行可能コードの実行を監視することを含む。ここで、実行は、1つ又は複数のアドレス空間にアクセスすることを含む。プロセッサは、改ざん検出コードを実行して、実行可能コードの実行を監視するように構成されている。実行可能コードの実行は、実行可能コードの1つ又は複数の意図されたタスクの各々が達成されるようなシーケンス又は命令で1つ又は複数のコードブロックを実行することを含む。コールスタックデータ構造は、1つ又は複数のコードブロックの実行のシーケンスを提供する。実施例によっては、実行可能コードの実行を監視するための方法は、予め定義された期間ごとに反復して実行される。一例では、不正ユーザは、改ざん検出コードが1つ又は複数のコードブロックの実行を監視した後、1つ又は複数のコードブロックを改ざんし得る。このような場合、実行可能コードの実行を反復して監視することにより、実行可能コードの改ざんを検出することが可能になる。実施例によっては、実行可能コードの実行を監視するための方法は、実行可能コードが対応付けられるソフトウェアアプリケーションをユーザが再開する度に実行される。一例では、ソフトウェアを初めて実行している間に改ざん検出コードが1つ又は複数のコードブロックの実行を監視した場合、ソフトウェアを再開した後に、不正ユーザは、1つ又は複数のコードブロックを改ざんし得る。このような場合、前記方法は、ソフトウェアの再開の後でも、実行可能コードでの改ざんを検出することができる。一例では、実行可能コードの実行は、他のプレーヤーよりも優位に立つようにあるプレーヤーによって行われるハッキングを防止するために、多人数参加型のゲームで監視される。別の例では、実行可能コードの実行は、プレーヤーと競合する他のプレーヤーよりも優位に立つようにあるプレーヤーによって行われるハッキングを防止するために、戦闘戦略ゲームで監視される。
【0032】
一実施形態では、前記方法は、前記実行可能コードの前記1つ又は複数のコードブロックの各々の実行を監視することを更に含む。実施例によっては、1つ又は複数のコードブロックの各々は、コールスタックデータ構造の場合と同様に、実行のシーケンスに基づいて1つ又は複数のコードブロックが実行されるとき監視される。一例では、戦闘戦略ゲームの実行可能コードで、1つ又は複数のコードブロックの実行のシーケンスは、前に移動するようにゲーム内のアバターに命令を提供するための第1のコードブロックと、弾薬庫で停止するようにアバターに命令を提供するための第2のコードブロックと、弾薬庫から弾薬をピックアップするようにアバターに命令を提供するための第3のコードブロックと、弾薬を発射するようにアバターに命令を提供するための第4のコードブロックと、を含む。このような場合、前記方法は、第1、第2、第3、及び第4のコードブロックの各々を監視するように構成されている。一実施形態では、前記プロセッサは、前記改ざん検出コードを実行して、前記実行可能コードの前記1つ又は複数のコードブロックの各々の実行を監視するように構成されている。
【0033】
一実施形態では、前記方法は、前記実行可能コードの1つ又は複数の所定のコードブロックの実行を監視することを更に含む。実施例によっては、メモリは、リワードコードブロックである1つ又は複数の所定のコードブロックについてサーバから情報を受信するように構成されている。すなわち、改ざんされた場合に当該コードブロックは、不正ユーザに利益を提供し得る。改ざん検出コードは、当該リワードコードブロックにのみ追加される。実施例によっては、メモリは、他の不正ユーザによって改ざんされている以前の記録を有する1つ又は複数の所定のコードブロックに関する情報を保存するように構成されている。実施例によっては、メモリは、実行可能コードの受信時に、サーバから前述の情報を受信する。改ざん検出コードは、このように識別された1つ又は複数のコードブロックにのみ追加される。一例では、戦闘戦略ゲームにおいて、1つ又は複数の所定のコードブロックは、アバターで利用可能な弾薬の数についてのコードブロック、そのアバターに対応付けられる仮想通貨の量についてのコードブロック、そのアバターに対応付けられるコインの数についてのコードブロックなどを含み得る。
【0034】
一実施形態では、前記プロセッサは、前記改ざん検出コードを実行して、前記実行可能コードの1つ又は複数の所定のコードブロックの実行を監視するように構成されている。1つ又は複数の所定のコードブロックのみの実行を監視する結果、プロセッサの処理速度が向上し、改ざんの検出に伴う時間が低減され、それによって、ユーザ体験が全体的に向上する。
【0035】
一実施形態では、前記実行可能コードは、ゲームアプリケーションに対応付けられている。一例では、リワードコードブロックである実行可能コードの1つ又は複数の所定のコードブロックは、表1に列挙されたもののうちのいずれかであり得る。
【0036】
【0037】
一実施形態では、前記方法は、前記実行可能コードの最初の1~3つのコードブロックの実行を監視することを更に含む。実施例によっては、改ざん検出コードによって実行可能コードの最初の1~3つのコードブロックの実行を監視することにより、実行可能コードが改ざんされているかどうかを判定することが可能になる。一実施形態では、前記プロセッサは、前記改ざん検出コードを実行して、前記実行可能コードの最初の1~3つのコードブロックの実行を監視するように構成されている。有利なことに、すべてのコードブロックではなく、最初の1~3つのコードブロックのみの実行を監視することにより、プロセッサの処理速度を増加させ、実行可能コードでの改ざんの判定に伴う時間を低減することが可能になる。一例では、戦闘戦略ゲームにおいて、最初の1~3つのコードブロックは、アバターで利用可能な弾薬の数についてのコードブロック、そのアバターに対応付けられる仮想通貨の量についてのコードブロック、そのアバターに対応付けられるライフの数についてのコードブロックなどを含み得る。当該コードブロックは、一般に、ソフトウェアアプリケーションがユーザによって開始されるとき、実行可能コードの最初の位置にある。
【0038】
前記方法は、アクセスされると、1つ又は複数のアドレス空間についての情報を受信することを含む。言い換えると、アドレス空間は、クライアントデバイス内の実行可能コードの指標を指す。「アドレス空間」という用語は、実行可能コードの認可されたライブラリを指すアドレスを指す。認可されたライブラリは、実行可能コードの意図されたタスクのうちの1つ又は複数のタスクを実行するために、1つ又は複数のコードブロックによって使用される。一般に、1つ又は複数のコードブロックの改ざん時に、1つ又は複数のコードブロックは、認可されたライブラリではなく、不正ユーザによって提供される不正ライブラリを指すアドレス空間を有する。メモリは、1つ又は複数のコードブロックを受信しながら、1つ又は複数のアドレス空間に関する情報を受信及び保存するように構成されている。1つ又は複数のアドレス空間についての情報は、コールスタックデータ構造から受信される。実施例によっては、メモリはまた、1つ又は複数のコードブロックのアドレス空間が指すライブラリを受信するように構成されている。一般に、不正ユーザは、不正ライブラリをクライアントデバイスのメモリに挿入し、1つ又は複数のコードブロックのアドレス空間を、不正ライブラリを指すように改ざんする。一例では、戦闘戦略ゲームにおいて、不正ユーザは、アバターの弾薬の数に対応付けられるコードブロックのアドレス空間を変更する。当該例では、不正ユーザは、コードブロックのアドレス空間を、アバターの弾薬の数を増加させるライブラリに変更する。実施例によっては、メモリは、実行可能コードの受信時に、サーバから1つ又は複数のアドレス空間についての前述の情報を受信する。プロセッサは、アクセスされると、改ざん検出コードを実行して、1つ又は複数のアドレス空間についての情報を受信するように構成されている。一例では、戦闘戦略ゲームにおいて、改ざん検出コードは、コールスタックデータ構造から、1つ又は複数のコードブロックの1つ又は複数のアドレス空間についての情報を受信するように構成されている。
【0039】
実施例によっては、前記方法は、サイズが各々のコードブロックが対応付けられるライブラリの計算サイズに対応するような、1つ又は複数のコードブロックの各々に対応付けられるサイズについての情報を受信することを更に含む。実施例によっては、1つ又は複数のコードブロックの各々に対応付けられるサイズは、予め決定され保存されている。更に、プロセッサは、改ざん検出コードを実行して、1つ又は複数のコードブロックの各々に対応付けられるサイズについての情報を受信するように構成されている。一般に、1つ又は複数のコードブロックの改ざん時に、1つ又は複数のコードブロックの各々に対応付けられるサイズが変更される。一例では、戦闘戦略ゲームにおいて、アバターの通貨の量についてのコードブロックに対応付けられるサイズは、10キロバイトから12キロバイトに変更される。実施例によっては、プロセッサは、改ざん検出コードを実行して、1つ又は複数のコードブロックの各々に対応付けられるサイズについての情報を受信するように構成されている。
【0040】
前記方法は、1つ又は複数のアクセスされたアドレス空間についての受信された情報を、実行可能コードのコールスタックデータ構造で定義される1つ又は複数の許可されたアドレス空間についての情報と比較することを含む。「許可されたアドレス空間」という用語は、予め決定されたコードブロックのアドレス空間を指す。すなわち、アドレス空間は、実行可能コードのアプリケーション開発者によって知られている。クライアントデバイスのメモリ内のコードブロックの実際の実行時間場所は、実行可能コードの実行中にクライアントデバイスのオペレーティングシステムによって定義される。言い換えると、「許可されたアドレス空間」という用語は、実行可能コードの認可されたライブラリを指すアドレス空間を指す。改ざんされていない実行可能コードの1つ又は複数のコードブロックの各々は、認可されたライブラリを指すアドレス空間を有する。認可されたライブラリの各々は、メモリにアドレス空間を有し、それによって、改ざんされていない実行可能コードの1つ又は複数のコードブロックは、認可されたライブラリを指すアドレス空間を有する。一例では、1つ又は複数のアクセスされたアドレス空間及び1つ又は複数の許可されたアドレス空間の各々は、英数字の文字列として表される。当該例では、1つ又は複数のアクセスされたアドレス空間の各々の英数字の文字列は、1つ又は複数のアクセスされたアドレス空間の差異を識別するために、1つ又は複数の許可されたアドレス空間の各々の英数字の文字列と比較され得る。当該例では、1つ又は複数のアクセスされたアドレス空間の各々の英数字の文字列の各ビットは、文字列のビットの差異に基づいて1つ又は複数のアクセスされたアドレス空間の差異を識別するために、1つ又は複数の許可されたアドレス空間の各々の英数字の文字列の対応する各ビットと比較され得る。プロセッサは、改ざん検出コードを実行して、1つ又は複数のアクセスされたアドレス空間についての受信された情報を、実行可能コードのコールスタックデータ構造で定義される1つ又は複数の許可されたアドレス空間についての情報と比較するように構成されている。
【0041】
実施例によっては、前記方法は、1つ又は複数のコードブロックの各々に対応付けられるサイズを、1つ又は複数のコードブロックの許可されたサイズと比較することを含む。「許可されたサイズ」という用語は、各々の改ざんされていないコードブロックが対応付けられるライブラリの計算サイズを指し、その計算サイズは、実行可能コードのアプリケーション開発者によって知られている。実施例によっては、前記方法は、1つ又は複数のコードブロックの各々に対応付けられるサイズが、1つ又は複数のコードブロックの許可されたサイズと等しいかどうかを判定することを含む。プロセッサは、改ざん検出コードを実行して、1つ又は複数のコードブロックの各々に対応付けられるサイズを、1つ又は複数のコードブロックの許可されたサイズと比較するように構成されている。
【0042】
一実施形態では、前記実行可能コードは、少なくとも1つの読み取り専用セグメントを含み、このセグメントは、その前記1つ又は複数の許可されたアドレス空間に関する情報を含み、前記プロセッサは、前記改ざん検出コードを実行して、前記少なくとも1つの読み取り専用セグメントから、前記1つ又は複数の許可されたアドレス空間に関する前記情報をロードするように構成されている。実施例によっては、少なくとも1つの読み取り専用セグメントはまた、実行可能コードの1つ又は複数のコードブロックの許可されたサイズについての情報を含み、プロセッサは、改ざん検出コードを実行して、少なくとも1つの読み取り専用セグメントから、許可されたサイズに関する情報をロードするように構成されている。実施例によっては、少なくとも1つの読み取り専用セグメントは、実行可能コードの開発時に開発者によって実行可能コードに追加される。実施例によっては、少なくとも1つの読み取り専用セグメントは、例えば、カーネルによって一度だけ、実行可能コードからメモリ内に直接マッピングされる。実施例によっては、実行可能コードの実行時に、プロセッサは、少なくとも1つの読み取り専用セグメントをメモリ内にマッピングする。実施例によっては、少なくとも1つの読み取り専用セグメントは、不正ユーザによって改ざんされ得ない。実施例によっては、改ざん検出コードは、実行可能コードのアプリケーションプログラムが実行を開始すると、少なくとも1つの読み取り専用セグメントのサイズ及び開始アドレスを取得するように構成されており、更に当該アドレスを安全なアドレス又は許可されたアドレス空間として保存する。
【0043】
前記方法は、比較に基づいて、1つ又は複数のアクセスされたアドレス空間が1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立てることを含む。「フラグ」という用語は、フラグが生成される位置で特定の条件が決定されることを示すために生成される信号を指す。本開示では、「フラグ」は、1つ又は複数のコードブロックに対応付けられるアクセスされたアドレス空間が、1つ又は複数の許可されたアドレス空間と異なることを示すために生成される信号を指す。実施例によっては、フラグは、バイナリフラグであり得る。実施例によっては、フラグは、非バイナリフラグであり得る。実施例によっては、フラグは、真値(true value)又は偽値(false value)を有し得る。フラグが真値を有するとき、それは、所与のコードブロックが、1つ又は複数の許可されたアドレス空間と異なる、アクセスされたアドレス空間を有することを示す。フラグが偽値を有するとき、それは、所与のコードブロックが、1つ又は複数の許可されたアドレス空間のうちの1つと同じ、アクセスされたアドレス空間を有することを示す。プロセッサは、改ざん検出コードを実行して、比較に基づいて、1つ又は複数のアクセスされたアドレス空間が1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立てるように構成されている。一例では、フラグの値の識別は、前記方法によって10秒ごとに実行される。
【0044】
一実施形態では、前記方法及びシステムは、前記フラグをグローバル変数として前記実行可能コードに追加することを更に含む。実施例によっては、フラグは、実行可能コードの1つ又は複数のコードブロックの各々にグローバル変数として追加され得る。実施例によっては、1つ又は複数のコードブロックの各々のフラグは、一般に、偽値を有する。更に、所与のコードブロックのアクセスされたアドレス空間が、1つ又は複数の許可されたアドレス空間と異なるとき、所与のコードブロックのフラグの値は、真値に変更される。実施例によっては、フラグをグローバル変数として追加することにより、特定の機能を実行するためにフラグの値を指標として使用することが可能になる。一例では、所与のコードブロックのフラグの値が偽である場合、1つ又は複数の後のコードブロックのアクセスされたアドレス空間は、1つ又は複数の許可されたアドレス空間と比較されない。
【0045】
実施例によっては、改ざん検出コードは、1つ又は複数の許可されたアドレス空間と異なる1つ又は複数のアクセスされたアドレス空間を有する1つ又は複数のコードブロックの後に、短いコードセグメントなどのコンテキスト情報を追加するように構成されている。一例では、コンテキスト情報は、不正ユーザが特定のコードブロックを改ざんすることによって求め得る利益、他のユーザに対する特定のコードブロックの改ざんの影響などの情報を提供する。
【0046】
前記方法は、立てられたフラグに基づいて動作を実行することを含む。前記方法は、動作を実行することによって実行可能コードの改ざんの疑わしい動作に反応して、不正ユーザが実行可能コードの改ざんから何らかの利益を求めることを防止し、更に、実行可能コードの改ざんによる損失から他のユーザを保護するように構成されている。プロセッサは、改ざん検出コードを実行して、立てられたフラグに基づいて動作を実行するように構成されている。一実施形態では、前記方法は、前記フラグを立てたときに前記実行可能コードの実行を終了させることを更に含む。更に、実行可能コードの実行の終了時に、不正ユーザは、実行可能コードを有するアプリケーションプログラムを使用することができない。実施例によっては、実行可能コードの実行の終了は、実行可能コードを有するアプリケーションプログラムを不正ユーザが使用することを直ちに阻止するのに有用である。実施例によっては、実行可能コードの開発者は、実行可能コードの改ざん及びその後の不正ユーザの阻止について知らなくてもよい。前記プロセッサは、前記改ざん検出コードを実行して、前記フラグを立てたときに前記実行可能コードの実行を終了させるように構成されている。
【0047】
一実施形態では、前記方法は、前記フラグを立てたときに、前記実行可能コードの実行のためにアクセスされている前記アドレス空間を修正する1つ又は複数のプログラム、前記実行可能コードを採用するユーザデバイスのインターネットプロトコル(Internet Protocol:IP)アドレスに関する情報、及び前記ユーザデバイスに対応付けられるユーザプロファイルについての情報のうちの1つ以上に関する情報をサーバ機構に送信することを更に含む。「サーバ機構」という用語は、情報を保存、処理、及び/又は共有するように構成されたプログラム可能な及び/又はプログラム可能でない構成要素を含む構造及び/又はモジュールを指す。具体的には、サーバ機構は、実行可能コードをユーザデバイスに提供し、かつフラグを立てたときにユーザデバイスから前述の情報を受信するように構成されている。実施例によっては、サーバ機構は、様々な計算タスクを実行するために情報を強化することができる物理的又は仮想的な計算エンティティの任意の機構を含む。一例では、サーバ機構は、メモリ、プロセッサ、ネットワークアダプタなどの構成要素を含み得る。サーバ機構及びサーバという用語は、本開示で言い換え可能に使用されることが理解されるであろう。実施例によっては、情報は、不正ユーザによって実行される改ざんの試みについての詳細を明らかにする。実施例によっては、アドレス空間を修正する1つ又は複数のプログラムは、不正ユーザによって実行可能コードに追加され得る。実施例によっては、アドレス空間を修正する1つ又は複数のプログラムは、実行可能コードの外部にあり得る。有利なことに、アドレス空間を修正する1つ又は複数のプログラムについての情報により、当該1つ又は複数のプログラムの検出時に、実行可能コードを直ちに終了させることが可能になる。実施例によっては、情報はまた、ユーザデバイスの全地球測位システム(Global Positioning System:GPS)による場所及び国際移動体装置識別番号(International Mobile Equipment Identity:IMEI)を含み得る。ユーザデバイス及びクライアントデバイスという用語は、本開示で言い換え可能に使用されていることが理解されるであろう。実施例によっては、ユーザプロファイルについての情報は、ユーザ名、ユーザ識別番号、ユーザプロファイル画像、ユーザの国籍、ユーザの居住地住所、ユーザの年齢、ユーザの連絡先番号、ユーザの電子メールアドレスなどを含むが、これらに限定されない。実施例によっては、情報は、ユーザによる任意の以前の改ざんの試みについての詳細を含み得る。実施例によっては、ユーザプロファイルについての情報は、ゲームアプリケーションで予め保存されている。有利なことに、当該情報により、実行可能コードの改ざんを繰り返し実行している不正ユーザを識別することが可能になる。更に、当該不正ユーザは、実行可能コードの使用を永久に禁止され得る。一実施形態では、プロセッサは、前述の情報をサーバ機構に送信するように構成されている。実施例によっては、前記方法は、フラグを立てたときに、1つ又は複数の許可されたアドレス空間と異なる1つ又は複数のアクセスされたアドレス空間を正すように構成されている。
【0048】
一実施形態では、前記方法は、改ざん検出コードの改ざんを防止するためにチェックサム関数を実装することを更に含む。「チェックサム関数」という用語は、改ざん検出コードで実行されると、結果として第1の出力を生じる関数を指す。実施例によっては、第1の出力は、実行可能コードを有するアプリケーションプログラムの開発者によって知られている。より実施例によっては、第1の出力は、開発者によって実行可能コードに追加され得る。チェックサム関数は、クライアントデバイス上での実行可能コードの実行時に改ざん検出コードで再び実行されて、第2の出力を生成する。実施例によっては、第2の出力は、実行可能コードに追加され得る。実施例によっては、実行可能コードは、第1の出力を第2の出力と比較するように構成されている。更に、比較に基づいて、第1の出力及び第2の出力が異なる場合、フラグが立てられ得、実行可能コードの更なる実行が終了され得る。一実施形態では、前記プロセッサは、前記改ざん検出コードの改ざんを防止するためにチェックサム関数を実装するように構成されている。
【0049】
ゲームアプリケーションの例示的な実装では、ゲームアプリケーションは、関数1と、関数2と、関数3と、関数4と、を備える。このような場合、ゲームアプリケーションの改ざんされていない実行可能コードの実行は、関数2を呼び出す関数1と、実行時に値を関数1に返す関数2と、を含む。しかしながら、実行可能コードの改ざん時には、改ざんされた実行可能コードの実行は、関数3を呼び出す関数1を含み、更に、関数3は、関数4及び関数2を呼び出し得る。このような場合、改ざん検出コードによって、関数3でのリターンアドレス空間は改ざんされていることが分かる。更に、改ざん検出コードによって、フラグが立てられ、動作が実行される。
【0050】
本開示は、コンピュータで実行されると、前記コンピュータに、1つ又は複数のコードブロックを備える前記実行可能コードでの改ざんを検出するための前記方法を実行させるように準備された、コンピュータ可読改ざん検出コード手段を備える、コンピュータプログラム製品を更に提供する。コンピュータプログラム製品は、コンピュータに、実行可能コードの実行を監視させ、1つ又は複数のアドレス空間についての情報を受信させ、1つ又は複数のアクセスされたアドレス空間についての受信された情報を、1つ又は複数の許可されたアドレス空間についての情報と比較させ、1つ又は複数のアクセスされたアドレス空間が1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立てさせ、立てられたフラグに基づいて動作を実行させる。実施例によっては、前記コンピュータプログラム製品は、非一時的記憶媒体上に保存される。
【0051】
本開示は、実行可能コードでの改ざんを検出するためのシステムを更に提供する。前記システムは、1つ又は複数のコードブロックを備える前記実行可能コード、及び前記実行可能コードに対応付けられるコールスタックデータ構造、ならびに前述のコンピュータプログラム製品を保存するように構成されたメモリと、前記コンピュータプログラム製品を実行するように構成されたプロセッサと、を備える。前記プロセッサは、前記実行可能コードの実行を監視し、1つ又は複数のアドレス空間についての情報を受信し、1つ又は複数のアクセスされたアドレス空間についての前記受信された情報を、1つ又は複数の許可されたアドレス空間についての情報と比較し、前記1つ又は複数のアクセスされたアドレス空間が前記1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立て、前記立てられたフラグに基づいて動作を実行するように構成されている。
【図面の詳細説明】
【0052】
図1Aを参照すると、本開示の一実施形態に係る、実行可能コードでの改ざんを検出するためのシステム100Aが示されている。図示のように、システム100Aは、ユーザデバイス102を備える。ユーザデバイス102は、メモリ104と、プロセッサ106と、を備える。メモリ104は、1つ又は複数のコードブロックを備える実行可能コード、及び当該実行可能コードに対応付けられるコールスタックデータ構造、ならびに改ざん検出コードを保存するように構成されている。プロセッサ106は、改ざん検出コードを実行するように構成されている。
【0053】
図1Bを参照すると、本開示の一実施形態に係る、実行可能コードでの改ざんを検出するためのシステム100Bのネットワーク環境が示されている。システム100Bは、ネットワーク110を介してサーバ機構108に通信可能に接続されたユーザデバイス102を備える。ユーザデバイス102は、1つ又は複数のコードブロックを備える実行可能コード、及び当該実行可能コードに対応付けられるコールスタックデータ構造、ならびに改ざん検出コードをサーバ機構108から受信するように構成されている。
【0054】
図1Cを参照すると、本開示の別の実施形態に係る、実行可能コード112での改ざんを検出するためのシステム100Cのネットワーク環境が示されている。システム100Cは、ネットワーク110を介してサーバ機構108に通信可能に接続されたユーザデバイス102を備える。ユーザデバイス102のメモリ104は、実行可能コード112及び改ざん検出コード114をサーバ機構108から受信するように構成されている。ユーザデバイス102のプロセッサ106は、フラグを立てたときに、実行可能コード112の実行のためにアクセスされているアドレス空間を修正する1つ又は複数のプログラム、実行可能コード112を採用するユーザデバイス102のインターネットプロトコル(IP)アドレスに関する情報、及びユーザデバイス102に対応付けられるユーザプロファイルについての情報のうちの1つ以上に関する情報をサーバ機構108に送信するように構成されている。
【0055】
図2を参照すると、本開示の一実施形態に係る、実行可能コード112での改ざんを検出するためのシステムのメモリ104の詳細を示すブロック図が示されている。図示のように、メモリ104は、実行可能コード112と、コールスタックデータ構造200と、改ざん検出コード114と、を備える。実行可能コード112は、コードブロック202A、202B、202C~202Nとして示される1つ又は複数のコードブロックを備える。メモリ104は、実行可能コード112の実行のために1つ又は複数のコードブロック202A、202B、202C~202Nによってアクセスされるアドレス空間204A、204B、204C~204Nとして示される1つ又は複数のアドレス空間を備える。
【0056】
図3を参照すると、本開示の一実施形態に係る、1つ又は複数のコードブロックを備える実行可能コードでの改ざんを検出するための方法300のフローチャートが示されている。ステップ302では、実行可能コードに対応付けられるコールスタックデータ構造での実行可能コードの実行が監視される。ここで、実行は、1つ又は複数のアドレス空間にアクセスすることを含む。アクセスされると、ステップ304において、1つ又は複数のアドレス空間についての情報が受信される。ステップ306では、1つ又は複数のアクセスされたアドレス空間についての受信された情報が、実行可能コードのコールスタックデータ構造で定義される1つ又は複数の許可されたアドレス空間についての情報と比較される。ステップ308では、比較に基づいて、1つ又は複数のアクセスされたアドレス空間が1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグが立てられる。ステップ310では、立てられたフラグに基づいて動作が実行される。
【0057】
ステップ302からステップ310は、単なる例示であって、本明細書の特許請求の範囲から逸脱することなく、1つ又は複数のステップが追加されるか、1つ又は複数のステップが省略されるか、又は1つ又は複数のステップが異なる順番で提供される代替例も提供され得る。
【0058】
添付の請求項によって定義される本開示の範囲から逸脱することなく、前述の本開示の実施形態に対する変形例が可能である。本開示を記載及び請求するために使用される、「含む」、「備える」、「組み込む」、「有する」、「である」などの表現は、非排他的に解釈されることが意図され、すなわち、明示的に記載されていない部材、構成要素、又は要素が存在することも可能である。単一のものに対する言及は、その複数にも関すると解釈されるべきである。
【手続補正書】
【提出日】2021-08-23
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
1つ又は複数のコードブロック(202A、202B、202C、202N)を備える実行可能コード(112)での改ざんを検出するための方法であって、
・ 前記実行可能コードに対応付けられるコールスタックデータ構造(200)での前記実行可能コードの実行を監視することであって、前記実行は、1つ又は複数のアドレス空間(204A、204B、204C、204N)にアクセスすることを含む、監視することと、
・ アクセスされると、前記1つ又は複数のアドレス空間についての情報を受信することと、
・ 1つ又は複数のアクセスされたアドレス空間についての前記受信された情報を、前記実行可能コードの前記コールスタックデータ構造で定義される1つ又は複数の許可されたアドレス空間についての情報と比較することと、
・ 前記比較に基づいて、前記1つ又は複数のアクセスされたアドレス空間が前記1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立てることと、
・ 前記立てられたフラグに基づいて動作を実行することと、
・ 前記フラグをグローバル変数として、前記実行可能コードの前記1つ又は複数のコードブロックに追加することと、
を含み、
前記1つ又は複数のコードブロックの各々の前記フラグは偽値を有し、所与のコードブロックのアクセスされたアドレス空間が、1つ又は複数の許可されたアドレス空間と異なるとき、前記所与のコードブロックの前記フラグの値は、真値に変更され、
前記所与のコードブロックの前記フラグの値が偽値である場合、1つ又は複数の後のコードブロックのアクセスされたアドレス空間は、前記1つ又は複数の許可されたアドレス空間と比較されない、方法。
【請求項2】
前記実行可能コードの前記1つ又は複数のコードブロックの各々の実行を監視することを更に含む、請求項1に記載の方法。
【請求項3】
前記実行可能コードの1つ又は複数の所定のコードブロックの実行を監視することを更に含む、請求項1又は2に記載の方法。
【請求項4】
前記実行可能コードの最初の1~3つのコードブロックの実行を監視することを更に含む、請求項1から3のいずれかに記載の方法。
【請求項5】
前記フラグを立てたときに前記実行可能コードの実行を終了させることを更に含む、請求項1から4のいずれかに記載の方法。
【請求項6】
前記フラグを立てたときに、
・ 前記実行可能コードの実行のためにアクセスされている前記アドレス空間を修正する1つ又は複数のプログラム、
・ 前記実行可能コードを採用するユーザデバイス(102)のインターネットプロトコル(Internet Protocol:IP)アドレスに関する情報、及び
・ 前記ユーザデバイスに対応付けられるユーザプロファイルについての情報
のうちの1つ以上に関する情報をサーバ機構(108)に送信することを更に含む、請求項1から5のいずれかに記載の方法。
【請求項7】
実行可能コードでの改ざんを検出するためのシステム(100A、100B)であって、
1つ又は複数のコードブロックを備える前記実行可能コード、及び前記実行可能コードに対応付けられるコールスタックデータ構造、ならびに改ざん検出コード(114)を保存するように構成されたメモリ(104)と、
プロセッサと、
を備え、前記プロセッサは、前記改ざん検出コードを実行して、
・ 1つ又は複数のアドレス空間にアクセスすることを含む、前記実行可能コードの実行を監視し、
・ アクセスされると、前記1つ又は複数のアドレス空間についての情報を受信し、
・ 1つ又は複数のアクセスされたアドレス空間についての前記受信された情報を、前記実行可能コードの前記コールスタックデータ構造で定義される1つ又は複数の許可されたアドレス空間についての情報と比較し、
・ 前記比較に基づいて、前記1つ又は複数のアクセスされたアドレス空間が前記1つ又は複数の許可されたアドレス空間と異なることを検出したときにフラグを立て、
・ 前記立てられたフラグに基づいて動作を実行
し、
・ 前記フラグをグローバル変数として、前記実行可能コードの前記1つ又は複数のコードブロックに追加する
ように構成され
、
前記1つ又は複数のコードブロックの各々の前記フラグは偽値を有し、所与のコードブロックのアクセスされたアドレス空間が、1つ又は複数の許可されたアドレス空間と異なるとき、前記所与のコードブロックの前記フラグの値は、真値に変更され、
前記所与のコードブロックの前記フラグの値が偽値である場合、1つ又は複数の後のコードブロックのアクセスされたアドレス空間は、前記1つ又は複数の許可されたアドレス空間と比較されない、
システム。
【請求項8】
前記プロセッサは、前記改ざん検出コードを実行して、前記実行可能コードの前記1つ又は複数のコードブロックの各々の実行を監視するように構成されている、請求項
7に記載のシステム。
【請求項9】
前記プロセッサは、前記改ざん検出コードを実行して、前記実行可能コードの1つ又は複数の所定のコードブロックの実行を監視するように構成されている、請求項
7又は
8に記載のシステム。
【請求項10】
前記プロセッサは、前記改ざん検出コードを実行して、前記実行可能コードの最初の1~3つのコードブロックの実行を監視するように構成されている、請求項
7から
9のいずれかに記載のシステム。
【請求項11】
前記プロセッサは、前記改ざん検出コードを実行して、前記フラグを立てたときに前記実行可能コードの実行を終了させるように構成されている、請求項
7から
10のいずれかに記載のシステム。
【請求項12】
前記プロセッサは、前記フラグを立てたときに、
・ 前記実行可能コードの実行のためにアクセスされている前記アドレス空間を修正する1つ又は複数のプログラム、
・ 前記実行可能コードを採用するユーザデバイスのインターネットプロトコル(Internet Protocol:IP)アドレスに関する情報、
・ 前記ユーザデバイスに対応付けられるユーザプロファイルについての情報、
のうちの1つ以上に関する情報をサーバ機構に送信するように構成されている、請求項
7から
11のいずれかに記載のシステム。
【請求項13】
前記実行可能コードは、少なくとも1つの読み取り専用セグメントを備え、前記少なくとも1つの読み取り専用セグメントは、その前記1つ又は複数の許可されたアドレス空間に関する情報を含み、
前記プロセッサは、前記改ざん検出コードを実行して、前記少なくとも1つの読み取り専用セグメントから、前記1つ又は複数の許可されたアドレス空間に関する前記情報をロードするように構成されている、請求項
7から
12のいずれかに記載のシステム。
【請求項14】
前記改ざん検出コードは、前記実行可能コードにインラインで追加される、請求項
7から
13のいずれかに記載のシステム。
【請求項15】
前記改ざん検出コードは、前記実行可能コードの実行のために呼び出される関数である、請求項
7から
14のいずれかに記載のシステム。
【請求項16】
前記改ざん検出コードは、スタックポインタ関数である、請求項
7から
15のいずれかに記載のシステム。
【請求項17】
前記プロセッサは、前記改ざん検出コードの改ざんを防止するためにチェックサム関数を実装するように構成されている、請求項
7から
16のいずれかに記載のシステム。
【請求項18】
前記実行可能コードは、ゲームアプリケーションに対応付けられている、請求項
7から
17のいずれかに記載のシステム。
【請求項19】
コンピュータで実行されると、前記コンピュータに、請求項1から
6のいずれかに記載の方法を実行させるように準備された、コンピュータ可読改ざん検出コード手段を備える、コンピュータプログラム製品。
【請求項20】
非一時的記憶媒体上に保存される、請求項
19に記載のコンピュータプログラム製品。
【請求項21】
実行可能コードでの改ざんを検出するためのシステムであって、
・ 1つ又は複数のコードブロックを備える前記実行可能コード、及び前記実行可能コードに対応付けられるコールスタックデータ構造、ならびに請求項
19又は
20に記載のコンピュータプログラム製品を保存するように構成されたメモリと、
・ 前記コンピュータプログラム製品を実行するように構成されたプロセッサと、
を備えるシステム。
【国際調査報告】