(57)【要約】      （修正有）【課題】中間言語ライブラリーに保安を提供して、共通中間言語をハッキングから保護する保安提供装置及び方法を提供する。【解決手段】複数のファイルをコンパイルして生成された中間言語ライブラリーと実行エンジンライブラリーとを組み合わせて生成された実行パッケージが貯蔵されている保安提供装置は、実行パッケージから中間言語ライブラリーを抽出する中間言語抽出部５１０と、中間言語抽出部５１０で抽出された中間言語ライブラリーに対して第１の暗号化アルゴリズムで暗号化し、暗号化された中間言語ライブラリーに対して第２の暗号化アルゴリズムで暗号化して保安中間言語ライブラリーを提供する暗号化部５２０とを含むことにより、共通中間言語をハッキングから保護する。【選択図】図５
2019096299.tif 000002
【特許請求の範囲】
【請求項１】
複数のファイルをコンパイルして生成された中間言語ライブラリーと実行エンジンライブラリーとを組み合わせて生成された実行パッケージが貯蔵されている保安提供装置であって、
前記実行パッケージから前記中間言語ライブラリーを抽出する中間言語抽出部と、
前記中間言語語抽出部で抽出された中間言語ライブラリーに対して第１の暗号化アルゴリズムで暗号化し、前記暗号化された中間言語ライブラリーに対して第２の暗号化アルゴリズムで暗号化して保安中間言語ライブラリーを提供する暗号化部と、を含むことを特徴とする、保安提供装置。
【請求項２】
前記実行パッケージの中間言語ライブラリーを、前記暗号化部で暗号化された前記保安中間言語ライブラリーで代替し、前記実行パッケージのモノファイルを、イメージ構造体及び前記暗号化部に対応する復号化部を含む保安モノファイルで代替するファイル代替部をさらに含むことを特徴とする、請求項１に記載の保安提供装置。
【請求項３】
前記第１の暗号化アルゴリズムの暗号化キー値を第２の暗号化アルゴリズムで暗号化して保安ファイルを生成する保安ファイル生成部をさらに含むことを特徴とする、請求項２に記載の保安提供装置。
【請求項４】
前記実行エンジンライブラリーと、前記ファイル代替部で代替された前記保安中間言語ライブラリーと前記保安モノファイルと、前記保安ファイル生成部で提供された保安ファイルとを組み合わせて保安実行パッケージを生成するパッケージ組み合わせ部をさらに含むことを特徴とする、請求項３に記載の保安提供装置。
【請求項５】
前記モノ保安ファイルは、前記保安中間言語ライブラリーを実行する際、メインメモリーに前記保安中間言語ライブラリーを一つのイメージとしてロードして、実行コードにアクセスするために、前記イメージ構造体に復号化された中間言語ライブラリーの各パートの開始アドレスを貯蔵することを特徴とする、請求項２乃至４のいずれかに記載の保安提供装置。
【請求項６】
前記第１の暗号化アルゴリズムは、ＸＯＲ演算アルゴリズムであり、前記第２の暗号化アルゴリズムは、ＡＥＳ(Advanced Encryption Standard)アルゴリズムであることを特徴とする、請求項５に記載の保安提供装置。
【請求項７】
中間言語ライブラリーに対して第１の暗号化アルゴリズムで暗号化し、前記暗号化された中間言語ライブラリーに対して第２の暗号化アルゴリズムで暗号化した保安中間言語ライブラリーを、実行エンジンライブラリーにおける動作に応じてメインメモリーにロードする実行エンジン部と、
前記メインメモリーに保安中間言語ライブラリーがロードされると、前記保安中間言語ライブラリーに必要な初期化作業を実行し、保安ファイルから前記第１の暗号化アルゴリズムに係る第１の復号化関数インターフェース及び前記第２の暗号化アルゴリズムに係る第２の復号化関数インターフェーイスを持ってくるイメージ構造体と、
前記イメージ構造体で持ってきた前記第２の復号化関数インターフェースを利用し、暗号化された前記保安中間ライブラリーを復号化して、前記暗号化された中間言語ライブラリーを前記メインメモリーの中間言語ライブラリー領域に保持する復号化部と、を含むことを特徴とする、保安実行装置。
【請求項８】
前記復号化部は、前記イメージ構造体で持ってきた前記第１の復号化関数インターフェースを用いて、前記暗号化された中間言語ライブラリーのヘッダー関連情報を、元の中間言語ライブラリーで復号化し、前記中間言語ライブラリーのヘッダー関連情報の少なくとも一つの情報を前記中間言語ライブラリー領域以外のメモリー領域に貯蔵し、前記中間言語ライブラリー領域以外のメモリー領域に貯蔵されたヘッダー関連情報の位置をイメージ構造体に貯蔵することを特徴とする、請求項７に記載の保安実行装置。
【請求項９】
前記復号化部は、前記中間言語ライブラリー領域以外のメモリー領域にヘッダー関連情報が貯蔵されると、ヘッダー関連情報が貯蔵されている前記中間言語ライブラリー領域をスクランブルするか、意味のない値で埋めることを特徴とする、請求項８に記載の保安実行装置。
【請求項１０】
前記第１の暗号化アルゴリズムは、ＸＯＲ演算アルゴリズムであり、前記第２の暗号化アルゴリズムは、ＡＥＳ(Advanced Encryption Standard)アルゴリズムであることを特徴とする、請求項７乃至９のいずれかに記載の保安提供装置。
【請求項１１】
複数のファイルをコンパイルして生成された中間言語ライブラリーと実行エンジンライブラリーとを組み合わせて生成された実行ファイルを貯蔵する段階と、
前記実行パッケージから前記中間言語ライブラリーを抽出する段階と、
前記実行パッケージから抽出された前記中間言語ライブラリーに対して第１の暗号化アルゴリズムで暗号化する段階と、
前記暗号化された中間言語ライブラリーに対して第２の暗号化アルゴリズムで暗号化して保安中間言語ライブラリーを生成する段階と、
を含むことを特徴とする保安提供方法。
【請求項１２】
前記実行パッケージの中間言語ライブラリーを、前記保安中間言語ライブラリーを生成する段階で生成された前記保安中間言語ライブラリーで代替し、前記実行パッケージのモノファイルを、イメージ構造体及び前記第１の暗号化アルゴリズム及び前記第２の暗号化アルゴリズムに対応する復号化部を含む保安モノファイルで代替する段階をさらに含むことを特徴とする、請求項１１に記載の保安提供方法。
【請求項１３】
前記第１の暗号化アルゴリズムの暗号化キー値を第２の暗号化アルゴリズムで暗号化して保安ファイルを生成する段階をさらに含むことを特徴とする、請求項１２に記載の保安提供方法。
【請求項１４】
前記実行エンジンライブラリーと、前記代替する段階で代替された前記保安中間言語ライブラリー及び前記保安モノファイルと、前記保安ファイルを生成する段階で提供された前記保安ファイルとを組み合わせて保安実行パッケージを生成する段階をさらに含むことを特徴とする、請求項１３に記載の保安提供方法。
【請求項１５】
前記モノ保安ファイルは、前記保安中間言語ライブラリーを実行する際、メインメモリーに前記保安中間言語ライブラリーを一つのイメージとしてロードして、実行コードにアクセスするために、前記イメージ構造体に復号化された中間言語ライブラリーの各パートの開始アドレスを貯蔵することを特徴とする、請求項１２乃至１４のいずれかに記載の保安提供方法。
【請求項１６】
中間言語ライブラリーに対して第１の暗号化アルゴリズムで暗号化し、前記暗号化された中間言語ライブラリーに対して第２の暗号化アルゴリズムで暗号化した保安中間言語のライブラリーを、実行エンジンライブラリーの動作に応じてメインメモリーにロードする段階と、
前記メインメモリーに保安中間言語ライブラリーがロードされると、前記保安中間言語ライブラリーに必要な初期化作業を実行する段階と、
保安ファイルから前記第１の暗号化アルゴリズムに係る第１の復号化関数インターフェース及び前記第２の暗号化アルゴリズムに係る第２の復号化関数インターフェースを持ってくる段階と、
前記第２の復号化関数のインターフェースを利用して暗号化された前記保安中間ライブラリーを復号化して、前記暗号化された中間言語ライブラリーを前記メインメモリーの中間言語ライブラリー領域に保持する段階と、を含むことを特徴とする保安実行方法。
【請求項１７】
前記持ってくる段階で持ってきた前記第１の復号化関数インターフェースを用いて、前記暗号化された中間言語ライブラリーのヘッダー関連情報を、元の中間言語ライブラリーで復号化する段階と、
前記中間言語ライブラリーのヘッダー関連情報の少なくとも一つの情報を、前記中間言語ライブラリー領域以外のメモリー領域に貯蔵し、前記中間言語ライブラリー領域以外のメモリー領域に貯蔵されたヘッダー関連情報の位置をイメージ構造体に貯蔵するステップと、をさらに含むことを特徴とする、請求項１６に記載の保安実行方法。
【請求項１８】
前記中間言語ライブラリー領域以外のメモリー領域にヘッダー関連情報が貯蔵されると、ヘッダー関連情報が貯蔵されている前記中間言語ライブラリー領域をスクランブルするか、意味のない値で埋める段階をさらに含むことを特徴とする、請求項１７に記載の保安の実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共通中間言語のための保安提供装置と方法、および保安実行装置と方法に関し、特にスクリプト言語などで作成されたプログラムの共通中間言語に対して保安を提供するための保安提供装置と方法、および保安実行装置と方法に関する。
【背景技術】
【０００２】
アプリケーションは、同一なことを実行するとしても、ハードウェアや運営体制に応じて動作するように個別にプログラムされなければならない。つまり、ＰＣ、Ｍａｃ、ウェブブラウザ、フラッシュ、アンドロイドフォン、アイフォンなど、さまざまな環境で同一なアプリケーション、例えば同じゲームプログラムなどが実行されても、ゲームプログラムなどのソースコードは、プラットフォームに応じて個別に開発されなければならない。これにより、ゲームプログラムの開発・メンテナンスコストが増加するようになるが、もし一つのソースコードを、ハードウェアや運営体制に関係なく再使用できるようになれば、このようなコストを大幅に減らすことができる。
【０００３】
最近は、スマートフォンの登場によって、プログラムの再使用の必要性が更に高まり、実際、ほとんどのモバイルゲームは、このような特徴を反映したゲームエンジンのような開発ツールによって製作されている。代表的なクロスプラットフォームゲームエンジンとしては、Unity、Havok Vision、COCOS2Dなどがあるが、特にユニティ(Unity)は、ゲームスクリプト作成用言語でC＃、Java（登録商標）script、Booを支援するクロスプラットフォームゲームエンジンである。
【０００４】
しかし、C＃のようなプログラム言語で作成されたプログラムは、コンパイルされてから直に機械語に変換されるものではなく、共通中間言語(Common Intermediate Language; CIL)という形の中間言語のバイナリに変換され、ＤＬＬなどの拡張子を持つファイルとしてゲームパッケージに含まれ、このような共通中間言語コードを実行するためには、ドットネットフレームワーク(.NET Framework)、モノ(mono)、JVMなどの共通中間言語を機械語に変換して実行する手段が必要である。
【０００５】
ここで問題は、共通中間言語の形式が、完全に公開された形式であり、共通中間言語を元のスクリプトソースコードに完全に復元して表示するツールが提供されているため、リバースエンジニアリングによる逆分析により、重要なゲームロジックのソースをそのままのぞき見ることができるだけではなく、さらには、攻撃者が勝手にコードを修正してＤＬＬを再構成(rebuild)し、クラックされたバージョンを配布することが非常に容易に行われてしまうおそれがある
【０００６】
これに対し、C＃などのスクリプトの作成時、コード難読化(obfuscation)技法を適用してメソッド名や変数名を変えてやれば、リバースエンジニアリングによるプログラム分析をある程度難しくすることができるが、根本的に、ソースコードがすべて見えてしまう脆弱性を防止することはできない。
【０００７】
また、ハッキング攻撃を検知するロジックをアンドロイドNDK(Native Development Kit)ファイルで作成し、これをJava段やC＃スクリプト段で呼び出して保護する方法も一部使用されているが、JavaもC＃と同様に、中間言語に変換して実行する言語であるため、簡単にソースコードの露出と変調が行われてしまい、攻撃者が非常に簡単に保安ロジックを無力化することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
上述の問題点を解決するために、本発明は、中間言語ライブラリーに保安を提供して、共通中間言語をハッキングから保護する保安提供装置及び方法を提供することを目的とする。
【０００９】
本発明は、中間言語ライブラリーに保安を実行し、共通中間言語をハッキングから保護する保安実行装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述の目的を達成するために、本発明の一実施例による複数のファイルをコンパイルして生成された中間言語ライブラリーと実行エンジンライブラリーとを組み合わせて生成された実行パッケージが貯蔵されている保安提供装置は、前記実行パッケージから前記中間言語ライブラリーを抽出する中間言語抽出部と、前記中間言語抽出部で抽出された中間言語ライブラリーに対して第１の暗号化アルゴリズムで暗号化し、前記暗号化された中間言語ライブラリーに対して第２の暗号化アルゴリズムで暗号化して保安中間言語ライブラリーを提供する暗号化部とを含む。
【００１１】
前記保安提供装置は、前記実行パッケージの中間言語ライブラリーを、前記暗号化部で暗号化された前記保安中間言語ライブラリーで代替し、前記実行パッケージのモノファイルを、イメージ構造体及び前記暗号化部に対応する復号化部を含む保安モノファイルで代替するファイル代替部をさらに含む。
【００１２】
前記保安提供装置は、前記第１の暗号化アルゴリズムの暗号化キー値を第２の暗号化アルゴリズムで暗号化して保安ファイルを生成する保安ファイル生成部をさらに含む。
【００１３】
前記保安提供装置は、前記実行エンジンライブラリーと、前記ファイル代替部で代替された前記保安中間言語ライブラリーと前記保安モノファイルと、前記保安ファイル生成部で提供された保安ファイルとを組み合わせて保安実行パッケージを生成するパッケージ組み合わせ部をさらに含む。
【００１４】
前記モノ保安ファイルは、前記保安中間言語ライブラリーを実行する際、メインメモリーに前記保安中間言語ライブラリーを一つのイメージとしてロードして、実行コードにアクセスするために、前記イメージ構造体に復号化された中間言語ライブラリーの各パートの開始アドレスを貯蔵する。
【００１５】
前記第１の暗号化アルゴリズムは、ＸＯＲ演算アルゴリズムであり、前記第２の暗号化アルゴリズムは、ＡＥＳ(Advanced Encryption Standard)アルゴリズムである。
【００１６】
本発明のまた他の実施例による保安実行装置は、中間言語ライブラリーに対して第１の暗号化アルゴリズムで暗号化し、前記暗号化された中間言語ライブラリーに対して第２の暗号化アルゴリズムで暗号化した保安中間言語ライブラリーを、実行エンジンライブラリーにおける動作に応じてメインメモリーにロードする実行エンジン部と、前記メインメモリーに保安中間言語ライブラリーがロードされると、前記保安中間言語ライブラリーに必要な初期化作業を実行し、保安ファイルから前記第１の暗号化アルゴリズムに係る第１の復号化関数インターフェース及び前記第２の暗号化アルゴリズムに係る第２の復号化関数インターフェーイスを持ってくるイメージ構造体と、前記イメージ構造体で持ってきた第２の復号化関数インターフェースを利用し、暗号化された前記保安中間ライブラリーを復号化して、前記暗号化された中間言語ライブラリーを前記メインメモリーの中間言語ライブラリー領域に保持する復号化部とを含むことにより、上述の目的を達成することができる。
【００１７】
前記復号化部は、前記イメージ構造体で持ってきた第１の復号化関数インターフェースを用いて、前記暗号化された中間言語ライブラリーのヘッダー関連情報を、元の中間言語ライブラリーで復号化し、前記中間言語ライブラリーのヘッダー関連情報の少なくとも一つの情報を前記中間言語ライブラリー領域以外のメモリー領域に貯蔵し、前記中間言語ライブラリー領域以外のメモリー領域に貯蔵されたヘッダー関連情報の位置をイメージ構造体に貯蔵する。
【００１８】
前記復号化部は、前記中間言語ライブラリー領域以外のメモリー領域にヘッダー関連情報が貯蔵されると、ヘッダー関連情報が貯蔵されている前記中間言語ライブラリー領域をスクランブルするか、意味のない値で埋める。
【００１９】
本発明のまた他の実施例による保安提供方法は、複数のファイルをコンパイルして生成された中間言語ライブラリーと実行エンジンライブラリーとを組み合わせて生成された実行ファイルを貯蔵する段階と、前記実行パッケージから前記中間言語ライブラリーを抽出する段階と、前記実行パッケージから抽出された中間言語ライブラリーに対して第１の暗号化アルゴリズムで暗号化する段階と、前記暗号化された中間言語ライブラリーに対して第２の暗号化アルゴリズムで暗号化して保安中間言語ライブラリーを生成する段階とを含む。
【００２０】
本発明のまた他の実施例による保安実行方法は、中間言語ライブラリーに対して第１の暗号化アルゴリズムで暗号化し、前記暗号化された中間言語ライブラリーに対して第２の暗号化アルゴリズムで暗号化した保安中間言語のライブラリーを、実行エンジンライブラリーの動作に応じてメインメモリーにロードする段階と、前記メインメモリーに保安中間言語ライブラリーがロードされると、前記保安中間言語ライブラリーに必要な初期化作業を実行する段階と、保安ファイルから前記第１の暗号化アルゴリズムに係る第１の復号化関数インターフェース及び前記第２の暗号化アルゴリズムに係る第２の復号化関数インターフェースを持ってくる段階と、前記第２の復号化関数のインターフェースを利用して暗号化された前記保安中間ライブラリーを復号化して、前記暗号化された中間言語ライブラリーを前記メインメモリーの中間言語ライブラリー領域に保持する段階とを含むことで、上述の目的を達成することができる。
【発明の効果】
【００２１】
上述の構成により、本発明は、中間言語ライブラリーに対する静的分析の攻撃を防ぐことができる。即ち、ＤＬＬがメインメモリー上で復号化されて実行されるため、静的分析攻撃に対して完璧に防御することができる。
【００２２】
本発明は、メインメモリー上で保安中間言語ライブラリーがＡＥＳアルゴリズムで復号化されても、全体的にＸＯＲ演算ができているため、中間言語ライブラリーをハッキングから保護することができる。
【００２３】
本発明は、ハッカーにＤＬＬ領域のアドレスが流出されても、ヘッダー関連情報がメインメモリー全体にかけて分散されており、しかもＤＬＬ領域内のヘッダー関連情報はスクランブルされているため、ＤＬＬ領域内でＤＬＬのコード情報をマッピングする情報を見つけ出すことができない。
【図面の簡単な説明】
【００２４】
【図１】図１は、本発明の一実施例による共通中間言語のための保安提供システムの構成図。
【図２】図２は、図１のプログラム開発装置における通常のユニティパッケージの生成方法の例を示す図。
【図３】図３は、図２に示されたＤＬＬの構造を示す図。
【図４】図４は、本発明による保安モノファイルのイメージ構造体の例を示す図。
【図５】図５は、図１の保安提供装置のブロック図。
【図６】図６は、図５の保安提供装置で再び組み合わされた保安ユニティパッケージを示す図。
【図７】図７は、図１の保安実行装置のブロック図。
【図８】図８は、本発明の実施例による保安実行プログラムがメインメモリーユニットにロードされた状態を説明する図。
【図９】図９ａ〜図９ｈは、図８の保安実行プログラムの動作を説明するために示した図。
【図１０】図１０は、本発明の一実施例による共通中間言語のための保安提供方法の流れ図。
【図１１】図１１は、本発明の他の実施例による共通中間言語のための保安実行方法の流れ図。
【発明を実施するための形態】
【００２５】
以下、添付の図面を参照し、本発明による共通中間言語のための保安提供装置と方法、及び保安実行装置と方法の好ましい実施例を説明する。参考に、本発明を説明するにあたって、本発明の構成要素を指す用語は、それぞれの構成要素の機能を考慮して命名されたものであるため、本発明の技術的構成要素を限定する意味として理解されてはいけない。
【００２６】
図１は、本発明の一実施例による共通中間言語のための保安提供システムの構成図である。
【００２７】
図１に示すように、本発明による共通中間言語のための保安提供システムは、プログラム開発装置１１０、保安提供装置１２０と、保安実行装置１３０とを含む。ここで、プログラム開発装置１１０、保安提供装置１２０及び保安実行装置１３０は、有無線通信網を通じて連結できる。
【００２８】
プログラム開発装置１１０は、開発者がアプリケーションプログラムを開発するための装置である。実行エンジン、例えば、ユニティエンジンは、アプリケーションプログラムが開発されると、アプリケーションソースコードをコンパイルしてバイナリーコードを生成し、生成されたバイナリーコードと必須リソースライブラリーなどとを含めて実行パッケージ、例えばユニティパッケージを生成する。
【００２９】
保安提供装置１２０は、プログラム開発装置１１０で生成されたユニティパッケージに対して保安を提供するための装置である。保安提供装置１２０は、プログラム開発装置１１０で生成されたユニティパッケージがアップロードされると、共通中間言語ライブラリー、例えばＤＬＬを抽出して、抽出されたＤＬＬを利用して二重暗号化を実行し、モノファイルを、二重暗号化による修正された保安モノファイルで代替した後、再び保安ユニティパッケージを生成する。
【００３０】
保安実行装置１３０は、プログラム、例えばゲームプログラムが実行されるユーザー端末装置である。保安実行装置１３０は、プログラム開発装置１１０または保安提供装置１２０から保安ユニティパッケージをダウンロードしてゲームプログラムを実行することができる。
【００３１】
図１では、プログラム開発装置１１０と保安提供装置１２０がそれぞれ別途の装置として示されているが、これは例示であって、本発明はこれに限定されない。
【００３２】
図２は、図１のプログラム開発装置における通常のユニティパッケージの生成方法の例を示す図であり、図３は、図２に示されたＤＬＬの構造を示す図である。
【００３３】
図２に示したように、ユニティエンジンは、スクリプトファイル、例えば、GameScript1.cs、GameScript2.cs、GameScript3.cs、...GameScriptN.csをコンパイルして、共通中間言語のAssembly-CSharp.dllライブラリーを生成する。そして、ユニティエンジンは、生成されたAssembly-CSharp.dllとユニティエンジン関連リソースライブラリー、例えばMono.Security.dll、UnityEngine.dll、mono.so及びlibunity.soなどとを含んでユニティパッケージを生成する。
【００３４】
図３に示されたように、ＤＬＬの構造は、ＰＥヘッダ(PE header)、セクションテーブル(section table)、テキストセクション(.text section)、ＣＬＩヘッダ(CLI header)、ＢＳＪＢ(stream headers)、ストリーム情報(＃〜stream)とストリングスストリーム(Strings stream)を含む。
【００３５】
ＰＥヘッダーは、ビルド時間、コードサイズなどのＤＬＬ情報を含み、本発明と関連しては、テキストセクション内のＣＬＩヘッダー位置を把握することができる。セクションテーブルは、各セクションの位置情報(RVA)が計算できる情報を含み、本発明と関連しては、テキストセクション位置を把握することができる。テキストセクションは、ＤＬＬを構成する実際の実行コードのある領域であって、実行コードに対する情報を分析するための情報も一緒に有しており、本発明と関連しては、実際の実行コードが含まれていて、このテキストセクションを通じて応用プログラムの動作が決定される。
【００３６】
ＣＬＩヘッダーは、共通中間言語(CLI)で構成されたコードにアクセスするために必要な情報を含み、本発明と関連しては、CLIヘッダーを利用してＢＳＪＢ位置を把握することができる。 ＢＳＪＢは、＃〜stream及びStrings streamの位置情報を有しており、本発明と関連しては、＃〜streamの位置を把握することができる。ストリーム情報は、モジュール、リファレンス、定義、メソッドなど、ｄｌｌ内のクラスに関する情報を含み、特に、メソッド情報は、テキストセクションにおいて、該当名の関数の実行コード位置を含み、本発明と関連しては、各関数の実行コード位置を把握することができる。ストリングスストリームは、クラス名、関数名、フィールド名など、実際の関数名や初期化に使用される値などをストリング型として貯蔵し、ランタイム時も、ストリング値は本領域で参照されたりする。
【００３７】
図４は、本発明による保安モノファイルのイメージ構造体の例を示す図である。
【００３８】
保安モノファイルは、ＣＬＩベースのＣ＃コードを、Windows（登録商標）環境ではなく、運用体制で実行できるようにする一種の仮想マシーンである。図４に示すように、保安モノファイルは、ＤＬＬを実行するとき、メモリーにＤＬＬ全体を一つのイメージとしてロードし、これに基づいてコード領域にアクセスする。そて、コードにアクセスするために、モノファイル内のイメージ構造体８２０にＤＬＬの各パーツの開始メモリーアドレスを貯蔵しておきる。
【００３９】
保安モノファイルは、実際にＤＬＬが暗号化されているため、保安適用のためには、ＤＬＬをオープンして、実際の情報にアクセスする前に、メモリー上にロードされている暗号化されたＤＬＬを復号化して、復号化された値に基づいて、各パートの開始メモリーアドレスをイメージ構造体に貯蔵して置かなければならない。ＤＬＬ全体を一遍に復号化しておけば、メモリー上に、復号化された値がすべてロードされるため、ハッカーがＤＬＬロード中にマジックキーワードやＤＯＳヘッダーなどを利用して、メモリー上で動的に原本ＤＬＬを抽出することができる。ＤＬＬを保護するために、本発明は、ＤＬＬを二重に暗号化して、ロード時点で必要な部分だけを復号化して使用することができることを特徴とする。
【００４０】
図５は、図１の保安提供装置のブロック図を示す図であり、図６は、図５の保安提供装置で再び組み合わされた保安ユニティパッケージを示す図である。
【００４１】
図５に示されたように、保安提供装置１２０は、共通中間言語抽出部５１０、暗号化部５２０、保安ファイル生成部５３０、ファイル代替部５４０及びパッケージ組み合わせ部５５０を含む。
【００４２】
共通中間言語抽出部５１０は、プログラム開発装置１１０からアップロードされたユニティパッケージの複数のライブラリー及びファイルを分析して、共通中間言語ライブラリー、例えば、図２に示されたAssembly-CSharp.dllを抽出する。
【００４３】
暗号化部５２０は、ＤＬＬ、例えば図２に示されたAssembly-CSharp.dll全体に対して、第１の暗号化アルゴリズムで暗号化を行う。第１の暗号化アルゴリズムは、ＤＬＬ全体に対して、例えばＸＯＲキーを使用してＸＯＲ演算を行うことができる。この場合、第１の暗号化アルゴリズムは、ブロック単位でスクランブルして暗号化することができる。
【００４４】
暗号化部５２０は、第１の暗号化アルゴリズムで暗号化されたＤＬＬ全体に対して第２の暗号化アルゴリズムで暗号化を行い、保安中間言語ライブラリーを生成する。第２の暗号化アルゴリズムは、ＤＥＳ、ＡＥＳ、ＲＳＡなどのような暗号化アルゴリズムの少なくとも一つを含むことができる。ここで、第２の暗号化アルゴリズムとしては、暗号化されたＤＬＬ全体に対して暗号化を行うＡＥＳ(Advanced Encryption Standard)アルゴリズムが好ましい。
【００４５】
保安ファイル生成部５３０は、第１の暗号化アルゴリズムの第１の暗号化キー値を暗号化部５２０で第２の暗号化アルゴリズムで暗号化し、保安ファイル、例えば図６に示されたappsealing.soを生成して、また、生成された保安ファイルに第１の暗号化アルゴリズムに係る第１の復号化関数インターフェース及び前記第２の暗号化アルゴリズムに係る第２の復号化関数インターフェイスを貯蔵することができる。
【００４６】
ファイル代替部５４０は、ユニティパッケージの中間言語ライブラリーを、暗号化部５２０で生成された保安中間言語ライブラリー、例えば保安ＤＬＬで代替し、また、ユニティパッケージのモノファイルを、図８に示されたイメージ構造体８２０と、暗号化部５２０に対応する復号化部８３０とを含む保安モノファイルで代替する。
【００４７】
ユニティパッケージ組み合わせ部５５０は、ファイル代替部５４０で代替された保安中間言語ライブラリーの保安ＤＬＬ、例えばAssembly-SECSharp.dllと、保安モノファイル、例えばsecmono.soと、保安ファイルのappsealing .soと、必須リソースライブラリーとを含み、再びユニティパッケージに組換えする。
【００４８】
図７は、図１の保安実行装置のブロック図である。
【００４９】
図７に示されたように、保安実行装置１３０は、ＣＰＵ７１０、メインメモリーユニット７２０、ディスプレイユニット７３０、補助メモリーユニット７４０、入力ユニット７５０及びネットワークユニット７６０を含む。
【００５０】
補助メモリーユニット７４０には、保安提供装置１２０からネットワークユニット７６０を通じてダウンロードされた保安実行パッケージが貯蔵される。ゲームプログラムの保安実行パッケージ、例えば、保安ユニティパッケージの実行が要請されると、ＣＰＵ７１０は、補助メモリーユニット(740)に貯蔵された保安ユニティパッケージをメインメモリーユニット７２０にロードする。一方、ゲームプログラムは、入力ユニット７５０やネットワークユニット(760)を通じて新しい値を入力することもできる。
【００５１】
本発明の実施例による保安実行装置１３０は、パーソナルコンピューター(PC：Personal Computer)、ノートパソコン、タブレット、携帯情報端末(PDA：Personal Digital Assistant)、ゲームコンソール、携帯マルチメディアプレーヤー(PMP：Portable Multimedia Player)、プレイステーションポータブル(PSP：PlayStation Portable)、無線通信端末(Wireless Communication Terminal)、スマートフォン(Smart Phone)、ＴＶ、メディアプレーヤーなどのようなユーザー端末である。
【００５２】
図８は、本発明の実施例による保安実行プログラムがメインメモリーユニットにロードされた状態を説明する図である。図９ａ〜図９ｈは、図８の保安実行プログラムの動作を説明するために示した図である。
【００５３】
図８に示されたように、保安実行プログラムは、実行エンジン部８１０、イメージ構造体８２０及び復号化部８３０を含む。
【００５４】
実行エンジン部８１０は、保安中間言語ライブラリー、例えば保安ＤＬＬを、実行エンジンライブラリーにおける実行エンジンによってメインメモリーユニット７２０にロードする。
【００５５】
イメージ構造体８２０は、メインメモリーユニット７２０に保安中間言語ライブラリーがロードされると、保安中間言語ライブラリーに必要な初期化作業を行って、保安ファイルから第１の暗号化アルゴリズムに係る第１の復号化関数インターフェース及び第２の暗号化アルゴリズムに係る第２の復号化関数インターフェースを持ってくる。
【００５６】
復号化部８３０は、イメージ構造体８２０で持ってきた第２の復号化関数インターフェースを利用して、暗号化された保安中間ライブラリーを復号化し、暗号化された中間言語ライブラリーをメインメモリーユニット７２０の中間言語ライブラリー領域８４０、例えばＤＬＬ領域に保持する。復号化部８３０は、イメージ構造体８２０で持ってきた第１の復号化関数インターフェースを利用して、暗号化された中間言語ライブラリーのヘッダー関連情報を、元の中間言語ライブラリーに復号化して、中間言語ライブラリーのヘッダー関連情報の少なくとも一つの情報を中間言語ライブラリー領域以外のメモリー領域８５０に貯蔵し、中間言語ライブラリー領域以外のメモリー領域８５０に貯蔵されたヘッダー関連情報の位置をイメージ構造体８２０に貯蔵する。復号化部８３０は、中間言語ライブラリー領域以外のメモリー領域８５０にヘッダー関連情報が貯蔵されると、ヘッダー関連情報の貯蔵されている中間言語ライブラリー領域８４０をスクランブルするか、意味のない値で埋める。
【００５７】
以下、図９を参照し、保安実行プログラムの動作をさらに詳細に説明する。
【００５８】
保安実行装置１３０で入力ユニット７５０を通じてアプリケーション、例えばゲームプログラムが実行されると、ＣＰＵ７１０は、ゲームプログラムをメインメモリーユニット７２０にロードする。メインメモリーユニット７２０にロードされたゲームプログラムが実行されると、実行エンジン部８１０によってＤＬＬ、例えばAssembly-SECSharp.dllがロードされる。
【００５９】
ＤＬＬがロードされると、イメージ構造体８２０は、既存のロジックでＤＬＬイメージ復号化に必要な初期化作業を行う。イメージ構造体８２０はまた、暗号化部５２０の第２の暗号化アルゴリズムに係る第２の復号化関数インターフェース、例えばＡＥＳ復号化関数ポインターを持ってきて、第１の暗号化アルゴリズムに係る第１の復号化関数インターフェース、例えばＸＯＲ復号化関数ポインターを持ってくる。
【００６０】
復号化部８３０は、ＭＳ−ＤＯＳヘッダーの特定バイトにＤＬＬが暗号化されているというキーワードが存在すると、ＤＬＬの全体領域を第２の復号化アルゴリズムを用いて復号化する。暗号化部でＡＥＳで暗号化された場合は、ＡＥＳ復号化アルゴリズムを利用して復号化された保安ＤＬＬを得る. この場合、メインメモリーユニットのＤＬＬ領域のＤＬＬは、そのまま第１の暗号化アルゴリズムによって暗号化されたＤＬＬである(図９ａ参照)。
【００６１】
復号化部８３０は、ヘッダー関連情報を、第２の復号化アルゴリズムを利用して元通りに復号化した後、その位置をイメージ構造体８２０に貯蔵して、ヘッダー関連情報領域はスクランブルする(図９ｂ〜図９ｇ参照)。
【００６２】
以下、第２の復号化アルゴリズムを利用してヘッダー関連情報を復号化する過程をさらに具体的に説明する。
【００６３】
復号化部８３０は、まず、ＸＯＲされたＭＳ−ＤＯＳヘッダーをＸＯＲ演算して元通りに復号化して、イメージ構造体８２０にＰＥヘッダーの位置を貯蔵し、ＭＳ−ＤＯＳヘッダーをスクランブルする(図９ｂ参照)。
【００６４】
復号化部８３０は、ＸＯＲされたＰＥヘッダーをＸＯＲ演算して元通りに復号化して、イメージ構造体８２０にテキストセクション内のＣＬＩヘッダー位置を貯蔵する。さらに、復号化部８３０は、ＰＥヘッダーのキーワードを削除し、メモリー上において、キーワード検索によってＤＬＬ領域を見つけ出せないようにする(図９ｃ参照)。
【００６５】
復号化部８３０は、ＸＯＲされたセクションテーブルをＸＯＲ演算して元通りに復号化し、セクションテーブルを参照して、テキストセクションを除いた他のセクション領域を復号化して、 復号化された他のセクション領域をＤＬＬ領域以外のメモリー領域に貯蔵する。復号化部８３０は、イメージ構造体８２０にテキストセクションを除いた他のセクション領域のアドレスを貯蔵し、ＤＬＬ領域内の関連セクションをスクランブルする(図９ｄ参照)。
【００６６】
復号化部８３０は、ＸＯＲされたＣＬＩヘッダーをＸＯＲ演算して元通りに復号化して、復号化されたＣＬＩヘッダーでストリームヘッダーの相対的仮想アドレス(RVA、Relative Virtual Address)を抽出する。さらに、復号化部８３０は、ＣＬＩヘッダーのキーワードを削除し、メモリー上において、キーワード検索でＤＬＬ領域を見つけ出せないようにする(図９ｅ参照)。
【００６７】
復号化部８３０は、ＸＯＲされた各ストリームヘッダーをＸＯＲ演算して元通りに復号化して、復号化されたストリームヘッダーを利用し、＃〜を除いた他のストリームを復号化して、復号化されたストリームをＤＬＬ領域以外のメモリー領域に貯蔵する。復号化部８３０は、イメージ構造体８２０に、ＤＬＬ領域以外のメモリー領域に貯蔵された各ストリームのアドレスを貯蔵して、ＤＬＬの復号化されたストリーム領域をスクランブルする(図９ｆ参照)。
【００６８】
復号化部８３０は、ＸＯＲされた＃〜領域内のテーブルをＸＯＲ演算して元通りに復号化して、復号化された＃〜領域内のテーブル(モジュール(module)、typeref、typedef、メソッド(method)、フィールド(filed)など)をＤＬＬ領域以外のメモリー領域に貯蔵する。復号化部８３０は、イメージ構造体８２０に、ＤＬＬ領域以外のメモリー領域に貯蔵された＃〜領域内のテーブルのアドレスを貯蔵して、ＤＬＬの復号化されたストリーム領域をスクランブルする(図９ｇ参照)。
【００６９】
一方、復号化部８３０は、イメージ構造体８２０に復号化された＃〜領域内のテーブルのヘッダーのみをＤＬＬ領域以外のメモリー領域に貯蔵して、メソッドはＤＬＬ領域にそのまま置くことができる。
【００７０】
復号化部８３０は、イメージ構造体８２０に貯蔵されたヘッダー関連情報を利用して、ＸＯＲされた実行コードのアドレスに貯蔵された実行コードをＸＯＲ演算して、元通りに実行コードを復号化する。
【００７１】
復号化部８３０は、ＸＯＲされたテキストセクション内のコード領域とそれ以外のテキストセクションの領域をＸＯＲ演算して元通りに復号化して、ＤＬＬ内セクションテーブルのコード領域を除いた他の領域及びＰＥヘッダーなどの必要ない領域を、任意の値、すなわち意味のない値で埋める。
【００７２】
図１０は、本発明の一実施例による共通中間言語のための保安提供方法の流れ図である。
【００７３】
保安提供装置１２０は、複数のスクリプトファイルをコンパイルして生成された中間言語ライブラリーと実行エンジンライブラリーとを組み合わせて生成された実行パッケージ、例えば、ユニティパッケージを貯蔵する(S1002)。
【００７４】
中間言語を抽出部５１０は、実行ファイルから前記中間言語ライブラリーを抽出する(S1004)。
【００７５】
暗号化部５２０は、中間言語抽出部５１０で抽出された中間言語ライブラリーの全体に対して第１の暗号化アルゴリズムで暗号化し(S1006)、暗号化された中間言語ライブラリーに対して第２の暗号化アルゴリズムで暗号化して、保安中間言語ライブラリーを生成する(S1008)。
【００７６】
保安ファイル生成部５３０は、暗号化部５２０の第１の暗号化アルゴリズムの暗号化キー値を第２の暗号化アルゴリズムで暗号化して保安ファイルを生成し、生成された保安ファイルを実行パッケージに提供する(S1010)。
【００７７】
ファイル代替部５４０は、実行パッケージの中間言語ライブラリーを、暗号化部５２０で暗号化された保安中間言語ライブラリーで代替し、実行パッケージのモノファイルを、イメージ構造体及び暗号化部５２０に対応する復号化部を含む保安モノファイルで代替する(S1012)。
【００７８】
パッケージ組み合わせ部５５０は、実行エンジンライブラリーと、ファイル代替部５４０で代替された保安中間言語ライブラリーと保安モノファイル、及び保安ファイル生成部５３０で提供された保安ファイルを組み合わせて保安実行パッケージを生成する(S1014)。
【００７９】
図１１は、本発明の他の実施例による共通中間言語のための保安実行方法の流れ図である。
【００８０】
実行エンジン部８１０は、実行エンジンライブラリーにおける動作によって、保安中間言語ライブラリーをメインメモリーユニットにロードする(S1102)。ここで、保安中間言語ライブラリーは、中間言語ライブラリーに対して第１の暗号化アルゴリズムで暗号化されて、暗号化された中間言語ライブラリーに対して第２の暗号化アルゴリズムで暗号化されている。
【００８１】
イメージ構造体８２０は、メインメモリーユニットに保安中間言語ライブラリーがロードされると、保安中間言語ライブラリーに必要な初期化作業を行う(S1104)。イメージ構造体８２０は、保安ファイルから前記第１の暗号化アルゴリズムに係る第１の復号化関数インターフェース及び前記第２の暗号化アルゴリズムに係る第２の復号化関数インターフェイスを持ってくる(S1106)。
【００８２】
復号化部８３０は、イメージ構造体８２０で持ってきた第２の復号化関数インターフェースを利用して、保安中間言語ライブラリーを復号化する(S1108)。暗号化された中間言語ライブラリーは、メインメモリーユニットの中間言語ライブラリー領域に保持される。
【００８３】
復号化部８３０は、イメージ構造体８２０で持ってきた第１の復号化関数インターフェースを利用して、暗号化された中間言語ライブラリーのヘッダー関連情報を元の中間言語ライブラリーに復号化する(S1110)。復号化部８３０は、中間言語ライブラリーのヘッダー関連情報の少なくとも一つの情報を、中間言語ライブラリー領域以外のメモリー領域に貯蔵し(S1112)、中間言語ライブラリー領域以外のメモリー領域に貯蔵されたヘッダー関連情報の位置をイメージ構造体８２０に貯蔵する((S1114)
【００８４】
復号化部８３０は、中間言語ライブラリー領域以外のメモリー領域にヘッダー関連情報が貯蔵されると、ヘッダー関連情報の貯蔵されている中間言語ライブラリー領域をスクランブルするか、意味のない値で埋める(S1116)。
【００８５】
復号化部８３０は、イメージ構造体８２０に貯蔵されたヘッダー関連情報を利用して、ＸＯＲされた実行コードのアドレスに貯蔵された実行コードをＸＯＲ演算し、元通りに復号化する(S1118)。
【００８６】
以上説明した本発明の実施例は、本発明の技術思想を例示的に示したものに過ぎず、本発明の保護範囲は、以下の特許請求の範囲によって解釈されるべきである。また、本発明の属する技術分野で通常の知識を有する者であれば、本発明の本質的な特性から逸脱しない範囲で様々な修正や変更が可能であって、本発明と同等の範囲内にあるすべての技術思想は、本発明の権利範囲に含まれるものと解釈されるべきである。
【符号の説明】
【００８７】
１１０：プログラム開発装置
１２０：保安提供装置
１３０：保安実行装置
５１０：共通中間言語抽出部
５２０：暗号化部
５３０：保安ファイル生成部
５４０：ファイル代替部
５５０：パッケージ組み合わせ部
７１０：ＣＰＵ
７２０：メインメモリーユニット
７３０：ディスプレイユニット
７４０：補助メモリーユニット
７５０：入力ユニット
７６０：ネットワークユニット
８１０：実行エンジン部
８２０：イメージ構造体
８３０：復号化部
８４０：ＤＬＬ領域
８５０：ＤＬＬ以外の領域
【図１】
2019096299.tif 000003
【図２】
2019096299.tif 000004
【図３】
2019096299.tif 000005
【図４】
2019096299.tif 000006
【図５】
2019096299.tif 000007
【図６】
2019096299.tif 000008
【図７】
2019096299.tif 000009
【図８】
2019096299.tif 000010
【図９ａ】
2019096299.tif 000011
【図９ｂ】
2019096299.tif 000012
【図９ｃ】
2019096299.tif 000013
【図９ｄ】
2019096299.tif 000014
【図９ｅ】
2019096299.tif 000015
【図９ｆ】
2019096299.tif 000016
【図９ｇ】
2019096299.tif 000017
【図９ｈ】
2019096299.tif 000018
【図１０】
2019096299.tif 000019
【図１１】
2019096299.tif 000020