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