(57)【要約】      （修正有）【課題】共有オブジェクトファイルをハッキングから保護する保安提供装置及び方法を提供する。【解決手段】保安提供装置は、実行パッケージから共有オブジェクトファイルを抽出するオブジェクトファイル抽出部４１０と、共有オブジェクトファイルの初期化関数関連セクションの少なくとも一つのタグの値を別途貯蔵して、共有オブジェクトファイルの少なくとも一つのタグの値を０で埋めて保安共有オブジェクトファイルを提供するオブジェクト管理部４３０と、オブジェクト管理部で別途貯蔵した少なくとも一つのタグの値を含む保安モジュールファイルを生成する保安モジュール生成部４４０と、実行エンジンライブラリーと、オブジェクト管理部で提供された保安共有オブジェクトファイルと、保安モジュール生成部で提供された保安モジュールファイルとを含んで保安実行パッケージを生成するパッケージ組み合わせ部４５０と、を含む。【選択図】図４
2019096300.tif 000002
【特許請求の範囲】
【請求項１】
共有オブジェクトファイルと実行エンジンライブラリーとを組み合わせて生成された実行パッケージが貯蔵されている保安提供装置であって、
前記実行パッケージから前記共有オブジェクトファイルを抽出するオブジェクトファイル抽出部と、
前記共有オブジェクトファイルの初期化関数関連セクションの少なくとも一つのタグの値を別途貯蔵して、前記共有オブジェクトファイルの前記少なくとも一つのタグの値を０で埋めて保安共有オブジェクトファイルを提供するオブジェクト管理部と、
前記オブジェクト管理部で別途貯蔵した前記少なくとも一つのタグの値を含む保安モジュールファイルを生成する保安モジュール生成部と、
前記実行エンジンライブラリーと、前記オブジェクト管理部で提供された前記保安共有オブジェクトファイルと、前記保安モジュール生成部で提供された保安モジュールファイルとを含んで保安実行パッケージを生成するパッケージ組み合わせ部と、
を含むことを特徴とする、保安提供装置。
【請求項２】
前記共有オブジェクトファイルの実行コードセクションのイメージを暗号化アルゴリズムで暗号化して保安実行コードファイルを生成するコード暗号化部をさらに含み、
前記パッケージ組み合わせ部は、前記コード暗号化部で生成された保安実行コードファイルをさらに含んで、前記保安実行パッケージを生成することを特徴とする、請求項１に記載の保安提供装置。
【請求項３】
前記コード暗号化部は、前記暗号化アルゴリズムで暗号化する前に、前記共有オブジェクトファイルの前記実行コードセクションのイメージを圧縮プログラムで圧縮することを特徴とする、請求項２に記載の保安提供装置。
【請求項４】
前記暗号化アルゴリズムは、ＡＥＳ(Advanced Encryption Standard)アルゴリズムであることを特徴とする、請求項３に記載の保安提供装置。
【請求項５】
前記コード暗号化部は、前記共有オブジェクトファイルの前記実行コードセクションのイメージを別途のファイルに分離した後、前記暗号化アルゴリズムで暗号化することを特徴とする、請求項２乃至４のいずれかに記載の保安提供装置。
【請求項６】
前記共有オブジェクトファイルの初期化関数関連セクションは、動的セクションであり、前記共有オブジェクトファイルの実行コードセクションは、テキストセクションであることを特徴とする、請求項２乃至４のいずれかに記載の保安提供装置。
【請求項７】
運営体系を通じて共有オブジェクトファイルに対して動的ローダーが呼び出されると、前記動的ローダーの動作によって前記共有オブジェクトファイルをメモリーにロードして、前記ロードされた共有オブジェクトファイルのベースアドレスを取り戻す動的ローダー部と、
別途貯蔵された前記共有オブジェクトファイルの初期化関数関連セクションの少なくとも一つのタグの値を読み取って前記ベースアドレスに加え、前記ベースアドレスにタグの値を加えたアドレスに貯蔵されている初期化関数アドレスを持ってきて、該当初期化関数を呼び出すオブジェクト管理部とを含むことを特徴とする、保安実行装置。
【請求項８】
前記オブジェクト管理部は、前記共有オブジェクトファイルの前記初期化関数関連セクションの動的テーブル初期化アレイ大きさの数だけ前記ベースアドレスにタグの値を加えたアドレスに貯蔵されている初期化関数アドレスからアレイの値を順に持ってきて、それぞれ初期化関数を呼び出すことを特徴とする、請求項７に記載の保安実行装置。
【請求項９】
前記共有オブジェクトファイルの実行コードセクションのイメージを暗号化アルゴリズムで暗号化して提供された保安実行コードファイルを復号化するコード復号化部をさらに含むことを特徴とする、請求項７または８に記載の保安実行装置。
【請求項１０】
前記コード復号化部は、別途のファイルで貯蔵された前記保安実行コードファイルを復号化して、前記メモリーにロードされた前記共有オブジェクトファイルの前記実行コードセクションの位置に復元させることをさらに含むことを特徴とする、請求項９に記載の保安実行装置。
【請求項１１】
共有オブジェクトファイルと実行エンジンライブラリーとを組み合わせて生成された実行パッケージを貯蔵する段階と、
前記実行パッケージから前記共有オブジェクトファイルを抽出する段階と、
前記共有オブジェクトファイルの初期化関数関連セクションの少なくとも一つのタグの値を別途貯蔵して、前記共有オブジェクトファイルの前記少なくとも一つのタグの値を０で埋めて保安共有オブジェクトファイルを提供する段階と、
前記保安共有オブジェクトファイルを提供する段階で別途貯蔵した前記少なくとも一つのタグの値を含む保安モジュールファイルを生成して提供する段階と、
前記実行エンジンライブラリーと、前記保安共有オブジェクトファイルを提供する段階で提供された前記保安共有オブジェクトファイルと、前記保安モジュールファイルを生成する段階で提供された保安モジュールファイルとを含んで保安実行パッケージを生成する段階と、を含むことを特徴とする、保安提供方法。
【請求項１２】
前記共有オブジェクトファイルの実行コードセクションのイメージを暗号化アルゴリズムで暗号化して保安実行コードファイルを生成する段階をさらに含み、
前記保安実行パッケージを生成する段階は、前記保安実行コードファイルを生成する段階で生成された保安実行コードファイルをさらに含んで、前記保安実行パッケージを生成することを特徴とする、請求項１１に記載の保安提供装置。
【請求項１３】
前記保安実行コードファイルを生成する段階は、前記共有オブジェクトファイルの前記実行コードセクションのイメージを別途のファイルに分離した後、前記暗号化アルゴリズムで暗号化することを特徴とする、請求項１２に記載の保安提供方法。
【請求項１４】
運営体系を通じて共有オブジェクトファイルに対して動的ローダーを呼び出す段階と、
前記動的ローダーの動作により、前記共有オブジェクトファイルをメモリーにロードして、前記ロードされた共有オブジェクトファイルのベースアドレスを取り戻す段階と、
別途貯蔵された前記共有オブジェクトファイルの初期化関数関連セクションの少なくとも一つのタグの値を読み取って、前記ベースアドレスに加える段階と、
前記ベースアドレスにタグの値を加えたアドレスに貯蔵されている初期化関数アドレスを持ってきて、該当初期化関数を呼び出す段階と、を含むことを特徴とする、保安実行方法。
【請求項１５】
前記該当初期化関数を呼び出す段階は、前記共有オブジェクトファイルの前記初期化関数関連セクションの動的テーブル初期化アレイ大きさの数だけ前記ベースアドレスにタグの値を加えたアドレスに貯蔵されている初期化関数アドレスからアレイの値を順に持ってきて、それぞれ初期化関数を呼び出すことを特徴とする、請求項１４に記載の保安実行方法。
【請求項１６】
前記共有オブジェクトファイルの実行コードセクションのイメージを暗号化アルゴリズムで暗号化して提供された保安実行コードファイルを復号化する段階をさらに含むことを特徴とする、請求項１４または１５に記載の保安実行方法。
【請求項１７】
前記保安実行コードファイルを復号化する段階は、別途のファイルで貯蔵された前記保安実行コードファイルを復号化して、前記メモリーにロードされた前記共有オブジェクトファイルの前記実行コードセクションの位置に復元させることをさらに含むことを特徴とする、請求項１６に記載の保安実行方法。
【請求項１８】
前記共有オブジェクトファイルの前記初期化関数関連セクションの少なくとも一つのタグのオフセット値が指すオブジェクトファイル領域の位置に貯蔵されている初期化関数アドレスをゴミ値で埋める段階をさらに含むことを特徴とする、請求項１４または１５に記載の保安実行方法。
【請求項１９】
前記共有オブジェクトファイルのＥＬＦヘッダー領域をゴミ値で埋める段階をさらに含むことを特徴とする、請求項１８に記載の保安実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有オブジェクトのコード保護のための保安提供装置と方法、及び保安実行装置と方法に関し、特に、静的解析から共有オブジェクトの初期化関数の実行コード保護のための保安提供装置と方法、及び保安実行装置と方法に関する。
【背景技術】
【０００２】
ライブラリーは、複数のアプリケーションプログラムが一つのライブラリーコードを共有して使用するかどうかによって、静的ライブラリー(static library)と共有ライブラリー(shared library)に分けられる。静的ライブラリー(通常＊.ａ形態のファイル)は、リンキング段階でライブラリーコードをアプリケーションプログラムに併合して使用するライブラリーである。一方、共有ライブラリー(通常＊.ｓｏ形態のファイル)は、ランタイムにライブラリーコードインスタンスがアプリケーションプログラム間で共有されて使用できるように生成されたライブラリーである。
【０００３】
共有ライブラリーを利用するアプリケーションプログラムでは、リンキング段階でライブラリーコードのコピーが起こらない。共有ライブラリーを使用すると、ライブラリーのコードを共有することができ、メモリーのサイズを大幅に減らすことができる。
【０００４】
既存の運営体制、例えばウィンドウズ（登録商標）やリナックス（登録商標）では、共有ライブラリーの使用が日常的であり、最近は、携帯電話をはじめとした小型携帯機器の性能が向上し、このようなコンピューティング環境でも、複数のアプリケーションプログラムを同時にメモリーにロードして実行することができるようになった。このように、メモリーの制限されたコンピューティング環境では、共有ライブラリー技術がさらに求められている。
【０００５】
共有オブジェクト(Shared Object)は、リナックスベースの運営体制で使用される共有ライブラリー(shared object)であって、略字のｓｏは、実際に共有オブジェクトの拡張子として使用される。実行ファイルは、ランタイムに共有オブジェクトファイルをメモリーにロードして使用する。共有オブジェクトファイルは、単独で実行できないが、一つの共有オブジェクトファイルが他の共有オブジェクトファイルをロードして使用することは可能である。
【０００６】
このような共有オブジェクトは、リバースエンジニアリングによる逆分析などによって重要な実行コードが露出されてしまう虞があるだけでなく、さらには、ハッカーが勝手にコードを修正できるという問題がある。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上述の問題点を解決するために、本発明は、共有オブジェクトファイルに保安を提供し、共有オブジェクトファイルをハッキングから保護する保安提供装置及び方法を提供することを目的とする。
【０００８】
本発明は、共有オブジェクトファイルに保安を実行して、共有オブジェクトファイルをハッキングから保護する保安実行装置及び方法を提供することを目的とする。
【０００９】
本発明は、特に、静的分析で共有オブジェクトの実行コードを保護して、共有オブジェクトファイルをハッキングから保護する保安提供装置及び方法を提供することを目的とする。
【００１０】
本発明は、特に、静的分析から共有オブジェクトの実行コードに保安を実行して、共有オブジェクトファイルをハッキングから保護する保安実行装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述の目的を達成するために、本発明の一実施例による共有オブジェクトファイルと実行エンジンライブラリーとを組み合わせて生成された実行パッケージが貯蔵されている保安提供装置は、前記実行パッケージから前記共有オブジェクトファイルを抽出するオブジェクトファイル抽出部と、前記共有オブジェクトファイルの初期化関数関連セクションの少なくとも一つのタグの値を別途貯蔵して、前記共有オブジェクトファイルの前記少なくとも一つのタグの値を０で埋めて保安共有オブジェクトファイルを提供するオブジェクト管理部と、前記オブジェクト管理部で別途貯蔵した前記少なくとも一つのタグの値を含む保安モジュールファイルを生成する保安モジュール生成部と、前記実行エンジンライブラリーと、前記オブジェクト管理部で提供された前記保安共有オブジェクトファイルと、前記保安モジュール生成部で提供された保安モジュールファイルとを含んで保安実行パッケージを生成するパッケージ組み合わせ部と、を提供する。
【００１２】
前記保安提供装置は、前記共有オブジェクトファイルの実行コードセクションのイメージを暗号化アルゴリズムで暗号化して保安実行コードファイルを生成するコード暗号化部をさらに含み、前記パッケージ組み合わせ部は、前記コード暗号化部で生成された保安実行コードファイルをさらに含んで、前記保安実行パッケージを生成することができる。
【００１３】
前記コード暗号化部は、前記暗号化アルゴリズムで暗号化する前に、前記共有オブジェクトファイルの前記実行コードセクションのイメージを圧縮プログラムで圧縮することができる。
【００１４】
前記暗号化アルゴリズムは、ＡＥＳ(Advanced Encryption Standard)アルゴリズムである。
【００１５】
前記コード暗号化部は、前記共有オブジェクトファイルの前記実行コードセクションのイメージを別途のファイルに分離した後、前記暗号化アルゴリズムで暗号化することができる。
【００１６】
前記共有オブジェクトファイルの初期化関数関連セクションは、動的セクションであり、前記共有オブジェクトファイルの実行コードセクションは、テキストセクションである。
【００１７】
本発明のまた他の実施例による保安実行装置は、運営体系を通じて共有オブジェクトファイルに対して動的ローダーが呼び出されると、前記動的ローダーの動作によって前記共有オブジェクトファイルをメモリーにロードして、前記ロードされた共有オブジェクトファイルのベースアドレスを取り戻す動的ローダー部と、別途貯蔵された前記共有オブジェクトファイルの初期化関数関連セクションの少なくとも一つのタグの値を読み取って前記ベースアドレスに加え、前記ベースアドレスにタグの値を加えたアドレスに貯蔵されている初期化関数アドレスを持ってきて、該当初期化関数を呼び出すオブジェクト管理部とを提供することで、上述の目的を達成することができる。
【００１８】
前記オブジェクト管理部は、前記共有オブジェクトファイルの前記初期化関数関連セクションの動的テーブル初期化アレイ大きさの数だけ前記ベースアドレスにタグの値を加えたアドレスに貯蔵されている初期化関数アドレスからアレイの値を順に持ってきて、それぞれ初期化関数を呼び出すことができる。
【００１９】
前記保安実行装置は、前記共有オブジェクトファイルの実行コードセクションのイメージを暗号化アルゴリズムで暗号化して提供された保安実行コードファイルを復号化するコード復号化部をさらに含む。
【００２０】
前記コード復号化部は、別途のファイルで貯蔵された前記保安実行コードファイルを復号化して、前記メモリーにロードされた前記共有オブジェクトファイルの前記実行コードセクションの位置に復元させることをさらに含む。
【００２１】
本発明のまた他の実施例による保安提供方法は、共有オブジェクトファイルと実行エンジンライブラリーとを組み合わせて生成された実行パッケージを貯蔵する段階と、前記実行パッケージから前記共有オブジェクトファイルを抽出する段階と、前記共有オブジェクトファイルの初期化関数関連セクションの少なくとも一つのタグの値を別途貯蔵して、前記共有オブジェクトファイルの前記少なくとも一つのタグの値を０で埋めて保安共有オブジェクトファイルを提供する段階と、前記保安共有オブジェクトファイルを提供する段階で別途貯蔵した前記少なくとも一つのタグの値を含む保安モジュールファイルを生成して提供する段階と、前記実行エンジンライブラリーと、前記保安共有オブジェクトファイルを提供する段階で提供された前記保安共有オブジェクトファイルと、前記保安モジュールファイルを生成する段階で提供された保安モジュールファイルとを含んで保安実行パッケージを生成する段階とを提供することにより、上述の目的を達成することができる。
【００２２】
本発明のまた他の実施例による保安実行方法は、運営体系を通じて共有オブジェクトファイルに対して動的ローダーを呼び出す段階と、前記動的ローダーの動作により、前記共有オブジェクトファイルをメモリーにロードして、前記ロードされた共有オブジェクトファイルのベースアドレスを取り戻す段階と、別途貯蔵された前記共有オブジェクトファイルの初期化関数関連セクションの少なくとも一つのタグの値を読み取って、前記ベースアドレスに加える段階と、前記ベースアドレスにタグの値を加えたアドレスに貯蔵されている初期化関数アドレスを持ってきて、該当初期化関数を呼び出す段階とを提供することにより、上述の目的を達成することができる。
【００２３】
前記保安実行方法は、前記共有オブジェクトファイルの前記初期化関数関連セクションの少なくとも一つのタグのオフセット値が指すオブジェクトファイル領域の位置に貯蔵されている初期化関数アドレスをゴミ値で埋める段階をさらに含む。
【００２４】
前記保安実行方法は、前記共有オブジェクトファイルのＥＬＦヘッダー領域をゴミ値で埋める段階をさらに含む。
【発明の効果】
【００２５】
上述の構成により、本発明は、静的分析攻撃から共有オブジェクトファイルの重要な実行コードをより完璧に保護することができる。
【００２６】
また、本発明は、共有オブジェクトファイルの正常実行に必要な一部情報を隠すことにより、共有オブジェクトダンプ及び再使用を防止することができる。
【図面の簡単な説明】
【００２７】
【図１】図１は、本発明の一実施例による共有オブジェクトのコード保護のための保安提供システムの構成図。
【図２】図２は、一般的な共有オブジェクトファイルの構造を概略的に示す図。
【図３】図３は、本発明を説明するために、共有オブジェクトファイルの構造を具体的に示す図。
【図４】図４は、図１の保安提供装置のブロック図。
【図５】図５は、本発明の一実施例による共有オブジェクトファイルに対する保安提供動作を説明する図。
【図６】図６は、図１の保安実行装置のブロック図。
【図７】図７は、本発明の実施例による保安モジュールファイルがメインメモリーユニットにロードされた状態を説明する図。
【図８】図８ａ〜図８ｃは、図７の保安モジュールファイルの動作を説明するために示した図。
【図９】図９は、本発明の一実施例による共有オブジェクトファイルのコード保護のための保安提供方法の流れ図。
【図１０】図１０は、本発明の他の実施例による共有オブジェクトファイルのコード保護のための保安実行方法の流れ図。
【発明を実施するための形態】
【００２８】
以下、添付の図面を参照し、本発明による共有オブジェクトのコード保護のための保安提供装置と方法、及び保安実行装置と方法の好ましい実施例を説明する。参考に、本発明を説明するにあたって、本発明の構成要素を指す用語は、それぞれの構成要素の機能を考慮して命名されたものであるため、本発明の技術的構成要素を限定する意味として理解されてはいけない。
【００２９】
図１は、本発明の一実施例による共有オブジェクトのコード保護のための保安提供システムの構成図である。
【００３０】
図１に示したように、本発明による共有オブジェクトのコード保護のための保安提供システムは、プログラム開発装置１１０、保安提供装置１２０、及び保安実行装置１３０を含む。ここで、プログラム開発装置１１０、保安提供装置１２０、及び保安実行装置１３０は、有無線通信網を通じて連結される。
【００３１】
プログラム開発装置１１０は、開発者がアプリケーションプログラムを開発するための装置である。実行エンジン、例えば、ユニティエンジンは、アプリケーションプログラムが開発されると、アプリケーションソースコードをコンパイルしてバイナリーコードを生成し、生成されたバイナリーコードと必須リソースライブラリーなどとを含んで実行パッケージ、例えばユニティパッケージを生成する。
【００３２】
保安提供装置１２０は、プログラム開発装置１１０で生成されたユニティパッケージに対する保安を提供するための装置である。保安提供装置１２０は、プログラム開発装置１１０で生成されたユニティパッケージがアップロードされると、共有オブジェクトファイルを抽出し、抽出されたオブジェクトの実行コードを暗号化して、共有オブジェクトの初期化関数に係る少なくとも一つのタグの値を別途の領域に貯蔵し、それに保安モジュールファイルを追加した後、再び保安ユニティパッケージを生成する。
【００３３】
保安実行装置１３０は、実行プログラム、例えばゲームプログラムが実行されるユーザー端末装置である。保安実行装置１３０は、プログラム開発装置１１０または保安提供装置１２０から保安ユニティパッケージをダウンロードして、実行プログラムを実行することができる。
【００３４】
図１では、プログラム開発装置１１０と保安提供装置１２０がそれぞれ別途の装置として示されているが、これは例示であって、本発明はこれに限定されない。
【００３５】
図２は、一般的な共有オブジェクトファイルの構造を概略的に示す図であり、図３は、本発明を説明するために、共有オブジェクトファイルの構造を具体的に示す図である。
【００３６】
共有オブジェクト(SO)ファイルは、図２に示したように、ＥＬＦ(Executable and Linkable Format)形式になっている。ＥＬＦは、実行ファイル、オブジェクトファイル、共有ライブラリー、及びコアダンプのための標準ファイル形式である。 ＥＬＦは、１９９９年８６ｏｐｅｎプロジェクトによって、ｘ８６ベースのユニックス及びユニックス系列システムの標準ファイル形式として選択された。
【００３７】
図２を見ると、本発明の実施例によるＳＯファイル２００は、ＳＯファイルの先頭にある一つのＥＬＦヘッダー２１０と、ＳＯファイルのランタイム実行に必要な情報を含むセグメントを定義するプログラムヘッダーテーブル(Program header table)２２０と、リンキングと再配置に必要な重要な情報を含むセクションを定義するセクションヘッダーテーブル(Section header table)を含む。
【００３８】
一方、動的ローダー(dlopen)は、ユニックス系列運営体系で提供するシステム関数でＳＯファイルを開けて、メモリーにロードし、実際に使用できるように準備する作業を行う。アプリケーションファイルまたは実行ファイルでＳＯファイルを使用するためには、必ずdlopen関数を呼び出さなければならない。dlopen関数の呼び出しによってメモリーにロードされたＳＯファイルは、後で他の実行ファイルまたはＳＯファイルでdlopenの要請が再び発生した場合、メモリーのロード過程を繰り返すことなく、既にメモリーにロードされている情報を再使用できるリンクを提供する。本発明のＳＯファイルのコード領域保護技術は、dlopen関数のこのような特性を活用して具現される。
【００３９】
図３に示されたように、図２に示されたプログラムヘッダーテーブル２２０は、プログラムヘッダー(Program header)及びＳＯファイルのランタイム実行に必要な少なくとも一つのアドレスが存在するプログラムテーブル領域を含む。そしてセクションヘッダーテーブル２３０は、セクションヘッダー(Section header)、テキストセクション(.text section)及び動的セクション(.dynamic section)を含む。
【００４０】
セクションヘッダーには、ＳＯファイルに含まれているさまざまなセクション(データ束)に対する位置及びサイズ情報が貯蔵されており、セクションは、ＥＬＦが共有ライブラリーに使用される場合に有効な概念で、バイナリーデータ束の単位と見られる。複数のセクションの中で、テキストセクションには、全てのプログラムコードが含まれており、動的セクションには、タグ及びその値が含まれているため、これらのセクションが、本発明の保護対象となる最も重要なセクションである。
【００４１】
テキストセクション内のコンストラクター(constructor)は、共有ライブラリーが最初にメモリーにロードされる時、必ず一度だけ実行される初期化関数または関数の集合である。システムにdlopenを要請すると、システムは、内部でコンストラクタ関数を実行させる。初期化関数が実行されない場合、正常的なプログラムの実行が不可能であり、同一なＳＯファイルに対して数回dlopenが行われても、全ての初期化関数は、ただ一回だけ呼び出される。
【００４２】
以下、図３に示された共有オブジェクトファイルの構造を利用して、共有オブジェクトファイルの動作を詳細に説明する。
【００４３】
ＳＯファイルの最初の部分を構成するＥＬＦヘッダーには、追加的な情報を含んでいるプログラムヘッダー及びセクションヘッダーに対する位置及び数の情報が貯蔵されている。実行ファイルがＳＯファイルをロードすると、実行ファイルは、ＥＬＦヘッダーに貯蔵されたプログラムヘッダー及びセクションヘッダーに対する位置及び数の情報を利用して、プログラムヘッダー及びセクションヘッダーの位置を探す(（1）参照)。
【００４４】
セクションヘッダーには、ＳＯファイルに含まれているさまざまなセクションに対する位置及びサイズの情報が貯蔵されている。実行ファイルは、セクションヘッダーに貯蔵されたテキストセクションの位置情報を利用して、テキストセクションの位置を探す(（2）参照)。テキストセクションは、本発明に係る最も重要なセクションであって、全ての実行コードがバイナリーデータ形式として貯蔵されており、暗号化による保護の対象となる領域である。
【００４５】
実行ファイルは、セクションヘッダーに貯蔵された動的セクションの位置情報を利用して、動的セクションの位置を探す(（3）参照)。動的セクションには、＜タグ：値＞形態の情報が複数含まれている。これらのうち、本発明では、動的テーブル初期化(DT_INIT)タグ、動的テーブル初期化アレイ(DT_INIT_ARRAY)タグ及び動的テーブル初期化アレイサイズ(DT_INIT_ARRAYSZ)タグが使用される。そして、動的テーブルの初期化(DT_INIT)タグ及び動的テーブル初期化アレイ(DT_INIT_ARRAY)タグには、タグの値としてアドレスポインター、即ちＳＯファイルが最初にdlopenによってメモリーにロードされた時点でシステムによって１回だけ呼び出される初期化関数のアドレスを貯蔵しているメモリー位置の値(offser)が貯蔵されており、動的テーブル初期化アレイサイズ(DT_INIT_ARRAYSZ)タグには、タグの値として初期化関数の数が貯蔵されている。
【００４６】
初期化関数が一つである場合は、動的テーブル初期化(DT_INIT)タグの値が使用されて、プログラムテーブル領域の一つのアドレスを指す(（4）参照)。しかし、初期化関数が複数である場合は、動的テーブル初期化アレイ(DT_INIT_ARRAY)タグの値が使用されて、動的テーブル初期化アレイサイズ(DT_INIT_ARRAYSZ)タグの数Ｎに応じて、Ｎ個の全ての初期化関数が順に各１回ずつ呼び出される(（5）参照)。初期化関数の数は、動的テーブル初期化アレイサイズ(DT_INIT_ARRAYSZ)タグの値に貯蔵されている(（6）参照)。
【００４７】
図４は、図１の保安提供装置のブロック図であり、図５は、本発明の一実施例による共有オブジェクトファイルに対する保安提供動作を説明する図である。
【００４８】
図４に示すように、保安提供装置１２０は、ＳＯファイル抽出部４１０、コード暗号化部４２０、オブジェクト管理部４３０、保安モジュール生成部４４０、及びパッケージ組み合わせ部４５０を含む。
【００４９】
ＳＯファイル抽出部４１０は、プログラム開発装置１１０からアップロードされたユニティパッケージの複数のライブラリー及びファイルを分析してＳＯファイルを抽出する。即ち、ＳＯファイル抽出部４１０は、ＳＯファイルと実行エンジンライブラリーとを組み合わせて生成された実行パッケージからＳＯファイルを抽出する。
【００５０】
コード暗号化部４２０は、ＳＯファイルの実行コードセクション、即ち、保護対象のテキストセクションの全体領域を別途のファイルに分離し、分離されたテキストセクションファイルを圧縮プログラム、例えばＺＩＰで圧縮する。さらに、コード暗号化部４２０は、ＺＩＰによって圧縮されたテキストセクションファイルを暗号化アルゴリズムで暗号化を行い、保安テキストセクションファイルを生成する(（1）参照)。暗号化アルゴリズムは、ＤＥＳ、ＡＥＳ、ＲＳＡなどのような暗号化アルゴリズムのうち、少なくとも一つを含むことができる。ここで、暗号化アルゴリズムとしては、ＤＬＬ全体に対して暗号化を行うＡＥＳ(Advanced Encryption Standard)アルゴリズムが好ましい。
【００５１】
オブジェクト管理部４３０は、まず、実行コードセクション、即ち保護対象のテキストセクションが別途のファイルとして生成されたため、テキストセクションのあるＳＯファイル領域を全て０で埋める(（2）参照)。
【００５２】
さらにオブジェクト管理部４３０は、動的セクションの三つのタグの値を別途の領域に貯蔵しておき、ＳＯファイル内の元の値を全て０で埋める(（3）参照)。この場合、DT_INIT_ARRAYSZタグの値を０に変えないと、非正常的なコード、即ち、０に変えられている初期化関数が呼び出され、エラーが発生し、プログラムが中止されるため、初期化関数の呼び出しを防ぐために、０に変える過程が必ず必要である。
【００５３】
保安モジュール生成部４４０は、ＳＯファイルに保安を適用するための構成であって、オブジェクト管理部４３０で別途貯蔵した少なくとも一つのタグの値を含む保安モジュールファイルを生成する。保安モジュール生成部４４０で生成された保安モジュールファイルは、保安ライブラリーファイルである。
【００５４】
保安モジュール生成部４４０は、コード暗号化部４２０で暗号化された保安ＳＯファイルを復号化するための復号化アルゴリズムを含み、コード暗号化部４２０が保安テキストセクションファイルを別途のファイルとして貯蔵した場合は、元のテキストセクションのオフセット値をさらに含むことができる。
【００５５】
さらに、保安モジュール生成部４４０は、ライブラリーの完全性検証のためのハッシュレジストリー関数と、デバッガー(debugger)を利用したゲームプログラム分析を防止するためのアンチデバッグー関数と、ゲームプログラムのメモリー状態をダンプすることを防止するためのアンチダンプ関数などを含むことができる。
【００５６】
パッケージ組み合わせ部４５０は、実行エンジンライブラリーと、コード暗号化部４２０で生成された保安実行コードファイルと、オブジェクト管理部４３０で提供された保安共有オブジェクトファイルと、保安モジュール生成部４４０で提供された保安モジュールファイルとを含んで保安実行パッケージを生成する。
【００５７】
図６は、図１の保安実行装置のブロック図である。
【００５８】
図６に示されたように、保安実行装置１３０は、ＣＰＵ６１０、メインメモリーユニット６２０、ディスプレイユニット６３０、補助メモリユニット６４０は、入力ユニット６５０と、ネットワークユニット６６０とを含む。
【００５９】
補助メモリーユニット６４０には、保安提供装置１２０からネットワークユニット６６０を通じてダウンロードされた保安実行パッケージが貯蔵される。ゲームプログラムの保安実行パッケージ、例えば、保安ユニティパッケージの実行が要請されると、ＣＰＵ６１０は、補助メモリーユニット６４０に貯蔵された保安ユニティパッケージをメインメモリーユニット６２０にロードする。一方、ゲームプログラムは、入力ユニット６５０やネットワークユニット６６０を通じて新しい値を入力することもできる。
【００６０】
本発明の実施例による保安実行装置１３０は、パーソナルコンピューター(PC：Personal Computer)、ノートパソコン、タブレット、携帯情報端末(PDA：Personal Digital Assistant)、ゲームコンソール、携帯マルチメディアプレーヤー(PMP：Portable Multimedia Player)、プレイステーションポータブル(PSP：PlayStation Portable)、無線通信端末(Wireless Communication Terminal)、スマートフォン(Smart Phone)、ＴＶ、メディアプレーヤーなどのユーザー端末である。
【００６１】
図７は、本発明の実施例による保安モジュールファイルがメインメモリーユニットにロードされた状態を説明する図である。図８ａ〜図８ｃは、図７の保安モジュールファイルの動作を説明するための図である。
【００６２】
図７に示されたように、保安モジュールファイル７００は、動的ローダー部７１０、コード復号化部７２０、及びオブジェクト管理部７３０を含む。
【００６３】
動的ローダー部７１０は、運営体系を通じて、ＳＯファイルに対して動的ローダーが呼び出されると、ＳＯファイルをメインメモリーユニット６２０にロードして、ロードされたＳＯファイルのベースアドレスを取り戻す。
【００６４】
コード復号化部７２０は、オブジェクトファイルの実行コードセクションを暗号化アルゴリズムで暗号化して提供された保安実行コードファイルを復号化する。コード復号化部７２０は、別途のファイルとして貯蔵された保安実行コードファイルを復号化し、メインメモリーユニット６２０にロードされたＳＯファイルの実行コードセクションの位置に復元させる。
【００６５】
オブジェクト管理部６３０は、別途貯蔵されたＳＯファイルの初期化関数関連セクションの少なくとも一つのタグの値を読み取って、ベースアドレスに加えた後、メインメモリーユニット６２０の該当アドレスに貯蔵されている初期化関数アドレスを持ってきて、初期化関数を呼び出す。さらに、オブジェクト管理部６３０は、ＳＯファイルの初期化関数関連セクションの動的テーブル初期化アレイ大きさの数だけメインメモリーユニット６２０の該当アドレスに貯蔵されている初期化関数アドレスアレイの値を順に持ってきて、それぞれ初期化関数を呼び出すことができる。
【００６６】
以下、図８ａ〜図８ｃを参照して、保安モジュールファイルの動作をさらに詳細に説明する。
【００６７】
実行ファイルは、ターゲットＳＯファイルを使用する前に、まず、保安モジュールファイル７００を呼び出す。保安モジュールファイル７００が呼び出されると、まず、運営体系を通じて、該当ＳＯファイルに対して動的ローダー(dlopen)を呼び出す(図８ａの（1）参照)。
【００６８】
動的ローダーの内部ロジックにより、該当ＳＯファイルがメインメモリーユニット６２０にロードされる。保安モジュールファイル７００は、ＳＯファイルのロードが完了すると、ロードされたＳＯファイルのベースアドレスを取り戻す(図８ａの（2）を参照)。
【００６９】
保安モジュールファイル７００は、別途のファイルに貯蔵されたテキストセクションのデータを復号化して、圧縮アルゴリズムにより圧縮されたテキストセクションのデータを解除し、原本データを確保する(図８ａの（3）を参照)。保安モジュールファイル７００は、確保された原本イメージを、貯蔵されたテキストセクションのオフセット値を利用して、メインメモリーユニットのＳＯファイル領域のテキストセクション位置に復元させる(図８ａの（4）を参照)。
【００７０】
保安モジュールファイル７００は、テキストセクションの復元が完了すると、まず、別途貯蔵しておいたDT_INITタグの値を読み取って、ＳＯファイルのベースアドレスにこのタグの値を加える(図８ｂの（1）参照)。保安モジュールファイル７００は、ベースアドレスにタグの値を加えたアドレスに貯蔵されている初期化関数アドレスを持ってくる(図８ｂの（2）を参照)。保安モジュールファイル７００は、初期化関数アドレスを利用して、該当コンストラクター関数を呼び出す(図８ｂの（3）参照)。一方、保安モジュールファイル７００は、読み取ったDT_INITタグの値が０であれば、次の段階に移動する。
【００７１】
保安モジュールファイル７００は、別途貯蔵しておいたDT_INIT_ARRAYタグの値を読み取って、ＳＯファイルのベースアドレスにこのタグの値を加える(図８ｂの（4）参照)。保安モジュールファイル７００は、ベースアドレスにタグの値を加えたアドレスに貯蔵されている初期化関数アドレスを持ってくる(図８ｂの（5）参照)。保安モジュールファイル７００は、初期化関数アドレス及びDT_INIT_ARRAYタグの値を利用して、初期化関数アドレスアレイの値を順に持ってきて、それぞれ初期化関数を呼び出す(図８ｂの（6）参照)。
【００７２】
上述の動作により、全ての初期化関数が１回ずつ実行された状態であるため、以後、実行プログラムでＳＯファイルに対して動的ローダー(dlopen)を行うと、既にメインメモリーユニット６２０にロードされて復号化が完了したデータのポインターが返され、アプリケーションプログラムは、正常的に実行される。
【００７３】
一方、保安モジュールファイル７００は、DT_INITタグが指す位置に貯蔵されている初期化関数アドレスをゴミ値で埋めて、またDT_INIT_ARRAYタグが指している位置のアレイに貯蔵されている全ての初期化関数アドレスもゴミ値で埋める(図８ｃ参照)。
【００７４】
保安モジュールファイル７００が、メモリーダンプ及び動的分析を防ぐために、基本的に付着防御機能を含んでいるが、ハッカーがこのような付着防御を迂回して、メモリーにロードされたＳＯファイルをダンプすることができる。しかし、初期化関数に対する情報がゴミ値で満たされているため、正常的に初期化関数を実行することもできないばかりか、ダンプしたＳＯファイルを変調することもできない。
【００７５】
また、保安モジュールファイル７００は、追加にヘッダー領域もゴミ値で埋めて、メモリーダンプのための位置検索をさらに難しくすることができる(図８ｃ参照)。即ち、ＥＬＦヘッダーには、プログラムヘッダー及びセクションヘッダーに対する情報が含まれているが、これらの情報のない共有オブジェクトをダンプしてリサイクルすると、アプリケーションプログラムが非正常的にに実行されるか、実行自体ができない。
【００７６】
図９は、本発明の一実施例による共有オブジェクトファイルのコード保護のための保安提供方法の流れ図である。
【００７７】
保安提供装置１２０は、共有オブジェクトファイルと実行エンジンライブラリーとを組み合わせて生成された実行パッケージを貯蔵する(S902)。共有オブジェクトファイル抽出部４１０は、実行パッケージから共有オブジェクトファイルを抽出する(S904)。
【００７８】
コード暗号化部４２０は、共有オブジェクトファイルの実行コードセクションのイメージを暗号化アルゴリズムで暗号化し、保安実行コードファイルを生成する(S906)。この場合、コード暗号化部４２０は、共有オブジェクトファイルの実行コードセクションのイメージを別途のファイルに分離した後、暗号化アルゴリズムで暗号化することができる。
【００７９】
オブジェクト管理部４３０は、共有オブジェクトファイルの初期化関数関連セクションの少なくとも一つのタグの値を別途貯蔵して、共有オブジェクトファイルの少なくとも一つのタグの値を０で埋めて、保安共有オブジェクトファイルを提供する(S908) 。
【００８０】
保安モジュール生成部４４０は、オブジェクト管理部４３０で別途貯蔵した少なくとも一つのタグの値を含む保安モジュールファイルを生成する(S910)。パッケージ組み合わせ部４５０は、実行エンジンライブラリーと、コード暗号化部４２０で生成された保安実行コードファイルと、オブジェクト管理部４３０で提供された前記保安共有オブジェクトファイルと、保安モジュール生成部４４０で提供された保安モジュールファイルとを含み、保安実行パッケージを生成する(S912)。
【００８１】
図１０は、本発明の他の実施例による共有オブジェクトファイルのコード保護のための保安実行方法の流れ図である。
【００８２】
実行ファイルは、対象ＳＯファイルを使用する前に、まず、保安モジュールファイル７００を呼び出す(S1002)。保安モジュールファイル７００は、運営体系を通じて共有オブジェクトファイルに対して動的ローダーを呼び出す(S1004)。動的ローダーは、ＳＯファイルをメインメモリーユニット６２０にロードし、ロードされたＳＯファイルのベースアドレスを保安モジュールファイル７００に返すため、保安モジュールファイル７００は、ベースアドレスを取り戻す(S1006)。
【００８３】
保安モジュールファイル７００は、オブジェクトファイルの実行コードセクションを暗号化アルゴリズムで暗号化して、提供された保安実行コードファイルを復号化する(S1008)。保安実行コードファイルが別途のファイルに貯蔵された場合、保安モジュールファイル７００は、別途のファイルに貯蔵された保安実行コードファイルを復号化し、メインメモリーユニット６２０にロードされたＳＯファイルの実行コードセクションの位置に復元させる。
【００８４】
保安モジュールファイル７００は、別途貯蔵された共有オブジェクトファイルの初期化関数関連セクションの少なくとも一つのタグの値を読み取って、前記ベースアドレスに加える(S1010)。
【００８５】
保安モジュールファイル７００は、ベースアドレスにタグの値を加えたアドレスに貯蔵されている初期化関数アドレスを持ってきて、該当初期化関数を呼び出す(S1012)。さらに、保安モジュールファイル７００は、ＳＯファイルの初期化関数関連セクションの動的テーブルの初期化アレイ大きさの数だけメインメモリーユニット６２０の該当アドレスに貯蔵されている初期化関数アドレスアレイの値を順に持ってきて、それぞれ初期化関数を呼び出すことができる。
【００８６】
保安モジュールファイル７００は、共有オブジェクトファイルの初期化関数関連セクションの少なくとも一つのタグのオフセット値が指すオブジェクトファイル領域の位置に貯蔵されている初期化関数アドレスをゴミ値で埋める(S1014)。さらに、保安モジュールファイル７００は、共有オブジェクトファイルのＥＬＦヘッダー領域をゴミ値で埋める(S1016)。
【００８７】
以上説明した本発明の実施例は、本発明の技術思想を例示的に示したものに過ぎず、本発明の保護範囲は、以下の特許請求の範囲によって解釈されるべきである。また、本発明の属する技術分野で通常の知識を有する者であれば、本発明の本質的な特性から逸脱しない範囲で様々な修正や変更が可能であって、本発明と同等の範囲内にある全ての技術思想は、本発明の権利範囲に含まれるものと解釈されるべきである。
【符号の説明】
【００８８】
１１０：プログラム開発装置
１２０：保安提供装置
１３０：保安実行装置
４１０：ＳＯファイル抽出部
４２０：コード暗号化部
４３０：オブジェクト管理部
４４０：保安モジュール生成部
４５０：パッケージ組み合わせ部
６１０：ＣＰＵ
６２０：メインメモリーユニット
６３０：ディスプレイユニット
６４０：補助メモリーユニット
６５０：入力ユニット
６６０：ネットワークユニット
７１０：動的ローダー部
７２０：コード復号化部
７３０：オブジェクト管理部
【図１】
2019096300.tif 000003
【図２】
2019096300.tif 000004
【図３】
2019096300.tif 000005
【図４】
2019096300.tif 000006
【図５】
2019096300.tif 000007
【図６】
2019096300.tif 000008
【図７】
2019096300.tif 000009
【図８ａ】
2019096300.tif 000010
【図８ｂ】
2019096300.tif 000011
【図８ｃ】
2019096300.tif 000012
【図９】
2019096300.tif 000013
【図１０】
2019096300.tif 000014