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