JP2016515748A - 実行時のアプリケーションメソッドを置き換えるためのシステム及び方法 - Google Patents

実行時のアプリケーションメソッドを置き換えるためのシステム及び方法 Download PDF

Info

Publication number
JP2016515748A
JP2016515748A JP2016509142A JP2016509142A JP2016515748A JP 2016515748 A JP2016515748 A JP 2016515748A JP 2016509142 A JP2016509142 A JP 2016509142A JP 2016509142 A JP2016509142 A JP 2016509142A JP 2016515748 A JP2016515748 A JP 2016515748A
Authority
JP
Japan
Prior art keywords
target
source
data structure
class
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016509142A
Other languages
English (en)
Other versions
JP6166839B2 (ja
Inventor
ネコロシェフ・バディム
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NortonLifeLock Inc
Original Assignee
Symantec Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Symantec Corp filed Critical Symantec Corp
Publication of JP2016515748A publication Critical patent/JP2016515748A/ja
Application granted granted Critical
Publication of JP6166839B2 publication Critical patent/JP6166839B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6209Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)

Abstract

実行時のアプリケーションメソッドを置き換えるためのコンピュータ実装方法は、ソースメソッドで実行時に置き換えるように、標的メソッドを含む、実行時のアプリケーションを識別することと、標的クラスによって参照される実行時のメモリ内の標的メソッドデータ構造(標的メソッドのメソッドコードへの標的コードポインタを含む)の標的アドレスを位置決定することと、ソースメソッドを記載する実行時のメモリ内のソースメソッドデータ構造(ソースメソッドのメソッドコードへのソースコードポインタを含む)のソースアドレスを判定することと、ソースメソッドデータ構造をソースアドレスから標的アドレスにコピーし、それにより、標的コードポインタをソースコードポインタで置き換えることによって、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時にアプリケーションを修正することと、を含むことができる。種々の他の方法及びシステムもまた、開示する。

Description

情報時代において、多数のソフトウェアアプリケーションが、事業体及び消費者に対して、それらが多様なタスクを実施することを支援するために、利用可能である。残念ながら、全てのアプリケーションが、信頼性があるか、又はエクスプロイト若しくはセキュリティリークに対して難攻不落であるわけではない場合がある。例えば、攻撃者は、アプリケーションを活用して、マルウェアをインストールする、又はデバイスへのルートアクセスを得る場合がある。
一部のアプリケーションセキュリティリスクは、メソッドレベルで対処され得る。例えば、セキュリティベンダは、アプリケーション内のメソッドにラッパーを追加することができ、そのため、ラッパーは、メソッドへの呼び出しを妨害し、メソッドが呼び出されたコンテキストを検査する、及び/又はメソッドに渡されるパラメータをサニタイズすることができる。一部のプラットフォームは、アプリケーションにおいてラッパーメソッドをプロビジョニングするためのアプリケーションプログラミングインターフェースを提供することができるが、セキュリティベンダが保護を提供することを望み得る他のプラットフォームは、かかるアプリケーションプログラミングインターフェースを提供しない場合がある。アプリケーションを修正するための一部の従来の技術は、実行可能なファイル及び/又はバイトコードの部分を逆コンパイル並びに再コンパイルすることを伴い得る。残念ながら、これらの技術は、コンピューティングリソースの望ましくない消費を伴い得る、及び/又は実行中にアプリケーションを修正する上で、不十分な柔軟性を提供し得る。
したがって、本開示は、実行時のアプリケーションメソッドを置き換えるための追加の、及び改善されたシステム及び方法に対する必要性を識別し、それに対処する。
以下で更に詳細に説明されるように、本開示は、概して、メモリにおいて、標的メソッドの実行可能なコードへのコードポインタを含む、標的メソッドデータ構造(標的クラスによって参照される)を、ソースメソッドの実行可能なコードへのコードポインタを含む、ソースメソッドデータ構造(例えば、ソースクラスによって参照される)で置き換えることによって、実行時のアプリケーションメソッドを置き換えるためのシステム及び方法に関する。一部の実施例において、これらのシステム及び方法はまた、必要に応じて、ソースメソッドが、ラッパーメソッドとして作用し、標的メソッドを呼び出すことを可能にするように、最初に、標的メソッドデータ構造をダミーメソッドデータ構造(例えば、ソースクラスによっても参照される)にコピーすることができる。一部の実施例において、これらのシステム及び方法は、特定のプログラミング言語で書かれたアプリケーションを実行させるために使用される仮想機械の内側で実行するアプリケーションのメソッドを置き換えることができる。例えば、これらのシステム及び方法は、JAVA言語(「JAVA」は登録商標、以下同じ)で書かれたアプリケーションを実行させるDALVIK仮想機械の内側で実行するアプリケーションのメソッドを置き換えることができる。
一実施例において、実行時のアプリケーションメソッドを置き換えるためのコンピュータ実装方法は、(1)実行時にソースメソッドで置換するように、標的メソッドを含み得る、実行時のクラスベースのオブジェクト指向のアプリケーションを識別することと、(2)標的メソッドを記載し、アプリケーション内の標的クラスによって参照され得る、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定することであって、標的メソッドデータ構造が、標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定することと、(3)ソースメソッドを記載する、実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することであって、ソースメソッドデータ構造が、ソースメソッドのメソッドコードへのソースコードポインタを含む、判定することと、(4)ソースメソッドデータ構造の少なくとも一部分を、ソースメソッドデータ構造のソースアドレスから、標的メソッドデータ構造の標的アドレスにコピーし、それにより、標的コードポインタをソースコードポインタで置き換えることによって、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時のアプリケーションを修正することと、を含むことができる。
実施形態において、コンピュータ実装方法は、(1)ソースメソッドを記載するソースメソッドデータ構造を参照するソースクラスを識別することと、(2)ソースクラスが、私的な非ネイティブのプレースホルダメソッドを記載する、プレースホルダメソッドデータ構造を参照すると判定することと、(3)ソースメソッドデータ構造の一部分を、標的アドレスにコピーする前に、標的メソッドデータ構造の少なくとも一部分を、標的メソッドデータ構造の標的アドレスから、プレースホルダメソッドデータ構造のプレースホルダアドレスにコピーし、それにより、ソースメソッドにおける使用のために、標的コードポインタを保存することと、を更に含むことができる。
実施形態において、ソースメソッドは、プレースホルダメソッドを呼び出すことによって、標的メソッドを実行させるための少なくとも1つの命令を含むことができる。
実施形態において、標的メソッドは、信頼できないものであり得、ソースメソッドは、標的メソッドの安全でない使用を防止するように、少なくとも1つの命令を伴うラッパーメソッドを含むことができる。
実施形態において、コンピュータ実装方法は、(1)標的クラスが初期化されていない可能性があると判定することと、(2)ソースメソッドデータ構造の一部分をコピーする前に、標的クラスを初期化することと、を更に含むことができる。
一部の実施例において、コンピュータ実装方法は、ソースメソッドデータ構造をコピーする前に、標的クラスにおける標的メソッドを解決することを更に含むことができる。
一部の実施例において、標的クラスにおける標的メソッドを解決することは、(1)標的クラスの参照テーブルのための標的メソッドのインデックスを識別することと、(2)標的メソッドデータ構造の標的アドレスを、インデックスにおいて、解決されたメソッドテーブルに記憶することと、を含むことができる。
実施形態において、(1)ソースメソッドの名前が、標的メソッドの名前に合致し得、(2)ソースメソッドのパラメータセットが、標的メソッドのパラメータセットに合致し得る。
実施形態において、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時のアプリケーションを修正することは、ソースクラスを再コンパイルすることなく、かつ標的クラスを再コンパイルすることなく、実行時のアプリケーションを修正することを含むことができる。
実施形態において、上で説明される方法を実装するためのシステムは、(1)実行時にソースメソッドで置き換えるように、標的メソッドを含み得る、実行時のクラスベースのオブジェクト指向のアプリケーションを識別する、識別モジュールと、(2)標的メソッドを記載し、アプリケーション内の標的クラスによって参照され得る、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定する、位置決定モジュールであって、標的メソッドデータ構造が、標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定モジュールと、(3)ソースメソッドを記載する実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定し得る、判定モジュールであって、ソースメソッドデータ構造が、ソースメソッドのメソッドコードへのソースコードポインタを含む、判定モジュールと、(4)ソースメソッドデータ構造の少なくとも一部分を、ソースメソッドデータ構造のソースアドレスから、標的メソッドデータ構造の標的アドレスにコピーし、それにより、標的コードポインタをソースコードポインタで置き換えることによって、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時のアプリケーションを修正する、修正モジュールと、(5)識別モジュール、位置決定モジュール、判定モジュール、及び修正モジュールを実行させるように構成される、少なくとも1つのプロセッサを含むことができる。
一部の実施例において、上で説明される方法は、コンピュータ可読記憶媒体上のコンピュータ可読命令としてコード化され得る。例えば、コンピュータ可読記憶媒体は、コンピューティングデバイスの少なくとも1つのプロセッサによって実行される時、コンピューティングデバイスに、(1)実行時にソースメソッドで置き換えるように、標的メソッドを含み得る、実行時のクラスベースのオブジェクト指向のアプリケーションを識別することと、(2)標的メソッドを記載し、アプリケーション内の標的クラスによって参照され得る、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定することであって、標的メソッドデータ構造が、標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定することと、(3)ソースメソッドを記載する、実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することであって、ソースメソッドデータ構造が、ソースメソッドのメソッドコードへのソースコードポインタを含む、判定することと、(4)ソースメソッドデータ構造の少なくとも一部分を、ソースメソッドデータ構造のソースアドレスから、標的メソッドデータ構造の標的アドレスにコピーし、それにより、標的コードポインタをソースコードポインタで置き換えることによって、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時のアプリケーションを修正することと、を行わせることができる、1つ以上のコンピュータで実行可能な命令を含むことができる。
上記の実施形態のうちのいずれかからの特性は、本明細書で説明される一般原理に従い、互いに組み合わせて使用することができる。これらの及び他の実施形態、特性、及び利点は、添付の図面及び特許請求の範囲等と併せて以下の詳細な説明を一読すればより完全に理解されよう。
添付の図面は、いくつかの例示的な実施形態を例解し、本明細書の一部である。以下の説明とともに、これらの図面は、本開示の種々の原理を実証及び説明する。
実行時のアプリケーションメソッドを置き換えるための例示的なシステムのブロック図である。 実行時のアプリケーションメソッドを置き換えるための例示的なシステムのブロック図である。 実行時のアプリケーションメソッドを置き換えるための例示的な方法の流れ図である。 実行時のアプリケーションメソッドを置き換える前の例示的なアプリケーション状態の図である。 実行時のアプリケーションメソッドを置き換えた後の例示的なアプリケーション状態の図である。 本明細書で説明及び/又は例解される実施形態のうちの1つ以上を実装することが可能な例示的なコンピューティングシステムのブロック図である。 本明細書で説明及び/又は例解される実施形態のうちの1つ以上を実装することが可能な例示的なコンピューティングネットワークのブロック図である。
図面を通して、同一の参照文字及び説明は、同様だが、必ずしも同一ではない要素を示す。本明細書で説明される例示的な実施形態は、種々の修正及び代替的な形態が可能であるが、具体的な実施形態が、図面において例として示されており、本明細書において詳細に説明される。しかしながら、本明細書で説明される例示的な実施形態は、開示される特定の形態に限定されることを意図しない。むしろ、本開示は、添付の請求項の範囲にある全ての修正形態、均等形態、及び代替形態を網羅する。
本開示は、概して、実行時のアプリケーションメソッドを置き換えるためのシステム及び方法を対象とする。以下で更に詳細に説明されるように、メモリにおいて、標的メソッドの実行可能なコードへのコードポインタを含む、標的メソッドデータ構造(標的クラスによって参照される)を、ソースメソッドの実行可能なコードへのコードポインタを含む、ソースメソッドデータ構造(例えば、ソースクラスによって参照される)で置き換えることによって、本明細書で説明されるシステム及び方法は、アプリケーションがメモリにロードされる間に、アプリケーションの1つのメソッドを別のもので置き換えることを容易にすることができる。一部の実施例において、これは、メソッドの安全な実行を確実にするように、セキュリティ対策を実装するメソッドのために、あるメソッドをラッパーメソッドで置き換えることを可能にすることができる。一部の実施例において、このアプローチは、アプリケーションのいずれの部分の逆コンパイル及び/又は再コンパイルも必要とすることなく、アプリケーションメソッドの置き換えを達成することができる。一部の実施例において、このアプローチは、モバイルコンピューティングデバイス上のプロセス仮想機械などのアプリケーションメソッドの置き換えを元々サポートしないプラットフォーム上のアプリケーションメソッドの置き換えを達成することができる。一部の実施例において、これらのシステム及び方法は、仮想機械への変更を行うことなく(しかし、仮想機械によって提供されるデータ構造及び方法を使用することによって)、仮想機械内で実行するアプリケーションを置き換えることができる。
以下は、図1〜2を参照して、実行時のアプリケーションメソッドを置き換えるための例示的なシステムの詳細な説明を提供する。対応するコンピュータ実装方法の詳細な説明もまた、図3に関連して提供される。例示的なアプリケーション状態の詳細な説明は、図4〜5に関連して提供される。加えて、本明細書で説明される実施形態のうちの1つ以上を実装することが可能な例示的なコンピューティングシステム及びネットワークアーキテクチャの詳細な説明は、図6及び7に関連してそれぞれ提供される。
図1は、実行時のアプリケーションメソッドを置き換えるための例示的なシステム100のブロック図である。この図で例解されるように、例示的なシステム100は、1つ以上のタスクを実施するための1つ以上のモジュール102を含むことができる。例えば、かつ以下で詳細に説明されるように、例示的なシステム100はまた、実行時にソースメソッドで置き換えるように、標的メソッドを含み得る、実行時のクラスベースのオブジェクト指向のアプリケーションを識別することができる、識別モジュール104を含むことができる。例示的なシステム100は、標的メソッドを記載し、アプリケーション内の標的クラスによって参照され得る、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを含み得る、位置決定モジュール106を更に含むことができ、標的メソッドデータ構造は、標的メソッドのメソッドコードへの標的コードポインタを含む。例示的なシステム100はまた、ソースメソッドを記載する、実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することができる、判定モジュール108を含むことができ、ソースメソッドデータ構造は、ソースメソッドのメソッドコードへのソースコードポインタを含む。例示的なシステム100は、ソースメソッドデータ構造の少なくとも一部分を、ソースメソッドデータ構造のソースアドレスから、標的メソッドデータ構造の標的アドレスにコピーし、それにより、標的コードポインタをソースコードポインタで置き換えることによって、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時のアプリケーションを修正することができる、修正モジュール110を更に含むことができる。別個の要素として例解されるが、図1のモジュール102のうちの1つ以上は、単一のモジュール又はアプリケーションの部分を表し得る。
ある実施形態において、図1のモジュール102のうちの1つ以上は、コンピューティングデバイスによって実行される時、コンピューティングデバイスに、1つ以上のタスクを実施させることができる、1つ以上のソフトウェアアプリケーション又はプログラムを表し得る。例えば、かつ以下で更に詳細に説明されるように、モジュール102のうちの1つ以上は、図2に例解されるコンピューティングデバイス202、図6のコンピューティングシステム610、及び/又は図7の例示的なネットワークアーキテクチャ700の部分などの1つ以上のコンピューティングデバイス上に記憶され、かつその上で実行するように構成される、ソフトウェアモジュールを表し得る。図1のモジュール102のうちの1つ以上はまた、1つ以上のタスクを実施するように構成される1つ以上の特殊目的のコンピュータの全て又は部分を表し得る。
図1の例示的なシステム100は、多様な方法で実装されてもよい。例えば、例示的なシステム100の全て又は部分は、図2の例示的なシステム200の部分を表し得る。図2に示されるように、システム200は、アプリケーション210を実行するコンピューティングデバイス202を含むことができる。コンピューティングデバイス202は、モジュール102のうちの1つ以上でプログラムされてもよい。
一実施形態において、図1からのモジュール102のうちの1つ以上は、コンピューティングデバイス202の少なくとも1つのプロセッサによって実行される時、コンピューティングデバイス202が、実行時のアプリケーションメソッドを置き換えることを容易にすることができる。例えば、かつ以降で更に詳細に説明されるように、モジュール102のうちの1つ以上は、コンピューティングデバイス202に、標的クラス212の標的メソッド216を、ソースメソッド236(例えば、ソースクラス232の)で置き換えさせることができる。例えば、かつ以降で更に詳細に説明されるように、識別モジュール104は、実行時にソースメソッド236で置き換えるように、標的メソッド216を含み得る、実行時のクラスベースのオブジェクト指向のアプリケーション210を識別するようにプログラムすることができる。位置決定モジュール106は、標的メソッド216を記載し、アプリケーション210内の標的クラス212によって参照され得る、実行時のメモリ内の標的メソッドデータ構造218の標的アドレスを位置決定するようにプログラムすることができ、標的メソッドデータ構造218は、標的メソッド216の標的メソッドコード222への標的コードポインタ220を含む。判定モジュール108は、ソースメソッド236を記載する、実行時のメモリ内のソースメソッドデータ構造238のソースアドレスを判定するようにプログラムすることができ、ソースメソッドデータ構造238は、ソースメソッド236のソースメソッドコード242へのソースコードポインタ240を含む。修正モジュール110は、ソースメソッドデータ構造238の少なくとも一部分を、ソースメソッドデータ構造238のソースアドレスから、標的メソッドデータ構造218の標的アドレスにコピーし、それにより、標的コードポインタ220をソースコードポインタ240で置き換えることによって、標的クラス212に、標的メソッド216の代わりに、ソースメソッド236を参照させるように、実行時のアプリケーション210を修正するようにプログラムすることができる。
コンピューティングデバイス202は、概して、コンピュータで実行可能な命令を読み取ることが可能な任意のタイプ又は形態のコンピューティングデバイスを表す。コンピューティングデバイス202の例としては、限定することなく、ラップトップ、タブレット、デスクトップ、サーバ、セルラ電話、個人用デジタル補助装置(PDA)、マルチメディアプレーヤ、埋め込みシステム、その1つ以上の組み合わせ、図6の例示的なコンピューティングシステム610、又は任意の他の好適なコンピューティングデバイスが挙げられる。
図3は、実行時のアプリケーションメソッドを置き換えるための例示的なコンピュータ実装方法300の流れ図である。図3に示される工程は、任意の好適なコンピュータで実行可能なコード及び/又はコンピューティングシステムによって実施されてもよい。一部の実施形態において、図3に示される工程は、図1のシステム100、図2のシステム200、図6のコンピューティングシステム610、及び/又は図7の例示的なネットワークアーキテクチャ700の部分の構成要素の1つ以上によって実施されてもよい。
図3に例解されるように、工程302において、本明細書で説明されるシステムのうちの1つ以上は、実行時にソースメソッドで置き換えるように、標的メソッドを含み得る、実行時のクラスベースのオブジェクト指向のアプリケーションを識別することができる。例えば、工程302において、識別モジュール104は、図2のコンピューティングデバイス202の一部として、実行時にソースメソッド236で置き換えるように、標的メソッド216を含み得る、実行時のクラスベースのオブジェクト指向のアプリケーション210を識別することができる。
本明細書で使用される際、「アプリケーション」という用語は、任意のプロセス及び/又はプログラムを指し得る。一部の実施例において、アプリケーションは、プロセス仮想機械において実行することができる。例えば、アプリケーションは、GOOGLE ANDROID(「ANDROID」は登録商標、以下同じ)プラットフォーム(例えば、モバイルコンピューティングデバイス)上で実行することができる、DALVIK上で実行することができる。
本明細書で使用される際、「メソッド]という用語は、クラスベースのオブジェクト指向のアプリケーションにおいて定義されるクラスと関連付けられる任意のメソッド、サブルーチン、及び/又は手順を指し得る。
識別モジュール104は、任意の好適な様態で、実行時のアプリケーションを識別することができる。例えば、識別モジュール104は、アプリケーションの一部として、及び/又はそれと通信して実行することにより、アプリケーションを識別することができる。一部の実施例において、識別モジュール104は、アプリケーションにおいて定義される1つ以上の構築物を参照することによって、アプリケーションを識別することができる。
一部の実施例において、識別モジュール104は、ソースメソッドを含む、ソースクラスを識別することができる。一部の実施例において、以降で更に詳細に説明されるように、ソースクラスはまた、本明細書で説明されるシステムのうちの1つ以上が、標的メソッドをソースメソッドで置き換える前に、標的メソッドを保存するために使用することができる、プレースホルダメソッドを含むことができる。一部の実施例において、識別モジュール104は、アプリケーションを実行するために使用されるフレームワークによって消費可能ではないフォーマットのソースクラス(例えば、オブジェクト)のインスタンスを識別することができる。例えば、識別モジュール104は、JAVA NATIVE INTERFACEフレームワークに対するjobjectを識別することができる。これらの実施例において、識別モジュール104は、アプリケーションが実行するフレームワークにおける使用のためのオブジェクトを復号することができる。例えば、識別モジュール104は、jobjectを、DALVIKによって消費可能なオブジェクト構造に復号することができる。例えば、識別モジュール104は、以下の例示的なコードを実行することができる:
Object *objTM=dvmDecodeIndirectRef(env,jniTM);
Object *objWM=dvmDecodeIndirectRef(env,jniWM);
Object *objFM=dvmDecodeIndirectRef(env,jniFM);
上の実施例において、「TM」は、標的メソッドを指し得、「WM」は、ラッパーメソッド(即ち、ソースメソッド)を指し得、「FM」は、プレースホルダメソッドを指し得る。一部の実施例において、「dvmDecodeIndirectRef」は、DALVIKアプリケーションプログラミングインターフェース(「API」)の関数を指し得る。
一部の実施例において、識別モジュール104はまた、1つ以上のAPI関数のためのポインタを取得する。例えば、1つ以上のAPIメソッドの内部名は、開発キットのバージョン(例えば、ANDROID NATIVE DEVELOPMENT KIT)にわたって変化し得る。したがって、識別モジュール104は、関数に対する既知の名前のリストを識別し、名前がリスト上の名前と合致する関数を見出すことができる。以下で更に詳細に説明されるように、一部の実施例において、識別モジュール104は、本明細書で説明されるシステム及び方法が、標的メソッドをソースメソッドで置き換える過程で使用することができる、追加のAPI関数に対するポインタを識別することができる。
一部の実施例において、ソースメソッドの名前は、標的メソッドの名前に合致し得、ソースメソッドのパラメータセット(例えば、パラメータタイプ、パラメータの数、及び/又はパラメータ名)は、標的メソッドのパラメータセットに合致し得る。一部の実施例において、ソースメソッドの例外処理もまた、標的メソッドの例外処理と合致し得る。
図4は、アプリケーションの例示的な状態400を例解する。図4に示されるように、アプリケーションは、置き換えられるべきメソッド412及びメソッド414を含むクラス410を含み得る。アプリケーションはまた、メソッド432、メソッド414を置き換えるためのメソッド434、及びメソッド436を含む、クラス430を含み得る。図4を例として使用すると、工程302において、識別モジュール104は、状態400にあるアプリケーションを識別することができる(例えば、メソッド414がメソッド434で置き換えられる前に)。
図3を参照すると、工程304において、本明細書で説明されるシステムのうちの1つ以上は、標的メソッドを記載し、アプリケーション内の標的クラスによって参照される、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定することができ、標的メソッドデータ構造は、標的メソッドのメソッドコードへの標的コードポインタを含む。例えば、工程304において、位置決定モジュール106は、図2のコンピューティングデバイス202の一部として、標的メソッド216を記載し、アプリケーション210内の標的クラス212によって参照され得る、実行時のメモリ内の標的メソッドデータ構造218の標的アドレスを位置決定することができ、標的メソッドデータ構造218は、標的メソッド216の標的メソッドコード222への標的コードポインタ220を含む。
本明細書で使用される際、「メソッドデータ構造」という語句は、メソッドを記載するメタデータを含み得る任意のデータ構造を指し得る。例えば、メソッドデータ構造は、メソッドに対する実行可能なコード(例えば、バイトコード)へのメソッドコードポインタを含む、1つ以上のフィールドを含むことができる。一部の実施例において、クラス内のメソッドは、対応するメソッドデータ構造を指し示すことができ、そのため、メソッドデータ構造のメソッドコードポインタによって参照されるコードは、クラスのメソッドが呼び出される時に実行される。
位置決定モジュール106は、任意の好適な様態で標的アドレスの位置を識別することができる。例えば、位置決定モジュール106は、API関数を呼び出すことによって、標的アドレスの位置を識別することができる。例えば、位置決定モジュール106は、以下の例示的なコードを実行することができる:
Method *tm=dvmGetMethodFromReflectObj(objTM)。
先で言及されるように、本明細書で説明されるシステムのうちの1つ以上は、文書化されていない関数に対する既知の名前のリストを識別すること、及び名前がリスト上の名前と合致する関数を見出すことによって、「dvmGetMethodFromReflectObj」を位置決定することができる。
図4を例として使用すると、工程304において、位置決定モジュール106は、メモリ内のメソッド構造420のアドレスを識別することができる。メソッド構造420は、メソッド414を記載するフィールド422、及びメソッド414のメソッドコード426を指し示すメソッドコードポインタ424を含むことができる。
図3に戻ると、工程306において、本明細書で説明されるシステムのうちの1つ以上は、ソースメソッドを記載する、実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することができ、ソースメソッドデータ構造は、ソースメソッドのメソッドコードへのソースコードポインタを含む。例えば、工程306において、判定モジュール108は、図2のコンピューティングデバイス202の一部として、ソースメソッド236を記載する、実行時のメモリ内のソースメソッドデータ構造238のソースアドレスを判定することができ、ソースメソッドデータ構造238は、ソースメソッド236のソースメソッドコード242へのソースコードポインタ240を含む。
判定モジュール108は、任意の好適な様態でソースアドレスの位置を識別することができる。例えば、判定モジュール108は、文書化されていないAPI関数を呼び出すことによって、ソースアドレスの位置を識別することができる。例えば、判定モジュール108は、以下の例示的なコードを実行することができる:
Method *wm=dvmGetMethodFromReflectObj(objWM)。
同様に、一部の実施例において、判定モジュール108は、プレースホルダメソッドデータ構造のプレースホルダアドレスの位置を識別することができる。例えば、判定モジュール108は、以下の例示的なコードを実行することができる:
Method *fm=dvmGetMethodFromReflectObj(objFM)。
図4を例として使用すると、工程306において、判定モジュール108は、メモリ内のメソッド構造440のアドレスを識別することができる。メソッド構造440は、メソッド434を記載するフィールド442、及びメソッド434のメソッドコード446を指し示すメソッドコードポインタ444を含むことができる。
図3に戻ると、工程308において、本明細書で説明されるシステムのうちの1つ以上は、ソースメソッドデータ構造の少なくとも一部分を、ソースメソッドデータ構造のソースアドレスから、標的メソッドデータ構造の標的アドレスにコピーし、それにより、標的コードポインタをソースコードポインタで置き換えることによって、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時のアプリケーションを修正することができる。例えば、工程308において、修正モジュール110は、図2のコンピューティングデバイス202の一部として、ソースメソッドデータ構造238の少なくとも一部分を、ソースメソッドデータ構造238のソースアドレスから、標的メソッドデータ構造218の標的アドレスにコピーし、それにより、標的コードポインタ220をソースコードポインタ240で置き換えることによって、標的クラス212に、標的メソッド216の代わりに、ソースメソッド236を参照させるように、実行時のアプリケーション210を修正することができる。
修正モジュール110は、任意の好適な様態で、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、アプリケーションを修正することができる。一部の実施例において、修正モジュール110は、ソースメソッドデータ構造を標的アドレスにコピーする前に、クラス及び/又はメソッドを準備するように、1つ以上の工程を実施することができる。
一部の実施例において、修正モジュール110は、標的クラスが初期化されていないと判定することができる。これらの実施例において、修正モジュール110は、ソースメソッドデータ構造の部分をコピーする前に、標的クラスを初期化することができる。同様に、修正モジュール110は、ソースメソッドデータ構造の部分を標的アドレスにコピーする前に、ソースクラスを初期化することができる。例えば、修正モジュール110は、以下の例示的なコードを実行することができる:
if(objTM−>clazz−>status !=CLASS_INITIALIZED){
dvmInitClass(objTM−>clazz);//標的クラスを初期化する

if(objWM−>clazz−>status !=CLASS_INITIALIZED){
dvmInitClass(objWM−>clazz);//ラッパークラスを初期化する
上の実施例において、先で言及されるように、本明細書で説明されるシステムのうちの1つ以上は、文書化されていない関数に対する既知の名前のリストを識別すること、及び名前がリスト上の名前と合致する関数を見出すことによって、「dvmInitClass」を位置決定することができる。
一部の実施例において、修正モジュール110はまた、それらのそれぞれのクラス内の標的メソッド、ソースメソッド、及び/又はプレースホルダメソッドを解決することができる。例えば、一部のプラットフォーム上で、メソッドは、典型的に、それらの最初の使用で解決されるのみであり得る。しかしながら、修正モジュール110は、標的クラスの参照テーブルに対する標的メソッドのインデックスを識別し、標的メソッドデータ構造の標的アドレスを、インデックスにおいて、解決されたメソッドテーブルに保存することによって、ソースメソッドデータ構造を標的アドレスにコピーする前に、標的クラス内の標的メソッドを解決することができる。例えば、修正モジュール110は、以下の例示的なコードを実行することができる:
method2ref(fakMethod−>clazz−>pDvmDex,fakMethod,&ref);
fakMethod−>clazz−>pDvmDex−>pResMethods[ref]=fakMethod;
method2ref(trgMethod−>clazz−>pDvmDex,trgMethod,&ref);
trgMethod−>clazz−>pDvmDex−>pResMethods[ref]=trgMethod;
method2ref(wrpMethod−>clazz−>pDvmDex,wrpMethod,&ref);
wrpMethod−>clazz−>pDvmDex−>pResMethods[ref]=wrpMethod
上の実施例において、「fakMethod」は、プレースホルダメソッドを指し得、「trgMethod」は、標的メソッドを指し得、「wrpMethod」は、ソースメソッドを指し得る。メソッド「method2ref」は、提供されたメソッドの参照テーブル(例えば、DALVIK DEXファイルに対する)のメソッドインデックス(この実施例では、「ref」に保存)を見出す、修正モジュール110の一部分を含むことができる。
一部の実施例において、修正モジュール110は、標的メソッドデータ構造をソースメソッドデータ構造で上書きする前に、標的メソッドデータ構造を最初に保存することができる。例えば、修正モジュール110は、ソースメソッドを記載するソースメソッドデータ構造を参照するソースクラスを識別することができる。次いで、修正モジュール110は、ソースクラスが、私的な非ネイティブのプレースホルダメソッドを記載する、プレースホルダメソッドデータ構造を参照すると判定することができる。次いで、修正モジュール110は、ソースメソッドデータ構造の部分を、標的アドレスにコピーする前に、標的メソッドデータ構造の少なくとも一部分を、標的メソッドデータ構造の標的アドレスから、プレースホルダメソッドデータ構造のプレースホルダアドレスにコピーし、それにより、ソースメソッドにおける使用のために標的コードポインタを保存することができる。私的な非ネイティブのプレースホルダメソッドを使用することによって、本明細書で説明されるシステムは、実行時環境が、プレースホルダメソッドのクラス名を、それが標的メソッドのクラスと合致することを確認するために、チェックしないことを確実にすることができる。
例えば、ソースメソッドは、ソースクラスのプレースホルダメソッドへの呼び出しを含むことができる。したがって、ソースメソッドは、プレースホルダメソッドを呼び出すことによって、標的メソッドを実行するための少なくとも1つの命令を含むことができる。一部の実施例において、標的メソッドは、信頼できないものであり得る。例えば、本明細書で説明されるシステムのうちの1つ以上(例えば、識別モジュール104)は、アプリケーションを信頼できないアプリケーションとして識別している場合がある。更に、又は代替的に、本明細書で説明されるシステムのうちの1つ以上は、標的メソッドを信頼できないメソッド(例えば、第3者によって作成された)として識別し得る。したがって、ソースメソッドは、標的メソッドの安全でない使用を防止するように、少なくとも1つの命令で、標的メソッドに対するラッパーメソッドとして動作することができる。例えば、ソースメソッドは、サニタイズされたデータを引数として標的メソッドに渡す前に、それが呼び出された時に受信した、引数からのデータをサニタイズすることができる。別の実施例として、ソースメソッドは、それが呼び出されたコンテキスト及び/又はそれが標的メソッドを呼び出すために安全かどうかを判定するように呼び出された引数のうちの1つ以上を分析することができる。例えば、ソースメソッドは、標的メソッドの可能なエクスプロイト(例えば、バッファオーバフロー)、標的メソッドの不正使用(例えば、アクセスポリシー、データ損失防止ポリシー等に違反して)、及び/又はセキュリティの問題をもたらし得る標的メソッドの任意の他の使用を防止することができる。
修正モジュール110は、任意の好適な様態で、プレースホルダメソッドデータ構造の場所に、標的メソッドデータ構造を保存することができる。例えば、修正モジュール110は、以下の例示的なコードを実行することができる:
memcpy(fakMethod,trgMethod,size);
同様に、修正モジュール110は、任意の好適な様態で、標的メソッドデータ構造の場所に、ソースメソッドデータ構造を保存することができる。例えば、修正モジュール110は、以下の例示的なコードを実行することができる:
memcpy(trgMethod,wrpMethod,size);
一部の実施例において、修正モジュール110は、標的メソッドデータ構造の場所に、ソースメソッドデータ構造の1つ以上の部分をコピーするのみであり得る。例えば、修正モジュール110は、標的メソッドデータ構造の位置における、ソースメソッドの正しい動作を確実にするために必要なソースメソッドデータ構造のそれらのフィールドのみ(例えば、ソースメソッドデータ構造と標的メソッドデータ構造との間で異なったフィールドのみ)をコピーすることができる。
一部の実施例において、修正モジュール110は、ソースクラスを再コンパイルすることなく、かつ標的クラスを再コンパイルすることなく、実行時のアプリケーションを修正することができる。
図4を例として使用すると、メソッド436は、クラス430内のプレースホルダメソッドを表し得る。クラス430内のメソッド436は、フィールド452、並びにダミーコード456(例えば、コンテンツなし及び/又は重要なコンテンツなし)を指し示すメソッドコードポインタ454を含む、メソッド構造450によって記載され得る。修正モジュール110は、メソッド構造420を、メソッド構造450の位置にコピーし、メソッドコード426を実行させるように、クラス430のメソッド436の将来の呼び出しを引き起こす(例えば、メソッド414へのラッパーメソッドとして作用するメソッド434によって)ことができる。次いで、修正モジュール110は、メソッド構造440を、メソッド構造420の位置にコピーし、メソッドコード446を実行させるように、クラス410のメソッド414の将来の呼び出しを引き起こすことができる(例えば、メソッド414に対するラッパーメソッドが、メソッド414が直接呼び出される代わりに、呼び出されるように)。
図5は、メソッドを置き換えた後のアプリケーションの例示的な状態500を例解する。図5を例として使用すると、メソッド414は、ここでは、メソッドコード446(例えば、ラッパーメソッドコード)を指し示し続けるメソッドコードポインタ444を含む、メソッド構造440のコンテンツを指し示すことができる。メソッド436は、ここでは、メソッドコード426(例えば、元の標的メソッドコード)を指し示し続けるメソッドコードポインタ454を含む、メソッド構造420のコンテンツを指し示すことができる。したがって、クラス410のメソッド414が呼び出される時、メソッドコード446が実行され得、これは、元の標的関数をどのように呼び出すか及び/又は呼び出すかどうかを決定するように、一部のセキュリティ工程を実施することができる。次いで、メソッドコード446は、メソッド436(プレースホルダメソッド)を呼び出すことによって、元の標的関数を呼び出し、メソッドコード426の実行をもたらすことができる。
図6は、本明細書で説明及び/又は例解される実施形態のうちの1つ以上を実装することが可能な例示的なコンピューティングシステム610のブロック図である。例えば、コンピューティングシステム610の全て又は一部分は、単独で、若しくは他の要素と組み合わせて、本明細書で説明される工程のうちの1つ以上(図3に例解される工程のうちの1つ以上など)を実施し得る、及び/又は実施するための手段であり得る。コンピューティングシステム610の全て又は一部分はまた、本明細書で説明及び/若しくは例解される任意の他の工程、方法、又はプロセスを実施し得る、及び/又は実施するための手段であり得る。
コンピューティングシステム610は、コンピュータ可読命令を実行することが可能な任意のシングル又はマルチプロセッサコンピューティングデバイス又はシステムを広く表す。コンピューティングシステム610の例としては、限定することなく、ワークステーション、ラップトップ、クライアント側端末、サーバ、分散型コンピューティングシステム、手持ち式デバイス、又は任意の他のコンピューティングシステム若しくはデバイスが挙げられる。その最も基本的な構成では、コンピューティングシステム610は、少なくとも1つのプロセッサ614、及びシステムメモリ616を含むことができる。
プロセッサ614は概して、データを処理する、又は命令を解釈及び実行することが可能な任意のタイプ又は形態の処理ユニットを表す。ある実施形態において、プロセッサ614は、ソフトウェアアプリケーション又はモジュールから命令を受信することができる。これらの命令は、プロセッサ614に、本明細書で説明及び/又は例解される例示的な実施形態のうちの1つ以上の機能を実施させることができる。
システムメモリ616は概して、データ及び/又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形態の揮発性又は不揮発性記憶デバイス若しくは媒体を表す。システムメモリ616の例としては、限定することなく、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、フラッシュメモリ、又は任意の他の好適なメモリデバイスが挙げられる。必須ではないが、ある実施形態において、コンピューティングシステム610は、揮発性メモリユニット(例えば、システムメモリ616など)、及び不揮発性記憶デバイス(例えば、以下で詳細に説明されるような主要記憶デバイス632など)の両方を含むことができる。一実施例において、図1のモジュール102のうちの1つ以上は、システムメモリ616にロードされ得る。
ある実施形態において、例示的なコンピューティングシステム610はまた、プロセッサ614及びシステムメモリ616に加えて、1つ以上の構成要素又は要素を含むことができる。例えば、図6に例解されるように、コンピューティングシステム610は、メモリコントローラ618、入力/出力(I/O)コントローラ620、通信インターフェース622を含むことができ、これらの各々は、通信基盤612を介して相互接続することができる。通信基盤612は概して、コンピューティングデバイスの1つ以上の構成要素間の通信を容易にすることが可能な任意のタイプ又は形態の基盤を表す。通信基盤612の例としては、限定することなく、通信バス(産業標準アーキテクチャ(ISA)、周辺構成要素交互接続(PCI)、PCIエクスプレス(PCIe)、又は同様のバスなど)、及びネットワークが挙げられる。
メモリコントローラ618は概して、メモリ若しくはデータを処理する、又はコンピューティングシステム610の1つ以上の構成要素間の通信を制御することが可能な任意のタイプ又は形態のデバイスを表す。例えば、ある実施形態において、メモリコントローラ618は、通信基盤612を介して、プロセッサ614、システムメモリ616、及びI/Oコントローラ620間の通信を制御することができる。
I/Oコントローラ620は概して、コンピューティングデバイスの入力及び出力機能を調整及び/又は制御することが可能な任意のタイプ又は形態のモジュールを表す。例えば、ある実施形態において、I/Oコントローラ620は、プロセッサ614、システムメモリ616、通信インターフェース622、ディスプレイアダプタ626、入力インターフェース630、及び記憶インターフェース634などのコンピューティングシステム610の1つ以上の要素間のデータの転送を制御する又は容易にすることができる。
通信インターフェース622は、例示的なコンピューティングシステム610と1つ以上の追加のデバイスとの間の通信を容易にすることが可能な任意のタイプ又は形態の通信デバイス又はアダプタを広く表す。例えば、ある実施形態において、通信インターフェース622は、コンピューティングシステム610と、追加のコンピューティングシステムを含む私的又は公的ネットワークとの間の通信を容易にすることができる。通信インターフェース622の例としては、限定することなく、有線ネットワークインターフェース(ネットワークインターフェースカードなど)、無線ネットワークインターフェース(無線ネットワークインターフェースカードなど)、モデム、及び任意の他の好適なインターフェースが挙げられる。少なくとも1つの実施形態において、通信インターフェース622は、インターネットなどのネットワークへの直接リンクを介してリモートサーバへの直接接続を提供することができる。通信インターフェース622はまた、例えば、ローカルエリアネットワーク(イーサネットネットワークなど(「イーサネット」は登録商標、以下同じ))、パーソナルエリアネットワーク、電話若しくはケーブルネットワーク、セルラ電話接続、衛星データ接続、又は任意の他の好適な接続を介するかかる接続を間接的に提供することができる。
ある実施形態において、通信インターフェース622はまた、外部バス又は通信チャネルを介して、コンピューティングシステム610と1つ以上の追加のネットワーク又は記憶デバイスとの間の通信を容易にするように構成されるホストアダプタを表し得る。コンピュータ可読記憶媒体の例としては、限定することなく、Small Computer System Interface(SCSI)ホストアダプタ、Universal Serial Bus(USB)ホストアダプタ、Institute of Electrical and Electronics Engineers(IEEE)1394ホストアダプタ、Advanced Technology Attachment(ATA)、Parallel ATA(PATA)、Serial ATA(SATA)、及びExternal SATA(eSATA)ホストアダプタ、ファイバチャネルインターフェースアダプタ、イーサネットアダプタ等が挙げられる。通信インターフェース622はまた、コンピューティングシステム610が、分散型又はリモートコンピューティングに関与することを可能にすることができる。例えば、通信インターフェース622は、リモートデバイスから命令する、又は実行のためにリモートデバイスに命令を送信することができる。
図6に例解されるように、コンピューティングシステム610はまた、ディスプレイアダプタ626を介して通信基盤612に連結される少なくとも1つのディスプレイデバイス624を含むことができる。ディスプレイデバイス624は概して、ディスプレイアダプタ626によって転送される情報を視覚的に表示することが可能な任意のタイプ又は形態のデバイスを表す。同様に、ディスプレイアダプタ626は概して、ディスプレイデバイス624上に表示するために、通信基盤612から(又は当該技術分野において既知であるようにフレームバッファから)グラフィックス、テキスト、及び他のデータを転送するように構成される、任意のタイプ又は形態のデバイスを表す。
図6に例解されるように、例示的なコンピューティングシステム610はまた、入力インターフェース630を介して通信基盤612に連結される少なくとも1つの入力デバイス628を含むことができる。入力デバイス628は概して、コンピュータ又は人間のいずれかが生成した入力を、例示的なコンピューティングシステム610に提供することが可能な任意のタイプ又は形態の入力デバイスを表す。入力デバイス628の例としては、限定することなく、キーボード、ポインティングデバイス、音声認識デバイス、又は任意の他の入力デバイスが挙げられる。
図6に例解されるように、例示的なコンピューティングシステム610はまた、記憶インターフェース634を介して通信基盤612に連結される主要記憶デバイス632及びバックアップ記憶デバイス633を含むことができる。記憶デバイス632及び633は概して、データ及び/又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形態の記憶デバイス又は媒体を表す。例えば、記憶デバイス632及び633は、磁気ディスクドライブ(例えば、いわゆるハードドライブ)、ソリッドステートドライブ、フロッピーディスクドライブ(「フロッピー」は登録商標、以下同じ)、磁気テープドライブ、光ディスクドライブ、フラッシュドライブなどであり得る。記憶インターフェース634は概して、記憶デバイス632及び633と、コンピューティングシステム610の他の構成要素との間でデータを転送するための任意のタイプ又は形態のインターフェース又はデバイスを表す。
ある実施形態において、記憶デバイス632及び633は、コンピュータソフトウェア、データ、又は他のコンピュータ可読情報を記憶するように構成される取り外し可能な記憶ユニットから読み取る、及び/又はそれに書き込むように構成され得る。好適な取り外し可能な記憶ユニットの例としては、限定することなく、フロッピーディスク、磁気テープ、光ディスク、フラッシュメモリデバイスなどが挙げられる。記憶デバイス632及び633はまた、コンピュータソフトウェア、データ、又は他のコンピュータ可読命令が、コンピューティングシステム610にロードされることを可能にするための他の同様の構造又はデバイスを含むことができる。例えば、記憶デバイス632及び633は、ソフトウェア、データ、又は他のコンピュータ可読情報を読み取る、及び書き込むように構成され得る。記憶デバイス632及び633はまた、コンピューティングシステム610の一部であってもよく、又は他のインターフェースシステムを通じてアクセスされる別個のデバイスであってもよい。
多くの他のデバイス又はサブシステムが、コンピューティングシステム610に接続され得る。反対に、図6に例解される構成要素及びデバイスの全てが、本明細書で説明及び/又は例解される実施形態を実践するために存在する必要があるわけではない。上で言及されるデバイス及びサブシステムはまた、図6に示されるものと異なる方法で相互接続されてもよい。コンピューティングシステム610はまた、任意の数のソフトウェア、ファームウェア、及び/又はハードウェア構成を採用することができる。例えば、本明細書で開示される例示的な実施形態のうちの1つ以上は、コンピュータ可読記憶媒体上に、コンピュータプログラム(コンピュータソフトウェア、ソフトウェアアプリケーション、コンピュータ可読命令、又はコンピュータ制御論理とも称される)としてコード化されてもよい。「コンピュータ可読記憶媒体」という語句は概して、コンピュータ可読命令を記憶又は担持することが可能な任意の形態のデバイス、キャリア、又は媒体を指す。コンピュータ可読−記憶媒体の例としては、限定することなく、搬送波などの伝送型媒体、並びに磁気記憶媒体(例えば、ハードディスクドライブ及びフロッピーディスク)、光学記憶媒体(例えば、コンパクトディスク(CD)又はデジタルビデオディスク(DVD))、電子記憶媒体(例えば、ソリッドステートドライブ及びフラッシュメディア)、及び他の分散システムなどの非一時型媒体が挙げられる。
コンピュータプログラムを含むコンピュータ可読記憶媒体は、コンピューティングシステム610にロードされてもよい。次いで、コンピュータ可読記憶媒体上に記憶されるコンピュータプログラムの全て又は一部分は、システムメモリ616、並びに/又は記憶デバイス632及び633の種々の部分に記憶されてもよい。プロセッサ614によって実行される時、コンピューティングシステム610にロードされるコンピュータプログラムは、プロセッサ614に、本明細書で説明及び/若しくは例解される例示的な実施形態のうちの1つ以上の機能を実施させ得る、並びに/又は実施するための手段であり得る。更に、又は代替的に、本明細書で説明及び/又は例解される例示的な実施形態のうちの1つ以上は、ファームウェア及び/又はハードウェアに実装されてもよい。例えば、コンピューティングシステム610は、本明細書に開示される例示的な実施形態のうちの1つ以上を実装するように適合された特定用途向け集積回路(ASIC)として構成されてもよい。
図7は、クライアントシステム710、720、及び730、並びにサーバ740及び745が、ネットワーク750に連結され得る、例示的なネットワークアーキテクチャ700のブロック図である。上で詳述されるように、ネットワークアーキテクチャ700の全て又は一部分は、単独で、若しくは他の要素と組み合わせて、本明細書で開示される工程のうちの1つ以上(図3に例解される工程のうちの1つ以上など)を実施し得る、及び/又は実施するための手段であり得る。ネットワークアーキテクチャ700の全て又は一部分はまた、本開示に記載される他の工程及び特性を実施するために使用され得る、並びに/又はそれらを実施するための手段であり得る。
クライアントシステム710、720、及び730は概して、図6の例示的なコンピューティングシステム610などの任意のタイプ又は形態のコンピューティングデバイス又はシステムを表す。同様に、サーバ740及び745は概して、種々のデータベースサービスを提供する、及び/又はあるソフトウェアアプリケーションを実行するように構成される、アプリケーションサーバ若しくはデータベースサーバなどのコンピューティングデバイス又はシステムを表す。ネットワーク750は概して、イントラネット、WAN、LAN、PAN、又はインターネットを含む、任意の電気通信又はコンピュータネットワークを表す。一実施例において、クライアントシステム710、720、及び/若しくは730、並びに/又はサーバ740及び/若しくは745は、図1からのシステム100の全て又は一部分を含むことができる。
図7に例解されるように、1つ以上の記憶デバイス760(1)〜(N)は、サーバ740に直接的に取設され得る。同様に、1つ以上の記憶デバイス770(1)〜(N)は、サーバ745に直接的に取設され得る。記憶デバイス760(1)〜(N)及び記憶デバイス770(1)〜(N)は概して、データ及び/又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形態の記憶デバイス又は媒体を表す。ある実施形態において、記憶デバイス760(1)〜(N)及び記憶デバイス770(1)〜(N)は、ネットワークファイルシステム(NFS)、サーバメッセージブロック(SMB)、又は共通インターネットファイルシステム(CIFS)などの種々のプロトコルを使用して、サーバ740及び745と通信するように構成される、ネットワーク取設記憶(NAS)デバイスを表し得る。
サーバ740及び745はまた、記憶エリアネットワーク(SAN)ファブリック780に接続されてもよい。SANファブリック780は概して、複数の記憶デバイス間の通信を容易にすることが可能な任意のタイプ又は形態のコンピュータネットワーク又はアーキテクチャを表す。SANファブリック780は、サーバ740及び745と、複数の記憶デバイス790(1)〜(N)及び/又は知的記憶アレイ795との間の通信を容易にすることができる。SANファブリック780はまた、デバイス790(1)〜(N)及びアレイ795が、クライアントシステム710、720、及び730にローカルで取設されたデバイスとして現れるような様態で、ネットワーク750、並びにサーバ740及び745を介して、クライアントシステム710、720、及び730と、記憶デバイス790(1)〜(N)及び/又は知的記憶アレイ795との間の通信を容易にすることができる。記憶デバイス760(1)〜(N)及び記憶デバイス770(1)〜(N)と同様に、記憶デバイス790(1)〜(N)及び知的記憶アレイ795は概して、データ及び/又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形態の記憶デバイス又は媒体を表す。
ある実施形態において、かつ図6の例示的なコンピューティングシステム610を参照すると、図6の通信インターフェース622などの通信インターフェースは、各クライアントシステム710、720、及び730、並びにネットワーク750間の接続性を提供するために使用することができる。クライアントシステム710、720、及び730は、例えば、ウェブブラウザ又は他のクライアントソフトウェアを使用して、サーバ740又は745上の情報にアクセスすることが可能であり得る。かかるソフトウェアは、クライアントシステム710、720、及び730が、サーバ740、サーバ745、記憶デバイス760(1)〜(N)、記憶デバイス770(1)〜(N)、記憶デバイス790(1)〜(N)、又は知的記憶アレイ795によってホストされるデータにアクセスすることを可能にすることができる。図7は、データを交換するためのネットワーク(インターネットなど)の使用を描写するが、本明細書に説明及び/又は例解される実施形態は、インターネット又は任意の特定のネットワークに基づく環境に限定されない。
少なくとも1つの実施形態において、本明細書に開示される例示的な実施形態のうちの1つ以上の全て又は一部分は、コンピュータプログラムとしてコード化され得、サーバ740、サーバ745、記憶デバイス760(1)〜(N)、記憶デバイス770(1)〜(N)、記憶デバイス790(1)〜(N)、知的記憶アレイ795、又はこれらの任意の組み合わせにロードされ、これらによって実行され得る。本明細書に開示される少なくとも1つの例示的な実施形態の全て又は一部分は、コンピュータプログラムとしてコード化され、サーバ740に記憶され、サーバ745によって実行され、ネットワーク750にわたってクライアントシステム710、720、及び730に分散され得る。
上で詳述されるように、コンピューティングシステム610及び/又はネットワークアーキテクチャ700の1つ以上の構成要素は、単独で、又は他の要素と組み合わせて、実行時のアプリケーションメソッドを置き換えるための例示的な方法の1つ以上の工程を実施する、及び/又は実施するための手段であり得る。
先述の開示は、具体的なのブロック図、フローチャート、及び実施例を使用して種々の実施形態を記載するが、本明細書に説明及び/又は例解される各ブロック図の構成要素、フローチャートの工程、動作、及び/又は構成要素は、個別に及び/又は集合的に、広範なハードウェア、ソフトウェア、又はファームウェア(又はそれらの任意の組み合わせ)構成を使用して、実装され得る。加えて、他の構成要素内に含まれる構成要素のあらゆる開示は、多くの他のアーキテクチャが同じ機能を達成するために実装され得るため、本質的に例示的であると考慮されるべきである。
一部の実施例において、図1の例示的なシステム100の全て又は一部分は、クラウドコンピューティング又はネットワークに基づく環境の部分を表し得る。クラウドコンピューティング環境は、インターネットを介して種々のサービス及びアプリケーションを提供することができる。これらのクラウドに基づくサービス(例えば、サービスとしてのソフトウェア、サービスとしてのプラットフォーム、サービスとしての基盤など)は、ウェブブラウザ又は他のリモートインターフェースを通じてアクセス可能であり得る。本明細書で説明される種々の機能は、リモートデスクトップ環境又は任意の他のクラウドに基づくコンピューティング環境を通して提供されてもよい。
種々の実施形態において、図1の例示的なシステム100の全て又は一部分は、クラウドに基づくコンピューティング環境内のマルチテナンシーを容易にすることができる。換言すると、本明細書で説明されるソフトウェアモジュールは、本明細書で説明される機能のうちの1つ以上に対するマルチテナンシーを容易にするように、コンピューティングシステム(例えば、サーバ)を構成することができる。例えば、本明細書で説明されるソフトウェアモジュールのうちの1つ以上は、2つ以上のクライアント(例えば、顧客)が、サーバ上で実行しているアプリケーションを共有することを可能にするように、サーバをプログラムすることができる。このようにプログラムされたサーバは、複数の顧客(即ち、テナント)の間で、アプリケーション、オペレーティングシステム、処理システム、及び/又は記憶システムを共有することができる。本明細書で説明されるモジュールのうちの1つ以上はまた、1つの顧客が別の顧客のデータ及び/又は構成情報にアクセスすることができないように、各顧客に対して、マルチテナントアプリケーションのデータ及び/又は構成情報を分割することができる。
種々の実施形態によると、図1の例示的なシステム100の全て又は一部分は、仮想環境内で実装することができる。例えば、本明細書で説明されるモジュール及び/又はデータは、仮想機械内に存在し得る、及び/又はそこで実行し得る。本明細書で使用される際、「仮想機械」という語句は、概して、仮想機械マネージャ(例えば、ハイパーバイザ)によって、コンピューティングハードウェアから抽出される任意のオペレーティングシステム環境を指す。更に、又は代替的に、本明細書で説明されるモジュール及び/又はデータは、仮想化層内に存在し得る、及び/又はそこで実行し得る。本明細書で使用される際、「仮想化層」という語句は、概して、オペレーティングシステム環境を覆う、及び/又はそこから抽出される任意のデータ層及び/又はアプリケーション層を指す。仮想化層は、根底にある基本オペレーティングシステムの一部であるかのように仮想化層を提示する、ソフトウェア仮想化ソリューション(例えば、ファイルシステムフィルタ)によって管理され得る。例えば、ソフトウェア仮想化ソリューションは、最初に基本ファイルシステム及び/又はレジストリ内の位置に方向付けられる呼び出しを、仮想化層内の位置にリダイレクトし得る。
一部の実施例において、図1の例示的なシステム100の全て又は一部分は、モバイルコンピューティング環境の部分を表し得る。モバイルコンピューティング環境は、モバイル電話、タブレットコンピュータ、eブックリーダ、個人用デジタル補助装置、ウェアラブルコンピューティングデバイス(例えば、ヘッドマウントディスプレイを伴うコンピューティングデバイス、スマートウォッチなど)等を含む、広範なモバイルコンピューティングデバイスによって実装され得る。一部の実施例において、モバイルコンピューティング環境は、例えば、バッテリ電力への依存、任意の所与の時間での1つのみのフォアグラウンドアプリケーションの提示、リモート管理特性、タッチスクリーン特性、位置及び移動データ(例えば、グローバルポジショニングシステム、ジャイロスコープ、加速度計などによって提供される)、システムレベルの構成への修正を制限する、及び/又は第3者のソフトウェアが他のアプリケーションの挙動を検査する能力を限定する、アプリケーションのインストールを制限するように(例えば、認可されたアプリケーションストアからのみ生じるように)制御する等、制限されたプラットフォームを含む、1つ以上の個別の特性を有することができる。本明細書で説明される種々の機能は、モバイルコンピューティング環境に対して提供され得る、及び/又はモバイルコンピューティング環境と相互作用し得る。
加えて、図1の例示的なシステム100の全て又は一部分は、情報管理のための1つ以上のシステムの部分を表し得る、それと相互作用し得る、それによって生成されるデータを消費し得る、及び/又はそれによって消費されるデータを生成し得る。本明細書で使用される際、「情報管理」という語句は、データの保護、組織化、及び/又は記憶を指し得る。情報管理のためのシステムの例としては、限定することなく、記憶システム、バックアップシステム、アーカイバルシステム、複製システム、高可用性システム、データ検索システム、仮想化システム等が挙げられ得る。
一部の実施形態において、図1の例示的なシステム100の全て又は一部分は、情報セキュリティのための1つ以上のシステムの部分を表し得る、それによって保護されるデータを生成し得る、及び/又はそれと通信し得る。本明細書で使用される際、「情報セキュリティ」という語句は、保護されたデータへのアクセスの制御を指し得る。情報セキュリティのためのシステムの例としては、限定することなく、管理されたセキュリティサービスを提供するシステム、データ損失防止システム、同一性認証システム、アクセス制御システム、暗号化システム、ポリシーコンプライアンスシステム、侵入検出及び防止システム、電子情報開示システム等が挙げられ得る。
一部の実施例によると、図1の例示的なシステム100の全て又は一部分は、エンドポイントセキュリティのための1つ以上のシステムの部分を表し得る、それと通信し得る、及び/又はそれから保護を受け得る。本明細書で使用される際、「エンドポイントセキュリティ」という語句は、不正及び/若しくは違法な使用、アクセス、並びに/又は制御からのエンドポイントシステムの保護を指し得る。エンドポイント保護のためのシステムの例としては、限定することなく、アンチマルウェアシステム、ユーザ認証システム、暗号化システム、プライバシーシステム、スパムフィルタリングサービス等が挙げられ得る。
本明細書で説明及び/又は例解されるプロセスパラメータ及び工程の順序は、例として与えられるに過ぎず、所望に応じて変更することができる。例えば、本明細書で例解及び/又は説明される工程は、特定の順序で示される又は考察され得るが、これらの工程は、必ずしも例解又は考察される順序で実施される必要はない。本明細書で説明及び/又は例解される種々の例示的な方法はまた、本明細書で説明又は例解される工程のうちの1つ以上を省略し得るか、又は開示されるものに加えて、追加の工程を含み得る。
種々の実施形態が、完全に機能的なコンピューティングシステムの文脈において、本明細書で説明及び/又は例解されているが、これらの例示的な実施形態のうちの1つ以上は、実際に分散を実行するために使用される特定のタイプのコンピュータ可読記憶媒体に関わらず、様々な形態のプログラム製品として分散されてもよい。本明細書で開示される実施形態はまた、あるタスクを実施するソフトウェアモジュールを使用して実装されてもよい。これらのソフトウェアモジュールは、スクリプト、バッチ、又はコンピュータ可読記憶媒体上、若しくはコンピューティングシステム内に記憶することができる、他の実行可能なファイルを含んでもよい。一部の実施形態において、これらのソフトウェアモジュールは、本明細書で開示される例示的な実施形態のうちの1つ以上を実施するように、コンピューティングシステムを構成してもよい。
加えて、本明細書で説明されるモジュールのうちの1つ以上は、データ、物理的デバイス、及び/又は物理的デバイスの表示を1つのものから別のものへ変換してもよい。例えば、本明細書で列挙されるモジュールのうちの1つ以上は、変換されるべきアプリケーションを受信することができる、元のメソッドをラッパーメソッドで置き換えることによってアプリケーションを変換することができる、変換の結果を使用して元のメソッドを安全に実行することができる、元のメソッドの安全な実行の更なる結果をディスプレイデバイスに出力することができる、及び元のメソッドの安全な実行の追加の結果を記憶デバイスに記憶することができる。更に、又は代替的に、本明細書で列挙されるモジュールのうちの1つ以上は、コンピューティングデバイス上で実行すること、コンピューティングデバイス上にデータを記憶すること、及び/又はそうでなければコンピューティングデバイスと相互作用することによって、プロセッサ、揮発性メモリ、不揮発性メモリ、及び/又は物理的コンピューティングデバイスの任意の他の部分を、1つの形態から別のものへ変換することができる。
前述の説明は、当業者が、本明細書で開示される例示的な実施形態の種々の態様を最良に利用することを可能にするために提供されている。この例示的な説明は、包括的であること、又は開示されるいずれの正確な形態にも限定されることを意図するものではない。本開示の趣旨及び範囲から逸脱することなく、多くの修正形態及び変形形態が可能である。本明細書に開示される実施形態は、あらゆる点で例解的であり、限定的ではないと見なされるべきである。本開示の範囲を決定する際に添付の特許請求の範囲及びその均等物を参照するべきである。
別途記載のない限り、本明細書及び特許請求の範囲で使用される際、「a」又は「an」という用語は、「〜のうちの少なくとも1つ」を意味するとして解釈されるものとする。加えて、使用しやすくするために、本明細書及び特許請求の範囲で使用される際、「含む(including)」及び「有する(having)」という語は、「含む(comprising)」という語と同義的である。

Claims (20)

  1. 実行時のアプリケーションメソッドを置き換えるためのコンピュータ実装方法であって、前記方法の少なくとも一部分が、少なくとも1つのプロセッサを含むコンピューティングデバイスによって実施され、前記方法が、
    ソースメソッドで実行時に置き換えるように、標的メソッドを含む実行時のクラスベースのオブジェクト指向のアプリケーションを識別することと、
    前記標的メソッドを記載し、前記アプリケーション内の標的クラスによって参照される、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定することであって、前記標的メソッドデータ構造が、前記標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定することと、
    前記ソースメソッドを記載する実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することであって、前記ソースメソッドデータ構造が、前記ソースメソッドのメソッドコードへのソースコードポインタを含む、判定することと、
    前記ソースメソッドデータ構造の少なくとも一部分を、前記ソースメソッドデータ構造の前記ソースアドレスから、前記標的メソッドデータ構造の前記標的アドレスにコピーし、それにより、前記標的コードポインタを前記ソースコードポインタで置き換えることによって、前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正することと、を含む、方法。
  2. 前記ソースメソッドを記載する前記ソースメソッドデータ構造を参照するソースクラスを識別することと、
    前記ソースクラスが、私的な非ネイティブのプレースホルダメソッドを記載する、プレースホルダメソッドデータ構造を参照すると判定することと、
    前記ソースメソッドデータ構造の前記一部分を、前記標的アドレスにコピーする前に、前記標的メソッドデータ構造の少なくとも一部分を、前記標的メソッドデータ構造の前記標的アドレスから、前記プレースホルダメソッドデータ構造のプレースホルダアドレスにコピーし、それにより、前記ソースメソッドにおける使用のために、前記標的コードポインタを保存することと、を更に含む、請求項1に記載のコンピュータ実装方法。
  3. 前記ソースメソッドが、前記プレースホルダメソッドを呼び出すことによって、前記標的メソッドを実行させるための少なくとも1つの命令を含む、請求項2に記載のコンピュータ実装方法。
  4. 前記標的メソッドが、信頼できないものであり、
    前記ソースメソッドが、前記標的メソッドの安全でない使用を防止するように、少なくとも1つの命令を伴うラッパーメソッドを含む、請求項3に記載のコンピュータ実装方法。
  5. 前記標的クラスが初期化されていないと判定することと、
    前記ソースメソッドデータ構造の前記一部分をコピーする前に、前記標的クラスを初期化することと、を更に含む、請求項1に記載のコンピュータ実装方法。
  6. 前記ソースメソッドデータ構造をコピーする前に、前記標的クラスにおいて前記標的メソッドを解決することを更に含む、請求項1に記載のコンピュータ実装方法。
  7. 前記標的クラスにおいて前記標的メソッドを解決することが、
    前記標的クラスの参照テーブルのための前記標的メソッドのインデックスを識別することと、
    前記標的メソッドデータ構造の前記標的アドレスを、前記インデックスにおいて、解決されたメソッドテーブルに記憶することと、を含む、請求項6に記載のコンピュータ実装方法。
  8. 前記ソースメソッドの名前が、前記標的メソッドの名前に合致し、
    前記ソースメソッドのパラメータセットが、前記標的メソッドのパラメータセットに合致する、請求項1に記載のコンピュータ実装方法。
  9. 前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正することが、前記ソースクラスを再コンパイルすることなく、かつ前記標的クラスを再コンパイルすることなく、実行時の前記アプリケーションを修正することを含む、請求項1に記載のコンピュータ実装方法。
  10. 実行時のアプリケーションメソッドを置き換えるためのシステムであって、
    実行時にソースメソッドで置き換えるように、標的メソッドを含む、実行時のクラスベースのオブジェクト指向のアプリケーションを識別する、識別モジュールと、
    前記標的メソッドを記載し、前記アプリケーション内の標的クラスによって参照される、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定する、位置決定モジュールであって、前記標的メソッドデータ構造が、前記標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定モジュールと、
    前記ソースメソッドを記載する実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定する、判定モジュールであって、前記ソースメソッドデータ構造が、前記ソースメソッドのメソッドコードへのソースコードポインタを含む、判定モジュールと、
    前記ソースメソッドデータ構造の少なくとも一部分を、前記ソースメソッドデータ構造の前記ソースアドレスから、前記標的メソッドデータ構造の前記標的アドレスにコピーし、それにより、前記標的コードポインタを前記ソースコードポインタで置き換えることによって、前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正する、修正モジュールと、
    前記識別モジュール、前記位置決定モジュール、前記判定モジュール、及び前記修正モジュールを実行させるように構成される、少なくとも1つのプロセッサと、を含む、システム。
  11. 前記修正モジュールがまた、
    前記ソースメソッドを記載する、前記ソースメソッドデータ構造を参照する、ソースクラスを識別し、
    前記ソースクラスが、私的な非ネイティブのプレースホルダメソッドを記載する、プレースホルダメソッドデータ構造を参照すると判定し、
    前記ソースメソッドデータ構造の前記一部分を、前記標的アドレスにコピーする前に、前記標的メソッドデータ構造の少なくとも一部分を、前記標的メソッドデータ構造の前記標的アドレスから、前記プレースホルダメソッドデータ構造のプレースホルダアドレスにコピーし、それにより、前記ソースメソッドにおける使用のために、前記標的コードポインタを保存する、請求項10に記載のシステム。
  12. 前記ソースメソッドが、前記プレースホルダメソッドを呼び出すことによって、前記標的メソッドを実行させるように、少なくとも1つの命令を含む、請求項11に記載のシステム。
  13. 前記標的メソッドが、信頼できないものであり、
    前記ソースメソッドが、前記標的メソッドの安全でない使用を防止するように、少なくとも1つの命令を伴うラッパーメソッドを含む、請求項12に記載のシステム。
  14. 前記位置決定モジュールがまた、
    前記標的クラスが初期化されていないと判定し、
    前記ソースメソッドデータ構造の前記一部分をコピーする前に、前記標的クラスを初期化する、請求項10に記載のシステム。
  15. 前記位置決定モジュールがまた、前記ソースメソッドデータ構造をコピーする前に、前記標的クラスにおける前記標的メソッドを解決する、請求項10に記載のシステム。
  16. 前記位置決定モジュールが、
    前記標的クラスの参照テーブルのための前記標的メソッドのインデックスを識別することと、
    前記標的メソッドデータ構造の前記標的アドレスを、前記インデックスにおいて、解決されたメソッドテーブルに記憶することと、によって、前記標的クラス内の前記標的方法を解決する、請求項15に記載のシステム。
  17. 前記ソースメソッドの名前が、前記標的メソッドの名前に合致し、
    前記ソースメソッドのパラメータセットが、前記標的メソッドのパラメータセットに合致する、請求項10に記載のシステム。
  18. 前記修正モジュールが、前記ソースクラスを再コンパイルすることなく、かつ前記標的クラスを再コンパイルすることなく、前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正する、請求項10に記載のシステム。
  19. コンピューティングデバイスの少なくとも1つのプロセッサによって実行される時、前記コンピューティングデバイスに、
    実行時にソースメソッドで置き換えるように、標的メソッドを含む、実行時のクラスベースのオブジェクト指向のアプリケーションを識別することと、
    前記標的メソッドを記載し、前記アプリケーション内の標的クラスによって参照される、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定することであって、前記標的メソッドデータ構造が、前記標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定することと、
    前記ソースメソッドを記載する、実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することであって、前記ソースメソッドデータ構造が、前記ソースメソッドのメソッドコードへのソースコードポインタを含む、判定することと、
    前記ソースメソッドデータ構造の少なくとも一部分を、前記ソースメソッドデータ構造の前記ソースアドレスから、前記標的メソッドデータ構造の前記標的アドレスにコピーし、それにより、前記標的コードポインタを前記ソースコードポインタで置き換えることによって、前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正することと、を行わせる、1つ以上のコンピュータ可読命令を含む、非一時的コンピュータ可読記憶媒体。
  20. 前記1つ以上のコンピュータ可読命令が、前記コンピューティングデバイスに、
    前記ソースメソッドを記載する、前記ソースメソッドデータ構造を参照する、ソースクラスを識別することと、
    前記ソースクラスが、私的な非ネイティブのプレースホルダメソッドを記載する、プレースホルダメソッドデータ構造を参照すると判定することと、
    前記ソースメソッドデータ構造の前記一部分を、前記標的アドレスにコピーする前に、前記標的メソッドデータ構造の少なくとも一部分を、前記標的メソッドデータ構造の前記標的アドレスから、前記プレースホルダメソッドデータ構造のプレースホルダアドレスにコピーし、それにより、前記ソースメソッドにおける使用のために、前記標的コードポインタを保存することと、を更に行わせる、請求項19に記載の非一時的コンピュータ可読記憶媒体。
JP2016509142A 2013-04-24 2014-04-21 実行時のアプリケーションメソッドを置き換えるためのシステム及び方法 Active JP6166839B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/869,921 US9336384B2 (en) 2013-04-24 2013-04-24 Systems and methods for replacing application methods at runtime
US13/869,921 2013-04-24
PCT/US2014/034761 WO2014176150A1 (en) 2013-04-24 2014-04-21 Systems and methods for replacing application methods at runtime

Publications (2)

Publication Number Publication Date
JP2016515748A true JP2016515748A (ja) 2016-05-30
JP6166839B2 JP6166839B2 (ja) 2017-07-19

Family

ID=50771636

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016509142A Active JP6166839B2 (ja) 2013-04-24 2014-04-21 実行時のアプリケーションメソッドを置き換えるためのシステム及び方法

Country Status (4)

Country Link
US (1) US9336384B2 (ja)
EP (1) EP2989544A1 (ja)
JP (1) JP6166839B2 (ja)
WO (1) WO2014176150A1 (ja)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8458670B2 (en) * 2007-09-27 2013-06-04 Symantec Corporation Automatically adding bytecode to a software application to determine network communication information
US9645992B2 (en) 2010-08-21 2017-05-09 Oracle International Corporation Methods and apparatuses for interaction with web applications and web application data
US9722972B2 (en) 2012-02-26 2017-08-01 Oracle International Corporation Methods and apparatuses for secure communication
US9129112B2 (en) 2013-03-15 2015-09-08 Oracle International Corporation Methods, systems and machine-readable media for providing security services
CN104903905B (zh) 2013-03-15 2018-04-10 甲骨文国际公司 通过修改计算机应用的目标代码的用于计算机应用的安全服务管理
US9344422B2 (en) * 2013-03-15 2016-05-17 Oracle International Corporation Method to modify android application life cycle to control its execution in a containerized workspace environment
US9280660B2 (en) * 2013-03-15 2016-03-08 Cognizant Business Services Limited Mobile information management methods and systems
US9536090B2 (en) * 2013-05-26 2017-01-03 Check Point Software Technologies Ltd. Method of defending a computer from malware
US11354755B2 (en) 2014-09-11 2022-06-07 Intuit Inc. Methods systems and articles of manufacture for using a predictive model to determine tax topics which are relevant to a taxpayer in preparing an electronic tax return
CN106663018B (zh) * 2014-09-24 2020-09-15 甲骨文国际公司 修改移动设备应用生命周期的系统、方法、介质和设备
US9098715B1 (en) 2014-10-28 2015-08-04 Openpeak Inc. Method and system for exchanging content between applications
US9250891B1 (en) * 2014-10-28 2016-02-02 Amazon Technologies, Inc. Optimized class loading
US10096072B1 (en) 2014-10-31 2018-10-09 Intuit Inc. Method and system for reducing the presentation of less-relevant questions to users in an electronic tax return preparation interview process
US10255641B1 (en) 2014-10-31 2019-04-09 Intuit Inc. Predictive model based identification of potential errors in electronic tax return
US10223080B2 (en) * 2015-01-14 2019-03-05 Dynatrace Llc Method and system for automated, static instrumentation for applications designed for execution in environments with restricted resources
US10628894B1 (en) 2015-01-28 2020-04-21 Intuit Inc. Method and system for providing personalized responses to questions received from a user of an electronic tax return preparation system
US10176534B1 (en) 2015-04-20 2019-01-08 Intuit Inc. Method and system for providing an analytics model architecture to reduce abandonment of tax return preparation sessions by potential customers
US10740853B1 (en) 2015-04-28 2020-08-11 Intuit Inc. Systems for allocating resources based on electronic tax return preparation program user characteristics
US10740854B1 (en) 2015-10-28 2020-08-11 Intuit Inc. Web browsing and machine learning systems for acquiring tax data during electronic tax return preparation
US10937109B1 (en) 2016-01-08 2021-03-02 Intuit Inc. Method and technique to calculate and provide confidence score for predicted tax due/refund
CN105847288B (zh) * 2016-05-16 2019-09-27 珠海市魅族科技有限公司 一种验证码处理方法和装置
US10410295B1 (en) 2016-05-25 2019-09-10 Intuit Inc. Methods, systems and computer program products for obtaining tax data
US10230712B2 (en) 2016-09-12 2019-03-12 Microsoft Technology Licensing, Llc Binary experimentation on running web servers
CN107861747A (zh) * 2017-06-26 2018-03-30 平安普惠企业管理有限公司 产品更新方法、设备和计算机可读存储介质
CN110873820B (zh) * 2018-08-31 2022-04-26 宁波三星智能电气有限公司 一种基于面向对象的智能电能表显示方法
CN110362330B (zh) * 2019-07-18 2023-09-01 腾讯科技(深圳)有限公司 应用程序更新方法、装置、终端及存储介质
KR102113966B1 (ko) * 2019-11-25 2020-05-21 숭실대학교산학협력단 분석회피기법 우회 장치, 방법 및 이를 수행하기 위한 프로그램을 기록한 기록매체

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0259930A (ja) * 1988-08-26 1990-02-28 Hitachi Ltd プログラム変更方式
JPH10269061A (ja) * 1997-03-27 1998-10-09 Hitachi Ltd プログラムの更新方法
JP2004126863A (ja) * 2002-10-01 2004-04-22 Nippon Telegr & Teleph Corp <Ntt> オブジェクト管理装置とその方法、およびプログラム
US20090249368A1 (en) * 2008-03-25 2009-10-01 Microsoft Corporation Runtime Code Hooking
WO2011115655A1 (en) * 2010-03-15 2011-09-22 Symantec Corporation Systems and methods for providing network access control in virtual environments

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5727215A (en) * 1995-11-30 1998-03-10 Otis Elevator Company Method for replacing software modules utilizing a replacement address table
JPH10320205A (ja) * 1997-05-20 1998-12-04 Fujitsu Ltd 情報処理装置
US6892230B1 (en) * 1999-06-11 2005-05-10 Microsoft Corporation Dynamic self-configuration for ad hoc peer networking using mark-up language formated description messages
US7669238B2 (en) * 2000-06-21 2010-02-23 Microsoft Corporation Evidence-based application security
GB0414983D0 (en) * 2004-07-03 2004-08-04 Ibm A method for replacing code in a running object oriented program
US7788661B2 (en) * 2005-03-11 2010-08-31 International Business Machines Corporation Method and system for applying patches to a computer program concurrently with its execution
GB0517357D0 (en) 2005-08-25 2005-10-05 Corizon Ltd User interface generation
US8806469B2 (en) * 2011-02-22 2014-08-12 International Business Machines Corporation Runtime code replacement
RU2535175C2 (ru) * 2012-12-25 2014-12-10 Закрытое акционерное общество "Лаборатория Касперского" Система и способ обнаружения вредоносного программного обеспечения путем создания изолированной среды

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0259930A (ja) * 1988-08-26 1990-02-28 Hitachi Ltd プログラム変更方式
JPH10269061A (ja) * 1997-03-27 1998-10-09 Hitachi Ltd プログラムの更新方法
JP2004126863A (ja) * 2002-10-01 2004-04-22 Nippon Telegr & Teleph Corp <Ntt> オブジェクト管理装置とその方法、およびプログラム
US20090249368A1 (en) * 2008-03-25 2009-10-01 Microsoft Corporation Runtime Code Hooking
WO2011115655A1 (en) * 2010-03-15 2011-09-22 Symantec Corporation Systems and methods for providing network access control in virtual environments

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
山崎洋一: "特集1 これだけわかれば怖くない スマホリスク"気づき"のヒント Part2 対策に必要な情報を整理する", 日経NETWORK, vol. 第156号, JPN6016039260, 28 March 2013 (2013-03-28), JP, pages p.39 *
田中 哲、一杉裕志: "バイトコード編集によるJava言語の表明検査の制御", コンピュータソフトウェア, vol. 第18巻,第3号, JPN6016039259, 15 May 2001 (2001-05-15), JP, pages pp.34−39 *

Also Published As

Publication number Publication date
US9336384B2 (en) 2016-05-10
EP2989544A1 (en) 2016-03-02
WO2014176150A1 (en) 2014-10-30
JP6166839B2 (ja) 2017-07-19
US20140325664A1 (en) 2014-10-30

Similar Documents

Publication Publication Date Title
JP6166839B2 (ja) 実行時のアプリケーションメソッドを置き換えるためのシステム及び方法
US9729579B1 (en) Systems and methods for increasing security on computing systems that launch application containers
JP5978365B2 (ja) 仮想環境においてネットワークアクセス制御を行うシステムおよび方法
US9223966B1 (en) Systems and methods for replicating computing system environments
US9407664B1 (en) Systems and methods for enforcing enterprise data access control policies in cloud computing environments
JP6918212B2 (ja) 悪意のあるアプリケーションがアプリケーションサービスを活用することを防止するためのシステム及び方法
JP6196393B2 (ja) プリインストールアプリケーションのスキャンを最適化するためのシステム及び方法
US9703956B1 (en) Systems and methods for categorizing virtual-machine-aware applications for further analysis
JP6122555B2 (ja) 危殆化されている秘密鍵を識別するためのシステム及び方法
US9111089B1 (en) Systems and methods for safely executing programs
US9509697B1 (en) Systems and methods for authorizing attempts to access shared libraries
US8910155B1 (en) Methods and systems for injecting endpoint management agents into virtual machines
US11204992B1 (en) Systems and methods for safely executing unreliable malware
US9147066B1 (en) Systems and methods for providing controls for application behavior
US10803167B1 (en) Systems and methods for executing application launchers
US9659156B1 (en) Systems and methods for protecting virtual machine program code
US10678917B1 (en) Systems and methods for evaluating unfamiliar executables
US10298681B1 (en) Systems and methods for rerouting data sent between application containers and storage containers
US9552481B1 (en) Systems and methods for monitoring programs
US9311481B1 (en) Systems and methods for classifying package files as trojans
US9887979B1 (en) Systems and methods for enabling users to launch applications without entering authentication credentials
US9646157B1 (en) Systems and methods for identifying repackaged files
US9323518B1 (en) Systems and methods for modifying applications without user input
US10255435B1 (en) Systems and methods for establishing a reputation for related program files
US11068611B1 (en) Systems and methods for preventing data loss from data containers

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151016

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151016

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20151020

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160915

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161018

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161226

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170606

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170623

R150 Certificate of patent or registration of utility model

Ref document number: 6166839

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250