(57)【特許請求の範囲】
【請求項１】
1つまたは複数のプロセッサと、前記1つまたは複数のプロセッサによって実行される1つまたは複数のプログラムを記憶するためのメモリとを有するモバイル通信端末で実行されるアプリケーションプログラミングインターフェース(API)インターセプションの方法であって、
プロセスのプロセス識別子に基づいて仮想マシンにおけるAPIの前記プロセスのステータスを監視するステップと、
前記APIの前記プロセスが起動されると、前記プロセスの前記プロセス識別子に基づいて前記メモリから前記APIの前記プロセスに対応する仮想マシンインスタンスを取得するステップと、
前記APIの識別子情報に基づいて前記仮想マシンインスタンスにおける前記APIの機能の第1のアドレスを識別するステップと、
前記第1のアドレスを置換機能の第2のアドレスと置き換えるステップであり、前記APIが第1のコンピュータ言語で記述されており、前記置換機能が第2のコンピュータ言語で記述されている、ステップと、
前記置換機能を実行するステップと
を含むアプリケーションプログラミングインターフェース(API)インターセプションの方法。
【請求項２】
前記プロセスの前記プロセス識別子に基づいて仮想マシンにおける前記プロセスのステータスを監視するステップが、
前記仮想マシンが前記プロセス識別子に関連付けられたプロセスを実行し始めることを検出すると、前記プロセスの起動を検出するステップ
を含む、請求項1に記載の方法。
【請求項３】
前記APIの前記識別子情報が、前記APIが属するクラスのクラス識別子と、前記APIの前記機能の機能識別子とを含む、請求項1に記載の方法。
【請求項４】
前記APIの前記識別子情報に基づいて前記仮想マシンインスタンスにおける前記APIの機能の第1のアドレスを識別するステップが、
前記APIが属するクラスのクラス構造を、前記クラス識別子に基づいて前記仮想マシンインスタンスから取得するステップと、
前記APIの前記機能の前記機能識別子に基づいて前記APIの前記機能の機能構造を取得するステップと
を含む、請求項3に記載の方法。
【請求項５】
前記第1のアドレスが、前記APIの前記機能の前記機能構造に記憶される、請求項4に記載の方法。
【請求項６】
前記第2のコンピュータ言語がCまたはC++である、請求項1に記載の方法。
【請求項７】
プロセッサと、
メモリと、
前記メモリに記憶され、前記プロセッサによって実行される1つまたは複数のプログラムであり、前記1つまたは複数のプログラムが、
プロセスのプロセス識別子に基づいて仮想マシンにおけるAPIの前記プロセスのステータスを監視するための命令と、
前記APIの前記プロセスが起動されると、前記プロセスの前記プロセス識別子に基づいて前記メモリから前記APIの前記プロセスに対応する仮想マシンインスタンスを取得するための命令と、
前記APIの識別子情報に基づいて前記仮想マシンインスタンスにおける前記APIの機能の第1のアドレスを識別するための命令と、
前記第1のアドレスを置換機能の第2のアドレスと置き換えるための命令であり、前記APIが第1のコンピュータ言語で記述されており、前記置換機能が第2のコンピュータ言語で記述されている、命令と、
前記置換機能を実行するための命令と
を含むプログラムと
を含むモバイルデバイス。
【請求項８】
前記プロセスの前記プロセス識別子に基づいて仮想マシンにおける前記プロセスのステータスを監視するための命令が、
前記仮想マシンが前記プロセス識別子に関連付けられたプロセスを実行し始めることを検出すると、前記プロセスの起動を検出するための命令
を含む、請求項7に記載のモバイルデバイス。
【請求項９】
前記APIの前記識別子情報が、前記APIが属するクラスのクラス識別子と、前記APIの前記機能の機能識別子とを含む、請求項7に記載のモバイルデバイス。
【請求項１０】
前記APIの前記識別子情報に基づいて前記仮想マシンインスタンスにおける前記APIの機能の第1のアドレスを識別するための命令が、
前記APIが属するクラスのクラス構造を、前記APIが属するクラスのクラス識別子に従って前記仮想マシンインスタンスから取得するための命令と、
前記APIの前記機能の機能識別子に従って前記APIの前記機能の機能構造を取得するための命令と
を含む、請求項8に記載のモバイルデバイス。
【請求項１１】
前記第1のアドレスが、前記APIの前記機能の前記機能構造に記憶される、請求項10に記載のモバイルデバイス。
【請求項１２】
前記第2のコンピュータ言語がCまたはC++である、請求項7に記載のモバイルデバイス。
【請求項１３】
ハンドヘルドコンピュータであって、
1つまたは複数のプロセッサと、
1つまたは複数のプログラムを記憶するメモリであり、前記1つまたは複数のプログラムが前記1つまたは複数のプロセッサによって実行されると、前記ハンドヘルドコンピュータに、
プロセスのプロセス識別子に基づいて仮想マシンにおけるAPIの前記プロセスのステータスを監視させ、
前記APIの前記プロセスが起動されると、前記プロセスの前記プロセス識別子に基づいて前記メモリから前記APIプロセスに対応する仮想マシンインスタンスを取得させ、
データベースに記憶された第1の組の基準に基づいて、前記APIがインターセプトされるべきかどうかを判断させ、
前記APIがインターセプトされるべきである場合、前記データベースに記憶された第2の組の基準に基づいて置換機能を選択させ、
前記APIの識別子情報に基づいて前記仮想マシンインスタンスにおける前記APIの機能の第1のアドレスを識別させ、
前記第1のアドレスを前記置換機能の第2のアドレスと置き換えさせ、前記APIが第1のコンピュータ言語で記述されており、前記置換機能が第2のコンピュータ言語で記述されており、
前記置換機能を実行させる
メモリと
を含むハンドヘルドコンピュータ。
【請求項１４】
前記1つまたは複数のプログラムがコンピュータセキュリティソフトウェアアプリケーションの一部分である、請求項13に記載のハンドヘルドコンピュータ。
【請求項１５】
前記データベースがウィルスデータベースを含む、請求項13に記載のハンドヘルドコンピュータ。
【請求項１６】
前記第1の組の基準が、前記データベースにおけるソフトウェアアプリケーションの登録された情報が前記ソフトウェアアプリケーションで呼び出される前記APIと互換性を持つかどうかを含む、請求項13に記載のハンドヘルドコンピュータ。
【請求項１７】
前記第2の組の基準が、前記APIが呼び出されるソフトウェアアプリケーションの登録された情報を含む、請求項13に記載のハンドヘルドコンピュータ。
【請求項１８】
前記APIの前記識別子情報が、前記APIが属するクラスのクラス識別子と、前記APIの前記機能の機能識別子とを含む、請求項13に記載のハンドヘルドコンピュータ。
【請求項１９】
前記APIの前記識別子情報に基づいて前記仮想マシンインスタンスにおける前記APIの前記機能の前記第1のアドレスを識別させることが、
前記APIが属する前記クラスのクラス構造を、前記クラス識別子に基づいて前記仮想マシンインスタンスから取得させることと、
前記APIの前記機能識別子から前記APIの前記機能の機能構造を取得させることと
を含む、請求項18に記載のハンドヘルドコンピュータ。
【請求項２０】
前記第1のアドレスが、前記APIの前記機能の前記機能構造に記憶される、請求項19に記載のハンドヘルドコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、その全体が参照により組み込まれる、2012年7月20日に出願された「METHOD、DEVICE、AND MOBILE TERMINAL FOR API INTERCEPTION」という名称の中国特許出願第201210252551.8号の優先権を主張する。
【０００２】
開示された実装形態は、一般に、モバイル端末の分野に関し、より詳細には、アプリケーションプログラミングインターフェース(API)インターセプションの方法およびデバイス、ならびにモバイル端末に関する。
【背景技術】
【０００３】
Android(アンドロイド)システムの開発が急速に進むにつれて、ますます多くの端末がAndroidシステムを使用している。Androidシステムは、オープンソースコードのシステムである。アプリケーションは、Androidシステムを使用する端末にインストールされ得、Androidシステムは、アプリケーションの実行環境を提供する。
【０００４】
現在、ベンダーがAndroidシステムを使用する端末を製造するとき、アプリケーションは、その端末に直接組み込まれ得る。ユーザは、ユーザの必要に従って、端末に他のアプリケーションをインストールすることもできる。これらのアプリケーションはすべて、対応するベンダーによって提供され、各アプリケーションが開発された後、各アプリケーションの機能は固定され、アプリケーションの機能は、拡張したり修正することができない。
【発明の概要】
【課題を解決するための手段】
【０００５】
アプリケーションの機能を拡張または修正するために、本発明は、機能インターセプションの方法およびデバイスを提供する。技術的なソリューションは、以下の通り記載されている。
【０００６】
アプリケーションプログラミングインターフェース(API)インターセプションの方法が提供され、方法は、
APIプロセスのプロセス識別子に基づいて、システムに対応する仮想マシンにおけるAPIプロセスをリアルタイムに監視するステップと、
APIプロセスが起動されると、APIプロセスのプロセス識別子に従ってメモリからAPIプロセスに対応する仮想マシンインスタンスを取得するステップと、
インターセプトされるAPIの識別子情報に従って、第1のコンピュータ言語で記述されている第1のAPIのアドレスを、第2のコンピュータ言語で記述されており、APIプロセスに対応する仮想マシンインスタンスからの第1のAPIに対応する第2のAPIの記憶されたアドレスと置き換えるステップであり、第2の言語が第1の言語とは異なる、ステップと、
第2の機能を介してAPIプロセスの制御を実施するステップと
を含む。
【０００７】
APIプロセスのプロセス識別子に基づいて、システムに対応する仮想マシンにおけるAPIプロセスをリアルタイムに監視するステップは、システムに対応する仮想マシンがAPIプロセスのプロセス識別子に対応するAPIプロセスを実行し始めることが検出されると、APIプロセスが起動されたことを検出するステップを含む。
【０００８】
インターセプトされるAPIの識別子情報は、少なくとも、インターセプトされるAPIが属するクラスのクラス識別子およびインターセプトされるAPIの機能の機能識別子を含む。
【０００９】
インターセプトされるAPIの識別子情報に従って、第1のコンピュータ言語で記述されている第1のAPIのアドレスを、第2のコンピュータ言語で記述されており、APIプロセスに対応する仮想マシンインスタンスからの第1のAPIに対応する第2のAPI(または置換機能)の記憶されたアドレスと置き換えるステップは、クラス識別子に従って、APIプロセスに対応する仮想マシンインスタンスから第1のAPIが属するクラスに対応するクラス構造を取得するステップと、第1のAPIの機能識別子に従って、クラス構造から第1のAPIに対応する機能構造を取得するステップと、機能構造に記憶された第1のAPIのアドレスを第2のAPI(または置換機能)の記憶されたアドレスと置き換えるステップとを含む。
【００１０】
第2のコンピュータ言語は、C言語またはC++言語である。
【００１１】
アプリケーションプログラミングインターフェース(API)インターセプションのデバイスが提供され、デバイスは、APIプロセスのプロセス識別子に基づいて、システムに対応する仮想マシンにおけるAPIプロセスをリアルタイムに監視するように構成されたモニタモジュールと、APIプロセスが起動されると、APIプロセスのプロセス識別子に従ってメモリからAPIプロセスに対応する仮想マシンインスタンスを取得するように構成された取得モジュールと、インターセプトされるAPIの識別子情報に従って、第1のコンピュータ言語で記述されている第1のAPIのアドレスを、第2のコンピュータ言語で記述されており、APIプロセスに対応する仮想マシンインスタンスからの第1のAPIに対応する第2のAPI(置換機能)の記憶されたアドレスと置き換え、第2の言語が第1の言語とは異なり、第2の機能を介してAPIプロセスの制御を実施するように構成された置換モジュールとを含む。
【００１２】
モニタモジュールは、具体的には、システムに対応する仮想マシンがAPIプロセスのプロセス識別子に対応するAPIプロセスを実行し始めることが検出されると、APIプロセスが起動されたことを検出するように構成される。
【００１３】
インターセプトされるAPIの識別子情報は、少なくとも、インターセプトされるAPIが属するクラスのクラス識別子およびインターセプトされるAPIの機能の機能識別子を含む。
【００１４】
置換モジュールは、クラス識別子に従って、APIプロセスに対応する仮想マシンインスタンスから第1のAPIが属するクラスに対応するクラス構造を取得するように構成された第1の取得ユニットと、第1のAPIの機能識別子に従って、クラス構造から第1のAPIに対応する機能構造を取得するように構成された第2の取得ユニットと、機能構造に記憶された第1のAPIのアドレスを第2のAPI(または置換機能)の記憶されたアドレスと置き換えるように構成された置換ユニットとを含む。
【００１５】
本発明の実施形態では、APIプロセスのプロセス識別子に従って、システムに対応する仮想マシンにおいて、APIプロセスがリアルタイムに監視され、APIプロセスが起動されたことが検出されると、APIプロセスに対応する仮想マシンインスタンスがAPIプロセスのプロセス識別子に従ってメモリから取得され、第1のAPIの識別子情報に従って、インターセプトされる機能のアドレスが、APIプロセスに対応する仮想マシンインスタンスからの第2のAPI(置換機能)に対応する記憶されたアドレスと置き換えられて、APIがインターセプトされるようにする。
【００１６】
いくつかの実施形態によれば、1つまたは複数のプロセッサと、1つまたは複数のプロセッサによって実行される1つまたは複数のプログラムを記憶するためのメモリとを有するモバイル通信端末で実行されるアプリケーションプログラミングインターフェース(API)インターセプションの方法は、APIのプロセス識別子に基づいて仮想マシンにおけるAPIのプロセスのステータスを監視するステップと、APIのプロセスが起動されると、APIのプロセス識別子に基づいてメモリからAPIのプロセスに対応する仮想マシンインスタンスを取得するステップと、APIのプロセス識別子に基づいて仮想マシンインスタンスにおけるAPIの機能の第1のアドレスを識別するステップと、第1のアドレスを置換機能の第2のアドレスと置き換えるステップであり、APIが第1のコンピュータ言語で記述されており、置換機能が第2のコンピュータ言語で記述されている、ステップと、置換機能を実行するステップとを含む。
【００１７】
いくつかの実施形態によれば、モバイルデバイスは、プロセッサと、メモリと、メモリに記憶され、プロセッサによって実行される1つまたは複数のプログラムであり、1つまたは複数のプログラムが、APIのプロセス識別子に基づいて仮想マシンにおけるAPIのプロセスのステータスを監視するための命令と、APIのプロセスが起動されると、APIのプロセス識別子に基づいてメモリからAPIのプロセスに対応する仮想マシンインスタンスを取得するための命令と、APIのプロセス識別子に基づいて仮想マシンインスタンスにおけるAPIの機能の第1のアドレスを識別するための命令と、第1のアドレスを置換機能の第2のアドレスと置き換えるための命令であり、APIが第1のコンピュータ言語で記述されており、置換機能が第2のコンピュータ言語で記述されている、命令と、置換機能を実行するための命令とを含むプログラムとを含む。
【００１８】
いくつかの実施形態によれば、ハンドヘルドコンピュータは、1つまたは複数のプロセッサと、1つまたは複数のプログラムを記憶するメモリとを備え、1つまたは複数のプログラムは、1つまたは複数のプロセッサによって実行されると、ハンドヘルドコンピュータに、APIのプロセス識別子に基づいて仮想マシンにおけるAPIのプロセスのステータスを監視させ、APIのプロセスが起動されると、APIのプロセス識別子に基づいてメモリからAPIプロセスに対応する仮想マシンインスタンスを取得させ、データベースに記憶された第1の組の基準に基づいて、APIがインターセプトされるべきかどうかを判断させ、APIがインターセプトされるべきである場合、データベースに記憶された第2の組の基準に基づいて置換機能を選択させ、APIのプロセス識別子に基づいて仮想マシンインスタンスにおけるAPIの機能の第1のアドレスを識別させ、第1のアドレスを置換機能が配置される第2のアドレスと置き換えさせ、APIが第1のコンピュータ言語で記述されており、置換機能が第2のコンピュータ言語で記述されており、置換機能を実行させて、APIがインターセプトされるようにする。
【００１９】
本発明の上述した実装形態ならびに追加の実装形態は、図面を併せ読めば、本発明の様々な態様の以下の詳細な説明の結果として、より明らかに理解される。類似の参照番号は、図面のいくつかの図にわたって対応する部分を指す。
【図面の簡単な説明】
【００２０】
【図１】いくつかの実施形態による、APIインターセプションの方法のフローチャートである。
【図２】いくつかの実施形態による、APIインターセプションの方法のフローチャートである。
【図３】いくつかの実施形態による、第1のAPIインターセプションのデバイスの概略構造図である。
【図４】いくつかの実施形態による、第2のAPI(または置換機能)インターセプションのデバイスの概略構造図である。
【図５】いくつかの実施形態による、APIインターセプションの方法のフローチャートである。
【図６】いくつかの実施形態による、モバイルコンピューティングデバイス(たとえば、ラップトップまたはスマートフォン)の例示的な実装形態の図である。
【発明を実施するための形態】
【００２１】
本発明の目的、技術的ソリューション、および利点をより理解できるようにするために、以下は、添付の図面を参照して本発明の実施形態をさらに詳しく説明する。
【００２２】
Androidシステムで実行されるアプリケーションは、1つまたは複数のクラスを含み、各クラスは、1つまたは複数のAPIを含む。アプリケーションによって実施される機能は、複数のステップに分割され得、各ステップは、1つまたは複数のAPIによって実施される。Androidシステムにおけるアプリケーションは、Androidシステムに対応する仮想マシンにおいて実行される。アプリケーションが起動されると、Androidシステムは、アプリケーションを実行するために使用されるプロセスを作成し、プロセスのために端末のメモリにおいて仮想マシンインスタンスを確立する。仮想マシンインスタンスは構造体であり、仮想マシンインスタンスは、プロセスのプロセス識別子を使用することによって識別され、仮想マシンインスタンスは、少なくとも、アプリケーションに含まれる各クラスに対応するクラス構造を含み、パラメータのタイプおよびアプリケーションに含まれるパラメータの数をさらに含むことができる。各クラスに対応するクラス構造は、各クラスのクラス識別子を使用することによって識別される。任意のクラスについて、クラスに対応するクラス構造は、少なくとも、クラスに含まれる各APIに対応する機能構造を含む。各APIに対応する機能構造は、各APIの機能識別子を使用することによって識別される。任意のAPIについて、APIに対応する機能構造は、少なくとも、APIのアドレスを含む。アドレスは記憶スペースに対応し、記憶スペースは、APIを実施する特定のコードを記憶するために使用され、記憶スペースは、端末の磁気ディスク上のスペースである。
【００２３】
プロセスが起動され、あるAPIが実行される必要が生じた後、プロセスは、APIが属するクラスのクラス識別子に従って、プロセスに対応する仮想マシンインスタンスからクラスに対応するクラス構造を取得し、APIの機能の機能識別子に従って、クラスに対応するクラス構造から、APIに対応する機能構造を取得し、機能構造からAPIのアドレスを取得し、アドレスに従って、APIを実施するコードを呼び出し、APIを実施するコードを実行して、APIが実行されるようにする。
【００２４】
アプリケーションによって実施される機能は、複数のステップに分割され得、各ステップは、1つまたは複数のAPIによって実施される。アプリケーションの機能が修正または拡張される必要があるとき、アプリケーションに含まれる特定のステップまたはいくつかの特定のステップが修正されて、アプリケーションの機能が修正または拡張されるようにし得る。これらのステップは対応するAPIによって実施され、これらのステップを実施するAPIが修正され、したがって、これらのステップが修正され得る。説明の便宜上、これらのステップを実施するAPIは、第1のAPIと呼ばれ、第1のAPIは、第1のコンピュータ言語で記述されているAPIであり、第1のコンピュータ言語は、Java（登録商標）言語でもよい。
【００２５】
実施形態において、技術者は、前もって第2のAPI(または置換機能)を開発することができる。第2のAPI(または置換機能)は、修正されたステップを実施することができる。置換機能は、API、または第1のAPIもしくは第1のAPIの機能を置き換えるために開発される任意の他の機能とすることができる。次いで、第1のAPIは、アプリケーションを実行するために使用されるプロセスによって呼び出され、本発明における方法によってインターセプトされ、技術者によって開発される第2のAPI(または置換機能)は、アプリケーションを実行するために使用されるプロセスによって呼び出されて、アプリケーションの機能が修正または拡張されるようにする。第2のAPI(または置換機能)は、第2のコンピュータ言語で記述されているAPIであり、第2のコンピュータ言語は、C言語、C++言語などである。
【００２６】
Androidシステムにおいて実行されるアプリケーションに含まれるクラスはJavaクラスでもよく、クラスに含まれるAPIはJava APIでもよいことに留意されたい。
【００２７】
図1は、いくつかの実施形態による、APIインターセプションの方法のフローチャートである。
【００２８】
図1に示されるように、本発明の一実施形態は、APIインターセプションの方法を提供し、この方法は、以下を含む。
【００２９】
ステップ101: APIプロセスのプロセス識別子に基づいて、システムに対応する仮想マシンにおけるAPIプロセスをリアルタイムに監視する。
【００３０】
ステップ102: APIプロセスが起動されると、APIプロセスのプロセス識別子に従ってメモリからAPIプロセスに対応する仮想マシンインスタンスを取得する。
【００３１】
ステップ103: インターセプトされるAPIの識別子情報に従って、APIプロセスに対応する仮想マシンインスタンスにおける第1のコンピュータ言語で記述されている第1のAPIのコードを指すアドレスを、第1のAPIに対応し、第2のコンピュータ言語で記述されている第2のAPI(または置換機能)のコードを指す記憶されたアドレスと置き換えることであり、第2の言語は第1の言語と異なる。
【００３２】
第2の機能を介してAPIプロセスの制御が実施される。
【００３３】
本発明の実施形態では、APIプロセスのプロセス識別子に従って、システムに対応する仮想マシンにおいて、APIプロセスがリアルタイムに監視され、APIプロセスが起動されたことが検出されると、APIプロセスに対応する仮想マシンインスタンスがAPIプロセスのプロセス識別子に従ってメモリから取得され、第1のAPIの識別子情報に従って、インターセプトされる機能のアドレスが、APIプロセスに対応する仮想マシンインスタンスからの第2のAPI(置換機能)に対応する記憶されたアドレスと置き換えられて、APIがインターセプトされるようにする。
【００３４】
図2は、いくつかの実施形態による、APIインターセプションの方法のフローチャートである。
【００３５】
本発明の一実施形態は、機能インターセプションの方法を提供する。
【００３６】
ターゲットアプリケーションとは、機能の拡張または機能の修正が実行される必要があるアプリケーションである。ターゲットアプリケーションに含まれる特定のステップまたはいくつかの特定のステップが修正されて、ターゲットアプリケーションの機能が拡張または修正されるようにし得る。これらのステップを実施するために使用されるAPIは、第1のAPIである。さらに、技術者は、前もって第2のAPI(または置換機能)を開発する。第2のAPI(または置換機能)は、1つまたは複数の修正されたステップを実施するために使用される。ターゲットアプリケーションを実行するために使用されるAPIプロセスによって呼び出されるインターセプトされる機能が本実施形態で提供される方法によってインターセプトされ、技術者によって前もって開発される第2のAPI(または置換機能)がAPIプロセスによって呼び出されて、ターゲットアプリケーションの機能が拡張または修正されるようにする。図2を参照すると、方法は以下を含む。
【００３７】
ステップ201: APIプロセスのプロセス識別子に基づいて、Androidシステムに対応する仮想マシンにおいてターゲットアプリケーションを実行するAPIプロセスをリアルタイムに監視し、APIプロセスが起動されたことが検出されると、ステップ202を実行する。
【００３８】
Androidシステムにおけるアプリケーションは、Androidシステムに対応する仮想マシンを介して実行される。ターゲットアプリケーションが起動されると、Androidシステムは、ターゲットアプリケーションを実行するために使用されるAPIプロセスを作成し、APIプロセスのための仮想マシンインスタンスを確立する。仮想マシンインスタンスは構造体であり、仮想マシンインスタンスは、APIプロセスのプロセス識別子を使用することによって識別され、APIプロセスに対応する仮想マシンインスタンスは、少なくとも、ターゲットアプリケーションに含まれる各クラスに対応するクラス構造を含む。各クラスに対応するクラス構造は、各クラスのクラス識別子を使用することによって識別される。任意のクラスについて、クラスに対応するクラス構造は、少なくとも、クラスに含まれる各APIに対応する機能構造を含む。各APIに対応する機能構造は、各APIの機能識別子を使用することによって識別される。任意のAPIについて、APIに対応する機能構造は、少なくとも、APIのアドレスを含む。次いで、APIプロセスが起動され、APIプロセスは、Androidシステムに対応する仮想マシンに配置され、仮想マシンはAPIプロセスを実行する。
【００３９】
APIプロセスのプロセス識別子は、前もって技術者によって構成され、APIプロセスのプロセス識別子は、APIプロセスの名前でもよく、APIプロセスの名前は、ターゲットアプリケーションの名前でもよい。
【００４０】
このステップは、具体的には、前もって構成されたAPIプロセスのプロセス識別子に従って、Androidシステムに対応する仮想マシンをリアルタイムに監視し、Androidシステムに対応する仮想マシンがAPIプロセスのプロセス識別子に対応するAPIプロセスを実行し始めたことが検出されると、APIプロセスが起動されたことを検出するステップであり得る。
【００４１】
たとえば、電話の呼出しに使用されるアプリケーションは、Androidシステムによって提供されるアプリケーションであり、呼出しに使用されるアプリケーションは、被呼番号に従ってダイヤル呼出しする第1のステップと、発呼者を被呼者に接続する第2のステップとの2つのステップを含む。第1のステップは、ダイヤル呼出しを実施するために使用されるAPIによって実施され得、第2のステップは、呼出しを接続するために使用されるAPIによって実施され得る。さらに、呼出しに使用されるアプリケーションが呼出しに使用されるクラスを含み、呼出しに使用されるクラスは、ダイヤル呼出しを実施するために使用されるAPI、および呼出しを接続するために使用されるAPIを含むことに留意されたい。
【００４２】
本実施形態では、ユーザが被呼番号をダイヤルするために呼出しに使用されるアプリケーションを使用すると、被呼者の地理的位置が表示され得るように、呼出しに使用されるアプリケーションによって実施される機能が拡張される必要があると仮定される。したがって、呼出しに使用されるアプリケーションは、ターゲットアプリケーションであり、ターゲットアプリケーションに含まれる第1のステップは、修正される必要があり、第1のAPIは、第1のステップを実施するダイヤル呼出しを実施するために使用されるAPIである。技術者は、前もって第2のAPI(または置換機能)を開発する。第2のAPI(または置換機能)は、修正された第1のステップを実施するために使用され、すなわち、第2のAPI(または置換機能)は、被呼番号がダイヤルされると、被呼者の地理的な位置を表示することができる。
【００４３】
Androidシステムにおけるターゲットアプリケーションが起動されると、Androidシステムは、ターゲットアプリケーションを実行するために使用されるAPIプロセスを作成し、APIプロセスのために端末のメモリにおいてTable1(表1)に示される仮想マシンインスタンスを確立する。仮想マシンインスタンスは、APIプロセスのプロセス識別子ProcessID1を使用して識別され、仮想マシンインスタンスは、呼出しに使用されるクラスに対応するクラス構造を含む。クラス構造は、呼出しに使用されるクラスのクラス識別子ClassID1を使用して識別され、クラス構造は、ダイヤル呼出しを実施するために使用されるAPIに対応する機能構造、および呼出しを接続するために使用されるAPIに対応する機能構造を含む。ダイヤル呼出しを実施するために使用されるAPIに対応する機能構造は、ダイヤル呼出しを実施するために使用されるAPIの機能識別子FunctionID1を使用して識別され、機能構造は、ダイヤル呼出しを実施するために使用されるAPIに対応するアドレスAddress1を含む。呼出しを接続するために使用されるAPIに対応する機能構造は、呼出しを接続するために使用されるAPIの機能識別子FunctionID2を使用して識別され、機能構造は、呼出しを接続するために使用されるAPIに対応するアドレスAddress2を含む。
【００４４】
【表１】
0005945074.tif 000002
【００４５】
技術者は、前もって第2のAPI(または置換機能)を開発し、第2のAPI(または置換機能)のアドレスは、Address2である。それに対応して、Androidシステムに対応する仮想マシンは、APIプロセスのプロセス識別子ProcessID1に従って、リアルタイムに監視され、APIプロセスが仮想マシンにおいて実行し始めたことが検出されると、APIプロセスが起動されると決定される。
【００４６】
ステップ202: APIプロセスのプロセス識別子に従ってモバイル端末におけるメモリからAPIプロセスに対応する仮想マシンインスタンスを取得する。
【００４７】
たとえば、APIプロセスに対応し、Table1(表1)に示される仮想マシンインスタンスは、APIプロセスのプロセス識別子ProcessID1に従って端末におけるメモリから取得される。
【００４８】
ステップ203: 第1のAPIの識別子情報に従って、APIプロセスに対応する仮想マシンインスタンスから第1のAPIに関連したアドレスを取得し、第1のAPIの識別子情報が、第1のAPIが属するクラスのクラス識別子および第1のAPIの機能の機能識別子を含む。
【００４９】
技術者は、前もって、第1のAPIの識別子情報が、第1のAPIが属するクラスのクラス識別子および第1のAPIの機能識別子を含むように構成する。具体的には、第1のAPIが属するクラスのクラス識別子に従って、第1のAPIが属するクラスに対応するクラス構造は、APIプロセスに対応する仮想マシンインスタンスから取得され、第1のAPIに対応する機能構造は、第1のAPIの機能識別子に従って取得されたクラス構造から取得され、第1のAPIに対応するアドレスは、第1のAPIに対応する機能構造から取得される。
【００５０】
たとえば、本実施形態では、技術者は、前もって、第1のAPIの識別子情報が、第1のAPIが属するクラスのクラス識別子ClassID1および第1のAPIの機能識別子FunctionID1を含むように構成する。
【００５１】
第1のAPIが属するクラスのクラス識別子ClassID1に従って、第1のAPIが属するクラスに対応するクラス構造は、APIプロセスに対応し、Table1(表1)に示される仮想マシンインスタンスから取得され、第1のAPIの機能識別子FunctionID1に従って、第1のAPIに対応する機能構造は、第1のAPIが属するクラスに対応するクラス構造から取得され、第1のAPIに対応するAddress1は、機能構造から取得される。
【００５２】
ステップ204: APIプロセスに対応する仮想マシンインスタンスにおける第1のAPIのコードを指すアドレスを、第1のAPIに対応する第2のAPIのコードを指す記憶されたアドレスと置き換える。
【００５３】
APIプロセスが第1のAPIを実行する必要があるとき、第1のAPIが属するクラスのクラス識別子および第1の機能識別子に従って、コードが仮想マシンインスタンスから取得される。次いで、コードは、第2のAPI(または置換機能)のアドレスにジャンプする。その結果、APIプロセスは、第2のAPI(または置換機能)を実施するコードを呼び出し、そのアドレスに従って第2のAPI(または置換機能)を実施するコードを実行して、ターゲットアプリケーションが修正または拡張されるようにする。
【００５４】
たとえば、APIプロセスに対応し、Table1(表1)に示される仮想マシンインスタンスにおいて、第1のAPIのAddress1が第2のAPI(または置換機能)のAddress2と置き換えられて、APIプロセスに対応し、Table2(表2)に示される仮想マシンインスタンスが取得されるようにする。
【００５５】
【表２】
0005945074.tif 000003
【００５６】
APIプロセスがインターセプトされる第1のAPI(またはその機能のうちの1つ)を実行する必要があるとき、第1のAPIが属するクラスのクラス識別子ClassID1およびインターセプトされる第1のAPI(またはその機能のうちの1つ)の機能識別子FunctionID1に従って、Table2(表2)に示される仮想マシンインスタンスから取得されるアドレスはAddress1であり、したがって、APIプロセスは、第2のAPI(または置換機能)を実施するコードを呼び出し、Address2に従って第2のAPI(または置換機能)を実施するコードを実行し、被呼番号がダイヤルされると、被呼者の地理的位置が表示されるようにする。
【００５７】
本発明の実施形態では、APIプロセスのプロセス識別子に従って、Androidシステムに対応する仮想マシンにおいて、APIプロセスがリアルタイムに監視され、APIプロセスが起動されたことが検出されると、APIプロセスに対応する仮想マシンインスタンスがAPIプロセスのプロセス識別子に従ってメモリから取得され、第1のAPIの識別子情報に従って、第1のAPIのアドレスが、APIプロセスに対応する仮想マシンインスタンスからの第2のAPI(または置換機能)に対応する記憶されたアドレスと置き換えられ、第1のAPIがインターセプトされるようにする。このようにして、ターゲットアプリケーションを実行するために使用されるAPIプロセスは、置き換えられたアドレスに従って第2のAPI(または置換機能)を実施するコードを呼び出し、実行し、ターゲットアプリケーションを修正または拡張する機能を実施するために、第2のAPI(または置換機能)が使用され、ターゲットアプリケーションの機能が修正または拡張されるようにする。
【００５８】
図3は、いくつかの実施形態による、第1のAPIインターセプションのデバイスの概略構造図である。
【００５９】
図3に示されるように、本発明の一実施形態は、APIインターセプションのデバイスを提供し、このデバイスは、
APIプロセスのプロセス識別子に基づいて、システムに対応する仮想マシンにおけるAPIプロセスをリアルタイムに監視するように構成されたモニタモジュール301と、
APIプロセスが起動されると、APIプロセスのプロセス識別子に従ってメモリからAPIプロセスに対応する仮想マシンインスタンスを取得するように構成された取得モジュール302と、
インターセプトされるAPIの識別子情報に従って、APIプロセスに対応する仮想マシンインスタンスにおける第1のコンピュータ言語で記述されている第1のAPIのコードを指すアドレスを、第1のAPIに対応し、第2のコンピュータ言語で記述されている第2のAPI(または置換機能)のコードを指す記憶されたアドレスと置き換え、第2の言語が第1の言語とは異なり、第2の機能を介してAPIプロセスの制御を実施するように構成された置換モジュール303と
を含む。
【００６０】
モニタモジュール301は、具体的には、仮想マシンがAPIのプロセス識別子に対するAPIプロセスを実行し始めることを検出すると、APIプロセスが起動されたことを検出するように構成される。
【００６１】
インターセプトされるAPIの識別子情報は、少なくとも、インターセプトされるAPIが属するクラスのクラス識別子およびインターセプトされるAPIの機能の機能識別子を含む。
【００６２】
図4は、本発明の実施形態4による、第2のAPI(または置換機能)インターセプションのデバイスの概略構造図である。
【００６３】
置換モジュール303は、
クラス識別子に従って、APIプロセスに対応する仮想マシンインスタンスから第1のAPIが属するクラスに対応するクラス構造を取得するように構成された第1の取得ユニット3031と、
第1のAPIの機能識別子に従って、クラス構造から第1のAPI(またはその機能のうちの1つ)に対応する機能構造を取得するように構成された第2の取得ユニット3032と、
機能構造に記憶された第1のAPIのアドレスを第2のAPI(または置換機能)の機能の記憶されたアドレスと置き換えるように構成された置換ユニット3033と
を含む。
【００６４】
本発明の実施形態では、APIプロセスのプロセス識別子に従って、Androidシステムに対応する仮想マシンにおいて、APIプロセスがリアルタイムに監視され、APIプロセスが起動されたことが検出されると、APIプロセスに対応する仮想マシンインスタンスがAPIプロセスのプロセス識別子に従ってメモリから取得され、第1のAPIの識別子情報に従って、第1のAPIのアドレスが、APIプロセスに対応する仮想マシンインスタンスからの第2のAPI(または置換機能)に対応する記憶されたアドレスと置き換えられて、第1のAPIがインターセプトされるようにする。このようにして、ターゲットアプリケーションを実行するために使用されるAPIプロセスは、置き換えられたアドレスに従って第2のAPI(または置換機能)を実施するコードを呼び出し、実行し、ターゲットアプリケーションを修正または拡張する機能を実施するために、第2のAPI(または置換機能)が使用されて、ターゲットアプリケーションの機能が修正または拡張されるようにする。
【００６５】
本発明の一実施形態は、実施形態3におけるデバイスを含むモバイル端末を提供する。
【００６６】
図5は、いくつかの実施形態による、APIインターセプションの方法のフローチャートである。この方法は、1つまたは複数のプロセッサと、1つまたは複数のプログラムを記憶するメモリとを有するコンピュータ、ハンドヘルドコンピューティングデバイス、またはハンドヘルドコンピュータにおいて実行され得る。1つまたは複数のプログラムは、デバイス上にインストールされ得、1つまたは複数のプロセッサによって実行されると、デバイスは方法を実行する。ハンドヘルドコンピューティングデバイスまたはハンドヘルドコンピュータは、人の手で持つのにぴったりな任意のコンピューティングデバイスとすることができる。昨今人気のハンドヘルドコンピューティングデバイスまたはハンドヘルドコンピュータは、スマートフォンを含む。いくつかの実施形態では、1つまたは複数のプログラムは、セキュリティソフトウェアアプリケーションの一部である。
【００６７】
ステップS501で、コンピュータ、ハンドヘルドコンピューティングデバイス、またはハンドヘルドコンピュータは、APIのプロセス識別子に基づいて仮想マシンにおけるAPIのプロセスのステータスを監視する。
【００６８】
ステップS502で、APIのプロセスが起動されると、APIのプロセス識別子に基づいてメモリからAPIプロセスに対応する仮想マシンインスタンスを取得する。
【００６９】
ステップS503で、デバイスは、データベースに記憶された第1の組の基準に基づいて、APIがインターセプトされるべきかどうかを判断する。第1の組の基準は、ソフトウェアアプリケーションで呼び出されるAPI、ソフトウェアはAPIを呼び出すための事前の許可があるかどうかなど、データベースにおけるソフトウェアアプリケーションの登録された情報に関する考慮すべき事項を含み得る。いくつかの実施形態では、第1の組の基準は、データベースにおけるソフトウェアアプリケーションの登録された情報がソフトウェアアプリケーションで呼び出されるAPIと互換性を持つかどうかを含み得る。登録された情報は、ソフトウェアのタイプおよび目的、ソフトウェアに関係するユーザからの許可、ならびにソフトウェアの前歴を含むことができる。たとえば、気象サービスとして登録されているソフトウェアアプリケーションが事前のユーザ許可のない電子メール管理のためにAPIを呼び出そうとしている場合、ソフトウェアは、APIがインターセプトされるべきであると決定することができる。データベースは、APIがウィルスによって起動されると、APIがインターセプトされるように、ウィルスデータベースを含み得る。
【００７０】
APIがインターセプトされるべきではないことをデバイスが決定した場合、APIは続いて中断なく実行される。
【００７１】
APIまたはAPIの機能のうちの1つがインターセプトされるべきであることをデバイスが決定した場合、データベースに記憶された第2の組の基準に基づいて置換機能を選択する(ステップS503)。第2の組の基準は、APIが呼び出されるソフトウェアアプリケーション、ソフトウェアの挙動、およびソフトウェアがAPIを起動させる環境など、登録された情報に関する考慮すべき事項を含む。たとえば、電話の呼出しのAPIがユーザ対話アプリケーションによって起動されると、デバイスは、APIをインターセプトし、ユーザの事前の指示に従って置換としてネットワーク電話API機能を選択することができる。APIの電話の呼出しがウィルスによって行われたとき、デバイスは、APIをインターセプトし、警告サインをユーザに表示するように警告機能を選択することができる。
【００７２】
ステップS504で、デバイスは、APIの機能が配置される第1のアドレスを、APIのプロセス識別子に基づいて仮想マシンインスタンスから見つける。第1のアドレスを見つけるプロセスは、APIが属するクラスのクラス構造を、クラス識別子に基づいて仮想マシンインスタンスから取得するステップと、APIの機能識別子に基づいてAPIの機能の機能構造を取得するステップとを含む。プロセスのより詳細な説明は、段落[0047]〜[0054]で見つけることができ、ここでは繰り返さない。
【００７３】
ステップS505で、デバイスは、第1のアドレスを置換機能が配置される第2のアドレスと置き換える。いくつかの実施形態では、APIは、第1のコンピュータ言語で記述されており、置換機能は、第2のコンピュータ言語で記述されている。たとえば、第1のコンピュータ言語はJava（登録商標）であり、APIはJavaメソッドで記述されている。置換機能は、たとえば、CまたはC++言語によって、ネイティブメソッドで記述され得る。
【００７４】
ステップS506で、APIの機能のアドレスが置換機能のアドレスと置き換えられるので、置換機能が実行される。
【００７５】
図6は、いくつかの実施形態による、モバイルコンピューティングデバイス602(たとえば、ラップトップまたはスマートフォン)の例示的な実装形態の図である。いくつかの特定の特徴が例示されているが、当業者であれば、簡潔さのために、および本明細書に開示された実装形態のより関連する態様を不明瞭にしないように、様々な他の特徴が例示されていないことを本開示から諒解されよう。そのために、モバイルデバイス600は、1つまたは複数の処理ユニット(CPU)602と、1つまたは複数のネットワークまたは他の通信インターフェース608と、ディスプレイ601と、メモリ606と、これらおよび様々な他の構成要素を相互接続するための1つまたは複数の通信バス604とを含む。通信バスは、システム構成要素間の通信を相互接続し、制御する回路(時としてチップセットと呼ばれる)を含み得る。メモリ606は、高速ランダムアクセスメモリ、たとえばDRAM、SRAM、DDR RAM、または他のランダムアクセス固体メモリデバイスを含み、たとえば1つもしくは複数の磁気ディスク記憶装置、光ディスク記憶装置、フラッシュメモリ装置、または他の不揮発性固体記憶装置などの不揮発メモリを含むことができる。メモリ606は、CPU602から離れて配置される1つまたは複数の記憶装置を随意に含むことができる。メモリ606内に不揮発性および揮発性メモリ装置を含むメモリ606は、非一時的コンピュータ可読記憶媒体を含む。
【００７６】
いくつかの実装形態では、メモリ606またはメモリ606の非一時的コンピュータ可読記憶媒体は、オペレーティングシステム616、ネットワーク通信モジュール618、仮想マシン620、1つまたは複数の置換機能630、およびアプリケーションプログラム632を含めて、プログラム、モジュール、およびデータ構造、またはそのサブセットを記憶する。
【００７７】
オペレーティングシステム616は、様々な基本的なシステムサービスを処理し、ハードウェア依存のタスクを実行するための手順を含む。
【００７８】
ネットワーク通信モジュール618は、1つまたは複数の通信ネットワークインターフェース608(有線またはワイヤレス)、および1つまたは複数の通信ネットワーク、たとえばインターネット、他の広域ネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワークなどを介して他のデバイスとの通信を容易にする。
【００７９】
仮想マシン620は、たとえば、アプリケーションプログラム632のうちの1つによって呼び出される各APIプロセスの仮想マシンインスタンス622を含み、仮想マシンインスタンス622は、たとえばプロセス識別子などAPIプロセスと関連した情報をさらに含む。いくつかの実施形態では、仮想マシン620は、図3および図4に関連して上述したように、モニタモジュール301、取得モジュール302、および置換モジュール303をさらに含む。モニタモジュール301、取得モジュール302、および置換モジュール303のうちのいずれかが別々にメモリ606内に、しかし仮想マシン620の外部に存在してもよいことは、当業者には明らかである。
【００８０】
置換機能630は、異なるアプリケーションプログラム632と関連したプロセスをインターセプトするために、事前に生成される。一般的に、それらは、仮想マシンインスタンス622を書くために使用されるものとは異なるコンピュータ言語で記述されている。上述したように、仮想マシンインスタンス622は、仮想マシンインスタンス622に関連付けられたAPIプロセス情報622-aを調べることに基づいて置換機能630のうちの1つを呼び出すように構成される。
【００８１】
前述の実施形態のステップの全部または一部がハードウェアを介して実施され得る、または関連したハードウェアに指示するプログラムによって実施され得ることを、当業者であれば理解されよう。プログラムは、コンピュータ可読媒体に記憶され得る。記憶媒体は、読取り専用メモリ、磁気ディスク、光ディスクなどとすることができる。
【００８２】
前述の説明は、単に本発明の例示的な実施形態にすぎず、本発明を制限するためのものではない。本発明の意図および原理内で行われる任意の変更、等価の置換、または改良は、本発明の保護範囲内に含まれるものとする。
【００８３】
特定の実施形態が上述されているが、本発明をこれらの特定の実施形態に限定するためのものではないことを理解されよう。これに対して、本発明は、添付の特許請求の範囲の意図および範囲内である変形、変更、および均等物を含む。多数の特定の詳細は、本明細書において提示される主題の完全な理解を提供するために記載される。しかし、主題がこれらの特定の詳細なしに実施され得ることは、当業者にとって明らかである。他の例では、周知の方法、手順、構成要素、および回路は、実施形態の態様を不必要に不明瞭にしないように、詳述されていない。
【００８４】
第1の、第2のなどの用語は、本明細書では様々な要素を記載するために使用され得るが、これらの要素は、これらの用語によって制限されないものとする。これらの用語は、ある要素と別の要素とを区別するために使用されているにすぎない。たとえば、本発明の意図を逸脱することなく、第1位の基準は第2位の基準と呼ばれ得、同様に、第2位の基準は第1位の基準と呼ばれ得る。第1位の基準と第2位の基準の両方は順位の基準であるが、それらは同じ順位の基準でない。
【００８５】
本明細書における本発明の説明において使用される用語は、特定の実施形態を説明するためのものにすぎず、本発明を制限するものではない。本発明の説明および添付の特許請求の範囲において使用される際、状況が別段明らかに示さない限り、単数形「a」、「an」および「the」は複数形も含むものとする。本明細書で使用される「および/または」という用語は、関連の列挙された項目のうちの1つまたは複数の任意のおよびすべての可能な組み合わせを指し、含むことも理解されよう。用語「含む」、「含んでいる」、「備える」、および/または「備えている」という用語は、本明細書で使用される際、述べられた特徴、動作、要素、および/または構成要素の存在を特定するが、1つまたは複数の他の特徴、動作、要素、構成要素および/またはそのグループの存在または追加を排除するものではないことをさらに理解されよう。
【００８６】
本明細書で使用される際、「〜場合」という用語は、「〜とき」もしくは「〜すると」、または状況に応じて、述べられた先行条件が真であることを「決定することに応答して」、もしくは「決定に従って」、もしくは「検出に応答して」を意味すると解釈され得る。同様に、句「[述べられた先行条件が真であること]が決定された場合」、または「[述べられた先行条件が真である]場合」、または「[述べられた先行条件が真である]とき」は、状況に応じて、述べられた先行条件が真であることを「決定すると」、または「決定することに応答して」、または「決定に従って」、または「検出すると」、または「検出することに応答して」を意味すると解釈され得る。
【００８７】
様々な図面のいくつかは、特定の順序でいくつかの論理的段階を示しているが、順序に依存していない段階は、並び替えられてもよく、他の段階は、結合されたり切り離されたりしてもよい。いくつかの並び替えまたは他のグループ化が具体的に言及されているが、他も当業者には明らかであるので、変形形態の完全なリストを提示しない。さらに、段階は、ハードウェア、ファームウェア、ソフトウェアまたはそれらの任意の組合せでも実施され得ることを認識されたい。
【００８８】
前述の説明は、説明上、特定の実装形態に関して記載されている。しかしながら、上記の例示的な説明は、網羅的ではなく、または本発明を開示される正確な形に制限するものではない。上記の教示に鑑みて、多くの変更および変形が可能である。実装形態は、本発明の原理およびその実際の適用を最もよく説明するために選択され、記載されており、それによって、当業者は、本発明および様々な実装形態を、企図される特定の使用に適する様々な変更で最もよく使用することができる。実装形態は、添付の特許請求の範囲の意図および範囲内である変形、変更、および均等物を含む。多数の特定の詳細は、本明細書において提示される主題の完全な理解を提供するために記載される。しかし、主題がこれらの特定の詳細なしに実施され得ることは、当業者にとって明らかである。他の例では、周知の方法、手順、構成要素、および回路は、実装形態の態様を不必要に不明瞭にしないように、詳述されていない。
【符号の説明】
【００８９】
301  モニタモジュール
302  取得モジュール
303  置換モジュール
600  モバイルデバイス
601  ディスプレイ
602  モバイルコンピューティングデバイス
604  通信バス
606  メモリ
608  通信インターフェース
616  オペレーティングシステム
618  ネットワーク通信モジュール
620  仮想マシン
622  仮想マシンインスタンス
622-a APIプロセス情報
630  置換機能
632  アプリケーションプログラム
3031  第1の取得ユニット
3032  第2の取得ユニット
3033  置換ユニット
【図１】
0005945074.tif 000004
【図２】
0005945074.tif 000005
【図３】
0005945074.tif 000006
【図４】
0005945074.tif 000007
【図５】
0005945074.tif 000008
【図６】
0005945074.tif 000009