移動通信装置を使用してコンテンツ/コンテクストの高感度スキャニングを行うシステム、方法及びコンピュータプログラム製品
移動通信装置を使用してアプリケーションプログラムデータをスキャニングするためのシステム、方法及びコンピュータプログラム製品が提供される。ワイヤレスネットワークを介して通信できる移動通信装置にインストールされたアプリケーションプログラムが含まれる。このようなアプリケーションプログラムは、移動通信装置を使用してタスクを実行するようになっている。それに関連付けられるのは、アプリケーションプログラムにより実行されるタスクに関連したアプリケーションデータをスキャニングするためにアプリケーションプログラムと通信するスキャニングサブシステムである。使用に際して、アプリケーションプログラムは、アプリケーションデータに関連した情報をスキャニングサブシステムへ伝送してスキャニングサブシステムによるスキャニングを容易にする。
【発明の詳細な説明】
【発明の分野】
【0001】
本発明は、移動通信装置のセキュリティに関するものであり、より詳細には、マルウェアに対して移動通信装置をスキャンすることに関するものである。
【発明の背景】
【0002】
過去10年間に、移動セルラー電話の数及び使用量が急速に増大した。より最近になって、移動電話及びパーソナルデジタルアシスタント(PDA)の機能を兼ね備えたワイヤレス装置が導入されている。この分野は、新規なセルラーテレコミュニケーション規格(即ち、GPRS、UMTS及びWAP)がワイヤレスインターフェイスを通じた高速データ転送を可能にするので、近い将来、著しい成長を遂げることが予想される。
【0003】
このようなプラットホームは、今日のパーソナルコンピュータやワークステーションが受けるのとほぼ同様に、いわゆる「マルウェア」、例えば、ウイルス、トロイの木馬、及びワーム(以下、集合的に「ウイルス」と称される)、並びに他の不要且つ有害なコンテンツからの攻撃を受けることが予想される。既に、移動電話に対する多数のウイルスが確認されている。
【0004】
ウイルスの攻撃を阻止するためには、デスクトップ環境で配備されているのとほぼ同様に、移動プラットホームにウイルス対策ソフトウェアを配備しなければならない。現在、多種のデスクトップウイルス対策アプリケーションを入手することが可能である。これらアプリケーションの大半は、疑わしいファイルに所定のウイルスシグネチャーが存在するか否かをサーチする基本的スキャニングエンジンに依存する。これらのシグネチャーはデータベースに保持されており、データベースは、直近に特定されたウイルスを反映するように常時更新されねばならない。
【0005】
通常、ユーザは、インターネットを介して、受信したe−メールから、或いはCDROM又はフロッピーディスクから、交換データベースを頻繁にダウンロードする。また、ユーザは、新種のウイルスが検出されたときに必要となる新規なウイルス検出技術を利用するために、ソフトウェアエンジンを頻繁に更新することも求められる。
【0006】
移動ワイヤレスプラットホームは、ソフトウェア開発者(ウイルス対策ソフトウェアの開発者を含む)に対して一連の問題を提起する。より詳細には、移動ワイヤレスアプリケーションは、慣習的に標準化されておらず、スキャニング動作を実行する前にアプリケーションに関する情報をスキャナで特定することが要求される。不都合にも、この情報収集は、その料金をスキャニングプロセスの実行に課する。
【発明の開示】
【0007】
移動通信装置を使用してアプリケーションプログラムデータをスキャニングするためのシステム、方法及びコンピュータプログラム製品が提供される。ワイヤレスネットワークを介して通信できる移動通信装置にインストールされたアプリケーションプログラムが含まれる。このようなアプリケーションプログラムは、移動通信装置を使用してタスクを実行するようになっている。それに関連付けられるのは、アプリケーションプログラムにより実行されるタスクに関連したアプリケーションデータをスキャニングするためにアプリケーションプログラムと通信するスキャニングサブシステムである。使用に際して、アプリケーションプログラムは、アプリケーションデータに関連した情報をスキャニングサブシステムへ伝送してスキャニングサブシステムによるスキャニングを容易にする。
【0008】
一実施形態では、スキャニングは、オンデマンドウイルススキャニング及び/又はオンアクセスウイルススキャニングを含むことができる。
【0009】
別の実施形態では、アプリケーションプログラムは、メールアプリケーションプログラムを含むことができ、この場合、タスクは、電子メールの管理を含む。更に、アプリケーションプログラムは、ブラウザアプリケーションプログラムを含むことができ、この場合、タスクは、ネットワークのブラウジングを含む。更に、アプリケーションプログラムは、電話帳アプリケーションプログラムを含むことができ、この場合、タスクは、複数の電話番号の管理を含む。オプションとして、アプリケーションプログラムは、メッセージアプリケーションプログラムを含むことができ、この場合、タスクは、メッセージの伝送を含む。なお、いかなる形式のアプリケーションプログラムが含まれてもよい(即ち、Java(登録商標)アプリケーションプログラム等)ことに注意されたい。
【0010】
更に別の実施形態において、スキャニングサブシステムへ伝送される情報は、異なる形式のアプリケーションデータに関連してもよい。このような形式は、ハイパーテキストマークアップ言語(HTML)形式、ユニホームリソースロケータ(URL)形式、電子メール形式、電話番号形式、Java(登録商標)形式、テキスト形式、及び/又は未知の形式を含むことができる。
【0011】
オプションとして、情報は、更に、アプリケーションデータの各形式に関連したフォーマットを特定してもよい。これは、異なる形式のアプリケーションデータに関連した変数を情報に設けることで達成できる。
【0012】
更に別の実施形態では、情報は、スキャニングサブシステムによるスキャニングのタイミングを指示してもよい。このようなタイミングは、アプリケーションデータの受信、アプリケーションデータの記憶、アプリケーションデータのレンダリング、及び/又はアプリケーションデータの呼び出しに関連するものでよい。更に、情報は、スキャニングサブシステムによるスキャニングが任意であるか及び/又は強制であるかを指示してもよい。
【0013】
従って、情報は、スキャニングサブシステムによるスキャニングのタイミングを改善することができる。更に、情報は、スキャニングサブシステムによるスキャニングの精度を改善することもできる。
【詳細な説明】
【0014】
図1は、一実施形態に係る移動通信フレームワーク100を示す。図示されたように、移動通信装置102と、ワイヤレスネットワークを介して通信可能なバックエンドサーバー104とが含まれている。ここでの説明においては、移動通信装置102は、セルラー電話、ワイヤレスパーソナルデジタルアシスタント(PDA)、ワイヤレスハンドヘルドコンピュータ、ワイヤレスポータブルコンピュータ、或いはワイヤレスネットワークを介して通信できる他の移動装置を含んでいるが、これらに限定されない。
【0015】
一実施形態では、移動通信装置102は、スキャニングサブシステム105を備えていてもよい。このスキャニングサブシステム105は、移動通信装置102に記憶されるか又はそれに伝送されるデータをスキャニングすることができるサブシステムを含んでもよい。当然ながら、このようなスキャニングは、オンアクセススキャニング、オンデマンドスキャニング、又は他の任意の形式のスキャニングを指すことができる。更に、スキャニングは、上記データに代表されるコンテンツ(即ち、テキスト、ピクチャー、等)、マルウェアに対する一般的なセキュリティ型のスキャニング、等を含んでいてもよい。
【0016】
続けて図1を参照する。移動通信装置102は、上記スキャニング機能を含む種々の機能を管理するようになっている複数のグラフィックユーザインターフェイス108を表示できるディスプレイ106を更に備えることができる。
【0017】
使用に際して、移動通信装置102のディスプレイ106が用いられて、ネットワーク(即ち、インターネット、等)上のデータが表示される。オペレーション1を参照されたい。ここに示す使用の過程では、ユーザは、バックエンドサーバー104を介してネットワークからデータを検索するためのリンク又はアンカーを選択することにより、ディスプレイ106を使用してネットワーク上の種々のデータをブラウズすることができる。オペレーション2を参照されたい。次いで、オペレーション3において、検索されたデータをスキャンするためにスキャニングサブシステム105がコールされる。
【0018】
ここに示す例では、スキャニングサブシステム105は、オペレーション4において、検索されたデータに関連してマルウェアを見つけたと示されている。この時点で、ユーザには、検索を停止するか、及び/又は特定されたマルウェアに関わらずデータを使用/アクセスするか、の選択肢がディスプレイ106を介して提供される。オペレーション5に注目されたい。オペレーション5における判断に基づいて、ユーザは、オペレーション6に示すように、「攻撃」の対象になるかもしれないし、ならないかもしれない。
【0019】
図2は、別の実施形態に係る移動通信フレームワーク200を示す。この移動通信フレームワーク200は、移動通信装置が検索されたデータにおけるマルウェアの特定に反応する方法を除くと、図1の移動通信フレームワーク100と同様である。
【0020】
より詳細には、ユーザには、オペレーション5において一つの選択肢が与えられるだけである。即ち、ユーザは、マルウェアを組み込んでいることが発見されたデータに関連するダイアログを閉じることしかできない。オペレーション6に注意されたい。
【0021】
図3は、一実施形態に係る移動通信装置に関連するアーキテクチャー300を示す。このアーキテクチャー300は、図1及び図2の移動通信装置に組み込むことが可能である。当然ながら、アーキテクチャー300は、所望のいかなる状況においても実施されうるものである。
【0022】
図示されたように、このアーキテクチャー300は、複数の移動アプリケーションプログラム302を含むことができる。この説明においては、移動アプリケーションプログラム302は、種々のタスクを実行するために移動通信装置にインストールされる、いかなるアプリケーションプログラム、ソフトウェア、等を含むことができる。更に、このようなアプリケーションプログラム302は、ユーザの要求によって、ファームウェア、ハードウェア、等で実施されてもよいことに注意されたい。
【0023】
別の実施形態では、アプリケーションプログラム302は、タスクが電子メールの管理を含むようなメールアプリケーションプログラムを含んでいるが、これに限定されない。更に、アプリケーションプログラムは、タスクがネットワークのブラウジングを含むようなブラウザアプリケーションプログラムを含んでいてもよい。更に、アプリケーションプログラムは、タスクが複数の電話番号の管理を含むような電話帳アプリケーションプログラムを含んでいてもよい。オプションとして、アプリケーションプログラムは、タスクがメッセージの伝送を含むようなメッセージアプリケーションプログラムを含んでいてもよい。いかなる形式のアプリケーションプログラムが含まれてもよいことに注意されたい。例えば、Java(登録商標)アプリケーションプログラム又はそれと同様のものが含まれてもよい。
【0024】
続けて図3を参照する。スキャニングサブシステム304は、このスキャニングサブシステム304に関連した第1アプリケーションプログラムインターフェイス(API)306及び第1ライブラリー308を介してアプリケーションプログラム302と通信状態にある。第1アプリケーションプログラムインターフェイス306及び第1ライブラリー308に関連した任意の例示的細部に関するより多くの情報を、図4から図12を参照して以下に詳細に説明する。
【0025】
オプションとして、アプリケーションプログラム302は、スキャニングサブシステム304によるスキャニングを容易にするためにスキャニングサブシステム304へ情報を伝送することができる。このような情報は、スキャンされるべきデータの形式、及びこのようなスキャニングに関連したタイミングに関するものであってもよい。このようにスキャニングサブシステム304がアプリケーションプログラム302と情報を交換する方法に関するより多くの例示的情報を、図13〜図15を参照して説明する。
【0026】
図3に示すように、第1ライブラリー308は、更新マネージャー310、コンフィギュレーションマネージャー312、及びシグネチャーデータベース314を含むことができる。使用に際して、更新マネージャー310は、シグネチャーデータベース314をスキャニングのための最新のシグネチャーで更新するプロセスを管理することができる。一実施形態では、更新プロセスは、移動通信フレームワークに固有の限定帯域巾に適応するようにストリームライン化されていてもよい。このような更新プロセスに関するより多くの例示的情報を、図16及び図17を参照して説明する。
【0027】
図3のアーキテクチャー300のコンポーネントとして、オペレーティングシステム316が更に設けられており、当該オペレーティングシステム316は、移動通信装置にインストールされており、且つアプリケーションプログラム302を実行するようになっている。一実施形態では、スキャニングサブシステム304は、プラットホームとは独立したものでよく、従って、いかなる形式のオペレーティングシステム/移動通信装置との組合せにおいても実施することができる。
【0028】
この特徴に適応するために、第2のアプリケーションプログラムインターフェイス318と、第2のライブラリー320は、種々の機能、例えば、システム/ライブラリー初期化322、エラーファンクション336、メモリ割り当て334、入力/出力(I/O)328、データ認証332、同期330、ハイパーテキスト転送プロトコル326、装置情報324、デバッグ338、及び他のファンクション(即ち共有メモリ、システム時間、等)をサポートし得るものになっている。一実施形態では、第2のアプリケーションプログラムインターフェイス318は、スキャニングサブシステム304と同様に、プラットホームとは独立したものであってもよい。第2のアプリケーションプログラムインターフェイス318及び第2のライブラリー320に関連した任意の例示的細部に関するより多くの情報を、添付資料Aを参照して以下に詳細に説明する。
【0029】
図4は、一実施形態に係るものであり、動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのシステムを示す図である。一例においては、このシステム400は、図3のアーキテクチャー300のアプリケーションプログラム、スキャニングサブシステム、及びオペレーティングシステムの状況で実施されうる。しかしながら、このシステム400は、所望のいかなる状況において実施されてもよいことに注意されたい。
【0030】
図示されたように、ワイヤレスネットワークを介して通信することのできる移動通信装置にインストールされたオペレーティングシステム402が含まれている。更に、移動通信装置にインストールされ、且つタスクを実行するためにオペレーティングシステム402を使用して実行されるアプリケーションプログラム404も設けられている。
【0031】
スキャニングサブシステム406は、アプリケーションプログラムインターフェイス及びそれに関連したライブラリーを介してアプリケーションプログラム404と通信する状態を維持する(例えば、図3の第1アプリケーションプログラムインターフェイス306及び第1ライブラリー308を参照されたい)。このようなスキャニングサブシステム406は、アプリケーションプログラム404により実行されるタスクと共働してセキュリティ又はコンテンツ分析機能にアクセスするようになっている。一実施形態では、セキュリティ又はコンテンツ分析は、セキュリティ分析を含んでいてもよい。別の実施形態では、セキュリティ又はコンテンツ分析は、コンテンツ分析を含んでいてもよい。更に、セキュリティ又はコンテンツ分析は、オンデマンドウイルススキャニング及び/又はオンアクセスウイルススキャニングを含んでいてもよい。
【0032】
使用に際して、セキュリティ又はコンテンツ分析機能が、アプリケーションプログラム404によって実行されるタスクに関連したアプリケーションデータに適用されてもよい。ここでの説明においては、アプリケーションデータは、入力され、処理され、出力され、又は、アプリケーションプログラム404によって行われるタスクの実行に別の方法で関連する、いかなるデータを含んでいてもよい。
【0033】
アプリケーションプログラムインターフェイスを介してスキャニングサブシステム406及びアプリケーションプログラム404を密に結合することによって、要求されるオーバーヘッド及びコードの冗長性が僅かになる。このようなアプリケーションプログラムインターフェイス及びそれに関連したライブラリーに関するより多くの例示的情報について、以降の図面を参照して以下に詳細に説明する。
【0034】
図5は、図4のシステム400のアプリケーションサーバーの実施形態に係るものであって、移動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのフレームワーク500を示す。このフレームワーク500は、所望のいかなる状況において実施されてもよいことに注意されたい。
【0035】
図示されたように、スキャニングサブシステムは、アプリケーションプログラムインターフェイス506及びそれに関連したプロトコル(即ち、uItronメッセージングシステム)を介してアプリケーションプログラム504と通信するスキャニングプログラム502を含むことができる。以下で詳細に述べるように、アプリケーションプログラムインターフェイス506は、スキャニングプログラム502に関連した第1コンポーネント508と、アプリケーションプログラム504に関連した第2コンポーネント510とを含むことができる。
【0036】
アプリケーションプログラムインターフェイス506が設けられた種々のコール512は、オープンコール、データコール、及びクローズコールを含んでいてもよい。使用に際して、スキャニングプログラム502は、アプリケーションプログラム504によって実行されるタスクに関連したアプリケーションデータ516をスキャンすることができる。
【0037】
図6は、図4のシステム400の再入可能ライブラリーの実施形態に係るものであり、移動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのフレームワーク600を示す。このフレームワーク600は、所望のいかなる状況において実施されてもよいことに注意されたい。
【0038】
図示されたように、スキャニングサブシステムは、再入可能ライブラリー602を含むことができる。使用に際して、スキャニングサブシステムの再入可能ライブラリー602は、アプリケーションプログラム604に実行時にリンクされてもよい。従って、アプリケーションプログラムインターフェイス606は、複数のアプリケーションプログラム604のそれぞれに設けられてもよい。
【0039】
図5における先のフレームワーク500と同様に、アプリケーションプログラムインターフェイス606は、オープンコール、データコール及びクローズコールを含む種々のコール612を含むことができる。使用に際して、再入可能ライブラリー602を用いて、アプリケーションプログラム604によって実行されるタスクに関連したアプリケーションデータ616をスキャンしてもよい。
【0040】
図7は、図4のシステム400の状況で実施されたオンデマンドスキャニングシステム700を示す。このシステム700は、所望のいかなる状況において実施されてもよいことに注意されたい。
【0041】
オンデマンドスキャニングは、不当なコンテンツ又はコードを除去するために、記憶されたアプリケーションデータ702をスキャニングする。ユーザは、ユーザインターフェイス703を介してオンデマンドスキャニングを開始することができる。更に、各アプリケーションプログラム704は、スキャニングサブシステム706をコールして、それに対応するメモリに記憶されたオブジェクトのスキャニングを行うことができる。
【0042】
一方、オンアクセススキャニングは、アプリケーションプログラム704がアプリケーションデータ702を処理又はレンダリングする前に、不当なコード又はコンテンツを特定する。オンアクセススキャニングは、スキャニングサブシステム706が不当なアプリケーションデータ702を検出するまでユーザにとって透過的である。
【0043】
図8は、一実施形態に係るものであり、移動アプリケーションプログラム及びスキャニングサブシステムをインターフェイスするのに使用できるアプリケーションプログラムインターフェイス800の種々のコンポーネントの階層を示す図である。オプションとして、このアプリケーションプログラムインターフェイス800は、図4のシステム400の状況において実施されてもよい。しかしながら、このアプリケーションプログラムインターフェイス800は、所望のいかなる状況において実施されてもよいことに注意されたい。
【0044】
図8に示すように、アプリケーションプログラムインターフェイスファンクションは、MDoScanOpen()802、MDoScanClose()804、MDoScanVersion()806、及びMDoScanData()808を備えている。MDoScanOpen()802及びMDoScanClose()804は、スキャニングサブシステムオブジェクトのインスタンスを生成/オープン及びクローズするのに使用される。MDoScanVersion()806は、スキャニングサブシステム及びシグネチャーパターンデータのバージョン情報を提供する。MDoScanData()808は、コンテンツ/データスキャニング及びレポーティングを実行する。また、スキャナのアプリケーションプログラムインターフェイスにはMDoScanUpdate()810も含まれており、当該MDoScanUpdate()810は、マルウェアシグネチャーデータベース及び検出ロジックの更新を提供する。このMDoScanUpdate()810が更新アプリケーションによりコールされると、ライブラリーは、リモートバックエンドサーバー(例えば、図1を参照されたい)に接続して、最新のファイル(即ち、mdo.sdb、mdo.pd)をダウンロードする。
【0045】
スキャニングサブシステムのコンフィギュレーションは、MDoConfigOpen()812、MDoConfigClose()814、MDoConfigGet()816及びMDoConfigSet()818を使用して行われる。このアプリケーションプログラムインターフェイス800をコールすることによりコンフィギュレーションハンドルが得られると、コールしたアプリケーションプログラムは、ゲット及びセットコンフィギュレーションAPIを使用して、スキャニングサブシステムコンフィギュレーション変数を問合せて、それをセットする。
【0046】
また、このアプリケーションプログラムインターフェイス800には、MDoGetLastError()820という名前のエラー検索ファンクションも含まれている。このファンクションは、発生した最新のエラーに関する情報を検索するのに使用される。
【0047】
APIコールのいずれかがなされる前に、好ましくはブート時に、ライブラリー環境設定を初期化するために、MDoSystemInit()825がコールされる。ライブラリーは、コンフィギュレーション設定、不当なコード検出ロジック(即ち、mdo.pd)及びシグネチャーデータベース(即ち、mdo.adb)、並びに内部変数(即ち、同期オブジェクト等)を固定の持続的記憶位置に保持する。
【0048】
MDoLibraryOpen()830及びMDoLibraryClose()840は、ライブラリーを初期化するのに使用される。アプリケーションプログラムは、他のAPIコールがなされる前にMDoLibraryOpen()830をコールし、また、アプリケーションプログラムは、終了の前にMDoLibraryClose()840をコールすることができる。
【0049】
アプリケーションプログラムインターフェイス800は、種々のアプリケーションプログラムインターフェイスコンポーネントを使用して、システム環境初期化、バージョン状態情報の検索、スキャニングサブシステムの更新、スキャニング、スキャニングサブシステムのコンフィギュレーション等の種々の機能をサポートすることができる。アプリケーションプログラムインターフェイス800に関する上記機能について、より多くの情報を以下に説明する。
【0050】
システム初期化
MDoSystemInit()825は、特定の持続記憶位置に保持されるデータに対する検証及び環境初期化を実行する。不当なコード/コンテンツのシグネチャーパターンデータベース(即ち、mdo.sdb)、検出ロジック(即ち、mdo.pd)、コンフィギュレーション設定、及び同期オブジェクトは、これらの位置に記憶することができる。MDoSystemInit()825は、いずれかのAPIファンクションが実行される前に一度コールすることができる(即ち、ブート時に)。
【0051】
テーブル#1は、MDoSystemInit()825に関する例示的情報を示す。
テーブル#1
MDoSystemInit
説明
システム環境情報を検証し、初期化する。
プロトタイプ
Int MDoSystemInit(void);
パラメータ
なし
リターン値
成功の場合は0、他の場合は非ゼロのエラーコード。
【0052】
ライブラリーインターフェイスAPI
アプリケーションプログラムインターフェイス800は、複数のライブラリーインターフェイスコンポーネントを含む。APIインターフェイスのインスタンス化は、MDoLibraryOpen()830を使用して行うことができる。このファンクションを使用して得られるインスタンス化されたライブラリーインターフェイスハンドルは、その後のAPIコールに使用することができる。アプリケーションプログラムが終了する前に、ハンドルをリリースするためにMDoLibraryClose()840をコールすることができる。図9は、MDoLibraryOpen()830及びMDoLibraryClose()840を使用する例示的ライブラリーインターフェイス初期化900を示す。
【0053】
テーブル#2は、MDoLibraryOpen()830に関する例示的情報を示す。
テーブル#2
MDoLibraryOpen
説明
APIライブラリーインターフェイスハンドルを初期化して、返す。
プロトタイプ
MDOLIB_HANDLEMDoLibraryOpen(void);
パラメータ
なし
リターン値
成功の場合はライブラリーインターフェイスハンドル、他の場合はINVALID_MDOLIB_HANDLE。
MDoLibraryClose()も参照のこと
【0054】
テーブル#3は、MDoLibraryClose()840に関する例示的情報を示す。
テーブル#3
MDoLibraryClose
説明
MDoLibraryClose()ファンクションにより返されたAPIライブラリーハンドルに関連したシステムリソースをリリースする。
プロトタイプ
Void MDoLibraryClose(MDOLIB_HANDLEhLib);
パラメータ
hLib
[入力] MDoLibraryOpenによって返されるハンドル化されたライブラリー
リターン値
なし
MDoLibraryOpen()も参照のこと
【0055】
エラー検索
MDoLibraryOpen()830によるライブラリーの初期化及びインスタンス化が成功すると、MDoGetLastError()820は、発生した最新のエラーに関する情報をアプリケーションプログラムに提供する。
【0056】
テーブル#4は、MDoGetLastError()820に関する例示的情報を示す。
テーブル#4
MDoGetLastError
説明
指定のライブラリーインスタンスの最新のエラー値を返す。
プロトタイプ
MDoErroeCode MDoGetLastError(MDOLIB_HANDLEhLib);
パラメータ
hLib
[入力] MDoLibraryOpenによって返されるハンドル化されたライブラリー
【0057】
リターン値
MDoErrorCodeのデータ形式は、コンポーネント及びエラーコードの両方を含む32ビット非符号化整数として定義することができる。多くの場合、検索されたエラー情報は、プラットホームの抽象APIレイヤーにおいてセットされている。そのため、ここで与えられるMDoErrorCodeフォーマットは、抽象レイヤーAPI(添付資料Aを参照)により定義されたAlErrorCodeフォーマットと同様である。図10は、一実施形態に基づくMDoErrorCodeの例示的フォーマット1000を示す。
【0058】
テーブル#5は、MDoGetLastError()820に関する例示的情報を示す。
テーブル#5
MDoErrorCodeは、次のように定義される。
Typedef unsigned long MDoErrorCode;
MDoLibraryOpen()、MDoScanOpen()、MDoScanData()、MDoScanUpdate()も参照のこと。
【0059】
例示的コンピュータコード#1は、MDoGetLastError()820へのコールと共にサンプルのライブラリーコーリングシーケンスを示す。
コンピュータコード#1
【表1】
【0060】
エラーコード
MDoGetLastError()820によりレポートされるエラーコードは、2つの部分、即ちコンポーネントコード及びエラーコードを含んでいる。更なる情報については、添付資料Aを参照されたい。テーブル#6は、例示的エラーコード及びそれに対応するコンポーネントコードをリストしたものである。また、MDoGetLastError()820は、抽象ライブラリーレイヤーにおいてセットされたエラーコードも返す。次のリストは、例示のためのものに過ぎず、何らこれに限定するものではないことに注意されたい。
テーブル#6
【表2】
【0061】
スキャニングサブシステムAPI
アプリケーションプログラムインターフェイス800は、複数のスキャニングサブシステムコンポーネントを含んでいる。スキャニングサブシステムAPIコンポーネントは、データ/コンテンツスキャニング及びシグネチャー更新サービスを提供する。MDoScanOpen()802、MDoScanClose()804、MDoScanVersion()806、MDoScanUpdate()810、及びMDoScanData()808が含まれている。MDoScanOpen()802は、スキャニングサブシステムオブジェクトのインスタンス化に使用される。MDoScanVersion()806は、スキャニングサブシステム及びシグネチャーデータベースのバージョン情報を提供する。MDoScanUpdate()810は、シグネチャーデータベースの更新を実行する。MDoScanData()808は、不当なコード/コンテンツデータのスキャニングを実行する。図11は、一実施形態に係るスキャニングサブシステムAPIコールシーケンス1100を示す。
【0062】
MDoScanOpen
テーブル#7は、MDoScanOpen()802に関する例示的情報を示す。
テーブル#7
説明
スキャニングサブシステムのインスタンスのハンドルを返す。
プロトタイプ
MDOSCAN_HANDLEMDoScanOpen(MDOLIB_HANDLE hLib);
パラメータ
[入力] MDoLibraryOpen()ファンクションを使用して得たライブラリーのハンドル。
リターン値
成功の場合にはスキャニングサブシステムインスタンスハンドル。
エラーの場合にはINVALID_MDOSCAN_HANDLEが返される。
MDoScanClose()、MDoScanData()、MDoScanUpdate()、MDoLibraryOpen()も参照のこと。
【0063】
MDoScanClose
テーブル#8は、MDoScanClose()804に関する例示的情報を示す。
テーブル#8
説明
スキャニングサブシステムのインスタンス及びそれに関連したシステムリソースをリリースする。
プロトタイプ
VoidMDoScanClose(MDOSCAN_HANDLE hScan);
パラメータ
hScan
[入力] MDoScanOpen()ファンクションを使用して得られたスキャニングサブシステムのハンドル。
リターン値
なし
MDoScanOpen()、MDoScanData()、MDoScanUpdate()も参照のこと。
【0064】
MDoScanVersion
テーブル#9は、MDoScanVersion()806に関する例示的情報を示す。
テーブル#9
説明
MDoScanOpen()ファンクションにより返されたスキャナハンドルからスキャニングサブシステム及びシグネチャーのバージョン情報を得る。
プロトタイプ
Int MDoScanVersion(MDOSCAN_HANDLEhScan,
SVerInfo* pVersion);
パラメータ
hScan
[入力] MDoScanOpen()ファンクションを使用して得たスキャニングサブシステムのハンドル。
pVersion
[出力] バージョン情報を含む構造体へのポインタ。
リターン値
成功の場合には0、他の場合には−1。
MDoScanOpen()、MDoScanClose()、MDoScanData()、MDoScanUpdate()も参照のこと
【0065】
例示的コンピュータコード#2は、サンプルのバージョン情報の構造体を示す。
コンピュータコード#2
【表3】
【0066】
MDoScanVersion()806によりレポートされた移動通信装置特定ストリングは、AlDevGetInfoにより返される装置特定ストリングを使用してセットされる(添付資料Aを参照)。
【0067】
MDoScanData
テーブル#10は、MDoScanData()808に関する例示的情報を示す。
テーブル#10
説明
MDoScanDataは、特定のデータ形式をスキャンするためにアプリケーションプログラムからコールされる。コールするアプリケーションプログラムは、スキャナアクション、スキャンターゲット、データ形式、データにアクセスするためのI/Oファンクションのセット、及び任意のコールバックファンクションを指定する。データスキャニングの結果は、データ構造体を提供した呼出元に返される。MDoScanDataは、再入可能である。
プロトタイプ
Int MDoScanData(MDOSCAN_HANDLEhScan,
SScanParam* pParam,
SScanResult* pResult);
パラメータ
hScan
[入力] MDoScanOpen()ファンクションへのコールで得られたスキャニングサブシステムのハンドル。
pParam
[入力] データスキャンパラメータを含む構造体へのポインタ。
pResult
[出力] データスキャン結果を含む構造体へのポインタ。
リターン値
成功の場合は0、他の場合には−1、エラーコードがセットされる。
MDoScanOpen()、MDoScanClose()、MDoScanVersion()、MDoScanUpdate()も参照のこと。
【0068】
MDoScanUpdate
テーブル#11は、MDoScanUpdate()810に関する例示的情報を示す。
テーブル#11
説明
不当なコード/コンテンツシグネチャーパターンデータベース(mdo.sdb)及び検出ロジック(mdo.pd)の更新を実行する。
プロトタイプ
Int MDoScanUpdate(MDOSCAN_HANDLEhScan,
SUpdateParam* pParam);
パラメータ
hScan
[入力] MDoScanOpen()ファンクションを用いて得たスキャンハンドル。
pParam.
[入力] 更新のキャンセル/中止及び進捗状態更新用のコールバックファンクションのポインタを含む更新パラメータの構造体へのポインタ。
【0069】
例示的コンピュータコード#3は、更新パラメータ構造体の定義の態様を示す。
コンピュータコード#3
【表4】
【0070】
コールするアプリケーションプログラムは、ファンクションをコールするときに、ファンクションポインタと、ファンクションへ渡されるべきデータとをセットすることができる。テーブル#12に注目されたい。
テーブル#12
【表5】
【0071】
コンフィギュレーションAPI
アプリケーションプログラムインターフェイス800は、複数のコンフィギュレーションコンポーネントを含む。スキャニングサブシステムの設定を検索し指定するのに使用されるファンクションのセットが含まれている。これらファンクションの1つの目標は、アプリケーションプログラム及びスキャニングサブシステムに集中化ランタイムコンフィギュレーションアクセスを提供することである。コンフィギュレーションデータは、不揮発性持続データ記憶装置(即ち、フラッシュメモリ、等)に記憶される。
【0072】
図12は、一実施形態に基づく一つの例示的コンフィギュレーションAPIコールシーケンス1200を示す。図示されたように、MDoConfigOpen()830は、コンフィギュレーションの検索及び指定ファンクションへ渡すべきハンドルを返す。MDoConfigClose()814は、MDoConfigOpen()812により返されるコンフィギュレーションハンドルをリリースし、クローズするのに使用される。MDoConfigSet()818は、指定のコンフィギュレーション変数を指定値にセットし、MDoConfigGet()816は、指定の変数に対するコンフィギュレーション値を返す。MDoConfSet()818により変更されたコンフィギュレーション変数(1つ又は複数)の設定は、MDoConfigClose()814がコールされるまで永久記憶装置へ必ずしもセーブされない。アプリケーションプログラムは、コンフィギュレーションオープン、ゲット又はセットをコールし、そして変数値にアクセスするか及び/又はそれを指定するときにはクローズファンクションに直ちに従うことができる。
【0073】
アプリケーションプログラムインターフェイス800のコンフィギュレーションコンポーネントを使用して指定/検索されたコンフィギュレーション変数及び値は、nullキャラクタ(‘\0’)で終わる8ビットキャラクタストリングで表すことができる。テーブル#13は、使用可能なコンフィギュレーション変数をリストしたものである。
テーブル#13
【表6】
【0074】
MDoConfigOpen
テーブル#14は、MDoConfigOpen()812に関する例示的情報を示す。
テーブル#14
説明
その後のコールに渡すべきコンフィギュレーション設定に対するハンドルをMDoConfigGet()及びMDoConfigSet()へ返す。
プロトタイプ
MDOCONFIG_HANDLEMDoConfigOpen(MDOLIB_HANDLE hLib);
パラメータ
hLib
[入力] MDoLibraryOpen()ファンクションを用いて得たライブラリーのハンドル。
リターン値
成功の場合はコンフィギュレーションハンドル。エラーの場合はINVALID_MDOCONFIG_HANDLEが返される。
MDoConfigClose()、MDoConfigSet()、MDoCongigGet()も参照のこと。
【0075】
MDoConfigClose
テーブル#15は、MDoConfigClose()814に関する例示的情報を示す。
テーブル#15
説明
システムリソースをリリースし、コンフィギュレーションハンドルをクローズする。
プロトタイプ
VoidMDoConfigClose(MDOCONFIG_HANDLE hConfig);
パラメータ
hConfig
[入力] MDoConfigOpen()ファンクションによって返されたコンフィギュレーションハンドル。
リターン値
なし
MDoConfigOpen()、MDoConfigSet()、MDoConfigGet()も参照のこと
【0076】
MDoConfigGet
テーブル#16は、MDoConfigGet()816に関する例示的情報を示す。
テーブル#16
説明
指定のコンフィギュレーション変数に対するコンフィギュレーション値を得る。
プロトタイプ
Int MDoConfigGet(MDCONFIG_HANDLEhConfig
charconst* pszName,
char* pBuffer,
unsignedint uSize);
パラメータ
hConfig
[入力] MDoConfigOpen()ファンクションによって返されたコンフィギュレーションハンドル。
pszName
[入力] NULL終端のコンフィギュレーション変数の名前。
pBuffer
[出力] 指定された変数に対するNULL終端のコンフィギュレーション設定/値。
uSize
[入力] pBufferのバイトでの長さ.
リターン値
成功の場合は0、他の場合は−1
MDoConfigOpen()、MDoConfigClose()、MDoConfigSet()も参照のこと。
【0077】
MDoConfigSet
テーブル#17は、MDoConfigSet()818に関する例示的情報を示す。
テーブル#17
説明
指定のコンフィギュレーション変数の値をセットする。
プロトタイプ
Int MDoConfigGet(MDOCONFIG_HANDLEhConfig
charconst* pszName
char const* pszValue);
パラメータ
hConfig
[入力] MDoConfigOpen()ファンクションによって返されるコンフィギュレーションハンドル。
pszName
[入力] NULL終端のコンフィギュレーション変数の名前。
pszValue
[入力] 指定された変数に対するNULL終端の新たなコンフィギュレーション設定/値
リターン値
成功の場合は0、他の場合は−1。
MDoConfigOpen()、MDoConfigClose()、MDoConfigGet()も参照のこと。
【0078】
スキャニングを容易にするためのアプリケーションプログラム/スキャニングサブシステム通信
先に述べたように、アプリケーションプログラムは、スキャニングサブシステムによるスキャニングを容易にするためにスキャニングサブシステムへ情報を伝送することができる。この伝送は、上述したAPIを介することによって容易にされている。上述の情報は、スキャニングされるべきデータの形式と、このようなスキャニングに関連したタイミングとに関係しうるものである。上述のAPIがこれを達成する方法に関する説明を次に行う。
【0079】
スキャンパラメータ(SScanParam)
コールするアプリケーションプログラムは、SScanParam構造体を使用してスキャニングパラメータをスキャニングサブシステムに供給することができる。スキャンパラメータに含まれる情報は、スキャニングサブシステムに、1)スキャニングサブシステムアクション形式(即ち、iAction)、2)スキャンデータ形式(即ち、スキャニングされるべきアプリケーションデータの形式、iDataType)、3)スキャンターゲットに対するデータポインタ(即ち、pPrivate)、4)バイトでのデータサイズを検索するためのファンクション(即ち、pfGetSize)、5)スキャンデータをリサイズするためのファンクション(即ち、pfSetSize)、6)スキャンデータのブロックを検索するためにスキャニングサブシステムにより使用されるファンクション(即ち、pfRead)、6)スキャンデータを書き込むのに使用されるファンクション(即ち、pfWrite)、及び7)スキャニングサブシステム状態/進行レポートのためのコールバックファンクション(即ち、pfCallBack)を提供する。
【0080】
例示的コンピュータコード#4は、データスキャンパラメータ構造体を示す。
コンピュータコード#4
【表7】
【0081】
スキャンアクション(iAction)
スキャンアクションは、供給されたアプリケーションデータに関して実行されるべきスキャニングの形式を指定する。テーブル#18は、種々の例示的スキャンアクションを示す。
テーブル#18
【表8】
【0082】
スキャンデータ形式(iDataType)
コールするアプリケーションプログラムは、この変数を使用してアプリケーションデータ形式及びフォーマットをスキャニングサブシステムに通知してもよい。
【0083】
図13は、アプリケーションプログラムがAPIを介してスキャニングサブシステムへ通信することのできる種々の例示的なアプリケーションデータ形式1300を示す。urlストリングフォーマットは、ユニホームリソースロケータ(RFC1738)の仕様に合致することができる。E−メールストリングフォーマットは、インターネットE−メールアドレスフォーマット(RFC822)に合致することができる。デフォールトドメインは、所望のいかなるドメインにセットされていてもよい。更に、電話番号ストリングは、数字キャラクタ‘0’−‘9’及び‘#’及び‘*’キャラクタを含んでいてもよい。
【0084】
スキャンデータポインタ/ハンドル(pPrivate)
アプリケーションスキャンオブジェクトに対するポインタ(又はハンドル)が更に提供される。スキャニングサブシステムは、必ずしも、このデータポインタ/ハンドルを使用して直接メモリI/Oを実行しない。このデータポインタ/ハンドルは、呼出元指定のI/Oファンクションを使用して読み取り/書き込みを実行するために呼出元へ返送される。
【0085】
スキャンデータサイズ
このファンクションは、コールしたアプリケーションプログラムからスキャンターゲットデータサイズ(バイト数)を得るためにスキャニングサブシステムにより使用される。
【0086】
スキャンデータリサイズ(pfSetSize)
このファンクションは、修復/清浄化されているアプリケーションデータを所与のサイズ(バイト数)にリサイズすることを、コールしたアプリケーションプログラムに要求するためにスキャニングサブシステムにより使用される。このファンクションは、スキャン及び修復/削除オプションにと共に使用されてもよい。
【0087】
スキャンデータ読み取りファンクション(pfRead)
このファンクションは、コールしたアプリケーションプログラムから指定量のアプリケーションデータを読み取るためにスキャニングサブシステムによって使用されうるものである。
【0088】
スキャンデータ書き込みファンクション(pfWrite)
これは、オプションのパラメータであって、当該パラメータは、修復プロセスの一部分としてスキャンオブジェクトに指定量のアプリケーションデータを書き込むためにスキャニングサブシステムにより使用される。このファンクションポインタは、修復又は削除用にスキャンアクションがセットされた場合にセットされてもよい。
【0089】
コールバックファンクション(pfCallBack)
指定された場合に、スキャニングサブシステムは、以下のテーブルに示す情報で指定のファンクションをコールする。コールバックファンクションは、負のリターン値が返された場合には、スキャニングプロセスを中止する。テーブル#19は、例示的コールバックコードリストを示す。
テーブル#19
【表9】
【0090】
例示的コンピュータコード#5は、スキャニングサブシステムのコールバック構造体を示す。
コンピュータコード#5
【表10】
【0091】
スキャン結果(SScanResult)
オブジェクトスキャニングの結果、即ち検出されたマルウェア情報は、コールしたアプリケーションプログラムにより提供されたSScanResult構造体で、コールしたアプリケーションプログラムへ返される。このSScanResult構造体は、スキャン結果情報を含む構造体に対するポインタと、スキャン結果リソースを削除するのに使用されるファンクションへのポインタとを含む。スキャン結果を保持するのに使用されるメモリは、スキャニングサブシステムにより割り当てられ、そしてpfDeleteResultポインタが指すファンクションをコールすることにより解放される。
【0092】
例示的なコンピュータコード#6は、サンプルコーリングシーケンスを示す。
コンピュータコード#6
【表11】
【0093】
例示的なコンピュータコード#7は、検出された不正コード/コンテンツ情報構造体を示す。
コンピュータコード#7
【表12】
【0094】
例示的なコンポーネントコード#8は、スキャン結果構造体を示す。
コンピュータコード#8
【表13】
【0095】
重大度及びビヘイビアレベル(uBehavior)
図14は、一実施形態に係るものであり、SDetect構造体に含まれるマルウェアの重大度及びアプリケーションプログラムのビヘイビアレベルを含むビットフィールド変数1400を示す。
【0096】
テーブル#20は、例示的なマルウェアの重大度のリストを示す。
テーブル#20
【表14】
【0097】
スキャニングサブシステムは、スキャンされたアプリケーションデータが移動通信装置のユーザにとって有害なマルウェアを含む場合に、MDO_SC_USERフラグをセットする。移動通信装置それ自体にとって有害なものである場合には、MDO_SC_TERMINALフラグがセットされる。ユーザ及び移動通信装置の両方にとって有害である場合には、MDO_SC_USER及びMDO_SC_TERMINALの両フラグがセットされる。
【0098】
アプリケーションプログラムのビヘイビアレベルは、検出されたマルウェアを含むアプリケーションデータの処置方法を指定する。テーブル#21は、ビヘイビアレベル値と、アプリケーションプログラムによる対応アクションとをリストする。
テーブル#21
【表15】
【0099】
スキャンされたアプリケーションデータに多数の不正コードが見つかったときには、コールしたアプリケーションプログラムは、最も高いビヘイビアレベルでアクションすることが期待される。例えば、MDO_BC_LEVEL0及びMDO_BC_LEVEL3の両方がレポートされる場合には、アプリケーションプログラムは、MDO_BC_LEVEL3のアクションをとることができる。
【0100】
図15は、スキャニングサブシステムによるスキャニングのタイミングが、図13の変数により特定されたデータ形式のファンクションにつれて変化する態様を示すチャート1500である。
【0101】
シグネチャーデータベース更新
先に述べたように、更新プロセスは、移動通信フレームワークに固有の限定帯域巾に適応するようにストリームライン化されてもよい。これを達成する種々の方法に関するより多くの情報を以下に示す。
【0102】
更新されたコンポーネント
MDoScanUpdateファンクションは、2つのコンポーネント[即ち、不正コード検出ロジック(mdo.pd)及びシグネチャーデータベース(mdo.sdb)]に更新サービスを提供する。一つのコンポーネント(即ち、mdo.pd)は、検出ロジックを含んでいて、新たなバージョンが使用できるときに完全に更新されてもよい。別のコンポーネント(即ち、mdo.sdb)は、n個の以前のバージョンまで増分的に更新されてもよい。第2のコンポーネントに対する完全な更新は、nより古いバージョンをもつ移動通信装置において実行することができる。例えば、nが5にセットされ、最新バージョンが20である場合には、15より古いバージョンをもつ移動通信装置において完全な更新が実行される。
【0103】
ユーザインターフェイスを介したアクチベーション
図16は、一実施形態に係るものであり、ユーザインターフェイスにより更新がどのように開始されるかを示す例示的フロー1600を示す。図示されたように、ウイルスパターンの更新は、移動通信装置のユーザがユーザインターフェイス1602を介してメニューエントリーを選択することにより開始できる。ユーザが更新メニューを選択すると、更新アプリケーション1604がアクチベートされ、適切な更新インターフェイスファンクション1606を介してバックエンドサーバーに接続する。
【0104】
通信プロトコル
更新ライブラリーは、HTTPプロトコルを介してバックエンドサーバーと通信することができる。
【0105】
更新プロセス
図17は、一実施形態に係るものであり、移動通信装置のスキャニングサブシステムを効率的に更新するための方法1700を示す。一実施形態において、この方法1700は、図3のアーキテクチャー300のアプリケーションプログラム、スキャニングサブシステム及びオペレーティングシステム、並びに図1及び2のシステムの状況で実施することができる。しかしながら、この方法1700は、所望のいかなる状況において実施されてもよいことに注意されたい。
【0106】
プロセスを開始するために、更新の要求を少なくとも1つの移動通信装置からバックエンドサーバーへ送信することができる。当然ながら、他の実施形態では、要求を伴わずに更新を送信してもよい。
【0107】
一実施形態では、更新は、要求データ構造体を使用して移動通信装置により要求される。任意であるが、このようなデータ構造体は、ユニホームリソースロケータ(URL)変数、移動通信識別子変数、アプリケーションプログラムインターフェイスのバージョン変数、検出ロジック変数、シグネチャーバージョン変数、及び/又は部分番号変数のような変数を含むことができる。
【0108】
テーブル#22は、このような目的で使用することのできる例示的URLを示す。
テーブル#22
<BASE-URL>?dev=<DEV-ID>&mdo=<MDO-VER>&eng=<ENG-VER>&sdb=<SDB-VER>&chk=<CHUNK>
上述のURL変数を説明するテーブルは、次の通りである。
【表16】
【0109】
テーブル#23は、上記説明に合致するURLの特定例である。
テーブル#23
http://update.mcafeeacsa.com/504i?dev=X504i05&mdo=2&eng=3&sdb=56&chk=1
【0110】
テーブル#23の上記URLは、ベースURL「http://update.mcafeeacsa.com/504i」、装置識別子として「X504i05」、APIのバージョン2、不正コード検出ロジックのバージョン3、及びシグネチャーデータベースのバージョン56を指定している。「chunk」又は部分、番号は、移動通信装置がバックエンドサーバーに最初にコンタクトするときに1にセットできることに注意されたい。また、ベースURLは、「UpdateURL」コンフィギュレーション変数を使用し、MDoConfigGetAPIを使用して得ることができる。
【0111】
要求を受け取った後に、バックエンドサーバーは、記憶された不正コード検出ロジック及びシグネチャーデータベースのバージョンを、URLでエンコードされたバージョン情報と比較することにより、どの更新パッケージをダウンロードする必要があるのかを決定する。
【0112】
更新が必要とされない場合には、バックエンドは、コンテンツなし応答を返す。オペレーション1701において、移動通信装置は、その応答を第1部分として受け取る。この第1部分が先述のコンテンツなし応答を含むと判断される場合には(判断1702を参照)、ダウンロードすべき更新がないので、方法1700は終了となる。このような特徴は、移動通信フレームワークに固有の限定帯域巾に適応する点で有益である。
【0113】
一方、更新パッケージの第1部分がリターンされる場合には、方法1700は、更新の第1部分の受信に続いて(又はおそらくそれと並列に)更新の付加的な部分を受信することにより続けられる。オペレーション1704−1708に注意されたい。また、第1部分は、全パッケージサイズ及び部分カウント情報を付随してもよいことに注意されたい。
【0114】
残りの更新部分をダウンロードするために、ダウンロードURLの部分番号を変更することができる。テーブル#24は、部分番号「3」を指定するURLの特定例を示す。
テーブル#24
http://update.mcafeeacsa.com/504i?dev=X504i05&mdo=2&eng=3&sdb=56&chk=3
【0115】
一実施形態では、更新の完全性が判断されてもよい。従って、更新は、更新の完全性が検証されたかどうかに基づいて、スキャニングサブシステムに条件付きでインストールされてもよい。
【0116】
オプションとして、更新の完全性が、シグネチャーを使用して判断されてもよい。このようなシグネチャーは、更新の部分の一つ(即ち、最後の部分)として受け取られてもよい。次いで、シグネチャーは、更新の部分の各々を使用して生成される別のシグネチャーに対して比較されてもよい。オペレーション1710に注意されたい。
【0117】
一実施形態では、シグネチャーは、RSAプライベートキーを使用して生成され、次いで、移動通信装置において、更新に含まれている対応のパブリックキーを使用して認証されてもよい。シグネチャーの検証及び生成は、更に、指定の認証ライブラリーを使用して実行されてもよい。
【0118】
完全性が検証されたものとすると、スキャニングサブシステムにより実行されるスキャニングが休止又は停止される。オペレーション1712に注意されたい。このような休止は任意であることに注意されたい。
【0119】
次いで、更新をスキャニングサブシステムにインストールすることができる。オペレーション1714に注意されたい。スキャニングが休止される実施形態では、更新がスキャニングサブシステムにインストールされたときに、スキャニングサブシステムを使用して、スキャニングをその後に再開することができる。オペレーション1716を参照されたい。
【0120】
移動通信フレームワークに固有の限定帯域巾に適応するために、更新の部分のサイズを最小にすることができる。更に、更新の部分を圧縮することもできる。
【0121】
更に別の実施形態では、更新の各部分のフォーマットは、移動通信フレームワークに固有の限定帯域巾に適応するように設計することができる。このようなフォーマットに関する更なる情報を以下に示す。
【0122】
テーブル#25は、更新の部分をダウンロードするための例示的フォーマットを示す。
テーブル#25
【表17】
【0123】
テーブル#25に示す上記部分の各々は、次のテーブル#26のように定義される。
テーブル#26
【表18】
【0124】
各部分は、ヘッダ及びデータで構成されている。このようなヘッダは、更新の関連部分の識別子、更新の関連部分の長さ、等を指示することができる。更に、ヘッダは、含まれているデータ名及びデータ長を指定すると共に、特別のCR+LF対をもつ実際のデータから分離することができる。テーブル#27は、ヘッダに関連した例示的データ/コンテンツ名を示す。
テーブル#27
【表19】
【0125】
テーブル#28は、例示的な更新パッケージを示す。
テーブル#28
【表20】
【0126】
抽象ライブラリーAPI
先に述べたように、移動通信装置に使用するためのプラットホーム独立システム及びそれに関連した方法が提供される。スキャニングの目的で移動通信装置のオペレーティングシステムと通信するプラットホーム独立のスキャニングサブシステムが含まれる。更に、オペレーティングシステム及びスキャニングサブシステムに接続するためのプラットホーム独立のアプリケーションプログラムインターフェイスも設けられる。このプラットホーム独立のアプリケーションプログラムインターフェイスは、プラットホーム独立のスキャニングサブシステムを、移動通信装置及びそれに関連したオペレーティングシステムにポーティングするための抽象ライブラリーを含む。
【0127】
この設計により、スキャニングサブシステムは、プラットホーム独立であることができ、従って、いかなる形式のオペレーティングシステム/移動通信装置の組合せにおいても実施することができる。
【0128】
一実施形態では、抽象ライブラリーは、システム初期化、ライブラリー初期化、エラーファンクション、メモリ割り当て、入力/出力(I/O)、データ認証、同期、ハイパーテキスト転送プロトコル、共有メモリ、システム時間、装置情報、及びデバッグをサポートすることができる。前記アプリケーションプログラムインターフェイスの1つの任意の実施に関連した更なる例示的情報を添付資料Aに示す。
【0129】
以上、種々の実施形態を説明したが、それらは、一例に過ぎず、それらに何ら限定されるものではないことを理解されたい。従って、好ましい実施形態の広さ及び範囲は、上述した実施形態のいずれにも限定されず、特許請求の範囲及びその均等物によってのみ定義されるべきである。
【0130】
添付資料A
【0131】
このアプリケーションプログラムインターフェイス(API)は、次のサブシステムを含む。
・システム初期化
・ライブラリー初期化
・エラーファンクション
・ヒープメモリ割り当て
・持続的メモリ/記憶装置I/O
・データ認証
・同期オブジェクト(セマフォ)
・HTTP API
・共有メモリ
・システム時間
・装置情報
・デバッグ
また、この添付資料には、APIライブラリーに使用するための抽象ライブラリー(AL)レイヤーで定義ざれたC言語定義(1つ又は複数)のセットも説明されている。
【0132】
システム初期化
プラットホーム/システムに依存するブート初期化は、AlLibrarySysInit()により実行される。このファンクションは、先に述べたMDoSystemInit()ファンクションからコールされるように設計されている。
【0133】
AlLibrarySysInit
説明
システムに依存する初期化を実行する。
プロトタイプ
intAlLibrarySysInit(void);
パラメータ
なし
リターン値
成功の場合0、他の場合は−1。
【0134】
ライブラリー初期化
このプラットホームの抽象APIライブラリーは、AlInitLibrary()ファンクションを使用して初期化される。この抽象ライブラリーは、抽象APIファンクションがコールされる前に一度初期化されるべきである。AlInitLibrary()により得られて初期化されるシステムリソースは、AlCleanupLibrary()ファンクションがコールされるときにリリースされる。
【0135】
AlInitLibrary
説明
ライブラリー初期化を実行する。このファクションは、MDoLibraryOpen()ファンクションによりコールされる。
プロトタイプ
intAlInitLibrary(void);
パラメータ
なし
リターン値
成功の場合0、他の場合は−1。
【0136】
AlCreanupLibrary
説明
AlInitLibrary()ファンクションにより得られたシステムリソースをリリースする。このファンクションは、先に述べたMDoLibraryClose()ファンクションによりコールされる。
プロトタイプ
voidAlCleanupLibrary(void);
パラメータ
なし
リターン値
なし
【0137】
エラーファンクション
ALライブラリーは、タスク/スレッド特有のエラーコードをセット及び検索するのに使用されるエラーファンクションのセットが含まれている。これは、適当なエラーコード及びコンポーネントコードをセットするのは、抽象レイヤーインプリメンターの役割である。
【0138】
AlGetLastError
説明
コーリングタスク/スレッドの最新のエラーコード値を返す。これらファンクションは、AlSetLastError()ファンクションを使用して、返された値をセットする。
AlErrorCodeデータ形式は、32ビットの非符号化値を使用して内的に表される。
プロトタイプ
AlErrorCodeAlGetLastError(void);
パラメータ
なし
リターン値
AlSetLastError()ファンクションを使用してセットされたコーリングスレッド/タスクの最新のエラー値。
【0139】
AlSetLastError
説明
コーリングスレッド/タスクに対する最新のエラーコードをセットする。
プロトタイプ
voidAlSetLastError(AlErrorCode errorCode);
パラメータ
errorCode
[入力] 32ビットのエラーコード値。
リターン値
なし
【0140】
エラー/状態コード
【表21】
【0141】
上記テーブルは、ALコンポーネント及びエラーコードのセットをリストする。AlSetLastErrorファンクションを使用してレポートされたエラーは、コンポーネントコードをエラーコードに結合することにより形成された32ビット値である。ALレベルにセットされたエラーは、エラーが発生したときに適当なアクションを取るためにMDoGetLastErrorファンクションを使用して検索される。
【0142】
ヒープメモリ割り当て
抽象レイヤーは、必要なメモリを動的に割り当てるために、コールしたアプリケーションプログラム(即ち「呼出元」)に対するヒープメモリ割り当てを提供する。割り当てられたメモリは、グローバルに共有可能で、多数のアプリケーション/タスクによりアクセスできるものと仮定されている。AlMemAlloc()及びAlMemFree()APIファンクションは、ヒープメモリの割り当て及び割り当て解除を提供する。
【表22】
【0143】
AlMemAlloc
説明
指定量の動的メモリを割り当て、そのメモリに対するポインタを返す。割り当てられたメモリブロックは、特殊なオペレーション(即ちメモリのロック)を必要とせず、呼出元(即ちコールしたアプリケーションプログラム)による直接のアクセスが可能である。
プロトタイプ
void* AlMemAlloc(unsignedint uSize);
パラメータ
uSize
[入力] 割り当てるメモリのバイトでの量。
リターン値
割り当てられたメモリに対するポインタ。要求が失敗に終わるか又は要求のサイズが0である場合には、NULL。
AlMemFree()も参照のこと。
【0144】
AlMemFree
説明
AlMemAlloc()ファンクションによってリターンされた動的メモリブロックを解放する。
プロトタイプ
void AlMemFree(void*pData);
パラメータ
pData
[入力] 開放すべきメモリブロックへのポインタ。
リターン値
なし
AlMemAlloc()も参照のこと。
【0145】
持続記憶装置I/O
持続的記憶装置(即ちフラッシュメモリ)へのアクセスは、ファイルI/O APIを使用して実行される。以下を参照されたい。
【表23】
【0146】
ファイルハンドル形式AL_FILE_HANDLEは、次のように定義される。
typedef struct AL_FILE_HANDLE_struct
{
} *AL_FILE_HANDLE;
【0147】
そして、無効の持続的記憶ハンドルINVALID_AL_FILE_HANDLEを指定するのに使用される定数は、次のように定義される。
#define INVALID_AL_FILE_HANDLE((AL_FILE_HANDLE)0)
【0148】
ファイル状態バッファ形式AlStatBufは、次のように定義される。
typedef struct AlStatBuf_struct
{
unsigned long ulSize;
unsigned long ulTime;
} AlStatBuf;
【0149】
AlFileOpen
説明
指定のファイルをオープンし、そのハンドルを返す。
プロトタイプ
AL_FILE_HANDLEAlFileOpen(const char* pszFilename,
Int iMode);
パラメータ
pszFilename
[入力] ファイル名/パスのストリング.
iMode
[入力] ファイルのアクセスモード.
AL_OPEN_READ 読み取りのためのファイルオープン
AL_OPEN_WRITE 読み取り及び書き込みの両方のためのファイルオープン
リターン値
成功の場合はファイルハンドル、他の場合はINVALID_AL_FILE_HANDLE
AlFileClose()、AlFileRead()、AlFileWrite()も参照のこと。
【0150】
AlFileClose
説明
指定のファイルハンドルに関連したシステムリソースをクローズし、リリースする。
プロトタイプ
VoidAlFileClose(AL_FILE_HANDLE hFile);
パラメータ
hFile
[入力] AlFileOpen()によって返されたファイルハンドル。
リターン値
なし
AlFileOpen()、AlFileRead()、AlFileWrite()も参照のこと。
【0151】
AlFileSeek
説明
リード/ライトファイルオフセットを再配置する。
プロトタイプ
longAlFileSeek(AL_FILE_HANDLE hFile,
Long lOffset,
Int iWhence);
パラメータ
hFile
[入力] オープンファイルのハンドル。
lOffset
[入力] iWhence directiveに関連するファイルオフセット。
iWhence
[入力] 初期位置。とり得る値は次の通りである。
AL_SEEK_SET オフセットパラメータは絶対的ファイルオフセットを指定する。
換言すれば、ファイルの開始からのオフセット。
AL_SEEK_CUR 相対的オフセットを指定し、即ちオフセットパラメータは現在ファ イルからのファイルオフセットを指定する。
AL_SEEK_END ファイルの終わりからのファイルオフセットを指定する。
リターン値
成功の場合は得られたファイルオフセット、他の場合は−1L。
AlFileOpen()、AlFileClose()、AlFileRead()、AlFileWrite()も参照のこと。
【0152】
AlFileRead
説明
ファイルからデータのブロックを読み取る。
プロトタイプ
Unsigned intAlFileRead(AL_FILE_HANDLE hFile,
void* pBuffer,
Unsigned int uSize);
パラメータ
hFile
[入力] オープンファイルのハンドル。
pBuffer
[出力] データバッファ
uSize
[出力] 読み込むデータ量。
リターン値
成功の場合は読み取ったバイト数、他の場合は−1。
AlFileOpen()、AlFileClose()、AlFileSeek()、AlFileWrite()も参照のこと。
【0153】
AlFileWrite
説明
データのブロックをファイルに書き込む。
プロトタイプ
unsigned intAlFileWrite(AL_FILE_HANDLE hFile,
void const* pBuffer,
unsigned int uSize );
パラメータ
hFile
[入力] オープンファイルのハンドル
pBuffer
[int] 書き込むデータを保持しているバッファ。
uSize
[出力] 書き込むデータの量。
リターン値
成功の場合は書き込まれたデータの量、他の場合は−1。
AlFileOpen()、AlFileClose()、AlFileSeek()、AlFileRead()も参照のこと。
【0154】
AlFileSetSize
説明
オープンファイルをリサイズする。
ネイティブのファイルリサイズのサポートをもたないプラットホームについては、抽象ライブラリーは、AlFileClose()ファンクションがコールされたときに各ファイルの始めに記憶されたサイズ情報を変更することにより、このファンクションを実施する。
プロトタイプ
unsigned intAlFileSetSize(AL_FILE_HANDLE hFile,
unsigned int uSize );
パラメータ
hFile
[入力] ライトモードでオープンファイルを指すハンドル。
uSize
[出力] バイトでの新たなファイル長。
リターン値
成功の場合は0、他の場合は−1。
AlFileStat()も参照のこと。
【0155】
AlFileStat
説明
ファイルサイズの検索及びタイムスタンプの生成。
ネイティブのファイルサイズ及び/又はタイムスタンプ情報の検索方法を備えていないプラットホームについては、抽象ライブラリーは、各ファイルの始めに情報を記憶することによりこのファンクションを実施する。
プロトタイプ
int AlFileStat(charconst* pszFilenames,
AlStatBuf* pStat );
パラメータ
pszFilename
[入力] 情報を検索するファイルの名称。
pStat
[出力] サイズ及びタイムスタンプを返すのに使用される構造体へのポインタ。この構造体は、次のフィールドを含む。
typedef structureAlStatBuf_struct
{
unsigned long ulSize; /* size in bytes */
unsigned long ulTime; /* creation time */
} AlStatBuf;
リターン値
成功の場合0、他の場合は−1。
【0156】
データ認証
プラットホーム抽象APIには、データを認証するためのファンクションのセットが含まれている。データ認証APIは、ダウンロードされたマルウェアシグネチャーデータベースを検証するのに使用される。
【0157】
呼出元がAlDaOpenファンクションを使用して認証オブジェクトハンドルを得ると、供給されたデータを検証するためにAlDaVerifyへのコールがなされる。
AlDaGetSignerInfo()は、署名者情報を検索するのに使用される。AlDaClose()は、データ認証ハンドル及びそれに関連したシステムリソースをクローズ及びリリースするのに使用される。
例示的なデータ認証APIを以下に示す。
【表24】
【0158】
AlDaOpen()ファンクションによって返されたデータ認証ハンドルは、次のように定義される。
ALHANDLE(AL_DA_HANDLE);
#defineINVALID_AL_DA_HANDLE ((AL_DA_HANDLE) 0)
【0159】
署名者情報構造は、次のように定義される。
#defineMAX_DA_SIGNER_NAME 128
typedef structDaSignerInfo_struct
{
charszSignerName[MAX_DA_SIGNER_NAME];
} DaSignerInfo;
【0160】
AlDaOpen
説明
データ認証ハンドルを生成し、返す。
プロトタイプ
AL_DA_HANDLEAlDaOpen(const void* pSig,
unsigned int uSize );
パラメータ
pSig
[入力] シグネチャーデータへのポインタ。
uSigSize
[入力] バイトでのシグネチャーサイズ。
リターン値
成功の場合はデータ認証ハンドル、他の場合はNVALID_AL_DA_HANDLE。
AlDaClose()、AlDaUpdata()、AlDaVerify()、AlDaGetSignerInfo()も参照のこと。
【0161】
AlDaClose
説明
データ認証ハンドルに対して使用されるシステムリソースをリリースする。
プロトタイプ
voidAlDaClose(AL_DA_HANDLE hDa );
パラメータ
hDa
[入力] AlDaOpenによって返されるデータ認証ハンドル。
リターン値
なし
AlDaOpen()、AlDaUpdata()、AlDaVerify()、AlDaGetSignerInfo()も参照のこと。
【0162】
AlDaVerify
説明
データ認証を行う。
プロトタイプ
int AlDaVerify(AL_DA_HANDLEhDa,
int (*pfRead)(void*,void*,int),
int iTotalSize,
void *pPrivate);
パラメータ
hDa
[入力] データ認証ハンドル。
pfRead
[入力] データの読み取り(参照)に使用する呼出元のコールバックファンクション。エラーの場合は、−1とし、読み取るべきデータがそれ以上ない場合は0とし、他の場合は、読み取られてAlDaVerifyファンクションへ返されたデータの量とする。ファンクションは何回もコールされることが予想される。
iTotalSize
[入力] 検証されるべき全データサイズ。
pPrivate
[入力] pfReadのコールバックによって渡されるべき呼出元のプライベートデータ。
リターン値
アプリケーションデータが認証された場合は0、他の場合は−1。
AlDaOpen()、AlDaClose()、AlDaGetSignerInfo()も参照のこと。
【0163】
サンプルデータ読み取りコールバックファンクションは、次の通りである。
【表25】
【0164】
AlDaGetSignerInfo
説明
データ認証署名者情報を検索する。
プロトタイプ
intAlDaGetSignerInfo(AL_DA_HANDLE hDA,
DaSignerInfo *pDSI);
パラメータ
hDa
[入力] データ認証ハンドル。
pDSI
[出力] 署名者情報を含む構造体へのポインタ。
リターン値
署名者情報の取得が成功した場合には0、他の場合には−1。
AlDaOpen()、AlDaClose()、AlDaVerify()も参照のこと。
【0165】
同期オブジェクト
リソースの同期及び制御は、セマフォを使用して行われる。抽象ライブラリーには、セマフォオブジェクトを生成し、オープンし、クローズし、そして変更するためのファンクションのセットが含まれている。例示的なセマフォAPIは次の通りである。
【表26】
【0166】
AlSemCreate
説明
命名されたセマフォを生成し、内部カウンターを0にセットしそのハンドルを返す。
プロトタイプ
AL_SEM_HANDLEAlSemCreate(char const* pszName );
パラメータ
pszName
[入力] セマフォ名のストリング。
リターン値
成功の場合はセマフォハンドル、他の場合はINVALID_AL_SEM_HANDLE。
AlSemOpen()、AlSemClose()、AlSemGet()、AlSemRelease()も参照のこと。
【0167】
AlSemOpen
説明
既存のセマフォへのハンドルを返す。
プロトタイプ
AL_SEM_HANDLEAlSemOpen(char const* pszName );
パラメータ
pszName
[入力] セマフォ名。
リターン値
成功の場合はセマフォハンドル、他の場合はINVALID_AL_SEM_HANDLE。
AlSemCreate()、AlSemClose()、AlSemGet()、AlSemRelease()も参照のこと。
【0168】
AlSemClose
説明
システムリソース関連の指定のセマフォハンドルをクローズし、リリースする。
セマフォ使用/参照カウントも減少され、参照されたセマフォオブジェクトはカウントが0になった場合に破棄される。
プロトタイプ
voidAlSemClose(AL_SEM_HANDLE hSem);
パラメータ
hSem
[入力] AlSemCreate() 又は AlSemOpen()を用いて得たセマフォハンドル。
リターン値
なし
AlSemCreate()、AlSemOpen()、AlSemGet()、AlSemRelease()も参照のこと。
【0169】
AlSemGet
説明
指定のセマフォを取得する。内部カウンターがエントリーにおいて0より大きい場合には、それを1だけ減少して直ちに返す。内部カウンターがエントリーにおいて0である場合には、他のタスク/スレッドがAlSemRelease()をコールして0より大きくするまで、コールが阻止される。
プロトタイプ
intAlSemGet(AL_SEM_HANDLE hSem);
パラメータ
hSem
[入力] セマフォハンドル。
リターン値
成功の場合は0、他の場合は−1。
AlSemCreate()、AlSemOpen()、AlSemClose()、AlSemRelease()も参照のこと。
【0170】
AlSemRelease
説明
セマフォをリリースし、内部カウンターを1だけ増加する。
プロトタイプ
intAlSemRelease(AL_SEM_HANDLE hSem);
パラメータ
hSem
[入力] セマフォハンドル。
リターン値
成功の場合は0、他の場合は−1。
AlSemCreate()、AlSemOpen()、AlSemClose()、AlSemGet()も参照のこと。
【0171】
HTTP API
抽象ライブラリーには、呼出元が提供したコールバック構造体を使用してHTTPネットワークI/Oを提供するファンクションのセットが含まれている。例示的HTTP APIを以下に示す。
【表27】
【0172】
AlHttpOpen()ファンクションによりリターンされるHTTPハンドルは、次のように定義される。
typedef structAL_HTTP_HANDLE_struct
{
} *AL_HTTP_HANDLE;
#defineINVALID_AL_HTTP_HANDLE ((AL_HTTP_HANDLE)0)
【0173】
HTTPコールバック構造体は、次のように定義される。
typedef structAlHttpCallbacks_struct
{
unsigned int (* pWrite) (void* pPrivate,
void const* pData,
unsignedint uSize);
unsigned int (* pRead) (void* pPrivate.
Void* pData,
unsigned int uSize);
unsigned int (* pGetSize) (void* pPrivate);
unsigned int (* pSetSize) (void* pPrivate,
unsigned int uSize);
} AlHttpCallbacks;
【0174】
上記HTTPコールバック構造体で与えられるコールバックファンクションは、次の機能を提供する。
pWrite 到来するHTTP要求データを記憶するためにシステムHTTPライブラ
リーによりコールされる。
pRead HTTP要求の一部として送信されるべきアプリケーションデータを検索
するのに使用される。
pGetSize アプリケーションのコンテンツデータサイズ「Content-Length」をHTT
Pライブラリーに提供する。
pSetSize 到来するコンテンツデータ長さが得られるときにそれをコーリングアプリ
ケーションに知らせるためにHTTPライブラリーによりコールされる
【0175】
AlHttpOpen
説明
ハンドルを生成して、HTTPライブラリーへ返す。
プロトタイプ
AL_HTTP_HANDLE_AlHttpOpen(void);
パラメータ
なし
リターン値
HTTPのインスタンス生成に失敗した場合には、INVALID_AL_HTTP_HANDLEが返される。
AlHttpClose()も参照のこと。
【0176】
AlHttpClose
説明
HTTPハンドルに関連したシステムリソースをクローズし、リリースする。
プロトタイプ
voidAlHttpClose(AL_HTTP_HANDLE hHTTP);
パラメータ
hHTTP
[入力] AlHttpOpen()ファンクションによって返されるHTTPライブラリのハンドル。
リターン値
なし
AlHttpClose()も参照のこと。
【0177】
AlHttpExec
説明
指定のURLにおいて任意のヘッダ情報を用いてHTTPメソッド(「GET」又は「POST」)を実行する。
プロトタイプ
intAlHttpExec(AL_HTTP_HANDLE hHTTP,
char const* pszMethod,
char const* pszURL,
AlHttpCallbacks* pHttpCb,
void* pPrivate );
パラメータ
hHTTP
[入力] AlHttpOpen()関数によって返されるHTTPライブラリのハンドル。
pszMethod
[入力] HTTPメソッドの指定。HTTP “GET” または “POST”。
pszURL
[入力] HTTPリクエストがなされるULR。
pHttpCb
[入力] 呼出元指定のHTTP I/Oファンクションのセットへのポインタ。
HTTPライブラリーは、データI/Oに対してAlHttpCallbacksで指定された
ファンクションを使用する
pPrivate
[入力/出力] AlHttpCallbacksにおいて指定されたコールバックファンクションへ返却されるべき呼出元データへのポインタ。
リターン値
成功の場合は0、他の場合は−1。
ALHttpOpen()、AlHttpClose()も参照のこと。
【0178】
共有メモリ
ライブラリーの共有オブジェクトが記憶されるシステムメモリの位置は、AlShmAddress()ファンクションを使用して取得される。この共有情報エリアは、装置のブート時に割り当てられ/準備され、ライブラリーの異なるインスタンスにより参照される。
【0179】
AlSemAddress
説明
共有メモリアドレスを返す。
プロトタイプ
void*AlSemAddress(void);
パラメータ
なし
リターン値
成功の場合は共有メモリアドレス、他の場合はNULL。
【0180】
Time
AlTmGetCurrent()は、呼出元に現在システム時間を秒で与える。
【0181】
AlTmGetCurrent
説明
現在システム時間を得る。
プロトタイプ
unsigned longAlTmGetCurrent(void);
パラメータ
なし
リターン値
成功のときは、エポック(1970年1月1日の00:00:00)以来の時間(秒で)。エラーのときは、((unsigned long) -1L)を返す。
【0182】
装置情報
AlDevGetInfo
説明
装置の特定情報を検索する。このファンクションにより返される装置識別ストリングは、APIにより使用される。
プロトタイプ
intAlDevGetInfo(AlDeviceInfo* pDeviceInfo );
パラメータ
pDeviceInfo
[出力] デバイス情報へのポインタ。
AlDeviceInfoは、次のように定義される。
#defineAL_MAX_DEVICE_ID 32
typedef structAlDeviceInfo_struct
{
charszDeviceID[AL_MAX_DEVICE_ID];
} AlDeviceInfo;
識別ストリングszDeviceIDは、特定の移動通信装置を全ての他のものからユニークに特定するのに使用されるユニークなターミナル/装置識別子である。この情報は、移動通信装置に対してマルウェアシグネチャーダウンロードURLを構成するのに使用される。これは、URLで許されないキャラクタ(即ち、ホワイトスペース)を含んではならない。
リターン値
成功の場合は0、失敗の場合は−1。
【0183】
デバッグ
AlDbgOutput
説明
デバッグストリングをデバッグコンソールへ出力する。このファンクションは、リリースビルドに対するナルファンクションである。
プロトタイプ
int AlDbgOutput(charconst* pszOutput);
パラメータ
pszOutput
[入力] デバッグコンソールに出力するストリング。
リターン値
成功の場合は0、失敗の場合は−1。
【図面の簡単な説明】
【0184】
【図1】一実施形態に係る移動通信フレームワークを示す図である。
【図2】別の実施形態に係る移動通信フレームワークを示す図である。
【図3】一実施形態に係る移動通信装置に関連するアーキテクチャーを示す図である。
【図4】一実施形態に係るものであり、動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのシステムを示す図である。
【図5】図4のシステムのアプリケーションサーバーの実施形態に係るものであり、移動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのフレームワークを示す図である。
【図6】図4のシステムの再入可能ライブラリーの実施形態に係るものであり、移動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのフレームワークを示す図である。
【図7】図4のシステムの状況において実施されたオンデマンドのスキャニングシステムを示す図である。
【図8】一実施形態に係るものであり、移動アプリケーションプログラム及びスキャニングサブシステムをインターフェイスするのに使用できるアプリケーションプログラムインターフェイス(API)の種々のコンポーネントの階層を示す図である。
【図9】ライブラリーインターフェイス初期化を例示する図である。
【図10】一実施形態に係るエラーコードファンクションのフォーマットを例示する図である。
【図11】一実施形態に係るスキャニングサブシステムAPIコールシーケンスを示す図である。
【図12】一実施形態に係るコンフィギュレーションAPIコールシーケンスの一例を示す図である。
【図13】アプリケーションプログラムがAPIを介してスキャニングサブシステムに通信することのできる種々のスキャンデータ形式を例示する図である。
【図14】一実施形態に係るものであり、マルウェア重大度フラグ及びアプリケーションプログラムのビヘイビアレベルを含むビットフィールド変数を示す図である。
【図15】スキャニングサブシステムによるスキャニングのタイミングが、図13の変数によって特定されるデータ形式のファンクションにつれてどのように変化するか示すチャートである。
【図16】一実施形態に係るものであり、ユーザインターフェイスにより更新がどのように開始されるか示すフローを例示する図である。
【図17】一実施形態に係るものであり、移動通信装置のスキャニングサブシステムを効率的に更新するための方法を示す図である。
【発明の分野】
【0001】
本発明は、移動通信装置のセキュリティに関するものであり、より詳細には、マルウェアに対して移動通信装置をスキャンすることに関するものである。
【発明の背景】
【0002】
過去10年間に、移動セルラー電話の数及び使用量が急速に増大した。より最近になって、移動電話及びパーソナルデジタルアシスタント(PDA)の機能を兼ね備えたワイヤレス装置が導入されている。この分野は、新規なセルラーテレコミュニケーション規格(即ち、GPRS、UMTS及びWAP)がワイヤレスインターフェイスを通じた高速データ転送を可能にするので、近い将来、著しい成長を遂げることが予想される。
【0003】
このようなプラットホームは、今日のパーソナルコンピュータやワークステーションが受けるのとほぼ同様に、いわゆる「マルウェア」、例えば、ウイルス、トロイの木馬、及びワーム(以下、集合的に「ウイルス」と称される)、並びに他の不要且つ有害なコンテンツからの攻撃を受けることが予想される。既に、移動電話に対する多数のウイルスが確認されている。
【0004】
ウイルスの攻撃を阻止するためには、デスクトップ環境で配備されているのとほぼ同様に、移動プラットホームにウイルス対策ソフトウェアを配備しなければならない。現在、多種のデスクトップウイルス対策アプリケーションを入手することが可能である。これらアプリケーションの大半は、疑わしいファイルに所定のウイルスシグネチャーが存在するか否かをサーチする基本的スキャニングエンジンに依存する。これらのシグネチャーはデータベースに保持されており、データベースは、直近に特定されたウイルスを反映するように常時更新されねばならない。
【0005】
通常、ユーザは、インターネットを介して、受信したe−メールから、或いはCDROM又はフロッピーディスクから、交換データベースを頻繁にダウンロードする。また、ユーザは、新種のウイルスが検出されたときに必要となる新規なウイルス検出技術を利用するために、ソフトウェアエンジンを頻繁に更新することも求められる。
【0006】
移動ワイヤレスプラットホームは、ソフトウェア開発者(ウイルス対策ソフトウェアの開発者を含む)に対して一連の問題を提起する。より詳細には、移動ワイヤレスアプリケーションは、慣習的に標準化されておらず、スキャニング動作を実行する前にアプリケーションに関する情報をスキャナで特定することが要求される。不都合にも、この情報収集は、その料金をスキャニングプロセスの実行に課する。
【発明の開示】
【0007】
移動通信装置を使用してアプリケーションプログラムデータをスキャニングするためのシステム、方法及びコンピュータプログラム製品が提供される。ワイヤレスネットワークを介して通信できる移動通信装置にインストールされたアプリケーションプログラムが含まれる。このようなアプリケーションプログラムは、移動通信装置を使用してタスクを実行するようになっている。それに関連付けられるのは、アプリケーションプログラムにより実行されるタスクに関連したアプリケーションデータをスキャニングするためにアプリケーションプログラムと通信するスキャニングサブシステムである。使用に際して、アプリケーションプログラムは、アプリケーションデータに関連した情報をスキャニングサブシステムへ伝送してスキャニングサブシステムによるスキャニングを容易にする。
【0008】
一実施形態では、スキャニングは、オンデマンドウイルススキャニング及び/又はオンアクセスウイルススキャニングを含むことができる。
【0009】
別の実施形態では、アプリケーションプログラムは、メールアプリケーションプログラムを含むことができ、この場合、タスクは、電子メールの管理を含む。更に、アプリケーションプログラムは、ブラウザアプリケーションプログラムを含むことができ、この場合、タスクは、ネットワークのブラウジングを含む。更に、アプリケーションプログラムは、電話帳アプリケーションプログラムを含むことができ、この場合、タスクは、複数の電話番号の管理を含む。オプションとして、アプリケーションプログラムは、メッセージアプリケーションプログラムを含むことができ、この場合、タスクは、メッセージの伝送を含む。なお、いかなる形式のアプリケーションプログラムが含まれてもよい(即ち、Java(登録商標)アプリケーションプログラム等)ことに注意されたい。
【0010】
更に別の実施形態において、スキャニングサブシステムへ伝送される情報は、異なる形式のアプリケーションデータに関連してもよい。このような形式は、ハイパーテキストマークアップ言語(HTML)形式、ユニホームリソースロケータ(URL)形式、電子メール形式、電話番号形式、Java(登録商標)形式、テキスト形式、及び/又は未知の形式を含むことができる。
【0011】
オプションとして、情報は、更に、アプリケーションデータの各形式に関連したフォーマットを特定してもよい。これは、異なる形式のアプリケーションデータに関連した変数を情報に設けることで達成できる。
【0012】
更に別の実施形態では、情報は、スキャニングサブシステムによるスキャニングのタイミングを指示してもよい。このようなタイミングは、アプリケーションデータの受信、アプリケーションデータの記憶、アプリケーションデータのレンダリング、及び/又はアプリケーションデータの呼び出しに関連するものでよい。更に、情報は、スキャニングサブシステムによるスキャニングが任意であるか及び/又は強制であるかを指示してもよい。
【0013】
従って、情報は、スキャニングサブシステムによるスキャニングのタイミングを改善することができる。更に、情報は、スキャニングサブシステムによるスキャニングの精度を改善することもできる。
【詳細な説明】
【0014】
図1は、一実施形態に係る移動通信フレームワーク100を示す。図示されたように、移動通信装置102と、ワイヤレスネットワークを介して通信可能なバックエンドサーバー104とが含まれている。ここでの説明においては、移動通信装置102は、セルラー電話、ワイヤレスパーソナルデジタルアシスタント(PDA)、ワイヤレスハンドヘルドコンピュータ、ワイヤレスポータブルコンピュータ、或いはワイヤレスネットワークを介して通信できる他の移動装置を含んでいるが、これらに限定されない。
【0015】
一実施形態では、移動通信装置102は、スキャニングサブシステム105を備えていてもよい。このスキャニングサブシステム105は、移動通信装置102に記憶されるか又はそれに伝送されるデータをスキャニングすることができるサブシステムを含んでもよい。当然ながら、このようなスキャニングは、オンアクセススキャニング、オンデマンドスキャニング、又は他の任意の形式のスキャニングを指すことができる。更に、スキャニングは、上記データに代表されるコンテンツ(即ち、テキスト、ピクチャー、等)、マルウェアに対する一般的なセキュリティ型のスキャニング、等を含んでいてもよい。
【0016】
続けて図1を参照する。移動通信装置102は、上記スキャニング機能を含む種々の機能を管理するようになっている複数のグラフィックユーザインターフェイス108を表示できるディスプレイ106を更に備えることができる。
【0017】
使用に際して、移動通信装置102のディスプレイ106が用いられて、ネットワーク(即ち、インターネット、等)上のデータが表示される。オペレーション1を参照されたい。ここに示す使用の過程では、ユーザは、バックエンドサーバー104を介してネットワークからデータを検索するためのリンク又はアンカーを選択することにより、ディスプレイ106を使用してネットワーク上の種々のデータをブラウズすることができる。オペレーション2を参照されたい。次いで、オペレーション3において、検索されたデータをスキャンするためにスキャニングサブシステム105がコールされる。
【0018】
ここに示す例では、スキャニングサブシステム105は、オペレーション4において、検索されたデータに関連してマルウェアを見つけたと示されている。この時点で、ユーザには、検索を停止するか、及び/又は特定されたマルウェアに関わらずデータを使用/アクセスするか、の選択肢がディスプレイ106を介して提供される。オペレーション5に注目されたい。オペレーション5における判断に基づいて、ユーザは、オペレーション6に示すように、「攻撃」の対象になるかもしれないし、ならないかもしれない。
【0019】
図2は、別の実施形態に係る移動通信フレームワーク200を示す。この移動通信フレームワーク200は、移動通信装置が検索されたデータにおけるマルウェアの特定に反応する方法を除くと、図1の移動通信フレームワーク100と同様である。
【0020】
より詳細には、ユーザには、オペレーション5において一つの選択肢が与えられるだけである。即ち、ユーザは、マルウェアを組み込んでいることが発見されたデータに関連するダイアログを閉じることしかできない。オペレーション6に注意されたい。
【0021】
図3は、一実施形態に係る移動通信装置に関連するアーキテクチャー300を示す。このアーキテクチャー300は、図1及び図2の移動通信装置に組み込むことが可能である。当然ながら、アーキテクチャー300は、所望のいかなる状況においても実施されうるものである。
【0022】
図示されたように、このアーキテクチャー300は、複数の移動アプリケーションプログラム302を含むことができる。この説明においては、移動アプリケーションプログラム302は、種々のタスクを実行するために移動通信装置にインストールされる、いかなるアプリケーションプログラム、ソフトウェア、等を含むことができる。更に、このようなアプリケーションプログラム302は、ユーザの要求によって、ファームウェア、ハードウェア、等で実施されてもよいことに注意されたい。
【0023】
別の実施形態では、アプリケーションプログラム302は、タスクが電子メールの管理を含むようなメールアプリケーションプログラムを含んでいるが、これに限定されない。更に、アプリケーションプログラムは、タスクがネットワークのブラウジングを含むようなブラウザアプリケーションプログラムを含んでいてもよい。更に、アプリケーションプログラムは、タスクが複数の電話番号の管理を含むような電話帳アプリケーションプログラムを含んでいてもよい。オプションとして、アプリケーションプログラムは、タスクがメッセージの伝送を含むようなメッセージアプリケーションプログラムを含んでいてもよい。いかなる形式のアプリケーションプログラムが含まれてもよいことに注意されたい。例えば、Java(登録商標)アプリケーションプログラム又はそれと同様のものが含まれてもよい。
【0024】
続けて図3を参照する。スキャニングサブシステム304は、このスキャニングサブシステム304に関連した第1アプリケーションプログラムインターフェイス(API)306及び第1ライブラリー308を介してアプリケーションプログラム302と通信状態にある。第1アプリケーションプログラムインターフェイス306及び第1ライブラリー308に関連した任意の例示的細部に関するより多くの情報を、図4から図12を参照して以下に詳細に説明する。
【0025】
オプションとして、アプリケーションプログラム302は、スキャニングサブシステム304によるスキャニングを容易にするためにスキャニングサブシステム304へ情報を伝送することができる。このような情報は、スキャンされるべきデータの形式、及びこのようなスキャニングに関連したタイミングに関するものであってもよい。このようにスキャニングサブシステム304がアプリケーションプログラム302と情報を交換する方法に関するより多くの例示的情報を、図13〜図15を参照して説明する。
【0026】
図3に示すように、第1ライブラリー308は、更新マネージャー310、コンフィギュレーションマネージャー312、及びシグネチャーデータベース314を含むことができる。使用に際して、更新マネージャー310は、シグネチャーデータベース314をスキャニングのための最新のシグネチャーで更新するプロセスを管理することができる。一実施形態では、更新プロセスは、移動通信フレームワークに固有の限定帯域巾に適応するようにストリームライン化されていてもよい。このような更新プロセスに関するより多くの例示的情報を、図16及び図17を参照して説明する。
【0027】
図3のアーキテクチャー300のコンポーネントとして、オペレーティングシステム316が更に設けられており、当該オペレーティングシステム316は、移動通信装置にインストールされており、且つアプリケーションプログラム302を実行するようになっている。一実施形態では、スキャニングサブシステム304は、プラットホームとは独立したものでよく、従って、いかなる形式のオペレーティングシステム/移動通信装置との組合せにおいても実施することができる。
【0028】
この特徴に適応するために、第2のアプリケーションプログラムインターフェイス318と、第2のライブラリー320は、種々の機能、例えば、システム/ライブラリー初期化322、エラーファンクション336、メモリ割り当て334、入力/出力(I/O)328、データ認証332、同期330、ハイパーテキスト転送プロトコル326、装置情報324、デバッグ338、及び他のファンクション(即ち共有メモリ、システム時間、等)をサポートし得るものになっている。一実施形態では、第2のアプリケーションプログラムインターフェイス318は、スキャニングサブシステム304と同様に、プラットホームとは独立したものであってもよい。第2のアプリケーションプログラムインターフェイス318及び第2のライブラリー320に関連した任意の例示的細部に関するより多くの情報を、添付資料Aを参照して以下に詳細に説明する。
【0029】
図4は、一実施形態に係るものであり、動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのシステムを示す図である。一例においては、このシステム400は、図3のアーキテクチャー300のアプリケーションプログラム、スキャニングサブシステム、及びオペレーティングシステムの状況で実施されうる。しかしながら、このシステム400は、所望のいかなる状況において実施されてもよいことに注意されたい。
【0030】
図示されたように、ワイヤレスネットワークを介して通信することのできる移動通信装置にインストールされたオペレーティングシステム402が含まれている。更に、移動通信装置にインストールされ、且つタスクを実行するためにオペレーティングシステム402を使用して実行されるアプリケーションプログラム404も設けられている。
【0031】
スキャニングサブシステム406は、アプリケーションプログラムインターフェイス及びそれに関連したライブラリーを介してアプリケーションプログラム404と通信する状態を維持する(例えば、図3の第1アプリケーションプログラムインターフェイス306及び第1ライブラリー308を参照されたい)。このようなスキャニングサブシステム406は、アプリケーションプログラム404により実行されるタスクと共働してセキュリティ又はコンテンツ分析機能にアクセスするようになっている。一実施形態では、セキュリティ又はコンテンツ分析は、セキュリティ分析を含んでいてもよい。別の実施形態では、セキュリティ又はコンテンツ分析は、コンテンツ分析を含んでいてもよい。更に、セキュリティ又はコンテンツ分析は、オンデマンドウイルススキャニング及び/又はオンアクセスウイルススキャニングを含んでいてもよい。
【0032】
使用に際して、セキュリティ又はコンテンツ分析機能が、アプリケーションプログラム404によって実行されるタスクに関連したアプリケーションデータに適用されてもよい。ここでの説明においては、アプリケーションデータは、入力され、処理され、出力され、又は、アプリケーションプログラム404によって行われるタスクの実行に別の方法で関連する、いかなるデータを含んでいてもよい。
【0033】
アプリケーションプログラムインターフェイスを介してスキャニングサブシステム406及びアプリケーションプログラム404を密に結合することによって、要求されるオーバーヘッド及びコードの冗長性が僅かになる。このようなアプリケーションプログラムインターフェイス及びそれに関連したライブラリーに関するより多くの例示的情報について、以降の図面を参照して以下に詳細に説明する。
【0034】
図5は、図4のシステム400のアプリケーションサーバーの実施形態に係るものであって、移動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのフレームワーク500を示す。このフレームワーク500は、所望のいかなる状況において実施されてもよいことに注意されたい。
【0035】
図示されたように、スキャニングサブシステムは、アプリケーションプログラムインターフェイス506及びそれに関連したプロトコル(即ち、uItronメッセージングシステム)を介してアプリケーションプログラム504と通信するスキャニングプログラム502を含むことができる。以下で詳細に述べるように、アプリケーションプログラムインターフェイス506は、スキャニングプログラム502に関連した第1コンポーネント508と、アプリケーションプログラム504に関連した第2コンポーネント510とを含むことができる。
【0036】
アプリケーションプログラムインターフェイス506が設けられた種々のコール512は、オープンコール、データコール、及びクローズコールを含んでいてもよい。使用に際して、スキャニングプログラム502は、アプリケーションプログラム504によって実行されるタスクに関連したアプリケーションデータ516をスキャンすることができる。
【0037】
図6は、図4のシステム400の再入可能ライブラリーの実施形態に係るものであり、移動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのフレームワーク600を示す。このフレームワーク600は、所望のいかなる状況において実施されてもよいことに注意されたい。
【0038】
図示されたように、スキャニングサブシステムは、再入可能ライブラリー602を含むことができる。使用に際して、スキャニングサブシステムの再入可能ライブラリー602は、アプリケーションプログラム604に実行時にリンクされてもよい。従って、アプリケーションプログラムインターフェイス606は、複数のアプリケーションプログラム604のそれぞれに設けられてもよい。
【0039】
図5における先のフレームワーク500と同様に、アプリケーションプログラムインターフェイス606は、オープンコール、データコール及びクローズコールを含む種々のコール612を含むことができる。使用に際して、再入可能ライブラリー602を用いて、アプリケーションプログラム604によって実行されるタスクに関連したアプリケーションデータ616をスキャンしてもよい。
【0040】
図7は、図4のシステム400の状況で実施されたオンデマンドスキャニングシステム700を示す。このシステム700は、所望のいかなる状況において実施されてもよいことに注意されたい。
【0041】
オンデマンドスキャニングは、不当なコンテンツ又はコードを除去するために、記憶されたアプリケーションデータ702をスキャニングする。ユーザは、ユーザインターフェイス703を介してオンデマンドスキャニングを開始することができる。更に、各アプリケーションプログラム704は、スキャニングサブシステム706をコールして、それに対応するメモリに記憶されたオブジェクトのスキャニングを行うことができる。
【0042】
一方、オンアクセススキャニングは、アプリケーションプログラム704がアプリケーションデータ702を処理又はレンダリングする前に、不当なコード又はコンテンツを特定する。オンアクセススキャニングは、スキャニングサブシステム706が不当なアプリケーションデータ702を検出するまでユーザにとって透過的である。
【0043】
図8は、一実施形態に係るものであり、移動アプリケーションプログラム及びスキャニングサブシステムをインターフェイスするのに使用できるアプリケーションプログラムインターフェイス800の種々のコンポーネントの階層を示す図である。オプションとして、このアプリケーションプログラムインターフェイス800は、図4のシステム400の状況において実施されてもよい。しかしながら、このアプリケーションプログラムインターフェイス800は、所望のいかなる状況において実施されてもよいことに注意されたい。
【0044】
図8に示すように、アプリケーションプログラムインターフェイスファンクションは、MDoScanOpen()802、MDoScanClose()804、MDoScanVersion()806、及びMDoScanData()808を備えている。MDoScanOpen()802及びMDoScanClose()804は、スキャニングサブシステムオブジェクトのインスタンスを生成/オープン及びクローズするのに使用される。MDoScanVersion()806は、スキャニングサブシステム及びシグネチャーパターンデータのバージョン情報を提供する。MDoScanData()808は、コンテンツ/データスキャニング及びレポーティングを実行する。また、スキャナのアプリケーションプログラムインターフェイスにはMDoScanUpdate()810も含まれており、当該MDoScanUpdate()810は、マルウェアシグネチャーデータベース及び検出ロジックの更新を提供する。このMDoScanUpdate()810が更新アプリケーションによりコールされると、ライブラリーは、リモートバックエンドサーバー(例えば、図1を参照されたい)に接続して、最新のファイル(即ち、mdo.sdb、mdo.pd)をダウンロードする。
【0045】
スキャニングサブシステムのコンフィギュレーションは、MDoConfigOpen()812、MDoConfigClose()814、MDoConfigGet()816及びMDoConfigSet()818を使用して行われる。このアプリケーションプログラムインターフェイス800をコールすることによりコンフィギュレーションハンドルが得られると、コールしたアプリケーションプログラムは、ゲット及びセットコンフィギュレーションAPIを使用して、スキャニングサブシステムコンフィギュレーション変数を問合せて、それをセットする。
【0046】
また、このアプリケーションプログラムインターフェイス800には、MDoGetLastError()820という名前のエラー検索ファンクションも含まれている。このファンクションは、発生した最新のエラーに関する情報を検索するのに使用される。
【0047】
APIコールのいずれかがなされる前に、好ましくはブート時に、ライブラリー環境設定を初期化するために、MDoSystemInit()825がコールされる。ライブラリーは、コンフィギュレーション設定、不当なコード検出ロジック(即ち、mdo.pd)及びシグネチャーデータベース(即ち、mdo.adb)、並びに内部変数(即ち、同期オブジェクト等)を固定の持続的記憶位置に保持する。
【0048】
MDoLibraryOpen()830及びMDoLibraryClose()840は、ライブラリーを初期化するのに使用される。アプリケーションプログラムは、他のAPIコールがなされる前にMDoLibraryOpen()830をコールし、また、アプリケーションプログラムは、終了の前にMDoLibraryClose()840をコールすることができる。
【0049】
アプリケーションプログラムインターフェイス800は、種々のアプリケーションプログラムインターフェイスコンポーネントを使用して、システム環境初期化、バージョン状態情報の検索、スキャニングサブシステムの更新、スキャニング、スキャニングサブシステムのコンフィギュレーション等の種々の機能をサポートすることができる。アプリケーションプログラムインターフェイス800に関する上記機能について、より多くの情報を以下に説明する。
【0050】
システム初期化
MDoSystemInit()825は、特定の持続記憶位置に保持されるデータに対する検証及び環境初期化を実行する。不当なコード/コンテンツのシグネチャーパターンデータベース(即ち、mdo.sdb)、検出ロジック(即ち、mdo.pd)、コンフィギュレーション設定、及び同期オブジェクトは、これらの位置に記憶することができる。MDoSystemInit()825は、いずれかのAPIファンクションが実行される前に一度コールすることができる(即ち、ブート時に)。
【0051】
テーブル#1は、MDoSystemInit()825に関する例示的情報を示す。
テーブル#1
MDoSystemInit
説明
システム環境情報を検証し、初期化する。
プロトタイプ
Int MDoSystemInit(void);
パラメータ
なし
リターン値
成功の場合は0、他の場合は非ゼロのエラーコード。
【0052】
ライブラリーインターフェイスAPI
アプリケーションプログラムインターフェイス800は、複数のライブラリーインターフェイスコンポーネントを含む。APIインターフェイスのインスタンス化は、MDoLibraryOpen()830を使用して行うことができる。このファンクションを使用して得られるインスタンス化されたライブラリーインターフェイスハンドルは、その後のAPIコールに使用することができる。アプリケーションプログラムが終了する前に、ハンドルをリリースするためにMDoLibraryClose()840をコールすることができる。図9は、MDoLibraryOpen()830及びMDoLibraryClose()840を使用する例示的ライブラリーインターフェイス初期化900を示す。
【0053】
テーブル#2は、MDoLibraryOpen()830に関する例示的情報を示す。
テーブル#2
MDoLibraryOpen
説明
APIライブラリーインターフェイスハンドルを初期化して、返す。
プロトタイプ
MDOLIB_HANDLEMDoLibraryOpen(void);
パラメータ
なし
リターン値
成功の場合はライブラリーインターフェイスハンドル、他の場合はINVALID_MDOLIB_HANDLE。
MDoLibraryClose()も参照のこと
【0054】
テーブル#3は、MDoLibraryClose()840に関する例示的情報を示す。
テーブル#3
MDoLibraryClose
説明
MDoLibraryClose()ファンクションにより返されたAPIライブラリーハンドルに関連したシステムリソースをリリースする。
プロトタイプ
Void MDoLibraryClose(MDOLIB_HANDLEhLib);
パラメータ
hLib
[入力] MDoLibraryOpenによって返されるハンドル化されたライブラリー
リターン値
なし
MDoLibraryOpen()も参照のこと
【0055】
エラー検索
MDoLibraryOpen()830によるライブラリーの初期化及びインスタンス化が成功すると、MDoGetLastError()820は、発生した最新のエラーに関する情報をアプリケーションプログラムに提供する。
【0056】
テーブル#4は、MDoGetLastError()820に関する例示的情報を示す。
テーブル#4
MDoGetLastError
説明
指定のライブラリーインスタンスの最新のエラー値を返す。
プロトタイプ
MDoErroeCode MDoGetLastError(MDOLIB_HANDLEhLib);
パラメータ
hLib
[入力] MDoLibraryOpenによって返されるハンドル化されたライブラリー
【0057】
リターン値
MDoErrorCodeのデータ形式は、コンポーネント及びエラーコードの両方を含む32ビット非符号化整数として定義することができる。多くの場合、検索されたエラー情報は、プラットホームの抽象APIレイヤーにおいてセットされている。そのため、ここで与えられるMDoErrorCodeフォーマットは、抽象レイヤーAPI(添付資料Aを参照)により定義されたAlErrorCodeフォーマットと同様である。図10は、一実施形態に基づくMDoErrorCodeの例示的フォーマット1000を示す。
【0058】
テーブル#5は、MDoGetLastError()820に関する例示的情報を示す。
テーブル#5
MDoErrorCodeは、次のように定義される。
Typedef unsigned long MDoErrorCode;
MDoLibraryOpen()、MDoScanOpen()、MDoScanData()、MDoScanUpdate()も参照のこと。
【0059】
例示的コンピュータコード#1は、MDoGetLastError()820へのコールと共にサンプルのライブラリーコーリングシーケンスを示す。
コンピュータコード#1
【表1】
【0060】
エラーコード
MDoGetLastError()820によりレポートされるエラーコードは、2つの部分、即ちコンポーネントコード及びエラーコードを含んでいる。更なる情報については、添付資料Aを参照されたい。テーブル#6は、例示的エラーコード及びそれに対応するコンポーネントコードをリストしたものである。また、MDoGetLastError()820は、抽象ライブラリーレイヤーにおいてセットされたエラーコードも返す。次のリストは、例示のためのものに過ぎず、何らこれに限定するものではないことに注意されたい。
テーブル#6
【表2】
【0061】
スキャニングサブシステムAPI
アプリケーションプログラムインターフェイス800は、複数のスキャニングサブシステムコンポーネントを含んでいる。スキャニングサブシステムAPIコンポーネントは、データ/コンテンツスキャニング及びシグネチャー更新サービスを提供する。MDoScanOpen()802、MDoScanClose()804、MDoScanVersion()806、MDoScanUpdate()810、及びMDoScanData()808が含まれている。MDoScanOpen()802は、スキャニングサブシステムオブジェクトのインスタンス化に使用される。MDoScanVersion()806は、スキャニングサブシステム及びシグネチャーデータベースのバージョン情報を提供する。MDoScanUpdate()810は、シグネチャーデータベースの更新を実行する。MDoScanData()808は、不当なコード/コンテンツデータのスキャニングを実行する。図11は、一実施形態に係るスキャニングサブシステムAPIコールシーケンス1100を示す。
【0062】
MDoScanOpen
テーブル#7は、MDoScanOpen()802に関する例示的情報を示す。
テーブル#7
説明
スキャニングサブシステムのインスタンスのハンドルを返す。
プロトタイプ
MDOSCAN_HANDLEMDoScanOpen(MDOLIB_HANDLE hLib);
パラメータ
[入力] MDoLibraryOpen()ファンクションを使用して得たライブラリーのハンドル。
リターン値
成功の場合にはスキャニングサブシステムインスタンスハンドル。
エラーの場合にはINVALID_MDOSCAN_HANDLEが返される。
MDoScanClose()、MDoScanData()、MDoScanUpdate()、MDoLibraryOpen()も参照のこと。
【0063】
MDoScanClose
テーブル#8は、MDoScanClose()804に関する例示的情報を示す。
テーブル#8
説明
スキャニングサブシステムのインスタンス及びそれに関連したシステムリソースをリリースする。
プロトタイプ
VoidMDoScanClose(MDOSCAN_HANDLE hScan);
パラメータ
hScan
[入力] MDoScanOpen()ファンクションを使用して得られたスキャニングサブシステムのハンドル。
リターン値
なし
MDoScanOpen()、MDoScanData()、MDoScanUpdate()も参照のこと。
【0064】
MDoScanVersion
テーブル#9は、MDoScanVersion()806に関する例示的情報を示す。
テーブル#9
説明
MDoScanOpen()ファンクションにより返されたスキャナハンドルからスキャニングサブシステム及びシグネチャーのバージョン情報を得る。
プロトタイプ
Int MDoScanVersion(MDOSCAN_HANDLEhScan,
SVerInfo* pVersion);
パラメータ
hScan
[入力] MDoScanOpen()ファンクションを使用して得たスキャニングサブシステムのハンドル。
pVersion
[出力] バージョン情報を含む構造体へのポインタ。
リターン値
成功の場合には0、他の場合には−1。
MDoScanOpen()、MDoScanClose()、MDoScanData()、MDoScanUpdate()も参照のこと
【0065】
例示的コンピュータコード#2は、サンプルのバージョン情報の構造体を示す。
コンピュータコード#2
【表3】
【0066】
MDoScanVersion()806によりレポートされた移動通信装置特定ストリングは、AlDevGetInfoにより返される装置特定ストリングを使用してセットされる(添付資料Aを参照)。
【0067】
MDoScanData
テーブル#10は、MDoScanData()808に関する例示的情報を示す。
テーブル#10
説明
MDoScanDataは、特定のデータ形式をスキャンするためにアプリケーションプログラムからコールされる。コールするアプリケーションプログラムは、スキャナアクション、スキャンターゲット、データ形式、データにアクセスするためのI/Oファンクションのセット、及び任意のコールバックファンクションを指定する。データスキャニングの結果は、データ構造体を提供した呼出元に返される。MDoScanDataは、再入可能である。
プロトタイプ
Int MDoScanData(MDOSCAN_HANDLEhScan,
SScanParam* pParam,
SScanResult* pResult);
パラメータ
hScan
[入力] MDoScanOpen()ファンクションへのコールで得られたスキャニングサブシステムのハンドル。
pParam
[入力] データスキャンパラメータを含む構造体へのポインタ。
pResult
[出力] データスキャン結果を含む構造体へのポインタ。
リターン値
成功の場合は0、他の場合には−1、エラーコードがセットされる。
MDoScanOpen()、MDoScanClose()、MDoScanVersion()、MDoScanUpdate()も参照のこと。
【0068】
MDoScanUpdate
テーブル#11は、MDoScanUpdate()810に関する例示的情報を示す。
テーブル#11
説明
不当なコード/コンテンツシグネチャーパターンデータベース(mdo.sdb)及び検出ロジック(mdo.pd)の更新を実行する。
プロトタイプ
Int MDoScanUpdate(MDOSCAN_HANDLEhScan,
SUpdateParam* pParam);
パラメータ
hScan
[入力] MDoScanOpen()ファンクションを用いて得たスキャンハンドル。
pParam.
[入力] 更新のキャンセル/中止及び進捗状態更新用のコールバックファンクションのポインタを含む更新パラメータの構造体へのポインタ。
【0069】
例示的コンピュータコード#3は、更新パラメータ構造体の定義の態様を示す。
コンピュータコード#3
【表4】
【0070】
コールするアプリケーションプログラムは、ファンクションをコールするときに、ファンクションポインタと、ファンクションへ渡されるべきデータとをセットすることができる。テーブル#12に注目されたい。
テーブル#12
【表5】
【0071】
コンフィギュレーションAPI
アプリケーションプログラムインターフェイス800は、複数のコンフィギュレーションコンポーネントを含む。スキャニングサブシステムの設定を検索し指定するのに使用されるファンクションのセットが含まれている。これらファンクションの1つの目標は、アプリケーションプログラム及びスキャニングサブシステムに集中化ランタイムコンフィギュレーションアクセスを提供することである。コンフィギュレーションデータは、不揮発性持続データ記憶装置(即ち、フラッシュメモリ、等)に記憶される。
【0072】
図12は、一実施形態に基づく一つの例示的コンフィギュレーションAPIコールシーケンス1200を示す。図示されたように、MDoConfigOpen()830は、コンフィギュレーションの検索及び指定ファンクションへ渡すべきハンドルを返す。MDoConfigClose()814は、MDoConfigOpen()812により返されるコンフィギュレーションハンドルをリリースし、クローズするのに使用される。MDoConfigSet()818は、指定のコンフィギュレーション変数を指定値にセットし、MDoConfigGet()816は、指定の変数に対するコンフィギュレーション値を返す。MDoConfSet()818により変更されたコンフィギュレーション変数(1つ又は複数)の設定は、MDoConfigClose()814がコールされるまで永久記憶装置へ必ずしもセーブされない。アプリケーションプログラムは、コンフィギュレーションオープン、ゲット又はセットをコールし、そして変数値にアクセスするか及び/又はそれを指定するときにはクローズファンクションに直ちに従うことができる。
【0073】
アプリケーションプログラムインターフェイス800のコンフィギュレーションコンポーネントを使用して指定/検索されたコンフィギュレーション変数及び値は、nullキャラクタ(‘\0’)で終わる8ビットキャラクタストリングで表すことができる。テーブル#13は、使用可能なコンフィギュレーション変数をリストしたものである。
テーブル#13
【表6】
【0074】
MDoConfigOpen
テーブル#14は、MDoConfigOpen()812に関する例示的情報を示す。
テーブル#14
説明
その後のコールに渡すべきコンフィギュレーション設定に対するハンドルをMDoConfigGet()及びMDoConfigSet()へ返す。
プロトタイプ
MDOCONFIG_HANDLEMDoConfigOpen(MDOLIB_HANDLE hLib);
パラメータ
hLib
[入力] MDoLibraryOpen()ファンクションを用いて得たライブラリーのハンドル。
リターン値
成功の場合はコンフィギュレーションハンドル。エラーの場合はINVALID_MDOCONFIG_HANDLEが返される。
MDoConfigClose()、MDoConfigSet()、MDoCongigGet()も参照のこと。
【0075】
MDoConfigClose
テーブル#15は、MDoConfigClose()814に関する例示的情報を示す。
テーブル#15
説明
システムリソースをリリースし、コンフィギュレーションハンドルをクローズする。
プロトタイプ
VoidMDoConfigClose(MDOCONFIG_HANDLE hConfig);
パラメータ
hConfig
[入力] MDoConfigOpen()ファンクションによって返されたコンフィギュレーションハンドル。
リターン値
なし
MDoConfigOpen()、MDoConfigSet()、MDoConfigGet()も参照のこと
【0076】
MDoConfigGet
テーブル#16は、MDoConfigGet()816に関する例示的情報を示す。
テーブル#16
説明
指定のコンフィギュレーション変数に対するコンフィギュレーション値を得る。
プロトタイプ
Int MDoConfigGet(MDCONFIG_HANDLEhConfig
charconst* pszName,
char* pBuffer,
unsignedint uSize);
パラメータ
hConfig
[入力] MDoConfigOpen()ファンクションによって返されたコンフィギュレーションハンドル。
pszName
[入力] NULL終端のコンフィギュレーション変数の名前。
pBuffer
[出力] 指定された変数に対するNULL終端のコンフィギュレーション設定/値。
uSize
[入力] pBufferのバイトでの長さ.
リターン値
成功の場合は0、他の場合は−1
MDoConfigOpen()、MDoConfigClose()、MDoConfigSet()も参照のこと。
【0077】
MDoConfigSet
テーブル#17は、MDoConfigSet()818に関する例示的情報を示す。
テーブル#17
説明
指定のコンフィギュレーション変数の値をセットする。
プロトタイプ
Int MDoConfigGet(MDOCONFIG_HANDLEhConfig
charconst* pszName
char const* pszValue);
パラメータ
hConfig
[入力] MDoConfigOpen()ファンクションによって返されるコンフィギュレーションハンドル。
pszName
[入力] NULL終端のコンフィギュレーション変数の名前。
pszValue
[入力] 指定された変数に対するNULL終端の新たなコンフィギュレーション設定/値
リターン値
成功の場合は0、他の場合は−1。
MDoConfigOpen()、MDoConfigClose()、MDoConfigGet()も参照のこと。
【0078】
スキャニングを容易にするためのアプリケーションプログラム/スキャニングサブシステム通信
先に述べたように、アプリケーションプログラムは、スキャニングサブシステムによるスキャニングを容易にするためにスキャニングサブシステムへ情報を伝送することができる。この伝送は、上述したAPIを介することによって容易にされている。上述の情報は、スキャニングされるべきデータの形式と、このようなスキャニングに関連したタイミングとに関係しうるものである。上述のAPIがこれを達成する方法に関する説明を次に行う。
【0079】
スキャンパラメータ(SScanParam)
コールするアプリケーションプログラムは、SScanParam構造体を使用してスキャニングパラメータをスキャニングサブシステムに供給することができる。スキャンパラメータに含まれる情報は、スキャニングサブシステムに、1)スキャニングサブシステムアクション形式(即ち、iAction)、2)スキャンデータ形式(即ち、スキャニングされるべきアプリケーションデータの形式、iDataType)、3)スキャンターゲットに対するデータポインタ(即ち、pPrivate)、4)バイトでのデータサイズを検索するためのファンクション(即ち、pfGetSize)、5)スキャンデータをリサイズするためのファンクション(即ち、pfSetSize)、6)スキャンデータのブロックを検索するためにスキャニングサブシステムにより使用されるファンクション(即ち、pfRead)、6)スキャンデータを書き込むのに使用されるファンクション(即ち、pfWrite)、及び7)スキャニングサブシステム状態/進行レポートのためのコールバックファンクション(即ち、pfCallBack)を提供する。
【0080】
例示的コンピュータコード#4は、データスキャンパラメータ構造体を示す。
コンピュータコード#4
【表7】
【0081】
スキャンアクション(iAction)
スキャンアクションは、供給されたアプリケーションデータに関して実行されるべきスキャニングの形式を指定する。テーブル#18は、種々の例示的スキャンアクションを示す。
テーブル#18
【表8】
【0082】
スキャンデータ形式(iDataType)
コールするアプリケーションプログラムは、この変数を使用してアプリケーションデータ形式及びフォーマットをスキャニングサブシステムに通知してもよい。
【0083】
図13は、アプリケーションプログラムがAPIを介してスキャニングサブシステムへ通信することのできる種々の例示的なアプリケーションデータ形式1300を示す。urlストリングフォーマットは、ユニホームリソースロケータ(RFC1738)の仕様に合致することができる。E−メールストリングフォーマットは、インターネットE−メールアドレスフォーマット(RFC822)に合致することができる。デフォールトドメインは、所望のいかなるドメインにセットされていてもよい。更に、電話番号ストリングは、数字キャラクタ‘0’−‘9’及び‘#’及び‘*’キャラクタを含んでいてもよい。
【0084】
スキャンデータポインタ/ハンドル(pPrivate)
アプリケーションスキャンオブジェクトに対するポインタ(又はハンドル)が更に提供される。スキャニングサブシステムは、必ずしも、このデータポインタ/ハンドルを使用して直接メモリI/Oを実行しない。このデータポインタ/ハンドルは、呼出元指定のI/Oファンクションを使用して読み取り/書き込みを実行するために呼出元へ返送される。
【0085】
スキャンデータサイズ
このファンクションは、コールしたアプリケーションプログラムからスキャンターゲットデータサイズ(バイト数)を得るためにスキャニングサブシステムにより使用される。
【0086】
スキャンデータリサイズ(pfSetSize)
このファンクションは、修復/清浄化されているアプリケーションデータを所与のサイズ(バイト数)にリサイズすることを、コールしたアプリケーションプログラムに要求するためにスキャニングサブシステムにより使用される。このファンクションは、スキャン及び修復/削除オプションにと共に使用されてもよい。
【0087】
スキャンデータ読み取りファンクション(pfRead)
このファンクションは、コールしたアプリケーションプログラムから指定量のアプリケーションデータを読み取るためにスキャニングサブシステムによって使用されうるものである。
【0088】
スキャンデータ書き込みファンクション(pfWrite)
これは、オプションのパラメータであって、当該パラメータは、修復プロセスの一部分としてスキャンオブジェクトに指定量のアプリケーションデータを書き込むためにスキャニングサブシステムにより使用される。このファンクションポインタは、修復又は削除用にスキャンアクションがセットされた場合にセットされてもよい。
【0089】
コールバックファンクション(pfCallBack)
指定された場合に、スキャニングサブシステムは、以下のテーブルに示す情報で指定のファンクションをコールする。コールバックファンクションは、負のリターン値が返された場合には、スキャニングプロセスを中止する。テーブル#19は、例示的コールバックコードリストを示す。
テーブル#19
【表9】
【0090】
例示的コンピュータコード#5は、スキャニングサブシステムのコールバック構造体を示す。
コンピュータコード#5
【表10】
【0091】
スキャン結果(SScanResult)
オブジェクトスキャニングの結果、即ち検出されたマルウェア情報は、コールしたアプリケーションプログラムにより提供されたSScanResult構造体で、コールしたアプリケーションプログラムへ返される。このSScanResult構造体は、スキャン結果情報を含む構造体に対するポインタと、スキャン結果リソースを削除するのに使用されるファンクションへのポインタとを含む。スキャン結果を保持するのに使用されるメモリは、スキャニングサブシステムにより割り当てられ、そしてpfDeleteResultポインタが指すファンクションをコールすることにより解放される。
【0092】
例示的なコンピュータコード#6は、サンプルコーリングシーケンスを示す。
コンピュータコード#6
【表11】
【0093】
例示的なコンピュータコード#7は、検出された不正コード/コンテンツ情報構造体を示す。
コンピュータコード#7
【表12】
【0094】
例示的なコンポーネントコード#8は、スキャン結果構造体を示す。
コンピュータコード#8
【表13】
【0095】
重大度及びビヘイビアレベル(uBehavior)
図14は、一実施形態に係るものであり、SDetect構造体に含まれるマルウェアの重大度及びアプリケーションプログラムのビヘイビアレベルを含むビットフィールド変数1400を示す。
【0096】
テーブル#20は、例示的なマルウェアの重大度のリストを示す。
テーブル#20
【表14】
【0097】
スキャニングサブシステムは、スキャンされたアプリケーションデータが移動通信装置のユーザにとって有害なマルウェアを含む場合に、MDO_SC_USERフラグをセットする。移動通信装置それ自体にとって有害なものである場合には、MDO_SC_TERMINALフラグがセットされる。ユーザ及び移動通信装置の両方にとって有害である場合には、MDO_SC_USER及びMDO_SC_TERMINALの両フラグがセットされる。
【0098】
アプリケーションプログラムのビヘイビアレベルは、検出されたマルウェアを含むアプリケーションデータの処置方法を指定する。テーブル#21は、ビヘイビアレベル値と、アプリケーションプログラムによる対応アクションとをリストする。
テーブル#21
【表15】
【0099】
スキャンされたアプリケーションデータに多数の不正コードが見つかったときには、コールしたアプリケーションプログラムは、最も高いビヘイビアレベルでアクションすることが期待される。例えば、MDO_BC_LEVEL0及びMDO_BC_LEVEL3の両方がレポートされる場合には、アプリケーションプログラムは、MDO_BC_LEVEL3のアクションをとることができる。
【0100】
図15は、スキャニングサブシステムによるスキャニングのタイミングが、図13の変数により特定されたデータ形式のファンクションにつれて変化する態様を示すチャート1500である。
【0101】
シグネチャーデータベース更新
先に述べたように、更新プロセスは、移動通信フレームワークに固有の限定帯域巾に適応するようにストリームライン化されてもよい。これを達成する種々の方法に関するより多くの情報を以下に示す。
【0102】
更新されたコンポーネント
MDoScanUpdateファンクションは、2つのコンポーネント[即ち、不正コード検出ロジック(mdo.pd)及びシグネチャーデータベース(mdo.sdb)]に更新サービスを提供する。一つのコンポーネント(即ち、mdo.pd)は、検出ロジックを含んでいて、新たなバージョンが使用できるときに完全に更新されてもよい。別のコンポーネント(即ち、mdo.sdb)は、n個の以前のバージョンまで増分的に更新されてもよい。第2のコンポーネントに対する完全な更新は、nより古いバージョンをもつ移動通信装置において実行することができる。例えば、nが5にセットされ、最新バージョンが20である場合には、15より古いバージョンをもつ移動通信装置において完全な更新が実行される。
【0103】
ユーザインターフェイスを介したアクチベーション
図16は、一実施形態に係るものであり、ユーザインターフェイスにより更新がどのように開始されるかを示す例示的フロー1600を示す。図示されたように、ウイルスパターンの更新は、移動通信装置のユーザがユーザインターフェイス1602を介してメニューエントリーを選択することにより開始できる。ユーザが更新メニューを選択すると、更新アプリケーション1604がアクチベートされ、適切な更新インターフェイスファンクション1606を介してバックエンドサーバーに接続する。
【0104】
通信プロトコル
更新ライブラリーは、HTTPプロトコルを介してバックエンドサーバーと通信することができる。
【0105】
更新プロセス
図17は、一実施形態に係るものであり、移動通信装置のスキャニングサブシステムを効率的に更新するための方法1700を示す。一実施形態において、この方法1700は、図3のアーキテクチャー300のアプリケーションプログラム、スキャニングサブシステム及びオペレーティングシステム、並びに図1及び2のシステムの状況で実施することができる。しかしながら、この方法1700は、所望のいかなる状況において実施されてもよいことに注意されたい。
【0106】
プロセスを開始するために、更新の要求を少なくとも1つの移動通信装置からバックエンドサーバーへ送信することができる。当然ながら、他の実施形態では、要求を伴わずに更新を送信してもよい。
【0107】
一実施形態では、更新は、要求データ構造体を使用して移動通信装置により要求される。任意であるが、このようなデータ構造体は、ユニホームリソースロケータ(URL)変数、移動通信識別子変数、アプリケーションプログラムインターフェイスのバージョン変数、検出ロジック変数、シグネチャーバージョン変数、及び/又は部分番号変数のような変数を含むことができる。
【0108】
テーブル#22は、このような目的で使用することのできる例示的URLを示す。
テーブル#22
<BASE-URL>?dev=<DEV-ID>&mdo=<MDO-VER>&eng=<ENG-VER>&sdb=<SDB-VER>&chk=<CHUNK>
上述のURL変数を説明するテーブルは、次の通りである。
【表16】
【0109】
テーブル#23は、上記説明に合致するURLの特定例である。
テーブル#23
http://update.mcafeeacsa.com/504i?dev=X504i05&mdo=2&eng=3&sdb=56&chk=1
【0110】
テーブル#23の上記URLは、ベースURL「http://update.mcafeeacsa.com/504i」、装置識別子として「X504i05」、APIのバージョン2、不正コード検出ロジックのバージョン3、及びシグネチャーデータベースのバージョン56を指定している。「chunk」又は部分、番号は、移動通信装置がバックエンドサーバーに最初にコンタクトするときに1にセットできることに注意されたい。また、ベースURLは、「UpdateURL」コンフィギュレーション変数を使用し、MDoConfigGetAPIを使用して得ることができる。
【0111】
要求を受け取った後に、バックエンドサーバーは、記憶された不正コード検出ロジック及びシグネチャーデータベースのバージョンを、URLでエンコードされたバージョン情報と比較することにより、どの更新パッケージをダウンロードする必要があるのかを決定する。
【0112】
更新が必要とされない場合には、バックエンドは、コンテンツなし応答を返す。オペレーション1701において、移動通信装置は、その応答を第1部分として受け取る。この第1部分が先述のコンテンツなし応答を含むと判断される場合には(判断1702を参照)、ダウンロードすべき更新がないので、方法1700は終了となる。このような特徴は、移動通信フレームワークに固有の限定帯域巾に適応する点で有益である。
【0113】
一方、更新パッケージの第1部分がリターンされる場合には、方法1700は、更新の第1部分の受信に続いて(又はおそらくそれと並列に)更新の付加的な部分を受信することにより続けられる。オペレーション1704−1708に注意されたい。また、第1部分は、全パッケージサイズ及び部分カウント情報を付随してもよいことに注意されたい。
【0114】
残りの更新部分をダウンロードするために、ダウンロードURLの部分番号を変更することができる。テーブル#24は、部分番号「3」を指定するURLの特定例を示す。
テーブル#24
http://update.mcafeeacsa.com/504i?dev=X504i05&mdo=2&eng=3&sdb=56&chk=3
【0115】
一実施形態では、更新の完全性が判断されてもよい。従って、更新は、更新の完全性が検証されたかどうかに基づいて、スキャニングサブシステムに条件付きでインストールされてもよい。
【0116】
オプションとして、更新の完全性が、シグネチャーを使用して判断されてもよい。このようなシグネチャーは、更新の部分の一つ(即ち、最後の部分)として受け取られてもよい。次いで、シグネチャーは、更新の部分の各々を使用して生成される別のシグネチャーに対して比較されてもよい。オペレーション1710に注意されたい。
【0117】
一実施形態では、シグネチャーは、RSAプライベートキーを使用して生成され、次いで、移動通信装置において、更新に含まれている対応のパブリックキーを使用して認証されてもよい。シグネチャーの検証及び生成は、更に、指定の認証ライブラリーを使用して実行されてもよい。
【0118】
完全性が検証されたものとすると、スキャニングサブシステムにより実行されるスキャニングが休止又は停止される。オペレーション1712に注意されたい。このような休止は任意であることに注意されたい。
【0119】
次いで、更新をスキャニングサブシステムにインストールすることができる。オペレーション1714に注意されたい。スキャニングが休止される実施形態では、更新がスキャニングサブシステムにインストールされたときに、スキャニングサブシステムを使用して、スキャニングをその後に再開することができる。オペレーション1716を参照されたい。
【0120】
移動通信フレームワークに固有の限定帯域巾に適応するために、更新の部分のサイズを最小にすることができる。更に、更新の部分を圧縮することもできる。
【0121】
更に別の実施形態では、更新の各部分のフォーマットは、移動通信フレームワークに固有の限定帯域巾に適応するように設計することができる。このようなフォーマットに関する更なる情報を以下に示す。
【0122】
テーブル#25は、更新の部分をダウンロードするための例示的フォーマットを示す。
テーブル#25
【表17】
【0123】
テーブル#25に示す上記部分の各々は、次のテーブル#26のように定義される。
テーブル#26
【表18】
【0124】
各部分は、ヘッダ及びデータで構成されている。このようなヘッダは、更新の関連部分の識別子、更新の関連部分の長さ、等を指示することができる。更に、ヘッダは、含まれているデータ名及びデータ長を指定すると共に、特別のCR+LF対をもつ実際のデータから分離することができる。テーブル#27は、ヘッダに関連した例示的データ/コンテンツ名を示す。
テーブル#27
【表19】
【0125】
テーブル#28は、例示的な更新パッケージを示す。
テーブル#28
【表20】
【0126】
抽象ライブラリーAPI
先に述べたように、移動通信装置に使用するためのプラットホーム独立システム及びそれに関連した方法が提供される。スキャニングの目的で移動通信装置のオペレーティングシステムと通信するプラットホーム独立のスキャニングサブシステムが含まれる。更に、オペレーティングシステム及びスキャニングサブシステムに接続するためのプラットホーム独立のアプリケーションプログラムインターフェイスも設けられる。このプラットホーム独立のアプリケーションプログラムインターフェイスは、プラットホーム独立のスキャニングサブシステムを、移動通信装置及びそれに関連したオペレーティングシステムにポーティングするための抽象ライブラリーを含む。
【0127】
この設計により、スキャニングサブシステムは、プラットホーム独立であることができ、従って、いかなる形式のオペレーティングシステム/移動通信装置の組合せにおいても実施することができる。
【0128】
一実施形態では、抽象ライブラリーは、システム初期化、ライブラリー初期化、エラーファンクション、メモリ割り当て、入力/出力(I/O)、データ認証、同期、ハイパーテキスト転送プロトコル、共有メモリ、システム時間、装置情報、及びデバッグをサポートすることができる。前記アプリケーションプログラムインターフェイスの1つの任意の実施に関連した更なる例示的情報を添付資料Aに示す。
【0129】
以上、種々の実施形態を説明したが、それらは、一例に過ぎず、それらに何ら限定されるものではないことを理解されたい。従って、好ましい実施形態の広さ及び範囲は、上述した実施形態のいずれにも限定されず、特許請求の範囲及びその均等物によってのみ定義されるべきである。
【0130】
添付資料A
【0131】
このアプリケーションプログラムインターフェイス(API)は、次のサブシステムを含む。
・システム初期化
・ライブラリー初期化
・エラーファンクション
・ヒープメモリ割り当て
・持続的メモリ/記憶装置I/O
・データ認証
・同期オブジェクト(セマフォ)
・HTTP API
・共有メモリ
・システム時間
・装置情報
・デバッグ
また、この添付資料には、APIライブラリーに使用するための抽象ライブラリー(AL)レイヤーで定義ざれたC言語定義(1つ又は複数)のセットも説明されている。
【0132】
システム初期化
プラットホーム/システムに依存するブート初期化は、AlLibrarySysInit()により実行される。このファンクションは、先に述べたMDoSystemInit()ファンクションからコールされるように設計されている。
【0133】
AlLibrarySysInit
説明
システムに依存する初期化を実行する。
プロトタイプ
intAlLibrarySysInit(void);
パラメータ
なし
リターン値
成功の場合0、他の場合は−1。
【0134】
ライブラリー初期化
このプラットホームの抽象APIライブラリーは、AlInitLibrary()ファンクションを使用して初期化される。この抽象ライブラリーは、抽象APIファンクションがコールされる前に一度初期化されるべきである。AlInitLibrary()により得られて初期化されるシステムリソースは、AlCleanupLibrary()ファンクションがコールされるときにリリースされる。
【0135】
AlInitLibrary
説明
ライブラリー初期化を実行する。このファクションは、MDoLibraryOpen()ファンクションによりコールされる。
プロトタイプ
intAlInitLibrary(void);
パラメータ
なし
リターン値
成功の場合0、他の場合は−1。
【0136】
AlCreanupLibrary
説明
AlInitLibrary()ファンクションにより得られたシステムリソースをリリースする。このファンクションは、先に述べたMDoLibraryClose()ファンクションによりコールされる。
プロトタイプ
voidAlCleanupLibrary(void);
パラメータ
なし
リターン値
なし
【0137】
エラーファンクション
ALライブラリーは、タスク/スレッド特有のエラーコードをセット及び検索するのに使用されるエラーファンクションのセットが含まれている。これは、適当なエラーコード及びコンポーネントコードをセットするのは、抽象レイヤーインプリメンターの役割である。
【0138】
AlGetLastError
説明
コーリングタスク/スレッドの最新のエラーコード値を返す。これらファンクションは、AlSetLastError()ファンクションを使用して、返された値をセットする。
AlErrorCodeデータ形式は、32ビットの非符号化値を使用して内的に表される。
プロトタイプ
AlErrorCodeAlGetLastError(void);
パラメータ
なし
リターン値
AlSetLastError()ファンクションを使用してセットされたコーリングスレッド/タスクの最新のエラー値。
【0139】
AlSetLastError
説明
コーリングスレッド/タスクに対する最新のエラーコードをセットする。
プロトタイプ
voidAlSetLastError(AlErrorCode errorCode);
パラメータ
errorCode
[入力] 32ビットのエラーコード値。
リターン値
なし
【0140】
エラー/状態コード
【表21】
【0141】
上記テーブルは、ALコンポーネント及びエラーコードのセットをリストする。AlSetLastErrorファンクションを使用してレポートされたエラーは、コンポーネントコードをエラーコードに結合することにより形成された32ビット値である。ALレベルにセットされたエラーは、エラーが発生したときに適当なアクションを取るためにMDoGetLastErrorファンクションを使用して検索される。
【0142】
ヒープメモリ割り当て
抽象レイヤーは、必要なメモリを動的に割り当てるために、コールしたアプリケーションプログラム(即ち「呼出元」)に対するヒープメモリ割り当てを提供する。割り当てられたメモリは、グローバルに共有可能で、多数のアプリケーション/タスクによりアクセスできるものと仮定されている。AlMemAlloc()及びAlMemFree()APIファンクションは、ヒープメモリの割り当て及び割り当て解除を提供する。
【表22】
【0143】
AlMemAlloc
説明
指定量の動的メモリを割り当て、そのメモリに対するポインタを返す。割り当てられたメモリブロックは、特殊なオペレーション(即ちメモリのロック)を必要とせず、呼出元(即ちコールしたアプリケーションプログラム)による直接のアクセスが可能である。
プロトタイプ
void* AlMemAlloc(unsignedint uSize);
パラメータ
uSize
[入力] 割り当てるメモリのバイトでの量。
リターン値
割り当てられたメモリに対するポインタ。要求が失敗に終わるか又は要求のサイズが0である場合には、NULL。
AlMemFree()も参照のこと。
【0144】
AlMemFree
説明
AlMemAlloc()ファンクションによってリターンされた動的メモリブロックを解放する。
プロトタイプ
void AlMemFree(void*pData);
パラメータ
pData
[入力] 開放すべきメモリブロックへのポインタ。
リターン値
なし
AlMemAlloc()も参照のこと。
【0145】
持続記憶装置I/O
持続的記憶装置(即ちフラッシュメモリ)へのアクセスは、ファイルI/O APIを使用して実行される。以下を参照されたい。
【表23】
【0146】
ファイルハンドル形式AL_FILE_HANDLEは、次のように定義される。
typedef struct AL_FILE_HANDLE_struct
{
} *AL_FILE_HANDLE;
【0147】
そして、無効の持続的記憶ハンドルINVALID_AL_FILE_HANDLEを指定するのに使用される定数は、次のように定義される。
#define INVALID_AL_FILE_HANDLE((AL_FILE_HANDLE)0)
【0148】
ファイル状態バッファ形式AlStatBufは、次のように定義される。
typedef struct AlStatBuf_struct
{
unsigned long ulSize;
unsigned long ulTime;
} AlStatBuf;
【0149】
AlFileOpen
説明
指定のファイルをオープンし、そのハンドルを返す。
プロトタイプ
AL_FILE_HANDLEAlFileOpen(const char* pszFilename,
Int iMode);
パラメータ
pszFilename
[入力] ファイル名/パスのストリング.
iMode
[入力] ファイルのアクセスモード.
AL_OPEN_READ 読み取りのためのファイルオープン
AL_OPEN_WRITE 読み取り及び書き込みの両方のためのファイルオープン
リターン値
成功の場合はファイルハンドル、他の場合はINVALID_AL_FILE_HANDLE
AlFileClose()、AlFileRead()、AlFileWrite()も参照のこと。
【0150】
AlFileClose
説明
指定のファイルハンドルに関連したシステムリソースをクローズし、リリースする。
プロトタイプ
VoidAlFileClose(AL_FILE_HANDLE hFile);
パラメータ
hFile
[入力] AlFileOpen()によって返されたファイルハンドル。
リターン値
なし
AlFileOpen()、AlFileRead()、AlFileWrite()も参照のこと。
【0151】
AlFileSeek
説明
リード/ライトファイルオフセットを再配置する。
プロトタイプ
longAlFileSeek(AL_FILE_HANDLE hFile,
Long lOffset,
Int iWhence);
パラメータ
hFile
[入力] オープンファイルのハンドル。
lOffset
[入力] iWhence directiveに関連するファイルオフセット。
iWhence
[入力] 初期位置。とり得る値は次の通りである。
AL_SEEK_SET オフセットパラメータは絶対的ファイルオフセットを指定する。
換言すれば、ファイルの開始からのオフセット。
AL_SEEK_CUR 相対的オフセットを指定し、即ちオフセットパラメータは現在ファ イルからのファイルオフセットを指定する。
AL_SEEK_END ファイルの終わりからのファイルオフセットを指定する。
リターン値
成功の場合は得られたファイルオフセット、他の場合は−1L。
AlFileOpen()、AlFileClose()、AlFileRead()、AlFileWrite()も参照のこと。
【0152】
AlFileRead
説明
ファイルからデータのブロックを読み取る。
プロトタイプ
Unsigned intAlFileRead(AL_FILE_HANDLE hFile,
void* pBuffer,
Unsigned int uSize);
パラメータ
hFile
[入力] オープンファイルのハンドル。
pBuffer
[出力] データバッファ
uSize
[出力] 読み込むデータ量。
リターン値
成功の場合は読み取ったバイト数、他の場合は−1。
AlFileOpen()、AlFileClose()、AlFileSeek()、AlFileWrite()も参照のこと。
【0153】
AlFileWrite
説明
データのブロックをファイルに書き込む。
プロトタイプ
unsigned intAlFileWrite(AL_FILE_HANDLE hFile,
void const* pBuffer,
unsigned int uSize );
パラメータ
hFile
[入力] オープンファイルのハンドル
pBuffer
[int] 書き込むデータを保持しているバッファ。
uSize
[出力] 書き込むデータの量。
リターン値
成功の場合は書き込まれたデータの量、他の場合は−1。
AlFileOpen()、AlFileClose()、AlFileSeek()、AlFileRead()も参照のこと。
【0154】
AlFileSetSize
説明
オープンファイルをリサイズする。
ネイティブのファイルリサイズのサポートをもたないプラットホームについては、抽象ライブラリーは、AlFileClose()ファンクションがコールされたときに各ファイルの始めに記憶されたサイズ情報を変更することにより、このファンクションを実施する。
プロトタイプ
unsigned intAlFileSetSize(AL_FILE_HANDLE hFile,
unsigned int uSize );
パラメータ
hFile
[入力] ライトモードでオープンファイルを指すハンドル。
uSize
[出力] バイトでの新たなファイル長。
リターン値
成功の場合は0、他の場合は−1。
AlFileStat()も参照のこと。
【0155】
AlFileStat
説明
ファイルサイズの検索及びタイムスタンプの生成。
ネイティブのファイルサイズ及び/又はタイムスタンプ情報の検索方法を備えていないプラットホームについては、抽象ライブラリーは、各ファイルの始めに情報を記憶することによりこのファンクションを実施する。
プロトタイプ
int AlFileStat(charconst* pszFilenames,
AlStatBuf* pStat );
パラメータ
pszFilename
[入力] 情報を検索するファイルの名称。
pStat
[出力] サイズ及びタイムスタンプを返すのに使用される構造体へのポインタ。この構造体は、次のフィールドを含む。
typedef structureAlStatBuf_struct
{
unsigned long ulSize; /* size in bytes */
unsigned long ulTime; /* creation time */
} AlStatBuf;
リターン値
成功の場合0、他の場合は−1。
【0156】
データ認証
プラットホーム抽象APIには、データを認証するためのファンクションのセットが含まれている。データ認証APIは、ダウンロードされたマルウェアシグネチャーデータベースを検証するのに使用される。
【0157】
呼出元がAlDaOpenファンクションを使用して認証オブジェクトハンドルを得ると、供給されたデータを検証するためにAlDaVerifyへのコールがなされる。
AlDaGetSignerInfo()は、署名者情報を検索するのに使用される。AlDaClose()は、データ認証ハンドル及びそれに関連したシステムリソースをクローズ及びリリースするのに使用される。
例示的なデータ認証APIを以下に示す。
【表24】
【0158】
AlDaOpen()ファンクションによって返されたデータ認証ハンドルは、次のように定義される。
ALHANDLE(AL_DA_HANDLE);
#defineINVALID_AL_DA_HANDLE ((AL_DA_HANDLE) 0)
【0159】
署名者情報構造は、次のように定義される。
#defineMAX_DA_SIGNER_NAME 128
typedef structDaSignerInfo_struct
{
charszSignerName[MAX_DA_SIGNER_NAME];
} DaSignerInfo;
【0160】
AlDaOpen
説明
データ認証ハンドルを生成し、返す。
プロトタイプ
AL_DA_HANDLEAlDaOpen(const void* pSig,
unsigned int uSize );
パラメータ
pSig
[入力] シグネチャーデータへのポインタ。
uSigSize
[入力] バイトでのシグネチャーサイズ。
リターン値
成功の場合はデータ認証ハンドル、他の場合はNVALID_AL_DA_HANDLE。
AlDaClose()、AlDaUpdata()、AlDaVerify()、AlDaGetSignerInfo()も参照のこと。
【0161】
AlDaClose
説明
データ認証ハンドルに対して使用されるシステムリソースをリリースする。
プロトタイプ
voidAlDaClose(AL_DA_HANDLE hDa );
パラメータ
hDa
[入力] AlDaOpenによって返されるデータ認証ハンドル。
リターン値
なし
AlDaOpen()、AlDaUpdata()、AlDaVerify()、AlDaGetSignerInfo()も参照のこと。
【0162】
AlDaVerify
説明
データ認証を行う。
プロトタイプ
int AlDaVerify(AL_DA_HANDLEhDa,
int (*pfRead)(void*,void*,int),
int iTotalSize,
void *pPrivate);
パラメータ
hDa
[入力] データ認証ハンドル。
pfRead
[入力] データの読み取り(参照)に使用する呼出元のコールバックファンクション。エラーの場合は、−1とし、読み取るべきデータがそれ以上ない場合は0とし、他の場合は、読み取られてAlDaVerifyファンクションへ返されたデータの量とする。ファンクションは何回もコールされることが予想される。
iTotalSize
[入力] 検証されるべき全データサイズ。
pPrivate
[入力] pfReadのコールバックによって渡されるべき呼出元のプライベートデータ。
リターン値
アプリケーションデータが認証された場合は0、他の場合は−1。
AlDaOpen()、AlDaClose()、AlDaGetSignerInfo()も参照のこと。
【0163】
サンプルデータ読み取りコールバックファンクションは、次の通りである。
【表25】
【0164】
AlDaGetSignerInfo
説明
データ認証署名者情報を検索する。
プロトタイプ
intAlDaGetSignerInfo(AL_DA_HANDLE hDA,
DaSignerInfo *pDSI);
パラメータ
hDa
[入力] データ認証ハンドル。
pDSI
[出力] 署名者情報を含む構造体へのポインタ。
リターン値
署名者情報の取得が成功した場合には0、他の場合には−1。
AlDaOpen()、AlDaClose()、AlDaVerify()も参照のこと。
【0165】
同期オブジェクト
リソースの同期及び制御は、セマフォを使用して行われる。抽象ライブラリーには、セマフォオブジェクトを生成し、オープンし、クローズし、そして変更するためのファンクションのセットが含まれている。例示的なセマフォAPIは次の通りである。
【表26】
【0166】
AlSemCreate
説明
命名されたセマフォを生成し、内部カウンターを0にセットしそのハンドルを返す。
プロトタイプ
AL_SEM_HANDLEAlSemCreate(char const* pszName );
パラメータ
pszName
[入力] セマフォ名のストリング。
リターン値
成功の場合はセマフォハンドル、他の場合はINVALID_AL_SEM_HANDLE。
AlSemOpen()、AlSemClose()、AlSemGet()、AlSemRelease()も参照のこと。
【0167】
AlSemOpen
説明
既存のセマフォへのハンドルを返す。
プロトタイプ
AL_SEM_HANDLEAlSemOpen(char const* pszName );
パラメータ
pszName
[入力] セマフォ名。
リターン値
成功の場合はセマフォハンドル、他の場合はINVALID_AL_SEM_HANDLE。
AlSemCreate()、AlSemClose()、AlSemGet()、AlSemRelease()も参照のこと。
【0168】
AlSemClose
説明
システムリソース関連の指定のセマフォハンドルをクローズし、リリースする。
セマフォ使用/参照カウントも減少され、参照されたセマフォオブジェクトはカウントが0になった場合に破棄される。
プロトタイプ
voidAlSemClose(AL_SEM_HANDLE hSem);
パラメータ
hSem
[入力] AlSemCreate() 又は AlSemOpen()を用いて得たセマフォハンドル。
リターン値
なし
AlSemCreate()、AlSemOpen()、AlSemGet()、AlSemRelease()も参照のこと。
【0169】
AlSemGet
説明
指定のセマフォを取得する。内部カウンターがエントリーにおいて0より大きい場合には、それを1だけ減少して直ちに返す。内部カウンターがエントリーにおいて0である場合には、他のタスク/スレッドがAlSemRelease()をコールして0より大きくするまで、コールが阻止される。
プロトタイプ
intAlSemGet(AL_SEM_HANDLE hSem);
パラメータ
hSem
[入力] セマフォハンドル。
リターン値
成功の場合は0、他の場合は−1。
AlSemCreate()、AlSemOpen()、AlSemClose()、AlSemRelease()も参照のこと。
【0170】
AlSemRelease
説明
セマフォをリリースし、内部カウンターを1だけ増加する。
プロトタイプ
intAlSemRelease(AL_SEM_HANDLE hSem);
パラメータ
hSem
[入力] セマフォハンドル。
リターン値
成功の場合は0、他の場合は−1。
AlSemCreate()、AlSemOpen()、AlSemClose()、AlSemGet()も参照のこと。
【0171】
HTTP API
抽象ライブラリーには、呼出元が提供したコールバック構造体を使用してHTTPネットワークI/Oを提供するファンクションのセットが含まれている。例示的HTTP APIを以下に示す。
【表27】
【0172】
AlHttpOpen()ファンクションによりリターンされるHTTPハンドルは、次のように定義される。
typedef structAL_HTTP_HANDLE_struct
{
} *AL_HTTP_HANDLE;
#defineINVALID_AL_HTTP_HANDLE ((AL_HTTP_HANDLE)0)
【0173】
HTTPコールバック構造体は、次のように定義される。
typedef structAlHttpCallbacks_struct
{
unsigned int (* pWrite) (void* pPrivate,
void const* pData,
unsignedint uSize);
unsigned int (* pRead) (void* pPrivate.
Void* pData,
unsigned int uSize);
unsigned int (* pGetSize) (void* pPrivate);
unsigned int (* pSetSize) (void* pPrivate,
unsigned int uSize);
} AlHttpCallbacks;
【0174】
上記HTTPコールバック構造体で与えられるコールバックファンクションは、次の機能を提供する。
pWrite 到来するHTTP要求データを記憶するためにシステムHTTPライブラ
リーによりコールされる。
pRead HTTP要求の一部として送信されるべきアプリケーションデータを検索
するのに使用される。
pGetSize アプリケーションのコンテンツデータサイズ「Content-Length」をHTT
Pライブラリーに提供する。
pSetSize 到来するコンテンツデータ長さが得られるときにそれをコーリングアプリ
ケーションに知らせるためにHTTPライブラリーによりコールされる
【0175】
AlHttpOpen
説明
ハンドルを生成して、HTTPライブラリーへ返す。
プロトタイプ
AL_HTTP_HANDLE_AlHttpOpen(void);
パラメータ
なし
リターン値
HTTPのインスタンス生成に失敗した場合には、INVALID_AL_HTTP_HANDLEが返される。
AlHttpClose()も参照のこと。
【0176】
AlHttpClose
説明
HTTPハンドルに関連したシステムリソースをクローズし、リリースする。
プロトタイプ
voidAlHttpClose(AL_HTTP_HANDLE hHTTP);
パラメータ
hHTTP
[入力] AlHttpOpen()ファンクションによって返されるHTTPライブラリのハンドル。
リターン値
なし
AlHttpClose()も参照のこと。
【0177】
AlHttpExec
説明
指定のURLにおいて任意のヘッダ情報を用いてHTTPメソッド(「GET」又は「POST」)を実行する。
プロトタイプ
intAlHttpExec(AL_HTTP_HANDLE hHTTP,
char const* pszMethod,
char const* pszURL,
AlHttpCallbacks* pHttpCb,
void* pPrivate );
パラメータ
hHTTP
[入力] AlHttpOpen()関数によって返されるHTTPライブラリのハンドル。
pszMethod
[入力] HTTPメソッドの指定。HTTP “GET” または “POST”。
pszURL
[入力] HTTPリクエストがなされるULR。
pHttpCb
[入力] 呼出元指定のHTTP I/Oファンクションのセットへのポインタ。
HTTPライブラリーは、データI/Oに対してAlHttpCallbacksで指定された
ファンクションを使用する
pPrivate
[入力/出力] AlHttpCallbacksにおいて指定されたコールバックファンクションへ返却されるべき呼出元データへのポインタ。
リターン値
成功の場合は0、他の場合は−1。
ALHttpOpen()、AlHttpClose()も参照のこと。
【0178】
共有メモリ
ライブラリーの共有オブジェクトが記憶されるシステムメモリの位置は、AlShmAddress()ファンクションを使用して取得される。この共有情報エリアは、装置のブート時に割り当てられ/準備され、ライブラリーの異なるインスタンスにより参照される。
【0179】
AlSemAddress
説明
共有メモリアドレスを返す。
プロトタイプ
void*AlSemAddress(void);
パラメータ
なし
リターン値
成功の場合は共有メモリアドレス、他の場合はNULL。
【0180】
Time
AlTmGetCurrent()は、呼出元に現在システム時間を秒で与える。
【0181】
AlTmGetCurrent
説明
現在システム時間を得る。
プロトタイプ
unsigned longAlTmGetCurrent(void);
パラメータ
なし
リターン値
成功のときは、エポック(1970年1月1日の00:00:00)以来の時間(秒で)。エラーのときは、((unsigned long) -1L)を返す。
【0182】
装置情報
AlDevGetInfo
説明
装置の特定情報を検索する。このファンクションにより返される装置識別ストリングは、APIにより使用される。
プロトタイプ
intAlDevGetInfo(AlDeviceInfo* pDeviceInfo );
パラメータ
pDeviceInfo
[出力] デバイス情報へのポインタ。
AlDeviceInfoは、次のように定義される。
#defineAL_MAX_DEVICE_ID 32
typedef structAlDeviceInfo_struct
{
charszDeviceID[AL_MAX_DEVICE_ID];
} AlDeviceInfo;
識別ストリングszDeviceIDは、特定の移動通信装置を全ての他のものからユニークに特定するのに使用されるユニークなターミナル/装置識別子である。この情報は、移動通信装置に対してマルウェアシグネチャーダウンロードURLを構成するのに使用される。これは、URLで許されないキャラクタ(即ち、ホワイトスペース)を含んではならない。
リターン値
成功の場合は0、失敗の場合は−1。
【0183】
デバッグ
AlDbgOutput
説明
デバッグストリングをデバッグコンソールへ出力する。このファンクションは、リリースビルドに対するナルファンクションである。
プロトタイプ
int AlDbgOutput(charconst* pszOutput);
パラメータ
pszOutput
[入力] デバッグコンソールに出力するストリング。
リターン値
成功の場合は0、失敗の場合は−1。
【図面の簡単な説明】
【0184】
【図1】一実施形態に係る移動通信フレームワークを示す図である。
【図2】別の実施形態に係る移動通信フレームワークを示す図である。
【図3】一実施形態に係る移動通信装置に関連するアーキテクチャーを示す図である。
【図4】一実施形態に係るものであり、動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのシステムを示す図である。
【図5】図4のシステムのアプリケーションサーバーの実施形態に係るものであり、移動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのフレームワークを示す図である。
【図6】図4のシステムの再入可能ライブラリーの実施形態に係るものであり、移動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのフレームワークを示す図である。
【図7】図4のシステムの状況において実施されたオンデマンドのスキャニングシステムを示す図である。
【図8】一実施形態に係るものであり、移動アプリケーションプログラム及びスキャニングサブシステムをインターフェイスするのに使用できるアプリケーションプログラムインターフェイス(API)の種々のコンポーネントの階層を示す図である。
【図9】ライブラリーインターフェイス初期化を例示する図である。
【図10】一実施形態に係るエラーコードファンクションのフォーマットを例示する図である。
【図11】一実施形態に係るスキャニングサブシステムAPIコールシーケンスを示す図である。
【図12】一実施形態に係るコンフィギュレーションAPIコールシーケンスの一例を示す図である。
【図13】アプリケーションプログラムがAPIを介してスキャニングサブシステムに通信することのできる種々のスキャンデータ形式を例示する図である。
【図14】一実施形態に係るものであり、マルウェア重大度フラグ及びアプリケーションプログラムのビヘイビアレベルを含むビットフィールド変数を示す図である。
【図15】スキャニングサブシステムによるスキャニングのタイミングが、図13の変数によって特定されるデータ形式のファンクションにつれてどのように変化するか示すチャートである。
【図16】一実施形態に係るものであり、ユーザインターフェイスにより更新がどのように開始されるか示すフローを例示する図である。
【図17】一実施形態に係るものであり、移動通信装置のスキャニングサブシステムを効率的に更新するための方法を示す図である。
【特許請求の範囲】
【請求項1】
移動通信装置を使用してアプリケーションプログラムデータをスキャニングするためのシステムであって、
ワイヤレスネットワークを介して通信できる移動通信装置にインストールされたアプリケーションプログラムであって、前記移動通信装置を使用してタスクを実行するようになっているアプリケーションプログラムと、
前記アプリケーションプログラムにより実行される前記タスクに関連したアプリケーションデータをスキャニングするために前記アプリケーションプログラムと通信するスキャニングサブシステムと、
を備え、
前記アプリケーションプログラムが前記アプリケーションデータに関連した情報を前記スキャニングサブシステムへ伝送して前記スキャニングサブシステムによるスキャニングを容易にする、
システム。
【請求項2】
前記スキャニングはオンデマンドウイルススキャニングを含む、請求項1に記載のシステム。
【請求項3】
前記スキャニングはオンアクセスウイルススキャニングを含む、請求項1に記載のシステム。
【請求項4】
前記アプリケーションプログラムはメールアプリケーションプログラムを含み、前記タスクは電子メールの管理を含む、請求項1に記載のシステム。
【請求項5】
前記アプリケーションプログラムはブラウザアプリケーションプログラムを含み、前記タスクはネットワークのブラウジングを含む、請求項1に記載のシステム。
【請求項6】
前記アプリケーションプログラムは電話帳アプリケーションプログラムを含み、前記タスクは複数の電話番号の管理を含む、請求項1に記載のシステム。
【請求項7】
前記アプリケーションプログラムはメッセージアプリケーションプログラムを含み、前記タスクはメッセージの通信を含む、請求項1に記載のシステム。
【請求項8】
前記アプリケーションプログラムはJava(登録商標)アプリケーションプログラムを含む、請求項1に記載のシステム。
【請求項9】
前記移動通信装置はセルラー電話を含む、請求項1に記載のシステム。
【請求項10】
前記情報は異なる形式のアプリケーションデータに関連している、請求項1に記載のシステム。
【請求項11】
前記形式は、ハイパーテキストマークアップ言語(HTML)形式、ユニホームリソースロケータ(URL)形式、電子メール形式、電話番号形式、Java(登録商標)形式、テキスト形式、及び未知の形式より成るグループから選択される、請求項10に記載のシステム。
【請求項12】
前記形式は、ハイパーテキストマークアップ言語(HTML)形式、ユニホームリソースロケータ(URL)形式、電子メール形式、電話番号形式、Java(登録商標)形式、テキスト形式、及び未知の形式を含むグループから選択される、請求項10に記載のシステム。
【請求項13】
前記情報は、前記アプリケーションデータの各形式に関連したフォーマットを特定する、請求項10に記載のシステム。
【請求項14】
前記情報は、前記アプリケーションデータの異なる形式に関連した変数を含む、請求項10に記載のシステム。
【請求項15】
前記情報は、前記スキャニングサブシステムによるスキャニングのタイミングを指示する、請求項1に記載のシステム。
【請求項16】
前記タイミングは、前記アプリケーションデータの受信に関連する、請求項15に記載のシステム。
【請求項17】
前記タイミングは、前記アプリケーションデータの記憶に関連する、請求項15に記載のシステム。
【請求項18】
前記タイミングは、前記アプリケーションデータのレンダリングに関連する、請求項15に記載のシステム。
【請求項19】
前記タイミングは、前記アプリケーションデータの呼び出しに関連する、請求項15に記載のシステム。
【請求項20】
前記情報は、前記スキャニングサブシステムによるスキャニングが任意であるかどうかを指示する、請求項1に記載のシステム。
【請求項21】
前記情報は、前記スキャニングサブシステムによるスキャニングが強制であるかどうかを指示する、請求項1に記載のシステム。
【請求項22】
前記情報は、前記スキャニングサブシステムによるスキャニングのタイミングを改善する、請求項1に記載のシステム。
【請求項23】
前記情報は、前記スキャニングサブシステムによるスキャニングの精度を改善する、請求項1に記載のシステム。
【請求項24】
移動通信装置を使用してアプリケーションプログラムデータをスキャニングするためのシステムであって、
ワイヤレスネットワークを介して通信できる移動通信装置にインストールされたアプリケーションプログラム手段であって、前記移動通信装置を使用してタスクを実行するようになっているアプリケーションプログラム手段と、
前記アプリケーションプログラム手段により実行される前記タスクに関するアプリケーションデータをスキャニングするために前記アプリケーションプログラム手段と通信するスキャニングサブシステム手段と、
を備え、
前記アプリケーションプログラム手段は、前記アプリケーションデータに関する情報を前記スキャニングサブシステム手段に伝送して、前記スキャニングサブシステム手段によるスキャニングを容易にする、
システム。
【請求項25】
移動通信装置を使用してアプリケーションプログラムデータをスキャニングするための方法であって、
アプリケーションプログラムがインストールされた移動通信装置を使用してタスクを実行するステップと、
前記アプリケーションプログラムと通信するスキャニングサブシステムを使用して前記タスクに関するアプリケーションデータをスキャニングするステップと、
を含み、
前記アプリケーションプログラムは、前記アプリケーションデータに関する情報を前記スキャニングサブシステムに伝送して、前記スキャニングサブシステムによるスキャニングを容易にする、
方法。
【請求項26】
移動通信装置を使用してアプリケーションプログラムデータをスキャニングするためのコンピュータプログラム製品であって、
アプリケーションプログラムがインストールされた移動通信装置を使用してタスクを実行するコンピュータコードと、
前記アプリケーションプログラムと通信するスキャニングサブシステムを使用して前記タスクに関するアプリケーションデータをスキャニングするコンピュータコードと、
を備え、
前記アプリケーションプログラムは、前記アプリケーションデータに関する情報を前記スキャニングサブシステムに伝送して、前記スキャニングサブシステムによるスキャニングを容易にする、
コンピュータプログラム製品。
【請求項1】
移動通信装置を使用してアプリケーションプログラムデータをスキャニングするためのシステムであって、
ワイヤレスネットワークを介して通信できる移動通信装置にインストールされたアプリケーションプログラムであって、前記移動通信装置を使用してタスクを実行するようになっているアプリケーションプログラムと、
前記アプリケーションプログラムにより実行される前記タスクに関連したアプリケーションデータをスキャニングするために前記アプリケーションプログラムと通信するスキャニングサブシステムと、
を備え、
前記アプリケーションプログラムが前記アプリケーションデータに関連した情報を前記スキャニングサブシステムへ伝送して前記スキャニングサブシステムによるスキャニングを容易にする、
システム。
【請求項2】
前記スキャニングはオンデマンドウイルススキャニングを含む、請求項1に記載のシステム。
【請求項3】
前記スキャニングはオンアクセスウイルススキャニングを含む、請求項1に記載のシステム。
【請求項4】
前記アプリケーションプログラムはメールアプリケーションプログラムを含み、前記タスクは電子メールの管理を含む、請求項1に記載のシステム。
【請求項5】
前記アプリケーションプログラムはブラウザアプリケーションプログラムを含み、前記タスクはネットワークのブラウジングを含む、請求項1に記載のシステム。
【請求項6】
前記アプリケーションプログラムは電話帳アプリケーションプログラムを含み、前記タスクは複数の電話番号の管理を含む、請求項1に記載のシステム。
【請求項7】
前記アプリケーションプログラムはメッセージアプリケーションプログラムを含み、前記タスクはメッセージの通信を含む、請求項1に記載のシステム。
【請求項8】
前記アプリケーションプログラムはJava(登録商標)アプリケーションプログラムを含む、請求項1に記載のシステム。
【請求項9】
前記移動通信装置はセルラー電話を含む、請求項1に記載のシステム。
【請求項10】
前記情報は異なる形式のアプリケーションデータに関連している、請求項1に記載のシステム。
【請求項11】
前記形式は、ハイパーテキストマークアップ言語(HTML)形式、ユニホームリソースロケータ(URL)形式、電子メール形式、電話番号形式、Java(登録商標)形式、テキスト形式、及び未知の形式より成るグループから選択される、請求項10に記載のシステム。
【請求項12】
前記形式は、ハイパーテキストマークアップ言語(HTML)形式、ユニホームリソースロケータ(URL)形式、電子メール形式、電話番号形式、Java(登録商標)形式、テキスト形式、及び未知の形式を含むグループから選択される、請求項10に記載のシステム。
【請求項13】
前記情報は、前記アプリケーションデータの各形式に関連したフォーマットを特定する、請求項10に記載のシステム。
【請求項14】
前記情報は、前記アプリケーションデータの異なる形式に関連した変数を含む、請求項10に記載のシステム。
【請求項15】
前記情報は、前記スキャニングサブシステムによるスキャニングのタイミングを指示する、請求項1に記載のシステム。
【請求項16】
前記タイミングは、前記アプリケーションデータの受信に関連する、請求項15に記載のシステム。
【請求項17】
前記タイミングは、前記アプリケーションデータの記憶に関連する、請求項15に記載のシステム。
【請求項18】
前記タイミングは、前記アプリケーションデータのレンダリングに関連する、請求項15に記載のシステム。
【請求項19】
前記タイミングは、前記アプリケーションデータの呼び出しに関連する、請求項15に記載のシステム。
【請求項20】
前記情報は、前記スキャニングサブシステムによるスキャニングが任意であるかどうかを指示する、請求項1に記載のシステム。
【請求項21】
前記情報は、前記スキャニングサブシステムによるスキャニングが強制であるかどうかを指示する、請求項1に記載のシステム。
【請求項22】
前記情報は、前記スキャニングサブシステムによるスキャニングのタイミングを改善する、請求項1に記載のシステム。
【請求項23】
前記情報は、前記スキャニングサブシステムによるスキャニングの精度を改善する、請求項1に記載のシステム。
【請求項24】
移動通信装置を使用してアプリケーションプログラムデータをスキャニングするためのシステムであって、
ワイヤレスネットワークを介して通信できる移動通信装置にインストールされたアプリケーションプログラム手段であって、前記移動通信装置を使用してタスクを実行するようになっているアプリケーションプログラム手段と、
前記アプリケーションプログラム手段により実行される前記タスクに関するアプリケーションデータをスキャニングするために前記アプリケーションプログラム手段と通信するスキャニングサブシステム手段と、
を備え、
前記アプリケーションプログラム手段は、前記アプリケーションデータに関する情報を前記スキャニングサブシステム手段に伝送して、前記スキャニングサブシステム手段によるスキャニングを容易にする、
システム。
【請求項25】
移動通信装置を使用してアプリケーションプログラムデータをスキャニングするための方法であって、
アプリケーションプログラムがインストールされた移動通信装置を使用してタスクを実行するステップと、
前記アプリケーションプログラムと通信するスキャニングサブシステムを使用して前記タスクに関するアプリケーションデータをスキャニングするステップと、
を含み、
前記アプリケーションプログラムは、前記アプリケーションデータに関する情報を前記スキャニングサブシステムに伝送して、前記スキャニングサブシステムによるスキャニングを容易にする、
方法。
【請求項26】
移動通信装置を使用してアプリケーションプログラムデータをスキャニングするためのコンピュータプログラム製品であって、
アプリケーションプログラムがインストールされた移動通信装置を使用してタスクを実行するコンピュータコードと、
前記アプリケーションプログラムと通信するスキャニングサブシステムを使用して前記タスクに関するアプリケーションデータをスキャニングするコンピュータコードと、
を備え、
前記アプリケーションプログラムは、前記アプリケーションデータに関する情報を前記スキャニングサブシステムに伝送して、前記スキャニングサブシステムによるスキャニングを容易にする、
コンピュータプログラム製品。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公表番号】特表2007−524902(P2007−524902A)
【公表日】平成19年8月30日(2007.8.30)
【国際特許分類】
【出願番号】特願2006−509741(P2006−509741)
【出願日】平成16年4月5日(2004.4.5)
【国際出願番号】PCT/US2004/010570
【国際公開番号】WO2004/095847
【国際公開日】平成16年11月4日(2004.11.4)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.フロッピー
【出願人】(392026693)株式会社エヌ・ティ・ティ・ドコモ (5,876)
【出願人】(505418238)マカフィー, インコーポレイテッド (4)
【Fターム(参考)】
【公表日】平成19年8月30日(2007.8.30)
【国際特許分類】
【出願日】平成16年4月5日(2004.4.5)
【国際出願番号】PCT/US2004/010570
【国際公開番号】WO2004/095847
【国際公開日】平成16年11月4日(2004.11.4)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.フロッピー
【出願人】(392026693)株式会社エヌ・ティ・ティ・ドコモ (5,876)
【出願人】(505418238)マカフィー, インコーポレイテッド (4)
【Fターム(参考)】
[ Back to top ]