(57)【要約】  通信費用の節減のためのコンテンツストリーミングサービス方法およびシステムを提供する。  コンピュータで実現される方法は、アプリケーションのためのファイルが含まれた応用プログラムパッケージを受信する段階（前記応用プログラムパッケージは、前記アプリケーションのコードがコンパイルされて生成された中間言語（Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｌａｎｇｕａｇｅ：ＩＬ）コードを含むファイルおよび前記中間言語コードによって前記アプリケーションを実行するように電子機器に実行環境を提供するためのライブラリファイルを含む）、前記中間言語コードを含むファイルのうちの少なくとも１つのファイルを暗号化する段階、および前記少なくとも１つの暗号化されたファイルの復号化のためのリカバリーファイルを前記応用プログラムパッケージに追加する段階（前記リカバリーファイルは、前記電子機器での前記アプリケーションの実行のために前記ライブラリファイル間の呼び出しによって前記少なくとも１つの暗号化されたファイルが伝達される場合に、前記少なくとも１つの暗号化されたファイルを復号化するためのコードを含む）を含む。
2018527664.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータで実現される方法であって、
アプリケーションのためのファイルが含まれた応用プログラムパッケージを受信する段階であって、前記応用プログラムパッケージは、前記アプリケーションのコードがコンパイルされて生成された中間言語コードを含むファイルおよび前記中間言語コードによって前記アプリケーションを実行するように電子機器に実行環境を提供するためのライブラリファイルを含む、段階、
前記中間言語コードを含むファイルのうちの少なくとも１つのファイルを暗号化する段階、および
前記少なくとも１つの暗号化されたファイルの復号化のためのリカバリーファイルを前記応用プログラムパッケージに追加する段階であって、前記リカバリーファイルは、前記電子機器での前記アプリケーションの実行のために前記ライブラリファイル間の呼び出しによって前記少なくとも１つの暗号化されたファイルが伝達される場合に、前記少なくとも１つの暗号化されたファイルを復号化するためのコードを含む、段階、
を含むことを特徴とする、コンピュータで実現される方法。
【請求項２】
前記応用プログラムパッケージを受信する段階は、
前記中間言語コードを含むファイルのうちの暗号化するためのファイルに関する情報をさらに受信し、
前記少なくとも１つのファイルを暗号化する段階は、
前記中間言語コードを含むファイルのうちの前記さらに受信した情報に対応するファイルを暗号化することを特徴とする、請求項１に記載のコンピュータで実現される方法。
【請求項３】
前記少なくとも１つのファイルは、前記実行環境のためのヘッダ部分および前記アプリケーションのためのコード部分を含み、
前記少なくとも１つのファイルを暗号化する段階は、
前記ヘッダ部分および前記コード部分のうちの少なくとも１つを暗号化することを特徴とする、請求項１に記載のコンピュータで実現される方法。
【請求項４】
前記少なくとも１つのファイルを暗号化する段階は、
前記ヘッダ部分を暗号化する場合、前記ヘッダ部分が含む情報をヌル値に変更して暗号化することを特徴とする、請求項３に記載のコンピュータで実現される方法。
【請求項５】
前記ライブラリファイルは、前記中間言語コードを含むファイルを呼び込むためのコードを含む第１ライブラリファイルおよび前記第１ライブラリファイルに対するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）コールによって前記中間言語コードを含むファイルのフルバッファを読み取ってパースするためのコードを含む第２ライブラリファイルを含み、
前記リカバリーファイルは、前記第２ライブラリファイルが含むコードに基づいて前記第１ライブラリファイルがＡＰＩコールされることによって読み取られる前記少なくとも１つの暗号化されたファイルに対するフルバッファを復号化し、前記少なくとも１つの暗号化されたファイルを復号化するためのコードを含むことを特徴とする、請求項１に記載のコンピュータで実現される方法。
【請求項６】
前記リカバリーファイルは、前記第１ライブラリファイルのＡＰＩに関する情報を含む前記第２ライブラリファイルのＩＡＴ（Ｉｍｐｏｒｔ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅ）をフッキングし、前記第２ライブラリファイルが含むコードによる前記ＡＰＩコールを確認するためのコードを含むことを特徴とする、請求項５に記載のコンピュータで実現される方法。
【請求項７】
ネットワークを介した前記電子機器からの要請に応じ、前記リカバリーファイルが追加された前記応用プログラムパッケージを前記電子機器に送信する段階
をさらに含むことを特徴とする、請求項１に記載のコンピュータで実現される方法。
【請求項８】
コンピュータで実現される方法であって、
アプリケーションのためのファイルが含まれた応用プログラムパッケージを受信する段階であって、前記応用プログラムパッケージは、前記アプリケーションのコードがコンパイルされて生成された中間言語コードを含み、暗号化された少なくとも１つのファイルおよび前記中間言語コードによって前記アプリケーションを実行するように電子機器に実行環境を提供するためのライブラリファイルおよび前記暗号化された少なくとも１つのファイルを復号化するためのリカバリーファイルを含む、段階、および
前記アプリケーションの実行過程において、前記リカバリーファイルに含まれたコードの制御にしたがって前記アプリケーションの実行のために前記ライブラリファイル間の呼び出しによって前記少なくとも１つの暗号化されたファイルが伝達される場合に、前記少なくとも１つの暗号化されたファイルを復号化する段階
を含むことを特徴とする、コンピュータで実現される方法。
【請求項９】
前記ライブラリファイルは、前記中間言語コードを含むファイルを呼び込むためのコードを含む第１ライブラリファイルおよび前記第１ライブラリファイルに対するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）コールによって前記中間言語コードを含むファイルのフルバッファを読み取ってパースするためのコードを含む第２ライブラリファイルを含み、
前記復号化する段階は、
前記第２ライブラリファイルが含むコードに基づいて前記第１ライブラリファイルがＡＰＩコールされることによって読み取られる前記少なくとも１つの暗号化されたファイルに対するフルバッファを前記リカバリーファイルが含むコードの制御にしたがって復号化し、前記少なくとも１つの暗号化されたファイルを復号化することを特徴とする、請求項８に記載のコンピュータで実現される方法。
【請求項１０】
前記復号化する段階は、
前記リカバリーファイルが含むコードの制御にしたがって前記第１ライブラリファイルのＡＰＩに関する情報を含む前記第２ライブラリファイルのＩＡＴ（Ｉｍｐｏｒｔ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅ）をフッキングし、前記第２ライブラリファイルが含むコードによる前記ＡＰＩコールを確認することを特徴とする、請求項９に記載のコンピュータで実現される方法。
【請求項１１】
前記復号化する段階は、
前記少なくとも１つの暗号化されたファイルのヘッダ部分が予め設定された値で始まるかによって前記少なくとも１つの暗号化されたファイルの暗号化の可否を確認することを特徴とする、請求項８に記載のコンピュータで実現される方法。
【請求項１２】
請求項１〜１１のうちのいずれか一項に記載の方法を実行するためのプログラムが記録されていることを特徴とする、コンピュータで読み取り可能な記録媒体。
【請求項１３】
１つ以上のプロセッサを含むサーバのシステムであって、
前記１つ以上のプロセッサは、
アプリケーションのためのファイルが含まれた応用プログラムパッケージを受信するように前記サーバを制御する受信制御部であって、前記応用プログラムパッケージは、前記アプリケーションのコードがコンパイルされて生成された中間言語コードを含むファイルおよび前記中間言語コードによって前記アプリケーションを実行するように電子機器に実行環境を提供するためのライブラリファイルを含む、受信制御部、
前記中間言語コードを含むファイルのうちの少なくとも１つのファイルを暗号化するように前記サーバを制御する暗号化制御部、および
前記少なくとも１つの暗号化されたファイルの復号化のためのリカバリーファイルを前記応用プログラムパッケージに追加するように前記サーバを制御するファイル追加制御部であって、前記リカバリーファイルは、前記電子機器での前記アプリケーションの実行のために前記ライブラリファイル間の呼び出しによって前記少なくとも１つの暗号化されたファイルが伝達される場合に、前記少なくとも１つの暗号化されたファイルを復号化するためのコードを含む、ファイル追加制御部
を含むことを特徴とする、システム。
【請求項１４】
前記受信制御部は、
前記中間言語コードを含むファイルのうちの暗号化するためのファイルに関する情報をさらに受信するように前記サーバを制御し、
前記暗号化制御部は、
前記中間言語コードを含むファイルのうちの前記さらに受信した情報に対応するファイルを暗号化するように前記サーバを制御することを特徴とする、請求項１３に記載のシステム。
【請求項１５】
前記少なくとも１つのファイルは、前記実行環境のためのヘッダ部分および前記アプリケーションのためのコード部分を含み、
前記暗号化制御部は、
前記ヘッダ部分および前記コード部分のうちの少なくとも１つを暗号化するように前記サーバを制御することを特徴とする、請求項１３に記載のシステム。
【請求項１６】
前記ライブラリファイルは、前記中間言語コードを含むファイルを呼び込むためのコードを含む第１ライブラリファイルおよび前記第１ライブラリファイルに対するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）コールによって前記中間言語コードを含むファイルのフルバッファを読み取ってパースするためのコードを含む第２ライブラリファイルを含み、
前記リカバリーファイルは、前記第２ライブラリファイルが含むコードに基づいて前記第１ライブラリファイルがＡＰＩコールされることによって読み取られる前記少なくとも１つの暗号化されたファイルに対するフルバッファを復号化し、前記少なくとも１つの暗号化されたファイルを復号化するためのコードを含むことを特徴とする、請求項１３に記載のシステム。
【請求項１７】
ネットワークを介した前記電子機器からの要請に応じ、前記リカバリーファイルが追加された前記応用プログラムパッケージを前記電子機器に送信するように前記サーバを制御する送信制御部
をさらに備えることを特徴とする、請求項１３に記載のシステム。
【請求項１８】
１つ以上のプロセッサを含む電子機器のシステムであって、
前記１つ以上のプロセッサは、
アプリケーションのためのファイルが含まれた応用プログラムパッケージを受信するように前記電子機器を制御する受信制御部であって、前記応用プログラムパッケージは、前記アプリケーションのコードがコンパイルされて生成された中間言語コードを含み、暗号化された少なくとも１つのファイルおよび前記中間言語コードによって前記アプリケーションを実行するように電子機器に実行環境を提供するためのライブラリファイルおよび前記暗号化された少なくとも１つのファイルを復号化するためのリカバリーファイルを含む、および
前記アプリケーションの実行過程において、前記リカバリーファイルに含まれたコードの制御にしたがって前記アプリケーションの実行のために前記ライブラリファイル間の呼び出しによって前記少なくとも１つの暗号化されたファイルが伝達される場合に、前記少なくとも１つの暗号化されたファイルを復号化するように前記電子機器を制御する復号化制御部
を備えることを特徴とする、システム。
【請求項１９】
前記ライブラリファイルは、前記中間言語コードを含むファイルを呼び込むためのコードを含む第１ライブラリファイルおよび前記第１ライブラリファイルに対するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）コールによって前記中間言語コードを含むファイルのフルバッファを読み取ってパースするためのコードを含む第２ライブラリファイルを含み、
前記復号化制御部は、
前記第２ライブラリファイルが含むコードに基づいて前記第１ライブラリファイルがＡＰＩコールされることによって読み取られる前記少なくとも１つの暗号化されたファイルに対するフルバッファを前記リカバリーファイルが含むコードの制御にしたがって復号化し、前記少なくとも１つの暗号化されたファイルを復号化するように前記電子機器を制御することを特徴とする、請求項１８に記載のシステム。
【請求項２０】
前記復号化制御部は、
前記少なくとも１つの暗号化されたファイルのヘッダ部分が予め設定された値で始まるかによって前記少なくとも１つの暗号化されたファイルの暗号化の可否を確認することを特徴とする、請求項１８に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
以下の説明は、アプリケーションのコードを保護するためのシステムおよび方法に関する。
【背景技術】
【０００２】
中間言語（Ｉｎｔｅｒｍｅｄｉａｔｅ  ＬａｎｇｕａｇｅまたはＩｎｔｅｒＬａｎｇｕａｇｅ：ＩＬ）とは、原始言語プログラムをコンパイラによって翻訳して目的言語プログラムを生成するとき、その中間段階で経るようになる言語を意味する。例えば、高水準言語プログラムをアセンブリ言語に変えた後、これをアセンブルして機械語プログラムを生成するとき、中間のアセンブリ言語が中間言語となる。
【０００３】
特許文献１は、モバイルプラットフォームの中間言語変換装置およびその方法に関するものであって、ＣまたはＣ＋＋言語で開発されたモバイルプラットフォームのソースコードを移動通信端末機のインタプリタで要求する中間言語コードに変換するＣ／Ｃ＋＋コンパイラと、中間言語コードを移動通信端末機のインタプリタで実行されるフォーマットに変換する中間言語アセンブラについて開示している。
【０００４】
このような中間言語への変換を経るアプリケーションのコードは、その特性上、デコンパイル（ｄｅｃｏｍｐｉｌｅ）に弱い。例えば、ユニティ（Ｕｎｉｔｙ）のようなツールによってＣシャープ（Ｃ−ｓｈａｒｐ：Ｃ＃）のようなプログラミング言語で製作されたアプリケーションのコードは、ＤＬＬ（Ｄｙｎａｍｉｃ  Ｌｉｎｋｉｎｇ  Ｌｉｂｒａｒｙ）のような中間言語の形態にコンパイルされてクライアントの電子機器に提供され、電子機器のフレームワークで実行されるようになる。このとき、このような中間言語の特性により、ＤＬＬをデコンパイルしてコードを修正した後でも再びＤＬＬにコンパイルすることが可能であるため、アプリケーションを偽造・変造できてしまうという問題が存在する。
【０００５】
このような偽造・変造を防ぐために、中間言語形態のファイルを単純に暗号化してクライアントに提供するようになれば、クライアントの電子機器で暗号化されたファイルを実行することができずにアプリケーションの駆動が不可能となる。かといって、暗号化されたファイルを復号化するための手段（または情報、一例として復号化キー）がクライアントに提供されるようになれば、アプリケーションの偽造・変造の問題がまた浮上してしまう。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】韓国公開特許第１０−２００７−００６７９５３
【発明の概要】
【発明が解決しようとする課題】
【０００７】
アプリケーションの実行コードが含まれたファイルを暗号化しながらも、アプリケーションの駆動時に暗号化されたファイルを安全に復号化して実行することができると同時に、暗号化されたファイルを復号化するための情報が第三者やクライアントに露出されることを防ぐことができる、システムおよび方法を提供する。
【課題を解決するための手段】
【０００８】
コンピュータで実現される方法であって、アプリケーションのためのファイルが含まれた応用プログラムパッケージを受信する段階（前記応用プログラムパッケージは、前記アプリケーションのコードがコンパイルされて生成された中間言語（Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｌａｎｇｕａｇｅ：ＩＬ）コードを含むファイルおよび前記中間言語コードによって前記アプリケーションを実行するように電子機器に実行環境を提供するためのライブラリファイルを含む）、前記中間言語コードを含むファイルのうちの少なくとも１つのファイルを暗号化する段階、および前記少なくとも１つの暗号化されたファイルの復号化のためのリカバリーファイルを前記応用プログラムパッケージに追加する段階（前記リカバリーファイルは、前記電子機器での前記アプリケーションの実行のために前記ライブラリファイル間の呼び出しによって前記少なくとも１つの暗号化されたファイルが伝達される場合に、前記少なくとも１つの暗号化されたファイルを復号化するためのコードを含む）を含むことを特徴とする、コンピュータで実現される方法を提供する。
【０００９】
一側によると、前記応用プログラムパッケージを受信する段階は、前記中間言語コードを含むファイルのうちの暗号化するためのファイルに関する情報をさらに受信し、前記少なくとも１つのファイルを暗号化する段階は、前記中間言語コードを含むファイルのうちの前記さらに受信された情報に対応するファイルを暗号化することを特徴としてよい。
【００１０】
他の側面によると、前記少なくとも１つのファイルは、前記実行環境のためのヘッダ部分および前記アプリケーションのためのコード部分を含み、前記少なくとも１つのファイルを暗号化する段階は、前記ヘッダ部分および前記コード部分のうちの少なくとも１つを暗号化することを特徴としてよい。
【００１１】
また他の側面によると、前記少なくとも１つのファイルを暗号化する段階は、前記ヘッダ部分を暗号化する場合、前記ヘッダ部分が含む情報をヌル（ｎｕｌｌ）値に変更して暗号化することを特徴としてよい。
【００１２】
また他の側面によると、前記ライブラリファイルは、前記中間言語コードを含むファイルを読み込むためのコードを含む第１ライブラリファイルおよび前記第１ライブラリファイルに対するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）コールによって前記中間言語コードを含むファイルのフルバッファ（ｆｕｌｌ  ｂｕｆｆｅｒ）を読み取ってパースするためのコードを含む第２ライブラリファイルを含み、前記リカバリーファイルは、前記第２ライブラリファイルが含むコードに基づいて前記第１ライブラリファイルがＡＰＩコールされることによって読み取られる前記少なくとも１つの暗号化されたファイルに対するフルバッファ（ｆｕｌｌ  ｂｕｆｆｅｒ）を復号化し、前記少なくとも１つの暗号化されたファイルを復号化するためのコードを含むことを特徴としてよい。
【００１３】
また他の側面によると、前記リカバリーファイルは、前記第１ライブラリファイルのＡＰＩに関する情報を含む前記第２ライブラリファイルのＩＡＴ（Ｉｍｐｏｒｔ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅ）をフッキング（ｈｏｏｋｉｎｇ）し、前記第２ライブラリファイルが含むコードによる前記ＡＰＩコールを確認するためのコードを含むことを特徴としてよい。
【００１４】
また他の側面によると、前記方法は、ネットワークを介した前記電子機器からの要請に応じ、前記リカバリーファイルが追加された前記応用プログラムパッケージを前記電子機器に送信する段階をさらに含むことを特徴としてよい。
【００１５】
コンピュータで実現される方法において、アプリケーションのためのファイルが含まれた応用プログラムパッケージを受信する段階（前記応用プログラムパッケージは、前記アプリケーションのコードがコンパイルされて生成された中間言語（Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｌａｎｇｕａｇｅ：ＩＬ）コードを含み、暗号化された少なくとも１つのファイルおよび前記中間言語コードによって前記アプリケーションを実行するように電子機器に実行環境を提供するためのライブラリファイルおよび前記暗号化された少なくとも１つのファイルを復号化するためのリカバリーファイルを含む）、および前記アプリケーションの実行過程において、前記リカバリーファイルに含まれたコードの制御にしたがって前記アプリケーションの実行のために前記ライブラリファイル間の呼び出しによって前記少なくとも１つの暗号化されたファイルが伝達される場合に、前記少なくとも１つの暗号化されたファイルを復号化する段階を含むことを特徴とする、コンピュータで実現される方法を提供する。
【００１６】
１つ以上のプロセッサを含むサーバのシステムであって、前記１つ以上のプロセッサは、アプリケーションのためのファイルが含まれた応用プログラムパッケージを受信するように前記サーバを制御する受信制御部（前記応用プログラムパッケージは、前記アプリケーションのコードがコンパイルされて生成された中間言語（Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｌａｎｇｕａｇｅ：ＩＬ）コードを含むファイルおよび前記中間言語コードによって前記アプリケーションを実行するように電子機器に実行環境を提供するためのライブラリファイルを含む）、前記中間言語コードを含むファイルのうちの少なくとも１つのファイルを暗号化するように前記サーバを制御する暗号化制御部、および前記少なくとも１つの暗号化されたファイルの復号化のためのリカバリーファイルを前記応用プログラムパッケージに追加するように前記サーバを制御するファイル追加制御部（前記リカバリーファイルは、前記電子機器での前記アプリケーションの実行のために前記ライブラリファイル間の呼び出しによって前記少なくとも１つの暗号化されたファイルが伝達される場合に、前記少なくとも１つの暗号化されたファイルを復号化するためのコードを含む）を備えることを特徴とする、システムを提供する。
【００１７】
１つ以上のプロセッサを含む電子機器のシステムであって、前記１つ以上のプロセッサは、アプリケーションのためのファイルが含まれた応用プログラムパッケージを受信するように前記電子機器を制御する受信制御部（前記応用プログラムパッケージは、前記アプリケーションのコードがコンパイルされて生成された中間言語（Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｌａｎｇｕａｇｅ：ＩＬ）コードを含み、暗号化された少なくとも１つのファイルおよび前記中間言語コードによって前記アプリケーションを実行するように電子機器に実行環境を提供するためのライブラリファイルおよび前記暗号化された少なくとも１つのファイルを復号化するためのリカバリーファイルを含む）、および前記アプリケーションの実行過程において、前記リカバリーファイルに含まれたコードの制御にしたがって前記アプリケーションの実行のために前記ライブラリファイル間の呼び出によって前記少なくとも１つの暗号化されたファイルが伝達される場合に、前記少なくとも１つの暗号化されたファイルを復号化するように前記電子機器を制御する復号化制御部を備えることを特徴とする、システムを提供する。
【発明の効果】
【００１８】
アプリケーションの実行コードが含まれたファイルを暗号化しながらも、アプリケーションの駆動時に暗号化されたファイルを安全に復号化して実行することができると同時に、暗号化されたファイルを復号化するための情報が第三者やクライアントに露出されることを防ぐことができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の一実施形態における、ネットワーク環境の例を示した図である。
【図２】本発明の一実施形態における、電子機器およびサーバの内部構成を説明するためのブロック図である。
【図３】本発明の一実施形態における、アプリケーションのコードの保護のための過程の例を示した図である。
【図４】本発明の一実施形態における、アプリケーションのコードの保護のための過程の例を示した図である。
【図５】本発明の一実施形態における、サーバのプロセッサが含むことのできる構成要素の例を示した図である。
【図６】本発明の一実施形態における、サーバが実行することのできる方法の例を示したフローチャートである。
【図７】本発明の一実施形態における、電子機器のプロセッサが含むことのできる構成要素の例を示した図である。
【図８】本発明の一実施形態における、電子機器が実行することのできる方法の例を示したフローチャートである。
【発明を実施するための形態】
【００２０】
以下、実施形態について、添付の図面を参照しながら詳しく説明する。
【００２１】
図１は、本発明の一実施形態における、ネットワーク環境の例を示した図である。図１のネットワーク環境は、複数の電子機器１１０、１２０、１３０、１４０、複数のサーバ１５０、１６０、およびネットワーク１７０を含む例を示している。このような図１は、発明の説明のための一例に過ぎず、電子機器の数やサーバの数が図１のように限定されることはない。
【００２２】
複数の電子機器１１０、１２０、１３０、１４０は、コンピュータシステムによって実現される固定型端末や移動型端末であってよい。複数の電子機器１１０、１２０、１３０、１４０の例としては、スマートフォン、携帯電話、ナビゲーション、コンピュータ、ノート型パンコン、デジタル放送用端末、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔｓ）、ＰＭＰ（Ｐｏｒｔａｂｌｅ  Ｍｕｌｔｉｍｅｄｉａ  Ｐｌａｙｅｒ）、タブレットなどがある。一例として、電子機器１（１１０）は、無線または有線通信方式を利用し、ネットワーク１７０を介して他の電子機器１２０、１３０、１４０および／またはサーバ１５０、１６０と通信してよい。
【００２３】
通信方式が制限されることはなく、ネットワーク１７０が含むことのできる通信網（一例として、移動通信網、有線インターネット、無線インターネット、放送網）を活用する通信方式だけではなく、機器間の近距離無線通信が含まれてもよい。例えば、ネットワーク１７０は、ＰＡＮ（ｐｅｒｓｏｎａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、ＬＡＮ（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、ＣＡＮ（ｃａｍｐｕｓ  ａｒｅａ  ｎｅｔｗｏｒｋ）、ＭＡＮ（ｍｅｔｒｏｐｏｌｉｔａｎ  ａｒｅａ  ｎｅｔｗｏｒｋ）、ＷＡＮ（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）、ＢＢＮ（ｂｒｏａｄｂａｎｄ  ｎｅｔｗｏｒｋ）、インターネットなどのネットワークのうちの１つ以上の任意のネットワークを含んでよい。さらに、ネットワーク１７０は、バスネットワーク、スターネットワーク、リングネットワーク、メッシュネットワーク、スター−バスネットワーク、ツリーまたは階層的ネットワークなどを含むネットワークトポロジのうちの任意の１つ以上を含んでもよいが、これに制限されることはない。
【００２４】
サーバ１５０、１６０それぞれは、電子機器１１０、１２０、１３０、１４０とネットワーク１７０を介して通信して命令、コード、ファイル、コンテンツ、サービスなどを提供する装置または複数の装置によって実現されてよい。
【００２５】
一例として、サーバ１５０は、ネットワーク１７０を介して接続した電子機器１（１１０）にアプリケーションのインストールのためのファイルを提供してよい。この場合、電子機器１（１１０）は、提供されたファイルを利用してアプリケーションをインストールしてよい。また、電子機器１（１１０）が含むオペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：ＯＳ）および少なくとも１つのプログラム（一例として、ブラウザや前記インストールされたアプリケーション）の制御にしたがってサーバ１６０に接続し、サーバ１６０が提供するサービスやコンテンツの提供を受けてもよい。例えば、電子機器１（１１０）がアプリケーションの制御にしたがってネットワーク１７０を介してサービス要求メッセージをサーバ１６０に送信すると、サーバ１６０はサービス要求メッセージに対応するコードを電子機器１（１１０）に送信してよく、電子機器１（１１０）はアプリケーションの制御にしたがってコードに基づく画面を構成して表示することにより、ユーザにコンテンツを提供してよい。
【００２６】
図２は、本発明の一実施形態における、電子機器およびサーバの内部構成を説明するためのブロック図である。図２では、１つの電子機器に対する例として電子機器１（１１０）の内部構成を、１つのサーバに対する例としてサーバ（１５０）の内部構成を説明する。
【００２７】
電子機器１（１１０）とサーバ１５０は、メモリ２１１、２２１、プロセッサ２１２、２２２、通信モジュール２１３、２２３、および入力／出力インタフェース２１４、２２４を含んでよい。メモリ２１１、２２１は、コンピュータで読み取り可能な記録媒体であって、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）、およびディスクドライブのような永久大容量記憶装置を含んでよい。また、メモリ２１１、２２１には、オペレーティングシステムと、少なくとも１つのプログラムコード（一例として、電気機器１（１１０）にインストールされ駆動するブラウザや上述したアプリケーションなどのためのコード）が格納されてよい。このようなソフトウェア構成要素は、ドライブメカニズムを利用してメモリ２１１、２２１とは別のコンピュータで読み取り可能な記録媒体からロードされてよい。このような別のコンピュータで読み取り可能な記録媒体は、フロッピードライブ、ディスク、テープ、ＤＶＤ／ＣＤ−ＲＯＭドライブ、メモリカードなどのコンピュータで読み取り可能な記録媒体を含んでよい。他の実施形態において、ソフトウェア構成要素は、コンピュータで読み取り可能な記録媒体ではない通信モジュール２１３、２２３を利用してメモリ２１１、２２１にロードされてもよい。例えば、少なくとも１つのプログラムは、開発者またはアプリケーションのインストールファイルを配布するファイル配布システム（一例として、上述したサーバ１５０）がネットワーク１７０を介して提供するファイルによってインストールされるプログラム（一例として、上述したアプリケーション）に基づいてメモリ２１１、２２１にロードされてよい。
【００２８】
プロセッサ２１２、２２２は、基本的な算術、ロジック、および入出力演算を実行することにより、コンピュータプログラムの命令を処理するように構成されてよい。命令は、メモリ２１１、２２１または通信モジュール２１３、２２３によって、プロセッサ２１２、２２２に提供されてよい。例えば、プロセッサ２１２、２２２は、メモリ２１１、２２１のような記録装置に格納されたプログラムコードにしたがって受信される命令を実行するように構成されてよい。
【００２９】
通信モジュール２１３、２２３は、ネットワーク１７０を介して電子機器１（１１０）とサーバ１５０とが互いに通信するための機能を提供してもよいし、他の電子機器（一例として、電子機器２（１２０））または他のサーバ（一例として、サーバ１６０）と通信するための機能を提供してもよい。一例として、電子機器１（１１０）のプロセッサ２１２がメモリ２１１のような記録装置に格納されたプログラムコードにしたがって生成した要求（一例として、コンテンツに対するストリーミングサービス要請）が、通信モジュール２１３の制御にしたがいネットワーク１７０を介してサーバ１５０に伝達されてよい。これとは逆に、サーバ１５０のプロセッサ２２２の制御にしたがって提供される制御信号や命令、コンテンツ、ファイルなどが、通信モジュール２２３とネットワーク１７０を経て電子機器１（１１０）の通信モジュール２１３を通じて電子機器１（１１０）に受信されてよい。例えば、モジュール２１３を通じて受信されたサーバ１５０の制御信号や命令などは、プロセッサ２１２やメモリ２１１に伝達されてよく、コンテンツやファイルなどは、電子機器１（１１０）がさらに含むことのできる格納媒体に格納されてよい。
【００３０】
入力／出力インタフェース２１４、２２４は、入力／出力装置２１５とのインタフェースのための手段であってよい。例えば、入力装置は、キーボードまたはマウスなどの装置を、出力装置は、アプリケーションの通信セッションを表示するためのディスプレイのような装置を含んでよい。他の例として、入力／出力インタフェース２１４は、タッチスクリーンのように入力と出力のための機能が１つに統合された装置とのインタフェースのための手段であってよい。より具体的な例として、電子機器１（１１０）のプロセッサ２１２は、メモリ２１１にロードされたコンピュータプログラムの命令を処理するにあたり、サーバ１５０や電子機器２（１２０）が提供するデータを利用して構成されるサービス画面やコンテンツが入力／出力インタフェース２１４を通じてディスプレイに表示されてよい。
【００３１】
また、他の実施形態において、電子機器１（１１０）とサーバ１５０は、図２の構成要素よりもさらに多くの構成要素を含んでもよい。しかし、大部分の従来技術構成要素を明確に図に示す必要はない。例えば、電子機器１（１１０）は、上述した入力／出力装置２１５のうちの少なくとも一部を含むように実現されてもよいし、トランシーバ、ＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）モジュール、カメラ、各種センサなどのような他の構成要素をさらに含んでもよい。
【００３２】
図３および図４は、本発明の一実施形態における、アプリケーションのコードの保護のための過程の例を示した図である。図３は、ユニティ（Ｕｎｉｔｙ）ツールによって開発されたゲームのアンドロイドアプリケーションパッケージ（Ａｎｄｒｏｉｄ  ａｐｐｌｉｃａｔｉｏｎ  ｐａｃｋａｇｅ：ＡＰＫ３００）がサーバ１５０に送信される過程を示している。アンドロイドにおいて、ユニティツールで作成されたアプリケーションのコードは、ＤＬＬ（Ｄｙｎａｍｉｃ  Ｌｉｎｋｉｎｇ  Ｌｉｂｒａｒｙ）にコンパイルされてよい。図３では、ＤＬＬにコンパイルされて生成された４つのＤＬＬファイル（ＵｎｉｔｙＥｎｇｉｎｅ．ｄｌｌ３１０、ＡｓｓｅｍｂｌｙＣＳｈａｒｐ．ｄｌｌ３２０、ＡｓｓｅｍｂｌｙＣＳｈａｒｐ−ｆｉｒｓｔｐａｓｓ．ｄｌｌ３３０、およびＡｓｓｅｍｂｌｙ−ＵｎｉｔｙＳｃｒｉｐｔ−ｆｉｒｓｔｐａｓｓ．ｄｌｌ３４０）を示しており、単一フレームワークの単一実行時間環境でＤＬＬファイル３１０〜３４０に含まれるコードが実行されるように動作する３つのライブラリファイル（ｌｉｂｍａｉｎ．ｓｏ３５０、ｌｉｂｕｎｉｔｙ．ｓｏ３６０、およびｌｉｂｍｏｎｏ．ｓｏ３７０）を示している。ｌｉｂｍａｉｎ．ｓｏ３５０は、ｌｉｂｕｎｉｔｙ．ｓｏ３６０およびｌｉｂｍｏｎｏ．ｓｏ３７０をログして初期化作業を実行させるコードを含んでよく、ユニティツールで配布されてよい。ｌｉｂｕｎｉｔｙ．ｓｏ３６０は、ＤＬＬファイル３１０〜３４０それぞれをログしてゲームコードを実行するコードを含んでよく、ｌｉｂｍｏｎｏ．ｓｏ３７０は、オープンソースドットネットフレームワークによってアンドロイドでＤＬＬファイル３１０〜３４０をロードするようにするコードを含んでよい。例えば、アンドロイドＯＳは、Ｌｉｎｕｘ（登録商標）カーネルを含んでよく、ドットネットフレームワークは、Ｌｉｎｕｘカーネル上で動作する仮想マシンでｌｉｂｕｎｉｔｙ．ｓｏ３６０が含むコードによってＤＬＬファイル３１０〜３４０が含むゲームコードを実行することのできる実行環境を提供してよい。このようなライブラリファイル３５０〜３７０は公知であるため、具体的な説明は省略する。
【００３３】
サーバ１５０は、ＡＰＫ３００を保護するためのシステムを含んでよい。サーバ１５０は、ＡＰＫ３００を受信すると、ＡＰＫ３００が含むＤＬＬファイル３１０〜３４０のうちの少なくとも１つのファイルを暗号化してよい。一般的にＤＬＬファイルは、ドットネットヘッダ（．ＮＥＴ  ｈｅａｄｅｒ）部分とコード部分を含んでよく、サーバ１５０は、ドットネットヘッダ（．ＮＥＴ  ｈｅａｄｅｒ）部分とコード部分のうちの少なくとも１つを暗号化してよい。例えば、ドットネットヘッダ（．ＮＥＴ  ｈｅａｄｅｒ）部分の値をヌル（ｎｕｌｌ）値に置換してしまうと、該当のＤＬＬファイルに対するデコンパイル自体が不可能になり得る。同じように、コード部分を暗号化してしまうと、デコンパイルによって本来のコード（コンパイル前のコード）を得ることができなくなる。したがって、サーバ１５０は、ドットネットヘッダ（．ＮＥＴ  ｈｅａｄｅｒ）部分だけを暗号化するか、コード部分だけを暗号化するか、ドットネットヘッダ（．ＮＥＴ  ｈｅａｄｅｒ）部分とコード部分を暗号化してよい。
【００３４】
図４は、図３でＡｓｓｅｍｂｌｙＣＳｈａｒｐ．ｄｌｌ３２０およびＡｓｓｅｍｂｌｙ−ＵｎｉｔｙＳｃｒｉｐｔ−ｆｉｒｓｔｐａｓｓ．ｄｌｌ３４０が暗号化されたことで、暗号化されたＡｓｓｅｍｂｌｙＣＳｈａｒｐ．ｄｌｌ４１０および暗号化されたＡｓｓｅｍｂｌｙ−ＵｎｉｔｙＳｃｒｉｐｔ−ｆｉｒｓｔｐａｓｓ．ｄｌｌ４２０を含むＡＰＫ４００が生成された例を示している。
【００３５】
上述したように、ＤＬＬファイル自体が暗号化されると、ＡＰＫ４００を受信したクライアント（一例として、電子機器１（１１０））は、ＤＬＬファイルでゲームコードを読み取ることができないため、アプリケーションを実行することができなくなる。したがって、サーバ１５０は、暗号化されたＤＬＬファイルを復号化するためのライブラリファイルであるリカバリーファイル（図４のｒｅｃｏｖｅｒｙ．ｓｏ４４０）をＡＰＫ４００に追加してよい。また、アプリケーションの実行時にｒｅｃｏｖｅｒｙ．ｓｏ４４０がログされるようにｌｉｂｍａｉｎ．ｓｏ３５０にリカバリーファイル４４０をロードすることのできるコード（図４のｌｏａｄｒｅｃｏｖｅｒｙ．ｓｏｃｏｄｅ４３１）を追加し、新たなライブラリファイル（図４のｌｉｂｍａｉｎ．ｓｏ４３０）を生成してよい。図４に示すように、ＡＰＫ４００は、既存のライブラリファイルｌｉｂｍａｉｎ．ｓｏ３５０の代りに新たなライブラリファイルｌｉｂｍａｉｎ．ｓｏ４３０を含んでよい。
【００３６】
少なくとも１つのファイルが暗号化されて保護されたＡＰＫ４００は、サーバ１５０から電子機器１（１１０）に直ぐに送信されてもよいし、別のファイル配布システムを経て電子機器１（１１０）に送信されてもよい。
【００３７】
電子機器１（１１０）では、ＡＰＫ４００が含むコードの制御にしたがってアプリケーションを実行してよい。以下では、説明の便宜のために、ファイルが特定の過程を実行する例について説明するが、実質的には、該当のファイルが含むコードの制御にしたがって電子機器１（１１０）のプロセッサ２１２が該当の過程を実行することであってよい。
【００３８】
アプリケーションの実行が要請されると、ｌｉｂｍａｉｎ．ｓｏ４３０は、ｌｉｂｕｎｉｔｙ．ｓｏ３６０およびｌｉｂｍｏｎｏ．ｓｏ３７０をログして初期化作業を実行してよい。また、ｌｉｂｍａｉｎ．ｓｏ４３０は、ｌｉｂｍａｉｎ．ｓｏ４３０に含まれたｌｏａｄｒｅｃｏｖｅｒｙ．ｓｏｃｏｄｅ４３１を利用してｒｅｃｏｖｅｒｙ．ｓｏ４４０をログして初期化作業を実行してよい。
【００３９】
ｒｅｃｏｖｅｒｙ．ｓｏ４４０は、ｌｉｂｕｎｉｔｙ．ｓｏ３６０をフッキング（ｈｏｏｋｉｎｇ）してｌｉｂｍｏｎｏ．ｓｏ３７０がＤＬＬファイル３１０、４１０、３３０、４２０をロードするときに、暗号化されたＤＬＬファイル４１０、４２０のフルバッファ（ｆｕｌｌ  ｂｕｆｆｅｒ）を制御して暗号化されたＤＬＬファイル４１０、４２０を復号化してよい。例えば、ｌｉｂｕｎｉｔｙ．ｓｏ３６０は、ＤＬＬファイル３１０、４１０、３３０、４２０のフルバッファを読み取り、フルバッファを因子としてｌｉｂｍｏｎｏ．ｓｏ３７０のＡＰＩを呼び出してＤＬＬを単一フレームワークにロードさせてよい。一般的に、ＤＬＬファイルは、ウィンドウＰＥ（Ｐｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ）ファイルフォーマットを有しており、上述したように内部的にドットネットヘッダを含んでいる。このようなＤＬファイルは、オープンソースであるドットネットフレームワーク（上述した単一フレームワーク）によって実行されてよく、ＰＥ（Ｐｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ）ファイルフォーマットのパース（ｐａｒｓｉｎｇ）とドットネットのパース過程を経るようになる。このような過程は、ｌｉｂｕｎｉｔｙ．ｓｏ３６０からｌｉｂｍｏｎｏ．ｓｏ３７０のＡＰＩを呼び出することで起こるようになる。このために、ｌｉｂｕｎｉｔｙ．ｓｏ３６０はＩＡＴ（Ｉｍｐｏｒｔ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅ）を含んでよく、ｒｅｃｏｖｅｒｙ．ｓｏ４４０は、ｌｉｂｕｎｉｔｙ．ｓｏ３６０のＩＡＴをフッキングしてｌｉｂｕｎｉｔｙ．ｓｏ３６０が暗号化されたＤＬＬファイル４１０、４２０のロードのためにｌｉｂｍｏｎｏ．ｓｏ３７０のＡＰＩコールを確認してよい。また、ｒｅｃｏｖｅｒｙ．ｓｏ４４０は、フルバッファからドットネットヘッダ部分とコード部分を探し出して暗号化された部分を復号化してよい。例えば、ＤＬＬファイルのドットネットヘッダは、特定値から始まる。したがって、ｒｅｃｏｖｅｒｙ．ｓｏ４４０は、ＤＬＬファイルをドットネットフレームワークにロードするときに、ドットネットヘッダが予め設定されている値から始まらない場合には、該当のＤＬＬファイルが暗号化されていると判断し、復号化を実行してよい。
【００４０】
したがって、アプリケーションの実行コードが含まれたファイルを暗号化しながらも、アプリケーションの駆動時に暗号化されたファイルを安全に復号化して実行することが可能となる。特に、復号化のための情報が、ＤＬＬとは異なる低水準言語で作成されたライブラリファイルの形態で提供されるため、クライアントや第三者に復号化のための情報が露出されることを防ぐことができる。
【００４１】
図５は、本発明の一実施形態における、サーバのプロセッサが含むことのできる構成要素の例を示した図であり、図６は、本発明の一実施形態における、サーバが実行することのできる方法の例を示したフローチャートである。図５に示すように、サーバ１５０のプロセッサ２２２は、受信制御部５１０、暗号化制御部５２０、およびファイル追加制御部５３０を備えてよく、実施形態によって選択的に送信制御部５４０をさらに備えてもよい。このようなプロセッサ２２２の構成要素は、図６の方法が含む段階６１０〜６４０を実行するようにサーバ１５０を制御してよく、このような制御のためにメモリ２２１が含むオペレーティングシステムと少なくとも１つのプログラムコードに基づいて動作するように実現されてよい。段階６４０は、実施形態によって選択的に実行されてよい。
【００４２】
段階６１０で、サーバ１５０は、アプリケーションのためのファイルが含まれた応用プログラムパッケージを受信してよい。ここで、応用プログラムパッケージは、アプリケーションのコードがコンパイルされて生成された中間言語（Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｌａｎｇｕａｇｅ：ＩＬ）コードを含むファイルおよび中間言語コードによってアプリケーションを実行するように電子機器（一例として、電子機器１（１１０））に実行環境を提供するためのライブラリファイルを含んでよい。例えば、応用プログラムパッケージは、図３の実施形態で説明したＡＰＫ３００に対応してよく、中間言語コードを含むファイルは、ＤＬＬファイル３１０〜３４０に対応してよい。また、ライブラリファイルは、図３のライブラリファイル３５０〜３７０に対応してよい。受信制御部５１０は、段階６１０を実行するようにサーバ１５０を制御してよい。
【００４３】
このとき、応用プログラムパッケージに含まれたファイルのうちの暗号化するためのファイルは、サーバ１５０で選択されてもよいが、開発者によって選択されてもよい。この場合、サーバ１５０は、段階６１０で、中間言語コードを含むファイルのうちの暗号化するためのファイルに関する情報をさらに受信してよい。例えば、サーバ１５０は、応用プログラムパッケージをアップロードしようとする開発者に応用プログラムパッケージのアップロードのための第１ユーザインタフェースおよび暗号化するファイルを選択するための第２ユーザインタフェースが含まれたウェプページを提供してよい。このとき、第１ユーザインタフェースを通じて応用プログラムパッケージをアップロードした開発者が第２ユーザインタフェースを通じて暗号化するファイルを選択した場合、選択されたファイルに関する情報がサーバ１５０にさらに伝達されてよい。
【００４４】
このようなサーバ１５０は、既に開発されたアプリケーションのための応用プログラムパッケージを受信してこれを保護するためにＤＬＬファイルを暗号化するシステムであってよい。このとき、サーバ１５０は、アプリケーションの開発者のシステムであっても、開発者から応用プログラムパッケージを受信してＤＬＬファイルを暗号化する第三者のシステムであっても、開発者の応用プログラムパッケージを受信してユーザに配布するファイル配布システムであってもよい。
【００４５】
段階６２０で、サーバ１５０は、中間言語コードを含むファイルのうちの少なくとも１つのファイルを暗号化してよい。暗号化制御部５２０は、段階６２０を実行するようにサーバ１５０を制御してよい。中間言語コードを含むファイルそれぞれは、実行環境のためのヘッダ部分およびアプリケーションのためのコード部分を含んでよい。この場合、サーバ１５０は、段階６２０で、ヘッダ部分およびコード部分のうちの少なくとも１つを暗号化してよい。上述したように、ヘッダ部分を暗号化する場合には中間言語コードに対するデコンパイル自体が不可能となり、コード部分を暗号化する場合にはデコンパイルによって本来のソースを確認することができなくなるため、ヘッダ部分やコード部分のうちの１つだけを暗号化しても、中間言語コードを含むファイルを保護することができる。また、ヘッダ部分とコード部分の両方を暗号化してもよい。ヘッダ部分を暗号化する場合、サーバ１５０は、ヘッダ部分が含む情報をヌル（ｎｕｌｌ）値に変更して暗号化してよい。
【００４６】
段階６３０で、サーバ１５０は、少なくとも１つの暗号化されたファイルの復号化のためのリカバリーファイルを応用プログラムパッケージに追加してよい。ここで、リカバリーファイルは、電子機器でのアプリケーションの実行のためにライブラリファイル間の呼び出しによって少なくとも１つの暗号化されたファイルが伝達される場合に、少なくとも１つの暗号化されたファイルを復号化するためのコードを含んでよい。ファイル追加制御部５３０は、段階６３０を実行するようにサーバ１５０を制御してよい。
【００４７】
上述したように、少なくとも１つの暗号化されたファイルは、ライブラリファイルがアプリケーションの実行環境（一例として、ドットネットフレームワーク、単一フレームワーク、またはＣＬＲ（Ｃｏｍｍｏｎ  Ｌａｎｇｕａｇｅ  Ｒｕｎｔｉｍｅ））に中間言語コードを含むファイルをロードするため、ライブラリファイル間の呼び出しによって少なくとも１つの暗号化されたファイルが伝達される場合のように、アプリケーションの実行時にリカバリーファイルが含むコードに基づいて電子機器が復号化を実行できるようにすることにより、中間言語コードのデコンパイルを防ぎながらも復号化のための情報が露出されないようにすることができる。
【００４８】
このために、ライブラリファイルは、中間言語コードを含むファイルを呼び込むためのコードを含む第１ライブラリファイルおよび第１ライブラリファイルに対するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）コールによって中間言語コードを含むファイルのフルバッファ（ｆｕｌｌ  ｂｕｆｆｅｒ）を読み取ってパースするためのコードを含む第２ライブラリファイルを含んでよい。また、リカバリーファイルは、第２ライブラリファイルが含むコードによって第１ライブラリファイルがＡＰＩコールされることによって読み取られる少なくとも１つの暗号化されたファイルに対するフルバッファ（ｆｕｌｌ  ｂｕｆｆｅｒ）を復号化し、少なくとも１つの暗号化されたファイルを復号化するためのコードを含んでよい。例えば、第１ライブラリファイルは図３および図４を参照しながら説明したｌｉｂｍｏｎｏ．ｓｏ３７０に対応してよく、第２ライブラリファイルはｌｉｂｕｎｉｔｙ．ｓｏ３６０に対応してよく、リカバリーファイルはｒｅｃｏｖｅｒｙ．ｓｏ４４０に対応してよい。
【００４９】
より具体的に説明すると、リカバリーファイルは、第１ライブラリファイルのＡＰＩに関する情報を含む第２ライブラリファイルのＩＡＴ（Ｉｍｐｏｒｔ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅ）をフッキング（ｈｏｏｋｉｎｇ）して第２ライブラリファイルが含むコードによるＡＰＩコールを確認するためのコードを含んでよい。ＩＡＴは、第２ライブラリファイルが中間言語コードを含むファイルを読み取ることによって生成されてよい。
【００５０】
段階６４０で、サーバ１５０は、ネットワークを介した電子機器からの要請に応じ、リカバリーファイルが追加された応用プログラムパッケージを電子機器に送信してよい。送信制御部５４０は、段階６４０を実行するようにサーバ１５０を制御してよい。電子機器に送信された応用プログラムパッケージは、電子機器にインストールされてよく、アプリケーションの駆動（実行）時には上述した復号化過程が電子機器で行われてよい。
【００５１】
図７は、本発明の一実施形態における、電子機器のプロセッサが含むことのできる構成要素の例を示した図であり、図８は、本発明の一実施形態における、電子機器が実行することのできる方法の例を示したフローチャートである。図７に示すように、電子機器１（１１０）のプロセッサ２１２は、受信制御部７１０および復号化制御部７２０を備えてよい。このようなプロセッサ２１２の構成要素は、図８の方法が含む段階８１０および８２０を実行するように電子機器１（１１０）を制御してよく、このような制御のためにメモリ２１１が含むオペレーティングシステムと少なくとも１つのプログラムコードに基づいて動作するように実現されてよい。このとき、少なくとも１つのプログラムコードは、段階８２０の処理のために電子機器１（１１０）が段階８１０で受信する応用プログラムパッケージに含まれたコードを含んでよい。
【００５２】
段階８１０で、子機器１（１１０）は、プリケーションのためのファイルが含まれた応用プログラムパッケージを受信してよい。受信制御部７１０は、段階８１０を実行するように電子機器１（１１０）を制御してよい。このとき、応用プログラムパッケージには、アプリケーションのコードがコンパイルされて生成された中間言語（Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｌａｎｇｕａｇｅ：ＩＬ）コードを含み、暗号化された少なくとも１つのファイルおよび中間言語コードによってアプリケーションを実行するように電子機器に実行環境を提供するためのライブラリファイルおよび暗号化された少なくとも１つのファイルを復号化するためのリカバリーファイルが含まれてよい。
【００５３】
段階８２０で、電子機器１（１１０）は、アプリケーションの実行過程において、リカバリーファイルに含まれたコードの制御にしたがってアプリケーションの実行のためにライブラリファイル間の呼び出しによって少なくとも１つの暗号化されたファイルが伝達される場合に、少なくとも１つの暗号化されたファイルを復号化してよい。
【００５４】
上述したように、ライブラリファイルは、中間言語コードを含むファイルを読み込むためのコードを含む第１ライブラリファイルおよび第１ライブラリファイルに対するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）呼び出しによって中間言語コードを含むファイルのフルバッファ（ｆｕｌｌ  ｂｕｆｆｅｒ）を読み取ってパースするためのコードを含む第２ライブラリファイルを含んでよい。このとき、電子機器１（１１０）は、段階８２０で、第２ライブラリファイルが含むコードに基づいて第１ライブラリファイルがＡＰＩコールされることによって読み取られる少なくとも１つの暗号化されたファイルに対するフルバッファ（ｆｕｌｌ  ｂｕｆｆｅｒ）をリカバリーファイルが含むコードの制御にしたがって復号化し、少なくとも１つの暗号化されたファイルを復号化してよい。言い換えれば、アプリケーションの実行過程において、第２ライブラリファイルに基づいて第１ライブラリファイルのＡＰＩを呼び出すにことよって中間言語コードを含むファイルが実行環境にロードされてよく、このとき、電子機器１（１１０）は、リカバリーファイルが含むコードの制御にしたがって実行環境にロードされる少なくとも１つの暗号化されたファイルに対するフルバッファを復号化し、暗号化されたファイルを復号化してよい。少なくとも１つの暗号化されたファイルは、ヘッダ部分とコード部分のうちの少なくとも１つが暗号化されたファイルであることは上述したとおりであり、電子機器１（１１０）は、リカバリーファイルが含むコードの制御にしたがって暗号化された部分を復号化してよい。
【００５５】
また、電子機器１（１１０）は、リカバリーファイルが含むコードの制御にしたがって第１ライブラリファイルに対するＡＰＩに関する情報を含む第２ライブラリファイルのＩＡＴ（Ｉｍｐｏｒｔ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅ）をフッキング（ｈｏｏｋｉｎｇ）し、第２ライブラリファイルが含むコードによるＡＰＩコールを確認してよい。
【００５６】
また、電子機器１（１１０）は、少なくとも１つの暗号化されたファイルのヘッダ部分が予め設定された値で始まるかによって少なくとも１つの暗号化されたファイルの暗号化の可否を確認してもよい。上述したように、ＤＬＬファイルのようなファイルのヘッダは予め設定された値で始まることから、ヘッダが予め設定された値で始まるかによって該当のファイルの暗号化の可否が確認されてよい。
【００５７】
このように、本発明の実施形態によると、アプリケーションの実行コードが含まれたファイルを暗号化しながらも、アプリケーションの駆動時に暗号化されたファイルを安全に復号化して実行することができると同時に、暗号化されたファイルを復号化するための情報が第三者やクライアントに露出されることを防ぐことができる。
【００５８】
上述した装置は、ハードウェア構成要素、ソフトウェア構成要素、および／またはハードウェア構成要素とソフトウェア構成要素との組み合わせによって実現されてよい。例えば、実施形態で説明された装置および構成要素は、例えば、プロセッサ、コントローラ、ＡＬＵ（ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ）、デジタル信号プロセッサ、マイクロコンピュータ、ＦＰＧＡ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）、ＰＬＵ（ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ｕｎｉｔ）、マイクロプロセッサ、または命令を実行して応答することができる様々な装置のように、１つ以上の汎用コンピュータまたは特殊目的コンピュータを利用して実現されてよい。処理装置は、オペレーティングシステム（ＯＳ）および前記ＯＳ上で実行される１つ以上のソフトウェアアプリケーションを実行してよい。また、処理装置は、ソフトウェアの実行に応答し、データにアクセスし、データを格納、操作、処理、および生成してもよい。理解の便宜のために、１つの処理装置が使用されるとして説明される場合もあるが、当業者は、処理装置が複数個の処理要素および／または複数種類の処理要素を含んでもよいことが理解できるであろう。例えば、処理装置は、複数個のプロセッサまたは１つのプロセッサおよび１つのコントローラを含んでよい。また、並列プロセッサのような、他の処理構成も可能である。
【００５９】
ソフトウェアは、コンピュータプログラム、コード、命令、またはこれらのうちの１つ以上の組み合わせを含んでもよく、思うままに動作するように処理装置を構成したり、独立的または集合的に処理装置に命令したりしてよい。ソフトウェアおよび／またはデータは、処理装置に基づいて解釈されたり、処理装置に命令またはデータを提供したりするために、いかなる種類の機械、コンポーネント、物理装置、仮想装置、コンピュータ格納媒体または装置、または伝送される信号波に永久的または一時的に具現化されてよい。ソフトウェアは、ネットワークによって接続されたコンピュータシステム上に分散され、分散された状態で格納されても実行されてもよい。ソフトウェアおよびデータは、１つ以上のコンピュータで読み取り可能な記録媒体に格納されてよい。
【００６０】
実施形態に係る方法は、多様なコンピュータ手段によって実行可能なプログラム命令の形態で実現されてコンピュータで読み取り可能な媒体に記録されてよい。前記コンピュータで読み取り可能な媒体は、プログラム命令、データファイル、データ構造などを単独でまたは組み合わせて含んでよい。前記媒体に記録されるプログラム命令は、実施形態のために特別に設計されて構成されたものであってもよいし、コンピュータソフトウェア当業者に公知な使用可能なものであってもよい。コンピュータで読み取り可能な記録媒体の例としては、ハードディスク、フロッピー（登録商標）ディスク、および磁気テープのような磁気媒体、ＣＤ−ＲＯＭ、ＤＶＤのような光媒体、フロプティカルディスクのような光磁気媒体、およびＲＯＭ、ＲＡＭ、フラッシュメモリなどのようなプログラム命令を格納して実行するように特別に構成されたハードウェア装置が含まれる。プログラム命令の例は、コンパイラによって生成されるもののような機械語コードだけではなく、インタプリタなどを使用してコンピュータによって実行される高級言語コードを含む。上述したハードウェア装置は、実施形態の動作を実行するために１つ以上のソフトウェアモジュールとして動作するように構成されてもよく、その逆も同じである。
【００６１】
以上のように、実施形態を、限定された実施形態と図面に基づいて説明したが、当業者であれば、上述した記載から多様な修正および変形が可能であろう。例えば、説明された技術が、説明された方法とは異なる順序で実行されたり、かつ／あるいは、説明されたシステム、構造、装置、回路などの構成要素が、説明された方法とは異なる形態で結合されたりまたは組み合わされたり、他の構成要素または均等物によって対置されたり置換されたとしても、適切な結果を達成することができる。
【００６２】
したがって、異なる実施形態であっても、特許請求の範囲と均等なものであれば、添付される特許請求の範囲に属する。
【符号の説明】
【００６３】
２２２：プロセッサ
５１０：受信制御部
５２０：暗号化制御部
５３０：ファイル追加制御部
５４０：送信制御部
【図１】
2018527664.tif 000003
【図２】
2018527664.tif 000004
【図３】
2018527664.tif 000005
【図４】
2018527664.tif 000006
【図５】
2018527664.tif 000007
【図６】
2018527664.tif 000008
【図７】
2018527664.tif 000009
【図８】
2018527664.tif 000010
【国際調査報告】
2018527664.tif 000011
2018527664.tif 000012
2018527664.tif 000013
2018527664.tif 000014