(57)【特許請求の範囲】
【請求項１】
アンドロイドアプリケーションの実行コードを入力される入力部と、
前記入力された実行コードを分析して、アプリケーションの偽造・変造の攻撃から保護せねばならない重要コードと、前記重要コード以外の一般コードとに区分するコード分析部と、
前記重要コードをＣコードに変換させてネイティブコードを生成するコードコンバータ部と、
前記ネイティブコード及び前記一般コードを難読化する難読化部と、
前記難読化されたネイティブコードに偽造・変造探知コードを追加して暗号化した後、ローディングルーチンを追加させて自己書換え技法が適用されたネイティブコードを生成する自己コード保護部と、
前記自己書換え技法が適用されたネイティブコードと前記難読化された一般コードとを結合するコード結合部と、
を含むコード難読化装置。
【請求項２】
前記コード結合部によって結合された前記自己書換え技法が適用されたネイティブコードと前記難読化された一般コードとをクライアントに伝送する伝送部をさらに含む請求項１に記載のコード難読化装置。
【請求項３】
前記自己書換え技法が適用されたネイティブコードは、ＣＰＵ環境で動作し、前記難読化された一般コードは、ダルビック仮想マシンで実行される請求項２に記載のコード難読化装置。
【請求項４】
前記コード分析部は、
既保存された重要コードモデルを用いて、前記入力された実行コードとマッチングされる実行コードを前記重要コードと判断する請求項３に記載のコード難読化装置。
【請求項５】
前記ローディングルーチンは、
前記暗号化されたネイティブコードが実行される時、前記ネイティブコードの暗号化された部分をデコーディングする請求項４に記載のコード難読化装置。
【請求項６】
コード難読化装置を利用したコード難読化方法において、
前記コード難読化装置はアンドロイドアプリケーションの実行コードを入力される段階と、
前記コード難読化装置は前記入力された実行コードを分析して、アプリケーションの偽造・変造の攻撃から保護せねばならない重要コードと、前記重要コード以外の一般コードとに区分する段階と、
前記コード難読化装置は前記重要コードをＣコードに変換させてネイティブコードを生成する段階と、
前記コード難読化装置は前記ネイティブコード及び前記一般コードを難読化する段階と、
前記コード難読化装置は前記難読化されたネイティブコードに偽造・変造探知コードを追加して暗号化した後、ローディングルーチンを追加させて自己書換え技法が適用されたネイティブコードを生成する段階と、
前記コード難読化装置は前記自己書換え技法が適用されたネイティブコードと前記難読化された一般コードとを結合する段階と、
を含むコード難読化方法。
【請求項７】
前記コード難読化装置はコード結合部によって結合された前記自己書換え技法が適用されたネイティブコードと前記難読化された一般コードとをクライアントに伝送する段階をさらに含む請求項６に記載のコード難読化方法。
【請求項８】
前記自己書換え技法が適用されたネイティブコードは、ＣＰＵ環境で動作し、前記難読化された一般コードは、ダルビック仮想マシンで実行される請求項７に記載のコード難読化方法。
【請求項９】
前記実行コードを分析して区分する段階は、
既保存された重要コードモデルを用いて、前記入力された実行コードとマッチングされる実行コードを前記重要コードと判断する請求項８に記載のコード難読化方法。
【請求項１０】
前記ローディングルーチンは、
前記暗号化されたネイティブコードが実行される時、前記ネイティブコードの暗号化された部分をデコーディングする請求項９に記載のコード難読化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コード難読化装置及びその方法に係り、より詳細には、アンドロイドアプリケーションの偽造・変造の防止のための自己書換え基盤の難読化装置及びその方法に関する。
【背景技術】
【０００２】
既存の難読化装置及びその方法は、ジャバ仮想マシンで動作するアプリケーションを対象にしてアプリケーションを構成するコード構造を変更することによって、難読化を適用する。ここで、難読化が適用されたアプリケーションは、難読化適用前と同様に、ジャバ仮想マシンで動作する命令語集合と目的ファイル構造とで構成される。
【０００３】
しかし、既存の難読化装置または方法による場合、仮想マシンで動作する管理されるコード（Ｍａｎａｇｅｄ  Ｃｏｄｅ）が有する逆工学脆弱性は、難読化以後にも同様に残されるという問題点がある。
【０００４】
管理されるコードが有する逆工学脆弱性は、次のようであるが、コンパイルされた目的コードにクラス名、メンバ変数名、メソッド名などソースコード情報が含まれ、コードが明示的に構造化されており、逆工学を通じて特定のロジックを探すか、分析することが容易である。
【０００５】
アンドロイドアプリケーションも、前記ジャバマシンで動作するアプリケーションと類似しているようにダルビック仮想マシン（Ｄａｌｖｉｋ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）で動作する管理されるコードで構成され、ＤＥＸ（Ｄａｌｖｉｋ  Ｅｘｅｃｕｔａｂｌｅ）ファイル形式で保存される。したがって、アンドロイドアプリケーションは、同一に管理されるコードの逆工学脆弱性が存在する。
【０００６】
本発明の背景となる技術は、特許文献１に記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】韓国登録特許第１０−１２３４５９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明が解決しようとする課題は、難読化の対象となるアプリケーションの重要コード部分をＣＰＵ命令語集合で再構成し、重要コードを、管理されるコードからネイティブコード（Ｎａｔｉｖｅ  Ｃｏｄｅ）に変換することによって、管理されるコードの逆工学脆弱性の１つである構造化されたコード情報を除去して、相対的に逆工学を難解に作って逆工学を防止する。
【０００９】
また、ネイティブコードに変換された重要コードを保護するために、自己書換え基盤のコード保護技法と偽造・変造探知技術とを適用することによって、逆工学分析に対する抵抗性を向上させる。
【課題を解決するための手段】
【００１０】
前記のような目的を果たすための本発明の一実施形態によるアプリケーションコード難読化装置は、アンドロイドアプリケーションの実行コードを入力される入力部と、前記入力された実行コードを分析して、アプリケーションの偽造・変造の攻撃から保護せねばならない重要コードと、前記重要コード以外の一般コードとに区分するコード分析部と、前記重要コードをＣコードに変換させてネイティブコードを生成するコードコンバータ部と、前記ネイティブコード及び前記一般コードを難読化する難読化部と、前記難読化されたネイティブコードに偽造・変造探知コードを追加して暗号化した後、ローディングルーチンを追加させて自己書換え技法が適用されたネイティブコードを生成する自己コード保護部と、前記自己書換え技法が適用されたネイティブコードと前記難読化された一般コードとを結合するコード結合部と、を含む。
【００１１】
また、前記コード結合部によって結合された前記自己書換え技法が適用されたネイティブコードと前記難読化された一般コードとをクライアントに伝送する伝送部をさらに含みうる。
【００１２】
また、前記自己書換え技法が適用されたネイティブコードは、ＣＰＵ環境で動作し、前記難読化された一般コードは、ダルビック仮想マシンで実行可能である。
【００１３】
また、前記コード分析部は、既保存された重要コードモデルを用いて、前記入力された実行コードとマッチングされる実行コードを前記重要コードと判断する。
【００１４】
また、前記ローディングルーチンは、前記暗号化されたネイティブコードが実行される時、前記コードの暗号化された部分をデコーディングすることができる。
【００１５】
また、前記偽造・変造探知コードは、コードの偽造ないし変造の行為からネイティブコードを保護することができる。
【００１６】
本発明の一実施形態によるコード難読化方法は、アンドロイドアプリケーションの実行コードを入力される段階と、前記入力された実行コードを分析して、アプリケーションの偽造・変造の攻撃から保護せねばならない重要コードと、前記重要コード以外の一般コードとに区分する段階と、前記重要コードをＣコードに変換させてネイティブコードを生成する段階と、前記ネイティブコード及び前記一般コードを難読化する段階と、前記難読化されたネイティブコードに偽造・変造探知コードを追加して暗号化した後、ローディングルーチンを追加して自己書換えネイティブコードを生成する段階と、前記自己書換えネイティブコードと前記難読化された一般コードとを結合する段階と、を含む。
【発明の効果】
【００１７】
本発明のコード難読化装置及びその方法によれば、難読化の対象となるアプリケーションの重要コード部分をＣＰＵ命令語集合で再構成し、重要コードを、管理されるコードからネイティブコードに変換することによって、管理されるコードの逆工学脆弱性の１つである構造化されたコード情報を除去して、相対的に逆工学を難解にして逆工学を防止することができる。
【００１８】
また、ネイティブコードに変換された重要コードを保護するために、自己書換え基盤のコード保護技法と偽造・変造探知技術とを適用することによって、逆工学分析に対する抵抗性を向上させる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施形態によるコード難読化装置の構成図である。
【図２】本発明の実施形態によるコード難読化方法のフローチャートである。
【図３】本発明の実施形態による難読化及び暗号化されたアプリケーションファイルの構成図である。
【発明を実施するための形態】
【００２０】
以下、添付した図面を参照して、当業者が容易に実施できるように本発明の実施形態を詳しく説明する。しかし、本発明は、さまざまな異なる形態で具現され、ここで説明する実施形態に限定されるものではない。そして、図面で本発明を明確に説明するために、説明と関係のない部分は省略し、明細書全体を通じて類似した部分については、類似した図面符号を付する。
【００２１】
まず、本発明のコード難読化装置について説明する。
【００２２】
図１は、本発明の実施形態によるコード難読化装置の構成図である。
【００２３】
図１を参照すれば、本発明の実施形態によるコード難読化装置１００は、入力部１１０、コード分析部１２０、コードコンバータ部１３０、難読化部１４０、自己コード保護部１５０、及びコード結合部１６０を含み、伝送部１７０をさらに含みうる。
【００２４】
入力部１１０は、アンドロイドアプリケーションの実行コードを入力される。ここで、入力部は、キーパッド形態として入力インターフェース部が備えられうる。
【００２５】
コード分析部（Ｃｏｄｅ  Ｓｔｒｕｃｔｕｒｅ  Ａｎａｌｙｚｅｒ）１２０は、ＡＰＫ（Ａｎｄｒｏｉｄ  Ｐａｃｋａｇｅ）ファイル内に圧縮されている実行ファイルであるＤＥＸファイルを分析して、ユーザ入力によって重要コードを既存コードから分離する。
【００２６】
コードコンバータ部（Ｄａｌｖｉｋ  ｔｏ  Ｃ  Ｃｏｄｅ  Ｃｏｎｖｅｒｔｅｒ）１３０は、一般コードと分離された重要コードとを分析して、Ｃコードで再構成してマネージドコード（Ｍａｎａｇｅｄ  Ｃｏｄｅ）をネイティブコードに変換する。
【００２７】
難読化部（Ｏｂｆｕｓｃａｔｏｒ）１４０は、ネイティブコード難読化部（Ｎａｔｉｖｅ  Ｃｏｄｅ  Ｏｂｆｕｓｃａｔｏｒ）１４１とマネージドコード難読化部（Ｍａｎａｇｅｄ  Ｃｏｄｅ  Ｏｂｆｕｓｃａｔｏｒ）１４２とを含みうる。ネイティブコード難読化部１４１は、ネイティブコードに変換された重要コードに対してネイティブ環境で難読化技法を適用する。また、マネージドコード難読化部１４２は、一般コードに対してマネージド環境で難読化技法を適用する。
【００２８】
自己コード保護部（Ｓｅｌｆ  Ｃｏｄｅ  Ｐｒｏｔｅｃｔｏｒ）１５０は、難読化されたネイティブコードを静的分析から保護するために偽造・変造探知コード（Ｔａｍｐｅｒ−Ｄｅｔｅｃｔｉｏｎ  Ｃｏｄｅ）を追加し、自己書換え基盤のコード保護技法を適用してコードを暗号化する。そして、自己コード保護部１５０は、前記暗号化されたネイティブコードにローディングルーチンを追加して自己書換えネイティブコードを生成する。
【００２９】
コード結合部１６０は、難読化された一般コードと自己書換えネイティブコードとを再びＡＰＫファイルでパッケージングする。
【００３０】
伝送部１７０は、コード結合部１６０によってパッケージングされたコード（自己書換えネイティブコードと難読化された一般コード）をクライアントに伝送する。この際、伝送部１７０は、パッケージングされたコードを直接クライアントに伝達することもでき、アンドロイドマーケットなどにアップロードを行って、クライアントがダウンロードされるようにする。
【００３１】
以下、図２及び図３を通じて本発明の実施形態によるコード難読化方法について説明する。
【００３２】
図２は、本発明の実施形態によるコード難読化方法のフローチャートであり、図３は、本発明の実施形態による難読化されて結合されたアプリケーションファイルの構成図である。
【００３３】
図２を参照すれば、入力部１１０は、アンドロイドアプリケーションの実行コードを入力される（ステップＳ２１０）。ここで、実行コードが入力される過程は、入力インターフェースを通じてユーザがアンドロイドアプリケーションファイルであるＡＰＫファイルを指定する行為、指定されたＡＰＫファイルの圧縮を解除する行為、アンドロイドアプリケーションの実行ファイルであるＤＥＸファイルを指定する行為を含みうる。
【００３４】
アンドロイドアプリケーションは、拡張子がａｐｋ形態であるファイルで配布される。ここで、ａｐｋは、Ａｎｄｒｏｉｄ  Ｐａｃｋａｇｅを意味するが、アンドロイドアプリケーションのビルド過程でさまざまなファイルのコンパイルまたはリンク過程を経ながら、圧縮ファイル形態の拡張子がａｐｋであるファイル（以下、ＡＰＫファイル）が生成される。実行コードは、アンドロイドアプリケーションファイルであるＡＰＫファイル内に圧縮されているｄｅｘ拡張子を有する実行ファイル（以下、ＤＥＸファイル）のコードを意味する。
【００３５】
コード分析部１２０は、入力部１１０に入力された実行コードを分析して、アプリケーションの偽造・変造の攻撃から保護せねばならない重要コードと、前記重要コードを除く一般コードとに区分する（ステップＳ２２０）。
【００３６】
コード区分のためにコード分析部１２０は、既保存された重要コードモデルを用いて、前記入力された実行コードで重要コードモデルとマッチングされるコードを重要コードと判断する。ここで、入力された実行コードは、ＤＥＸファイルを構成するコードである。また、重要コードとは、ユーザの観点で攻撃者の偽造・変造の行為から保護せねばならないコードを言う。重要コードと反対される概念として重要コード以外のコードを一般コードと称する。
【００３７】
コードコンバータ部１３０は、一般コードと分離された重要コードとを分析して、Ｃコードで再構成してマネージドコードをネイティブコードに変換する（ステップＳ２３０）。
【００３８】
変換されたネイティブコードは、ＥＬＦ（Ｅｘｅｃｕｔａｂｌｅ  ａｎｄ  Ｌｉｎｋａｂｌｅ  Ｆｏｒｍａｔ）形態で保存される。ＥＬＦ形態は、コードの構造が明示的に区分されず、ＤＥＸ形態に比べて、コードの偽造・変造のための動的分析または静的分析に相対的に容易に露出されない長所がある。また、ＥＬＦ形態は、命令語構成がダルビック（Ｄａｌｖｉｋ）命令語に比べて、機械語に近い低いレベルのＣＰＵ命令語で構成されており、攻撃者の動的分析及び静的分析を難しくする。
【００３９】
ネイティブコード難読化部１４１は、ネイティブコードに変換された重要コードに対してネイティブ環境で適用可能な難読化技法を適用する（ステップＳ２４０）。
【００４０】
自己コード保護部１５０は、難読化されたネイティブコードを静的分析から保護するために偽造・変造探知コードを追加し、自己書換え基盤のコード保護技法を適用してコードを暗号化する。そして、自己コード保護部１５０は、前記暗号化されたネイティブコードにローディングルーチンを追加して自己書換えネイティブコードを生成する（ステップＳ２５０）。
【００４１】
その他に、ネイティブコードに追加された偽造・変造探知コードは、動的にアプリケーションの偽造・変造を検査することによって、攻撃者のコード追加または変造の行為を探知することができる。偽造・変造探知コードによって攻撃者の偽造・変造の行為が探知される場合、偽造・変造探知コードは、実行状態にあるアプリケーションを強制終了させることによって、攻撃者のコード分析の行為を中止させることができる。また、偽造・変造探知コードは、自己書換え技法によって保護されて攻撃者の偽造・変造探知ルーチンの迂回可能性を減少させる。
【００４２】
自己コード保護部１５０によって追加されたローディングルーチンは、特定コードが実行される時、特定コードの暗号化部分をデコーディングする。すなわち、暗号化された特定コードは、実行時に呼び出されるルーチンのみ一時的にデコーディングされる。したがって、暗号化されたコードが露出される時間的な範囲を減らすことによって、攻撃者によるコードの偽造・変造の行為を防止することができる。
【００４３】
マネージドコード難読化部１４２は、マネージドコードに変換された一般コードに対してマネージド環境で適用可能な難読化技法を適用する（ステップＳ２５５）。すなわち、難読化部１４０は、ハードウェア的にネイティブコード難読化部１４１とマネージドコード難読化部１４２とに分離され、ネイティブ環境とマネージド環境という互いに異なる環境で重要コードまたは一般コードを分離して難読化する。
【００４４】
そして、コード結合部１６０は、図３のように難読化された一般コード（Ｏｂｆｕｓｃａｔｅｄ  Ｇｅｎｅｒａｌ  Ｃｏｄｅ）に該当するマネージドコードセクション（Ｍａｎａｇｅｄ  Ｃｏｄｅ  Ｓｅｃｔｉｏｎ）とローディングルーチン（Ｌｏａｄｉｎｇ  Ｒｏｕｔｉｎｅ）とが追加された自己書換え重要コードに該当するネイティブコードセクション（Ｎａｔｉｖｅ  Ｃｏｄｅ  Ｓｅｃｔｉｏｎ）でＡＰＫファイルをパッケージングする（ステップＳ２６０）。
【００４５】
図３で難読化されたアンドロイドアプリケーションファイルのコード部分が、マネージドコードセクションとネイティブコードセクションとに区分される。マネージドコードセクションは、難読化部１４０によって難読化された一般コードを含み、ネイティブコードセクションは、暗号化されたコード（Ｅｎｃｒｙｐｔｅｄ  Ｃｏｄｅ）及びローディングルーチンを含む。
【００４６】
自己コード保護部１５０によって暗号化されたコードは、ネイティブコードが暗号化された秘密コード（Ｓｅｃｒｅｔｅ  Ｃｏｄｅ）、ネイティブコードに含まれて伝送される秘密データ（Ｓｅｃｒｅｔｅ  Ｄａｔａ）、及び偽造・変造防止コード（Ｔａｍｐｅｒ−Ｄｅｔｅｃｔｉｏｎ  Ｃｏｄｅ）を含む。
【００４７】
伝送部１７０は、コード結合部１６０によって結合された自己書換えネイティブコードと難読化された一般コードとをクライアントに伝送する（ステップＳ２７０）。ここで、伝送されるファイルの形態は、クライアントからダウンロードされて設置することができる形態になり、ネイティブコードと一般コードとを含むＡＰＫファイルであり得る。
【００４８】
このように、本発明の実施形態によれば、難読化の対象となるアプリケーションの重要コード部分をＣＰＵ命令語集合で再構成し、重要コードを、管理されるコードからネイティブコードに変換することによって、管理されるコードの逆工学脆弱性の１つである構造化されたコード情報を除去して、相対的に逆工学を難解に作って逆工学を防止することができる。
【００４９】
また、ネイティブコードに変換された重要コードを保護するために、自己書換え基盤のコード保護技法と偽造・変造探知技術とを適用することによって、逆工学分析に対する抵抗性を向上させる。
【００５０】
以上、本発明について実施形態を中心に説明した。当業者ならば、本発明の本質的な特性から外れない範囲内で変形された形態として具現可能であるということを理解できるであろう。したがって、開示された実施形態は、限定的な観点ではなく、説明的な観点で考慮されなければならない。したがって、本発明の範囲は、前述した実施形態に限定されず、特許請求の範囲に記載の内容及びそれと同等な範囲内にある多様な実施形態が含まれるように解釈しなければならない。
【産業上の利用可能性】
【００５１】
本発明は、コード難読化装置及びその方法関連の技術分野に適用可能である。
【図１】
0005996809.tif 000002
【図２】
0005996809.tif 000003
【図３】
0005996809.tif 000004