JP2016503543A - 自己書換え基盤のアプリケーションコード難読化装置及びその方法 - Google Patents

自己書換え基盤のアプリケーションコード難読化装置及びその方法 Download PDF

Info

Publication number
JP2016503543A
JP2016503543A JP2015542939A JP2015542939A JP2016503543A JP 2016503543 A JP2016503543 A JP 2016503543A JP 2015542939 A JP2015542939 A JP 2015542939A JP 2015542939 A JP2015542939 A JP 2015542939A JP 2016503543 A JP2016503543 A JP 2016503543A
Authority
JP
Japan
Prior art keywords
code
important
unit
application
important code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2015542939A
Other languages
English (en)
Other versions
JP5996810B2 (ja
Inventor
ジョン ヒョン イ
ジョン ヒョン イ
ジン ヒョク ジュン
ジン ヒョク ジュン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Foundation of Soongsil University Industry Cooperation
Original Assignee
Foundation of Soongsil University Industry Cooperation
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Foundation of Soongsil University Industry Cooperation filed Critical Foundation of Soongsil University Industry Cooperation
Publication of JP2016503543A publication Critical patent/JP2016503543A/ja
Application granted granted Critical
Publication of JP5996810B2 publication Critical patent/JP5996810B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)

Abstract

本発明は、自己書換え基盤のアプリケーション難読化装置及びその方法に関するものである。本発明によれば、アプリケーションを構成するコードを重要コードと一般コードとに分離して互いに異なる環境で暗号化を適用することによって、既存のマネージドコードに存在する逆工学脆弱性を補完して、アプリケーションの偽造ないし変造に対する保安性を高めうる。また、重要コードを呼び出すための重要コード呼び出し部がアプリケーションの非実行時には、ダミーコードを呼び出す形態で保存されており、アプリケーションの実行時に、自己書換え技法を用いて実際に重要コードを呼び出すように変換するために、攻撃者の静的及び動的分析を防止する。【選択図】図2

Description

本発明は、アプリケーションコード難読化装置及びその方法に係り、より詳細には、自己書換え基盤の難読化技法を利用したアプリケーションコード難読化装置及びその方法に関する。
Java言語対象の既存のアプリケーション難読化装置及びその方法は、ジャバ仮想マシン(Java Virtual Machine)で動作するアプリケーションを対象にしてアプリケーションを構成するコード構造を変更することによって、難読化を適用する。ここで、難読化が適用されたアプリケーションは、難読化適用前と同様に、ジャバ仮想マシンで動作する命令語集合と目的ファイル構造とで構成される。
しかし、既存の難読化装置または方法による場合、仮想マシンで動作するマネージドコード(Managed Code)が有する逆工学脆弱性は、難読化以後にも同様に残されて問題になる。
マネージドコードが有する逆工学脆弱性は、次のようであるが、コンパイルされた目的コードにクラス名、メンバ変数名、メソッド名などソースコード情報が含まれ、コードが明示的に構造化されており、逆工学を通じて特定のロジックを探すか、分析することが容易である。
アンドロイドアプリケーションも、前記ジャバマシンで動作するアプリケーションと類似しているようにダルビック仮想マシン(Dalvik Virtual Machine)で動作するマネージドコードで構成され、DEX(Dalvik Executable)ファイル形式で保存される。したがって、アンドロイドアプリケーションも、ジャバアプリケーションと同一のマネージドコードの逆工学脆弱性を内包している。
本発明の背景となる技術は、特許文献1に記載されている。
韓国登録特許第10−1234591号公報
本発明が解決しようとする課題は、アンドロイドアプリケーション保護のための自己書換え基盤のアプリケーションコード難読化装置及びその方法を提供するところにある。
前記のような目的を果たすための本発明の一実施形態によるアプリケーションコード難読化装置は、アプリケーションに用いられるコードを入力される入力部と、前記入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コード、及び前記重要コードを呼び出すための重要コード呼び出し部を含む一般コードに分離するコード分離部と、前記重要コードを暗号化し、前記重要コードのそれぞれのアドレス情報を保存している重要コード連結部のアドレス情報を挿入する暗号化部と、前記一般コードにダミーコードを挿入して、前記重要コード呼び出し部が、前記ダミーコードを呼び出すように変換し、前記重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を前記重要コードに挿入し、前記アプリケーション実行時に、前記重要コード呼び出し部が、前記重要コードを呼び出すようにする重要コード呼び出し部変換部を前記重要コードに挿入する制御部と、前記一般コードと重要コードとを結合して、前記アプリケーションを生成するコード結合部と、を含む。
前記重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをネイティブ環境でコンパイルする第1コンパイル部と、前記重要コード呼び出し部が、ダミーコードを呼び出すように変換された一般コードをマネージド環境でコンパイルして実行ファイルを生成する第2コンパイル部と、をさらに含みうる。
前記暗号化部は、前記コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化することができる。
前記コード変換部は、前記一般コードに前記重要コードと連動してローディングするための開始ルーチン(Startup Routine)を追加することができる。
前記重要コード及び一般コードで定義された重要識別子(sensitive identifier)を、意味のない文字または文字列に置き換えてスクランブルするスクランブラーをさらに含みうる。
前記アプリケーションを伝送されたクライアントが前記開始ルーチンを用いて、前記アプリケーションを実行する場合、DEXファイル形態の前記一般コードが最適化されたODEX(Optimized DEX)ファイル形態に変換されてダルビック仮想マシン(DVM)にローディングされうる。
前記暗号化された重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部、及び重要コードが復号化され、前記ベクトルテーブル生成部は、前記ベクトルテーブルを生成し、前記重要コード呼び出し部変換部は、前記重要コード呼び出し部が前記重要コードを呼び出すように変換させ、前記重要コード呼び出し部は、前記ベクトルテーブルに記録されたベクトル値を通じて重要コードを呼び出せば、前記重要コード連結部は、前記ベクトルテーブルと前記重要コードのアドレス情報とを用いて、前記ベクトル値に対応する重要コードを呼び出して実行させることができる。
本発明の他の実施形態によれば、アプリケーション難読化装置を利用したアプリケーション難読化方法において、前記アプリケーションに用いられるコードを入力される段階と、前記入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コード、及び前記重要コードを呼び出すための重要コード呼び出し部を含む一般コードに分離する段階と、前記重要コードを暗号化し、前記重要コードのそれぞれのアドレス情報を保存している重要コード連結部のアドレス情報を挿入する段階と、前記一般コードにダミーコードを挿入して、前記重要コード呼び出し部が、前記ダミーコードを呼び出すように変換し、前記重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を前記重要コードに挿入する段階と、前記アプリケーション実行時に、前記重要コード呼び出し部が、前記重要コードを呼び出すようにする重要コード呼び出し部変換部を前記重要コードに挿入する段階と、前記一般コードと重要コードとを結合して、前記アプリケーションを生成する段階と、を含む。
本発明によれば、アプリケーションを構成するコードを重要コードと一般コードとに分離して互いに異なる環境で暗号化を適用することによって、既存のマネージドコードに存在する逆工学脆弱性を補完して、アプリケーションの偽造ないし変造に対する保安性を高めうる。
また、重要コードを呼び出すための重要コード呼び出し部がアプリケーションの非実行時には、ダミーコードを呼び出す形態で保存されており、アプリケーションの実行時に、自己書換え技法を用いて実際に重要コードを呼び出すように変換するために、攻撃者の静的及び動的分析を防止する。
本発明の実施形態によるアプリケーション難読化装置の構成図である。 本発明の実施形態によるアプリケーション難読化方法のフローチャートである。 本発明の実施形態による重要コードのファイル構造を説明する図面である。 本発明の実施形態による難読化された重要コードのファイル構造を説明する図面である。 本発明の実施形態によるクライアント端末がアプリケーションを実行させる過程を説明するフローチャートである。 本発明の実施形態によるクライアント端末が難読化されたアプリケーションを実行する過程を説明する図面である。 本発明の実施形態によるクライアント端末が難読化されたアプリケーションを実行する過程を説明する図面である。 本発明の実施形態によるベクトルテーブルを説明する図面である。
以下、添付した図面を参照して、当業者が容易に実施できるように本発明の実施形態を詳しく説明する。しかし、本発明は、さまざまな異なる形態で具現され、ここで説明する実施形態に限定されるものではない。そして、図面で本発明を明確に説明するために、説明と関係のない部分は省略し、明細書全体を通じて類似した部分については、類似した図面符号を付する。
まず、本発明の実施形態によるアプリケーション難読化装置について説明する。
図1は、本発明の実施形態によるアプリケーション難読化装置を説明する図面である。
図1を参照すれば、本発明の実施形態によるアプリケーション難読化装置100は、入力部110、コード分離部120、コード変換部130、スクランブラー140、暗号化部145、制御部150、及びコード結合部160を含み、コンパイル部170をさらに含みうる。
まず、入力部110は、アプリケーションのコードを入力される。ここで、入力されるコードは、アプリケーションを生成するためのコードであって、ソースコード(Source Code)またはマネージドコード形式のコードであり得る。
コード分離部120は、入力部110から入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コードと、前記重要コード以外の一般コードとに分離する。
コード変換部130は、コード分離部120から分離された重要コードをマネージドコードからネイティブコード(Native Code)に変換する。
スクランブラー140は、重要コードと一般コードとで定義された重要識別子を、意味のない文字または文字列に置き換えてスクランブル(Scramble)する。
暗号化部145は、コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化する。
制御部150は、一般コードにダミーコードを挿入して重要コード呼び出し部がダミーコードを呼び出すように変換させる。また、重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を重要コードに挿入する。そして、制御部150は、アプリケーション実行時に、重要コード呼び出し部が、重要コードを呼び出すようにする重要コード呼び出し部変換部を重要コードに挿入する。
コード結合部160は、暗号化された一般コードと重要コードとを結合してクライアントに配布が可能な形態の結合ファイルを生成する。本発明による一実施形態としてアンドロイドアプリケーションの場合、拡張子がapk(Android package)であるファイルが結合ファイルに該当する。
コンパイル部170は、重要ファイルをコンパイルするためにネイティブ環境で動作する第1コンパイル部171と、一般コードをコンパイルするためにマネージド環境で動作する第2コンパイル部172とを含みうる。
第1コンパイル部171は、重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをネイティブ環境でコンパイルする。そして、第2コンパイル部172は、重要コード呼び出し部がダミーコードを呼び出すように変換された一般コードをマネージド環境でコンパイルして実行ファイルを生成する。
以下、本発明の実施形態によるアプリケーション難読化方法について説明する。
図2は、本発明の実施形態によるアプリケーション難読化方法のフローチャートである。
入力部110は、アプリケーションのコードを入力される(ステップS210)。入力部110は、キーパッド形態として入力インターフェース部が備えられうる。入力されるコードは、ソースコードであるか、ジャバ仮想マシン(JVM)またはダルビック仮想マシン(DVM)で実行可能なマネージドコード形式のコードであり得る。
コード分離部120は、入力部110から入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コードと、前記重要コード以外の一般コードとに分離する(ステップS220)。
ここで、一般コードは、一般コード領域で重要コードまたは重要コードが変換されたネイティブコードを呼び出すことができる重要コード呼び出し部(Sensitive Method Calling Routine)を含む。重要コードとは、ユーザの観点で攻撃者の偽造ないし変造の行為から保護せねばならないコードを表わす。重要コードと反対される概念として重要コード以外のコードを一般コードと称する。核心コードは、重要コードと同義語として用いられる。
コード区分のためにコード分離部120は、既保存された重要コードモデルを用いて、前記入力された実行コードで重要コードモデルとマッチングされるコードを重要コードと判断する。
コード変換部130は、コード分離部120から分離された重要コードをマネージドコードからネイティブコードに変換する(ステップS230)。すなわち、コード変換部130は、マネージドコード形態の重要コードをネイティブコード形態に変換する。ネイティブコードは、JVMまたはDVMで実行されるマネージドコードとは異なって、CPU環境で実行され、マネージドコードよりもバイナリコードに近いコードである。
本発明による一実施形態として、コード変換部130は、重要コードをCコードに変換することができる。以下、本発明の実施形態で、重要コードは、ネイティブコードまたはCコードと同義語として用いられる。
重要コードは、ELF(Executable and Linkable Format)形態でネイティブコードセクションに保存される。ELF形態は、コードの構造が明示的に区分されず、DEX形態に比べて、コードの偽造ないし変造のための動的分析または静的分析に相対的に容易に露出されない長所がある。また、ELF形態は、命令語構成がダルビック(Dalvik)命令語に比べて、機械語に近い低いレベルのCPU命令語で構成されており、攻撃者の動的分析及び静的分析を難しくする。
また、コード変換部130は、一般コードに重要コードと連動してローディングするための開始ルーチンを追加することができる(ステップS235)。本発明による一実施形態として、開始ルーチンは、JNI(Java Native Interface)関数を含みうる。
スクランブラー140は、重要コードと一般コードとで定義された重要識別子を、意味のない文字または文字列に置き換えてスクランブルする(ステップS240)。識別子変換(Scramble Identifier)は、コード内の識別子(Identifier)を1つまたはそれ以上のアルファベット羅列に変えて逆工学を難しくする配置難読化の一種である。
S240のように、スクランブル過程を経れば、重要コードは、図3の左側図面のようなネイティブファイル構造を有する。
図3は、本発明の実施形態による重要コードのファイル構造を説明する図面であり、図4は、本発明の実施形態による難読化された重要コードのファイル構造を説明する図面である。
図3の左側図面を見れば、Export Tableは、複数の重要コード(重要コードA、重要コードB、…)のそれぞれのアドレスを含んでいるが、それぞれのアドレスは、ネイティブコードセクションにライブラリ形態で保存された当該重要コード(重要コードA、重要コードB、…)にそれぞれ対応する。
次いで、暗号化部145は、文字列に対して暗号化を行う(ステップS245)。すなわち、暗号化部145は、ネイティブ環境で重要コード内の文字列に対して保存場所(Data Storage)変換、エンコーディング(Data Encoding)変換、順序(Data Ordering)変換のような資料難読化技法を使って文字列を暗号化することができる。
そして、暗号化部145は、図3の右側図面のようにネイティブコードセクションにコード形態の重要コード連結部を生成するが、この際、重要コード連結部は、図3の左側図面のExport Tableに定義されたネイティブコードのそれぞれに対するアドレス情報を含む。
そして、暗号化部145は、図3の左側図面のExport Tableに定義されたネイティブコードのそれぞれに対するアドレスを併合(Merge)して、図3の右側図面のように重要コード連結部のアドレスを生成する(ステップS250)。
その結果、図3の右側図面のようにExport Tableには、重要コード連結部の位置を表わすアドレス情報が保存される。
次いで、制御部150は、Javaコード形態の一般コードにダミーコード(Dummy code、ゴミコード)を挿入し(ステップS255)、重要コードを呼び出すための重要コード呼び出し部がダミーコードを呼び出すように重要コード呼び出し部を変換する(ステップS260)。このように、ダミーコードを呼び出すように変換することによって、攻撃者から静的攻撃を防止し、アプリケーション実行時に、自己書換え技法を通じて重要コードを呼び出すように変換して正常な実行にする。
そして、制御部150は、重要コードにベクトルテーブルを生成するためのベクトルテーブル生成部を挿入する(ステップS270)。ここで、ベクトルテーブルは、今後アプリケーションがクライアント端末でローディングされる時、重要コードを呼び出すために使われる。
次いで、制御部150は、重要コードに重要コード呼び出し部変換部を挿入する(ステップS275)。重要コード呼び出し部変換部は、アプリケーション実行時に、ダミーコードを呼び出す重要コード呼び出し部が、重要コードを呼び出すように変換して正常にアプリケーションを実行させる。
次いで、第1コンパイル部171は、重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをコンパイルし、暗号化部145は、コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化することができる(ステップS280)。
図4は、S280過程を通じて難読化された重要コードの構造を示すものであって、図4から見るように、重要コードは、重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部と共に暗号化され、復号化ルーチンが結合された構造を有する。
第2コンパイル部172は、S260段階を通じて重要コード呼び出し部がダミーコードを呼び出すように変換された一般コードをコンパイルして実行ファイルを生成する(ステップS290)。本発明による実施形態として、実行ファイルは、JVMまたはDVMで動作するファイルであり、具体的には、DEXファイルである。
コード結合部160は、それぞれ暗号化された一般コードと重要コードとを結合して結合ファイル形態の難読化されたアプリケーションを生成する(ステップS295)。そして、コード結合部160によって生成されたアプリケーションは、アプリケーションストア、アンドロイドマーケットなどにアップロードされ、今後ネットワーク連結されたクライアント端末にダウンロードされる。
以下、図5ないし図7を通じて、アプリケーションをダウンロードされたクライアント端末が、アプリケーションを実行させる過程について説明する。
図5は、本発明の実施形態によるクライアント端末がアプリケーションを実行させる過程を説明するフローチャートであり、図6A及び図6Bは、本発明の実施形態によるクライアント端末が難読化されたアプリケーションを実行する過程を説明する図面である。図7は、本発明の実施形態によるベクトルテーブルを説明する図面である。
まず、クライアント端末は、アンドロイドマーケットやアプリケーションストアを通じて難読化されたアプリケーションをダウンロードされる(ステップS510)。
そうすると、難読化されたアプリケーションがクライアント端末に設けられるが、難読化されたアプリケーションは、ダルビック仮想マシンで動作する一般コード部分とネイティブ環境で動作するELF形態の重要コード部分とに分けられる。
ここで、一般コード部分は、図6Aのような構造を有する。すなわち、一般コード部分は、DEXファイル形態でなされ、ダミーコードと複数の重要コード呼び出し部、開始ルーチンを含む。そして、前述したように、重要コード呼び出し部は、攻撃者の静的分析の防止のためにダミーコードを呼び出すように設計される。
ユーザがダウンロードされたアプリケーションを実行させれば(ステップS520)、クライアントの制御部(図示せず)は、図6Bのように一般コードに含まれた開始ルーチンを用いて、一般コードをダルビック仮想マシン(DVM)にローディングさせる。ここで、一般コードは、DEXファイル形態で直ちに実行されず、DEX最適化(Optimization)過程を経てODEXファイル形態に変換されてダルビック仮想マシン(DVM)にローディングされる。
このような最適化過程を通じてDEXファイルでは、文字列データであるデスクリプタを利用した重要コード呼び出し方式が、ODEXファイルでは、Vtableという資料構造のアドレスを通じる重要コード呼び出し方式に変換される。
一方、ユーザがダウンロードされたアプリケーションを実行させれば、重要コードは、CPUが制御するメモリ領域にローディングされる。
そうすると、重要コードに含まれた復号化ルーチンは、ネイティブコード自己書換え技法を用いて暗号化された重要コード部分(重要コードA、重要コードB、…、重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部)を復号化させる(ステップS530)。
このように重要コード部分が復号化されれば、ベクトルテーブル生成部は、ベクトルテーブルを生成する(ステップS540)。ここで、ベクトルテーブルは、重要コード呼び出し部と呼び出される重要コードとの間を連結するベクトル情報の集合であって、図7のように動的ベクトルのそれぞれは、呼び出される重要コードとそれぞれマッチングされる。図7によるベクトルテーブルでは、動的ベクトルVは、重要コードAと、動的ベクトルVは、重要コードCと、動的ベクトルVは、重要コードBとそれぞれマッチングされることを例とした。
次いで、重要コード呼び出し部変換部は、ダミーコードを呼び出していた重要コード呼び出し部が重要コードを呼び出すように重要コード呼び出し部を変換させる(ステップS550)。すなわち、重要コード呼び出し部変換部は、生成されたベクトルテーブルに対応して、各重要コード呼び出し部のベクトル値を変換させる。図7と関連して例を挙げれば、アプリケーション実行前にダミーコードを呼び出していた重要コード呼び出し部(A_dummy)が、重要コードAを呼び出すようにmerged_V1のような方式に変換される。
このように、重要呼び出し部変換部が、ダミーコードを呼び出していた重要コード呼び出し部を、重要コードを呼び出すように変換させることができる理由は、ODEXファイルで重要コード呼び出し時に使われるVtableとアドレスを、ダミーコード用で重要コード用Vtableとアドレスに変換するためである。
すなわち、重要コード呼び出し部変換部が実行されれば、メモリに積載されたODEXで変換された重要コード呼び出し部を検索して、自己書換え技法を通じて、ダミーコード呼び出し用Vtableとアドレスを、重要コード呼び出し用Vtableとアドレスに変換し、呼び出しに必要なベクトル値も変換する。この際、自己書換え技法によって復元された重要コード呼び出し部で使われる呼び出しベクトルは、動的に生成されたベクトルテーブルによって決定され、ベクトルテーブルは、ネイティブコードで構成された生成者によって生成される。したがって、ベクトルマッピングは、毎実行時ごとに変わり、これを生成するための別途のサーバを要求せず、経済的な長所がある。
したがって、本発明の実施形態によれば、ODEXに含まれているVtableを用いて、アプリケーション実行前にダミーコードを呼び出した重要コード呼び出し部が重要コードを呼び出すように変換される。
このように、復元された重要コード呼び出し部は、ベクトルテーブルに記録されたベクトル値を通じて重要コードを呼び出し、重要コード連結部は、ベクトルテーブルを通じて因子に越える来るベクトル値にマッピングされる重要コードを呼び出す(ステップS560)。すなわち、重要コード呼び出し部が、merged_V1のような方式で重要コードAを要請すれば、重要コード連結部は、ベクトルテーブルを参照して、Vに対応する重要コードAを呼び出す。
このように、重要コード呼び出し部変換部によって重要コード呼び出し部の変換が完了して、アプリケーションに含まれたあらゆるルーチンは正常な実行が可能になる。
このように、本発明の実施形態によれば、重要コードは、ELF形態で保存され、重要コードの構造が明示的に区分されず、DEX形態に比べて、相対的に少ない分析情報を露出させるようになり、命令語構成がダルビック命令語に比べて、低いレベルのCPU命令語で構成されて、攻撃者の分析を妨害する。また、攻撃者は、低いレベルのCPU命令語と明示的ではない重要コード構造によって分析複雑度が増加し、ダルビック仮想マシン(Dalvik VM)のマネージド環境とネイティブ環境とで動作するコードを、同時に分析しなければならず、かつ各環境に合う難読化技法を適用しなければならないので、コード分析を難解にする。また、重要コードを呼び出す重要コード呼び出し部がアプリケーションの非実行時には、ダミーコードを呼び出す形態で保存されており、アプリケーションの実行時に、自己書換え技法を用いて実際に重要コードを呼び出すように変換するために、攻撃者の静的及び動的分析を防止する。
以上、本発明について実施形態を中心に説明した。当業者ならば、本発明の本質的な特性から外れない範囲内で変形された形態として具現可能であるということを理解できるであろう。したがって、開示された実施形態は、限定的な観点ではなく、説明的な観点で考慮されなければならない。したがって、本発明の範囲は、前述した実施形態に限定されず、特許請求の範囲に記載の内容及びそれと同等な範囲内にある多様な実施形態が含まれるように解釈しなければならない。
本発明は、自己書換え基盤のアプリケーションコード難読化装置及びその方法関連の技術分野に適用可能である。
本発明は、アプリケーションコード難読化装置及びその方法に係り、より詳細には、自己書換え基盤の難読化技法を利用したアプリケーションコード難読化装置及びその方法に関する。
Java言語対象の既存のアプリケーション難読化装置及びその方法は、ジャバ仮想マシン(Java Virtual Machine)で動作するアプリケーションを対象にしてアプリケーションを構成するコード構造を変更することによって、難読化を適用する。ここで、難読化が適用されたアプリケーションは、難読化適用前と同様に、ジャバ仮想マシンで動作する命令語集合と目的ファイル構造とで構成される。
しかし、既存の難読化装置または方法による場合、仮想マシンで動作するマネージドコード(Managed Code)が有する逆工学脆弱性は、難読化以後にも同様に残されて問題になる。
マネージドコードが有する逆工学脆弱性は、次のようであるが、コンパイルされた目的コードにクラス名、メンバ変数名、メソッド名などソースコード情報が含まれ、コードが明示的に構造化されており、逆工学を通じて特定のロジックを探すか、分析することが容易である。
アンドロイドアプリケーションも、前記ジャバマシンで動作するアプリケーションと類似しているようにダルビック仮想マシン(Dalvik Virtual Machine)で動作するマネージドコードで構成され、DEX(Dalvik Executable)ファイル形式で保存される。したがって、アンドロイドアプリケーションも、ジャバアプリケーションと同一のマネージドコードの逆工学脆弱性を内包している。
本発明の背景となる技術は、特許文献1に記載されている。
韓国登録特許第10−1234591号公報
本発明が解決しようとする課題は、アンドロイドアプリケーション保護のための自己書換え基盤のアプリケーションコード難読化装置及びその方法を提供するところにある。
前記のような目的を果たすための本発明の一実施形態によるアプリケーションコード難読化装置は、アプリケーションに用いられるコードを入力される入力部と、前記入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コード、及び前記重要コードを呼び出すための重要コード呼び出し部を含む一般コードに分離するコード分離部と、前記重要コードを暗号化し、前記重要コードのそれぞれのアドレス情報を保存している重要コード連結部のアドレス情報を挿入する暗号化部と、前記一般コードにダミーコードを挿入して、前記重要コード呼び出し部が、前記ダミーコードを呼び出すように変換し、前記重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を前記重要コードに挿入し、前記アプリケーション実行時に、前記重要コード呼び出し部が、前記重要コードを呼び出すようにする重要コード呼び出し部変換部を前記重要コードに挿入する制御部と、前記一般コードと重要コードとを結合して、前記アプリケーションを生成するコード結合部と、を含む。
前記重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをネイティブ環境でコンパイルする第1コンパイル部と、前記重要コード呼び出し部が、ダミーコードを呼び出すように変換された一般コードをマネージド環境でコンパイルして実行ファイルを生成する第2コンパイル部と、をさらに含みうる。
前記暗号化部は、前記コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化することができる。
前記コード変換部は、前記一般コードに前記重要コードと連動してローディングするための開始ルーチン(Startup Routine)を追加することができる。
前記重要コード及び一般コードで定義された重要識別子(sensitive identifier)を、意味のない文字または文字列に置き換えてスクランブルするスクランブラーをさらに含みうる。
前記アプリケーションを伝送されたクライアントが前記開始ルーチンを用いて、前記アプリケーションを実行する場合、DEXファイル形態の前記一般コードが最適化されたODEX(Optimized DEX)ファイル形態に変換されてダルビック仮想マシン(DVM)にローディングされうる。
前記暗号化された重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部、及び重要コードが復号化され、前記ベクトルテーブル生成部は、前記ベクトルテーブルを生成し、前記重要コード呼び出し部変換部は、前記重要コード呼び出し部が前記重要コードを呼び出すように変換させ、前記重要コード呼び出し部は、前記ベクトルテーブルに記録されたベクトル値を通じて重要コードを呼び出せば、前記重要コード連結部は、前記ベクトルテーブルと前記重要コードのアドレス情報とを用いて、前記ベクトル値に対応する重要コードを呼び出して実行させることができる。
本発明の他の実施形態によれば、アプリケーション難読化装置を利用したアプリケーション難読化方法において、前記アプリケーションに用いられるコードを入力される段階と、前記入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コード、及び前記重要コードを呼び出すための重要コード呼び出し部を含む一般コードに分離する段階と、前記重要コードを暗号化し、前記重要コードのそれぞれのアドレス情報を保存している重要コード連結部のアドレス情報を挿入する段階と、前記一般コードにダミーコードを挿入して、前記重要コード呼び出し部が、前記ダミーコードを呼び出すように変換し、前記重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を前記重要コードに挿入する段階と、前記アプリケーション実行時に、前記重要コード呼び出し部が、前記重要コードを呼び出すようにする重要コード呼び出し部変換部を前記重要コードに挿入する段階と、前記一般コードと重要コードとを結合して、前記アプリケーションを生成する段階と、を含む。
本発明によれば、アプリケーションを構成するコードを重要コードと一般コードとに分離して互いに異なる環境で暗号化を適用することによって、既存のマネージドコードに存在する逆工学脆弱性を補完して、アプリケーションの偽造ないし変造に対する保安性を高めうる。
また、重要コードを呼び出すための重要コード呼び出し部がアプリケーションの非実行時には、ダミーコードを呼び出す形態で保存されており、アプリケーションの実行時に、自己書換え技法を用いて実際に重要コードを呼び出すように変換するために、攻撃者の静的及び動的分析を防止する。
本発明の実施形態によるアプリケーション難読化装置の構成図である。 本発明の実施形態によるアプリケーション難読化方法のフローチャートである。 本発明の実施形態による重要コードのファイル構造を説明する図面である。 本発明の実施形態による難読化された重要コードのファイル構造を説明する図面である。 本発明の実施形態によるクライアント端末がアプリケーションを実行させる過程を説明するフローチャートである。 本発明の実施形態によるクライアント端末が難読化されたアプリケーションを実行する過程を説明する図面である。 本発明の実施形態によるクライアント端末が難読化されたアプリケーションを実行する過程を説明する図面である。 本発明の実施形態によるベクトルテーブルを説明する図面である。
以下、添付した図面を参照して、当業者が容易に実施できるように本発明の実施形態を詳しく説明する。しかし、本発明は、さまざまな異なる形態で具現され、ここで説明する実施形態に限定されるものではない。そして、図面で本発明を明確に説明するために、説明と関係のない部分は省略し、明細書全体を通じて類似した部分については、類似した図面符号を付する。
まず、本発明の実施形態によるアプリケーション難読化装置について説明する。
図1は、本発明の実施形態によるアプリケーション難読化装置を説明する図面である。
図1を参照すれば、本発明の実施形態によるアプリケーション難読化装置100は、入力部110、コード分離部120、コード変換部130、スクランブラー140、暗号化部145、制御部150、及びコード結合部160を含み、コンパイル部170をさらに含みうる。
まず、入力部110は、アプリケーションのコードを入力される。ここで、入力されるコードは、アプリケーションを生成するためのコードであって、ソースコード(Source Code)またはマネージドコード形式のコードであり得る。
コード分離部120は、入力部110から入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コードと、前記重要コード以外の一般コードとに分離する。
コード変換部130は、コード分離部120から分離された重要コードをマネージドコードからネイティブコード(Native Code)に変換する。
スクランブラー140は、重要コードと一般コードとで定義された重要識別子を、意味のない文字または文字列に置き換えてスクランブル(Scramble)する。
暗号化部145は、コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化する。
制御部150は、一般コードにダミーコードを挿入して重要コード呼び出し部がダミーコードを呼び出すように変換させる。また、重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を重要コードに挿入する。そして、制御部150は、アプリケーション実行時に、重要コード呼び出し部が、重要コードを呼び出すようにする重要コード呼び出し部変換部を重要コードに挿入する。
コード結合部160は、暗号化された一般コードと重要コードとを結合してクライアントに配布が可能な形態の結合ファイルを生成する。本発明による一実施形態としてアンドロイドアプリケーションの場合、拡張子がapk(Android package)であるファイルが結合ファイルに該当する。
コンパイル部170は、重要ファイルをコンパイルするためにネイティブ環境で動作する第1コンパイル部171と、一般コードをコンパイルするためにマネージド環境で動作する第2コンパイル部172とを含みうる。
第1コンパイル部171は、重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをネイティブ環境でコンパイルする。そして、第2コンパイル部172は、重要コード呼び出し部がダミーコードを呼び出すように変換された一般コードをマネージド環境でコンパイルして実行ファイルを生成する。
以下、本発明の実施形態によるアプリケーション難読化方法について説明する。
図2は、本発明の実施形態によるアプリケーション難読化方法のフローチャートである。
入力部110は、アプリケーションのコードを入力される(ステップS210)。入力部110は、キーパッド形態として入力インターフェース部が備えられうる。入力されるコードは、ソースコードであるか、ジャバ仮想マシン(JVM)またはダルビック仮想マシン(DVM)で実行可能なマネージドコード形式のコードであり得る。
コード分離部120は、入力部110から入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コードと、前記重要コード以外の一般コードとに分離する(ステップS220)。
ここで、一般コードは、一般コード領域で重要コードまたは重要コードが変換されたネイティブコードを呼び出すことができる重要コード呼び出し部(Sensitive Method Calling Routine)を含む。重要コードとは、ユーザの観点で攻撃者の偽造ないし変造の行為から保護せねばならないコードを表わす。重要コードと反対される概念として重要コード以外のコードを一般コードと称する。核心コードは、重要コードと同義語として用いられる。
コード区分のためにコード分離部120は、既保存された重要コードモデルを用いて、前記入力された実行コードで重要コードモデルとマッチングされるコードを重要コードと判断する。
コード変換部130は、コード分離部120から分離された重要コードをマネージドコードからネイティブコードに変換する(ステップS230)。すなわち、コード変換部130は、マネージドコード形態の重要コードをネイティブコード形態に変換する。ネイティブコードは、JVMまたはDVMで実行されるマネージドコードとは異なって、CPU環境で実行され、マネージドコードよりもバイナリコードに近いコードである。
本発明による一実施形態として、コード変換部130は、重要コードをCコードに変換することができる。以下、本発明の実施形態で、重要コードは、ネイティブコードまたはCコードと同義語として用いられる。
重要コードは、ELF(Executable and Linkable Format)形態でネイティブコードセクションに保存される。ELF形態は、コードの構造が明示的に区分されず、DEX形態に比べて、コードの偽造ないし変造のための動的分析または静的分析に相対的に容易に露出されない長所がある。また、ELF形態は、命令語構成がダルビック(Dalvik)命令語に比べて、機械語に近い低いレベルのCPU命令語で構成されており、攻撃者の動的分析及び静的分析を難しくする。
また、コード変換部130は、一般コードに重要コードと連動してローディングするための開始ルーチンを追加することができる(ステップS235)。本発明による一実施形態として、開始ルーチンは、JNI(Java Native Interface)関数を含みうる。
スクランブラー140は、重要コードと一般コードとで定義された重要識別子を、意味のない文字または文字列に置き換えてスクランブルする(ステップS240)。識別子変換(Scramble Identifier)は、コード内の識別子(Identifier)を1つまたはそれ以上のアルファベット羅列に変えて逆工学を難しくする配置難読化の一種である。
S240のように、スクランブル過程を経れば、重要コードは、図の左側図面のようなネイティブファイル構造を有する。
図3は、本発明の実施形態による重要コードのファイル構造を説明する図面であり、図4は、本発明の実施形態による難読化された重要コードのファイル構造を説明する図面である。
の左側図面を見れば、Export Tableは、複数の重要コード(重要コードA、重要コードB、…)のそれぞれのアドレスを含んでいるが、それぞれのアドレスは、ネイティブコードセクションにライブラリ形態で保存された当該重要コード(重要コードA、重要コードB、…)にそれぞれ対応する。
次いで、暗号化部145は、文字列に対して暗号化を行う(ステップS245)。すなわち、暗号化部145は、ネイティブ環境で重要コード内の文字列に対して保存場所(Data Storage)変換、エンコーディング(Data Encoding)変換、順序(Data Ordering)変換のような資料難読化技法を使って文字列を暗号化することができる。
そして、暗号化部145は、図の右側図面のようにネイティブコードセクションにコード形態の重要コード連結部を生成するが、この際、重要コード連結部は、図の左側図面のExport Tableに定義されたネイティブコードのそれぞれに対するアドレス情報を含む。
そして、暗号化部145は、図の左側図面のExport Tableに定義されたネイティブコードのそれぞれに対するアドレスを併合(Merge)して、図の右側図面のように重要コード連結部のアドレスを生成する(ステップS250)。
その結果、図の右側図面のようにExport Tableには、重要コード連結部の位置を表わすアドレス情報が保存される。
次いで、制御部150は、Javaコード形態の一般コードにダミーコード(Dummy code、ゴミコード)を挿入し(ステップS255)、重要コードを呼び出すための重要コード呼び出し部がダミーコードを呼び出すように重要コード呼び出し部を変換する(ステップS260)。このように、ダミーコードを呼び出すように変換することによって、攻撃者から静的攻撃を防止し、アプリケーション実行時に、自己書換え技法を通じて重要コードを呼び出すように変換して正常な実行にする。
そして、制御部150は、重要コードにベクトルテーブルを生成するためのベクトルテーブル生成部を挿入する(ステップS270)。ここで、ベクトルテーブルは、今後アプリケーションがクライアント端末でローディングされる時、重要コードを呼び出すために使われる。
次いで、制御部150は、重要コードに重要コード呼び出し部変換部を挿入する(ステップS275)。重要コード呼び出し部変換部は、アプリケーション実行時に、ダミーコードを呼び出す重要コード呼び出し部が、重要コードを呼び出すように変換して正常にアプリケーションを実行させる。
次いで、第1コンパイル部171は、重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをコンパイルし、暗号化部145は、コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化することができる(ステップS280)。
は、S280過程を通じて難読化された重要コードの構造を示すものであって、図から見るように、重要コードは、重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部と共に暗号化され、復号化ルーチンが結合された構造を有する。
第2コンパイル部172は、S260段階を通じて重要コード呼び出し部がダミーコードを呼び出すように変換された一般コードをコンパイルして実行ファイルを生成する(ステップS290)。本発明による実施形態として、実行ファイルは、JVMまたはDVMで動作するファイルであり、具体的には、DEXファイルである。
コード結合部160は、それぞれ暗号化された一般コードと重要コードとを結合して結合ファイル形態の難読化されたアプリケーションを生成する(ステップS295)。そして、コード結合部160によって生成されたアプリケーションは、アプリケーションストア、アンドロイドマーケットなどにアップロードされ、今後ネットワーク連結されたクライアント端末にダウンロードされる。
以下、図5ないし図7を通じて、アプリケーションをダウンロードされたクライアント端末が、アプリケーションを実行させる過程について説明する。
図5は、本発明の実施形態によるクライアント端末がアプリケーションを実行させる過程を説明するフローチャートであり、図6A及び図6Bは、本発明の実施形態によるクライアント端末が難読化されたアプリケーションを実行する過程を説明する図面である。図7は、本発明の実施形態によるベクトルテーブルを説明する図面である。
まず、クライアント端末は、アンドロイドマーケットやアプリケーションストアを通じて難読化されたアプリケーションをダウンロードされる(ステップS510)。
そうすると、難読化されたアプリケーションがクライアント端末に設けられるが、難読化されたアプリケーションは、ダルビック仮想マシンで動作する一般コード部分とネイティブ環境で動作するELF形態の重要コード部分とに分けられる。
ここで、一般コード部分は、図6Aのような構造を有する。すなわち、一般コード部分は、DEXファイル形態でなされ、ダミーコードと複数の重要コード呼び出し部、開始ルーチンを含む。そして、前述したように、重要コード呼び出し部は、攻撃者の静的分析の防止のためにダミーコードを呼び出すように設計される。
ユーザがダウンロードされたアプリケーションを実行させれば(ステップS520)、クライアントの制御部(図示せず)は、図6Bのように一般コードに含まれた開始ルーチンを用いて、一般コードをダルビック仮想マシン(DVM)にローディングさせる。ここで、一般コードは、DEXファイル形態で直ちに実行されず、DEX最適化(Optimization)過程を経てODEXファイル形態に変換されてダルビック仮想マシン(DVM)にローディングされる。
このような最適化過程を通じてDEXファイルでは、文字列データであるデスクリプタを利用した重要コード呼び出し方式が、ODEXファイルでは、Vtableという資料構造のアドレスを通じる重要コード呼び出し方式に変換される。
一方、ユーザがダウンロードされたアプリケーションを実行させれば、重要コードは、CPUが制御するメモリ領域にローディングされる。
そうすると、重要コードに含まれた復号化ルーチンは、ネイティブコード自己書換え技法を用いて暗号化された重要コード部分(重要コードA、重要コードB、…、重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部)を復号化させる(ステップS530)。
このように重要コード部分が復号化されれば、ベクトルテーブル生成部は、ベクトルテーブルを生成する(ステップS540)。ここで、ベクトルテーブルは、重要コード呼び出し部と呼び出される重要コードとの間を連結するベクトル情報の集合であって、図7のように動的ベクトルのそれぞれは、呼び出される重要コードとそれぞれマッチングされる。図7によるベクトルテーブルでは、動的ベクトルVは、重要コードAと、動的ベクトルVは、重要コードCと、動的ベクトルVは、重要コードBとそれぞれマッチングされることを例とした。
次いで、重要コード呼び出し部変換部は、ダミーコードを呼び出していた重要コード呼び出し部が重要コードを呼び出すように重要コード呼び出し部を変換させる(ステップS550)。すなわち、重要コード呼び出し部変換部は、生成されたベクトルテーブルに対応して、各重要コード呼び出し部のベクトル値を変換させる。図7と関連して例を挙げれば、アプリケーション実行前にダミーコードを呼び出していた重要コード呼び出し部(A_dummy)が、重要コードAを呼び出すようにmerged_V1のような方式に変換される。
このように、重要呼び出し部変換部が、ダミーコードを呼び出していた重要コード呼び出し部を、重要コードを呼び出すように変換させることができる理由は、ODEXファイルで重要コード呼び出し時に使われるVtableとアドレスを、ダミーコード用で重要コード用Vtableとアドレスに変換するためである。
すなわち、重要コード呼び出し部変換部が実行されれば、メモリに積載されたODEXで変換された重要コード呼び出し部を検索して、自己書換え技法を通じて、ダミーコード呼び出し用Vtableとアドレスを、重要コード呼び出し用Vtableとアドレスに変換し、呼び出しに必要なベクトル値も変換する。この際、自己書換え技法によって復元された重要コード呼び出し部で使われる呼び出しベクトルは、動的に生成されたベクトルテーブルによって決定され、ベクトルテーブルは、ネイティブコードで構成された生成者によって生成される。したがって、ベクトルマッピングは、毎実行時ごとに変わり、これを生成するための別途のサーバを要求せず、経済的な長所がある。
したがって、本発明の実施形態によれば、ODEXに含まれているVtableを用いて、アプリケーション実行前にダミーコードを呼び出した重要コード呼び出し部が重要コードを呼び出すように変換される。
このように、復元された重要コード呼び出し部は、ベクトルテーブルに記録されたベクトル値を通じて重要コードを呼び出し、重要コード連結部は、ベクトルテーブルを通じて因子に越える来るベクトル値にマッピングされる重要コードを呼び出す(ステップS560)。すなわち、重要コード呼び出し部が、merged_V1のような方式で重要コードAを要請すれば、重要コード連結部は、ベクトルテーブルを参照して、Vに対応する重要コードAを呼び出す。
このように、重要コード呼び出し部変換部によって重要コード呼び出し部の変換が完了して、アプリケーションに含まれたあらゆるルーチンは正常な実行が可能になる。
このように、本発明の実施形態によれば、重要コードは、ELF形態で保存され、重要コードの構造が明示的に区分されず、DEX形態に比べて、相対的に少ない分析情報を露出させるようになり、命令語構成がダルビック命令語に比べて、低いレベルのCPU命令語で構成されて、攻撃者の分析を妨害する。また、攻撃者は、低いレベルのCPU命令語と明示的ではない重要コード構造によって分析複雑度が増加し、ダルビック仮想マシン(Dalvik VM)のマネージド環境とネイティブ環境とで動作するコードを、同時に分析しなければならず、かつ各環境に合う難読化技法を適用しなければならないので、コード分析を難解にする。また、重要コードを呼び出す重要コード呼び出し部がアプリケーションの非実行時には、ダミーコードを呼び出す形態で保存されており、アプリケーションの実行時に、自己書換え技法を用いて実際に重要コードを呼び出すように変換するために、攻撃者の静的及び動的分析を防止する。
以上、本発明について実施形態を中心に説明した。当業者ならば、本発明の本質的な特性から外れない範囲内で変形された形態として具現可能であるということを理解できるであろう。したがって、開示された実施形態は、限定的な観点ではなく、説明的な観点で考慮されなければならない。したがって、本発明の範囲は、前述した実施形態に限定されず、特許請求の範囲に記載の内容及びそれと同等な範囲内にある多様な実施形態が含まれるように解釈しなければならない。
本発明は、自己書換え基盤のアプリケーションコード難読化装置及びその方法関連の技術分野に適用可能である。



Claims (12)

  1. アプリケーションに用いられるコードを入力される入力部と、
    前記入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コード、及び前記重要コードを呼び出すための重要コード呼び出し部を含む一般コードに分離するコード分離部と、
    前記重要コードを暗号化し、前記重要コードのそれぞれのアドレス情報を保存している重要コード連結部のアドレス情報を挿入する暗号化部と、
    前記一般コードにダミーコードを挿入して、前記重要コード呼び出し部が、前記ダミーコードを呼び出すように変換し、前記重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を前記重要コードに挿入し、前記アプリケーション実行時に、前記重要コード呼び出し部が、前記重要コードを呼び出すようにする重要コード呼び出し部変換部を前記重要コードに挿入する制御部と、
    前記一般コードと重要コードとを結合して、前記アプリケーションを生成するコード結合部と、を含むアプリケーション難読化装置。
  2. 前記重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをネイティブ環境でコンパイルする第1コンパイル部と、
    前記重要コード呼び出し部が、ダミーコードを呼び出すように変換された一般コードをマネージド環境でコンパイルして実行ファイルを生成する第2コンパイル部と、をさらに含む請求項1に記載のアプリケーション難読化装置。
  3. 前記暗号化部は、
    前記コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化する請求項2に記載のアプリケーション難読化装置。
  4. 前記コード変換部は、
    前記一般コードに前記重要コードと連動してローディングするための開始ルーチンを追加する請求項3に記載のアプリケーション難読化装置。
  5. 前記重要コード及び一般コードで定義された重要識別子を、意味のない文字または文字列に置き換えてスクランブルするスクランブラーをさらに含む請求項4に記載のアプリケーション難読化装置。
  6. 前記アプリケーションを伝送されたクライアントが前記開始ルーチンを用いて、前記アプリケーションを実行する場合、
    DEXファイル形態の前記一般コードが最適化されたODEXファイル形態に変換されてダルビック仮想マシン(DVM)にローディングされる請求項5に記載のアプリケーション難読化装置。
  7. 前記暗号化された重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部、及び重要コードが復号化され、
    前記ベクトルテーブル生成部は、前記ベクトルテーブルを生成し、
    前記重要コード呼び出し部変換部は、前記重要コード呼び出し部が前記重要コードを呼び出すように変換させ、
    前記重要コード呼び出し部は、前記ベクトルテーブルに記録されたベクトル値を通じて重要コードを呼び出せば、前記重要コード連結部は、前記ベクトルテーブルと前記重要コードのアドレス情報とを用いて、前記ベクトル値に対応する重要コードを呼び出して実行させる請求項6に記載のアプリケーション難読化装置。
  8. アプリケーション難読化装置を利用したアプリケーション難読化方法において、
    前記アプリケーションに用いられるコードを入力される段階と、
    前記入力されたコードを分析して、アプリケーションの偽造ないし変造の攻撃から保護せねばならない重要コード、及び前記重要コードを呼び出すための重要コード呼び出し部を含む一般コードに分離する段階と、
    前記重要コードを暗号化し、前記重要コードのそれぞれのアドレス情報を保存している重要コード連結部のアドレス情報を挿入する段階と、
    前記一般コードにダミーコードを挿入して、前記重要コード呼び出し部が、前記ダミーコードを呼び出すように変換し、前記重要コードのベクトル情報が含まれたベクトルテーブルを生成するためのベクトルテーブル生成部を前記重要コードに挿入する段階と、
    前記アプリケーション実行時に、前記重要コード呼び出し部が、前記重要コードを呼び出すようにする重要コード呼び出し部変換部を前記重要コードに挿入する段階と、
    前記一般コードと重要コードとを結合して、前記アプリケーションを生成する段階と、を含むアプリケーション難読化方法。
  9. 前記重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部が追加された重要コードをネイティブ環境でコンパイルする段階と、
    前記重要コード呼び出し部が、ダミーコードを呼び出すように変換された一般コードをマネージド環境でコンパイルして実行ファイルを生成する段階と、をさらに含む請求項8に記載のアプリケーション難読化方法。
  10. 前記暗号化部は、
    前記コンパイルされた重要コードに自己書換え基盤のコード保護技法を適用して、バイナリコードを暗号化する請求項9に記載のアプリケーション難読化装置。
  11. 前記アプリケーションを伝送されたクライアントが開始ルーチンを用いて、前記アプリケーションを実行する場合、
    DEXファイル形態の前記一般コードが最適化されたODEXファイル形態に変換されてダルビック仮想マシン(DVM)にローディングされる請求項10に記載のアプリケーション難読化方法。
  12. 前記アプリケーションを伝送されたクライアントが開始ルーチンを用いて、前記アプリケーションを実行する場合、
    前記暗号化された重要コード連結部、ベクトルテーブル生成部、重要コード呼び出し部変換部、及び重要コードが復号化される段階と、
    前記ベクトルテーブル生成部は、前記ベクトルテーブルを生成する段階と、
    前記重要コード呼び出し部変換部は、前記重要コード呼び出し部が前記重要コードを呼び出すように変換させる段階と、
    前記重要コード呼び出し部は、前記ベクトルテーブルに記録されたベクトル値を通じて重要コードを呼び出せば、前記重要コード連結部は、前記ベクトルテーブルと前記重要コードのアドレス情報とを用いて、前記ベクトル値に対応する重要コードを呼び出して実行させる段階と、を含む請求項11に記載のアプリケーション難読化方法。
JP2015542939A 2013-09-27 2013-09-30 自己書換え基盤のアプリケーションコード難読化装置及びその方法 Active JP5996810B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
KR20130115309A KR101490047B1 (ko) 2013-09-27 2013-09-27 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법
KR10-2013-0115309 2013-09-27
PCT/KR2013/008750 WO2015046655A1 (ko) 2013-09-27 2013-09-30 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법

Publications (2)

Publication Number Publication Date
JP2016503543A true JP2016503543A (ja) 2016-02-04
JP5996810B2 JP5996810B2 (ja) 2016-09-21

Family

ID=52590314

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015542939A Active JP5996810B2 (ja) 2013-09-27 2013-09-30 自己書換え基盤のアプリケーションコード難読化装置及びその方法

Country Status (5)

Country Link
US (1) US9230123B2 (ja)
EP (1) EP2897074B1 (ja)
JP (1) JP5996810B2 (ja)
KR (1) KR101490047B1 (ja)
WO (1) WO2015046655A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018005915A (ja) * 2016-06-30 2018-01-11 Line株式会社 アプリケーションパッケージを提供する方法およびシステム、アプリケーションを実行する方法およびシステム

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101328012B1 (ko) * 2013-08-12 2013-11-13 숭실대학교산학협력단 애플리케이션 코드 난독화 장치 및 그 방법
US9659156B1 (en) * 2014-03-20 2017-05-23 Symantec Corporation Systems and methods for protecting virtual machine program code
KR101518420B1 (ko) * 2014-11-11 2015-05-07 주식회사 에스이웍스 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
KR101619458B1 (ko) * 2016-03-02 2016-05-10 (주)케이사인 애플리케이션 코드 난독화 장치 및 이를 이용한 애플리케이션 코드 난독화 방법
CN105975311B (zh) * 2016-05-09 2021-01-29 腾讯科技(深圳)有限公司 一种应用启动方法及装置
KR101704703B1 (ko) * 2016-06-08 2017-02-08 (주)케이사인 더미 코드를 사용하는 애플리케이션 코드 은닉 장치 및 이를 이용한 애플리케이션 코드 은닉 방법
KR101688814B1 (ko) * 2016-07-11 2016-12-22 (주)케이사인 주 기억 장치 내부의 코드 수정을 통한 애플리케이션 코드 은닉 장치 및 이를 이용한 애플리케이션 코드 은닉 방법
KR101753811B1 (ko) * 2016-12-14 2017-07-19 올댓소프트 코. 동적 할당 메모리를 이용하는 애플리케이션 코드 자가 변환 장치 및 이를 이용한 애플리케이션 코드 자가 변환 방법
JP7131946B2 (ja) 2017-04-20 2022-09-06 Line株式会社 アプリケーションの保安性を評価する方法およびシステム
WO2018194196A1 (ko) * 2017-04-20 2018-10-25 라인 가부시키가이샤 Elf 파일의 난독화 적용 여부의 탐지 및 보안성 평가를 위한 방법 및 시스템
US11314865B2 (en) * 2017-08-01 2022-04-26 The Trustees Of Princeton University Pluggable trust architecture
CN110032833B (zh) * 2018-01-11 2021-06-15 武汉斗鱼网络科技有限公司 一种Web应用程序的处理方法及装置
CN108536488B (zh) * 2018-04-17 2021-12-07 Oppo广东移动通信有限公司 应用启动优化方法、装置、存储介质及终端设备
US10776508B2 (en) * 2018-07-13 2020-09-15 Bank Of America Corporation Holistic and secure resource provisioning gateway system
KR102177920B1 (ko) * 2018-10-12 2020-11-13 네이버비즈니스플랫폼 주식회사 원본코드 패킹장치 및 원본코드 패킹방법
KR102113966B1 (ko) * 2019-11-25 2020-05-21 숭실대학교산학협력단 분석회피기법 우회 장치, 방법 및 이를 수행하기 위한 프로그램을 기록한 기록매체
US11748460B2 (en) * 2020-04-27 2023-09-05 Imperva, Inc. Procedural code generation for challenge code
KR20210154017A (ko) * 2020-06-11 2021-12-20 라인플러스 주식회사 클래스 분산 및 순차적 메모리 적재를 이용한 파일 보호 방법 및 시스템
KR20230142091A (ko) * 2022-04-01 2023-10-11 (주)잉카엔트웍스 Dex 파일 보호를 위한 보안 제공 장치와 방법 및 보안 실행 장치와 방법

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003280755A (ja) * 2002-03-25 2003-10-02 Nec Corp 自己復元型プログラム、プログラム生成方法及び装置、情報処理装置並びにプログラム
US20040003264A1 (en) * 2002-06-27 2004-01-01 Pavel Zeman System and method for obfuscating code using instruction replacement scheme
JP2005135265A (ja) * 2003-10-31 2005-05-26 Fujitsu Ltd 情報処理装置
US20070256061A1 (en) * 2006-04-26 2007-11-01 9Rays.Net, Inc. System and method for obfuscation of reverse compiled computer code

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6006328A (en) * 1995-07-14 1999-12-21 Christopher N. Drake Computer software authentication, protection, and security system
US6480959B1 (en) * 1997-12-05 2002-11-12 Jamama, Llc Software system and associated methods for controlling the use of computer programs
JP2001244349A (ja) * 2000-02-29 2001-09-07 Nec Corp 半導体装置とその製造方法
GB0024918D0 (en) * 2000-10-11 2000-11-22 Sealedmedia Ltd Method of providing java tamperproofing
US7409675B2 (en) * 2004-02-27 2008-08-05 Microsoft Corporation Code rewriting
JP2006072584A (ja) * 2004-08-31 2006-03-16 Fuji Xerox Co Ltd 実行プログラム生成装置、実行プログラム生成方法、プログラム処理装置、プログラム処理方法及びプログラム
JP4664055B2 (ja) 2004-12-10 2011-04-06 株式会社エヌ・ティ・ティ・ドコモ プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法
US20080168562A1 (en) * 2005-02-25 2008-07-10 Tomoyuki Haga Secure Processing Device and Secure Processing System
US10102398B2 (en) * 2009-06-01 2018-10-16 Ab Initio Technology Llc Generating obfuscated data
JP5689472B2 (ja) * 2009-11-13 2015-03-25 イルデト カナダ コーポレーション 悪意ある実行環境内での静的および動的攻撃からJavaバイトコードを保護するシステムおよび方法
EP2378452B1 (en) * 2010-04-16 2012-12-19 Thomson Licensing Method, device and computer program support for verification of checksums for self-modified computer code
KR101234591B1 (ko) 2011-05-13 2013-02-19 주식회사 인프라웨어테크놀러지 Jni를 이용한 안드로이드 난독화 방법
KR101265099B1 (ko) * 2011-06-15 2013-05-20 주식회사 터보테크 소프트웨어 보안 처리방법 및 기록매체
KR101269089B1 (ko) * 2011-08-19 2013-05-29 고려대학교 산학협력단 자가암호화를 이용한 소프트웨어 변조방지 방법
KR101299099B1 (ko) * 2011-09-07 2013-09-16 주식회사 팬택 임베디드 시스템에서 최적화된 가상화 모듈을 관리하는 장치 및 방법
JP2013061843A (ja) * 2011-09-14 2013-04-04 Fujifilm Corp コンピュータ・ソフトウエア解析システムならびにクライアント・コンピュータ,その動作制御方法およびその動作プログラム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003280755A (ja) * 2002-03-25 2003-10-02 Nec Corp 自己復元型プログラム、プログラム生成方法及び装置、情報処理装置並びにプログラム
US20040003264A1 (en) * 2002-06-27 2004-01-01 Pavel Zeman System and method for obfuscating code using instruction replacement scheme
JP2005135265A (ja) * 2003-10-31 2005-05-26 Fujitsu Ltd 情報処理装置
US20070256061A1 (en) * 2006-04-26 2007-11-01 9Rays.Net, Inc. System and method for obfuscation of reverse compiled computer code

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018005915A (ja) * 2016-06-30 2018-01-11 Line株式会社 アプリケーションパッケージを提供する方法およびシステム、アプリケーションを実行する方法およびシステム
JP7015120B2 (ja) 2016-06-30 2022-02-02 Line株式会社 アプリケーションパッケージを提供する方法およびシステム、アプリケーションを実行する方法およびシステム

Also Published As

Publication number Publication date
US20150154407A1 (en) 2015-06-04
EP2897074A4 (en) 2016-06-15
JP5996810B2 (ja) 2016-09-21
EP2897074B1 (en) 2017-06-14
US9230123B2 (en) 2016-01-05
KR101490047B1 (ko) 2015-02-04
EP2897074A1 (en) 2015-07-22
WO2015046655A1 (ko) 2015-04-02

Similar Documents

Publication Publication Date Title
JP5996810B2 (ja) 自己書換え基盤のアプリケーションコード難読化装置及びその方法
JP5990654B2 (ja) アプリケーションコード難読化装置及びその方法
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
TWI598765B (zh) Data protection methods and devices
JP5996809B2 (ja) コード難読化装置及びその方法
CN111475824B (zh) 数据访问方法、装置、设备和存储介质
CN107273723B (zh) 一种基于so文件加壳的Android平台应用软件保护方法
CN102236757A (zh) 一种适用于Android系统的软件保护方法及系统
US10482221B2 (en) Protecting a computer program against reverse engineering
US10867017B2 (en) Apparatus and method of providing security and apparatus and method of executing security for common intermediate language
CN114547558B (zh) 授权方法、授权控制方法及装置、设备和介质
CA3150187C (en) Method and apparatus for protecting web script codes
CN108134673A (zh) 一种生成白盒库文件的方法及装置
KR101667774B1 (ko) 스크립트 프로그램을 위한 보안 제공 장치 및 방법
CN117093964A (zh) 一种源代码的加密方法、装置、存储介质及电子设备
KR20180028666A (ko) 역공학 방지 방법 및 장치
CN114039743A (zh) 数据的加密方法、装置、存储介质以及终端
d’Amore et al. Source Code Anti-Plagiarism: AC# Implementation Using the Routing Approach
KR102177920B1 (ko) 원본코드 패킹장치 및 원본코드 패킹방법
Sonnleitner et al. Indirect Data Representation Via Offset Vectoring: A Code-integrity-driven In-memory Data Regeneration Scheme.
CN117492900A (zh) 类文件加载方法、装置、电子设备及存储介质
CN117828556A (zh) 一种代码处理方法、装置、电子设备及可读存储介质
CN115221478A (zh) 接口签名加密方法、装置、可读存储介质及电子设备
CN114297589A (zh) 应用程序的资源保护方法、资源读取方法及装置
CN110780884A (zh) 一种信息处理方法、装置及设备

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160428

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160531

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160711

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160816

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160824

R150 Certificate of patent or registration of utility model

Ref document number: 5996810

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250