JP2018530041A - アプリケーションのコード難読化のためのシステムおよび方法 - Google Patents

アプリケーションのコード難読化のためのシステムおよび方法 Download PDF

Info

Publication number
JP2018530041A
JP2018530041A JP2018506542A JP2018506542A JP2018530041A JP 2018530041 A JP2018530041 A JP 2018530041A JP 2018506542 A JP2018506542 A JP 2018506542A JP 2018506542 A JP2018506542 A JP 2018506542A JP 2018530041 A JP2018530041 A JP 2018530041A
Authority
JP
Japan
Prior art keywords
class
protected
encrypted
intermediate language
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
JP2018506542A
Other languages
English (en)
Other versions
JP2018530041A5 (ja
JP6815385B2 (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.)
Line Corp
Original Assignee
Line Corp
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 Line Corp filed Critical Line Corp
Publication of JP2018530041A publication Critical patent/JP2018530041A/ja
Publication of JP2018530041A5 publication Critical patent/JP2018530041A5/ja
Application granted granted Critical
Publication of JP6815385B2 publication Critical patent/JP6815385B2/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/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/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
    • 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/62Protecting access to data via a platform, e.g. using keys or access control rules
    • 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/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

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

Abstract

アプリケーションのコード難読化のためのシステムおよび方法を提供する。コンピュータで実現される方法であって、複数のクラスおよび複数のメソッドを含むアプリケーションのためのコードがコンパイルされて生成された中間言語(Intermediate Language:IL)コードをデックス(dex)ファイルとして含む応用プログラムパッケージをネットワークを介して受信する段階、前記複数のクラスおよび前記複数のメソッドから保護対象クラスまたは保護対象メソッドを選別する段階、前記デックスファイルから前記選別された保護対象クラスまたは前記選別された保護対象メソッドに対応する中間言語コードを検索して暗号化することにより、前記選別された保護対象クラスまたは前記選別された保護対象メソッドを暗号化する段階、および前記暗号化された保護対象クラスまたは前記暗号化された保護対象メソッドを復号化するための復号化情報を、前記応用プログラムパッケージがさらに含む保護モジュールに追加する段階を含むことを特徴とする、コンピュータで実現される方法を提供する。

Description

以下の説明は、アプリケーションのコード難読化のためのシステムおよび方法に関する。
中間言語(Intermediate LanguageまたはInterLanguage:IL)とは、原始言語プログラムをコンパイラによって翻訳して目的言語プログラムを生成するとき、その中間段階で経るようになる言語を意味する。例えば、高水準言語プログラムをアセンブリ言語に変えた後、これをアセンブルして機械語プログラムを生成するとき、中間のアセンブリ言語が中間言語となる。
特許文献1は、モバイルプラットフォームの中間言語変換装置およびその方法に関するものであって、CまたはC++言語で開発されたモバイルプラットフォームのソースコードを移動通信端末機のインタプリタで要求する中間言語コードに変換するC/C++コンパイラと、中間言語コードを移動通信端末機のインタプリタで実行されるフォーマットに変換する中間言語アセンブラについて開示している。
このような中間言語への変換を経るようになるアプリケーションのコードは、その特性上、デコンパイル(decompile)に弱い。例えば、ジャバ((登録商標)Java)のようなプログラミング言語で制作されたアプリケーションのコードは、中間言語への変換を経るという特性によりデコンパイルに弱いため、重要なコードが簡単に露出されるようになり、コード操作にも極めて弱い。より具体的な例として、ジャバで制作されたコードは、一般的にクラスごとに拡張子「.class」ファイルにコンパイルされ、アンドロイド(Android)では、ジャバで制作されたコードが「class.dex」のようにヘッダとデータで構成されたデックス(dex)ファイル(ジャバコードがコンパイルされた中間言語コードとしてのバイナリコードであるバイトコード)にコンパイルされる。バイトコードは、ジャバプログラムのコンパイルされた形態であって、ジャバプログラムがバイトコードに変換されればネットワークを介して送信可能となり、ジャバ仮想マシン(Virtual Machine:VM)によって実行可能となる。
このような中間言語コードの形態にコンパイルされたファイルは、一例としてサーバから電子機器に提供されるようになり、電子機器が支援する仮想マシン上で実行されるようになる。電子機器では、中間言語の特性により、中間言語コードの形態にコンパイルされたファイルをデコンパイルして本来のコードを得て修正し、再び中間言語コードの形態にコンパイルされたファイルにコンパイルすることが可能であるため、アプリケーションの偽造・変造につながる恐れがあるという問題を抱えている。
韓国公開特許第10−2007−0067953
アプリケーションのコードから重要なクラス(class)とメソッド(method)に該当するコードを選別して暗号化し、ランタイム(runtime)で暗号化されたコードを復号化することにより、デコンパイルによるアプリケーションの偽造・変造を防ぐことができるシステムおよび方法を提供する。
コンピュータで実現される方法であって、複数のクラスおよび複数のメソッドを含むアプリケーションのためのコードがコンパイルされて生成された中間言語(Intermediate Language:IL)コードをデックス(dex)ファイルとして含む応用プログラムパッケージをネットワークを介して受信する段階、前記複数のクラスおよび前記複数のメソッドから保護対象クラスまたは保護対象メソッドを選別する段階、前記デックスファイルから前記選別された保護対象クラスまたは前記選別された保護対象メソッドに対応する中間言語コードを検索して暗号化することにより、前記選別された保護対象クラスまたは前記選別された保護対象メソッドを暗号化する段階、および前記暗号化された保護対象クラスまたは前記暗号化された保護対象メソッドを復号化するための復号化情報を、前記応用プログラムパッケージがさらに含む保護モジュールに追加する段階を含むことを特徴とする、コンピュータで実現される方法を提供する。
一側によると、前記受信する段階は、クラスまたはメソッドを指定するための選別情報を前記ネットワークを介してさらに受信し、前記選別する段階は、前記選別情報に基づいて指定されたクラスまたはメソッドを前記保護対象クラスまたは前記保護対象メソッドとして選別することを特徴としてよい。
他の側面によると、前記選別する段階は、前記複数のクラスおよび前記複数のメソッドから前記アプリケーションの予め設定された機能に対応するクラスまたはメソッドを見つけ出して前記保護対象クラスまたは前記保護対象メソッドとして選別することを特徴としてよい。
また他の側面によると、前記予め設定された機能は、前記アプリケーションで提供されるサービスにおけるビリング(billing)機能、前記サービスにおける認証(authentication)機能、および前記サービスを提供するサーバとの通信機能のうちの少なくとも1つを含むことを特徴としてよい。
また他の側面によると、前記デックスファイルは、前記複数のクラスの個数と前記クラステーブルのオフセット(offset)が格納されたヘッダを含み、前記複数のクラスそれぞれは、前記複数のクラスそれぞれが含むメソッドに対するメソッドテーブルのオフセットを含み、前記暗号化する段階は、前記クラステーブルを利用して前記保護対象クラスに対応する中間言語コードを検索するか、前記メソッドテーブルを利用して前記保護対象メソッドに対応する中間言語コードを検索することを特徴としてよい。
また他の側面によると、前記応用プログラムパッケージがインストールされる電子機器におけるランタイム方式に応じて互いに異なる復号化情報が要求され、前記追加する段階は、前記互いに異なる復号化情報すべてを前記応用プログラムパッケージのセキュアモジュールに追加するか、前記互いに異なる復号化情報がセキュアモジュールに追加された互いに異なる複数の応用プログラムパッケージを生成することを特徴としてよい。
また他の側面によると、前記復号化情報は、電子機器において前記アプリケーションをダルビックランタイム(Dalvik runtime)で実行する場合のために、前記暗号化された中間言語コードのオフセット、前記暗号化された中間言語のサイズ、および暗号化に利用されたキーに関する情報を含むことを特徴としてよい。
また他の側面によると、前記電子機器において、前記電子機器のメモリにロードされた前記デックスファイルのデックスヘッダで前記暗号化された中間言語コードのオフセットから前記暗号化された中間言語コードのサイズだけのコードを前記キーによって復号化して前記デックスヘッダにオーバーライトすることにより、前記暗号化された保護対象メソッドが復号化されることを特徴としてよい。
また他の側面によると、前記復号化情報は、電子機器において前記アプリケーションをART(Android runtime)で実行する場合のために、(1)前記暗号化された保護対象メソッドが含まれたクラスまたは前記暗号化された保護対象クラスのクラスインデックス、(2)前記暗号化された保護対象メソッドのメソッドインデックス、(3)前記保護対象クラスまたは前記保護対象メソッドを含むデックスファイルを含むことを特徴としてよい。
また他の側面によると、前記電子機器において前記復号化情報として含まれたデックスファイルをコンバータによってコンパイルして保護対象クラスまたは保護対象メソッドのネイティブコードを取得し、前記電子機器のメモリにロードされたデックスファイルのヘッダから前記クラスインデックスおよび前記メソッドインデックスを利用して暗号化された中間言語コードを検索し、前記検索された暗号化された中間言語コードに、前記取得したネイティブコードのうちの前記暗号化された中間言語コードに対応するネイティブコードをオーバーライトすることにより、前記暗号化された保護対象メソッドが復号化されることを特徴としてよい。
また他の側面によると、前記方法は、前記中間言語コードの暗号化によって変更されたデックスファイルのCRC(Cyclic Redundancy Check)およびハッシュ値を更新する段階をさらに含むことを特徴としてよい。
また他の側面によると、前記方法は、ネットワークを介した電子機器からの要請に応じて前記中間言語コードが暗号化され、前記復号化情報が追加された前記応用プログラムパッケージを前記電子機器に送信する段階をさらに含むことを特徴としてよい。
コンピュータで実現される方法において、複数のクラスおよび複数のメソッドを含むアプリケーションのためのコードがコンパイルされて生成された中間言語(Intermediate Language:IL)コードをデックス(dex)ファイルとして含み、前記中間言語コードのうちの少なくとも一部のコードが暗号化され、前記暗号化された中間言語コードを復号化するための復号化情報がセキュアモジュールに含まれた応用プログラムパッケージをサーバからネットワークを介して受信する段階、および前記アプリケーションの実行過程において、適用可能なランタイム方式にしたがい、前記復号化情報を利用して前記暗号化された中間言語コードを復号化するか、前記暗号化された中間言語コードを前記復号化情報が含む中間言語コードに交換して実行する段階を含み、前記暗号化された中間言語コードは、前記複数のクラスまたは前記複数のメソッドのうちの前記サーバで選別された保護対象クラスまたは保護対象メソッドの中間言語コードが暗号化されて生成されることを特徴とする、コンピュータで実現される方法を提供する。
1つ以上のプロセッサを含むサーバのシステムであって、前記1つ以上のプロセッサは、複数のクラスおよび複数のメソッドを含むアプリケーションのためのコードがコンパイルされて生成された中間言語(Intermediate Language:IL)コードをデックス(dex)ファイルとして含む応用プログラムパッケージをネットワークを介して受信するように前記サーバを制御する受信制御部、前記複数のクラスおよび前記複数のメソッドから保護対象クラスまたは保護対象メソッドを選別するように前記サーバを制御する選別制御部、前記デックスファイルから前記選別された保護対象クラスまたは前記選別された保護対象メソッドに対応する中間言語コードを検索して暗号化することにより、前記選別された保護対象クラスまたは前記選別された保護対象メソッドを暗号化するように前記サーバを制御する暗号化制御部、および前記暗号化された保護対象クラスまたは前記暗号化された保護対象メソッドを復号化するための復号化情報を前記応用プログラムパッケージがさらに含む保護モジュールに追加するように前記サーバを制御する追加制御部を備えることを特徴とする、システムを提供する。
アプリケーションのコードから重要なクラス(class)とメソッド(method)に該当するコードを選別して暗号化し、ランタイム(runtime)で暗号化されたコードを復号化することにより、デコンパイルによってアプリケーションの偽造・変造を防ぐことができる。
本発明の一実施形態における、ネットワーク環境の例を示した図である。 本発明の一実施形態における、電子機器およびサーバの内部構成を説明するためのブロック図である。 クラスとメソッドを含むデックスファイルの構造の例を示した図である。 本発明の一実施形態における、デックスファイルに含まれたクラスとメソッドから保護対象として選別されたクラスとメソッドを表示した例を示した図である。 本発明の一実施形態における、保護対象として選別されたクラスとメソッドが暗号化されることを表示した例を示した図である。 本発明の一実施形態における、ARTで暗号化されたネイティブコードを探し出す過程を示した図である。 本発明の一実施形態における、サーバのプロセッサが含むことのできる構成要素の例を示した図である。 本発明の一実施形態における、サーバが実行することのできる方法の例を示したフローチャートである。 本発明の一実施形態における、電子機器のプロセッサが含むことのできる構成要素の例を示した図である。 本発明の一実施形態における、電子機器が実行することのできる方法の例を示した図である。
以下、実施形態について、添付の図面を参照しながら詳しく説明する。
図1は、本発明の一実施形態における、ネットワーク環境の例を示した図である。図1のネットワーク環境は、複数の電子機器110、120、130、140、複数のサーバ150、160、およびネットワーク170を含む例を示している。このような図1は、発明の説明のための一例に過ぎず、電子機器の数やサーバの数が図1のように限定されることはない。
複数の電子機器110、120、130、140は、コンピュータシステムによって実現される固定型端末や移動型端末であってよい。複数の電子機器110、120、130、140の例としては、スマートフォン、携帯電話、ナビゲーション、コンピュータ、ノート型パンコン、デジタル放送用端末、PDA(Personal Digital Assistants)、PMP(Portable Multimedia Player)、タブレットなどがある。一例として、電子機器1(110)は、無線または有線通信方式を利用し、ネットワーク170を介して他の電子機器120、130、140および/またはサーバ150、160と通信してよい。
通信方式が制限されることはなく、ネットワーク170が含むことのできる通信網(一例として、移動通信網、有線インターネット、無線インターネット、放送網)を活用する通信方式だけではなく、機器間の近距離無線通信が含まれてもよい。例えば、ネットワーク170は、PAN(personal area network)、LAN(local area network)、CAN(campus area network)、MAN(metropolitan area network)、WAN(wide area network)、BBN(broadband network)、インターネットなどのネットワークのうちの1つ以上の任意のネットワークを含んでよい。さらに、ネットワーク170は、バスネットワーク、スターネットワーク、リングネットワーク、メッシュネットワーク、スター−バスネットワーク、ツリーまたは階層的ネットワークなどを含むネットワークトポロジのうちの任意の1つ以上を含んでもよいが、これに制限されることはない。
サーバ150、160それぞれは、電子機器110、120、130、140とネットワーク170を介して通信して命令、コード、ファイル、コンテンツ、サービスなどを提供する装置または複数の装置によって実現されてよい。
一例として、サーバ150は、ネットワーク170を介して接続した電子機器1(110)にアプリケーションのインストールのためのファイルを提供してよい。この場合、電子機器1(110)は、提供されたファイルを利用してアプリケーションをインストールしてよい。また、電子機器1(110)が含むオペレーティングシステム(Operating System:OS)および少なくとも1つのプログラム(一例として、ブラウザや前記インストールされたアプリケーション)の制御にしたがってサーバ160に接続し、サーバ160が提供するサービスやコンテンツの提供を受けてもよい。例えば、電子機器1(110)がアプリケーションの制御にしたがってネットワーク170を介してサービス要求メッセージをサーバ160に送信すると、サーバ160はサービス要求メッセージに対応するコードを電子機器1(110)に送信してよく、電子機器1(110)はアプリケーションの制御にしたがってコードに基づく画面を構成して表示することにより、ユーザにコンテンツを提供してよい。
図2は、本発明の一実施形態における、電子機器およびサーバの内部構成を説明するためのブロック図である。図2では、1つの電子機器に対する例として電子機器1(110)の内部構成を、1つのサーバに対する例としてサーバ(150)の内部構成を説明する。
電子機器1(110)とサーバ150は、メモリ211、221、プロセッサ212、222、通信モジュール213、223、および入力/出力インタフェース214、224を含んでよい。メモリ211、221は、コンピュータで読み取り可能な記録媒体であって、RAM(random access memory)、ROM(read only memory)、およびディスクドライブのような永久大容量記憶装置を含んでよい。また、メモリ211、221には、オペレーティングシステムと、少なくとも1つのプログラムコード(一例として、電気機器1(110)にインストールされ駆動するブラウザや上述したアプリケーションなどのためのコード)が格納されてよい。このようなソフトウェア構成要素は、ドライブメカニズムを利用してメモリ211、221とは別のコンピュータで読み取り可能な記録媒体からロードされてよい。このような別のコンピュータで読み取り可能な記録媒体は、フロッピードライブ、ディスク、テープ、DVD/CD−ROMドライブ、メモリカードなどのコンピュータで読み取り可能な記録媒体を含んでよい。他の実施形態において、ソフトウェア構成要素は、コンピュータで読み取り可能な記録媒体ではない通信モジュール213、223を利用してメモリ211、221にロードされてもよい。例えば、少なくとも1つのプログラムは、開発者またはアプリケーションのインストールファイルを配布するファイル配布システム(一例として、上述したサーバ150)がネットワーク170を介して提供するファイルによってインストールされるプログラム(一例として、上述したアプリケーション)に基づいてメモリ211、221にロードされてよい。
プロセッサ212、222は、基本的な算術、ロジック、および入出力演算を実行することにより、コンピュータプログラムの命令を処理するように構成されてよい。命令は、メモリ211、221または通信モジュール213、223によって、プロセッサ212、222に提供されてよい。例えば、プロセッサ212、222は、メモリ211、221のような記録装置に格納されたプログラムコードにしたがって受信される命令を実行するように構成されてよい。
通信モジュール213、223は、ネットワーク170を介して電子機器1(110)とサーバ150とが互いに通信するための機能を提供してもよいし、他の電子機器(一例として、電子機器2(120))または他のサーバ(一例として、サーバ160)と通信するための機能を提供してもよい。一例として、電子機器1(110)のプロセッサ212がメモリ211のような記録装置に格納されたプログラムコードにしたがって生成した要求(一例として、コンテンツに対するストリーミングサービス要請)が、通信モジュール213の制御にしたがいネットワーク170を介してサーバ150に伝達されてよい。これとは逆に、サーバ150のプロセッサ222の制御にしたがって提供される制御信号や命令、コンテンツ、ファイルなどが、通信モジュール223とネットワーク170を経て電子機器1(110)の通信モジュール213を通じて電子機器1(110)に受信されてよい。例えば、モジュール213を通じて受信されたサーバ150の制御信号や命令などは、プロセッサ212やメモリ211に伝達されてよく、コンテンツやファイルなどは、電子機器1(110)がさらに含むことのできる格納媒体に格納されてよい。
入力/出力インタフェース214、224は、入力/出力装置215とのインタフェースのための手段であってよい。例えば、入力装置は、キーボードまたはマウスなどの装置を、出力装置は、アプリケーションの通信セッションを表示するためのディスプレイのような装置を含んでよい。他の例として、入力/出力インタフェース214は、タッチスクリーンのように入力と出力のための機能が1つに統合された装置とのインタフェースのための手段であってよい。より具体的な例として、電子機器1(110)のプロセッサ212は、メモリ211にロードされたコンピュータプログラムの命令を処理するにあたり、サーバ150や電子機器2(120)が提供するデータを利用して構成されるサービス画面やコンテンツが入力/出力インタフェース214を通じてディスプレイに表示されてよい。
また、他の実施形態において、電子機器1(110)とサーバ150は、図2の構成要素よりもさらに多くの構成要素を含んでもよい。しかし、大部分の従来技術構成要素を明確に図に示す必要はない。例えば、電子機器1(110)は、上述した入力/出力装置215のうちの少なくとも一部を含むように実現されてもよいし、トランシーバ、GPS(Global Positioning System)モジュール、カメラ、各種センサなどのような他の構成要素をさらに含んでもよい。
図3は、クラスとメソッドを含むデックスファイルの構造の例を示した図であり、図4は、本発明の一実施形態における、デックスファイルに含まれたクラスとメソッドから保護対象として選別されたクラスとメソッドを表示した例を示した図である。さらに、図5は、本発明の一実施形態における、保護対象として選別されたクラスとメソッドが暗号化されることを表示した例を示した図である。
図3に示すように、デックスファイル300は、N個(Nは自然数)のクラスと、それぞれのクラスごとにn個(nは自然数)のメソッドを含む構造であってよい。図3では、クラスごとにn個のメソッドが含まれた例を示しているが、クラスごとに含まれるメソッドの個数はクラスごとに異なってよい。このようなデックスファイル300は、開発者によって開発されたアンドロイド応用プログラムパッケージ(Android Application package:APK)に含まれてよく、コードの保護のためにサーバ150のようなシステムに送信されて登録されてよい。例えば、サーバ150は、APKの登録のためのサービス(一例として、ウェブページやアプリケーションなど)をユーザ(一例として、開発者のようにAKPを登録しようとするユーザ)に提供してよい。より具体的な例として、電子機器2(120)を利用してサーバ150が提供するウェブページに接続したユーザには、ウェブページを通じてAPKを登録することのできるユーザインタフェースが提供されてよい。
このとき、サーバ150は、ウェブページを通じてアップロードされたAPKから「Classes.dex」ファイルのようなデックスファイル300を抽出し、保護対象となるクラスとメソッドを選別してよい。
図4に示されたデックスファイル400は、図3のデックスファイル300で保護対象クラスと非保護対象クラス、さらに保護対象メソッドと非保護対象メソッドを示している。図4は、実際には保護対象クラスや保護対象メソッドが生成されることを示しているのではなく、説明の便宜のために、該当のクラスとメソッドが保護対象として説明されたことを示した例である。クラスが保護対象であったとしても、該当のクラスが含むすべてのメソッドが保護対象である必要はない(一例として、クラス1、クラスNを参照)。言い換えれば、実質的な保護対象は、メソッド単位である。他の実施形態として、クラスが保護対象である場合、該当のクラスに含まれたすべてのメソッドが保護対象として選別されるように実現されてもよい。
このような保護対象クラスや保護対象メソッドは、ユーザからの入力に基づいて選別されてよい。例えば、ユーザに提供されるウェブページには、保護されなければならないクラスやメソッドに関する情報をユーザが入力したり選択したりできるユーザインタフェースが含まれてよい。サーバ150は、ウェブページで保護されなければならないクラスやメソッドに関する情報が入力されると、デックスファイル400と同じように、保護されなければならないクラスおよび/またはメソッドを確認できるようになる。ユーザから入力される情報は、クラスおよび/またはメソッドのプレフィックス、クラスドメインおよび/またはクラスやメソッドの名称などであってよい。
他の実施形態として、サーバ150が直接に予め設定された機能のクラスやメソッドを選別してもよい。例えば、サーバ150は、アプリケーションを通じてユーザに提供されるサーバにおける課金機能、認証機能、サービスを提供するサーバ(一例として、サーバ160)との通信機能などに対応するクラスやメソッドを見つけ出して選別してよい。このため、サーバ150は、開発者システムに対するAPIコールなどの機能によってクラスやメソッドに対するリストを確認し、リストのクラスやメソッドから選別されるクラスやメソッドを見つけ出して保護対象クラスおよび/または保護対象メソッドとして選別してよい。
また、上述したように、デックスファイル400は、コンパイルされたバイトコード(bytecode、中間言語コード)を含んでよく、サーバ150は、選別されたクラスとメソッドに対応するバイトコードを見つけ出してよい。例えば、デックスファイル400のヘッダには、全体クラスの個数とクラステーブルのオフセット(offset)が格納されており、それぞれのクラスには、メソッドテーブルのオフセットが格納されている。したがって、サーバ150は、デックスファイル400から特定のバイトコードを見つけ出すために、クラステーブルとメソッドテーブルを利用してクラス、メソッド、およびバイトコードの順に希望するバイトコードを見つけ出してよい。
図5のデックスファイル500は、図4のデックスファイル400から保護対象として選別されたメソッドが暗号化されたことを表示した例を示している。選別されたメソッドのバイトコードが暗号化によって難読化されると、暗号化されたバイトコードを復号化するための情報(以下、「復号化情報」)がAPKに追加されてよい。例えば、復号化情報は、ネイティブモジュール(native module:一例として、拡張子「.so」で作成されて実行コードと共にAPKに含まれて配布されるセキュアモジュール)に記録されてよい。このような復号化情報は、アプリケーションが実行される電子機器(一例として、電子機器1(110))におけるランタイム方式(ダルビックランタイム(Dalvik runtime))とART(Android runtime)に応じて異なってよく、多数のメソッドが暗号化されるため、保護対象となるメソッドごとに配列(array)の形態で記録されてよい。
例えば、アンドロイドでは、ダルビックマシン(仮想マシン)上でダルビックランタイムにデックスファイルを実行したり、ARTマシン上でARTにOATファイルを実行したりしてよい。ダルビックマシンは、アプリケーションコードをネイティブ機械語コードに変換し、ユーザがアプリケーションを実行するたびにこのような変化過程を経るJIT(just−in−time)コンパイルによってコードを実行する。ARTマシンでは、デックスファイルを「dex2oat」というコンバータを利用してOATファイルに変換して実行してよい。言い換えれば、ARTマシンは、アプリケーションをインストールするときにAOT(Ahead−Of−Time)コンパイルによってネイティブアプリケーションに変換してインストールする。したがって、ARTを使用すれば、新たな仮想マシン(上述したダルビックマシン)をアプリケーションが実行されるたびに生成し、インタプリテッドコードを実行する時間を除去することができる。これにより、互いに異なるランタイム方式に応じて互いに異なる復号化情報が伝達される必要がなくなる。この場合、サーバ150は、提供するAPKが2つのランタイム方式の両方で実行されるように、2つのランタイム方式のための復号化情報をすべてネイティブモジュールに記録してもよく、ダルビックランタイムのためのAPKとARTのためAPKをそれぞれ生成し、電子機器に応じて適合するAPKを送信してもよい。
先ず、ダルビックランタイムのための復号化情報は、保護対象メソッドに対応するバイトコードのオフセット(実質的には、暗号化されたバイトコードのオフセット)、該当のバイトコードのサイズ(bytes)、暗号化されたバイトコードのサイズ(bytes)、および暗号化に使用されたキーを含んでよい。
また、ARTのための復号化情報は、保護対象メソッド(暗号化されたメソッド)を含むクラスインデックス(何番目のクラスかに関する情報)および該当の保護対象メソッドのメソッドインデックス(該当のクラスで何番目のメソッドかに関する情報)を含んでよい。また、暗号化前の保護対象クラスと保護対象メソッドで構成されたデックスファイルがネイティブモジュールに記録されてよい。
これに加え、サーバ150は、メソッドの暗号化によってデックスファイルに対するCRCとハッシュ値が変更されるため、変更されたCRC(Cyclic Redundancy Check)とハッシュ値を再計算してデックスファイルのCRCとハッシュ値を更新してよい。
保護対象メソッドが暗号化されたデックスファイルを含むAPKは、電子機器(一例として、電子機器1(110))に送信されてインストールされてよい。
このとき、ダルビックランタイムにおいて、電子機器は、メモリにロードされたデックスファイル(一例として、「classes.dex」)でオーデックスヘッダ(odex header)をパース(一例として、JNI_Onload関数を利用)してデックスヘッダ(dex header)を見つけ出してよい。このとき、メモリにロードされたデックスファイルは、ダルビック−キャッシュ(Dalvik−cache)に存在するオデックス化されたファイルであり、一部のクラスのバイトコードを除いた大部分のバイトコードは、ダルビック(仮想マシン)で実際に該当のコードが実行される時点に解釈される。この場合、電子機器は、デックスヘッダの次のデータを上述した復号化情報に基づいて復号化してよい。例えば、電子機器は、保護対象メソッドごとに配列形態でネイティブモジュールに記録された復号化情報を利用して該当のメソッドのオフセットから暗号化されたバイトコードのサイズだけをネイティブモジュールに記録されたキーで復号化し、該当の位置にオーバーライトして暗号化されたバイトコードを復号化してよい。
また、ARTにおいて、電子機器記は、ネイティブモジュールに記録されたデックスファイル(暗号化前の保護対象クラスと保護対象メソッドを含むデックスファイル)を因子として「dex2oat」命令(保護対象クラスと保護対象メソッドのコードをネイティブコードに変換するための命令)を実行して保護対象クラスと保護対象メソッドのネイティブコードを確保してよい。上述したように、ARTでは、アプリケーションをインストールするときに、アプリケーションのコードをAOT(Ahead−Of−Time)コンパイルによってネイティブコードに変換してインストールしてよい。ARTでも、電子機器は、メモリにロードされたデックスファイル(一例として、「classes.dex」)をJIN_Onload関数を利用して見つけ出してよい。このとき、メモリにロードされたデックスファイルは、実質的にはOATファイルフォーマットを有するようになるため、一般的な方式(一例として、dlopen関数を利用した方式)ではコードを得ることができないという制約が存在する。したがって、電子機器は、OATヘッダを見つけ出し、OATヘッダから復号化情報が含まれるクラスインデックスとメソッドインデックスによって希望とするネイティブコードを見つけ出してよい。例えば、OATヘッダは、希望とする関数のアドレスをリターンする関数(一例として、dlsym関数)を利用して得られるOATデータシンボル(oatdata symbol)のアドレス(OATヘッダを意味する)とOAT実行シンボル(oatexec symbol)のアドレスに基づいて見つけ出されてよい。電子機器は、先に得られた保護対象クラスと保護対象メソッドのネイティブコードを復号化情報が含むクラスインデックスとメソッドインデックスによって見つけ出されたネイティブコードにオーバーライトすることによって復号化を処理してよい。より具体的に、電子機器は、OATヘッダが示していながらもクラスインデックスに対応するOATクラスを見つけ出し、OATクラスからメソッドインデックスに対応するネイティブコードを検索してよい。
ダルビックラインタイムとARTにおける共通点は、暗号化されたコードがランタイムで復号化されるという点であり、差異点は、ARTでは原本コードのネイティブ化過程(上述したdex2oatのようなコンバータを利用したコンパイルによるネイティブ化過程)を経てアプリケーションがインストールされるため、暗号化されたコードを見つけ出す方式がダルビックランタイムとは異なるという点である。
図6は、本発明の一実施形態における、ARTから暗号化されたネイティブコードを見つけ出す過程を示した図である。Classes.dex610は、電子機器に提供された応用プログラムパッケージに含まれたデックスファイルを意味してよい。上述したように、ARTでは、アプリケーションのインストール時にdex2oatのようなコンバータを利用してデックスファイルに含まれたコードをネイティブコードに変換してよい。Classes.dex620は、変換されたデックスファイルを示している。電子機器のメモリにロードされるデックスファイルは、実質的にはElf共有オブジェクト(拡張子「.so」)フォーマットであってよく、Classes.dex620のようにELFヘッダ(Elf Header621)を含んでよい。また、上述したように、デックスファイルは、OATファイルフォーマットに変更され、OATヘッダ(Oat Header)622を含んでよい。また、Classes.dex620は、デックスファイルメタヘッダ(Dex File Meta Header)623とClasses.dex624を含んでよい。Classes.dex624は、変換前のデックスファイルであるClasses.dex610に対応してよく、Dex File Meta Header623は、Classes.dex624に関するメタ情報を含んでよい。Oat Header622は、クラスインデックスに基づいて希望とするOATクラス(OatClass)625を見つけ出すことのできる情報を提供する。また、OatClass625は、メソッドインデックスに基づいて希望とするメソッドに対応するコードをネイティブコード(Native Code)627から見つけ出すことのできる情報(OatMethodOffset)626を提供する。電子機器は、上述したように、復号化情報が含むデックスファイル(保護対象クラスと保護対象メソッドの暗号化前のコードを含む)をコンバータによって変換して正常なネイティブコードを得てよい。この場合、電子機器は、暗号化された保護対象メソッドに対応するコードをNative Code627から見つけ出して正常なネイティブコードと交換することにより、暗号化された保護対象メソッドを復号化してよい。
図7は、本発明の一実施形態における、サーバのプロセッサが含むことのできる構成要素の例を示した図であり、図8は、本発明の一実施形態における、サーバが実行することのできる方法の例を示したフローチャートである。図7に示すように、サーバ150のプロセッサ222は、受信制御部710、選別制御部720、暗号化制御部730、および追加制御部740を備えてよく、実施形態によって選択的に更新制御部750および送信制御部760をさらに備えてよい。このようなプロセッサ222の構成要素は、図8の方法が含む段階810〜860を実行するようにサーバ150を制御してよく、このような制御のためにメモリ221が含むオペレーティングシステムと少なくとも1つのプログラムコードによって動作するように実現されてよい。段階850および860は、実施形態によって選択的に図8の方法に含まれてもよい。
段階810で、サーバ150は、複数のクラスおよび複数のメソッドを含むアプリケーションのためのコードがコンパイルされて生成された中間言語(Intermediate Language:IL)コードをデックスファイルとして含む応用プログラムパッケージをネットワークを介して受信してよい。例えば、ジャバ(Java)で作成されたコードがコンパイルされて中間言語コードとしてバイトコードを含むデックスファイルが応用プログラムパッケージに含まれてよい。受信制御部710は、段階810を実行するようにサーバ150を制御してよい。
ここで、サーバ150は、既に開発されたアプリケーションのための応用プログラムパッケージを受信してこれを保護するためのシステムであってよい。このとき、サーバ150は、アプリケーションの開発者のシステムであってもよく、開発者から応用プログラムパッケージを受信して保護する第三者のシステムであってもよく、開発者の応用プログラムパッケージを受信してユーザに配布するファイル配布システムであってもよい。
段階820で、複数のクラスおよび前記複数のメソッドから保護対象クラスまたは保護対象メソッドを選別してよい。選別制御部720は、段階820を実行できるようにサーバ150を制御してよい。保護対象クラスや保護対象メソッドは、ユーザ(一例として、アプリケーションの開発者)によって入力される情報に基づいて選別されてもよいし、サーバ150によって選別されてもよい。
一実施形態として、サーバ150は、段階810で、クラスまたはメソッドを指定するための識別情報をネットワークを介してさらに受信してよい。この場合、サーバ150は、段階820で、識別情報によって指定されたクラスまたはメソッドを保護対象クラスまたは保護対象メソッドとして識別してよい。
他の実施形態として、サーバ150は、段階820で、複数のクラスまたは複数のメソッドからアプリケーションの予め設定された機能に対応するクラスまたはメソッドを見つけ出し、保護対象クラスまたは保護対象メソッドとして選別してもよい。例えば、サーバ150は、アプリケーションで提供されるサービスにおける課金機能、サービスにおける認証機能、およびサービスを提供するサーバ(一例として、サーバ160)との通信機能のうちの少なくとも1つの機能に対応するクラスまたはメソッドを保護対象クラスまたは保護対象メソッドとして自動選別してよい。
段階830で、サーバ150は、デックスファイルから選別された保護対象クラスまたは保護対象メソッドに対応する中間言語コードを検索して暗号化することにより、選別された保護対象クラスまたは選別された保護対象メソッドを暗号化してよい。暗号化制御部730は、段階830を実行できるようにサーバ150を制御してよい。
例えば、デックスファイルは、複数のクラスの個数とクラステーブルのオフセット(offset)が格納されたヘッダを含んでよく、複数のクラスそれぞれは、複数のクラスそれぞれが含むメソッドに対するメソッドテーブルのオフセットを含んでよい。この場合、サーバ150は、段階830で、クラステーブルを利用して前記保護対象クラスに対応する中間言語コードを検索するか、前記メソッドテーブルを利用して前記保護対象メソッドに対応する中間言語コードを検索し、検索された中間言語コードを暗号化してよい。
段階840で、サーバ150は、暗号化された保護対象クラスまたは暗号化された保護対象メソッドを復号化するための復号化情報を、応用プログラムパッケージがさらに含むセキュアモジュールに追加してよい。追加制御部740は、段階840を実行できるようにサーバ150を制御してよい。
応用プログラムパッケージがインストールされる電子機器におけるランタイム方式に応じて互いに異なる復号化情報が要求されてよい。このために、サーバ150は、段階840で、互いに異なる復号化情報すべてを応用プログラムパッケージのセキュアモジュールに追加するか、互いに異なる復号化情報がセキュアモジュールに追加された互いに異なる複数の応用プログラムパッケージを生成してよい。一実施形態として、サーバ150は、ダルビックランタイムのための復号化情報とARTのための復号化情報すべてをセキュアモジュールに追加してよい。他の実施形態として、サーバ150は、ダルビックランタイムのための復号化情報がセキュアモジュールに追加された応用プログラムパッケージとARTのための復号化情報がセキュアモジュールに追加された応用プログラムパッケージをそれぞれ生成してもよい。
一実施形態として、復号化情報は、電子機器においてアプリケーションをダルビックランタイム(Dalvik runtime)によって実行する場合のために、暗号化された中間言語コードのオフセット、暗号化された中間言語コードのサイズ、および暗号化に利用されたキーに関する情報を含んでよい。この場合、電子機器において、電子機器のメモリにロードされたデックスファイルのデックスヘッダで暗号化された中間言語コードのオフセットから暗号化された中間言語コードのサイズだけのコードをキーによって復号化してデックスヘッダにオーバーライトすることにより、暗号化された保護対象メソッドが復号化されてよい。
他の実施形態として、復号化情報は、電子機器においてアプリケーションをART(Android runtime)によって実行する場合のために、(1)暗号化された保護対象メソッドが含まれたクラスまたは暗号化された保護対象クラスのクラスインデックス、(2)暗号化された保護対象メソッドのメソッドインデックス、および(3)保護対象クラス(暗号化前のクラス)または保護対象メソッド(暗号化前のメソッド)を含むデックスファイルを含んでよい。この場合、電子機器において、復号化情報として含まれたデックスファイルをコンバータによってコンパイルして保護対象クラス(暗号化前のクラス)または保護対象メソッド(暗号化前のメソッド)のネイティブコードを取得し、電子機器のメモリにロードされたデックスファイルのヘッダからクラスインデックスおよびメソッドインデックスを利用して暗号化された中間言語コードを検索し、検索された暗号化された中間言語コードに取得したネイティブコードのうちの暗号化された中間言語コードに対応するネイティブコードをオーバーライトすることにより、暗号化された保護対象メソッドが復号化されてよい。
段階850で、サーバ150は、中間言語コードの暗号化によって変更されたデックスファイルのCRCおよびハッシュ値を更新してよい。更新制御部750は、段階850を実行できるようにサーバ150を制御してよい。最初にサーバ150に送信された応用プログラムパッケージのデックスファイルがCRCおよびハッシュ値を含む場合、中間言語コードの暗号化によってCRCおよびハッシュ値の更新が要求される。したがって、サーバ150は、変更されたデックスファイルに対するCRCとハッシュ値を計算して更新してよい。
段階860で、サーバ150は、ネットワークを介して電子機器からの要請に応じ、中間言語コードが暗号化されて復号化情報が追加された応用プログラムパッケージを電子機器に送信してよい。送信制御部760は、段階860を実行できるようにサーバ150を制御してよい。サーバ150がユーザにAPKを配布するファイル配布システムであれば、サーバ150は段階860を実行してよい。サーバ150がAPKの保護のための別のシステムであれば、保護されたAPKをファイル配布システムに提供するか、ユーザ(開発者)に再送してもよい。
図9は、本発明の一実施形態における、電子機器のプロセッサが含むことのできる構成要素の例を示した図であり、図10は、本発明の一実施形態における、電子機器が実行することのできる方法の例を示したフローチャートである。図9に示すように、電子機器1(110)のプロセッサ212は、受信制御部910および実行制御部920を備えてよい。このようなプロセッサ212の構成要素は、図10の方法が含む段階1010および1020を実行するように電子機器1(110)を制御してよく、このような制御のために、メモリ211が含むオペレーティングシステムと少なくとも1つのプログラムコードによって動作するように実現されてよい。このとき、少なくとも1つのプログラムコードは、段階1020の処理のために電子機器1(110)が段階1010で受信する応用プログラムパッケージに含まれたコードの一部を含んでよい。
段階1010で、電子機器1(110)は、複数のクラスおよび複数のメソッドを含むアプリケーションのためのコードがコンパイルされて生成された中間言語(Intermediate Language:IL)コードをデックス(dex)ファイルとして含み、中間言語コードのうちの少なくとも一部のコードが暗号化され、暗号化された中間言語コードを復号化するための復号化情報がセキュアモジュールに含まれた応用プログラムパッケージをサーバ150からネットワークを介して受信してよい。受信制御部910は、段階1010を実行するように電子機器1(110)を制御してよい。また、暗号化された中間言語コードは、複数のクラスおよび複数のメソッドからサーバ150で選別された保護対象クラスまたは保護対象メソッドの中間言語コードが暗号化されて生成されてよい。
段階1020で、電子機器1(110)は、アプリケーションの実行過程で適用可能なランタイム方式に応じ、復号化情報を利用して暗号化された中間言語コードを復号化するか、暗号化された中間言語コードを復号化情報が含む中間言語コードと交換して実行してよい。実行制御部920は、段階1020を実行するように電子機器1(110)を制御してよい。
上述したように、復号化情報は、ダルビックランタイム(Dalvik runtime)のために、暗号化された中間言語コードのオフセット、暗号化された中間言語コードのサイズ、および暗号化に利用されたキーに関する情報を含んでよい。この場合、電子機器1(110)は、段階1020でダルビックランタイムが行われるとき、メモリ211にロードされたデックスファイルのデックスヘッダで暗号化された中間言語コードのオフセットから暗号化された中間言語コードのサイズだけのコードをキーによって復号化してデックスヘッダにオーバーライトすることにより、保護対象メソッドを復号化してよい。
また、復号化情報は、ART(Android runtime)のために、(1)暗号化された保護対象メソッドが含まれたクラスまたは暗号化された保護対象クラスのクラスインデックス、(2)暗号化された保護対象メソッドのメソッドインデックス、および(3)保護対象クラスまたは保護対象メソッドを含むデックスファイルを含んでよい。この場合、電子機器1(110)は、段階1020でARTが行われるとき、復号化情報として含まれたデックスファイルをコンバータによってコンパイルして保護対象クラスまたは保護対象メソッドのネイティブコードを取得し、メモリ211にロードされたデックスファイルのヘッダからクラスインデックスおよびメソッドインデックスを利用して暗号化された中間言語コードを検索し、検索された暗号化された中間言語コードに取得したネイティブコードのうちの暗号化された中間言語コードに対応するネイティブコードをオーバーライトすることで、暗号化された保護対象メソッドを復号化してよい。
具体的な事項は上述したとおりであるため、繰り返される説明は省略する。
このように、本発明の実施形態によると、アプリケーションのコードから重要なクラス(class)とメソッド(method)に該当するコードを選別して暗号化し、ランタイム(runtime)で暗号化されたコードを復号化することにより、デコンパイルによってアプリケーションの偽造・変造を防ぐことができる。
上述した装置は、ハードウェア構成要素、ソフトウェア構成要素、および/またはハードウェア構成要素とソフトウェア構成要素との組み合わせによって実現されてよい。例えば、実施形態で説明された装置および構成要素は、例えば、プロセッサ、コントローラ、ALU(arithmetic logic unit)、デジタル信号プロセッサ、マイクロコンピュータ、FPGA(field programmable gate array)、PLU(programmable logic unit)、マイクロプロセッサ、または命令を実行して応答することができる様々な装置のように、1つ以上の汎用コンピュータまたは特殊目的コンピュータを利用して実現されてよい。処理装置は、オペレーティングシステム(OS)および前記OS上で実行される1つ以上のソフトウェアアプリケーションを実行してよい。また、処理装置は、ソフトウェアの実行に応答し、データにアクセスし、データを格納、操作、処理、および生成してもよい。理解の便宜のために、1つの処理装置が使用されるとして説明される場合もあるが、当業者は、処理装置が複数個の処理要素および/または複数種類の処理要素を含んでもよいことが理解できるであろう。例えば、処理装置は、複数個のプロセッサまたは1つのプロセッサおよび1つのコントローラを含んでよい。また、並列プロセッサのような、他の処理構成も可能である。
ソフトウェアは、コンピュータプログラム、コード、命令、またはこれらのうちの1つ以上の組み合わせを含んでもよく、思うままに動作するように処理装置を構成したり、独立的または集合的に処理装置に命令したりしてよい。ソフトウェアおよび/またはデータは、処理装置に基づいて解釈されたり、処理装置に命令またはデータを提供したりするために、いかなる種類の機械、コンポーネント、物理装置、仮想装置、コンピュータ格納媒体または装置、または伝送される信号波に永久的または一時的に具現化されてよい。ソフトウェアは、ネットワークによって接続されたコンピュータシステム上に分散され、分散された状態で格納されても実行されてもよい。ソフトウェアおよびデータは、1つ以上のコンピュータで読み取り可能な記録媒体に格納されてよい。
実施形態に係る方法は、多様なコンピュータ手段によって実行可能なプログラム命令の形態で実現されてコンピュータで読み取り可能な媒体に記録されてよい。前記コンピュータで読み取り可能な媒体は、プログラム命令、データファイル、データ構造などを単独でまたは組み合わせて含んでよい。前記媒体に記録されるプログラム命令は、実施形態のために特別に設計されて構成されたものであってもよいし、コンピュータソフトウェア当業者に公知な使用可能なものであってもよい。コンピュータで読み取り可能な記録媒体の例としては、ハードディスク、フロッピー(登録商標)ディスク、および磁気テープのような磁気媒体、CD−ROM、DVDのような光媒体、フロプティカルディスクのような光磁気媒体、およびROM、RAM、フラッシュメモリなどのようなプログラム命令を格納して実行するように特別に構成されたハードウェア装置が含まれる。プログラム命令の例は、コンパイラによって生成されるもののような機械語コードだけではなく、インタプリタなどを使用してコンピュータによって実行される高級言語コードを含む。上述したハードウェア装置は、実施形態の動作を実行するために1つ以上のソフトウェアモジュールとして動作するように構成されてもよく、その逆も同じである。
以上のように、実施形態を、限定された実施形態と図面に基づいて説明したが、当業者であれば、上述した記載から多様な修正および変形が可能であろう。例えば、説明された技術が、説明された方法とは異なる順序で実行されたり、かつ/あるいは、説明されたシステム、構造、装置、回路などの構成要素が、説明された方法とは異なる形態で結合されたりまたは組み合わされたり、他の構成要素または均等物によって対置されたり置換されたとしても、適切な結果を達成することができる。
したがって、異なる実施形態であっても、特許請求の範囲と均等なものであれば、添付される特許請求の範囲に属する。
222:プロセッサ
710:受信制御部
720:選別制御部
730:暗号化制御部
740:追加制御部
750:更新制御部
760:送信制御部

Claims (22)

  1. コンピュータで実現される方法であって、
    複数のクラスおよび複数のメソッドを含むアプリケーションのためのコードがコンパイルされて生成された中間言語コードをデックスファイルとして含む応用プログラムパッケージをネットワークを介して受信する段階、
    前記複数のクラスおよび前記複数のメソッドから保護対象クラスまたは保護対象メソッドを選別する段階、
    前記デックスファイルから前記選別された保護対象クラスまたは前記選別された保護対象メソッドに対応する中間言語コードを検索して暗号化することにより、前記選別された保護対象クラスまたは前記選別された保護対象メソッドを暗号化する段階、および
    前記暗号化された保護対象クラスまたは前記暗号化された保護対象メソッドを復号化するための復号化情報を、前記応用プログラムパッケージがさらに含むセキュアモジュールに追加する段階
    を含むことを特徴とする、コンピュータで実現される方法。
  2. 前記受信する段階は、
    クラスまたはメソッドを指定するための選別情報を前記ネットワークを介してさらに受信し、
    前記選別する段階は、
    前記選別情報に基づいて指定されたクラスまたはメソッドを前記保護対象クラスまたは前記保護対象メソッドとして選別することを特徴とする、請求項1に記載のコンピュータで実現される方法。
  3. 前記選別する段階は、
    前記複数のクラスおよび前記複数のメソッドから前記アプリケーションの予め設定された機能に対応するクラスまたはメソッドを見つけ出して前記保護対象クラスまたは前記保護対象メソッドとして選別することを特徴とする、請求項1に記載のコンピュータで実現される方法。
  4. 前記予め設定された機能は、前記アプリケーションで提供されるサービスにおける課金機能、前記サービスにおける認証機能、および前記サービスを提供するサーバとの通信機能のうちの少なくとも1つを含むことを特徴とする、請求項3に記載のコンピュータで実現される方法。
  5. 前記デックスファイルは、前記複数のクラスの個数とクラステーブルのオフセットが格納されたヘッダを含み、
    前記複数のクラスそれぞれは、前記複数のクラスそれぞれが含むメソッドに対するメソッドテーブルのオフセットを含み、
    前記暗号化する段階は、
    前記クラステーブルを利用して前記保護対象クラスに対応する中間言語コードを検索するか、前記メソッドテーブルを利用して前記保護対象メソッドに対応する中間言語コードを検索することを特徴とする、請求項1に記載のコンピュータで実現される方法。
  6. 前記応用プログラムパッケージがインストールされる電子機器におけるランタイム方式に応じて互いに異なる復号化情報が要求され、
    前記追加する段階は、
    前記互いに異なる復号化情報すべてを前記応用プログラムパッケージのセキュアモジュールに追加するか、前記互いに異なる復号化情報がセキュアモジュールに追加された互いに異なる複数の応用プログラムパッケージを生成することを特徴とする、請求項1に記載のコンピュータで実現される方法。
  7. 前記復号化情報は、電子機器において前記アプリケーションをダルビックランタイムで実行する場合のために、前記暗号化された中間言語コードのオフセット、前記暗号化された中間言語コードのサイズ、および暗号化に利用されたキーに関する情報を含むことを特徴とする、請求項1に記載のコンピュータで実現される方法。
  8. 前記電子機器において、前記電子機器のメモリにロードされた前記デックスファイルのデックスヘッダで前記暗号化された中間言語コードのオフセットから前記暗号化された中間言語コードのサイズだけのコードを前記キーによって復号化して前記デックスヘッダにオーバーライトすることにより、前記暗号化された保護対象メソッドが復号化されることを特徴とする、請求項7に記載のコンピュータで実現される方法。
  9. 前記復号化情報は、電子機器において前記アプリケーションをART(Android runtime)で実行する場合のために、(1)前記暗号化された保護対象メソッドが含まれたクラスまたは前記暗号化された保護対象クラスのクラスインデックス、(2)前記暗号化された保護対象メソッドのメソッドインデックス、および(3)前記保護対象クラスまたは前記保護対象メソッドを含むデックスファイルを含むことを特徴とする、請求項1に記載のコンピュータで実現される方法。
  10. 前記電子機器において前記復号化情報として含まれたデックスファイルをコンバータによってコンパイルして保護対象クラスまたは保護対象メソッドのネイティブコードを取得し、前記電子機器のメモリにロードされたデックスファイルのヘッダから前記クラスインデックスおよび前記メソッドインデックスを利用して暗号化された中間言語コードを検索し、前記検索された暗号化された中間言語コードに前記取得したネイティブコードのうちの前記暗号化された中間言語コードに対応するネイティブコードをオーバーライトすることにより、前記暗号化された保護対象メソッドが復号化されることを特徴とする、請求項9に記載のコンピュータで実現される方法。
  11. 前記中間言語コードの暗号化によって変更されたデックスファイルのCRC(Cyclic Redundancy Check)およびハッシュ値を更新する段階
    をさらに含むことを特徴とする、請求項1に記載のコンピュータで実現される方法。
  12. ネットワークを介した電子機器からの要請に応じて前記中間言語コードが暗号化されて前記復号化情報が追加された前記応用プログラムパッケージを前記電子機器に送信する段階
    をさらに含むことを特徴とする、請求項1に記載のコンピュータで実現される方法。
  13. コンピュータで実現される方法であって、
    複数のクラスおよび複数のメソッドを含むアプリケーションのためのコードがコンパイルされて生成された中間言語コードをデックスファイルとして含み、前記中間言語コードのうちの少なくとも一部コードが暗号化され、前記暗号化された中間言語コードを復号化するための復号化情報がセキュアモジュールに含まれた応用プログラムパッケージをサーバからネットワークを介して受信する段階、および
    前記アプリケーションの実行過程で適用可能なランタイム方式に応じ、前記復号化情報を利用して前記暗号化された中間言語コードを復号化するか、前記暗号化された中間言語コードを前記復号化情報が含む中間言語コードと交換して実行する段階
    を含み、
    前記暗号化された中間言語コードは、前記複数のクラスおよび前記複数のメソッドのうち、前記サーバで選別された保護対象クラスまたは保護対象メソッドの中間言語コードが暗号化されて生成されることを特徴とする、コンピュータで実現される方法。
  14. 前記復号化情報は、ダルビックランタイムのために、前記暗号化された中間言語コードのオフセット、前記暗号化された中間言語コードのサイズ、および暗号化に利用されたキーに関する情報を含むことを特徴とする、請求項13に記載のコンピュータで実現される方法。
  15. 前記実行する段階は、
    前記ダルビックランタイムにおいて、メモリにロードされた前記デックスファイルのデックスヘッダで前記暗号化された中間言語コードのオフセットから前記暗号化された中間言語コードのサイズだけのコードを前記キーによって復号化して前記デックスヘッダにオーバーライトすることにより、前記保護対象メソッドを復号化することを特徴とする、請求項14に記載のコンピュータで実現される方法。
  16. 前記復号化情報は、ART(Android runtime)のために、(1)前記暗号化された保護対象メソッドが含まれたクラスまたは前記暗号化された保護対象クラスのクラスインデックス、(2)前記暗号化された保護対象メソッドのメソッドインデックス、および(3)前記保護対象クラスまたは前記保護対象メソッドを含むデックスファイルを含むことを特徴とする、請求項13に記載のコンピュータで実現される方法。
  17. 前記実行する段階は、
    前記復号化情報として含まれたデックスファイルをコンバータによってコンパイルして保護対象クラスまたは保護対象メソッドのネイティブコードを取得し、メモリにロードされたデックスファイルのヘッダから前記クラスインデックスおよび前記メソッドインデックスを利用して前記暗号化された中間言語コードを検索し、前記検索された暗号化された中間言語コードに、前記取得したネイティブコードのうちの前記暗号化された中間言語コードに対応するネイティブコードをオーバーライトすることにより、前記保護対象メソッドを復号化することを特徴とする、請求項16に記載のコンピュータで実現される方法。
  18. 請求項1〜17のうちのいずれか一項に記載の方法を実行するためのプログラムが記録されていることを特徴とする、コンピュータで読み取り可能な記録媒体。
  19. 1つ以上のプロセッサを含むサーバのシステムであって、
    前記1つ以上のプロセッサは、
    複数のクラスおよび複数のメソッドを含むアプリケーションのためのコードがコンパイルされて生成された中間言語コードをデックスファイルとして含む応用プログラムパッケージをネットワークを介して受信するように前記サーバを制御する受信制御部、
    前記複数のクラスおよび前記複数のメソッドから保護対象クラスまたは保護対象メソッドを選別するように前記サーバを制御する選別制御部、
    前記デックスファイルから前記選別された保護対象クラスまたは前記選別された保護対象メソッドに対応する中間言語コードを検索して暗号化することにより、前記選別された保護対象クラスまたは前記選別された保護対象メソッドを暗号化するように前記サーバを制御する暗号化制御部、および
    前記暗号化された保護対象クラスまたは前記暗号化された保護対象メソッドを復号化するための復号化情報を、前記応用プログラムパッケージがさらに含むセキュアモジュールに追加するように前記サーバを制御する追加制御部
    を備えることを特徴とする、システム。
  20. 前記受信制御部は、
    クラスまたはメソッドを指定するための選別情報を前記ネットワークを介してさらに受信するように前記サーバを制御し、
    前記選別制御部は、
    前記選別情報に基づいて指定されたクラスまたはメソッドを前記保護対象クラスまたは前記保護対象メソッドとして選別するように前記サーバを制御することを特徴とする、請求項19に記載のシステム。
  21. 前記選別制御部は、
    前記複数のクラスおよび前記複数のメソッドから前記アプリケーションの予め設定された機能に対応するクラスまたはメソッドを見つけ出して前記保護対象クラスまたは前記保護対象メソッドとして選別するように前記サーバを制御することを特徴とする、請求項19に記載のシステム。
  22. 前記応用プログラムパッケージがインストールされる電子機器におけるランタイム方式に応じて互いに異なる復号化情報が要求され、
    前記追加制御部は、
    前記互いに異なる復号化情報すべてを前記応用プログラムパッケージのセキュアモジュールに追加するか、前記互いに異なる復号化情報がセキュアモジュールに追加された互いに異なる複数の応用プログラムパッケージを生成するように前記サーバを制御することを特徴とする、請求項19に記載のシステム。
JP2018506542A 2015-08-10 2016-08-04 アプリケーションのコード難読化のためのシステムおよび方法 Active JP6815385B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
KR10-2015-0112741 2015-08-10
KR1020150112741A KR101740134B1 (ko) 2015-08-10 2015-08-10 어플리케이션의 코드 난독화를 위한 시스템 및 방법
PCT/KR2016/008588 WO2017026739A1 (ko) 2015-08-10 2016-08-04 어플리케이션의 코드 난독화를 위한 시스템 및 방법

Publications (3)

Publication Number Publication Date
JP2018530041A true JP2018530041A (ja) 2018-10-11
JP2018530041A5 JP2018530041A5 (ja) 2019-09-12
JP6815385B2 JP6815385B2 (ja) 2021-01-20

Family

ID=57983289

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018506542A Active JP6815385B2 (ja) 2015-08-10 2016-08-04 アプリケーションのコード難読化のためのシステムおよび方法

Country Status (4)

Country Link
US (1) US10740443B2 (ja)
JP (1) JP6815385B2 (ja)
KR (1) KR101740134B1 (ja)
WO (1) WO2017026739A1 (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106066686B (zh) * 2016-05-31 2019-02-05 Oppo广东移动通信有限公司 一种信息处理方法及终端设备
US10394554B1 (en) * 2016-09-09 2019-08-27 Stripe, Inc. Source code extraction via monitoring processing of obfuscated byte code
EP3637251B1 (en) * 2017-05-17 2023-10-04 Huawei Technologies Co., Ltd. Method, device and terminal for executing hotpatch
KR101885146B1 (ko) * 2017-11-22 2018-08-03 (유)아홉 애플리케이션 보호 장치 및 방법
US12007908B2 (en) * 2017-12-14 2024-06-11 Arris Enterprises Llc Method and apparatus to dynamically encode data at runtime
KR102177920B1 (ko) * 2018-10-12 2020-11-13 네이버비즈니스플랫폼 주식회사 원본코드 패킹장치 및 원본코드 패킹방법
KR102173151B1 (ko) * 2018-10-29 2020-11-03 네이버비즈니스플랫폼 주식회사 원본코드 자동추출장치 및 원본코드 자동추출방법
CN109918083A (zh) * 2019-03-07 2019-06-21 北京智游网安科技有限公司 一种基于应用编程的安全处理方法、智能终端及存储介质
CN110806906B (zh) * 2019-10-30 2022-04-12 腾讯科技(深圳)有限公司 一种Dex分包方法、装置、设备及介质
CN113032035B (zh) * 2019-12-24 2022-07-12 Oppo广东移动通信有限公司 配置文件处理方法、装置以及电子设备
CN113139175A (zh) 2020-01-19 2021-07-20 阿里巴巴集团控股有限公司 处理单元、电子设备以及安全控制方法
KR102361534B1 (ko) * 2020-02-05 2022-02-10 라인플러스 주식회사 컴파일러를 이용한 난독화 방법 및 시스템
CN111371773A (zh) * 2020-02-28 2020-07-03 北京百度网讯科技有限公司 一种信息发送和显示方法、装置、设备及存储介质
CN111310221B (zh) * 2020-03-26 2023-01-03 北京百度网讯科技有限公司 持久层数据的加解密方法、装置、设备及存储介质
CN112214549B (zh) * 2020-10-10 2024-06-04 中育数据(广州)科技有限公司 一种文件特征码生成方法、装置及电子设备
US11886589B2 (en) * 2020-11-26 2024-01-30 Foundation Of Soongsil University-Industry Cooperation Process wrapping method for evading anti-analysis of native codes, recording medium and device for performing the method
CN113220314B (zh) * 2021-05-31 2023-07-21 北京奇艺世纪科技有限公司 App资源加载及apk生成方法、装置、设备及介质
CN113642021B (zh) * 2021-08-20 2024-05-28 深信服科技股份有限公司 一种业务代码提交方法、处理方法、装置及电子设备
CN114039743A (zh) * 2021-09-27 2022-02-11 成都鲁易科技有限公司 数据的加密方法、装置、存储介质以及终端
CN113918164A (zh) * 2021-10-09 2022-01-11 北京字节跳动网络技术有限公司 应用程序包的生成方法、装置、可读介质和电子设备
CN114996078B (zh) * 2021-12-07 2023-05-09 荣耀终端有限公司 dex文件的编译控制方法及装置
KR20230142091A (ko) * 2022-04-01 2023-10-11 (주)잉카엔트웍스 Dex 파일 보호를 위한 보안 제공 장치와 방법 및 보안 실행 장치와 방법
CN114722359B (zh) * 2022-04-08 2024-05-10 北京航天长城卫星导航科技有限公司 一种基于自定义类加载器的Java源码保护方法
CN114996169B (zh) * 2022-08-04 2022-10-28 苏州清研精准汽车科技有限公司 设备诊断方法、装置、电子设备及存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1909244A1 (en) 2005-07-22 2008-04-09 Matsushita Electric Industrial Co., Ltd. Execution device
KR100771057B1 (ko) 2005-12-26 2007-10-29 주식회사 신지소프트 모바일 플랫폼의 중간 언어 변환 장치 및 그 방법
CN102598017B (zh) 2009-11-13 2016-03-09 爱迪德技术有限公司 提高Java字节码的防窜改能力的系统和方法
US8892876B1 (en) * 2012-04-20 2014-11-18 Trend Micro Incorporated Secured application package files for mobile computing devices
KR101391982B1 (ko) * 2012-08-28 2014-05-07 바른소프트기술 주식회사 안드로이드 어플리케이션의 디컴파일 방지를 위한 암호화 방법
US9116712B2 (en) * 2013-02-28 2015-08-25 Microsoft Technology Licensing, Llc Compile based obfuscation
WO2014142430A1 (ko) * 2013-03-15 2014-09-18 주식회사 에스이웍스 안드로이드에서의 dex파일 바이너리 난독화 방법
KR20140139392A (ko) * 2013-05-27 2014-12-05 삼성전자주식회사 모바일 장치를 위한 애플리케이션 실행 파일 생성방법, 모바일 장치의 애플리케이션 실행 방법, 애플리케이션 실행 파일 생성 장치 및 모바일 장치
KR101350390B1 (ko) 2013-08-14 2014-01-16 숭실대학교산학협력단 코드 난독화 장치 및 그 방법

Also Published As

Publication number Publication date
WO2017026739A1 (ko) 2017-02-16
KR20170018745A (ko) 2017-02-20
US10740443B2 (en) 2020-08-11
KR101740134B1 (ko) 2017-05-26
US20180157808A1 (en) 2018-06-07
JP6815385B2 (ja) 2021-01-20

Similar Documents

Publication Publication Date Title
JP6815385B2 (ja) アプリケーションのコード難読化のためのシステムおよび方法
US10255443B2 (en) Method, apparatus, system and non-transitory computer readable medium for code protection
US10218790B2 (en) Providing access to a resource for a computer from within a restricted network
US10459711B2 (en) Updating applications using migration signatures
CN104462959A (zh) 一种安卓应用的加固保护方法、服务器和系统
CN106295255B (zh) 应用程序的加固方法和装置
JP6815386B2 (ja) アプリケーションのコードを保護するためのシステム、方法およびプログラム
US20150294114A1 (en) Application randomization
CN113568680B (zh) 应用程序的动态链接库保护方法、装置、设备及介质
WO2016201853A1 (zh) 加解密功能的实现方法、装置及服务器
JP6935617B2 (ja) 中間言語ファイルのロード速度改善のための方法およびシステム
KR101823226B1 (ko) 코드 보호 방법 및 시스템
CN116249980A (zh) 通过异构加密的软件访问
CN111610982B (zh) 一种应用程序开发的方法、装置和相关系统
JP2021118444A (ja) 情報処理装置、情報処理方法及びプログラム
JP7015120B2 (ja) アプリケーションパッケージを提供する方法およびシステム、アプリケーションを実行する方法およびシステム
KR101771348B1 (ko) 패키지 파일에 대한 패킹 방법 및 시스템
KR20240010048A (ko) 소프트웨어 이용 시스템 및 소프트웨어 이용 방법
CN115640571A (zh) 用于可信执行环境TEE的库操作系统LibOS的方法
JP2017073132A (ja) メモリハッキング探知方法およびシステム

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190731

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190731

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200327

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200421

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200616

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: 20201201

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201222

R150 Certificate of patent or registration of utility model

Ref document number: 6815385

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350