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