以下、実施形態について、添付の図面を参照しながら詳しく説明する。
図1は、本発明の一実施形態における、ネットワーク環境の例を示した図である。図1のネットワーク環境は、複数の電子機器110、120、130、140、複数のサーバ150、160、およびネットワーク170を含む例を示している。このような図1は、発明を説明するための一例に過ぎず、電子機器の数やサーバの数が図1のように限定されることはない。
複数の電子機器110、120、130、140は、コンピュータ装置によって実現される固定型端末や移動型端末であってもよい。複数の電子機器110、120、130、140の例としては、スマートフォン(smart phone)、携帯電話、ナビゲーション、コンピュータ、ノート型パンコン、デジタル放送用端末、PDA(Personal Digital Assistants)、PMP(Portable Multimedia Player)、タブレットPCなどがある。一例として、電子機器1(110)は、無線または有線通信方式を利用し、ネットワーク170を介して他の電子機器120、130、140および/またはサーバ150、160と通信してもよい。
通信方式が制限されることはなく、ネットワーク170が含むことのできる通信網(一例として、移動通信網、有線インターネット、無線インターネット、放送網)を活用する通信方式だけではなく、機器間の近距離無線通信が含まれてもよい。例えば、ネットワーク170は、PAN(personal area network)、LAN(local area network)、CAN(campus area network)、MAN(metropolitan area network)、WAN(wide area network)、BBN(broadband network)、インターネットなどのネットワークのうちの1つ以上の任意のネットワークを含んでもよい。さらに、ネットワーク170は、バスネットワーク、スターネットワーク、リングネットワーク、メッシュネットワーク、スター−バスネットワーク、ツリーまたは階層的(hierarchical)ネットワークなどを含むネットワークトポロジのうちの任意の1つ以上を含んでもよいが、これに制限されることはない。
サーバ150、160それぞれは、複数の電子機器110、120、130、140とネットワーク170を介して通信して命令、コード、ファイル、コンテンツ、サービスなどを提供するコンピュータ装置または複数のコンピュータ装置によって実現されてもよい。
一例として、サーバ150は、電子機器2(120)から登録されるアプリケーションのパッケージに保護モジュールファイルを追加してもよい。保護モジュールファイルが含まれたアプリケーションのパッケージは、サーバ150から直接電子機器1(110)に提供されてもよいし、別のサーバ160を通じて電子機器1(110)に提供されてもよい。電子機器1(110)は、アプリケーションのパッケージを通じてアプリケーションを電子機器1(110)にインストールおよび実行してもよく、アプリケーションを通じて特定のサービスの提供を受けてもよい。ここで、保護モジュールファイルによってアプリケーションのコードが保護されてもよい。
図2は、本発明の一実施形態における、電子機器およびサーバの内部構成を説明するためのブロック図である。図2では、1つの電子機器に対する例として電子機器1(110)、そして1つのサーバに対する例としてサーバ150の内部構成について説明する。他の電子機器120、130、140やサーバ160も、同一または類似の内部構成を備えてもよい。
電子機器1(110)とサーバ150は、メモリ211、221、プロセッサ212、222、通信モジュール213、223、および入力/出力インタフェース214、224を含んでもよい。メモリ211、221は、コンピュータで読み取り可能な記録媒体であって、RAM(random access memory)、ROM(read only memory)、およびディスクドライブのような永久大容量記憶装置(permanent mass storage device)を含んでよい。また、メモリ211、221には、オペレーティングシステムと、少なくとも1つのプログラムコード(一例として、電気機器1(110)にインストールされ実行するブラウザや映像通話のためのアプリケーションなどのためのコード)が格納されてよい。このようなソフトウェア構成要素は、ドライブメカニズム(drive mechanism)を利用してメモリ211、221とは別のコンピュータで読み取り可能な記録媒体からロードされてもよい。このような別のコンピュータで読み取り可能な記録媒体は、フロッピー(登録商標)ドライブ、ディスク、テープ、DVD/CD−ROMドライブ、メモリカードなどのコンピュータで読み取り可能な記録媒体を含んでよい。他の実施形態において、ソフトウェア構成要素は、コンピュータで読み取り可能な記録媒体ではない通信モジュール213、223を利用してメモリ211、221にロードされてもよい。例えば、少なくとも1つのプログラムは、開発者またはアプリケーションのインストールファイルを配布するファイル配布システム(一例として、上述したサーバ160)がネットワーク170を介して提供するファイルによってインストールされるプログラム(一例として、上述したアプリケーション)に基づいてメモリ211、221にロードされてもよい。
プロセッサ212、222は、基本的な算術、ロジック、および入出力演算を実行することにより、コンピュータプログラムの命令を処理するように構成されてよい。命令は、メモリ211、221または通信モジュール213、223によって、プロセッサ212、222に提供されてよい。例えば、プロセッサ212、222は、メモリ211、221のような記録装置に格納されたプログラムコードにしたがって受信される命令を実行するように構成されてもよい。
通信モジュール213、223は、ネットワーク170を介して電子機器1(110)とサーバ150とが互いに通信するための機能を提供してもよいし、他の電子機器(一例として、電子機器2(120))または他のサーバ(一例として、サーバ160)と通信するための機能を提供してもよい。一例として、電子機器1(110)のプロセッサ212がメモリ211のような記録装置に格納されたプログラムコードにしたがって生成した要請(一例として、映像通話サービスのための要請)が、通信モジュール213の制御にしたがってネットワーク170を介してサーバ150に伝達されてもよい。これとは逆に、サーバ150のプロセッサ222の制御にしたがって提供される制御信号や命令、コンテンツ、ファイルなどが、通信モジュール223とネットワーク170を経て電子機器1(110)の通信モジュール213を通じて電子機器1(110)に受信されてもよい。例えば、通信モジュール213を通じて受信されたサーバ150の制御信号や命令などは、プロセッサ212やメモリ211に伝達されてもよく、コンテンツやファイルなどは、電子機器1(110)がさらに含むことのできる格納媒体に格納されてもよい。
入力/出力インタフェース214、224は、入力/出力装置215とのインタフェースのための手段であってもよい。例えば、入力装置は、キーボードまたはマウスなどの装置を、また出力装置は、アプリケーションの通信セッションを表示するためのディスプレイのような装置を含んでもよい。他の例として、入力/出力インタフェース214は、タッチスクリーンのように入力と出力のための機能が1つに統合された装置とのインタフェースのための手段であってもよい。より具体的な例として、電子機器1(110)のプロセッサ212は、メモリ211にロードされたコンピュータプログラムの命令を処理するにあたり、サーバ150や電子機器2(120)が提供するデータを利用して構成されるサービス画面やコンテンツが入力/出力インタフェース214を通じてディスプレイに表示されてもよい。
また、他の実施形態において、電子機器1(110)およびサーバ150は、図2の構成要素よりもさらに多くの構成要素を含んでもよい。しかし、大部分の従来技術構成要素を明確に図に示す必要はない。例えば、電子機器1(110)は、上述した入力/出力装置215のうちの少なくとも一部を含むように実現されてもよいし、トランシーバ(transceiver)、GPS(Global Positioning System)モジュール、カメラ、各種センサ、データベースなどのような他の構成要素をさらに含んでもよい。より具体的な例として、電子機器1(110)がスマートフォンである場合、一般的にスマートフォンが含んでいる加速度センサやジャイロセンサ、カメラ、各種物理的なボタン、タッチパネルを利用したボタン、入力/出力ポート、振動のための振動器などの多様な構成要素が電子機器1(110)にさらに含まれるように実現されてもよいことが分かる。
図3は、本発明の一実施形態における、サーバが含むプロセッサを説明するためのブロック図であり、図4は、本発明の一実施形態における、サーバが実行する方法を示したフローチャートである。
図3に示すように、サーバ150に含まれたプロセッサ222は、構成要素として、パッケージ管理制御部310、複製制御部320、コード変形制御部330、検索コード追加制御部340、およびパッケージ生成制御部350を含んでもよい。このようなプロセッサ222およびプロセッサ222の構成要素は、図4のコード保護方法が含む段階410〜460を実行するようにサーバ150を制御してもよい。このとき、プロセッサ222およびプロセッサ222の構成要素は、メモリ221が含むオペレーティングシステムのコードと少なくとも1つのプログラムのコードによる命令(instruction)を実行するように実現されてもよい。ここで、プロセッサ222の構成要素は、サーバ150に格納されたプログラムコードが提供する制御命令にしたがってプロセッサ222によって実行される互いに異なる機能(different functions)の表現であってもよい。例えば、プロセッサ222が上述した制御命令にしたがってパッケージを格納および管理するように動作する機能的表現として、パッケージ管理制御部310が使用されてもよい。
段階410で、プロセッサ222は、コード保護方法のためのプログラムのファイルに格納されたプログラムコードをメモリ221にロードしてもよい。例えば、サーバ150でプログラムが実行されると、プロセッサ222は、オペレーティングシステムの制御にしたがってプログラムのファイルからプログラムコードをメモリ221にロードするようにサーバ150を制御してもよい。
ここで、プロセッサ222が含むパッケージ管理制御部310、複製制御部320、コード変形制御部330、検索コード追加制御部340、およびパッケージ生成制御部350それぞれは、メモリ221にロードされたプログラムコードのうち対応する部分の命令を実行して以後の段階420〜460を実行するためのプロセッサ222の機能的表現であってもよい。
段階420で、パッケージ管理制御部310は、格納装置にアプリケーションのためのファイルが含まれたパッケージを格納してもよい。例えば、アプリケーションの開発者は、パッケージを生成してサーバ150に登録してもよい。より具体的な例として、開発者は、電子機器2(120)を利用してネットワーク170を介してサーバ150に接続し、サーバ150が提供するユーザインタフェースを利用してパッケージファイルをサーバ150にアップロードしてもよい。ここで、パッケージ管理制御部310は、サーバ150にアップロードされたパッケージをサーバ150の格納装置に格納および管理してもよい。
段階430で、複製制御部320は、ファイルのうち実行コードが含まれたファイルで保護対象メソッドまたは関数を選別して保護モジュールファイルに複製してもよい。例えば、複製制御部320は、実行コードの全体メソッドまたは関数のうち、予め設定された機能のメソッドまたは関数を保護対象メソッドまたは関数として選別して保護モジュールファイルに複製してもよい。より具体的な例として、ジャバ(Java(登録商標))言語においてジャバネイティブインタフェース(Java Native Interface:JNI)に該当するメソッドや関数が予め設定されてもよく、複製制御部320は、JNI系列のメソッドや関数を見つけ出して保護モジュールファイルに複製してもよい。他の例として、複製制御部320は、アプリケーションの開発者によって入力された情報に対応するメソッドまたは関数を保護対象メソッドまたは関数として選別して保護モジュールファイルに複製することも可能である。より具体的な例として、サーバ150は、開発者から選別しようとするメソッドや関数の名前の入力を受け、入力された名前のメソッドや関数を選別して保護モジュールファイルに複製してもよい。選択的に、複製制御部320は、予め設定された機能のメソッドまたは関数と開発者によって指示されたメソッドまたは関数の両方を選別することも可能である。
このために、複製制御部320は、実行コードが含まれたファイルと保護モジュールファイルがメモリ221にロードされるようにサーバ150を制御してもよく、メモリ221にロードされた実行コードで選別されたメソッドや関数がメモリ221にロードされた保護モジュールに複製されるようにサーバ150を制御してもよい。このような過程は、実行コードが含まれたファイル(サーバ150の格納装置に格納されたファイル)に対する読み取り命令と保護モジュールファイルに対する書き込み命令などによって処理されてもよい。以下では、メモリ221やサーバ150の格納装置を通じてデータをロードしたり格納されたファイルにデータを書き込み処理したりするなどの過程のような明確な事項についての説明は省略する。
段階440で、コード変形制御部330は、選別された保護対象メソッドまたは関数が含むコードを変形させてもよい。例えば、コード変形制御部330は、コードのインストラクションを、認識が不可能なアンノウンインストラクション(unknown instruction)または任意のランダムなアドレスにジャンプ(jump)するインストラクションに変形してもよい。したがって、アプリケーションがインストールおよび実行される電子機器(一例として、電子機器1(110))では、ダンプ(dump)のような機能を通じてコードを得たとしても、認識が不可能なアンノウンインストラクションや任意のランダムなアドレスにジャンプ(jump)するインストラクションにより、本来のコードが分からないようになる。
段階450で、検索コード追加制御部340は、保護モジュールファイルに複製された保護対象メソッドまたは関数を見つけ出すための検索コードを実行コードに追加してもよい。このような検索コードは、実行コードで変形されたコードではなく本来のコードを得るために保護モジュールファイルを検索するためのコードであって、保護モジュールファイルが除去された場合には本来のコードを得ることができなくなるため、保護モジュールを通じた安定的なコードの保護が可能となる。
より具体的な実施形態として、検索コード追加制御部340は、段階450で、選別された保護対象メソッドまたは関数にゲートウェイを呼び出すための第1コードを追加し、実行コードにゲートウェイとして保護モジュールファイルに複製された保護対象メソッドまたは関数のメモリアドレスを得るための第2コードを追加してもよい。ここで、メモリアドレスは、アプリケーションがインストールされて実行される電子機器におけるプログラムカウンタ(Program Counter:PC)と保護モジュールファイルによって提供される相手アドレス値を因子とし、第2コードにしたがって計算されてもよい。保護モジュールファイルに複製された保護対象メソッドまたは関数の検索については、以下でさらに詳しく説明する。
段階460で、パッケージ生成制御部350は、保護対象メソッドまたは関数が複製された保護モジュールファイルとアプリケーションのためのファイルを含むパッケージを生成してもよい。このとき、アプリケーションの実行コードが含まれたファイルで保護対象メソッドまたは関数が含むコードは変形されているため、保護モジュールファイルなしではアプリケーションを正確に実行することができなくなる。したがって、保護モジュールの除去を防ぐことができる。また、アプリケーションの実行コードでは、保護対象メソッドまたは関数が含むコードのインストラクションが変形されているため、本来のコードを復元することができなくなってコードを保護し、コードに対する偽・変造を防ぐことができるようになる。
図5は、本発明の一実施形態における、保護対象メソッドまたは関数の暗号化および復号化コードの追加のための過程の例を示したフローチャートである。図5の段階510および520は、選択的に、図4のコード保護方法に含まれて実行されてもよい。図5では、図5の段階510および520が段階430と段階440の間に含まれて実行される実施形態について説明しているが、図5の段階510および520は、段階430以後、そして段階460以前であれば実行順に制約はない。図5の段階510および520を実行するために、プロセッサ222は、暗号化制御部(図示せず)および復号化コード追加制御部(図示せず)をさらに含んでもよい。
段階510で、プロセッサ222または暗号化制御部は、保護モジュールファイルに複製された保護対象メソッドまたは関数のインストラクションを第1キーまたは第1暗号化アルゴリズムによって暗号化してもよい。カップリングによって保護モジュールファイルに複製された保護対象メソッドまたは関数は、ハイレベル言語(一例として、ジャバやC++)で作成されているため、保護対象メソッドまたは関数が保護モジュールファイルから流出する可能性が存在する。したがって、保護対象メソッドまたは関数を暗号化することにより、このような流出を防ぐことができる。
段階520で、プロセッサ222または復号化コード追加制御部は、保護モジュールファイルに複製された保護対象メソッドまたは関数に暗号化されたインストラクションを復号化するための復号化コードを追加してもよい。ここで、復号化コードは、複製された保護対象メソッドまたは関数とは異なり、バイナリコードで作成され、分析を難しくすることができる。
暗号化されたインストラクションを復号化する過程については、以下でさらに詳しく説明する。
以下、図6および図7を参照しながら、パッケージを受信した電子機器1(110)の観点からコード保護方法について説明する。
図6は、本発明の一実施形態における、電子機器のプロセッサが含むことのできる構成要素の例を示した図であり、図7は、本発明の一実施形態における、電子機器が実行することのできる方法の例を示したフローチャートである。
図6に示すように、電子機器1(110)に含まれたプロセッサ212は、構成要素として、パッケージ管理制御部610および実行コード処理部620を含んでもよく、実施形態によっては、選択的に、再暗号化制御部630をさらに含んでもよい。このようなプロセッサ212およびプロセッサ212の構成要素は、図7のコード保護方法が含む段階710〜740を実行するように電子機器1(110)を制御してもよい。ここで、プロセッサ212およびプロセッサ212の構成要素は、メモリ211が含むオペレーティングシステムのコードと少なくとも1つのプログラムのコード(一例として、サーバ150が提供する保護モジュールファイルを含むパッケージのコード)による命令(instruction)を実行するように実現されてもよい。また、プロセッサ212の構成要素は、電子機器1(110)に格納されたプログラムコードが提供する制御命令にしたがってプロセッサ212によって実行される互いに異なる機能(different functions)の表現であってもよい。例えば、プロセッサ212が上述した制御命令にしたがってパッケージを格納および管理するように電子機器1(110)を制御するために動作する機能的表現として、パッケージ管理制御部610が使用されてもよい。
段階710で、パッケージ管理制御部610は、格納装置にアプリケーションのためのファイルが含まれたパッケージを格納してもよい。例えば、パッケージ管理制御部610は、電子機器1(110)のオペレーティングシステムの制御にしたがって電子機器1(110)の格納装置にパッケージを格納するように電子機器1(110)を制御してもよい。
ここで、パッケージとは、図3〜図5を参照しながら説明した保護モジュールファイルが含まれたパッケージであって、サーバ150を通じて直接ダウンロードするか、または他のサーバ(一例として、サーバ160)を通じてダウンロードしたパッケージであってもよい。したがって、保護モジュールファイルには、アプリケーションの実行コードで選別された保護対象メソッドまたは関数が複製されていてもよく、実行コードには、前記選別された保護対象メソッドまたは関数に含まれたコードが変形されて含まれていてもよい。また、実行コードには、保護モジュールファイルに複製された保護対象メソッドまたは関数を見つけ出すための検索コードが追加された状態であってもよい。
段階720で、プロセッサ212は、コード保護方法のためのアプリケーションのファイルに格納されたプログラムコードをメモリ211にロードしてもよい。例えば、電子機器1(110)でアプリケーションが実行されると、プロセッサ212は、オペレーティングシステムの制御にしたがってアプリケーションのパッケージで実行コードを含むプログラムコードをメモリ221にロードするようにサーバ150を制御してもよい。
段階730で、実行コード処理部620は、アプリケーションの実行にしたがって実行コードを実行し、選別された保護対象メソッドまたは関数に対して検索コードを利用し、保護モジュールファイルで複製された保護対象メソッドまたは関数を見つけ出して実行してもよい。
上述したように、選別された保護対象メソッドまたは関数は、アンノウンインストラクションや任意のランダムなアドレスにジャンプ(jump)するインストラクションを含むようにコードが変形されたため、実行コードを実行するだけでは実行コードを正確に実行することができない。本来のコードは保護モジュールファイルに複製されており、保護モジュールファイルのプログラムコードはメモリ211にロードされているため、実行コード処理部620は、検索コードを利用してメモリ211にロードされた複製された保護対象メソッドまたは関数を見つけ出して実行することにより、本来の実行コードを正確に実行することができるようになる。
具体的な実施形態として、検索コードは、選別された保護対象メソッドまたは関数に追加されてゲートウェイを呼び出すための第1コード、および実行コードにゲートウェイとして追加される第2コードを含んでもよい。この場合、段階730で、実行コード処理部620は、第1コードにしたがってゲートウェイとして第2コードを呼び出し、第2コードを通じて保護モジュールファイルに複製された保護対象メソッドまたは関数のメモリアドレスを取得することで、複製された保護対象メソッドまたは関数を見つけ出して実行してもよい。上述したように、メモリアドレスは、アプリケーションの実行によるプログラムカウンタ(Program Counter:PC)と保護モジュールファイルによって提供される相手アドレス値を因子とし、第2コードによって計算されてもよい。
また、上述したように、保護モジュールファイルに複製された保護対象メソッドまたは関数(のインストラクション)は、第1キーまたは第1暗号化アルゴリズムによって暗号化されていてもよい。この場合、実行コード処理部620は、複製された保護対象メソッドまたは関数に追加された復号化コードを利用して暗号化されたインストラクションを復号化してもよい。
段階740で、再暗号化制御部630は、アプリケーションが実行され、保護モジュールファイルに複製された保護対象メソッドまたは関数のインストラクションが復号化コードによって復号化され、予め設定された条件が満たされる場合、インストラクションを第2キーまたは第2暗号化アルゴリズムによって再暗号化してもよい。それぞれの保護対象メソッドまたは関数に対する実行時点がそれぞれ異なるため、少なくとも一部の保護対象メソッドまたは関数は常に暗号化された状態で存在するようになる。また、実行時点ごとに暗号化された保護対象メソッド(または関数)と、復号化された保護対象メソッド(または関数)または再暗号化された保護対象メソッド(または関数)が継続して異なるため、保護モジュールファイルに複製された保護対象メソッドまたは関数は互いに異なる値を有するようになり、コードをより一層安全に保護することができるようになる。
このように、本発明の実施形態によると、保護対象となるアプリケーションのコードと保護モジュールをカップリングして提供することにより、保護モジュールなしではアプリケーションが実行されないようにし、保護モジュールの除去を防ぐことができる。また、全体コードに対して保護を適用するのではなく、必ず必要なコードに対してのみ保護モジュールとのカップリングを処理することにより、保護対象コードを選択することができる。さらに、保護モジュールとカップリングされたコードを暗号化し、該当のコードの実行時点にだけ暗号化されたコードを復号化し、復号化されたコードを再び暗号化することにより、アプリケーションの実行時点でも保護モジュールとカップリングされたコードのうちの少なくとも一部が常に暗号化されているようにコードを保護することができる。これだけでなく、保護対象となるアプリケーションのコードを保護モジュールに移動させて保護することにより、アプリケーションのコードを静的に分析できないようにすることができ、保護モジュールに移動したアプリケーションのコードが最初の実行時に復号化され、または周期的に再暗号化されるため、動的な分析に対しても保護を提供することができる。例えば、ランタイムの瞬間ごとに保護モジュールに格納されたアプリケーションのコードが変わるため、特に動的分析のためにメモリダンプなどを通じた分析方法を無力化させることができる。
以下では、コード保護方法のさらに具体的な実施形態について説明する。
図8は、本発明の一実施形態における、サーバがパッケージに保護モジュールファイルを追加して電子機器に送信する過程の例を示した図である。
図8は、開発者端末810、コード保護システム820、ファイル配布システム830、ユーザ端末840、およびサービスシステム850をそれぞれ示している。開発者端末810は、アプリケーションの開発者が利用する電子機器であってもよく、ユーザ端末840は、アプリケーションのユーザが利用する電子機器であってもよい。コード保護システム820は、上述したサーバ150に対応してもよく、ファイル配布システム830とサービスシステム850もそれぞれ個別サーバであってもよい。他の実施形態において、コード保護システム820とファイル配布システム830は、同じ主体によって運営されるシステムであるか、または1つのシステムであってもよい。また、サービスシステム850は、開発者によって運営されるサーバシステムであってもよいし、開発者とは異なる第三者によって開発者が提供するサーバ側プログラムを基盤として動作するサーバシステムであってもよい。例えば、サービスシステム850は、ゲームアプリケーションを通じてオンラインゲームサービスを提供するゲームサーバであってもよい。この場合、ユーザ端末840は、ゲームアプリケーションを通じてゲームサーバに接続してゲームサービスの提供を受けることができるようになる。
1.パッケージ登録過程は、開発者端末810が、開発者によって開発されたアプリケーションのパッケージをコード保護システム820に登録する過程であってもよい。例えば、開発者端末810とコード保護システム820の間のネットワーク(一例として、図1のネットワーク170)を介したデータ通信によってパッケージが開発者端末810からコード保護システム820にアップロードされてもよい。以下では、このようなネットワークを介したデータ通信についての説明は省略する。
2.保護ファイル追加過程は、コード保護システム820が、登録されたアプリケーションのパッケージに保護モジュールファイルを追加する過程であってもよい。この過程において、図4および図5を参照しながら説明したコード保護方法がコード保護システム820によって実行されてもよい。
3.パッケージ登録過程は、コード保護システム820が、保護モジュールファイルが追加されたパッケージをファイル配布システム830に登録する過程であってもよい。他の実施形態において、コード保護システム820は、保護モジュールファイルが追加されたパッケージを開発者端末810に提供し、開発者端末810が直接ファイル配布システム830に保護モジュールファイルが追加されたパッケージを登録することも可能である。
4.パッケージ配布過程は、ファイル配布システム830が、ユーザ端末840の要請にしたがって保護モジュールファイルが追加されたパッケージをユーザ端末840に配布する過程であってもよい。ユーザ端末840では、保護モジュールファイルが追加されたパッケージを通じてアプリケーションがインストールされてもよい。
5.サービス通信過程は、ユーザ端末840が、実行するアプリケーションを基盤としてサービスシステム850と通信してサービスの提供を受ける過程であってもよい。
図9は、本発明の一実施形態における、保護対象メソッドまたは関数を選別する過程の例を示した図である。図9は、ゲームアプリケーションパッケージ910を示している。ゲームアプリケーションパッケージ910は、ファイル1(911)およびファイル2(912)のような複数のファイルを含んでもよい。
ここで、図8で説明したコード保護システム820は、保護対象メソッドまたは関数を、予め設定されたルールにしたがって、または開発者によって入力された情報にしたがって選別してパッキングリスト(packing list)920を生成してもよい。例えば、メソッド2が保護対象メソッドとして選別された場合、パッキングリスト920には、選別されたメソッドの識別子である「メソッド2」とランダムな固有値であるインデックス「9」にマッチングされた保護対象リストが生成されてもよい。また、メソッド4が保護対象メソッドとして追加選別された場合、パッキングリスト920には、選別されたメソッドの識別子である「メソッド4」とランダムな固有値であるインデックス「2」にマッチングされた保護対象リストが生成されてもよい。
コード保護システム820は、生成されたパッキングリスト920を基盤として選別された保護対象メソッド(または関数)を識別することができるようになる。
図10は、本発明の一実施形態における、保護対象メソッドまたは関数を保護モジュールファイルに複製する過程の例を示した図である。図10は、ゲームアプリケーションパッケージ1010のファイル1(1011)で関数「jni onload」の1番目のインストラクション「instruction 1」がコード保護システム820によって保護モジュールファイル1020に複製される例を説明している。ここで、コード保護システム820は、図9で説明したパッキングリスト920を基盤として選別された保護対象メソッドまたは関数を見つけ出してもよい。
一般的に、1つのインストラクションは、同じように保護モジュールファイル1020に複製されてもよいが、現在のプログラムカウンタ値がオペコード(opcode)値に影響を与えるインストラクションは、2つ以上のインストラクションに変換されて複製されることも可能である。例えば、現在のプログラムカウンタで4Mbyte以上離れるように分岐されるインストラクションは、このような分岐を反映するために2つ以上のインストラクションに変換されて複製されてもよい。
また、アンドロイド(登録商標)オペレーティングシステムで4byteと定義されたインストラクションのアーム(arm)モードと2byteと定義されたインストラクションのサム(thumb)モードのように、モード別インストラクションが保護モジュールファイル1020でそれぞれ異なる領域(「FunctionArm」および「FunctionThumb」)に複製されることも可能である。インストラクションの変換は、コード保護システム820が呼び出すインストラクション変換器(instruction translator)によって処理されてもよい。ここで、コード保護システム820は、アームモードのためのインストラクション変換器とサムモードのためのインストラクション変換器をそれぞれ呼び出してもよい。他の実施形態では、サム2(thumb2)モードのためのインストラクション変換器がさらに利用されることも可能である。
また、インストラクションの変換は、コード最適化のために複数のインストラクションを1つに統合する過程を含んでもよい。例えば、実行コードのコンパイル過程において不必要に含まれたインストラクションが除去されてもよい。
ここで、保護モジュールファイルのコードは、メモリで可変的にロードされるため、インストラクションは、可変的なメモリアドレスを考慮して変換されてもよい。このような可変的なメモリアドレスは、上述した保護モジュールファイルによって提供される相手アドレス値を基盤としてもよい。
図11は、本発明の一実施形態における、ゲートウェイを追加してコードのインストラクションを変形する過程の例を示した図である。
上述したように、保護モジュールファイルのコードがメモリにロードされるアドレスは可変的である。コード保護システム820は、保護対象メソッド(または関数)にゲートウェイ1110を呼び出すための第1コード「b.gateway Index1」を追加してもよく、ゲームアプリケーションパッケージ1010(または実行コード)にはゲートウェイ1110のための第2コードのセクションを追加してもよい。ここで、4バイトアドレスは、アプリケーションがユーザ端末840で実行される場合に保護モジュールファイル1020によって提供される相手アドレス値であってもよい。このようなゲートウェイ1110を通じてメモリにアップロードされた保護モジュールファイル1020のコードで複製された保護対象メソッド(または関数)のインストラクションを見つけ出して実行することができるようになる。
既存のインストラクションは、アンノウンインストラクションや任意のランダムなアドレスにジャンプ(jump)するインストラクションに変形されてもよい。「Index1」のようなインデックスは、パッキングリスト920によって管理されてもよい。
図12は、本発明の一実施形態における、複製された保護対象メソッドまたは関数のインストラクションを暗号化する過程の例を示した図である。図12は、図11で説明した保護モジュールファイル1020が複製されたインストラクションを暗号化した保護モジュールファイル1210に変更される例を示している。第1点線ボックス1211は、複製されたインストラクションが暗号化されたことを示しており、第2点線ボックス1212は、暗号化されたインストラクションを復号化するための復号化コードが追加された例を示している。
復号化コード「UnCryptor Code」は、最初の実行時に暗号化されたインストラクションを復号化し、インストラクションが復号化された後には、単純に復号化されたインストラクションにジャンプするように実現されてもよい。
図13は、本発明の一実施形態における、保護動作の全体の流れの例を示した図である。ユーザ端末840でアプリケーションが実行される場合、ユーザ端末840は、ゲームアプリケーションパッケージ1010でメモリにロードされた実行コードを順に実行しながらサービスの提供を受けてもよい。ファイル1(1011)の保護対象関数「jni onload」が実行されなければならない場合、ユーザ端末840は、インストラクション「b.gateway Index1」にしたがってゲートウェイ1110を呼び出してもよく、ゲートウェイ1110の「Index1」に含まれたインストラクションにしたがって保護モジュールファイル1210に複製された保護対象メソッドまたは関数を見つけ出すことができるようになる。
ゲートウェイ1110の「4byte address」は、保護モジュールファイル1210で保護モジュールのためのコードがメモリにロードされた後、メモリにおける相手アドレス値としてゲートウェイ1110に提供されてもよい。ユーザ端末840は、ゲートウェイ1110を通じて保護モジュールファイル1210(実際には、メモリにロードされた保護モジュールコード)で保護対象関数「jni onload」が複製された領域を見つけ出してもよい。ユーザ端末840は、コード「UnCryptor Code」によって暗号化されたインストラクションを復号化してもよい。保護モジュールファイル1310(実際には、メモリにロードされた保護モジュールコード)は、暗号化されたインストラクションが復号化された様子を示している。ここで、コード「UnCryptor Code」は、「instruction 1」にジャンプするためのコード(他の例として、本来の場所にジャンプするためのコード)に変更された。したがって、ユーザ端末840は、保護対象関数「jni onload」のためのインストラクションを得ることができるようになる。
以後、予め設定された条件にしたがって復号化されたインストラクションは、他のキー(第2キー)や他の暗号化アルゴリズム(第2暗号化アルゴリズム)によって再暗号化されてもよい。
図14は、本発明の一実施形態における、実行時点によるインストラクションの暗号化および復号化を説明するための図である。
実行時点1での第1ボックス1410は、保護モジュールファイルに複製されたコードの暗号化状態を示している。ここで、ボックス1410に示すように、最初に複製されたコードはすべて暗号化された状態で存在してもよい。
実行時点2での第2ボックス1420は、一部コードが復号化され、復号化されたコード「Code」が一部存在することを示している。
実行時点3での第3ボックス1430は、復号化されたコードのうちの一部が再暗号化され、再暗号化されたコード「ReCrypted Code」が一部存在することを示している。
このように、アプリケーションの実行時、各インストラクションの実行時点に復号化が行われ、暗号化されたインストラクションに対する再暗号化が行われるため、保護モジュールファイルは実行時点によって互いに異なるコード値を含むようになる。したがって、保護モジュールファイルを分析しても、本来のコードを得ることが難しくなるため、コードに対する偽・変造を防ぐことができる。インストラクションの再暗号化のための条件は、アプリケーションがバックグラウンドモードで動作するように転換される場合や、インストラクションが復号化されて実行された直後など、多様な条件によって予め設定されてもよい。
図15は、本発明の他の実施形態における、サーバのプロセッサが含むことのできる構成要素の例を示したブロック図であり、図16は、本発明の他の実施形態における、サーバが実行することのできる方法の例を示したフローチャートである。
サーバ150は、本発明の他の実施形態に係るコード保護システムを実現してもよく、図15に示すように、サーバ150に含まれたプロセッサ222は、構成要素として、パッケージファイル管理部1510、暗号化制御部1520、ファイル制御部1530、保護モジュール追加部1540、およびパッケージファイル提供部1550を含んでもよい。このようなプロセッサ222およびプロセッサ222の構成要素は、図16のコード保護方法が含む段階1610〜1660を実行するようにサーバ150を制御してもよい。このとき、プロセッサ222およびプロセッサ222の構成要素は、メモリ221が含むオペレーティングシステムのコードと少なくとも1つのプログラムのコードによる命令(instruction)を実行するように実現されてもよい。ここで、プロセッサ222の構成要素は、サーバ150に格納されたプログラムコードが提供する制御命令にしたがってプロセッサ222によって実行されるプロセッサ222の互いに異なる機能(different functions)の表現であってもよい。例えば、プロセッサ222が上述した制御命令にしたがってアプリケーションのためのパッケージファイルを格納するようにサーバ150を制御するプロセッサ222の機能的表現として、パッケージファイル管理部1510が使用されてもよい。
段階1610で、プロセッサ222は、サーバ150の制御と関連するプログラムのファイルに格納されたプログラムコードをメモリ221にロードしてもよい。例えば、プロセッサ222は、オペレーティングシステムの制御にしたがって前記プログラムのファイルからプログラムコードをメモリ221にロードするようにサーバ150を制御してもよい。例えば、前記プログラムのファイルは、プロセッサ222が以後で説明される段階1620〜1660を実行するように制御するためのコードのうちの少なくとも一部を含んでもよい。
段階1620で、パッケージファイル管理部1510は、アプリケーションのためのパッケージファイルを格納するようにサーバ150を制御してもよい。例えば、パッケージファイルは、入力/出力インタフェース224を通じてサーバ150に入力されるか、または通信モジュール223を通じてサーバ150に受信されてもよく、サーバ150は、パッケージファイル管理部1510の制御にしたがって入力された、または受信されたパッケージファイルを、ストレージのような永久格納装置に格納して管理してもよい。例えば、パッケージファイルは、開発者によって開発されたコードをコンパイルした後、すべてのファイルを集めて生成したアプリケーションのパッケージであってもよい。
段階1630で、暗号化制御部1520は、パッケージファイルが含むライブラリファイルを暗号化して暗号化されたライブラリファイルを生成してもよい。ライブラリファイルを暗号化する方法としては、周知の暗号化方式のうちの1つが利用されてもよい。
段階1640で、ファイル制御部1530は、パッケージファイルが含むライブラリファイルを変換するか、またはパッケージファイルから除去してもよい。例えば、ファイル制御部1530は、ライブラリファイルが含むコードや命令(instruction)をアンノウン(unknown)コードや命令に変換するか、ファイル自体をパッケージファイルから除去することにより、利用者がライブラリファイルの内容にアクセスできないようにすることができる。
段階1650で、保護モジュール追加部1540は、暗号化されたライブラリファイルを含む保護モジュールをパッケージファイルに追加してパッケージファイルを再生成してもよい。単純にライブラリファイルを変換するか除去する場合には、パッケージファイルを通じてアプリケーションが正確に実行されることが不可能となるため、サーバ150は、保護モジュール追加部1540の制御にしたがって暗号化されたライブラリファイルを保護モジュールに含ませてパッケージファイルに追加することにより、ライブラリファイルへのアクセスを防ぐと同時に、保護モジュールを通じてしかライブラリファイルにアクセスすることができないようにすることができる。
段階1660で、パッケージファイル提供部1550は、再生成されたパッケージファイルをネットワーク170を介して提供するようにサーバ150を制御してもよい。再生成されたパッケージファイルは、ネットワーク170を介して利用者の端末(一例として、電子機器1(110))に直接送信されてもよいし、別のサーバ(一例として、サーバ160)を通じて利用者の端末に伝達されてもよい。他の例として、再生成されたパッケージファイルは、ネットワーク170を介して開発者の端末に送信された後、開発者の端末から別のサーバにアップロードされて利用者の端末に伝達されることも可能である。
ここで、保護モジュール(保護モジュールファイルに含まれた保護モジュール)は、パッケージファイルを通じてアプリケーションがインストールされた電子機器(一例として、電子機器1(110))で変換または除去されたライブラリファイルに対する制御命令をインターセプト(intercept)またはフッキング(hooking)し、保護モジュールに含まれた暗号化されたライブラリファイルを利用してインターセプトされた制御命令を処理するように実現されてもよい。電子機器で動作する保護モジュールについては、以下でさらに詳しく説明する。
図17は、本発明の他の実施形態における、パッケージファイルに保護モジュールを追加する例を示した図である。サーバ150に入力または受信されるパッケージファイル1710は、少なくとも1つのライブラリファイル1711を含んでもよい。例えば、アンドロイドオペレーティングシステムにおいて、ライブラリファイル1711は、「libGame.so」のように「.so」の拡張子を有してもよく、少なくともヘッダ1712とコード1713を含むように実現されてもよい。従来技術では、このようなパッケージファイル1710に、パッケージファイル1710の保護のために保護モジュールファイルを追加したが、上述したように、保護モジュールファイルを削除するか、または保護モジュールがメモリにロードされる以前にライブラリファイル1711にアクセスすることにより、ライブラリファイル1711を偽・変造することができた。
このような偽・変造を防ぐために、本実施形態では、パッケージファイル1710に暗号化されたライブラリファイル1724を含む保護モジュール1721を追加し、パッケージファイル1710からライブラリファイル1711を除去してパッケージファイル1720を生成してもよい。これにより、パッケージファイル1720の利用者は、保護モジュール1721を除去することができず、ライブラリファイル1711の内容に簡単にアクセスすることができないようになる。保護モジュール1721は、パッケージファイル1720に対する保護機能や暗号化されたライブラリファイル1724の復号化機能などのためのヘッダ1722とコード1723をさらに含んでもよい。
図18は、本発明の他の実施形態における、パッケージファイルに保護モジュールを追加する他の例を示した図である。図18の実施形態では、図17の実施形態と同じように、パッケージファイル1710に暗号化されたライブラリファイル1823を含む保護モジュール1820を追加してもよい。この反面、図18の実施形態では、図17の実施形態とは異なり、ライブラリファイル1711を削除せず、コード1713を利用者の端末が解釈することができないアンノウンコードまたは命令1811に変換してパッケージファイル1710を生成してもよい。この場合にも、パッケージファイル1810の利用者は、ライブラリファイル1711の内容に容易にアクセスすることができなくなり、保護モジュール1820を除去する場合、アプリケーションが正常に実行しなくなるため、保護モジュール1820の削除を防ぐことができる。保護モジュール1820は、パッケージファイル1810に対する保護機能や暗号化されたライブラリファイル1823の復号化機能などのためのヘッダ1821とコード1822をさらに含んでもよい。
以下では、サーバ150で再生成されて提供されるパッケージファイルを受信した電子機器1(110)の観点から本発明の実施形態について説明する。
図19は、本発明の他の実施形態における、電子機器のプロセッサが含むことのできる構成要素の例を示したブロック図であり、図20は、本発明の一実施形態における、電子機器が実行することのできる方法の例を示したフローチャートである。
電子機器1(110)は、本発明の他の実施形態に係るコード保護システムを実現してもよく、図19に示すように、電子機器1(110)に含まれたプロセッサ212は、構成要素として、アプリケーションインストール制御部1910、制御命令インターセプト部1920、および制御命令処理部1930を含んでもよい。このようなプロセッサ212およびプロセッサ212の構成要素は、図20のコード保護方法が含む段階2010〜2040を実行するように電子機器1(110)を制御してもよい。このとき、プロセッサ212およびプロセッサ212の構成要素は、メモリ211が含むオペレーティングシステムのコードと少なくとも1つのプログラムのコードによる命令(instruction)を実行するように実現されてもよい。ここで、プロセッサ212の構成要素は、電子機器1(110)に格納されたプログラムコードが提供する制御命令にしたがってプロセッサ212によって実行されるプロセッサ212の互いに異なる機能(different functions)の表現であってもよい。例えば、プロセッサ212が上述した制御命令にしたがってアプリケーションをインストールするように電子機器1(110)を制御するプロセッサ212の機能的表現として、アプリケーションインストール制御部1910が使用されてもよい。
段階2010で、プロセッサ212は、電子機器1(110)の制御と関連するプログラムのファイルに格納されたプログラムコードをメモリ211にロードしてもよい。例えば、プロセッサ212は、オペレーティングシステムの制御にしたがって前記プログラムのファイルからプログラムコードをメモリ211にロードするように電子機器1(110)を制御してもよい。例えば、前記プログラムのファイルは、プロセッサ212が以下で説明される段階2020〜2040を実行するように制御するためのコードのうちの少なくとも一部を含んでもよい。
段階2020で、アプリケーションインストール制御部1910は、パッケージファイルを受信し、パッケージファイルを通じてアプリケーションをインストール(install)するように電子機器1(110)を制御してもよい。ここで、パッケージファイルは、上述したように、サーバ150でパッケージファイルが含むライブラリファイルが変換または削除され、ライブラリファイルを暗号化して含む保護モジュールが追加されたファイルであってもよい。
段階2030で、制御命令インターセプト部1920は、アプリケーションの実行時、電子機器1(110)のメモリ211にロードされた保護モジュールの制御にしたがって変換または削除されたライブラリファイルに対する制御命令をインターセプト(intercept)してもよい。例えば、制御命令インターセプト部1920は、電子機器1(110)のメモリ211にロードされた保護モジュールに対するオープン命令にしたがって迂回リンカ(detour linker)を生成し、生成された迂回リンカの制御にしたがって変換または削除されたライブラリに対する制御命令をインターセプトしてもよい。言い換えれば、迂回リンカは、変換または削除されたライブラリに対する制御命令をモニタリングし、モニタリングされた制御命令をインターセプトするように電子機器1(110)を制御するモジュールであって、制御命令インターセプト部(1920)の他の機能的表現であってもよい。
段階2040で、制御命令処理部1930は、保護モジュールの制御にしたがって保護モジュールに含まれた暗号化されたライブラリファイルを利用してインターセプトされた制御命令を処理してもよい。例えば、変換または除去されたライブラリファイルに対する制御命令は、ライブラリファイルに対するオープン命令を含んでもよい。この場合、制御命令処理部1930は、段階2040で、保護モジュールの制御にしたがってインターセプトされたオープン命令に対する応答によって暗号化されたライブラリファイルを復号化した後、復号化されたライブラリファイルの内容が格納されたバッファを指示するフェイクハンドル(fake handle)パラメータを生成して返してもよい。一例として、フェイクハンドルパラメータは、定数(integer)変数の最大値を有してもよく、保護モジュールは、フェイクハンドルパラメータとして定数変数の最大値が返される場合には、復号化されたライブラリファイルの内容が格納されたバッファにアクセスしてライブラリファイルに対する制御命令を処理するように制御してもよい。
以後、ライブラリファイルの内容が格納されたバッファには、フェイクハンドルパラメータを利用してアクセスすることができるようになる。例えば、変換または除去されたライブラリファイルに対する制御命令は、ライブラリファイルに対する読み取り命令、書き込み命令、および検索命令のうちの少なくとも1つの命令をさらに含んでもよい。この場合、制御命令処理部1930は、段階2040で、保護モジュールの制御にしたがってインターセプトされた少なくとも1つの命令に対する応答により、フェイクハンドルパラメータを基盤として復号化されたライブラリファイルの内容が格納されたバッファにアクセスして少なくとも1つの命令を処理してもよい。より具体的な例として、制御命令処理部1930は、段階2040で、保護モジュールの制御にしたがって読み取り命令に対する応答によってバッファで読み取り命令に対応する内容を複写して返すか、書き込み命令にしたがってバッファに書き取り命令に対応する内容を書き込むか、または検索命令にしたがってバッファで検索命令に対応するファイルポインタの位置を返してもよい。したがって、電子機器1(110)は、本来のライブラリファイルなしでも、バッファを通じてライブラリファイルに対する制御命令を処理することができるようになる。
図21は、本発明の他の実施形態における、制御命令の処理過程の例を示した図である。図21は、保護モジュールに対するオープン命令関数である「dlopen(保護モジュール)」2110を示している。保護モジュールに対するオープン命令にしたがい、制御命令インターセプト部1920は、迂回リンカ2111を生成してもよく、保護モジュールに対するオープン2112および/または読み取り2113を処理してもよい。
一方、図21は、ライブラリファイルに対するオープン命令関数である「dlopen(ライブラリファイル)」2120を示している。ここで、ライブラリファイルに対するオープン2121と読み取り2122は、迂回リンカ2111によってモニタリングされ、インターセプトされてもよい。保護モジュールがオープンされる前にライブラリファイルに対するオープン2121や読み取り2122が要求される場合、ライブラリファイルは除去されたか変換されているため、制御命令が正常に処理されなくなり、これによって保護モジュールを迂回することができなくなる。
メモリにロードされた保護モジュール2130が含むオープンインタセプタ2131モジュールは、インターセプトされたオープン2121にしたがって暗号化されたライブラリファイルを復号化し、復号化されたライブラリファイル2132をバッファに管理してもよく、フェイクハンドル(fake handle)パラメータを生成してもよい。フェイクハンドルパラメータは、復号化されたライブラリファイルの内容が格納されたバッファを指示し、保護モジュール2130が制御命令にしたがってライブラリファイルにアクセスできるようにしてもよい。
読み取りインタセプタ2134モジュールは、インターセプトされた読み取り2122にしたがい、フェイクハンドルパラメータを基盤としてバッファで読み取り2122に対応するライブラリファイルの内容を複写2135して返してもよい。
暗号化されたライブラリファイルの復号化やライブラリファイルの内容に対するアクセスがすべてメモリ(一例として、電子機器1(110)のメモリ211)上で保護モジュール2130によって行われるため、保護モジュール2130の削除あるいは迂回を防ぐことができる。
このように、本発明の実施形態によると、パッケージファイルでライブラリファイルを変換するか除去することで、利用者がライブラリファイルに直接アクセスすることができないようにし、暗号化されたライブラリファイルを含む保護モジュールをパッケージファイルに追加し、保護モジュールを通じて暗号化されたライブラリファイルにアクセスするようにすることにより、保護モジュールの除去あるいは迂回によるファイルの偽・変造を防ぐことができる。
上述したシステムまたは装置は、ハードウェア構成要素、ソフトウェア構成要素、またはハードウェア構成要素とソフトウェア構成要素との組み合わせによって実現されてもよい。例えば、実施形態で説明された装置および構成要素は、例えば、プロセッサ、コントローラ、ALU(arithmetic logic unit)、デジタル信号プロセッサ(digital signal processor)、マイクロコンピュータ、FPGA(field programmable gate array)、PLU(programmable logic unit)、マイクロプロセッサ、または命令を実行して応答することができる様々な装置のように、1つ以上の汎用コンピュータまたは特殊目的コンピュータを利用して実現されてもよい。処理装置は、オペレーティングシステム(OS)および前記OS上で実行される1つ以上のソフトウェアアプリケーションを実行してよい。また、処理装置は、ソフトウェアの実行に応答し、データにアクセスし、データを格納、操作、処理、および生成してもよい。理解の便宜のために、1つの処理装置が使用されるとして説明される場合もあるが、当業者は、処理装置が複数個の処理要素(processing element)および/または複数種類の処理要素を含んでもよいことが理解できるであろう。例えば、処理装置は、複数個のプロセッサまたは1つのプロセッサおよび1つのコントローラを含んでもよい。また、並列プロセッサ(parallel processor)のような、他の処理構成(processing configuration)も可能である。
ソフトウェアは、コンピュータプログラム、コード、命令、またはこれらのうちの1つ以上の組み合わせを含んでもよく、思うままに動作するように処理装置を構成したり、独立的または集合的に(collectively)処理装置に命令したりしてよい。ソフトウェアおよび/またはデータは、処理装置に基づいて解釈されたり、処理装置に命令またはデータを提供するために、いかなる種類の機械、コンポーネント、物理装置、仮想装置(virtual equipment)、コンピュータ格納媒体または装置、または送信される信号波(signal wave)に永久的または一時的に具現化(embody)されてもよい。ソフトウェアは、ネットワークによって接続されたコンピュータシステム上に分散され、分散された方法によって格納されても実行されてもよい。ソフトウェアおよびデータは、1つ以上のコンピュータで読み取り可能な記録媒体に格納されてもよい。
実施形態に係る方法は、多様なコンピュータ手段によって実行可能なプログラム命令の形態で実現されてコンピュータで読み取り可能な媒体に記録されてもよい。前記コンピュータで読み取り可能な媒体は、プログラム命令、データファイル、データ構造などを単独でまたは組み合わせて含んでもよい。前記媒体に記録されるプログラム命令は、実施形態のために特別に設計されて構成されたものであってもよいし、コンピュータソフトウェア当業者に公知な使用可能なものであってもよい。コンピュータで読み取り可能な記録媒体の例としては、ハードディスク、フロッピディスク、および磁気テープのような磁気媒体、CD−ROM、DVDのような光媒体、フロプティカルディスク(floptical disk)のような光磁気媒体、およびROM、RAM、フラッシュメモリなどのようなプログラム命令を格納して実行するように特別に構成されたハードウェア装置が含まれる。プログラム命令の例は、コンパイラによって生成されるもののような機械語コードだけではなく、インタプリタなどを使用してコンピュータによって実行される高級言語コードを含む。上述したハードウェア装置は、実施形態の動作を実行するために1つ以上のソフトウェアモジュールとして動作するように構成されてもよく、その逆も同じである。
以上のように、実施形態を限定された実施形態と図面に基づいて説明したが、当業者であれば、上述した記載から多様な修正および変形が可能である。例えば、説明された技術が、説明された方法とは異なる順序で実行されたり、および/あるいは、説明されたシステム、構造、装置、回路などの構成要素が、説明された方法とは異なる形態で結合されたりまたは組み合わされたり、他の構成要素または均等物によって対置されたり置換されたとしても、適切な結果を達成することができる。
したがって、異なる実施形態であっても、特許請求の範囲と均等なものであれば、添付される特許請求の範囲に属する。