(57)【特許請求の範囲】
【請求項１】
アプリケーションに用いられるコードを入力される入力部と、
前記入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コード、及び前記重要コードを呼び出すための重要コード呼び出し部を含む一般コードに分離するコード分離部と、
前記重要コードを暗号化し、前記重要コードのそれぞれのアドレス情報を保存している重要コード連結部のアドレス情報を挿入する暗号化部と、
前記一般コードにダミーコードを挿入して、前記重要コード呼び出し部が、前記ダミーコードを呼び出すように変換し、前記重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を前記重要コードに挿入し、前記アプリケーション実行時に、前記重要コード呼び出し部が、前記重要コードを呼び出すようにする重要コード呼び出し部変換部を前記重要コードに挿入する制御部と、
前記一般コードと重要コードとを結合して、前記アプリケーションを生成するコード結合部と、を含むアプリケーション難読化装置。
【請求項２】
前記重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをネイティブ環境でコンパイルする第１コンパイル部と、
前記重要コード呼び出し部が、ダミーコードを呼び出すように変換された一般コードをマネージド環境でコンパイルして実行ファイルを生成する第２コンパイル部と、をさらに含む請求項１に記載のアプリケーション難読化装置。
【請求項３】
前記暗号化部は、
前記コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化する請求項２に記載のアプリケーション難読化装置。
【請求項４】
前記一般コードに前記重要コードと連動してローディングするための開始ルーチンを追加するコード変換部をさらに含む請求項３に記載のアプリケーション難読化装置。
【請求項５】
前記重要コード及び一般コードで定義された重要識別子を、意味のない文字または文字列に置き換えてスクランブルするスクランブラーをさらに含む請求項４に記載のアプリケーション難読化装置。
【請求項６】
前記アプリケーションを伝送されたクライアントが前記開始ルーチンを用いて、前記アプリケーションを実行する場合、
ＤＥＸファイル形態の前記一般コードが最適化されたＯＤＥＸファイル形態に変換されてダルビック仮想マシン（ＤＶＭ）にローディングされる請求項５に記載のアプリケーション難読化装置。
【請求項７】
前記暗号化された重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部、及び重要コードが復号化され、
前記ベクトルテーブル生成部は、前記ベクトルテーブルを生成し、
前記重要コード呼び出し部変換部は、前記重要コード呼び出し部が前記重要コードを呼び出すように変換させ、
前記重要コード呼び出し部は、前記ベクトルテーブルに記録されたベクトル値を通じて重要コードを呼び出せば、前記重要コード連結部は、前記ベクトルテーブルと前記重要コードのアドレス情報とを用いて、前記ベクトル値に対応する重要コードを呼び出して実行させる請求項６に記載のアプリケーション難読化装置。
【請求項８】
アプリケーション難読化装置を利用したアプリケーション難読化方法において、
前記アプリケーション難読化装置は前記アプリケーションに用いられるコードを入力される段階と、
前記アプリケーション難読化装置は前記入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コード、及び前記重要コードを呼び出すための重要コード呼び出し部を含む一般コードに分離する段階と、
前記アプリケーション難読化装置は前記重要コードを暗号化し、前記重要コードのそれぞれのアドレス情報を保存している重要コード連結部のアドレス情報を挿入する段階と、
前記アプリケーション難読化装置は前記一般コードにダミーコードを挿入して、前記重要コード呼び出し部が、前記ダミーコードを呼び出すように変換し、前記重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を前記重要コードに挿入する段階と、
前記アプリケーション難読化装置は前記アプリケーション実行時に、前記重要コード呼び出し部が、前記重要コードを呼び出すようにする重要コード呼び出し部変換部を前記重要コードに挿入する段階と、
前記アプリケーション難読化装置は前記一般コードと重要コードとを結合して、前記アプリケーションを生成する段階と、
を含むアプリケーション難読化方法。
【請求項９】
前記アプリケーション難読化装置は前記重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをネイティブ環境でコンパイルする段階と、
前記アプリケーション難読化装置は前記重要コード呼び出し部が、ダミーコードを呼び出すように変換された一般コードをマネージド環境でコンパイルして実行ファイルを生成する段階と、をさらに含む請求項８に記載のアプリケーション難読化方法。
【請求項１０】
前記アプリケーション難読化装置は、
前記コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化する請求項９に記載のアプリケーション難読化方法。
【請求項１１】
前記アプリケーションを伝送されたクライアントが開始ルーチンを用いて、前記アプリケーションを実行する場合、
ＤＥＸファイル形態の前記一般コードが最適化されたＯＤＥＸファイル形態に変換されてダルビック仮想マシン（ＤＶＭ）にローディングされる請求項１０に記載のアプリケーション難読化方法。
【請求項１２】
前記アプリケーションを伝送されたクライアントが開始ルーチンを用いて、前記アプリケーションを実行する場合、
前記暗号化された重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部、及び重要コードが復号化される段階と、
前記ベクトルテーブル生成部は、前記ベクトルテーブルを生成する段階と、
前記重要コード呼び出し部変換部は、前記重要コード呼び出し部が前記重要コードを呼び出すように変換させる段階と、
前記重要コード呼び出し部は、前記ベクトルテーブルに記録されたベクトル値を通じて重要コードを呼び出せば、前記重要コード連結部は、前記ベクトルテーブルと前記重要コードのアドレス情報とを用いて、前記ベクトル値に対応する重要コードを呼び出して実行させる段階と、を含む請求項１１に記載のアプリケーション難読化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションコード難読化装置及びその方法に係り、より詳細には、自己書換え基盤の難読化技法を利用したアプリケーションコード難読化装置及びその方法に関する。
【背景技術】
【０００２】
Ｊａｖａ言語対象の既存のアプリケーション難読化装置及びその方法は、ジャバ仮想マシン（Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）で動作するアプリケーションを対象にしてアプリケーションを構成するコード構造を変更することによって、難読化を適用する。ここで、難読化が適用されたアプリケーションは、難読化適用前と同様に、ジャバ仮想マシンで動作する命令語集合と目的ファイル構造とで構成される。
【０００３】
しかし、既存の難読化装置または方法による場合、仮想マシンで動作するマネージドコード（Ｍａｎａｇｅｄ  Ｃｏｄｅ）が有する逆工学脆弱性は、難読化以後にも同様に残されて問題になる。
【０００４】
マネージドコードが有する逆工学脆弱性は、次のようであるが、コンパイルされた目的コードにクラス名、メンバ変数名、メソッド名などソースコード情報が含まれ、コードが明示的に構造化されており、逆工学を通じて特定のロジックを探すか、分析することが容易である。
【０００５】
アンドロイドアプリケーションも、前記ジャバマシンで動作するアプリケーションと類似しているようにダルビック仮想マシン（Ｄａｌｖｉｋ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）で動作するマネージドコードで構成され、ＤＥＸ（Ｄａｌｖｉｋ  Ｅｘｅｃｕｔａｂｌｅ）ファイル形式で保存される。したがって、アンドロイドアプリケーションも、ジャバアプリケーションと同一のマネージドコードの逆工学脆弱性を内包している。
【０００６】
本発明の背景となる技術は、特許文献１に記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】韓国登録特許第１０−１２３４５９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明が解決しようとする課題は、アンドロイドアプリケーション保護のための自己書換え基盤のアプリケーションコード難読化装置及びその方法を提供するところにある。
【課題を解決するための手段】
【０００９】
前記のような目的を果たすための本発明の一実施形態によるアプリケーションコード難読化装置は、アプリケーションに用いられるコードを入力される入力部と、前記入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コード、及び前記重要コードを呼び出すための重要コード呼び出し部を含む一般コードに分離するコード分離部と、前記重要コードを暗号化し、前記重要コードのそれぞれのアドレス情報を保存している重要コード連結部のアドレス情報を挿入する暗号化部と、前記一般コードにダミーコードを挿入して、前記重要コード呼び出し部が、前記ダミーコードを呼び出すように変換し、前記重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を前記重要コードに挿入し、前記アプリケーション実行時に、前記重要コード呼び出し部が、前記重要コードを呼び出すようにする重要コード呼び出し部変換部を前記重要コードに挿入する制御部と、前記一般コードと重要コードとを結合して、前記アプリケーションを生成するコード結合部と、を含む。
【００１０】
前記重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをネイティブ環境でコンパイルする第１コンパイル部と、前記重要コード呼び出し部が、ダミーコードを呼び出すように変換された一般コードをマネージド環境でコンパイルして実行ファイルを生成する第２コンパイル部と、をさらに含みうる。
【００１１】
前記暗号化部は、前記コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化することができる。
【００１２】
前記コード変換部は、前記一般コードに前記重要コードと連動してローディングするための開始ルーチン（Ｓｔａｒｔｕｐ  Ｒｏｕｔｉｎｅ）を追加することができる。
【００１３】
前記重要コード及び一般コードで定義された重要識別子（ｓｅｎｓｉｔｉｖｅ  ｉｄｅｎｔｉｆｉｅｒ）を、意味のない文字または文字列に置き換えてスクランブルするスクランブラーをさらに含みうる。
【００１４】
前記アプリケーションを伝送されたクライアントが前記開始ルーチンを用いて、前記アプリケーションを実行する場合、ＤＥＸファイル形態の前記一般コードが最適化されたＯＤＥＸ（Ｏｐｔｉｍｉｚｅｄ  ＤＥＸ）ファイル形態に変換されてダルビック仮想マシン（ＤＶＭ）にローディングされうる。
【００１５】
前記暗号化された重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部、及び重要コードが復号化され、前記ベクトルテーブル生成部は、前記ベクトルテーブルを生成し、前記重要コード呼び出し部変換部は、前記重要コード呼び出し部が前記重要コードを呼び出すように変換させ、前記重要コード呼び出し部は、前記ベクトルテーブルに記録されたベクトル値を通じて重要コードを呼び出せば、前記重要コード連結部は、前記ベクトルテーブルと前記重要コードのアドレス情報とを用いて、前記ベクトル値に対応する重要コードを呼び出して実行させることができる。
【００１６】
本発明の他の実施形態によれば、アプリケーション難読化装置を利用したアプリケーション難読化方法において、前記アプリケーションに用いられるコードを入力される段階と、前記入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コード、及び前記重要コードを呼び出すための重要コード呼び出し部を含む一般コードに分離する段階と、前記重要コードを暗号化し、前記重要コードのそれぞれのアドレス情報を保存している重要コード連結部のアドレス情報を挿入する段階と、前記一般コードにダミーコードを挿入して、前記重要コード呼び出し部が、前記ダミーコードを呼び出すように変換し、前記重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を前記重要コードに挿入する段階と、前記アプリケーション実行時に、前記重要コード呼び出し部が、前記重要コードを呼び出すようにする重要コード呼び出し部変換部を前記重要コードに挿入する段階と、前記一般コードと重要コードとを結合して、前記アプリケーションを生成する段階と、を含む。
【発明の効果】
【００１７】
本発明によれば、アプリケーションを構成するコードを重要コードと一般コードとに分離して互いに異なる環境で暗号化を適用することによって、既存のマネージドコードに存在する逆工学脆弱性を補完して、アプリケーションの偽造ないし変造に対する保安性を高めうる。
【００１８】
また、重要コードを呼び出すための重要コード呼び出し部がアプリケーションの非実行時には、ダミーコードを呼び出す形態で保存されており、アプリケーションの実行時に、自己書換え技法を用いて実際に重要コードを呼び出すように変換するために、攻撃者の静的及び動的分析を防止する。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施形態によるアプリケーション難読化装置の構成図である。
【図２】本発明の実施形態によるアプリケーション難読化方法のフローチャートである。
【図３】本発明の実施形態による重要コードのファイル構造を説明する図面である。
【図４】本発明の実施形態による難読化された重要コードのファイル構造を説明する図面である。
【図５】本発明の実施形態によるクライアント端末がアプリケーションを実行させる過程を説明するフローチャートである。
【図６Ａ】本発明の実施形態によるクライアント端末が難読化されたアプリケーションを実行する過程を説明する図面である。
【図６Ｂ】本発明の実施形態によるクライアント端末が難読化されたアプリケーションを実行する過程を説明する図面である。
【図７】本発明の実施形態によるベクトルテーブルを説明する図面である。
【発明を実施するための形態】
【００２０】
以下、添付した図面を参照して、当業者が容易に実施できるように本発明の実施形態を詳しく説明する。しかし、本発明は、さまざまな異なる形態で具現され、ここで説明する実施形態に限定されるものではない。そして、図面で本発明を明確に説明するために、説明と関係のない部分は省略し、明細書全体を通じて類似した部分については、類似した図面符号を付する。
【００２１】
まず、本発明の実施形態によるアプリケーション難読化装置について説明する。
【００２２】
図１は、本発明の実施形態によるアプリケーション難読化装置を説明する図面である。
【００２３】
図１を参照すれば、本発明の実施形態によるアプリケーション難読化装置１００は、入力部１１０、コード分離部１２０、コード変換部１３０、スクランブラー１４０、暗号化部１４５、制御部１５０、及びコード結合部１６０を含み、コンパイル部１７０をさらに含みうる。
【００２４】
まず、入力部１１０は、アプリケーションのコードを入力される。ここで、入力されるコードは、アプリケーションを生成するためのコードであって、ソースコード（Ｓｏｕｒｃｅ  Ｃｏｄｅ）またはマネージドコード形式のコードであり得る。
【００２５】
コード分離部１２０は、入力部１１０から入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コードと、前記重要コード以外の一般コードとに分離する。
【００２６】
コード変換部１３０は、コード分離部１２０から分離された重要コードをマネージドコードからネイティブコード（Ｎａｔｉｖｅ  Ｃｏｄｅ）に変換する。
【００２７】
スクランブラー１４０は、重要コードと一般コードとで定義された重要識別子を、意味のない文字または文字列に置き換えてスクランブル（Ｓｃｒａｍｂｌｅ）する。
【００２８】
暗号化部１４５は、コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化する。
【００２９】
制御部１５０は、一般コードにダミーコードを挿入して重要コード呼び出し部がダミーコードを呼び出すように変換させる。また、重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を重要コードに挿入する。そして、制御部１５０は、アプリケーション実行時に、重要コード呼び出し部が、重要コードを呼び出すようにする重要コード呼び出し部変換部を重要コードに挿入する。
【００３０】
コード結合部１６０は、暗号化された一般コードと重要コードとを結合してクライアントに配布が可能な形態の結合ファイルを生成する。本発明による一実施形態としてアンドロイドアプリケーションの場合、拡張子がａｐｋ（Ａｎｄｒｏｉｄ  ｐａｃｋａｇｅ）であるファイルが結合ファイルに該当する。
【００３１】
コンパイル部１７０は、重要ファイルをコンパイルするためにネイティブ環境で動作する第１コンパイル部１７１と、一般コードをコンパイルするためにマネージド環境で動作する第２コンパイル部１７２とを含みうる。
【００３２】
第１コンパイル部１７１は、重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをネイティブ環境でコンパイルする。そして、第２コンパイル部１７２は、重要コード呼び出し部がダミーコードを呼び出すように変換された一般コードをマネージド環境でコンパイルして実行ファイルを生成する。
【００３３】
以下、本発明の実施形態によるアプリケーション難読化方法について説明する。
【００３４】
図２は、本発明の実施形態によるアプリケーション難読化方法のフローチャートである。
【００３５】
入力部１１０は、アプリケーションのコードを入力される（ステップＳ２１０）。入力部１１０は、キーパッド形態として入力インターフェース部が備えられうる。入力されるコードは、ソースコードであるか、ジャバ仮想マシン（ＪＶＭ）またはダルビック仮想マシン（ＤＶＭ）で実行可能なマネージドコード形式のコードであり得る。
【００３６】
コード分離部１２０は、入力部１１０から入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コードと、前記重要コード以外の一般コードとに分離する（ステップＳ２２０）。
【００３７】
ここで、一般コードは、一般コード領域で重要コードまたは重要コードが変換されたネイティブコードを呼び出すことができる重要コード呼び出し部（Ｓｅｎｓｉｔｉｖｅ  Ｍｅｔｈｏｄ  Ｃａｌｌｉｎｇ  Ｒｏｕｔｉｎｅ）を含む。重要コードとは、ユーザの観点で攻撃者の偽造ないし変造の行為から保護せねばならないコードを表わす。重要コードと反対される概念として重要コード以外のコードを一般コードと称する。核心コードは、重要コードと同義語として用いられる。
【００３８】
コード区分のためにコード分離部１２０は、既保存された重要コードモデルを用いて、前記入力された実行コードで重要コードモデルとマッチングされるコードを重要コードと判断する。
【００３９】
コード変換部１３０は、コード分離部１２０から分離された重要コードをマネージドコードからネイティブコードに変換する（ステップＳ２３０）。すなわち、コード変換部１３０は、マネージドコード形態の重要コードをネイティブコード形態に変換する。ネイティブコードは、ＪＶＭまたはＤＶＭで実行されるマネージドコードとは異なって、ＣＰＵ環境で実行され、マネージドコードよりもバイナリコードに近いコードである。
【００４０】
本発明による一実施形態として、コード変換部１３０は、重要コードをＣコードに変換することができる。以下、本発明の実施形態で、重要コードは、ネイティブコードまたはＣコードと同義語として用いられる。
【００４１】
重要コードは、ＥＬＦ（Ｅｘｅｃｕｔａｂｌｅ  ａｎｄ  Ｌｉｎｋａｂｌｅ  Ｆｏｒｍａｔ）形態でネイティブコードセクションに保存される。ＥＬＦ形態は、コードの構造が明示的に区分されず、ＤＥＸ形態に比べて、コードの偽造ないし変造のための動的分析または静的分析に相対的に容易に露出されない長所がある。また、ＥＬＦ形態は、命令語構成がダルビック（Ｄａｌｖｉｋ）命令語に比べて、機械語に近い低いレベルのＣＰＵ命令語で構成されており、攻撃者の動的分析及び静的分析を難しくする。
【００４２】
また、コード変換部１３０は、一般コードに重要コードと連動してローディングするための開始ルーチンを追加することができる（ステップＳ２３５）。本発明による一実施形態として、開始ルーチンは、ＪＮＩ（Ｊａｖａ  Ｎａｔｉｖｅ  Ｉｎｔｅｒｆａｃｅ）関数を含みうる。
【００４３】
スクランブラー１４０は、重要コードと一般コードとで定義された重要識別子を、意味のない文字または文字列に置き換えてスクランブルする（ステップＳ２４０）。識別子変換（Ｓｃｒａｍｂｌｅ  Ｉｄｅｎｔｉｆｉｅｒ）は、コード内の識別子（Ｉｄｅｎｔｉｆｉｅｒ）を１つまたはそれ以上のアルファベット羅列に変えて逆工学を難しくする配置難読化の一種である。
【００４４】
Ｓ２４０のように、スクランブル過程を経れば、重要コードは、図４の左側図面のようなネイティブファイル構造を有する。
【００４５】
図３は、本発明の実施形態による重要コードのファイル構造を説明する図面であり、図４は、本発明の実施形態による難読化された重要コードのファイル構造を説明する図面である。
【００４６】
図４の左側図面を見れば、Ｅｘｐｏｒｔ  Ｔａｂｌｅは、複数の重要コード（重要コードＡ、重要コードＢ、…）のそれぞれのアドレスを含んでいるが、それぞれのアドレスは、ネイティブコードセクションにライブラリ形態で保存された当該重要コード（重要コードＡ、重要コードＢ、…）にそれぞれ対応する。
【００４７】
次いで、暗号化部１４５は、文字列に対して暗号化を行う（ステップＳ２４５）。すなわち、暗号化部１４５は、ネイティブ環境で重要コード内の文字列に対して保存場所（Ｄａｔａ  Ｓｔｏｒａｇｅ）変換、エンコーディング（Ｄａｔａ  Ｅｎｃｏｄｉｎｇ）変換、順序（Ｄａｔａ  Ｏｒｄｅｒｉｎｇ）変換のような資料難読化技法を使って文字列を暗号化することができる。
【００４８】
そして、暗号化部１４５は、図４の右側図面のようにネイティブコードセクションにコード形態の重要コード連結部を生成するが、この際、重要コード連結部は、図４の左側図面のＥｘｐｏｒｔ  Ｔａｂｌｅに定義されたネイティブコードのそれぞれに対するアドレス情報を含む。
【００４９】
そして、暗号化部１４５は、図４の左側図面のＥｘｐｏｒｔ  Ｔａｂｌｅに定義されたネイティブコードのそれぞれに対するアドレスを併合（Ｍｅｒｇｅ）して、図４の右側図面のように重要コード連結部のアドレスを生成する（ステップＳ２５０）。
【００５０】
その結果、図４の右側図面のようにＥｘｐｏｒｔ  Ｔａｂｌｅには、重要コード連結部の位置を表わすアドレス情報が保存される。
【００５１】
次いで、制御部１５０は、Ｊａｖａコード形態の一般コードにダミーコード（Ｄｕｍｍｙ  ｃｏｄｅ、ゴミコード）を挿入し（ステップＳ２５５）、重要コードを呼び出すための重要コード呼び出し部がダミーコードを呼び出すように重要コード呼び出し部を変換する（ステップＳ２６０）。このように、ダミーコードを呼び出すように変換することによって、攻撃者から静的攻撃を防止し、アプリケーション実行時に、自己書換え技法を通じて重要コードを呼び出すように変換して正常な実行にする。
【００５２】
そして、制御部１５０は、重要コードにベクトルテーブルを生成するためのベクトルテーブル生成部を挿入する（ステップＳ２７０）。ここで、ベクトルテーブルは、今後アプリケーションがクライアント端末でローディングされる時、重要コードを呼び出すために使われる。
【００５３】
次いで、制御部１５０は、重要コードに重要コード呼び出し部変換部を挿入する（ステップＳ２７５）。重要コード呼び出し部変換部は、アプリケーション実行時に、ダミーコードを呼び出す重要コード呼び出し部が、重要コードを呼び出すように変換して正常にアプリケーションを実行させる。
【００５４】
次いで、第１コンパイル部１７１は、重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをコンパイルし、暗号化部１４５は、コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化することができる（ステップＳ２８０）。
【００５５】
図３は、Ｓ２８０過程を通じて難読化された重要コードの構造を示すものであって、図３から見るように、重要コードは、重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部と共に暗号化され、復号化ルーチンが結合された構造を有する。
【００５６】
第２コンパイル部１７２は、Ｓ２６０段階を通じて重要コード呼び出し部がダミーコードを呼び出すように変換された一般コードをコンパイルして実行ファイルを生成する（ステップＳ２９０）。本発明による実施形態として、実行ファイルは、ＪＶＭまたはＤＶＭで動作するファイルであり、具体的には、ＤＥＸファイルである。
【００５７】
コード結合部１６０は、それぞれ暗号化された一般コードと重要コードとを結合して結合ファイル形態の難読化されたアプリケーションを生成する（ステップＳ２９５）。そして、コード結合部１６０によって生成されたアプリケーションは、アプリケーションストア、アンドロイドマーケットなどにアップロードされ、今後ネットワーク連結されたクライアント端末にダウンロードされる。
【００５８】
以下、図５ないし図７を通じて、アプリケーションをダウンロードされたクライアント端末が、アプリケーションを実行させる過程について説明する。
【００５９】
図５は、本発明の実施形態によるクライアント端末がアプリケーションを実行させる過程を説明するフローチャートであり、図６Ａ及び図６Ｂは、本発明の実施形態によるクライアント端末が難読化されたアプリケーションを実行する過程を説明する図面である。図７は、本発明の実施形態によるベクトルテーブルを説明する図面である。
【００６０】
まず、クライアント端末は、アンドロイドマーケットやアプリケーションストアを通じて難読化されたアプリケーションをダウンロードされる（ステップＳ５１０）。
【００６１】
そうすると、難読化されたアプリケーションがクライアント端末に設けられるが、難読化されたアプリケーションは、ダルビック仮想マシンで動作する一般コード部分とネイティブ環境で動作するＥＬＦ形態の重要コード部分とに分けられる。
【００６２】
ここで、一般コード部分は、図６Ａのような構造を有する。すなわち、一般コード部分は、ＤＥＸファイル形態でなされ、ダミーコードと複数の重要コード呼び出し部、開始ルーチンを含む。そして、前述したように、重要コード呼び出し部は、攻撃者の静的分析の防止のためにダミーコードを呼び出すように設計される。
【００６３】
ユーザがダウンロードされたアプリケーションを実行させれば（ステップＳ５２０）、クライアントの制御部（図示せず）は、図６Ｂのように一般コードに含まれた開始ルーチンを用いて、一般コードをダルビック仮想マシン（ＤＶＭ）にローディングさせる。ここで、一般コードは、ＤＥＸファイル形態で直ちに実行されず、ＤＥＸ最適化（Ｏｐｔｉｍｉｚａｔｉｏｎ）過程を経てＯＤＥＸファイル形態に変換されてダルビック仮想マシン（ＤＶＭ）にローディングされる。
【００６４】
このような最適化過程を通じてＤＥＸファイルでは、文字列データであるデスクリプタを利用した重要コード呼び出し方式が、ＯＤＥＸファイルでは、Ｖｔａｂｌｅという資料構造のアドレスを通じる重要コード呼び出し方式に変換される。
【００６５】
一方、ユーザがダウンロードされたアプリケーションを実行させれば、重要コードは、ＣＰＵが制御するメモリ領域にローディングされる。
【００６６】
そうすると、重要コードに含まれた復号化ルーチンは、ネイティブコード自己書換え技法を用いて暗号化された重要コード部分（重要コードＡ、重要コードＢ、…、重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部）を復号化させる（ステップＳ５３０）。
【００６７】
このように重要コード部分が復号化されれば、ベクトルテーブル生成部は、ベクトルテーブルを生成する（ステップＳ５４０）。ここで、ベクトルテーブルは、重要コード呼び出し部と呼び出される重要コードとの間を連結するベクトル情報の集合であって、図７のように動的ベクトルのそれぞれは、呼び出される重要コードとそれぞれマッチングされる。図７によるベクトルテーブルでは、動的ベクトルＶ１は、重要コードＡと、動的ベクトルＶ２は、重要コードＣと、動的ベクトルＶ３は、重要コードＢとそれぞれマッチングされることを例とした。
【００６８】
次いで、重要コード呼び出し部変換部は、ダミーコードを呼び出していた重要コード呼び出し部が重要コードを呼び出すように重要コード呼び出し部を変換させる（ステップＳ５５０）。すなわち、重要コード呼び出し部変換部は、生成されたベクトルテーブルに対応して、各重要コード呼び出し部のベクトル値を変換させる。図７と関連して例を挙げれば、アプリケーション実行前にダミーコードを呼び出していた重要コード呼び出し部（Ａ＿ｄｕｍｍｙ）が、重要コードＡを呼び出すようにｍｅｒｇｅｄ＿Ｖ１のような方式に変換される。
【００６９】
このように、重要呼び出し部変換部が、ダミーコードを呼び出していた重要コード呼び出し部を、重要コードを呼び出すように変換させることができる理由は、ＯＤＥＸファイルで重要コード呼び出し時に使われるＶｔａｂｌｅとアドレスを、ダミーコード用で重要コード用Ｖｔａｂｌｅとアドレスに変換するためである。
【００７０】
すなわち、重要コード呼び出し部変換部が実行されれば、メモリに積載されたＯＤＥＸで変換された重要コード呼び出し部を検索して、自己書換え技法を通じて、ダミーコード呼び出し用Ｖｔａｂｌｅとアドレスを、重要コード呼び出し用Ｖｔａｂｌｅとアドレスに変換し、呼び出しに必要なベクトル値も変換する。この際、自己書換え技法によって復元された重要コード呼び出し部で使われる呼び出しベクトルは、動的に生成されたベクトルテーブルによって決定され、ベクトルテーブルは、ネイティブコードで構成された生成者によって生成される。したがって、ベクトルマッピングは、毎実行時ごとに変わり、これを生成するための別途のサーバを要求せず、経済的な長所がある。
【００７１】
したがって、本発明の実施形態によれば、ＯＤＥＸに含まれているＶｔａｂｌｅを用いて、アプリケーション実行前にダミーコードを呼び出した重要コード呼び出し部が重要コードを呼び出すように変換される。
【００７２】
このように、復元された重要コード呼び出し部は、ベクトルテーブルに記録されたベクトル値を通じて重要コードを呼び出し、重要コード連結部は、ベクトルテーブルを通じて因子に越える来るベクトル値にマッピングされる重要コードを呼び出す（ステップＳ５６０）。すなわち、重要コード呼び出し部が、ｍｅｒｇｅｄ＿Ｖ１のような方式で重要コードＡを要請すれば、重要コード連結部は、ベクトルテーブルを参照して、Ｖ１に対応する重要コードＡを呼び出す。
【００７３】
このように、重要コード呼び出し部変換部によって重要コード呼び出し部の変換が完了して、アプリケーションに含まれたあらゆるルーチンは正常な実行が可能になる。
【００７４】
このように、本発明の実施形態によれば、重要コードは、ＥＬＦ形態で保存され、重要コードの構造が明示的に区分されず、ＤＥＸ形態に比べて、相対的に少ない分析情報を露出させるようになり、命令語構成がダルビック命令語に比べて、低いレベルのＣＰＵ命令語で構成されて、攻撃者の分析を妨害する。また、攻撃者は、低いレベルのＣＰＵ命令語と明示的ではない重要コード構造によって分析複雑度が増加し、ダルビック仮想マシン（Ｄａｌｖｉｋ  ＶＭ）のマネージド環境とネイティブ環境とで動作するコードを、同時に分析しなければならず、かつ各環境に合う難読化技法を適用しなければならないので、コード分析を難解にする。また、重要コードを呼び出す重要コード呼び出し部がアプリケーションの非実行時には、ダミーコードを呼び出す形態で保存されており、アプリケーションの実行時に、自己書換え技法を用いて実際に重要コードを呼び出すように変換するために、攻撃者の静的及び動的分析を防止する。
【００７５】
以上、本発明について実施形態を中心に説明した。当業者ならば、本発明の本質的な特性から外れない範囲内で変形された形態として具現可能であるということを理解できるであろう。したがって、開示された実施形態は、限定的な観点ではなく、説明的な観点で考慮されなければならない。したがって、本発明の範囲は、前述した実施形態に限定されず、特許請求の範囲に記載の内容及びそれと同等な範囲内にある多様な実施形態が含まれるように解釈しなければならない。
【産業上の利用可能性】
【００７６】
本発明は、自己書換え基盤のアプリケーションコード難読化装置及びその方法関連の技術分野に適用可能である。
【図１】
0005996810.tif 000002
【図２】
0005996810.tif 000003
【図３】
0005996810.tif 000004
【図４】
0005996810.tif 000005
【図５】
0005996810.tif 000006
【図６Ａ】
0005996810.tif 000007
【図６Ｂ】
0005996810.tif 000008
【図７】
0005996810.tif 000009