(57)【要約】本発明は、識別子変換を用いたコード難読化装置及び方法に関するものであって、本発明の一実施形態によるコード難読化装置は、応用プログラムファイルを圧縮解除してダルビック実行ファイルを抽出する抽出部と、抽出されたダルビック実行ファイルのバイトコードを分析するコード分析部と、難読文字の種類、個数及び挿入位置を選択する制御部と、選択された難読文字をバイトコードに挿入して、バイトコードの識別子を変換させる識別子変換部と、を含む。このように、本発明によれば、画面上に表現されないか、他の文字と同一の文字で表現される難読文字を用いて識別子を変換することによって、静的分析基盤の逆工学抵抗性を増加させることができる。【選択図】図４
2017513077.tif 000002
【特許請求の範囲】
【請求項１】
応用プログラムファイルを圧縮解除してダルビック実行ファイルを抽出する抽出部と、
前記抽出されたダルビック実行ファイルのバイトコードを分析するコード分析部と、
難読文字の種類、個数及び挿入位置を選択する制御部と、
前記選択された難読文字を前記バイトコードに挿入して、前記バイトコードの識別子を変換させる識別子変換部と、を含む識別子変換を用いたコード難読化装置。
【請求項２】
前記抽出部は、
前記応用プログラムファイルを圧縮解除してＤＥＸファイルのバイトコードを抽出する請求項１に記載の識別子変換を用いたコード難読化装置。
【請求項３】
前記難読文字は、
画面上に表現されないか、他の文字と同一の文字で表現されるが、互いに異なるユニコード値を有する文字を示す請求項１に記載の識別子変換を用いたコード難読化装置。
【請求項４】
前記識別子変換部は、
前記バイトコードのクラス名、メソッド名、フィールド名のうちの少なくとも１つに前記難読文字を挿入する請求項１に記載の識別子変換を用いたコード難読化装置。
【請求項５】
コード難読化装置を用いた応用プログラムのコード難読化方法において、
応用プログラムファイルを圧縮解除してダルビック実行ファイルを抽出する段階と、
前記抽出されたダルビック実行ファイルのバイトコードを分析する段階と、
難読文字の種類、個数及び挿入位置を選択する段階と、
前記選択された難読文字を前記バイトコードに挿入して、前記バイトコードの識別子を変換させる段階と、を含む識別子変換を用いたコード難読化方法。
【請求項６】
前記ダルビック実行ファイルを抽出する段階は、
前記応用プログラムファイルを圧縮解除してＤＥＸファイルのバイトコードを抽出する請求項５に記載の識別子変換を用いたコード難読化方法。
【請求項７】
前記難読文字は、
画面上に表現されないか、他の文字と同一の文字で表現されるが、互いに異なるユニコード値を有する文字を示す請求項５に記載の識別子変換を用いたコード難読化方法。
【請求項８】
前記識別子を変換させる段階は、
前記バイトコードのクラス名、メソッド名、フィールド名のうちの少なくとも１つに前記難読文字を挿入する請求項５に記載の識別子変換を用いたコード難読化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、見分けが難解な識別子変換を用いたコード難読化装置及び方法に係り、より詳細には、逆工学攻撃から応用プログラムを保護する見分けが難解な識別子変換を用いたコード難読化装置及び方法に関する。
【背景技術】
【０００２】
ジャバプログラムは、バイトコードに翻訳され、バイトコードは、特定機械に従属しないジャバ仮想マシン（Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）を用いるコードなので、ジャバ仮想マシンを支援する機械は、如何なる機械でもプログラムを実行することができる。バイトコードに翻訳されたコードには、ジャバソースコードの情報がそのまま含まれており、これにより、バイトコードからジャバソースコードへのデコンパイルが容易になされる。また、基本的にジャバ言語で具現されたアンドロイドアプリケーションも、デコンパイルすれば、本来ソースコードと類似したソースコードに容易に復元が可能である。
【０００３】
一般的に、アンドロイド応用プログラムパッケージ（ＡＰＫ、Ａｎｄｒｏｉｄ  ａｐｐｌｉｃａｔｉｏｎ  ｐａｃｋａｇｅ）ファイルをデコンパイルすれば、ソースコードを把握し、逆工学やクラッキングが可能となる。このような問題を解決するために、ソースコードに難読化技術を適用し、難読化技術が適用されれば、デコンパイルでソースコードを把握することができなくなる。これを通じて、逆工学、クラッキングなどを防止することができる。
【０００４】
ここで、難読化とは、悪意的なソフトウェア逆工学からプログラムのコードを保護するために、特定方式に変換して、バイナリやソースコードが逆工学によって分析されることを難しくするための技術を意味する。
【０００５】
難読化は、対象となるプログラムのコンパイルされた形態によって、大きくソースコード難読化と、バイナリ難読化とに区分される。ソースコード難読化は、Ｃ、Ｃ＋＋、ＪＡＶＡなどのプログラムソースコードを、分かりにくい形態に変える技術を意味し、バイナリ難読化は、Ｃ、Ｃ＋＋、ＪＡＶＡなどがコンパイルされた後に生成されたバイナリを、逆工学を通じて、分かりにくい形態に変える技術を意味する。特に、バイトコードと呼ばれるＪＡＶＡのコンパイルされたコードは、ネイティブコードに比べて、逆工学に必要な情報が多く含まれており、容易に逆工学が可能である。これにより、バイトコードに難読化技術が多く適用されている。
【０００６】
難読化技術としては、主に識別子変換、コントロールフロー、文字列暗号化、ＡＰＩ隠匿、及びクラス暗号化などが主に使われる。識別子変換は、クラス、フィールドまたはメソッドの名前を原本名前とは関係のない意味のない名前に代替してデコンパイルされたソースコードの分析を困難にする技法である。特に、命令語短縮技法を用いて識別子を変換する。
【０００７】
識別子変換を利用すれば、識別子の意味情報は隠すことができるが、逆工学遂行時に、視覚的に固有な識別子で確認が可能である。これにより、攻撃者が容易に固有な識別子を認識することができるので、識別子変換技術は、逆工学攻撃に対する抵抗性が高くない。
【０００８】
本発明の背景となる技術は、特許文献１に開示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】韓国登録特許第１０−１３２８０１２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明は、見分けが難解な識別子変換を用いたコード難読化装置及び方法に係り、より詳細には、逆工学攻撃から応用プログラムを保護する見分けが難解な識別子変換を用いたコード難読化装置及び方法を提供するところにその目的がある。
【課題を解決するための手段】
【００１１】
このような技術的課題を果たすための本発明の実施形態による見分けが難解な識別子変換を用いたコード難読化装置は、応用プログラムファイルを圧縮解除してダルビック実行ファイルを抽出する抽出部と、前記抽出されたダルビック実行ファイルのバイトコードを分析するコード分析部と、難読文字の種類、個数及び挿入位置を選択する制御部と、前記選択された難読文字を前記バイトコードに挿入して、前記バイトコードの識別子を変換させる識別子変換部と、を含む。
【００１２】
また、前記抽出部は、前記応用プログラムファイルを圧縮解除してＤＥＸファイルのバイトコードを抽出することができる。
【００１３】
また、前記難読文字は、画面上に表現されないか、他の文字と同一の文字で表現されるが、互いに異なるユニコード値を有しうる。
【００１４】
また、前記識別子変換部は、前記バイトコードのクラス名、メソッド名、フィールド名のうちの少なくとも１つに前記難読文字を挿入することができる。
【００１５】
本発明の他の実施形態による識別子変換を用いたコード難読化方法は、応用プログラムファイルを圧縮解除してダルビック実行ファイルを抽出する段階と、前記抽出されたダルビック実行ファイルのバイトコードを分析する段階と、難読文字の種類、個数及び挿入位置を選択する段階と、前記選択された難読文字を前記バイトコードに挿入して、前記バイトコードの識別子を変換させる段階と、を含む。
【発明の効果】
【００１６】
本発明によれば、画面上に表現されないか、他の文字と同一の文字で表現される難読文字を用いて識別子を変換することによって、静的分析基盤の逆工学抵抗性を増加させることができる。
【００１７】
また、互いに異なるユニコード値を有するが、同様に表現される難読文字を用いて攻撃者の混乱を引き起こすことによって、逆工学分析抵抗性を強化し、逆工学攻撃時に、バイナリファイル分析能を必要とするので、逆工学分析抵抗性を増加させることができる。
【００１８】
また、応用プログラムに難読化技術を適用して、応用プログラムの分析による技術流出及び応用プログラムの偽造・変造を防止し、応用プログラムを各種保安攻撃から保護することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施形態による識別子変換を用いたコード難読化装置の構成を示すブロック図である。
【図２】本発明の実施形態による識別子変換を用いたコード難読化方法を説明するフローチャートである。
【図３】本発明の実施形態による識別子変換を用いたコード難読化方法を説明する図面である。
【図４】本発明の実施形態による識別子変換を用いたコード難読化方法の逆工学分析抵抗性の増加効果を説明する図面である。
【発明を実施するための形態】
【００２０】
以下、添付した図面を参照して、本発明の実施形態について当業者が容易に実施できるように詳しく説明する。しかし、本発明は、さまざまな異なる形態として具現され、ここで説明する実施形態に限定されるものではない。そして、図面で本発明を明確に説明するために、説明と関係のない部分は省略し、明細書全体を通じて類似した部分については、類似した図面符号を付する。
【００２１】
以下、添付図面を参照しながら、本発明による望ましい実施形態を詳しく説明する。
【００２２】
図１は、本発明の実施形態による識別子変換を用いたコード難読化装置の構成を示すブロック図である。図１のように、本発明の実施形態による識別子変換を用いたコード難読化装置１００は、抽出部１１０、コード分析部１２０、制御部１３０及び識別子変換部１４０を含む。
【００２３】
まず、抽出部１１０は、応用プログラムファイルを圧縮解除してダルビック実行（ＤＥＸ、Ｄａｌｖｉｋ  Ｅｘｅｃｕｔａｂｌｅ）ファイルを抽出する。この際、応用プログラムファイルは、アンドロイド応用プログラムパッケージ（ＡＰＫ）ファイルであり、抽出部１１０は、ＡＰＫファイルを圧縮解除してＤＥＸファイルのバイトコードを抽出することができる。
【００２４】
次いで、コード分析部１２０は、抽出されたＤＥＸファイルのバイトコードを分析する。
【００２５】
そして、制御部１３０は、難読文字の種類、個数及び挿入位置を選択する。ここで、難読文字は、画面上に表現されないか、他の文字と同一の文字で表現される文字を意味し、難読文字は、互いに異なるユニコード値を有する。
【００２６】
最後に、識別子変換部１４０は、選択された難読文字をバイトコードに挿入してバイトコードの識別子を変換させる。この際、識別子変換部１４０は、バイトコードのクラス名、メソッド名、フィールド名のうちの少なくとも１つに難読文字を挿入することができる。そして、識別子変換部１４０は、難読文字が挿入されたバイトコードを再ビルドする。
【００２７】
以下、図２ないし図４を通じて本発明の実施形態による応用プログラムを保護する方法についてさらに詳細に説明する。
【００２８】
図２は、本発明の実施形態による識別子変換を用いたコード難読化方法を説明するフローチャートであり、図３は、本発明の実施形態による識別子変換を用いたコード難読化方法を説明する図面である。
【００２９】
まず、抽出部１１０は、応用プログラムファイルであるＡＰＫファイルを圧縮解除してＤＥＸファイルを抽出する（ステップＳ２１０）。
【００３０】
ＡＰＫファイルは、グーグル（Ｇｏｏｇｌｅ）アンドロイド運用体制でアプリケーション配布及び設置に用いられるＺＩＰファイル形式の圧縮パッケージである。ユーザは、アンドロイドＳＤＫに含まれたＡＤＢ（Ａｎｄｒｏｉｄ  Ｄｅｂｕｇ  Ｂｒｉｄｇｅ）を用いるか、ＡＳＴＲＯファイル管理者、ファイルエキスパート、ＥＳファイル探索器などのファイル管理アプリケーションを用いてＡＰＫファイルを獲得することができる。
【００３１】
抽出部１１０は、７−Ｚｉｐ、ＷｉｎＺｉｐなどのファイル圧縮解除ユーティリティーを用いて応用プログラムのＡＰＫファイルを圧縮解除してＤＥＸファイルを抽出することができる。ＡＰＫファイルの圧縮を解除すれば、ｃｌａｓｓｅｓ．ｄｅｘ、ＡｎｄｒｏｉｄＭａｎｉｆｅｓｔ．ｘｍｌ、ＭＥＴＡ−ＩＭＦ／、ｒｅｓ／、ｒｅｓｏｕｒｃｅｓ．ａｒｓｃ、ａｓｓｅｔｓ／、ｌｉｂなどのファイル及びディレクトリーを獲得し、そのうち、ｃｌａｓｓｅｓ．ｄｅｘファイルが、ＡＰＫファイル構成要素のうち最も核心ファイルであるＤＥＸファイルである。
【００３２】
Ｃｌａｓｓｅｓ．ｄｅｘファイルは、ジャバコード（．ｊａｖａ）をコンパイルして生成されたジャババイトコード（．ｃｌａｓｓ）をアンドロイドのダルビック仮想マシンが認識して実行できるように、ジャババイトコードをダルビック実行ファイルフォーマット（．ｄｅｘ）に変換して生成したものである。
【００３３】
次いで、コード分析部１２０は、抽出されたＤＥＸファイルのバイトコードを分析する（ステップＳ２２０）。コード分析部１２０は、ＤＥＸファイル内に含まれている複数のクラス、メソッド、フィールドなどを把握し、難読文字を挿入するクラス、メソッド、フィールドなどの識別子を選択することができる。
【００３４】
そして、制御部１３０は、バイトコードに挿入する難読文字の種類、個数及び挿入位置を選択する（ステップＳ２３０）。
【００３５】
この際、難読文字は、システムは互いに異なるユニコード値を有する個別文字と認識するが、一般テキストエディターでは、ｎｕｌｌ値で表現されるか、他のユニコード値を有する文字と同様に表現される文字を意味する。したがって、難読文字は、ヘキサエディターのようなバイナリを対象とするエディターを用いて初めて文字の識別が可能である。
【００３６】
【表１】
2017513077.tif 000003
【００３７】
表１に示したように、ウィンドウでＡｌｔ＋０１７３、ＵＴＦで０ｘＣ２ＡＤのように一般テキストエディターでは表現されないが、バイナリを対象とするエディターではソフトハイフンで出力される場合、当該文字を難読文字として使う。
【００３８】
また、表１のように、複数のコード値に対応する文字がいずれも□で表現されて、表現された文字としては、当該文字のコード値が如何なるものかが識別が不可能な場合、当該文字を難読文字として使うことができる。すなわち、難読文字として□を使うことによって、攻撃者が当該難読文字のコード値が０ｘＤ７ＢＡ、０ｘＤ７ＢＢ、０ｘＤ７ＢＣ、０ｘＤ７ＢＤのうちの如何なる値であるかがｓｍａｌｉコード上では識別を不可能にする。
【００３９】
また、制御部１３０は、難読文字の種類と共にバイトコードの識別子に挿入する難読文字の個数、挿入する位置などを決定する。
【００４０】
【表２】
2017513077.tif 000004
【００４１】
表２に示したように、ｇｅｔＳｅｃｒｅｔというメソッド名にｎｕｌｌ値で表現される難読文字である０ｘＣ２ＡＤを挿入しようとする場合、制御部１３０は、適用１のようにメソッド名の中間に難読文字を挿入するか、適用２のようにメソッド名の最後に難読文字を挿入するように挿入位置を決定することができる。
【００４２】
制御部１３０は、コード分析部１２０が難読文字を挿入する対象にして選択したクラス名、メソッド名、フィールド名のうち如何なる位置に如何なる難読文字を何個挿入するか否かを決定する。
【００４３】
【表３】
2017513077.tif 000005
【００４４】
また、制御部１３０は、コード値の識別が不可能な難読文字である０ｘＤ７ＢＡ、０ｘＤ７ＢＢのような難読文字を選択することもできる。適用３及び適用４のように、同様に□で表現されるが、実際難読文字のコード値は異なるように、制御部１３０は、挿入する難読文字のコード値を選択する。
【００４５】
次いで、識別子変換部１４０は、選択された難読文字をバイトコードに挿入してバイトコードの識別子を変換させる（ステップＳ２４０）。識別子変換部１４０は、Ｓ２２０段階でコード分析部１２０が選択したバイトコードの識別子にＳ２３０段階で制御部１３０が選択した難読文字を挿入してバイトコードの識別子を変換させる。
【００４６】
そして、図３に示したように、識別子変換が完了すれば、識別子変換部１４０は、バイトコード構造を再ビルドして識別子が変換されたＤＥＸファイルを生成する。
【００４７】
また、本発明の実施形態によるコード難読化装置１００は、Ｓ２４０段階で識別子が変換されたバイトコードにプロガード（Ｐｒｏｇｕａｒｄ）、デックスガード（Ｄｅｘｇｕａｒｄ）、Ａｌｌａｔｏｒｉ、Ｓｔｒｉｎｇｅｒ  Ｊａｖａ  Ｏｂｆｕｓｃａｔｏｒなどの難読化ソリューションを用いてさらに難読化技法を適用することができる。
【００４８】
また、コード難読化装置１００は、ソースコード難読化またはバイナリ難読化をさらに適用することができる。特に、コントロールフロー（ｃｏｎｔｒｏｌ  ｆｌｏｗ）、文字列暗号化（ｓｔｒｉｎｇ  ｅｎｃｒｙｐｔｉｏｎ）、ＡＰＩ隠匿（ＡＰＩ  ｈｉｄｉｎｇ）とクラス暗号化（ｃｌａｓｓ  ｅｎｃｒｙｐｔｉｏｎ）とを適用することができる。
【００４９】
コントロールフローは、把握しにくい不透明命令またはゴミ命令を挿入して逆工学時に、コントロールフロー分析を困難にするか、誤った結果を発生させる技法を意味し、文字列暗号化は、特定文字列を暗号化し、実行時に、復号メソッドに復元して使う方法である。そして、ＡＰＩ隠匿は、敏感なライブラリ及びメソッド呼び出しを隠す技法であり、クラス暗号化は、特定クラスファイル自体を暗号化し、実行時に、復号する技法を意味する。
【００５０】
また、コード難読化装置１００は、区画難読化（ｌａｙｏｕｔ  ｏｂｆｕｓｃａｔｉｏｎ）、データ難読化（ｄａｔａ  ｏｂｆｕｓｃａｔｉｏｎ）、集合難読化（ａｇｇｒｅｇａｔｉｏｎ  ｏｂｆｕｓｃａｔｉｏｎ）、制御難読化（ｃｏｎｔｒｏｌ  ｏｂｆｕｓｃａｔｉｏｎ）を適用することができる。
【００５１】
図４は、本発明の実施形態による識別子変換を用いたコード難読化方法の逆工学分析抵抗性の増加効果を説明する図面である。
【００５２】
図４に示したように、難読化技法を適用していない場合、攻撃者は、ＡＰＫファイルをａｐｋｔｏｏｌを用いてデコンパイルしてダルビックバイトコードで作成されたｓｍａｌｉコードを獲得し、ｓｍａｌｉコードをパージングする。そして、ｓｍａｌｉコードのコードを修正した後、ａｐｋｔｏｏｌを用いて再コンパイルする。そして、ａｐｋｔｏｏｌを用いて攻撃者の署名でリパッケージングした後、リパッケージングされたＡＰＫファイルを配布することができる。このような過程を通じて、攻撃者は、偽造・変造された応用プログラムを生成し、それを流布して保安を脅威する。
【００５３】
しかし、本発明の実施形態による識別子変換を用いたコード難読化方法を適用すれば、攻撃者がａｐｋｔｏｏｌを用いてＡＰＫファイルをデコンパイルした後、ｓｍａｌｉコードを獲得しても、肉眼でｓｍａｌｉコードを分析することができず、ｓｍａｌｉコード分析に必要な時間を増加させることができる。
【００５４】
攻撃者は、ｓｍａｌｉコードを肉眼で分析することができないので、ヘキサエディターのようなバイナリを対象とするエディターを用いて手作業でＨｅｘ値を直接確認してコードを分析しなければならない。すなわち、既存の静的分析逆工学攻撃ツールを用いて識別子が変換されたｓｍａｌｉコードを分析することができないので、コード分析に必要な時間及びコストが増加する。
【００５５】
このように、本発明の実施形態によれば、画面上に表現されないか、他の文字と同一の文字で表現される難読文字を用いて識別子を変換することによって、静的分析基盤の逆工学抵抗性を増加させることができる。
【００５６】
また、互いに異なるユニコード値を有するが、同様に表現される難読文字を用いて攻撃者の混乱を引き起こすことによって、逆工学分析抵抗性を強化し、逆工学攻撃時に、バイナリファイル分析能を必要とするので、逆工学分析抵抗性を増加させることができる。
【００５７】
また、応用プログラムに難読化技術を適用して応用プログラムの分析による技術流出及び応用プログラムの偽造・変造を防止し、応用プログラムを各種保安攻撃から保護することができる。
【００５８】
以上、本発明の望ましい実施形態について詳細に説明したが、本発明の権利範囲は、これに限定されるものではなく、次の特許請求の範囲で定義している本発明の基本概念を用いた当業者の多様な変形及び改良形態も、本発明の権利範囲に属するものである。
【産業上の利用可能性】
【００５９】
本発明は、見分けが難解な識別子変換を用いたコード難読化装置及び方法関連の技術分野に適用可能である。
【符号の説明】
【００６０】
１００：コード難読化装置
１１０：抽出部
１２０：コード分析部
１３０：制御部
１４０：識別子変換部
【図１】
2017513077.tif 000006
【図２】
2017513077.tif 000007
【図３】
2017513077.tif 000008
【図４】
2017513077.tif 000009
【国際調査報告】
2017513077.tif 000010
2017513077.tif 000011
2017513077.tif 000012
2017513077.tif 000013