JP2016511905A - コンパイラベースの難読化 - Google Patents

コンパイラベースの難読化 Download PDF

Info

Publication number
JP2016511905A
JP2016511905A JP2015560258A JP2015560258A JP2016511905A JP 2016511905 A JP2016511905 A JP 2016511905A JP 2015560258 A JP2015560258 A JP 2015560258A JP 2015560258 A JP2015560258 A JP 2015560258A JP 2016511905 A JP2016511905 A JP 2016511905A
Authority
JP
Japan
Prior art keywords
code
compiler
obfuscation
module
obfuscated
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
JP2015560258A
Other languages
English (en)
Other versions
JP6490598B2 (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.)
Microsoft Corp
Original Assignee
Microsoft 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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2016511905A publication Critical patent/JP2016511905A/ja
Application granted granted Critical
Publication of JP6490598B2 publication Critical patent/JP6490598B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/423Preprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

コンパイラベースの難読化が説明される。コードプロジェクトの一部を難読化により保護するために、コードは、コンパイルプロセスの一環として、当該コードを難読化する1つまたは複数の変更を生成するために、コンパイラ内で変更される。コードのコンパイル済みのバージョンは、コンパイラ内で生成される変更を有して形成される。1つのアプローチにおいて、コンパイラは、保護すべきコードの部分を示し、示される部分に対して行うべき変更を指定する難読化記述を実行するように構成される。コードの様々な異なる変更は、対応する難読化機能を実装するために、コンパイルプロセス中に実行され得る。例えば、コンパイラ内で行われる変更は、コードの改ざん検出、アンチデバッギング、および/または暗号化を可能にするように設計される変更を含み得るが、これらに限定されない。

Description

アプリケーションおよび他のコードを開発することに関連付けられる1つの挑戦は、コードの影響を受けやすい部分を、変更され、無効化され、またはリバースエンジニアリングされることから保護することである。例えば、アプリケーションモジュールについての電子ライセンス化および/またはデジタル著作権管理を実装するように設計されるコードの部分の保護は、第三者がアプリケーションモジュールを違法に使用し、および/または配布するためにコードに対処することを阻止するために実行され得る。開発者は、アプリケーションをソースコードする間に、何らかの保護手段を直接追加し得るが、これは、開発者にとって非常に煩わしく、時間がかかり得る。別のアプローチは、コンパイラによってバイナリファイルが出力された後に、コンパイル済みのバイナリファイルに保護を適用することを伴う。しかしながら、既にコンパイル済みのバイナリを難読化することは、いくつかのバイナリを不安定にし、利用可能な難読化およびコード最適化のタイプを限定し、開発プロセスに複雑さおよび時間を追加し得る。さらに、従来の難読化のために使用されるいくつかの技法は、特に、洗練されたハッカーによって、ディスク上のバイナリのランタイムまたは静的解析を通じて検出することがかなり容易である。従来の難読化技法のこれらおよび他の複雑さは、開発者が自身のコードに効果的な保護を追加することを非効率的にし、または禁止し得る障害として作用する。
コンパイラベースの難読化が説明される。コードプロジェクトの一部を難読化により保護するために、コードは、コンパイルプロセスの一環として、当該コードを難読化する1つまたは複数の変更を生成するために、コンパイラ内で変更される。コードのコンパイル済みのバージョンは、コンパイラ内で生成される変更を有して形成される。1つのアプローチにおいて、コンパイラは、保護すべきコードの部分を示し、示される部分に対して行うべき変更を指定する難読化記述を実行するように構成される。コードの様々な異なる変更は、対応する難読化機能を実装するために、コンパイルプロセス中に実行され得る。例えば、コンパイラ内で行われる変更は、コードの改ざん検出、アンチデバッギング、および/または暗号化を可能にするように設計される変更を含み得るが、これらに限定されない。
本概要は、詳細な説明において以下にさらに説明される概念の集まりを簡略化された形式で紹介するために提供される。本概要は、特許請求の範囲に記載される重要な特徴または本質的な特徴を識別することを意図されず、特許請求の範囲に記載される主題の範囲を判定する際の補助として使用されることも意図されない。
詳細な説明は、添付の図面を参照しつつ説明される。図面において、参照符号の最左端の桁は、その参照符号が最初に現れる図を識別する。説明中の異なるインスタンスおよび図面における同じ参照符号の使用は、同様または同一の項目を示し得る。
コンパイラベースの難読化技法を採用するように動作可能である例示的な実装における環境の図である。 難読化により保護されるコンパイル済みコードを生成するために発生し得る動作を表す例示的なコンパイラベースの難読化を描く図である。 難読化により保護されるコンパイル済みコードが開発プロジェクト用のコードをコンパイルすることの一環として生成される例示的な実装における手続きを描くフロー図である。 コンパイルプロセスの一環として難読化されたコードを生成するために変更が中間言語コードに対して行われる例示的な実装における手続きを描くフロー図である。 コンパイラベースの難読化が統合開発環境により実行される例示的な実装における手続きを描くフロー図である。 本明細書において記載される技法の実施形態を実装するために採用され得る例示的なシステムおよび当該システムの構成要素を例示する図である。
概要
第三者がコードを不法に使用し、または配布することを防止するために、開発者が従来の難読化技法を使用して自身のコードに効果的な保護を追加することは困難であるか、または禁止され得る。ソースコーディング中またはコンパイラによって出力されるコンパイル済みバイナリのいずれかに適用される従来の難読化技法は、限られた保護オプションを提供し、ランタイムにおいて検出することがかなり容易である技法を使用し、および/または、時間/複雑さ/コストを開発プロセスに追加し得る。
コンパイラベースの難読化が本明細書において説明される。難読化によりコードプロジェクトの一部を保護するために、コンパイルプロセスの一環としてコードを難読化する1つまたは複数の変更を生成すするために、コードは、コンパイラ内で変更される。コードのコンパイル済みのバージョンは、コンパイラ内で生成される変更を有して形成される。1つのアプローチにおいて、コンパイラは、保護すべきコードの部分を示し、示される部分に対して行うべき変更を指定する難読化記述を実行するように構成される。コードの様々な異なる変更は、対応する難読化機能を実装するためのコンパイルプロセス中に実行され得る。例えば、コンパイラ内で行われる変更は、コードの暗号化、アンチデバッギング、および/または改ざん検出を可能にするように設計される変更を含み得るが、これらに限定されない。
以下の議論において、本明細書において記載されるコンパイラベースの難読化技法を採用し得る例示的な環境が、まず説明される。次に、コンパイラベースの難読化の例示的な詳細を示す例示的なプロセスフローシナリオが説明される。次いで、例示的な環境および他の環境において実行され得る例示的な手続きが説明される。その結果として、例示的な手続きの実行は、例示的な環境に限定されず、例示的な環境は、例示的な手続きの実行に限定されない。最後に、コンパイラベースの難読化の1つまたは複数の実装において採用され得る例示的なシステムおよび当該システムの構成要素が説明される。
例示的な動作環境
図1は、本明細書において記載される技法を採用するように動作可能である例示的な実装における環境100の図である。例示される環境100は、ネットワーク106を介して通信可能に結合されるコンピューティングデバイス102とウェブサービス104とを含む。コンピューティングデバイス102は、ネットワーク106上でウェブサービス104を介して利用可能とされる多様なリソース105(例えば、コンテンツおよびサービス)にアクセスし、相互作用するように構成され得る。コンピューティングデバイス102およびウェブサービス104は各々、幅広いコンピューティングデバイスによって実装され得る。
例えば、コンピューティングデバイス102は、デスクトップコンピュータ、移動局、エンターテインメント機器、タブレットまたはスレートデバイス、サーフェイスコンピューティングデバイス、表示デバイスに通信可能に結合されるセットトップボックス、モバイル通信デバイス(例えば、無線電話)、ゲーム機などの、ネットワーク106上で通信することが可能なコンピュータとして構成され得る。コンピューティングデバイス102は、様々な処理システムを採用する任意の適切なコンピューティングシステムおよび/またはデバイスとして構成されることができ、そのいくつかの付加的な例は、図6の例示的なシステムに関連して議論される。
コンピューティングデバイス102は、オペレーティングシステム108を含むものとしてさらに示される。一般的に言えば、オペレーティングシステム108は、コンピューティングデバイス102上で実行可能であるコンピューティングデバイス102の基本的な機能性をアプリケーション110に抽象化するように構成される。例えば、オペレーティングシステム108は、「どのように」この基本的な機能性が実装されるのかをアプリケーション110が知得せずに書き込まれ得るように、コンピューティングデバイス102の処理、メモリ、ネットワーク、および/または表示機能性を抽象化し得る。アプリケーション110は、例えば、表示デバイスによってレンダリングおよび表示されるべきデータを、どのようにこのレンダリングが実行されるのかを理解せずに、オペレーティングシステム108に提供し得る。オペレーティングシステム108は、アプリケーション110がシステム機能を利用するために呼び出し得る様々なサービス、インターフェース、および機能性を提供し得る。いくつかの例を挙げれば、ブラウザ、オフィス生産性アプリケーション、電子メールクライアント、マルチメディア管理プログラム、デバイス管理ソフトウェア、ソフトウェア開発環境、およびネットワーキングアプリケーションを含むが、これらに限定されない、幅広い機能性をコンピューティングデバイス102に提供するための多様なアプリケーション110が予期される。
コンピューティングデバイス102は、アプリケーション110の開発のための統合開発環境(IDE:integrated development environment)を提供するように動作可能な機能性を表す開発モジュール112も含む。開発モジュール112は、一般に、設計、開発、テスト、および/またはアプリケーションの展開のためのサポートを含むアプリケーションライフサイクル管理を提供する。開発モジュール112は、アプリケーション開発を簡略化するために、種々のプログラミング言語をサポートし、コードエディタ、1つまたは複数のコンパイラ、ビルドオートメーションツール、デバッガなどの種々の構成要素を統合し得る。したがって、開発モジュール112は、開発者がプロジェクトのためのソースコンテンツ/コードを作成/編集し、アプリケーション110を構築するためにソースコンテンツ/コードをコンパイルするための機能性を提供する。
本明細書において記載される技法によれば、開発モジュール112は、本明細書において記載されるように動作するコンパイラモジュール114と難読化モジュール116とをさらに含み、または、さもなければ、これらを利用し得る。コンパイラモジュール114は、開発プロジェクトのためのソースコードファイルを機械語コードおよび実行ファイル(例えば、オブジェクトコード、バイナリファイル、実行可能なファイルなど)へ変換するためのコンパイルプロセスを実装するように動作可能な機能性を表す。コンパイラモジュール114は、複数の別個のサブモジュール、処理工程、および/またはコンパイルステージを含み得る。例えば、コンパイラモジュールは、フロントエンドコンパイラとバックエンドコンパイラとの両方を含み得る。スタンドアロンモジュールとして例示されるが、難読化モジュール116は、コンパイラモジュール114と一体化された構成要素としても提供され得る。さらに、いくつかの実装において、開発モジュール112、コンパイラモジュール114、および/または難読化モジュール116のうちの1つまたは複数は、クライアントにネットワーク106上でアクセス可能とされるウェブサービスとして(例えば、「クラウド中の」開発サービスまたは難読化サービスとして)構成され得る。この例において、開発者は、オンライン上で利用可能なリソース105として、コード難読化ツール/インターフェースを含むアプリケーション開発ツールを提供するウェブサービス104との相互作用を通じて、アプリケーションを開発することが可能となり得る。
難読化モジュール116は、コンパイラモジュール114によって実行されるコンパイルプロセスの一環としてコード難読化技法を可能にするように動作可能な機能性を表す。一般的に言えば、本明細書において使用される難読化は、コードを理解することを困難にするためにコードを種々の手法で変更することを言う。難読化は、コードが平文で傍受され、見られたとしても、コードの意味と目的とを隠すために採用され得る。これは、コードを改ざんし、またはリバースエンジニアリングすることを試行し得る「ハッカー」に対する、ある程度の保護を作成する。従来の技法とは対照的に、難読化は、コンパイルプロセス中に発生する。そのため、コンパイラモジュール114は、ソースコードの少なくともいくつかの部分を難読化するために変更を適用するために、コンパイル中に難読化モジュール116を呼び出し、相互作用し、または、さもなければ、利用するように構成され得る。少なくともいくつかの実装において、開発者は、難読化により保護すべきソースコードの特定の部分を指定するため、および当該部分についての変更を定義するための難読化記述を生成するために、開発モジュール112および/または難読化モジュール116と相互作用し得る。難読化記述は、コンパイル中にソースコードの指定された部分について変更を実装するようにコンパイラモジュール114に指示するのに適切な命令により構成され得る。コードを難読化するための様々な異なる種類の変更および技法が予期され、その例は、以下の図面に関連して説明される。
例示的な動作環境は検討したので、ここで、1つまたは複数の実施形態に係るコンパイラベースの難読化のためのいくつかの例示的な詳細を検討する。
コンパイラベースの難読化の詳細
以下の議論は、前述されたシステムおよびデバイスを利用して実装され得るコンパイラベースの難読化技法の実装上の詳細を説明する。コンパイラベースの難読化の態様は、図2に描かれる例示的なシナリオを参照しつつ説明される。具体的には、図2は、200において、いくつかの実装によってコンパイル中にコードを難読化することによって保護されたコンパイル済みコードを生成するために採用され得る開発モジュール112の構成要素および動作に関する詳細を全体的に描く。
作業において、開発者は、アプリケーションのためのプロジェクトにおいて、ソースコード202(例えば、コードモジュール、コンテンツ、スクリプト、画像、スタイル、注釈など)を設計し、定義し、作成し、編集するために開発モジュール112を使用し得る。開発モジュール112は、1つまたは複数の異なるプログラミング言語でのソフトウェアプログラミングをサポートし得る。一般に、本明細書において記載されるコンパイラベースの難読化技法は、様々な異なるプログラミング言語、IDE、コンパイラなどと共に採用され得る。
開発プロジェクトの一環として、難読化モジュール116は、ソースコード202と関連付けられる難読化記述204を生成するために呼び出され得る。1つのアプローチにおいて、開発者がソースコード202の一部について難読化記述204を生成するために選択を行うことを可能にするインターフェースが公開され得る。上述されたように、難読化記述204は、難読化すべきソースコード202の少なくともいくつかの部分を指定し、それらの部分について行うべき変更を定義するように構成される。1つのアプローチにおいて、難読化記述204は、対応する難読化を実装するためにコンパイラモジュール114によって実行され得る様々な指示文206を含み得る。難読化モジュール116は、開発者によって適切なインターフェースを通じて行われた選択に応じて指示文206を自動的に形成するように構成され得る。
指示文206は、開発者によって保護のために選択されるソースコード202の部分を識別するために多様な手法で構成され得る。指示文206は、変更を生じさせるためにコンパイル中に解釈され、適用され得る種々のタイプの変更、難読化アルゴリズム、設定、および他のパラメータを定義するようにさらに構成され得る。いくつかの実装において、指示文206は、ソースコード202の選択された部分について指定される1つまたは複数の変更を実装するためのソースコードの部分を含むように作成される。変更は、一般に、コードを何らかの手法で難読化するためにコードを操作するように設計される。これは、コードの歪み、シンボル/構文の置換、ブロックまたはモジュールの並べ替え、コードへの挿入、分岐、関数の再構成、ジャンプ命令の追加、レイアウトおよびプログラムフローの操作、影響を受けやすいコード部分の暗号化などを含み得るが、これらに限定されない。
変更は、ランタイムにおいて難読化された形式で実行される1つまたは複数の関数の仮想化も含み得る。ここで、仮想実行環境は、変更され、難読化された形式で表されるコマンド/命令を解釈する少なくとも1つの関数について定義される。変更され、難読化された命令の表現は、平文で傍受されたとしてもハッカーが解釈することが困難なバイトコード値であり得る。ランタイムにおいて、実行中の仮想実行環境は、変更され、難読化された形式で表される命令の動作をシミュレートし、またはエミュレートする。このようにして、表される基本的な命令の公開が回避される。
コンパイラモジュール114は、ソースコード202をスキャンすること、コードを構文解析すること、構文を検証すること、ソースコードを中間言語(IL:intermediate language)コードに変換すること、コードとレイアウトとを最適化すること、およびコンパイル済みの出力ファイル(例えば、バイナリファイル、アセンブリコード、オブジェクトコードなど)を生成することを含む動作を実行するように構成され得る。このプロセスの一環として、コンパイラモジュール114は、対応する変更を実装するために、指示文206によって指定される選択された難読化アルゴリズムを適用し得る。コードの難読化のためにコードの適当な変更を生成する任意の適切なアルゴリズムが、採用され得る。コードの少なくともいくつかの部分が、指示文206によって難読化のために選択され得る一方で、当該コードの他の部分は、難読化されない/変更されないままであり得る。1つまたは複数の異なるアルゴリズムが、難読化のために選択されるコードの各部分に適用され得る。1つのアプローチにおいて、難読化を実装するための異なるアルゴリズムまたは多様なアルゴリズムは、コンパイルプロセスの一環としてオンザフライで(例えば、オンデマンドで動的に)形成される。したがって、異なる技法およびアルゴリズムが、コードの異なる部分を難読化するために採用され得る。異なるコード部分について異なるアルゴリズムを使用することは、コードをリバースエンジニアリングしようとする試行をさらに複雑化する。なぜならば、ハッカー/悪意のある者は、各難読化されたコード部分に使用される各個々の技法およびアルゴリズムを発見し、復号することなしには、コードの目的および/または意味を完全に理解することが不可能となり得るためである。
さらに、難読化は、部分ごとに個別化され得る。例えば、暗号化は、いくつかの影響を受けやすいデジタル著作権コード部分に適用されるのに対して、コードの並べ替えおよびレイアウト変更は、異なるそれぞれのレベルの保護を提供するために、より影響を受けにくいコードに対して使用され得る。ジャンプ命令およびシンボル置換は、さらなる保護された部分に選択的に適用され得る。難読化を暗号化/復号化するためのさらなる異なるキーの組および/または置換パターンは、異なる保護された部分について動的に形成され得る。異なるキーの組および/または置換パターンは、異なる保護された部分についての、および異なるプロジェクト/アプリケーションにわたるアルゴリズムスキームを変化させるために、および/または難読化アルゴリズムを個別化するために採用され得る。暗号化鍵/復号化鍵は、ランダムに形成される鍵、チェックサムまたはハッシュに基づいて得られる鍵、静的キー値などであり得る。コードの他の部分は、変更されないまま、および難読化によって保護されないままであり得る。
したがって、適当なレベルの保護は、各コード部分について選択され得、互いに異なる対応する技法/アルゴリズムが、個々の部分に適用され得る。各プロジェクトについて使用される特定の難読化スキームおよび各インスタンスにおいて適用される技法は、コードの任意の所要の部分について使用される保護のタイプを判定することを困難にするために、異なり得る。このようにして、異なる難読化機能および変更は、難読化定義204および/または指示文206によって指示されるように保護を個別化するために、保護されるコードの複数の部分に個々に適用され得る。
したがって、難読化モジュール116はコンパイラにおいて生成する難読化を定義する指示文206を生じさせるために呼び出され得る。例えば、開発者は、難読化モジュール116を通じて、デジタルライセンシングおよび権利管理に関連するコード部分などを保護するために、少なくともいくつかのコード部分を選択し得る。このアクションは、コンパイラによる実行のための指示文206を含む難読化記述204を生成する。次いで、プロジェクト用のソースコード202と指示文206を有する対応する難読化記述204とは、図2に表されるように、コンパイラモジュール114への入力として供給され得る。
一般的に言えば、コンパイラモジュール114は、開発プロジェクト用のソースコード202を、構文解析し、コードのコンパイル済みの保護された(例えば、難読化された)バージョンに変換するために、難読化モジュール116の影響下で動作可能な機能性を表す。前述されたように、コンパイラモジュール114は、複数の別個のサブモジュール、処理工程、および/またはコンパイルステージを含み得る。例えば、コンパイラモジュールは、フロントエンドコンパイラとバックエンドコンパイラとの両方、または機能性の他の部分を含み得る。
図2に表されるように、コンパイラモジュール114は、ソースコード202を構文解析し、ソースコード202を中間言語コード210(例えば、ILコード)に変換するための前処理動作208を実行し得る。ILコードは、ソースコードの前処理に基づいて形成される上位の命令を表す。ILコードの上位の命令は、下位の機械コードを生成するために、コンパイルプロセスにおいて後に実行され得る。ILコードは、難読化機能性を有効にするために、難読化記述204から得られるランタイム命令も組み込み得る。したがって、中間言語コード210は、ソースコード202と、コンパイルプロセスにおいて様々な変更を実装すべき、難読化記述204によって示されるコード部分との組み合わせを表し得る。
限定ではなく例として、前処理動作208は、難読化記述204からランタイム命令を得るために、トークナイザまたは同等の機能性を採用し得る。ここで、トークナイザは、中間言語に拡張されるのに適切なフォーマットで指示文206を有するランタイムファイルを生成するために、難読化記述204を構文解析し、解釈し得る。トークナイザは、コンパイル中に適用されるべき様々な変更のための構成を記述するトークンも生成し得る。トークンは、コンパイラベースの難読化のために定義されるスキーマに従った変更のための構成データを表すキー値の文字列の組として実装され得る。次いで、難読化を実装するためにコンパイル済みコードに組み込まれるべき関数、データ構造、およびアルゴリズムについてのソース難読化コードを含む前処理されたランタイムファイルを生成するために、指示文は、拡張され、トークンは、対応する中間言語コードと置換され得る。
さらに、前処理動作208は、プロジェクト用のソースコード202とソース難読化コードとを結合し、結合されたコードを中間言語コード210にプリコンパイルするためのフロントエンドコンパイラまたは同等の機能性をさらに採用し得る。言い換えれば、難読化記述204および/または関連付けられる指示文206は、ソースコードに対して行うべき変更を示すソース難読化コードを生成するために、前処理動作208において使用され得る。次いで、プロジェクト用のソースコードとソース難読化コードとは、フロントエンドコンパイラまたはその他により実行され得るプリコンパイルステージにおいてつなげられる。前処理動作208の動作の結果は、ソースコード202と難読化のための構成情報とを結合する中間言語コード210である。
次いで、中間言語コード210は、コンパイラモジュール114によって実装されるコンパイルプロセスの後続のステージにおいて実行され得る。図2にさらに示されるように、これは、中間言語コード210を入力とみなし、難読化された中間言語コード214を生成するために、コードをしかるべく変更する難読化プロセス212を含み得る。したがって、コードの既にコンパイル済みのバージョンに対して作用し、またはソースコード開発中に開発者が時間/リソース集約的な変更を実行することを必要とする従来の技法とは対照的に、難読化は、コンパイラ内で発生する。
次いで、難読化された中間言語コード214は、コードを難読化するための様々な変更を有する保護されたコンパイル済みコード218を生成するために、コンパイルプロセス216においてコンパイルされる。一般に、コンパイルプロセス216は、コードを、バイナリ、オブジェクトコード、アセンブリコードなどの下位の機械コードにコンバートすることを伴う。したがって、本明細書において使用されるようにコンパイルプロセス216は、ILコードを適当な下位の機械コードに変換するための動作を言う。難読化プロセス212およびコンパイルプロセス216は、コンパイラモジュール114によって実装されるバックエンドコンパイラまたは他の同等の機能性により発生し得る。さらに、中間言語コードの難読化およびコンパイルは、(図示の通り)順次に、異なる保護される部分について同時に、またはその他の方法で発生し得る。
1つのアプローチにおいて、入力中間言語コード210は、コンパイラモジュール114(例えば、バックエンドコンパイラ)および難読化モジュール難読化モジュール116によって作用を受けるタプルストリームにコンバートされる。ここで、コンパイラモジュール114は、難読化記述204によって指定され、中間言語コード210において反映されるような変更を実装するために、様々な手法で難読化モジュール116と相互作用し得る。相互作用は、通信、データ交換、および、コンパイラモジュール114と難読化モジュール116との間の他の相互作用を容易にする適切なインターフェース220経由で発生し得る。
一実施形態において、コンパイラモジュール114は、ILコードが処理されている間に、シンボル、データタイプ、状態、および関数の段階に関する構成情報を難読化モジュール116に渡すために、コンパイル中に難読化モジュール116を呼び出すように構成される。難読化モジュール116は、保護すべき関数およびデータを判定し、行うべき難読化および変更のタイプを確認するために、コンパイラモジュール114から取得される情報を利用し得る。ここで、難読化モジュール116は、コンパイラモジュール114とは別個の構成要素として実装されてもよく、そのため、指定される変更を直接行うことができないことがある。その代わりに、難読化モジュール116は、コンパイラモジュール114によって供給される構成情報を処理し、構成情報によって示される変更を認識し、難読化モジュール116の代わりにコンパイラモジュールに変更を行わせるように構成される、コンパイラモジュールによる受信のための命令を送る。例えば、上記および以下に説明されている例として、難読化モジュール116は、コンパイラモジュール114に、コールを挿入し、ある値を取得もしくは設定し、関数を暗号化し、および/またはコードを難読化するための他の種類の変更を行うように指示し得る。付加的にまたは代替的に、難読化モジュール116は、コンパイラモジュール114および/またはバックエンドコンパイラの構成要素として実装されてもよく、そのため、ILコードに直接変更を行うように動作してもよい。
前述されたように、多種多様な変更が予期される。変更は、改ざん検出、アンチデバッギング、および/または暗号化などの難読化機能/機能性を実装するために使用される。一実装において、変更は、ランタイムにおけるヒープ実行、コード部分の暗号化/復号化、およびコードの検証のうちの1つまたは複数を可能にするように設計される。これらおよび他のコンパイラベースの難読化機能を実装するために採用され得る変更の非限定的な例のいくつかは、シンボル属性および挙動への変更、クローン関数の作成、コール転送、コードブロックのセグメント化、コードブロックの並べ替え、コールの置換、特定のコードセグメント間への絶対参照の設定、およびエントリポイントの変更を含む。前述のリストにおける例示的な変更のうちの1つまたは複数は、ヒープ実行および他の難読化機能を可能にするために行われ得る。変更は、検証機能を実装し、他の難読化機能を容易にするための、チェックサム、検証モジュール、および/または他の検証コードの挿入も含み得る。また、変更は、コードの指定される部分についての暗号化を実装するために、コード部分の暗号化および/または復号化/再暗号化コードの付加を含み得る。コンパイラベースのコード難読化のための技法のこれらおよび他の態様に関するさらなる詳細は、例示的な手続きの以下の議論において見出され得る。
例示的な手続き
このセクションでは、任意の適切なハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせに関連して実装され得る、コンパイラベースの難読化のための例示的な手続きが議論される。手続きは、1つまたは複数のデバイスによって実行される動作を指定するブロックのセットとして示され、それぞれのブロックによって動作を実行するために図示される順序に必ずしも限定されない。少なくともいくつかの実施形態において、手続きは、図1の例示的なコンピューティングデバイス102などの適切に構成されたコンピューティングデバイスによって実装され得る。手続きの態様は、コンピューティングデバイスの開発モジュール112によって実装され得る。さらに、開発モジュールは、例示的な手続きに関連して説明される動作のうちの少なくともいくつかを実行するように構成される難読化モジュール116および/またはコンパイラモジュール114を含み、または利用し得る。
図3は、難読化により保護されるコンパイル済みコードが開発プロジェクト用のコードをコンパイルすることの一環として生成される例示的な実装における手続き300を描く。限定ではなく例として、手続き300は、開発モジュール112の1つまたは複数のコンパイラモジュール114により実行される例示的な動作を表し得る。コードは、コードのコンパイルの一環として、コードの一部を難読化するための1つまたは複数の変更を生成するために、コンパイラ内で変更される(ブロック302)。例えば、開発モジュール112のコンパイラ(例えば、コンパイラモジュール114)は、アプリケーション開発プロジェクトをコンパイルするために呼び出され得る。図2に関連して説明されたように、コンパイラは、関連付けられるソースコードをどのように難読化するかを記述する指示文206を有する難読化記述204を供給する難読化モジュール116を含み、または相互作用し得る。指示文206は、コンパイラに、ソースコードのコンパイルの一環として様々な変更を実装させるように構成される。コンパイラは、プロジェクト内の少なくともいくつかのコード部分に対して指定された変更を行うために、難読化モジュールと共に動作し得る。前述されたように、多様な変更が予期される。変更は、コードの暗号化、検証、およびヒープ実行を含むが、これらに限定されない、開発モジュールによってサポートされる種々のタイプの難読化機能を生成するために採用される。
コンパイラ内で生成されたコードの一部を難読化する変更を有するコードのコンパイル済みのバージョンが、コンパイラによって形成される(ブロック304)。例えば、様々な異なる変更によって難読化されるコードは、コンパイル済みコードを生成するために、コンパイラによってコンパイルされ得る。コンパイル済みコードは、適当な機械語のバイナリファイルまたは他の下位ファイルであり得る。コンパイラによって出力されるコンパイル済みコードは、コンパイラ自体の中で実装される難読化を含む。
図4は、難読化されたコードを生成するために変更が中間言語コードに対して行われる例示的な実装における手続き400を描くフロー図である。限定ではなく例として、手続き400は、難読化モジュール116を含み、または使用するコンパイラモジュール114により実行される例示的な動作を表し得る。保護すべき開発プロジェクト用のソースコードの部分と、示される部分を難読化するために行うべき変更とを示す指示文が取得される(ブロック402)。例えば、難読化記述204に含まれる指示文206は、関連付けられるソースコードのコンパイル中にコンパイラモジュール114による使用のために難読化モジュール116によって供給され得る。指示文206は、前述されたように、行うべき種々の変更を指定し、保護すべきコードの特定の部分を示し得る。
ソースコードと指示文を実装するためのコードとを結合する中間言語コードが形成される(ブロック404)。これは、図2に関連して説明された手法で発生し得る。例えば、難読化ソースコードを生成するために、前処理が発生し得る。難読化ソースコードは、プロジェクト用のソースコードと結合され、中間言語フォーマットにプリコンパイルされる。1つのアプローチにおいて、結合されたILコードを有する単一のオブジェクトファイルが、コンパイルプロセスの後続のステージにおける対処のために出力される。
指示文は、示される部分を指示文に従って変更するために、中間言語コードに適用される(ブロック406)。次いで、指示文の中間言語コードへの適用によって生成された難読化されたコードがコンパイルされ(ブロック408)、開発プロジェクト用の保護されたコンパイル済みコードが出力される(ブロック410)。ここで、コンパイラモジュール114は、指定される様々な変更を実施するために結合済みのILコードを処理するように動作し得る。そうするために、コンパイラは、前記で議論されたように、難読化モジュール116を呼び出し、および/または、さもなければ、難読化モジュール116と相互作用し得る。コンパイラモジュール114は、ILコードをより下位の機械コード(例えば、バイナリ)に下げてコードをコンパイルするようにさらに構成され得る。一般に、これは、コードを構文解析すること、構文の認識および検証、シンボル置換、コードのレイアウトおよび最適化、ならびにソースコードをコンパイルするために典型的に実行される他の動作を含み得る。その結果は、第三者によるリバースエンジニアリングおよび操作から、様々な難読化によって保護される、コードのコンパイル済みのバージョンである。
図5は、コンパイラベースの難読化が統合開発環境により実行される例示的な実装における手続き500を描くフロー図である。限定ではなく例として、手続き500は、デスクトップパッケージ、オンラインウェブサービス、またはその他として利用可能な統合開発環境(IDE)表す開発モジュール112により実行される例示的な動作を表し得る。ソフトウェア開発プロジェクト用のソースコードの作成を可能にするための開発インターフェースが公開される(ブロック502)。例えば、開発モジュール112は、アプリケーションまたは他のプロジェクト用にソースコードを生成するために開発者によって採用され得る。開発モジュール112は、コンパイラベースの難読化を実装するために本明細書において記載されるように動作する難読化モジュール116を含み、または使用し得る。
ソースコードは、ソースコードの1つまたは複数の選択された部分を難読化するためにソースコードのコンパイル中にコンパイラが行うべき変更を指定するための開発インターフェースを通じて生成された難読化記述に関連付けられる(ブロック504)。ここで、難読化モジュール116は、コードの1つまたは複数の部分について指定される変更を示す指示文206を含む難読化記述204を生成するために呼び出され得る。様々な変更は、個々のコードの部分について選択的に指定され得る。
ソースコードは、1つまたは複数の選択された部分を難読化するために、指定された変更を実装するための難読化記述を使用して、開発プロジェクト用の保護されたコンパイル済みコードを生成するためにコンパイルされる(ブロック506)。例えば、コンパイラモジュール114は、コンパイル中にコードの対応する変更を実装するために、難読化記述204を取得し、解釈し得る。コンパイラモジュール114は、本明細書において議論されるように、変更を直接実装してもよいし、または、変更を指示するために難読化モジュール116に依存してもよい。上記で議論されるような多様な変更は、結果として得られるコードを第三者が理解し、解釈し、リバースエンジニアリングすることを困難にする、1つまたは複数のタイプの難読化により保護されるコンパイル済みコードを形成するために行われ得る。
コンパイラベースの難読化のための例示的な手続きを検討したので、ここで、本明細書において説明される技法の実施形態を実装するために採用され得る例示的なシステムおよび構成要素の議論を検討する。
例示的なシステム
図6は、本明細書において説明される様々な技法を実装し得る1つまたは複数のコンピューティングシステムおよび/またはデバイスを表す例示的なコンピューティングデバイス602を含む例示的なシステム600を例示する。コンピューティングデバイス602は、例えば、サービスプロバイダのサーバ、クライアント(例えば、クライアントデバイス)に関連付けられるデバイス、オンチップシステム、および/または任意の他の適切なコンピューティングデバイスもしくはコンピューティングシステムであり得る。
図示されるような例示的なコンピューティングデバイス602は、互いに通信可能に結合される処理システム604と、1つまたは複数のコンピュータ読取可能な媒体606と、1つまたは複数のI/Oインターフェース608とを含む。図示されていないが、コンピューティングデバイス602は、様々な構成要素を互いに結合するシステムバス、または他のデータおよびコマンド転送システムをさらに含み得る。システムバスは、メモリバスもしくはメモリコントローラ、周辺バス、ユニバーサルシリアルバス、および/または多様なバスアーキテクチャのうちのいずれかを利用するプロセッサもしくはローカルバスなどの、種々のバス構造のうちのいずれか1つまたはこれらの組み合わせを含み得る。制御線およびデータ線などの多様な他の例も予期される。
処理システム604は、1つまたは複数の動作をハードウェアを使用して実行するための機能性を表す。したがって、処理システム604は、プロセッサ、機能ブロックなどとして構成され得るハードウェア要素610を含むものとして例示される。これは、1つまたは複数の半導体を使用して形成される特定用途向け集積回路または他の論理デバイスなどのハードウェアにおける実装を含み得る。ハードウェア要素610は、それらが形成される材料またはそれらにおいて採用される処理メカニズムによって限定されない。例えば、プロセッサは、半導体および/またはトランジスタ(例えば、電子集積回路(IC))から成り得る。そのようなコンテキストにおいて、プロセッサ実行可能な命令は、電気的に実行可能な命令であり得る。
コンピュータ読取可能な媒体606は、メモリ/ストレージ612を含むものとして例示される。メモリ/ストレージ612は、1つまたは複数のコンピュータ読取可能な媒体に関連付けられるメモリ/ストレージ容量を表す。メモリ/ストレージ612は、(ランダムアクセスメモリ(RAM:random access memory)などの)揮発性媒体および/または(読み出し専用メモリ(ROM:read only memory)、フラッシュメモリ、光ディスク、磁気ディスクなどの)不揮発性媒体を含み得る。メモリ/ストレージ612は、固定媒体(例えば、RAM、ROM、固定ハードドライブなど)および取り外し可能な媒体(例えば、フラッシュメモリ、取り外し可能なハードドライブ、光ディスクなど)を含み得る。コンピュータ読取可能な媒体606は、以下にさらに説明されるように、多様な他の手法で構成され得る。
入力/出力インターフェース608は、ユーザがコマンドおよび情報をコンピューティングデバイス602に入力することを可能にし、様々な入力/出力デバイスを使用して情報がユーザおよび/または他の構成要素またはデバイスに提示されることをも可能にするための機能性を表す。入力デバイスの例は、キーボード、カーソル制御デバイス(例えば、マウス)、音声動作用のマイクロフォン、スキャナ、タッチ機能性(例えば、物理的なタッチを検出するように構成される容量センサまたは他のセンサ)、(例えば、ジェスチャとしてのタッチを伴わない動きを検出するための赤外振動数などの可視波長または不可視波長を採用し得る)カメラなどを含む。出力デバイスの例は、表示デバイス(例えば、モニタまたはプロジェクタ)、スピーカ、プリンタ、ネットワークカード、触覚応答デバイスなどを含む。したがって、コンピューティングデバイス602は、ユーザとの相互作用をサポートするために、以下にさらに説明されるような多様な手法で構成され得る。
様々な技法は、本明細書において、ソフトウェア、ハードウェア要素、またはプログラムモジュールの一般的なコンテキストにおいて説明され得る。一般に、そのようなモジュールは、特定のタスクを実行し、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、要素、構成要素、データ構造などを含む。本明細書において使用される、「モジュール」、「機能性」および「構成要素」という用語は、一般に、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。本明細書において説明される技法の機能は、プラットフォームに依存せず、これは、多様なプロセッサを有する多様な商用コンピューティングプラットフォーム上で本技法が実装され得ることを意味する。
説明されたモジュールおよび技法の実装は、何らかの形式のコンピュータ読取可能な媒体上に記憶され、または何らかの形式のコンピュータ読取可能な媒体を介して送信され得る。コンピュータ読取可能な媒体は、コンピューティングデバイス602によってアクセスされ得る多様な媒体を含み得る。限定ではなく、例として、コンピュータ読取可能な媒体は、「コンピュータ読取可能な記憶媒体」と「通信媒体」とを含み得る。
「コンピュータ読取可能な記憶媒体」とは、単なる信号送信、搬送波、または信号それ自体とは対照的に、情報の記憶を可能にする媒体および/またはデバイスを言う。したがって、コンピュータ読取可能な記憶媒体は、信号担持媒体または信号それ自体を含まない。コンピュータ読取可能な記憶媒体は、コンピュータ読取可能な命令、データ構造、プログラムモジュール、論理要素/回路、または他のデータなどの情報の記憶に適した方法または技術において実装される揮発性および不揮発性、取り外し可能および取り外し不可能な媒体および/または記憶デバイスなどのハードウェアを含む。コンピュータ読取可能な記憶媒体の例は、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD:digital versatile disk)もしくは他の光学ストレージ、ハードディスク、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または他のストレージデバイス、有形の媒体、または所望の情報を記憶するのに適しており、コンピュータによってアクセスされ得る製品を含み得るが、これらに限定されない。
「通信媒体」とは、ネットワーク経由など、命令をコンピューティングデバイス602のハードウェアへ送信するように構成された信号担持媒体を言う。通信媒体は、典型的には、コンピュータ読取可能な命令、データ構造、プログラムモジュール、または他のデータを、搬送波、データ信号、または他の伝送メカニズムなどの変調されたデータ信号において具現化し得る。通信媒体は、任意の情報配信媒体も含む。「変調されたデータ信号」という用語は、情報を信号中にエンコードするような手法でその特性のうちの1つまたは複数を設定または変更した信号を意味する。限定ではなく、例として、通信媒体は、有線ネットワークまたは直接有線接続などの有線媒体と、音響、RF、赤外線、および他の無線媒体などの無線媒体とを含む。
前述されたように、ハードウェア要素610およびコンピュータ読取可能な媒体606は、本明細書において説明される技法の少なくともいくつかの態様を実装するために、いくつかの実施形態において採用され得るハードウェア形式で実装される、命令、モジュール、プログラム可能なデバイスロジックおよび/または固定デバイスロジックを表す。ハードウェア要素は、集積回路またはオンチップシステム、特定用途向け回路(ASIC:application-specific integrated circuit)、フィールドプログラマブルゲートアレイ(FPGA:field-programmable gate array)、複合プログラマブルロジックデバイス(CPLD:complex programmable logic device)、およびシリコンにおける他の実装もしくは他のハードウェアデバイスの構成要素を含み得る。このコンテキストにおいて、ハードウェア要素は、ハードウェア要素によって具現化される命令、モジュール、および/またはロジックによって定義されるプログラムタスクを実行する処理デバイスとして、ならびに、実行のための命令を記憶するために利用されるハードウェアデバイス、例えば、前述されたコンピュータ読取可能な記憶媒体として動作し得る。
前述されたものの組み合わせも、本明細書において説明される様々な技法およびモジュールを実装するために採用され得る。したがって、オペレーティングシステム108、アプリケーション110、開発モジュール112、コンパイラモジュール114、難読化モジュール116、および他のプログラムモジュールを含むソフトウェア、ハードウェア、またはプログラムモジュールは、何らかの形式のコンピュータ読取可能な記憶媒体上で具現化され、および/または、1つもしくは複数のハードウェア要素610によって具現化される、1つまたは複数の命令および/またはロジックとして実装され得る。コンピューティングデバイス602は、ソフトウェアモジュールおよび/またはハードウェアモジュールに対応する特定の命令および/または関数を実装するように構成され得る。したがって、ソフトウェアとしてコンピューティングデバイス602によって実行可能なモジュールとしてのモジュールの実装は、少なくとも部分的にはハードウェアにおいて、例えば、処理システムのコンピュータ読取可能な記憶媒体および/またはハードウェア要素610の使用を通じて、達成され得る。命令および/または関数は、本明細書において説明される技法、モジュール、および例を実装するために、1つまたは複数の製品(例えば、1つもしくは複数のコンピューティングデバイス602および/または処理システム604)によって実行可能/動作可能であり得る。
図6においてさらに例示されるように、例示的なシステム600は、パーソナルコンピュータ(PC:personal computer)、テレビデバイス、および/またはモバイルデバイス上でアプリケーションを実行する場合にシームレスなユーザ体験のためのユビキタス環境を可能にする。サービスおよびアプリケーションは、アプリケーションを利用している間、ビデオゲームをしている間、ビデオを鑑賞している間などに、あるデバイスから次のデバイスへ移行する場合に、共通のユーザ体験のために、3つの環境全てにおいて実質的に同様に実行される。
例示的なシステム600において、複数のデバイスは、中央コンピューティングデバイスを通じて相互接続される。中央コンピューティングデバイスは、複数のデバイスに対してローカルであってもよいし、または複数のデバイスから遠隔に位置していてもよい。一実施形態において、中央コンピューティングデバイスは、ネットワーク、インターネット、または他のデータ通信リンクを通じて複数のデバイスに接続される、1つまたは複数のサーバコンピュータのクラウドであり得る。
一実施形態において、この相互接続アーキテクチャは、複数のデバイスのユーザに共通のシームレスな体験を提供するために、複数のデバイスにわたって配信されるべき機能性を有効にする。複数のデバイスの各々は、異なる物理的要件および能力を有し得、中央コンピューティングデバイスは、両方のデバイスに合わせられているだけでなく、全てのデバイスにも共通する体験の当該デバイスへの配信を可能にするためのプラットフォームを使用する。一実施形態においては、ターゲットデバイスのクラスが作成され、体験は、デバイスのジェネリッククラスに合わせられる。デバイスのクラスは、物理的な特徴、使用法のタイプ、またはデバイスの他の共通する特性によって定義され得る。
様々な実装において、コンピューティングデバイス602は、コンピュータ614、モバイル616、およびテレビ受像機618への用途など多様な異なる構成をとり得る。これらの構成の各々は、概して異なる構造と能力とを有し得るデバイスを含み、したがって、コンピューティングデバイス602は、異なるデバイスクラスのうちの1つまたは複数に従って構成され得る。例えば、コンピューティングデバイス602は、パーソナルコンピュータ、デスクトップコンピュータ、マルチスクリーンコンピュータ、ラップトップコンピュータ、ネットブックなどを含む、コンピュータ614のクラスのデバイスとして実装され得る。
コンピューティングデバイス602は、携帯電話、携帯音楽プレーヤ、携帯ゲーム機、タブレットコンピュータ、マルチスクリーンコンピュータなどのモバイルデバイスを含む、モバイル616のクラスのデバイスとしても実装され得る。コンピューティングデバイス602は、気軽な視聴環境において、概してより大きな画面を有し、または概してより大きな画面に接続されるデバイスを含む、テレビ受像機618のクラスのデバイスとしても実装され得る。これらのデバイスは、テレビ受像機、セットトップボックス、ゲーム機本体などを含む。
本明細書において説明される技法は、コンピューティングデバイス602のこれらの様々な構成によってサポートされることができ、本明細書において説明される技法の特定の例に限定されない。これは、開発モジュール112をコンピューティングデバイス602上に含めることを通じて例示される。開発モジュール112と他のモジュールの機能性も、以下に説明されるように、プラットフォーム622を用いた「クラウド」620上などの分散システムの使用を通じて全部または一部が実装され得る。
クラウド620は、リソース624についてのプラットフォーム622を含み、および/またはリソース624についてのプラットフォーム622を表す。プラットフォーム622は、クラウド620のハードウェアリソース(例えば、サーバ)およびソフトウェアリソースの基本的な機能性を抽象化する。リソース624は、コンピューティングデバイス602から遠隔のサーバ上でコンピュータ処理が実行される間に利用され得るアプリケーションおよび/またはデータを含み得る。リソース624は、インターネット上で、および/または、セルラネットワークもしくはWi−Fiネットワークなどの加入者ネットワークを通じて提供されるサービスも含み得る。
プラットフォーム622は、コンピューティングデバイス602を他のコンピューティングデバイスに接続するために、リソースおよび機能を抽象化し得る。プラットフォーム622は、プラットフォーム622を介して実装されるリソース624について直面する需要に対する対応するレベルのスケールを提供するために、リソースのスケーリングを抽象化するためにも役立ち得る。したがって、相互接続されたデバイスの実施形態において、本明細書において説明される機能性の実装は、システム600の全体にわたって分散され得る。例えば、機能性は、部分的にコンピューティングデバイス602上に実装され、またクラウド620の機能性を抽象化するプラットフォーム622を介して実装されてもよい。
結び
本発明は、構造的な特徴および/または方法論的な動作に固有の言語において説明されてきたが、添付の特許請求の範囲において定義される本発明は、必ずしも特定の特徴または動作に限定されるとは限らないことが理解されるべきである。むしろ、特定の特徴および動作は、特許請求の範囲に記載された発明を実装する例示的な形態として開示される。

Claims (10)

  1. コードのコンパイルの一環として、前記コードの一部を難読化するための1つまたは複数の変更を生成するために、開発プロジェクト用の前記コードをコンパイラ内で変更することと、
    前記コードの一部を難読化するための前記変更が前記コンパイラ内で生成された、前記コードのコンパイル済みのバージョンを、前記コンパイラによって形成することと、
    を含む、方法。
  2. 前記変更を定義する指示文を有する難読化記述を取得することと、
    前記変更を生成するために、前記難読化記述を前記コードに適用することと、
    をさらに含む、請求項1に記載の方法。
  3. 前記難読化記述に基づいて前記コードの部分を選択的に難読化することをさらに含み、前記難読化記述が、保護すべき前記コードの1つまたは複数の部分と、前記1つまたは複数の部分に行うべき1つまたは複数の変更とを指定するように構成される、請求項2に記載の方法。
  4. 前記変更を生成するために、前記コンパイルプロセスの一環として、1つまたは複数の難読化アルゴリズムをオンザフライで形成することをさらに含み、異なる難読化アルゴリズムは、前記コードの少なくとも2つの異なる部分のために形成され、前記コードの少なくとも2つの異なる部分に適用される、請求項2に記載の方法。
  5. 複数の部分の保護を個別化するために、前記難読化記述中の前記指示文によって指示されるように、異なる難読化機能および変更を前記複数の部分に個々に適用することを含む、前記コードのコンパイルの一環として前記コードの前記複数の部分を変更すること、
    をさらに含む、請求項2に記載の方法。
  6. 前記変更が、
    コードブロックの並べ替え、コール転送、クローン関数の作成、シンボル属性および挙動への変更、コードブロックのセグメント化、コールの置換、前記コードの異なる部分間の絶対参照の設定、前記コードへのエントリポイントの変更、
    チェックサム、検証モジュール、もしくは検証コードの挿入、
    前記コードの一部の暗号化および復号化/再暗号化コードの付加、または、
    ランタイムにおいて難読化された形式で実行させるための少なくとも1つの関数の仮想化、
    のうちの1つまたは複数を含む、請求項1に記載の方法。
  7. 前記変更が、
    前記開発プロジェクト用のソースコードと前記ソースコードに行うべき前記変更を示すソース難読化コードとを結合する中間言語コードを生成するために、前記コードを前処理することと、
    前記コードのコンパイル中に前記コンパイラ内で前記中間言語コードに前記変更を適用することによって、前記コードを難読化することと、
    を含む、請求項1に記載の方法。
  8. コンピューティングデバイスによって実行される場合にコンパイラモジュールを実装する命令を記憶する、1つまたは複数のコンピュータ読取可能な記憶媒体であって、前記コンパイラモジュールは、
    保護すべき開発プロジェクト用のソースコードの部分を示し、前記示される部分を難読化するために行うべき変更を示す指示文を取得することであって、前記変更は、前記ソースコードのヒープ実行、検証、または暗号化のうちの1つまたは複数を可能にするように設計される、取得することと、
    前記ソースコードと前記指示文を実装するためのコードとを結合する中間言語コードを形成することと、
    前記コンパイラモジュールによる前記中間言語コードのコンパイル中に、前記指示文に従って前記示される部分を変更するために、前記指示文を前記中間言語コードに適用することと、
    前記指示文の前記中間言語コードへの適用によって生成された難読化コードをコンパイルすることと、
    前記コンパイラモジュールによって前記中間言語コードの前記コンパイル中に難読化が生成された、前記開発プロジェクト用の保護されたコンパイル済みコードを出力することと、
    を含む動作を実行するように構成される、1つまたは複数のコンピュータ読取可能な記憶媒体。
  9. 処理システムと、
    統合開発環境(IDE)を実装するために前記処理システムのハードウェアにより少なくとも部分的に動作可能である1つまたは複数のモジュールと、
    を備え、前記統合開発環境(IDE)は、
    ソフトウェア開発プロジェクト用のソースコードの作成を可能にするための開発インターフェースを公開し、
    前記ソースコードの1つまたは複数の選択された部分を難読化するために、前記ソースコードのコンパイル中にコンパイラが行うべき変更を指定する前記開発インターフェースを通じて生成された難読化定義を前記ソースコードに関連付け、
    コンパイル中に前記1つまたは複数の選択された部分を難読化するために、前記指定された変更を実装するための前記難読化定義を使用して、前記開発プロジェクト用の保護されたコンパイル済みコードを生成するために、前記ソースコードをコンパイルする
    ように構成される、コンピューティングデバイス。
  10. 前記統合開発環境(IDE)が、難読化モジュールとコンパイラモジュールとを備え、前記難読化モジュールは、前記難読化記述を生成し、前記難読化記述モジュールを前記コンパイラモジュールによる実行のために供給するように動作可能であり、前記コンパイラモジュールは、コンパイル中に前記ソースコードの対応する変更を実装するために前記難読化モジュールによって供給される前記難読化記述を取得し、解釈することを含めて、保護されたコンパイル済みコードを生成するために前記ソースコードをコンパイルするように動作可能である、請求項9に記載のコンピューティングデバイス。
JP2015560258A 2013-02-28 2014-02-26 コンパイラベースの難読化 Active JP6490598B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/781,691 US9116712B2 (en) 2013-02-28 2013-02-28 Compile based obfuscation
US13/781,691 2013-02-28
PCT/US2014/018458 WO2014134080A1 (en) 2013-02-28 2014-02-26 Compiler based obfuscation

Publications (2)

Publication Number Publication Date
JP2016511905A true JP2016511905A (ja) 2016-04-21
JP6490598B2 JP6490598B2 (ja) 2019-03-27

Family

ID=50336512

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015560258A Active JP6490598B2 (ja) 2013-02-28 2014-02-26 コンパイラベースの難読化

Country Status (6)

Country Link
US (2) US9116712B2 (ja)
EP (1) EP2962193B1 (ja)
JP (1) JP6490598B2 (ja)
KR (1) KR102107872B1 (ja)
CN (1) CN105103127B (ja)
WO (1) WO2014134080A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020503623A (ja) * 2017-01-05 2020-01-30 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. コンパイルデバイス及びコンパイル方法
JP2021515314A (ja) * 2018-02-28 2021-06-17 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. コンパイルデバイス及び方法

Families Citing this family (68)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9081587B1 (en) * 2012-04-25 2015-07-14 Google Inc. Multiversioned functions
US9116712B2 (en) 2013-02-28 2015-08-25 Microsoft Technology Licensing, Llc Compile based obfuscation
US9104862B2 (en) * 2013-04-01 2015-08-11 Uniquesoft, Llc Secure computing device using new software versions
EP2913772A1 (de) * 2014-02-28 2015-09-02 Wibu-Systems AG Verfahren und Computersystem zum Schutz eines Computerprogramms gegen Beeinflussung
US9292270B2 (en) 2014-03-27 2016-03-22 Microsoft Technology Licensing, Llc Supporting dynamic behavior in statically compiled programs
US9389890B2 (en) 2014-03-27 2016-07-12 Microsoft Technology Licensing, Llc Hierarchical directives-based management of runtime behaviors
US9547758B2 (en) * 2014-05-19 2017-01-17 Nxp B.V. Program cable obfuscation based upon recently executed program code
US9501301B2 (en) * 2015-02-26 2016-11-22 Nxp B.V. Flexible instruction sets for obfuscated virtual machines
KR101757407B1 (ko) 2015-06-11 2017-07-12 라인 가부시키가이샤 바이너리 병합 장치, 방법 및 컴퓨터 프로그램
IN2015DE02056A (ja) * 2015-07-07 2015-07-31 Hcl Technologies Ltd
KR101740134B1 (ko) * 2015-08-10 2017-05-26 라인 가부시키가이샤 어플리케이션의 코드 난독화를 위한 시스템 및 방법
US10255443B2 (en) * 2016-02-11 2019-04-09 Line Corporation Method, apparatus, system and non-transitory computer readable medium for code protection
US10423748B2 (en) * 2016-07-08 2019-09-24 efabless corporation Systems and methods for obfuscating a circuit design
US10354069B2 (en) * 2016-09-02 2019-07-16 Bae Systems Information And Electronic Systems Integration Inc. Automated reverse engineering
US10394554B1 (en) * 2016-09-09 2019-08-27 Stripe, Inc. Source code extraction via monitoring processing of obfuscated byte code
US10248412B2 (en) * 2016-09-20 2019-04-02 Microsoft Technology Licensing, Llc Sharing applications by modifying attributes
CN106547548B (zh) * 2016-10-19 2020-06-30 海信视像科技股份有限公司 一种软件版本的编译方法和装置
CN106650340B (zh) * 2016-11-16 2019-12-06 中国人民解放军国防科学技术大学 一种采用动态细粒度代码隐藏与混淆技术的二进制软件保护方法
CN106778100B (zh) * 2016-12-01 2020-06-05 北京智游网安科技有限公司 基于安卓平台和ios平台的混淆编译方法及混淆编译器
US10311217B2 (en) 2016-12-09 2019-06-04 Microsoft Technology Licensing, Llc Application piracy prevention with secure enclave protection of automatically modularized functions
CN107092518A (zh) * 2017-04-17 2017-08-25 上海红神信息技术有限公司 一种保护拟态防御***软件层安全的编译方法
CN108733988B (zh) * 2017-04-19 2023-01-24 北京梆梆安全科技有限公司 安卓平台上可执行程序的保护方法
CN107766702A (zh) * 2017-05-10 2018-03-06 平安科技(深圳)有限公司 代码混淆方法、装置及计算机可读存储介质
CN109240696A (zh) * 2017-05-19 2019-01-18 腾讯科技(深圳)有限公司 一种软件更新方法及装置
CN107229848A (zh) * 2017-06-12 2017-10-03 北京洋浦伟业科技发展有限公司 一种代码加固方法和装置
US10706164B2 (en) * 2017-09-29 2020-07-07 Intel Corporation Crypto-enforced capabilities for isolation
EP3467691B1 (en) * 2017-10-05 2020-08-26 Eshard Method of selecting software files
CN108197440A (zh) * 2017-11-28 2018-06-22 五八有限公司 一种代码混淆方法、设备及计算机可读存储介质
CN109933326B (zh) * 2017-12-15 2023-03-17 北京奇虎科技有限公司 改写代码的编译方法、装置及相应终端
EP3502935A1 (en) * 2017-12-20 2019-06-26 Koninklijke Philips N.V. Compiling device and method
CN108446536B (zh) * 2018-02-12 2021-08-13 北京梆梆安全科技有限公司 一种基于符号执行和单点逻辑的源代码加固方法及装置
CN108446541B (zh) * 2018-02-12 2021-10-29 北京梆梆安全科技有限公司 基于有限状态机和符号执行的源代码加固方法及装置
CN108537012B (zh) * 2018-02-12 2021-11-16 北京梆梆安全科技有限公司 基于变量和代码执行顺序的源代码混淆方法及装置
US10698668B1 (en) * 2018-05-29 2020-06-30 Amazon Technologies, Inc. Custom code transformations during compilation process
EP3591550A1 (en) * 2018-07-06 2020-01-08 Koninklijke Philips N.V. A compiler device with masking function
CN109101237A (zh) * 2018-08-01 2018-12-28 北京顶象技术有限公司 代码的加密编译方法及装置
CN109145535A (zh) * 2018-08-13 2019-01-04 阿里巴巴集团控股有限公司 一种前端页面提供方法及装置
CN109409037B (zh) * 2018-09-29 2022-04-29 创新先进技术有限公司 一种数据混淆规则的生成方法、装置及设备
KR102663589B1 (ko) * 2018-10-26 2024-05-09 삼성전자주식회사 서버 및 서버의 제어 방법
CN109784010A (zh) * 2018-12-18 2019-05-21 武汉极意网络科技有限公司 一种基于llvm的程序控制流混淆方法及装置
KR20220047928A (ko) * 2019-04-18 2022-04-19 런세이프 시큐리티, 인크. 소스 수정 엔진
CN110135133B (zh) * 2019-04-19 2021-08-17 佛山市微风科技有限公司 一种面向微控制器的压缩整合式源代码混淆方法及***
CN111984939A (zh) * 2019-05-22 2020-11-24 北京奇虎科技有限公司 字符串混淆方法、装置、电子设备和存储介质
US11741248B2 (en) 2019-08-20 2023-08-29 Bank Of America Corporation Data access control using data block level encryption
US11176264B2 (en) 2019-08-20 2021-11-16 Bank Of America Corporation Data access control using data block level decryption
CN110597516B (zh) * 2019-08-27 2023-10-20 贝壳技术有限公司 插件化代码的混淆方法、装置、电子设备和存储介质
JP6752347B1 (ja) * 2019-10-17 2020-09-09 株式会社Dnpハイパーテック 情報処理装置、コンピュータプログラム及び情報処理方法
KR102361534B1 (ko) * 2020-02-05 2022-02-10 라인플러스 주식회사 컴파일러를 이용한 난독화 방법 및 시스템
CN111339503B (zh) * 2020-02-25 2023-01-03 Oppo广东移动通信有限公司 控制流混淆方法及相关产品
KR102322965B1 (ko) 2020-03-23 2021-11-09 주식회사 티맥스 소프트 Transpiler를 통하여 전환된 언어와 source 언어간 범용 런타임 검증 시스템
CN111475168B (zh) * 2020-04-14 2023-05-05 中国人民解放军战略支援部队信息工程大学 一种代码编译方法及装置
CN111666078A (zh) * 2020-04-30 2020-09-15 平安科技(深圳)有限公司 源码加固方法、装置、计算机设备及存储介质
CN111694564B (zh) * 2020-06-05 2023-08-04 百度在线网络技术(北京)有限公司 Flutter混合模式的编译方法、装置、设备和介质
CN111857808B (zh) * 2020-06-22 2022-04-26 烽火通信科技股份有限公司 一种符号的重命名方法和重命名装置
EP3944106A1 (en) * 2020-07-24 2022-01-26 Nagravision SA Obfuscating method of protecting code
CN112099776A (zh) * 2020-09-17 2020-12-18 重庆轩进软件有限公司 安卓***防止二次打包修改方法
CN112612999B (zh) * 2020-12-30 2022-11-15 中国人民解放军战略支援部队信息工程大学 基于树结构的多样化变体生成方法及***
US11556336B2 (en) 2021-02-16 2023-01-17 Bank Of America Corporation System for computer code development environment cloning and authentication using a distributed server network and machine learning
US20220308956A1 (en) * 2021-03-26 2022-09-29 Vmware, Inc. Verifying object file canisters using built-in reverse relocation integrity checking
EP4334822A4 (en) * 2021-06-30 2024-06-05 Huawei Technologies Co., Ltd. METHOD AND SYSTEM FOR PROVIDING A CONTEXT-SENSITIVE NON-INTRUSIVE DATA PROCESSING OPTIMIZATION STRUCTURE
CN113641395A (zh) * 2021-08-13 2021-11-12 济南浪潮数据技术有限公司 微前端架构下的打包部署的方法、装置、设备及可读介质
CN113742661A (zh) * 2021-09-07 2021-12-03 北京闲徕互娱网络科技有限公司 unity代码安全防护方法、计算机可读介质
CN114090964A (zh) * 2021-11-18 2022-02-25 北京五八信息技术有限公司 代码处理方法、装置、电子设备及可读介质
EP4209938A1 (en) * 2022-01-05 2023-07-12 Irdeto B.V. Systems, methods, and storage media for creating secured computer code
CN115473702A (zh) * 2022-08-23 2022-12-13 广西电网有限责任公司电力科学研究院 一种基于在线交互式web动态防御的内容混淆方法
KR102482880B1 (ko) * 2022-09-05 2022-12-29 한화시스템(주) 무기체계 임베디드 sw 보호를 위한 역공학 방지 시스템 및 그 방법
CN117172209B (zh) * 2023-11-03 2024-02-27 睿思芯科(深圳)技术有限公司 芯片的验证***、方法及相关设备
CN117909939B (zh) * 2024-03-19 2024-06-07 麒麟软件有限公司 一种基于代码文本内容的代码保护方法及编译器文本锁

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09233067A (ja) * 1990-07-31 1997-09-05 Hiroichi Okano 知的情報処理方法および装置
JP2007503038A (ja) * 2003-08-20 2007-02-15 マクロヴィジョン ヨーロッパ リミテッド コード難読化およびエミュレーションによるプロセッサ制御
US7353400B1 (en) * 1999-08-18 2008-04-01 Sun Microsystems, Inc. Secure program execution depending on predictable error correction
US20090235089A1 (en) * 2008-03-12 2009-09-17 Mathieu Ciet Computer object code obfuscation using boot installation
JP2010517119A (ja) * 2007-01-18 2010-05-20 パナソニック株式会社 難読化支援装置
US20100281459A1 (en) * 2009-05-01 2010-11-04 Apple Inc. Systems, methods, and computer-readable media for fertilizing machine-executable code

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4739465B2 (ja) 1997-06-09 2011-08-03 インタートラスト テクノロジーズ コーポレイション ソフトウェアセキュリティを増強するための混乱化技術
US7770016B2 (en) 1999-07-29 2010-08-03 Intertrust Technologies Corporation Systems and methods for watermarking software and other media
US7051200B1 (en) * 2000-06-27 2006-05-23 Microsoft Corporation System and method for interfacing a software process to secure repositories
US7587616B2 (en) * 2005-02-25 2009-09-08 Microsoft Corporation System and method of iterative code obfuscation
US20070174818A1 (en) * 2005-08-18 2007-07-26 Pasula Markus I Method and apparatus for generating application programs for multiple hardware and/or software platforms
WO2007049817A1 (en) * 2005-10-28 2007-05-03 Matsushita Electric Industrial Co., Ltd. Obfuscation evaluation method and obfuscation method
JP2007304726A (ja) * 2006-05-09 2007-11-22 Fuji Xerox Co Ltd プログラム難読化装置、難読化方法及び難読化プログラム
US8001607B2 (en) * 2006-09-27 2011-08-16 Direct Computer Resources, Inc. System and method for obfuscation of data across an enterprise
US8584109B2 (en) * 2006-10-27 2013-11-12 Microsoft Corporation Virtualization for diversified tamper resistance
US8365157B2 (en) * 2006-11-09 2013-01-29 Oracle International Corporation System and method for early platform dependency preparation of intermediate code representation during bytecode compilation
EP2126713A2 (en) * 2007-02-19 2009-12-02 Ondeego, Inc. Methods and system to create applications and distribute applications to a remote device
US20080229115A1 (en) * 2007-03-16 2008-09-18 Microsoft Corporation Provision of functionality via obfuscated software
US8176473B2 (en) * 2007-05-14 2012-05-08 Microsoft Corporation Transformations for software obfuscation and individualization
CN100474253C (zh) * 2007-11-22 2009-04-01 北京飞天诚信科技有限公司 .Net程序保护方法及装置
GB0806284D0 (en) * 2008-04-07 2008-05-14 Metaforic Ltd Profile-guided tamper-proofing
US9063765B2 (en) * 2008-04-28 2015-06-23 Kaazing Corporation System and methods for distributed execution of computer executable programs utilizing asymmetric translation
US8094813B2 (en) * 2008-09-02 2012-01-10 Apple Inc. System and method for modulus obfuscation
US8429637B2 (en) * 2008-09-02 2013-04-23 Apple Inc. System and method for conditional expansion obfuscation
WO2010001324A2 (en) * 2008-06-30 2010-01-07 Mominis Ltd Method of generating and distributing a computer application
US8583553B2 (en) * 2008-08-14 2013-11-12 The Invention Science Fund I, Llc Conditionally obfuscating one or more secret entities with respect to one or more billing statements related to one or more communiqués addressed to the one or more secret entities
US8626848B2 (en) * 2008-08-14 2014-01-07 The Invention Science Fund I, Llc Obfuscating identity of a source entity affiliated with a communiqué in accordance with conditional directive provided by a receiving entity
US8929208B2 (en) * 2008-08-14 2015-01-06 The Invention Science Fund I, Llc Conditionally releasing a communiqué determined to be affiliated with a particular source entity in response to detecting occurrence of one or more environmental aspects
EP2159732A1 (en) * 2008-08-21 2010-03-03 Thomson Licensing Method and device for code obfuscation
US8561040B2 (en) * 2009-03-10 2013-10-15 Oracle America, Inc. One-pass compilation of virtual instructions
US8510723B2 (en) * 2009-05-29 2013-08-13 University Of Maryland Binary rewriting without relocation information
US8386803B2 (en) * 2009-11-18 2013-02-26 Apple Inc. System and method for data obfuscation based on discrete logarithm properties
US20110138373A1 (en) * 2009-12-08 2011-06-09 American National Laboratories, Inc. Method and apparatus for globally optimizing instruction code
US8667301B2 (en) * 2010-04-01 2014-03-04 Apple Inc. Obfuscating transformations on data array content and addresses
US8539597B2 (en) * 2010-09-16 2013-09-17 International Business Machines Corporation Securing sensitive data for cloud computing
US20120079462A1 (en) * 2010-09-24 2012-03-29 SoftKrypt LLC Systems and methods of source software code obfuscation
US9473530B2 (en) * 2010-12-30 2016-10-18 Verisign, Inc. Client-side active validation for mitigating DDOS attacks
US8615735B2 (en) 2011-05-03 2013-12-24 Apple Inc. System and method for blurring instructions and data via binary obfuscation
CN102236757A (zh) * 2011-06-30 2011-11-09 北京邮电大学 一种适用于Android***的软件保护方法及***
US20130014267A1 (en) * 2011-07-07 2013-01-10 Farrugia Augustin J Computer protocol generation and obfuscation
US8751823B2 (en) * 2011-08-01 2014-06-10 Apple Inc. System and method for branch function based obfuscation
US8695060B2 (en) * 2011-10-10 2014-04-08 Openpeak Inc. System and method for creating secure applications
WO2013059367A1 (en) * 2011-10-18 2013-04-25 Paul Marion Hriljac Systems and methods of source software code modification
US20140006017A1 (en) * 2012-06-29 2014-01-02 Qualcomm Incorporated Systems, methods, apparatus, and computer-readable media for generating obfuscated speech signal
US9111383B2 (en) * 2012-10-05 2015-08-18 Elwha Llc Systems and methods for obtaining and using augmentation data and for sharing usage data
US9336370B2 (en) * 2012-12-06 2016-05-10 Apple Inc. Method and apparatus for dynamic obfuscation of static data
CN103093155B (zh) * 2012-12-07 2016-04-27 中北大学 基于源码修改的信息隐藏方法
US9116712B2 (en) 2013-02-28 2015-08-25 Microsoft Technology Licensing, Llc Compile based obfuscation
US9250937B1 (en) * 2013-11-06 2016-02-02 The Regents Of The University Of California Code randomization for just-in-time compilers
EP2876593B1 (en) * 2013-11-21 2018-09-26 Nxp B.V. Method of generating a structure and corresponding structure
US10338933B2 (en) * 2014-03-25 2019-07-02 Dell Products, Lp Method for generating custom BIOS setup interface and system therefor
EP3012764A1 (en) * 2014-10-24 2016-04-27 Thomson Licensing Control flow graph flattening device and method
EP3012762A1 (en) * 2014-10-24 2016-04-27 Thomson Licensing Control flow graph flattening device and method

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09233067A (ja) * 1990-07-31 1997-09-05 Hiroichi Okano 知的情報処理方法および装置
US7353400B1 (en) * 1999-08-18 2008-04-01 Sun Microsystems, Inc. Secure program execution depending on predictable error correction
JP2007503038A (ja) * 2003-08-20 2007-02-15 マクロヴィジョン ヨーロッパ リミテッド コード難読化およびエミュレーションによるプロセッサ制御
JP2010517119A (ja) * 2007-01-18 2010-05-20 パナソニック株式会社 難読化支援装置
US20090235089A1 (en) * 2008-03-12 2009-09-17 Mathieu Ciet Computer object code obfuscation using boot installation
US20100281459A1 (en) * 2009-05-01 2010-11-04 Apple Inc. Systems, methods, and computer-readable media for fertilizing machine-executable code

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"「キーワードで探るこれからのソフトウエア開発」〜次世***発ツールフォーラムAutumnプレビュー〜", NIKKEI BYTE, vol. 第258号, JPN6018002807, 22 October 2004 (2004-10-22), JP, pages 66, ISSN: 0003728688 *
増田 佳泰: "組み込み機器開発のプラットホームとして注目度が増す:技術者のためのPC UNIX活用ノウハウ", INTERFACE, vol. 第25巻 第2号, JPN6018002805, 1 February 1999 (1999-02-01), JP, pages 71 - 86, ISSN: 0003728687 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020503623A (ja) * 2017-01-05 2020-01-30 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. コンパイルデバイス及びコンパイル方法
JP7132926B2 (ja) 2017-01-05 2022-09-07 コーニンクレッカ フィリップス エヌ ヴェ コンパイルデバイス及びコンパイル方法
JP2021515314A (ja) * 2018-02-28 2021-06-17 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. コンパイルデバイス及び方法
JP7285850B2 (ja) 2018-02-28 2023-06-02 コーニンクレッカ フィリップス エヌ ヴェ コンパイルデバイス及び方法

Also Published As

Publication number Publication date
CN105103127A (zh) 2015-11-25
KR102107872B1 (ko) 2020-05-07
US20150339108A1 (en) 2015-11-26
KR20150122149A (ko) 2015-10-30
WO2014134080A1 (en) 2014-09-04
EP2962193A1 (en) 2016-01-06
US9471288B2 (en) 2016-10-18
US20140245271A1 (en) 2014-08-28
EP2962193B1 (en) 2021-03-24
JP6490598B2 (ja) 2019-03-27
CN105103127B (zh) 2018-05-04
US9116712B2 (en) 2015-08-25

Similar Documents

Publication Publication Date Title
JP6490598B2 (ja) コンパイラベースの難読化
CN110178136B (zh) 现场可编程门阵列程序的签名验证的方法和设备
US20180260199A1 (en) Method and apparatus for intermediate representation of applications
Holla et al. Android based mobile application development and its security
US10409966B2 (en) Optimizing and protecting software
US8694988B2 (en) Runtime extensions
US20170116410A1 (en) Software protection
US8683462B2 (en) Handling calls to native code in a managed code environment
US8090959B2 (en) Method and apparatus for protecting .net programs
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
CN105022936A (zh) 一种类class文件加密解密方法和装置
JP6392446B2 (ja) クラウドベースのアプリケーションセキュリティサービスの提供方法及びシステム
CN107871066B (zh) 基于安卓***的代码编译方法及装置
JP6815386B2 (ja) アプリケーションのコードを保護するためのシステム、方法およびプログラム
CN108351766B (zh) 从移动设备创建和修改应用
US10867017B2 (en) Apparatus and method of providing security and apparatus and method of executing security for common intermediate language
CN113568680A (zh) 应用程序的动态链接库保护方法、装置、设备及介质
US20150195376A1 (en) Machine-Specific Instruction Set Translation
Tedeschi et al. Information security and threats in mobile appliances
KR102439778B1 (ko) 애플리케이션의 보안성 향상을 위한 애플리케이션 변환 장치 및 방법
Ketonen Examining performance benefits of real-world WebAssembly applications: a quantitative multiple-case study
JP2018005915A (ja) アプリケーションパッケージを提供する方法およびシステム、アプリケーションを実行する方法およびシステム
Macedo On the performance of WebAssembly
Haoliang et al. The Design and Implementation on the Android Application Protection System
Curran et al. Common Problems Faced When Developing Applications for Mobile Devices

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170117

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180117

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180130

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180423

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20180914

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190108

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20190116

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190227

R150 Certificate of patent or registration of utility model

Ref document number: 6490598

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