(57)【要約】  プログラム保護装置を開示する。プログラム保護装置において、暗号化された保護領域、前記暗号化された保護領域の開始地点を表示する開始地点表示部と前記暗号化された保護領域の終了地点を表示する終了地点表示部を含む保護領域部と、前記暗号化された保護領域を復号化して実行コード部を生成する復号化部と前記実行コード部を呼び出す保護領域呼び出し部を含む保護領域連結部とを含むことを特徴とするプログラム保護装置を提供する。【選択図】図４
2016538640.tif 000002
【特許請求の範囲】
【請求項１】
プログラム保護装置において、
暗号化された保護領域、前記暗号化された保護領域の開始地点を表示する開始地点表示部と、前記暗号化された保護領域の終了地点を表示する終了地点表示部を含む保護領域部と、
前記暗号化された保護領域を復号化して実行コード部を生成する復号化部と、前記実行コード部を呼び出す保護領域呼び出し部を含む保護領域連結部とを含むことを特徴とするプログラム保護装置。
【請求項２】
前記開始地点表示部と前記終了地点表示部は、前記プログラムが実行される際に各地点のアドレスを取得するためのラベル（Label）と、
前記プログラムの実行には支障がなく、暗号化する保護領域の開始地点と終了地点を見つけるためのマーキングコード（Marking Code）とを含むことを特徴とする請求項１に記載のプログラム保護装置。
【請求項３】
前記暗号化された保護領域は、前記プログラムのバイナリコードが生成された後、前記開始地点表示部に含まれているマーキングコードから前記終了地点表示部に含まれているマーキングコードまでのバイナリコードを暗号化したことを特徴とする請求項１に記載のプログラム保護装置。
【請求項４】
前記復号化部は、前記開始地点表示部に含まれているラベルから前記終了地点表示部に含まれているラベルまでのバイナリコードを復号化することを特徴とする請求項１に記載のプログラム保護装置。
【請求項５】
前記復号化部が前記実行コード部を生成する前に前記暗号化された保護領域を保存するための保護領域保管部をさらに含むことを特徴とする請求項１に記載のプログラム保護装置。
【請求項６】
前記保護領域連結部は、
前記実行コード部の実行が終了すると、前記保護領域保管部に保存された暗号化された保護領域を前記実行コード部に保存するためにコピーするコピー部をさらに含むことを特徴とする請求項５に記載のプログラム保護装置。
【請求項７】
前記コピー部は、
前記実行コード部が既に設定された回数を繰り返して実行された後、前記保護領域保管部に保存された暗号化された保護領域を前記実行コード部に保存するためにコピーすることができることを特徴とする請求項６に記載のプログラム保護装置。
【請求項８】
前記保護領域連結部は、前記実行コード部の実行が終了すると、前記実行コード部を暗号化する暗号化部をさらに含むことを特徴とする請求項１に記載のプログラム保護装置。
【請求項９】
前記プログラム保護装置が複数の暗号化された保護領域を含んでいる場合、
前記暗号化された保護領域のそれぞれの呼び出し頻度に基づいて、
前記暗号化された保護領域を保護領域保管部に保存するか、
前記暗号化された保護領域を前記保護領域保管部に保存せずに、前記暗号化された保護領域に対応する実行コード部を実行した後、前記実行コード部を暗号化するかどうかを、前記暗号化された保護領域ごとに選択することができることを特徴とする請求項１に記載のプログラム保護装置。
【請求項１０】
前記実行コード部の無欠性を検証するための無欠性検証部をさらに含むことを特徴とする請求項１に記載のプログラム保護装置。
【請求項１１】
前記無欠性検証部は、前記実行コード部をハッシュ関数に入力して、ハッシュコードを抽出して、既に保存されたハッシュコードと一致するか否かを判別して、一致しない場合は、前記プログラムの実行を中断することを特徴とする請求項１０に記載のプログラム保護装置。
【請求項１２】
プログラム保護方法において、
プログラムバイナリコードのうち、暗号化された保護領域を復号化して実行コードを生成する過程と、
前記実行コードを実行する過程と、
前記実行コードの無欠性を検証する過程と、
前記実行コードの実行が終了すると、前記実行コードを削除して、前記暗号化された保護領域に復元する過程とを含むことを特徴とするプログラム保護方法。
【請求項１３】
前記実行コードを生成する過程は、前記暗号化された保護領域を別の場所に保存する過程を含むことを特徴とする請求項１２に記載のプログラム保護方法。
【請求項１４】
前記暗号化された保護領域に復元する過程は、
前記暗号化された保護領域が別の場所に保管されている場合、別の場所に保存された暗号化された保護領域をコピーするか、あるいは前記実行コードを暗号化する過程を含むことを特徴とする請求項１２に記載のプログラム保護方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム保護装置に関するものである。
【背景技術】
【０００２】
以下に記述される内容は、単に本実施例に係る背景情報のみを提供するだけで、従来技術を構成するものではないことを明らかにして置く。
【０００３】
プログラムの重要なロジック（Logic）やアルゴリズムは、バイナリコードで書かれていても、静的（Static）分析ツールまたは動的（Dynamic）分析ツールを利用して容易に分析することができる。しかし、従来のアンチデバッグ（Anti-Debugging）やアンチダンプ（Anti-Dump）機能は、デバッガ（Debugger）のような動的分析ツールからプログラムを保護することができるが、静的分析ツールによる分析を防止するのは難しい。また、静的分析ツールによるプログラムの分析を事前に予防して根本的に防止することは難しく、静的分析ツールによってプログラムが分析され、プログラムの重要なロジックやアルゴリズムが流出された後には、プログラムが変形されたか否かを後で確認して、事後的に対処するしかないため、プログラムの重要なロジックまたはアルゴリズムを保護するには不十分である。
【０００４】
したがって、静的分析ツールによってプログラムの重要なロジックまたはアルゴリズムが分析されることを防止するとともに、動的分析ツールによる分析も防止することができる方案が必要である。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、プログラムが動的または静的ツールによって分析されることを防止するためのプログラム保護装置を提供することを主な目的としている。
【課題を解決するための手段】
【０００６】
本実施例の一側面によれば、プログラム保護装置において、暗号化された保護領域、前記暗号化された保護領域の開始地点を表示する開始地点表示部と、前記暗号化された保護領域の終了地点を表示する終了地点表示部とを含む保護領域部と、前記暗号化された保護領域を復号化して実行コード部を生成する復号化部と前記実行コード部を呼び出す保護領域呼び出し部を含む保護領域連結部とを含むことを特徴とするプログラム保護装置を提供する。
【０００７】
本実施例の他の側面によれば、プログラム保護方法において、プログラムバイナリコードのうち暗号化された保護領域を復号化して実行コードを生成する過程と、前記実行コードを実行する過程と、前記実行コードの無欠性を検証する過程と、前記実行コードの実行が終了すると、前記実行コードを除去し、前記暗号化された保護領域に復元する過程とを含むことを特徴とするプログラム保護方法を提供する。
【発明の効果】
【０００８】
以上で説明したように、本実施例によれば、プログラムの重要なロジックまたはアルゴリズムを静的（Static）分析ツールまたは動的（Dynamic）分析ツールから保護することができる。つまり、プログラムソースコードをコンパイルしてバイナリコードを生成した後、プログラムの重要なロジックやアルゴリズムを含んでいる少なくとも一つの関数内のバイナリコードを暗号化して、プログラムが実行され、メインメモリにロードされた後でも、暗号化された保護領域が呼び出されるまで、暗号化状態を維持して、暗号化された保護領域を復号化して実行コードを生成して実行し、実行が終了すると、再び暗号化状態に復帰することができるので、静的または動的分析ツールがプログラムを分析しようとしても、暗号化されたバイナリコードのロジックやアルゴリズムを分析することはできない。
【０００９】
プログラムのバイナリコードのうち、暗号化された保護領域は、暗号化された保護領域が呼び出されたとき、はじめて復号化され、実行コードが生成され、この実行コードの実行が終了するとすぐに、暗号化された状態に戻ることができ、実行コードが実行中であるときを除いては、暗号化された状態を維持することができる。このように、プログラムを暗号化状態に維持すれば、メモリをダンプ（Memory Dump）して、プログラムの実行中にメモリ状態を知ることができても、実行コードが暗号化されているため、プログラムの重要なロジックやアルゴリズムなどを保護することができる。
【００１０】
本発明によれば、プログラムの重要なロジックやアルゴリズムと、保護が必要な保護領域を表示するための開始時点と終了地点を含んでおり、プログラムが実行されなくても、プログラムのバイナリコードで暗号化する開始地点と終了地点を見つけて、その部分を暗号化して代替することができるので、プログラムのセキュリティが適用された状態でプログラムを配布することができ、静的分析ツールからプログラムを保護することができる。
【００１１】
一方、暗号化された領域が頻繁に呼び出され、復号化と暗号化を繰り返すことによりプログラムの実行性能が低下される恐れがある場合に、暗号化された領域を復号化する前に、別の保護領域保管部に保存すれば、反復的な暗号化過程を減らすことができ、暗号化された保護領域の呼び出し頻度に応じて、一定の回数までは復号化された状態を維持させることができる。さらに、複数の暗号化された保護領域を含んでいる場合に、各暗号化された保護領域の呼び出し頻度に応じて一部の暗号化された保護領域を別の保護領域保管部に保存するか、あるいは実行コードを再び暗号化するかを選択することができる。
【発明を実施するための最良の形態】
【００１２】
以下、本実施例を添付された図面を参照して詳細に説明する。
【００１３】
本発明の実施例は、C/C++プログラミング言語を含むネイティブコード（Native Code）を生成することができるすべての言語で書かれたプログラムに適用されることができ、特定のオペレーティングシステムやハードウェアに限定されない。
【００１４】
図1は、プログラムを実行するコンピュータの例示図である。
【００１５】
プログラムを実行するためのコンピュータ100は、プログラムを補助記憶装置130に保存しておき、プログラムが実行されると、メインメモリ120にロードして、中央処理装置（Central Process Unit; CPU）110で実行して、プログラムの実行結果をディスプレイ140に表示する。コンピュータ100は、コンピュータ100で実行されるプログラムが重要なロジックまたはアルゴリズムを含む暗号化された保護領域を含んでいる場合、プログラム保護装置として使用することができる。
【００１６】
本発明の実施例に係るプログラム保護装置は、パーソナルコンピュータ（PC：Personal Computer）、ノートブックコンピュータ、タブレット、個人携帯端末（PDA：Personal Digital Assistant）、ゲームコンソール、携帯型マルチメディアプレーヤー（PMP：Portable Multimedia Player）、プレイステーションポータブル（PSP：PlayStation Portable）、無線通信端末（Wireless Communication Terminal）、スマートフォン（Smart Phone）、TV、メディアプレーヤーなどのユーザー端末である。本発明の実施例に係るプログラム保護装置は、応用サーバーとサービスサーバーなどのサーバー端末である。本発明の実施例に係るプログラム保護装置は、それぞれ、（i）各種機器や有線・無線通信網との通信を行うための通信モデムなどの通信装置、（ii）プログラムを実行するためのデータを保存するためのメモリ、（iii）プログラムを実行して演算および制御するためのマイクロプロセッサなどを備える様々な装置を意味することができる。少なくとも一実施例によれば、メモリはラム（Random Access Memory：RAM）、ロム（Read Only Memory：ROM）、フラッシュメモリ、光ディスク、磁気ディスク、ソリッドステートディスク（Solid State Disk：SSD）などのコンピュータで読み取り可能な記録/保存媒体である。少なくとも一実施例によれば、マイクロプロセッサは、明細書に記載された動作と機能を1つ以上選択的に実行するようにプログラムすることができる。少なくとも一実施例によれば、マイクロプロセッサは、全体または部分的に特定の構成の特定用途向け半導体（application specific integrated circuit：ASIC）などのハードウェアで具現される。
【００１７】
図2a、図2bおよび図2cは、本実施例に係る保護領域連結部と保護領域部の構成図である。
【００１８】
図2aにおいて、保護領域連結部210は、復号化部212、保護領域呼び出し部214、コピー部/暗号化部216を含み、図2bにおいて、保護領域部220は、開始地点表示部222、保護領域224、終了地点表示部226を含んでいる。図2bの保護領域部220は、プログラムをコンパイルして、保護領域に対するセキュリティの適用のための暗号化を実行する前の状態である。図2cにおいて、保護領域部220は、図2bの保護領域224を暗号化して、暗号化された保護領域228に転換した状態を示している。
【００１９】
保護領域連結部210と保護領域部220をC/C++プログラミング言語で作成する場合、マクロ関数（Macro Function）を利用すれば、容易にライブラリ化することができ、開発コストを削減することができる。プログラムのバイナリコードで一定の領域を表示するための開始地点と終了地点を表示するラベル（Label）とマーキングコード（Marking Code）を挿入して、プログラムの実行中に、暗号化されたバイナリコードの一部を復号化して実行コードを生成し、この実行コードを実行するように呼び出す過程は複雑で専門的な技術を要求するが、定型化することができるので、これをマクロ関数で作成することができる。
【００２０】
復号化部212は、保護領域部220の暗号化された保護領域228を復号化して、元の実行コードである保護領域224と同じ実行コード部を生成し、暗号化された保護領域228を代替する。このとき復号化部212は、暗号化された保護領域228を、別の場所に保存することができる。保護領域呼び出し部214は、復号化部212で保護領域部220の暗号化された保護領域228を復号化して生成した実行コード部を呼び出すことにより、実行コード部が実行されるようにする。
【００２１】
実行コードの実行が終了すると、保護領域224を再び暗号化された状態に戻しておく必要がある。復号化部212で暗号化された保護領域228を復号化する前に暗号化された保護領域228を別の場所に保管しておいた場合は、コピー部/暗号化部216は、再び、別の場所に保管されている暗号化された保護領域を再びコピーして、プログラムが暗号化状態を維持するようにすることができる。暗号化された保護領域228を、別の場所に保管していない場合は、実行コード部を再びコピー部/暗号化部216で暗号化することができる。
【００２２】
しかし、実行コードを再び暗号化する場合は、暗号化された保護領域228が繰り返して呼び出される場合、復号化と暗号化過程が繰り返して実行されるため、プログラムの実行性能を落とす原因になり得る。暗号化された保護領域228が繰り返して呼び出される場合には、暗号化された保護領域228を、別の場所に保管することが望ましい。この場合、別の暗号化過程がなくても、保護領域を暗号化状態に維持させることができる。さらに、繰り返して呼び出されても既に設定された一定の回数内では、実行コード状態を維持できるようにして、性能への影響を最小限に抑えることができる。
【００２３】
保護領域部220で、開始地点表示部222と終了地点表示部226は、保護領域の開始地点と終了地点を表示する。開始地点表示部222と終了地点表示部226は、ラベル（Label）とマーキングコード（Marking Code）を含むことができる。ラベルは、プログラムが実行中に復号化部212で復号化する領域の開始地点と終了地点のアドレスを取得するのに使用される。マーキングコードは、プログラムの実行には支障がないアセンブリコードで構成されることがあり、プログラムのソースコードをコンパイルした後、暗号化ツールを使用して保護領域224を暗号化するために、保護領域224の開始地点と終了地点を見つけることができるようにする。
【００２４】
一方、暗号化ツールで保護領域を暗号化することは、特定の形態のプラットフォームに限らないため、開発用の装備で実行することができ、サーバーでも実行することができる。サーバーで暗号化を実行しようとする場合は、開発用の装備は、暗号化が必要な保護領域をサーバーに送信して暗号化を要請し、暗号化された結果を受信する。
【００２５】
図3a及び図3bは、本実施例に係る暗号化保護領域を含むプログラムがメモリにロードされた状態の構成図である。
【００２６】
図3aは、暗号化保護領域と、暗号化保護領域を連結するための保護領域連結部210を含むプログラムがメインメモリ120で実行中である状態の構成図である。保護領域連結部210で保護領域部220を呼び出して、暗号化保護領域228を復号化して、実行コード部を生成するまでは、図3aの状態が維持される。
【００２７】
図3bは、図3aの構成に加えて、保護領域保管部310をさらに含んでいる。
【００２８】
保護領域保管部310は、プログラムが実行されてすぐ生成することができ、例えば、復号化部212で暗号化保護領域228を復号化する前に生成することができる。そして、暗号化された保護領域228が復号化される前に暗号化された保護領域228を保護領域保管部310に保存することができる。保護領域保管部310に暗号化された保護領域228を保管しておくと、再暗号化処理せずにプログラムを暗号化状態に戻すことができ、保護領域部220が頻繁に繰り返して呼び出される場合にも、暗号化と復号化によるシステム性能への影響を減らすことができる。
【００２９】
図4は、本実施例に係る保護領域が呼び出された後、保護領域の無欠性を検証する状態の構成図である。
【００３０】
プログラムは、暗号化された保護領域228を復号化して実行コード部400を生成して暗号化された保護領域228を代替し、実行コード部400を実行する。実行コード部400は、暗号化された保護領域228が暗号化される前のコードと同じ状態である。無欠性検証部410は、実行コード部400の実行を終了した直後、実行コード部400が実行されている間に実行コード部400が変形されたか否かを検証する。本実施例では無欠性の検証は、ハッシュ関数（Hash Function）を利用して説明するが、無欠性の検証方法は、必ずしもこれに限定されず、様々な方法で可能である。
【００３１】
ハッシュ関数を利用して無欠性を検証するためには、図2bの保護領域224に対するハッシュコードを予め抽出して、別のファイルやプログラムの内部に保管しておく必要がある。そして、プログラムの実行中に、暗号化された保護領域228を復号化して実行コード部400を生成し、暗号化された保護領域228を代替した後、この実行コード部400を実行した後に、実行コード部400の実行中に実行コードの変形があったのかを確認するために実行終了直後に実行コードをハッシュ関数に入力してハッシュコードを抽出し、既に保管されていたハッシュコードと比較して、一致するか否かを判別する。判別の結果、一致していない場合は、実行中の実行コードが変形されたものなので、プログラムの実行を中断する。ハッシュ関数は、入力値に応じて固有のハッシュコード（Hash Code）を抽出するので、無欠性の検証に使用することができる。無欠性の検証にはMD5、SHA、Checksumなどを含む様々なハッシュ関数を使用することができる。
【００３２】
図5は、本実施例に係るプログラムの保護領域が実行される過程のフローチャートである。
【００３３】
アプリケーションプログラムは補助記憶装置130に保存されており、メインメモリ120にロードされて実行される（S510）。アプリケーションプログラムが実行されている間に暗号化された保護領域228を呼び出す必要がある場合は、保護領域連結部210が先に呼び出され（S520）、復号化部212は、暗号化保護領域228を保護領域保管部310に保管する（S530）。暗号化保護領域228は、保護領域保管部310に保管されている場合もあれば、保管されていない場合もある。保管されていない場合は、復号化された実行コードの実行が終了した後、再暗号化する必要がある。復号化部212は、暗号化保護領域を復号化して（S540）、保護領域224と同じ実行コード部400を生成して実行する（S550）。
【００３４】
無欠性検証部410は、実行コードの実行が終了した直後に実行コードが変形されたか否かを確認するために、無欠性の検証を行い（S560）、プログラムが変形された場合は、プログラムの実行を中断する。無欠性の検証は、ハッシュ検証を介して行うことができる。保護領域部220が暗号化される前の図2bでの保護領域224をハッシュ関数（Hash Function）に入力して、ハッシュコード（Hash Code）を抽出して、抽出されたハッシュコードを別のファイルやプログラムの内部に保存しておくことができる。無欠性の検証を実行するために、暗号化保護領域を復号化して生成した実行コードをハッシュ関数に入力してハッシュコードを抽出し、事前に保存したハッシュコードと一致するか否かを判別し、一致しない場合は、プログラムが変形されたものと判断する。プログラムが変形されていないと判断された場合、保護領域保管部310に保管しておいた暗号化された保護領域をコピーして元の場所に保存する（S570）。
【００３５】
以上の説明は、本実施例の技術思想を例示的に説明したにすぎないものであって、本実施例の属する技術分野で通常の知識を有する者であれば、本実施例の本質的な特性から逸脱しない範囲で様々な修正および変形が可能である。したがって、本実施例は、本実施例の技術思想を限定するためのものではなく説明するためのものであり、これらの実施例により、本実施例の技術思想の範囲が限定されるものではない。本実施例の保護範囲は、特許請求の範囲によって分析されるべきであり、それと同等の範囲内にあるすべての技術思想は、本実施例の権利範囲に含まれるものと分析されるべきである。
【図面の簡単な説明】
【００３６】
【図１】図1は、プログラムを実行するコンピュータの例示図である。
【図２ａ】図2aは、本実施例に係る保護領域連結部と保護領域部の構成図である。
【図２ｂ】図2bは、本実施例に係る保護領域連結部と保護領域部の構成図である。
【図２ｃ】図2cは、本実施例に係る保護領域連結部と保護領域部の構成図である。
【図３ａ】図3aは、本実施例に係る暗号化保護領域を含むプログラムがメモリにロードされた状態の構成図である。
【図３ｂ】図3bは、本実施例に係る暗号化保護領域を含むプログラムがメモリにロードされた状態の構成図である。
【図４】図4は、本実施例に係る保護領域が呼び出された後、保護領域の無欠性を検証する状態の構成図である。
【図５】図5は、本実施例に係るプログラムを保護する過程のフローチャートである。
【図１】
2016538640.tif 000003
【図２ａ】
2016538640.tif 000004
【図２ｂ】
2016538640.tif 000005
【図２ｃ】
2016538640.tif 000006
【図３ａ】
2016538640.tif 000007
【図３ｂ】
2016538640.tif 000008
【図４】
2016538640.tif 000009
【図５】
2016538640.tif 000010
【国際調査報告】
2016538640.tif 000011
2016538640.tif 000012
2016538640.tif 000013
2016538640.tif 000014