JP2002514333A - ソフトウェアセキュリティを増強するための混乱化技術 - Google Patents

ソフトウェアセキュリティを増強するための混乱化技術

Info

Publication number
JP2002514333A
JP2002514333A JP50866099A JP50866099A JP2002514333A JP 2002514333 A JP2002514333 A JP 2002514333A JP 50866099 A JP50866099 A JP 50866099A JP 50866099 A JP50866099 A JP 50866099A JP 2002514333 A JP2002514333 A JP 2002514333A
Authority
JP
Japan
Prior art keywords
code
application
transformation
confusion
program
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
JP50866099A
Other languages
English (en)
Other versions
JP4739465B2 (ja
JP2002514333A5 (ja
Inventor
スベン コールベルウ,クリスチャン
デビット トムボーソン,クラーク
ウェイ コック ロウ,ダグラス
Original Assignee
インタートラスト テクノロジーズ コーポレイション
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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=19926287&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=JP2002514333(A) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by インタートラスト テクノロジーズ コーポレイション filed Critical インタートラスト テクノロジーズ コーポレイション
Publication of JP2002514333A publication Critical patent/JP2002514333A/ja
Publication of JP2002514333A5 publication Critical patent/JP2002514333A5/ja
Application granted granted Critical
Publication of JP4739465B2 publication Critical patent/JP4739465B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

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

Abstract

(57)【要約】 本発明は、ソフトウェアのセキュリティを増強するための混乱化技術を提供する。1つの実施形態においては、ソフトウェアセキュリティを増強するための混乱化技術向けの方法には、混乱化するべきコードのサブセット(例えば1つのアプリケーションのコンパイルされたソースコード)を選択する段階及びコードの選択されたサブセットを混乱化する段階が内含される。混乱化には、コードの選択されたサブセットに対し混乱化変換を適用することが含まれる。変換されたコードは、未変換コードに対する弱い等価性をもつものでありうる。適用される変換は、望まれるセキュリティレベル(例えばリバースエンジニアリングに対する耐性)に基づいて選択されうる。適用される変換には、エイリアシング及び同時実行技術を用いて構築されうる、不明瞭なコンストラクトを用いて新規作成することでありうる制御変換が含まれる可能性がある。従って、望ましい混乱化レベルに基づいて(例えば望ましい効力、弾力性及びコストに基づいて)増強されたソフトウェアセキュリティを得るためにコードを混乱化することが可能である。

Description

【発明の詳細な説明】 ソフトウェアセキュリティを増強するための混乱化技術 発明の分野 本発明は、ソフトウェアの解釈、復号又はリバースエンジニアリングを防止又 は少なくとも妨害するための方法及び装置に関する。より特定的に言うと、排他 的ではないものの、本発明は、ソフトウェアから識別可能な構造又は情報を、逆 コンパイル又はリバースエンジニアリングプロセスがさらに困難になるような形 で挿入し、除去し又は再配置することによって、ソフトウエアの構造的かつ論理 的複雑性を増大させるための方法及び装置に関する。 発明の背景 ソフトウェアは、その性質上第3者により分析されコピーされ易い。これまで にもソフトウェアセキュリティを増強させるために多大な努力が払われてきてお り、これらの成功はさまざまなものであった。このようなセキュリティの問題は 、ソフトウェアの無許可コピーを防止する必要性及びリバースエンジニアリング を介して決定できるようなプログラミング技術を隠したいという願望に関するも のである。 例えば著作権の様な確立された法的方法は、立法上の保護措置を提供する。し かしながら、このような制度下で作り出された法的権利を主張することは、費用 及び時間が共にかかる作業でありうる。さらに、著作権の下でソフトウエアに対 し付与される保護は、プログラミング技術をカバーしていない。かかる技術(す なわち、ソフトウェアの形態に反する機能)は、法律上保護するのが困難である 。リバースエンジニアは、問題のソフトウェアの機能の詳細な知識に基づき、最 初から関連するソフトウェアを書直すことによって権利侵害から免れることがで きる。かかる知識は、データ構造、抽象化及びコードの組織を分析することから 導き出すことができる。 ソフトウエア特許は、より広範な保護を提供してくれる。しかしながら、ソフ トウェアの法的保護を技術的保護と結合させることは明らかに有利である。 所有権主張可能なソフトウェアの保護に対する従来のアプローチは、暗号化に 基づいたハードウェア上の解決法を使用するか又は、ソースコード構造の単純な 再配置に基づくもののいずれかであった。ハードウェアに基づく技術は、それが 一般に費用のかかるものであり、特定のプラットフォーム又はハードウェアアド オンに結びつけられるものであるという点で、理想的ではない。ソフトウェアに よる解決法は、標準的に、JavaTM用のCrema混乱化器といったトリビアルコード 混乱化器を内含する。一部の混乱化器は、アプリケーションの語い構造を目標と し、通常ソースコードフォーマッティング及びコメントを除去し、変数を再命名 する。しかしながら、このような混乱化技術は、悪意あるリバースエンジニアリ ングに対する充分な保護を提供しない。すなわち、リバースエンジニアリングは 、ソフトウェアが分散される形とは無関係の問題である。さらに、ソフトウェア が、オリジナルソースコード内の情報の多く又は全てを保持するハードウェア依 存性フォーマットで分散されている場合、問題はさらに悪化する。かかるフォー マットの例としては、JavaTMバイトコード及びアーキテクチュアニュートラル分 散フォーマット(ANDF)がある。 ソフトウェア開発には、プログラマが多大な時間、努力そして技能を投入して いる可能性がある。商業的には、所有権主張可能な技 術を競合者がコピーするのを防止できることは、きわめて重要である。 発明の開示 本発明は、リバースエンジニアリングに対するソフトウェアの抵抗力を高める ため(又は一般大衆に対し有用な選択肢を提供するため)のコンピュータにより 実施される方法といったような、ソフトウェアセキュリティ用の混乱化技術のた めの方法及び装置を提供する。一実施形態においては、コードを混乱化するため にコンピュータにより実施される方法には、1個またはそれ以上のコードに対す る混乱化変換の供給の完了についてテストする段階、混乱化すべきコードのサブ セットを選択する段階、適用すべき混乱化変換を選択する段階、変換を適用する 段階そして完了テスト段階へと復帰する段階が内含される。 1つの変形実施形態においては、本発明は、コンピュータ上で実行され、記憶 され、又はそれにより操作されるソフトウェアが、予め定められ制御された程度 のリバースエンジニアリング耐性を示すような形でコンピュータを制御する方法 において、ソフトウェアの選択された部分に選択された混乱化変換を適用する段 階であって、必要とされる程度のリバースエンジニアリング耐性、ソフトウェア のオペレーションにおける有効性及び変換されたソフトウェアのサイズを提供す るように選択された混乱化を用いて一定のレベルの混乱化を達成する段階;及び 混乱化変換を反映するべくソフトウェアを更新する段階を内含する方法に関する 。 好ましい実施形態においては、本発明は、ソフトウェアのセキュリティを増強 するためのコンピュータにより実施される方法において、処理すべきアプリケー ションのためソースソフトウェアに対応 する1個またはそれ以上のソースコード入力ファイルを識別する段階;必要とさ れる混乱化レベル(例えば効力)を選択する段階;最大実行時間又は空間ペナル ティ(例えばコスト)を選択する段階;任意にはソースコードにより直接又は間 接的に読取られた任意のライブラリ又は補足的ファイルと共に入力ファイルを読 取りかつ構文解析する段階;処理すべきアプリケーションによって使用されるデ ータタイプ、データ構造、及び制御構造を識別する情報を提供し、この情報を記 憶するべく適切なテーブルを構築する段階、前処理段階に応えてアプリケーショ ンについての情報を前処理する段階、ソースコードオブジェクトに対して混乱化 コード変換を選択し適用する段階;必要とされる効力が達成されるか又は最大コ ストを上回ってしまうまで混乱化コード変換段階を反復する段階、及び変換済み ソフトウェアを出力する段階を含んで成る方法を提供する。 好ましくは、アプリケーションに関する情報は、さまざまな静的分析技術及び 動的分析技術を用いて得られる。静的分析技術としては、手順間データフロー分 析及びデータ従属性分析が含まれる。動的分析技術としては、プロファイリング が含まれ、任意には、ユーザを介して情報を得ることができる。プロファイリン グは、特定のソースコードオブジェクトに対し適用することが可能な混乱化レベ ルを決定するのに使用することができる。変換は、複数の不明瞭コンストラクト (構文)を使用して作成された制御変換を含むことができる。この不明瞭コンス トラクトは、性能の見地から見て実行するのに廉価で混乱化器が簡単に構築でき しかも混乱解除器がそれを破断するのには高価である、何れかの数学的オブジェ クトである。好ましくは、不明瞭コンストラクトは、別名化及び同時実行技術を 用いて構築されうる。ソースアプリケーションに関する情報は同様に、そのアプ リケーションが含有するプログラム用イディオム及び 言語コンストラクトの性質を決定するプラグマティック(実用)分析を用いて得 ることができる。 混乱化変換の効力は、ソフトウェア複雑性メトリックを用いて評価可能である 。混乱化コード変換は、あらゆる言語コンストラクトに応用できる。例えば、モ ジュール、クラス又はサブルーチンを分割又は併合することができ;新しい制御 及びデータ構造を作成することもでき;又、オリジナル制御及びデータ構造を修 正することもできる。好ましくは、変換されたアプリケーションに対し付加され る新しいコンストラクトは、前処理の間に収集したプラグマティック情報に基づ いて、ソースアプリケーション内のものにできるかぎり類似したものとなるよう に選択される。このメソッドは、混乱化変換がそれについて適用された情報及び ソースソフトウェアに対する変換済みアプリケーションの混乱化されたコードに 関する情報を含む補助ファイルを生成することができる。 好ましくは、混乱化変換は、Pが未変換ソフトウェアであり、P’が変換済み ソフトウェアである場合、PとP’が同じ可観測性挙動を有するような形で、ソ フトウェアの可観測性挙動を保つように選択される。より特定的に言うと、Pが 終結できないか又はエラー条件を伴って終結した場合、P’は終結してもしなく てもよく、そうでなければP’は終結してPと同じ出力を生成する。可観測性挙 動としては、ユーザが経験する効果が含まれるが、P及びP’は、ユーザにとっ て観測不能な異なる詳細な挙動を伴って走行することができる。例えば、異なる ものでありうるP及びP’の詳細な挙動としては、ファイル作成、メモリ使用及 びネットワーク通信が含まれる。 一実施形態においては、本発明は同様に、スライシング、部分評価、データフ ロー分析又は統計分析を用いることにより、混乱化済 みアプリケーションから混乱化を除去するために採用される混乱解除用ツールを 提供する。 図面の簡単な説明 以下に、単なる一例として、図面を参照して本発明を説明する。 図1は、本発明の教示に従ったデータ処理システムを示す。 図2は、混乱化変換のカテゴリを含むソフトウェア保護の分類を例示する。 図3a及び3bは、(a)サーバー側実行及び(b)部分的サーバ側実行によ りソフトウエアセキュリティを提供するための技術を示す。 図4a及び4bは、(a)暗号化及び(b)署名されたネーティブコードを用 いることによりソフトウエアセキュリティを提供するための技術を示す。 図5は、混乱化を通してソフトウエアセキュリティを提供するための技術を示 す。 図6は、JavaTMアプリケーションと共に使用するのに適した混乱化ツールの一 例のアーキテクチャを例示する。 図7は、既知のソフトウエア複雑性メトリックセレクションを作表したテーブ ルである。 図8a及び8bは、混乱化変換の弾力性を例示している。 図9は、異なるタイプの不明瞭述語を示す。 図10a及び10bは、(a)トリビアルな不明瞭コンストラクト及び(b) 弱い不明瞭コンストラクトの例を提供している。 図11は、計算変換(分岐挿入変換)の一例を示す。 図12a〜12dは、ループ条件挿入変換を例示している。 図13は、可約フローグラフを非可約フローグラフに変換する変 換を例示する。 図14は、データ従属性を全く含まない場合に、コード区分を並列化できるこ とを示している。 図15は、データ従属性を全く含まないコード区分を、適切な同期化基本命令 を挿入することによって並行スレッドへと分割できることを示している。 図16は、いかにして手順P及びQがその呼出しサイトでインラインにされ、 次にコードから除去されるかを示す。 図17は、インライン処理メソッド呼出しを例示している。 図18は、同じクラス内で宣言された2つのメソッドをインタリーブするため の技術を示す。 図19は、オリジナルコードに対して異なる混乱化変換セットを適用すること により1つのメソッドの複数の異なるバージョンを作成するための技術を示す。 図20a〜20cは、(a)ループブロック化、(b)ループアンローリング 及び(c)ループ分裂を含むロール変換の例を提供している。 図21は、可変的分割例を示す。 図22は、ストリング「AAA」,「BAAAA」及び「CCB」を混乱化す るように構築された1つの関数を提供している。 図23は、2つの32ビット変数x及びyを1つの64ビット変数zへと併合 する例を示す。 図24は、アレイ再構成のためのデータ変換の例を示す。 図25は、継承階層の修正を例示する。 図26は、オブジェクト及び別名から構築された不明瞭述語を例示する。 図27は、スレッドを用いた不明瞭コンストラクトの一例を提供 している。 図28a〜図28dは、(a)が、混乱化中の3つの文S1-3を含むオリジナ ルプログラムを示し、(b)が「恒常な」不明瞭述語を識別する混乱解除器を示 し、(c)が文の中の共通コードを決定する混乱解除器を示し、(d)が、いく つかの最終的単純化を適用しプログラムをそのオリジナル形態に戻す混乱解除器 を示している、混乱化対混乱解除の関係を例示する図である。 図29は、JavaTM混乱解除ツールのアーキテクチャを示す。 図30は、評価に使用される統計分析例を示す。 図31a及び31bは、さまざまな混乱化変換の概要のテーブルを提供する。 図32は、さまざまな不明瞭コンストラクトの概要を提供する。 発明の詳細な説明 以下の記述は、出願人が現在開発中であるJavaTM混乱化ツールに関連して提供 されるものである。ただし、当業者であれば、当該技術がその他のプログラミン グ言語にも適用可能であることは明白であり、本発明はJavaTMアプリケーション に制限されるものとみなされるべきではない。本発明のその他のプログラミング 言語に関連しての実施は、当業者の視野内に入るものとみなされる。以下の実施 例は、明確さを期して、特定的に、JavaTM混乱化ツールを目標としている。 以下の記述においては、次のような名称が用いられることになる。すなわち、 Pは混乱化されるべき入力アプリケーションである;P’は変換済みアプリケー ションである;Tは、それがPをP’へと変換するような形での変換である。P (T)P’は、P及びP’が同じ可観測性挙動を有する場合の混乱化変換である 。可観測性挙 動は一般に、ユーザが経験する挙動として定義される。かくして、P’は、ユー ザがそれを体験しないかぎりにおいて、Pがもたないファイルを作成するといっ たような予期せぬ効果を有する可能性がある。PとP’は必ずしも同等の効率を もつ必要はない。 ハードウェア例 図1は、本発明の教示に従ったデータ処理システムを例示する。図1は、3つ の主要な要素を含むコンピュータ100を示す。コンピュータ100には、この コンピュータのその他の部分へ及びこの部分から適切に構造化された形態で情報 を通信するのに使用される入出力(I/O)回路120が内含されている。コン ピュータ100には、I/O回路120及びメモリ140(例えば揮発性及び不 揮発性メモリ)と通信状態にある制御処理ユニット(CPU)130が内含され ている。これらの要素は、大部分の汎用コンピュータに標準的に見られるもので あり、実際、コンピュータ100は、広範なカテゴリのデータ処理デバイスを代 表するものとなるよう意図されている。ラスター表示モニター160がI/O回 路120と通信状態で示され、CPU130が生成する画素を表示するように命 じられている。任意の周知のさまざまな陰極線管(CRT)又はその他のタイプ の表示装置を、表示装置160として使用することができる。従来のキーボード 150も、I/0120と通信状態で示されている。当業者であれば、コンピュ ータ100が、より大きいシステムの一部でありうることが理解される。例えば 、コンピュータ100は、1つのネットワーク(例えばローカルエリアネットワ ーク(LAN)に接続されたもの)と通信状態にあってもよい。 特に、コンピュータ100は、本発明の教示に従ってソフトウエアセキュリテ ィを増強するための混乱化回路を内含することができ 、或いは又、当業者であればわかるように、本発明をコンピュータ100により 実行されるソフトウェアの形で実施することも可能である(例えはこのソフトウ ェアをメモリ140内に格納してCPU130上で実行することができる)。例 えば、メモリ140内に格納された未混乱化プログラムP(例えばアプリケーシ ョン)を、本発明の1実施形態に従ってメモリ140内に記憶された混乱化済み プログラムP’を提供するべくCPU130上で実行する混乱化器により、混乱 化させることが可能である。 詳細な記述の概要 図6は、JavaTM混乱化器のアーキテクチャを示す。本発明の方法に従うと、Ja vaTMアプリケーションクラスファイルは、任意のライブラリファイルと共にバス されるc.継承ツリーがシンボルテーブルと共に構築され、全てのシンボルについ てのタイプ情報及び全てのメソッドについての制御フローグラフを提供する。ユ ーザは、任意には、JavaTMプロファイリングツールによって生成されるように、 プロファイリングデータファイルを提供することができる。この情報は、アプリ ケーションのうちの頻繁に実行される部分が非常に高価な変換によって混乱化さ れていないことを保証するべく混乱化器を案内するのに使用できる。手順間デー タフロー分析及びデータ従属性分析といったような標準コンパイラ技術を用いて アプリケーションについての情報が収集される。その中には、ユーザにより提供 されるものもあれば、専門的技術によって提供されるものもある。この情報は、 適切なコード変換を選択し適用するために使用される。 適切な変換が選択される。大部分の適切な変換を選択する上で使用される支配 的な基準は、選択された変換がコードの残りの部分と 自然に混ざり合うという必要条件を内含している。これは、高い適切性値をもつ 変換を奨励することによって対処できる。もう1つの必要条件は、低い実行時間 ペナルティで高レベルの混乱化を生み出す変換を奨励すべきであるというもので ある。後者の点は、効力及び弾力性を最大にしコストを最小限にする変換を選択 することによって達成される。 混乱化の優先性が、ソースコードオブジェクトに割当てられる。これは、ソー スコードオブジェクトの内容を混乱化することがいかに重要であるかを反映する ことになる。例えば、特定のソースコードオブジェクトが非常に感応性の高い所 有権主張できる材料を含む場合、混乱化優先性が高くなる。各メソッドについて 、実行時間ランクが決定され、これは、そのメソッドを実行するのに他のどれよ りも多くの時間が費された場合1に等しい。 このとき、アプリケーションは、適切な内部データ構造、適切な変換への各ソ ースコードオブジェクトからのマッピング、混乱化優先性及び実行時間ランクを 打ち立てることによって、混乱化される。混乱化変換は、必要とされる混乱化が 達成されるか又は最大実行時間ペナルティを上回ってしまうまで適用される。変 換済みアプリケーションは、この時点で書き込まれる。 混乱化ツールの出力は、機能的にオリジナルと等価である新しいアプリケーシ ョンである。このツールは、変換がそれについて適用された情報及び混乱化され たコードがいかにオリジナルアプリケーションと関連するかの情報が注釈として 付いたJavaTMソースファイルをも生成することができる。 ここで、ひきつづきJavaTM混乱化器に関連して、いくつかの混乱化変換例につ いて記述する。 混乱化変換は、その質に従って評価し分類することができる。変 換の質は、その効力、弾力性及びコストに従って表現できる。変換の効力は、P ’がPとの関係においていかにあいまいであるかに関係する。このようなメトリ ックは全て、必然的に人間の認識能力によって左右されることから、比較的不確 かなものとなる。当該目的のためには、その変換の有用性の一尺度として変換の 効力を考慮するだけで充分である。変換の弾力性は、変換が自動混乱解除器から の攻撃に対しいかにうまく持ちこたえるかを測定する。これは、プログラマの努 力と混乱解除器の努力という2つの因子の組合せである。弾力性は、トリビアル からワンウェイまでの目盛上で測定できる。ワンウェイ変換は、それを逆転させ ることができないという点で極端なものである。第3の構成要素は、変換実行コ ストである。これは、変換済みアプリケーションP’を使用した結果としてこう むった実行時間又は空間ペナルティである。変換評価のさらなる詳細については 、以下の好ましい実施形態の詳細な説明の部分で論述される。混乱化変換の主要 な分類は、図2Cに示され、詳細は図2e〜2gに与えられている。 混乱化変換の例は、以下の通りである:混乱化変換は、制御混乱化、データ混 乱化、レイアウト混乱化及び予防混乱化にカテゴリー分類されうる。これらのい くつかの例について以下で論述する。 制御混乱化には、集合変換、オーダリング変換及び計算変換が含まれる。 計算変換には、不適切な非機能的文の後ろに実の制御フローを隠すこと,対応 する高レベル言語コンストラクトが全く存在しないオブジェクトコードレベルで コードシーケンスを導入すること;及び実の制御フローの抽象化を除去するか又 はスプリアスなものを導入することが含まれる。 第1の分類(制御フロー)を考慮すると、サイクロマティック及 びネスティング複雑性メトリックは、一片のコードの感知された複雑性とそれが 含む述語の数の間には強い相関関係があること示唆している。不明瞭述語は、プ ログラム内に新しい述語を導入する変換の構築を可能にする。 図11aを参照すると、不明瞭述語PTが、S=S1…Snである基本ブロック S内に挿入されている。こうしてSは半分に分割される。PT述語は、つねに「 真」まで評価することになるため、不適切なコードである。図11bでは、Sは 再び2つの半分に分割され、これらの半分は2つの異なる混乱化済みバージョン Sa及びSbへと変換される。従ってリバースエンジニアにとって、SaとSbが同 じ機能を果たすことは明白ではなくなる。図11cは、図11bと類似している が、Sb内にバグが導入されている。PT述語はつねに、コードSaの正しいバー ジョンを選択する。 もう1つのタイプの混乱化変換は、データ変換である。データ変換の一例は、 コードの複雑性を増大させるためにアレイを逆構造解釈することである。1つの アレイは、複数のサブアレイに分割でき、2つ以上のアレイは単一のアレイに併 合でき、或いは又アレイのディメンションを増大(平坦化)又は減少(フォール ディング)させることもできる。図24は、一定数のアレイ変換例を示している 。文(1−2)では、アレイAが2つのサブアレイA1及びA2内に分割されて いる。A1は、偶数の指標をもつ要素を含み、A2は奇数の指標をもつ要素を含 む。文(3−4)は、2つの整数アレイB及びCが、1つのアレイBCを生み出 すべくいかにインタリーブされうるかを例示している。B及びCからの要素は、 変換済みアレイ全体にわたり均等に拡散される。文(6−7)は、アレイDのア レイD1へのフォールディングを例示している。かかる変換は、従来欠如してい たデータ構造を導入するか又は既存のデータ構造を除 去する。こうして、例えば、2次元アレイを宣言する上でプログラマは通常、選 ばれた構造が対応するデータ上にマッピングする状態で、1つの目的のためにそ れを行なうことから、プログラムのあいまいさが大幅に増大する可能性がある。 そのアレイが1−d構造にフォールドされたならば、リバースエンジニアは、貴 重なプラグマティック情報を奪われることになるだろう。 もう1つの混乱化変換例は、予防変換である。制御又はデータ変換とは対照的 に、予防変換の主たる最終目的は、人間の読み手にとってプログラムをあいまい にすることではなく、既知の自動的混乱解除技術をよりむずかしくするか又は現 行の混乱解除器又はデコンパイラ内で既知の問題を開発利用することにある。こ のような変換は、それぞれ固有の及び目標の変換として知られている。固有予防 変換の一例は、for-loopをrun backwardに再オーダすることである。このような 再オーダリングは、ループが、ループ支持型データ従属性を全くもたない場合に 可能である。混乱解除は同じ分析を行ないループを順方向実行に再オーダするこ とができる。しかしながら、逆転されたループに、偽りのデータ従属性が付加さ れた場合、ループの識別及びその再オーダリングは防止されることになる。 混乱化変換のさらなる特定的例について、以下の好ましい実施形態の詳細な説 明の部分で論述する。 好ましい実施形態の詳細な説明 オリジナルソースコード内に存在する情報の大部分又は全てを保持する形態で ソフトウェアを分散させることが増々一般的になってきている。1つの重要な例 が、Javaバイトコードである。かかるコードはデコンバイルが容易であるため、 悪意あるリバースエンジニアリングの攻撃の危険性を増大させる。 従って、本発明の1実施形態に従って、ソフトウエアセキュリティの技術的保 護のための複数の技術が提供されている。好ましい実施形態の詳細な説明におい て我々は、自動コード混乱化が、リバースエンジニアリングを防止するための現 在最も実現性ある方法であるということを立証して行くつもりである。次に我々 は、プログラムを、理解及びリバースエンジニアリングすることがさらに困難な 等価物へと変換する混乱化ツールであるコード混乱化器の設計について記述する 。 混乱化器は、数多くの場合においてコンバイラ最適化プログラムが使用するも のに類似しているコード変換の適用に基づいている。数多くのかかる変換につい て記述し、それらを分類し、その効力(例えばどの程度まで人間の読み手が当惑 させられるか)、弾力性(例えば自動的混乱解除の攻撃にどれほど耐えられるか )及びコスト(例えば、そのアプリケーションに対し、どれほどの性能オーバヘ ッドが付加されるか)に関しそれらを評価する。 最後に、さまざまな混乱解除技術(例えばプログラムスプライシング)及びそ れらに対し混乱化器が利用できると考えられる対策について記述する。 1.序論 充分な時間、努力及び決意が与えられるのであれば、有能なプログラマはつね にどんなアプリケーションにでもリバースエンジニアリングすることができるだ ろう。アプリケーションに対する物理的アクセスを獲得したリバースエンジニア は、(逆アセンブラ又はデコンバイラを用いて)それをデコンバイルし、次にそ のデータ構造及び制御フローを分析することができる。これは手動でもでき、又 プログラムスライサといったようなリバースエンジニアリングツー ルを用いて行なうこともできる。 リバースエンジニアリングは新しい問題ではない。しかしながら、大部分のプ ログラムが大型でモノリシックでかつストリップの状態で出荷されるネーティブ コードであったことから、(決して不可能ではないものの)リバースエンジニア リングは難しく、近年になるまで、ソフトウェアデベロッパはリバースエンジニ アリングにさほど注意を払ってこなかった、と言う問題がある。 しかしながらこの状況は、デコンパイル及びリバースエンジニアリングをする のが容易な形態でソフトウェアを配布することが増々一般的になるにつれて、変 化している。重要な例としては、Javaバイトコード及びアーキテクチャニュート ラル分散フォーマット(ANDF)がある。Javaアプリケーションは特に、ソフ トウエアデベロッパにとっての問題を提起している。これらは、オリジナルJava ソース情報を事実上全て保持するハードウェア独立の仮想計算機コードである、 Javaクラスファイルとして、インタネット上で配布される。従って、これらのク ラスファイルはデコンパイルが容易である。しかも、計算の多くが標準ライブラ リ内で行なわれることから、Javaプログラムは往々にしてサイズが小さく、従っ て比較的リバースエンジニアリングしやすい。 Javaデベロッパの主たる関心事は、アプリケーション全ての徹底的な再エンジ ニアリングではない。このような行動は、明らかに著作権法〔29〕に違反し訴 訟で争うことができることから、比較的価値のないことである。むしろ、デベロ ッパが最も恐れているのは、競合相手が、そのアプリケーションから所有権主張 可能なアルゴリズム及びデータ構造を抽出してそれを自社のプログラム内に取込 むことができるようになる、という予想である。これは競合相手に商業的な有効 性(開発時間及びコストを削減することによる)を与 えるばかりでなく、検出及び法的追求が困難なことでもある。この最後の点は、 法律に関する無限の予算をもつ強力な企業〔22〕に対して、長期間にわたる法 律上の戦闘を行なう経済力をもたないであろう小規模デベロッパに、特にあては まることである。 ソフトウェアの法的保護又はセキュリティを提供するためのさまざまな形態の 保護の概要が図2に提供されている。図2は、(a)悪意あるリバースエンジニ アリングに対する保護の種類、(b)混乱化変換の質、(c)混乱化変換により 目標とされている情報、(d)レイアウト混乱、(e)データ混乱、(f)制御 混乱、及び(g)予防混乱の分類を提供している。 ソフトウエアデベロッパが利用可能である知的財産の技術的保護のさまざまな 形態について以下で議論する。この議論はJavaクラスファイルとしてインタネッ ト上で配布されるJavaプログラムに限られるものであるが、結果の大部分は、当 業者には明らかであるように、その他の言語及びアーキテクチャニュートラルフ ォーマットにもあてはまるものである。移動コードの保護に対する唯一の合理的 アプローチは、コード混乱化であることを立証していく。さらに我々は、いくつ かの混乱化変換を提示し、これらを有効性及び効率に応じて分類し、いかにして それらを自動的混乱化ツール内で使用することができるようにするかを示す。 好ましい実施形態の詳細な説明の残りの部分は、以下のように構成される。第 2節で、ソフトウェアの盗難に対するさまざまな形態の技術的保護の概要を示し 、コード混乱化が現在最も経済的な予防を提供していることを立証する。第3節 では、現在構築中であるJavaのためのコード混乱化器であるKavaの設計の簡単な 概要を示す。第4節及び5節は、異なるタイプの混乱化変換を分類し評価するの に使用される基準について記述している。第6節、7節、8節及び 9節は、混乱化変換のカタログを提示している。第10節で、より詳細な混乱化 アルゴリズムを示している。第11節では、結果のまとめ及びコード混乱化の将 来の方向についての議論で締めくくっている。 2.知的財産の保護 以下の筋書きを考える。アリスは、インタネット上で彼女のアプリケーション をユーザが恐らくは有料で利用できるようにすることを望んでいる、小規模なソ フトウエアデベロッパである。ボブは、自分がアリスのアプリケーションのキー アルゴリズム及びデータ構造にアクセスできた場合に、アリスに対して商業的な 優位性を得ることができると考えているライバルのデベロッパである。 これは、2人の敵対者、すなわち自らのコードを攻撃から保護しようとするソ フトウエアデベロッパ(アリス)及び、アプリケーションを分析しそれを容易に 読取り理解できる形態に変換することを仕事とするリバースエンジニア(ボブ) 、の間の2プレイヤーゲームと考えることができる。ここで、ボブがアプリケー ションをアリスのオリジナルソースに幾分か近いものに変換することは不要であ る、という点に留意されたい。必要なのは、リバースエンジニアリングされたコ ードがボブ及び彼のプログラマにとって理解可能なものである、ということだけ である。同様に、アリスはボブから自らのアプリケーション全体を保護する必要 すらない可能性がある、ということにも留意されたい。これは恐らく、大部分が 、競合相手にとって実際関心の的でない「バタ付きパンコード」から成る。 アリスは、上述の図2aに示されているような法的又は技術的保護のいずれか を用いて、ボブの攻撃から自らのコードを保護することができる。著作権法はソ フトウエア工作物を確かに網羅している ものの、アリスのような小さい会社がより大きくより力のある競合相手に法律を 遵守させることは、経済的な現実から困難なことである。より魅力的な解決法は 、アリスが、リバースエンジニアリングを技術的に極めてむずかしいものとし、 リバースエンジニアリングを不可能とし又は少なくとも経済的に実現するのがほ とんど不可能となるようにすることによって、自らのコードを保護することにあ る。技術的保護におけるいくつかの初期の試みがGoslerによって記載されている 。(James R.Gos1er,Software protection:Myth or reality? In CRYPTO'85… Advances in Cryptology,pages 140-157,1985年8月)。 最も安全なアプローチは、アリスが自らのアプリケーションを全く販売せず、 むしろそのサービスを売ることである。換言すると、ユーザはアプリケーション 自体にアクセスできることは決してなく、むしろ毎回少額の電子通貨を支払って 図3aに示されているように、遠隔でプログラムを走らせるためにアリスのサイ トに接続する。アリスにとっての利点は、ボブがそのアプリケーションに対する 物理的アクセスを獲得することは決してなく、従ってそれをリバースエンジニア リングできないということにある。そのマイナス面は当然のことながら、ネット ワーク帯域幅及び待ち時間に関する限界のため、アプリケーションが、ユーザの サイト上で局所的に実行された場合よりもはるかに悪い性能を示す可能性がある ということにある。部分的解決法は、アプリケーションを2つの部分、すなわち 図3bに示されているようにユーザのサイト上で局所的に走らせる公開部分及び 遠隔で走らせる(アリスが保護したいアルゴリズムを含む)私用部分に分割する ことである。 もう1つのアプローチは、自らのコードを例えば図4aに示されているように 、ユーザに送る前にアリスがそのコードを暗号化する ことであろう。残念なことにこれは、解読/実行プロセス全体がハードウェア内 で行なわれる場合にのみ機能する。このようなシステムは、Herzberg(Amir Her zberg and Shlomit S.Pinter.Public protection of software.ACM Transacti ons on Computer Systems,5(4):371-393,1987年11月)及びWilhelm(Uwe G.W 11he1m.Cryptographically protected objects.http://lsewww.epfl.ch/-wi lhelm/CryPO.html.1997)に記述されている。コードが仮想計算機インタプ リタによりソフトウェア内で実行される場合(Java bytecodesが最も頻繁にそう であるように)、ボブが解読済みコードを傍受しデコンパイルすることはつねに 可能となる。 JavaTMプログラミング言語は、主としてそのアーキテクチャニュートラルバイ トコードのため人気を博した。これは明らかに移動コードを容易にするものの、 ネーティブコードに比べ1ケタ分性能を低下させる。予想できた通りに、このこ とは、Javaバイトコードを実行中にネーティブコードに翻訳するジャストインタ イムコンパイラの開発を導いた。アリスは、全ての一般的なアーキテクチャにつ いて自らのアプリケーションのネーティブコードバージョンを作成するべくこの ような翻訳プログラムを使用することができた。アプリケーションをダウンロー ドするとき、ユーザのサイトは、それが走っているアーキテクチャ/オペレーテ ィングシステムの組合せを識別しなくてはならず、例えば図4bに示されている ように、対応するバージョンが伝送されることになるだろう。ネーティブコード にアクセスできるだけでは、ボブのタスクは、不可能ではないものの、さらにむ ずかしくなる。ネーティブコードを伝送する上での複雑性はさらに増す。問題は 、実行前にバイトコード確認を受けるJavaバイトコードとは異なり、ネーティブ コードはユーザの機械上で完全に安全に走行しえないということである。アリス が共同体の信 頼されたメンバーである場合、ユーザは、アプリケーションがユーザの側で何も 有害なことはしないという彼女の保証を受諾することができる。誰れもアプリケ ーションを汚染しようとしていないことを確かめるためには、アリスは、コード が自らの書込んだオリジナルのコードであることをユーザに立証するべく、伝送 中のコードにデジタル署名しなければならないだろう。 我々が考慮する最後のアプローチは、例えば図5に示されているようなコード 混乱化である。基本的な考え方は、アリスが、アプリケーションをオリジナルと 機能的には同一であるもののボブにとってはるかに理解し難いものであるアプリ ケーションに変換するプログラムである混乱化器を通して、自らのアプリケーシ ョンを走行させるというものである。我々は、混乱化が、それに値する注目を今 後受けるはずであるソフトウエア取引秘密の保護のための実現可能な技術である と信じている。 サーバ側実行とは異なり、コード混乱化は、悪意あるリバースエンジニアリン グ努力から1つのアプリケーションを完全に保護することは決してできない。充 分な時間と決意を与えられたボブは、その重要なアルゴリズム及びデータ構造を 検索するためアリスのアプリケーションを吟味することが常に可能である。この 努力を助けるべく、ボブは、混乱化変換を取り消すことを試みる自動混乱化解除 プログラムを通して、混乱化済みコードを走行させようとするかもしれない。 従って、混乱化器がアプリケーションに付加するリバースエンジニアリングか らのセキュリティレベルは、例えば、(a)混乱化器によって利用される変換の 精巧化、(b)利用可能な混乱化解除アルゴリズムのパワー及び(c)混乱解除器が 利用できる資源(時間及び空間)の量によって左右される。理想的には、暗号化 (大きい素数 を発見することが容易)及び解読(大きい数をファクター化するのが困難)のコ ストの劇的な差が存在する現在の公開かぎ暗号方式における状況を模倣したいと 考える。実際そこには、以下で議論するようにポリノミナルタイム(多項式的時 間)において応用できるものの、混乱化解除するのにイクスポネンシャルタイム (指数的時間)を必要とする混乱化変換が存在することになるだろう。 3.Java混乱化器の設計 図6は、Java混乱化器であるKavaのアーキテクチャを示す。ツールに対する主 要入力は、Javaクラスファイルセット及びユーザが要求する混乱化レベルである ,。ユーザは任意には、Javaプロファイリングツールによって生成されるとおり 、プロファイリングデータのファイルを提供することができる。この情報は、ア プリケーションのうち頻繁に実行される部分が非常に高価な変換によって混乱化 されないことを確認するべく混乱化器を案内するのに使用可能である。ツールに 対する入力は、Javaクラスファイルの1セットとして与えられるJavaアプリケー ションである。ユーザは同様に、必要とされる混乱化レベル(例えば効力)及び 混乱化器がアプリケーションに付加することを許されている最大実行時間/空間 ペナルティ(コスト)を選択する。Kavaは、直接又は間接的に参照指示されたあ らゆるライブラリファイルと共にクラスファイルを読みとりパージングする。完 全に継承ツリーが、全てのシンボルについてのタイプ情報を示すシンボルテーブ ル及び全てのメソッドについての制御フローグラフと共に構築される。 Kavaは、以下で記述する大きなコード変換プールを含んでいる。しかしながら 、これらが適用可能となる前に、前処理用バスが、1つの実施形態に従って、ア プリケーションについてのさまざまなタ イプの情報を収集する。一部の種類の情報は、手順間データフロー分析及びデー タ従属性分析といった標準コンパイラ技術を用いて集めることができ、又ユーザ によって提供されうるものも、又専門化された技術を用いて集められるものもあ る。例えば、プラグマティック分析は、どんな種類の言語コンストラクト及びプ ログラミングイディオムがそれを含んでいるかをみるためアプリケーションを分 析する。 前処理用パスの間に集められた情報は、適切なコード変換を選択し適用するた めに用いられる。アプリケーション内のあらゆるタイプの言語コンストラクトが 、混乱化の対象でありうる。例えば、クラスを分割又は併合することができ、メ ソッドを変更又は作成することができ、又新しい制御及びデータ構造を作成する こと及びオリジナルのものを修正することが可能である。アプリケーションに付 加される新しいコンストラクトは、前処理パス中に集められたプラグマティック 情報に基づいて、ソースアプリケーション内のものにできるかぎり類似したもの となるように選択することができる。 変換プロセスは、必要とされる効力が達成されたか又は最大コストを上回って しまうまで反復される。ツールの出力は、機能的にオリジナルのものと等価であ る、Javaクラスファイルセットとして通常与えられる新しいアプリケーションで ある。ツールは同様に、変換がそれについて適用された情報、及び混乱化済みコ ードがオリジナルコードといかに関係しているかの情報が注釈として付けられた Javaソースファイルを生成することもできるだろう。注釈のついたソースは、デ バッキングのために有用となる。 4.混乱化変換の分類 この好ましい実施形態の詳細な説明の残りの部分で、さまざまな 混乱化変換について記述し、それを分類し評価する。まず混乱化変換の概念を形 成化することから始める。 定義1(混乱化変換) P-T->P’を法的混乱化変換とし、ここにおいて、以下の条件が保たれなく てはならない。 − Pが終結できないか又はエラー条件で終結した場合、P’は終結して もしなくてもよい。 − そうでない場合、P’は終結し、同じ出力をPとして生成しなければ ならない。 可観測性挙動は、あいまいに「ユーザが経,験する通りの挙動」として定義さ れる。これはすなわち、ユーザがその副作用を経験しないかぎり、P’は、Pが もたない副作用(例えばファイルの作成又はインタネット上でのメッセージ送付 )を持ちうる、ということを意味する。我々はP及びP’が同じように効率のよ いものであることを要求していないという点に留意されたい。実際、我々の変換 のうちの多くのものの結果として、P’はPよりも緩慢になったり、Pよりも多 くのメモリを使用することになる。 混乱化技術の異なるクラス間での主な分割ラインが図2cに示されている。ま ず第1に、それが目標とする情報の種類に従って混乱化変換を分類する。いくつ かの単純な変換は、ソースコードフォーマティングといったアプリケーションの 語い構造(レイアウト)及び変数の名前を目標とする。1つの実施形態において は、興味の対象であるより精巧な変換は、アプリケーションによって用いられる データ構造又はその制御フローのいずれかを目標とする。 第2に、それが目標とされた情報について実行するオベレーションの種類に応 じて変換を分類する。図2d〜2gを見ればわかるように、対照又はデータの集 合を操作する複数の変換が存在する。か かる変換は標準的にプログラマによって作成された抽象化を分解するか又は、関 係のないデータ又は制御を合わせて束にすることによって新しい偽りの抽象を構 築する。 同様にして、いくつかの変換は、データ又は制御のオーダリングに影響を及ぼ す。数多くの場合において、2つの項目が宣言されるか又は2つの計算が行なわ れる順番は、プログラムの可観測性挙動に対しいかなる効果ももたない。しかし ながら、プログラムを書込んだプログラマならびにリバースエンジニアにとって 、選択された順序で埋め込まれたはるかに有用な情報が存在しうる。空間的又は 時間的に2つの項目又は事象が近ければ近いほど、それらがいずれかの形で関係 をもつ確率は高くなる。オーダリング変換は、宣言又は計算の順序をランダム化 することによりこれを調査しようとする。 5.混乱化変換の評価 いずれかの混乱化変換の設計を試みる前に、かかる変換の質を評価することが できなくてはならない。この節では、複数の基準すなわち、それらがどれほどの あいまいさをプログラムに付加するか(例えば効力)、混乱化解除器にとってそ れらがいかに破壊し難いものであるか(例えば弾力性)そして、混乱化済みアプ リケーションに対しそれらがどれほどの計算オーバヘッド(例えば、コスト)を 付加するかという基準に従って変換を分類することを試みる。 5.1 効力の尺度 まず最初に、プログラムP’にとって、プログラムPよりもさらにあいまい( 又は複雑又は読取り不能)であるということが何を意味するかを定義づけする。 このような全てのメトリックは、定義上、それが人間の認識能力に(一部)基づ かなくてはならないことか ら比較的不確かなものでありうる。 幸いなことに、ソフトウエアエンジニアリングのソフトウエア複雑性メトリッ ク分岐における多くの研究を利用することができる。この分野においては、メト リックは、読取り可能で、信頼性が高く維持できるソフトウエアの構築を助ける ことを意図して設計される。メトリックは往々にしてソースコードのさまざまな テクチュア特性を計数しこれらの計数値を複雑性の尺度へと組合わせることに基 づいている。これまでに提案されてきた公式のいくつかは、実際のプログラムの 実験的研究から誘導されてきたが、その他のものは純粋に投機的なものであった 。 メトリックの文献中に見られる詳細な複雑性の公式は、「プログラムP及びP ’が、P’がPに比べより多くの特性qを含んでいるという点を除いて同一であ る場合、P’はPよりもさらに複雑である」といったような一般的文を誘導する のに使用することができる。このような文が与えられた場合、我々は、これがそ のあいまいさを増大する可能性が高いことを知りながら、プログラムに対しより 多くのq−特性を付加する変換を構築することを試みることができる。 図7は、E(X)がソフトウエア構成要素Xの複雑性であり、Fが関数又は方 法であり、Cがクラスであり、Pがプログラムである、より評判の良い複雑性尺 度のいくつかを作表したテーブルである。ソフトウエア構築プロジェクトにおい て使用された場合、標準的な最終目的はこれらの尺度を最小にすることである。 これとは逆に、プログラムを混乱化する場合、我々は一般的に、尺度を最大にし たいと考える。 複雑性メトリックスにより我々は効力という概念を形式化することができ、こ れは以下で変換の有用性の尺度として使用されること になる。非公式には、1つの変換は、それがアリスのオリジナルコードの意図を 隠すことによってボブを混乱させる優れた働きをする場合に効力がある。換言す ると、変換の効力は、オリジナルコードに比べ(人間にとって)混乱化済みコー ドがどれほど理解し難いかを測定する。これは、以下の定義において形式化され る: 定義2(変換効力)Tを挙動保存変換とし、P-T->P’がソースプログラム を目標プログラムP’に変換するようにする。E(P)を、図7のメトリックの 1つにより定義される通りのPの複雑性とする。 Tpot(P)すなわちプログラムPに対するTの効力は、TがPの複雑性を変 更する程度の尺度である。これは、 Tpot(P)def=E(P’)/E(P)−1 として定義される。Tは、Tpot(P)>0である場合、効力ある混乱化変換で ある。 この議論においては、3点目盛(低、中、高)上で効力が測定される。 テーブル1中の観察事項は、我々が変換Tのいくつかの望ましい特性をリスト アップすることを可能にする。Tが効力ある混乱化変換であるためには、それが 以下のことを行なうことが必要である。 − プログラムサイズ(u1)全体を増大させ、新しいクラス及び方法 (ua 7)を導入する。 − 新しい述語(u2)を導入し条件付き及びルーピングコンストラク トのネスティングレベル(u3)を増大させる。 − メソッド引き数の数(u5)及びクラス間インスタンス変数従属性 (ud 7)を増大させる。 − 継承ツリーの高さ(ub.c 7)を増大させる。 − 長範囲変数従属性(u4)を増大させる。 5.2 弾力性の尺度 一見して、Tpot(P)を増大させることがトリビアルであると思われる。例 えばu2メトリックを増大させるために、我々がなすべきことはPに対しいくつ かの任意のif文を付加することだけである: 残念なことに、このような変換は、単純な自動技術によって容易に取り消され うることから、事実上役に立たない。従って、自動混乱解除器の攻撃下でどれほ ど変換が耐えられるかを測定する弾力性の概念を導入することが必要である。例 えば、変換Tの弾力性は、次の2つの尺度の組合せとして見ることができる:す なわち プログラマの努力:Tの効力を有効に低減させることができる自動混乱化解除 器を構築するのに必要とされる時間の量:及び 混乱解除器の努力:かかる自動混乱解除がTの効力を有効に低減させるのに必 要とされる時間及び空間。 弾力性と効力を区別することが重要である。変換は、それが人間の読み手を混 乱させようとする場合には効力があるが、自動混乱化解除器を混乱させる場合に は弾力性がある。 弾力性は、図8aに示されているように、トリビアルからワンウエイまでの目 盛上で測定される。ワンウェイ変換は、それらが決して取り消され得ないという 意味で特殊である。これは標準的に、これらの変換が人間のプログラマにとって は有用であったがプログラ ムを正しく実行するためには必要でないプログラムからの情報を除去するからで ある。例としては、フォーマティングを除去し、変数名をスクランブルする変換 が含まれる。 その他の変換は、標準的には、その可観測性挙動を変更しないが、人間の読み 手に対する「情報負荷」を増大させるような役に立たない情報をプログラムに付 加する。これらの変換は、変動する困難度で取り消しが可能である。 図8bは、混乱化解除器の努力がポリノミアルタイム又はイクスボネンシャル タイムのいずれかとして分類されることを示す。プログラマの努力、つまり変換 Tの混乱化解除を自動化するのに必要とされる作業は、Tの範囲の関数として測 定される。これは、プログラム全体に影響を及ぼしうるものに対してよりも手順 のうちの小さな部分のみに影響を及ぼす混乱化変換に対する対策を構築する方が 容易であるという直観力に基づいている。 変換の範囲は、コード最適化理論から借りた用語を用いて定義される:すなわ ち、Tは、それが制御フローグラフ(CFG)の単一基本ブロックに影響を及ぼ す場合、局所変換であり、CFG全体に影響を及ぼす場合大域変換であり、手順 間の情報フローに影響を及ぼす場合手順間変換であり、それが独立して実行する 制御スレッド間の相互作用に影響を及ぼす場合プロセス間変換である。 定義3(変換弾力性)Tを挙動保存変換とし、P=T=>P’がソースプログ ラムPを目標プログラムP’に変換するようにする。Tres(P)は、プログラ ムPに対するTの弾力性である。Tres(P)は、PがP’から再構築され得な いようにPから情報が除去される場合、ワンウェイである。そうでなければ、 Tres def=弾力性(TDEobfuscator effort,Tprogrammer effort)であり 、ここで弾力性は、図8b中でマトリクス内に定義 された関数である。 5.3 実行コストの尺度 図2bでは、効力と弾力性が、1つの変換を記述する3つの構成要素のうちの 2つであることがわかる。第3の構成要素すなわち変換のコストは、変換が混乱 化済みアプリケーションに対して招来する実行時間又は空間ペナルティである。 我々は、コストを4点目盛(無料、安価、高価、法外)上で分類し、このうちの 各評点について以下で定義する。 定義5(変換コスト)Tを挙動保存変化とし、Tcost(P)∈{法外、高価、 安価、無料}となるものとし、P’の実行がPよりも0(1)個多い資源を必要 とする場合Tcost(P)=無料;P’の実行がPよりも0(n)個多い資源を必 要とする場合、Tcost(P)=安価;P>1でP’の実行がPよりも0(np) 個多い資源を必要とする場合、Tcost(P)=高価;又そうでなければ、Tcost (P)=法外(すなわちP’の実行がPよりも指数的に大きい資源を必要とする )とする。 交換に付随する実際のコストが、その適用環境により左右されることに留意す べきである。例えば、プログラムの最上レベルに挿入された単純な割当て文a= 5は、恒常なオーバヘッドしかこうむらない。内部ループ内部に挿入された同じ 文は、実質的にさらに高いコストを有することになる。他の指摘のないかぎり、 我々につねに、それがソースプログラムの最も外側のネスティングレベルで適用 されたかのように変換のコストを提供する。 5.4 質の尺度 ここで、混乱化変換の質の正式の定義を示すことができる: 定義6(変換の質) 変換Tの質Tqual(P)は、Tの効力、弾力性及びコストの組合 せとして定義される:Tqual(P)=(Tpot(P),Tres(P),Tcost(P ))。 5.5 レイアウト変換 新しい変換について調査する前に、例えばCremaといった現行のJava混乱化器 に典型的であるトリビアルレイアウト変換について簡単に見ていく。(Hans Pete r Van Vliet.Crema……Java混乱化器。http.//web.inter.nl.net/users/H.P.va n.V1iet/crema,html,1996年1月)。第1の変換は、Javaクラスファイル内 で時として利用可能なソースコードフォーマティング情報を除去する。これは、 オリジナルフォーマッティングがひとたび過ぎ去るとそれを回復できないことか ら、ワンウェイ変換である;フォーマッティングにおいてきわめてわずかな意味 論的内容しか存在せず、その情報が除去された時点で大きな混乱は全く導かれな いことから、これは低効力の変換である,最後に、これは、アプリケーションの 空間及び時間的複雑性に影響が及ぼされないことから、無料の変換である。 識別子名のスクランブリングも同様にワンウェイでかつ無料の変換である。し かしながら、それは、識別子がプラグマティック情報を多く含んでいることから 、フォーマッティング除去よりもはるかに高い効力をもつ。 6.制御変換 本節及び以下の数節では、混乱化変換のカタログを紹介する。そのいくつかは 、コンパイラ最適化及びソフトウエアリエンジニアリングといった他の分野で使 用された周知の変換から誘導されたものであり、他のものは本発明の1実施形態 に従った混乱化のみを目的として開発されたものである。 本節では、ソースアプリケーションの制御フローをあいまいにしようとする変 換について論述する。図2fに示されているように、我々はこれらの変換を、制 御の流れの集合、オーダリング又は計算に影響を与えるものとして分類する。制 御集合変換は、論理的に相互帰属計算を分割するか又は共に属さない計算を併合 する。制御オーダリング変換は、計算が実施される順序をランダム化する。計算 変換は新しい(冗長又はデッド)コードを挿入するか又はソースアプリケーショ ンに対しアルゴリズム変更を行なうことができる。 制御フローを変える変換については、一定量の計算オーバヘッドが不可避であ ろう。アリスにとってはこれは、彼女が非常に効率の良いプログラムときわめて 混乱化されたプログラムの間での選択をせまられる可能性があることを意味して いる。混乱化器がこのトレードオフにおいて、安価な変換と高価な変換の間での 選択が行なえるようにすることによって彼女を補助することができる。 6.1 不明瞭な述語 制御変更変換を設計するときの実際の課題は、それらを安価にすることだけで なく、混乱化解除器からの攻撃に対し耐性あるものにすることにもある。これを 達成するため、数多くの変換は、不明瞭変数及び不明瞭述語の存在に依存してい る。非公式には、変数Vは、それが先験的に混乱化器に知られているものの混乱 化解除器が演繹しがたいいくつかの特性qを有する場合、不明瞭である。同様に して、混乱化器には周知であるもののその成果を演繹することが混乱化解除器に とってきわめて困難である場合、その述語P(論理式)は不明瞭である。 混乱化解除器にとって解明がむずかしい不明瞭な変数及び述語を作成できるこ とが、混乱化ツールの作成者にとって主要な挑戦であり、きわめて弾力性のある 制御変換への鍵である。我々は、不明瞭 な変数又は述語の弾力性(即ち混乱化解除攻撃に対するその耐性)を変換弾力性 と同じ目盛上で測定する(すなわちトリビアル、弱、強、フル、ワンウェイ)。 同様にして我々は、不明瞭なコンストラクトの付加コストを変換コストと同じ目 盛(すなわち、無料、安価、高価、法外)上で測定する。 定義7(不明瞭コンストラクト)1つの変数Vは、それが、混乱化時点で知ら れている点pにおける特性qを有する場合、プログラム中の点pにおいて不明瞭 である。pが文脈から明白である場合、我々はこれをVq p又はVqと書く。述語 Pは、その成果が混乱化時点で知られている場合、pにおいて不明瞭である。我 々は、Pがpにおいてつねに、偽(真)に評価する場合PF p(PT p)と書き、P が時に真、時に偽に評価する場合、P? pと書く。ここでも又、pは、文脈から明 白である場合省略されることになる。図9は、異なるタイプの不明瞭述語を示す 。実線は、時としてとられ得る経路を表わし、破線は、決してとられることのな い経路を示す。 以下では、単純な不明瞭コンストラクトのいくつかの例を示す。これらは、混 乱化器にとって構築しやすく、混乱化解除器にとって同様に解読しやすいもので ある。第8節は、はるかに高い弾力性をもつ不明瞭コンストラクトの例を提供す る。 6.1.1 トリビアル及び弱不明瞭コンストラクト 不明瞭コンストラクトは、混乱化解除器が統計的局所分析によりそれを解読で きる(すなわちその値を演繹できる)場合、トリビアルである。分析は、それが 制御フローグラフの単一基本ブロックに制限される場合、局所的である。図10 a及び10bは、(a)トリビアル不明瞭コンストラクト及び(b)弱不明瞭コンス トラクトの例を提供している。 我々は同様に、1つの不明瞭変数が呼出しから単純な良く理解さ れている意味論を用いてライブラリ関数へと計算される場合、この変数をトリビ アルであるとみなす。標準的なライブラリクラスセットを支持するのに全ての実 施を必要とする言語であるJavaTMのような言語については、かかる不明瞭変数は 容易に構築される。単純な例は、ランダム(a,b)が、a・・・bの範囲内の 1つの整数を戻すライブラリ関数であるintVS〔1,5〕−ランダム(1,5) である。残念なことに、かかる不明瞭変数は同様に混乱化解除が容易である。必 要なのは、全ての単純なライブラリ関数の意味論を混乱化解除器設計者が作表し 次に混乱化されたコード内で関数呼出しについてパターン照合することだけであ る。 不明瞭コンストラクトは、静的大域分析により混乱化解除器がそれを解読でき る場合、弱である。分析は、それが単一の制御フローグラフに制限されている場 合に大域的である。 6.2 計算変換 計算変換は、次の3つのカテゴリに入る:すなわち、実際の計算に寄与しない 無関係の文の後ろに実の制御フローを隠す;対応する高レベルの言語コンストラ クトが全く存在しないオブジェクトコードレベルでコードシーケンスを導入する 、又は実の制御フロー抽象を除去するか又はスプリアスなものを導入する。 6.2.1 デッドコード又は無関係コードの挿入 U2及びU3メトリックは、一片のコードの感知された複雑性とそれが含む述語 の数の間に強い相関関係が存在することを示唆している。不明瞭述語を用いると 、プログラム内に新しい述語を導入する変換を考案することができる。 図11中の基本ブロックS=S1……Snを考慮する。図11a中では、不明瞭 言語PTをS内に挿入して、基本的にそれを半分に分割する。PT述語は、それが つねに真に評価することになるため 、無関係コードである。図11bでは、ここでも又Sを2つの半分に分割し、次 に、この第2の半分の2つの異なる混乱化済みバージョンSa及びSbを作成する べく進む。Sa及びSbは、Sの第2の半分に対して異なるOBS変換セットを適 用することによって作成されることになる。従って、リバースエンジニアにとっ て、Sa及びSbが実際に同じ機能を果たすことは直接明白ではない。我々は、ラ ンタイムでSa及びSbの間での選択を行なうために述語P7を使用する。 図11cは、図11bと類似しているが、今度は、Sb内にバグを導入する。 PT述語はつねに、コードの正しいバージョンSaを選択する。 6.2.2 ループ条件の拡張 図12は、終結条件をより複雑なものにすることによっていかにしてループを 混乱化できるかを示している。基本的な考え方は、ループが実行する予定の回数 に影響を及ぼさないPT又はPF述語でループ条件を拡張するということである。 例えば図12dで我々が付加した述語は、X2(X+1)2=0(mod 4)である ことからつねに真に評価される。 6.2.3 可約から非可約フローグラフへの変換 往々にして、プログラミング言語は、言語自体よりもさらに表現力のあるネー ティブ又は仮想計算機コードにコンパイルされる。これがあてはまる場合、こう して我々は言語分割変換を考案できるようになる。変換が言語分割変換であるの は、それがいずれのソース言語コンストラクトとも直接的対応性を全くもたない 仮想計算機(又はネーティブコード)命令シーケンスを導入する場合である。か かる命令シーケンスと直面した場合、混乱化解除器は、等価(ただし重畳された )ソース言語プログラムを合成することを試みるか又 は全て放棄しなければならなくなる。 例えば、JavaTMバイトコードは、GOTO命令を有するがJavaTM言語は、対応 するGOTO文を全くもたない。このことはすなわち、JavaTMバイトコードが任 意の制御フローを表現でき、一方JavaTM言語は単に構造化された制御フローしか (容易に)表現できないということを意味している。標準的には、JavaTMプログ ラムから生成された制御フローグラフがつねに可約となるものの、JavaTMバイト コードは、非可約フローグラフを表現することができると言うことができる。 非可約フローグラフの表現は、GOTOが無い言語ではきわめて扱いにくくな るため、我々は可約フローグラフを非可約フローグラフに転換する変換を構築す る。これは、構造化されたループを、多重ヘッダーのあるループへと変えること によって行なうことができる。例えば、図13aでは、不明瞭述語PFをWhileル ープに加えて、そのループの中央への飛越しが存在することがわかるようにする 。事実、この分岐は決してとられることがない。 JavaTMデコンパイラが、コードを複製するものか又は外来のブール変数を含む ものへと非可約フローグラフを変えなければならなくなる。代替的には、混乱化 解除器が、混乱化器によって全ての非可約フローグラフが生成されたことを推測 し、単に不明瞭述語を除去することが可能となる。これに対抗するため、時とし て図13bに示された代替的変換を使用することができる。混乱化解除器がPF を盲目的に除去した場合、結果として得られるコードは正しくなくなる。 特に、図13a及び13bは、可約フローグラフを非可約フローグラフに変換 するための変換を例示している。図13aでは、ループ本体S2を2つの部分( Sa 2∇及びSb 2)に分割し、偽りの 飛越しを、Sb 2の始めに挿入する。図13bでは、同じくS1を2つの部分Sa 1 及びSb 1に分割する。Sb 1はループ内に移動させられ、不明瞭述語PTが、Sbが つねにループ本体の前に実行されることを確実にしている。第2の述語QFは、 Sb 1が1度だけ実行されることを確実にしている。 6.2.4 ライブラリ呼出し及びプログラミングイディオムの除去 Javaで書き込まれる大部分のプログラムは、標準ライブラリに対する呼出しに 大きく依存している。ライブラリ関数の意味論は周知であることから、かかる呼 出しは、リバースエンジニアに対して有利な手掛りを提供する可能性がある。Ja vaライブラリクラスに対する参照指示がつねに名前によるものでありこれらの名 前を混乱化することはできないという事実によって問題は悪化する。 数多くの場合、混乱化器は、単純に標準ライブラリのその独自のバージョンを 提供することによって、これに対抗することができるだろう。例えば、(ハッシ ュテーブル実施を使用する)Javaディクショナリクラスへの呼出しは、同一の挙 動を伴うものの例えば赤−黒のツリーとして実施されたクラスに対する呼出しへ と変えられ得る。この変換のコストは、実行時間についてはさほど大きくないが プログラムのサイズについては大きい。 類似の問題が、数多くのアプリケーションで頻繁に発生する共通のプログラミ ングイディオムであるクリシエ(又はパターン)でも発生する。経験豊かなリバ ースエンジニアは、見慣れないプログラムについての自からの理解を飛越し−開 始するためにかかるパターンをサーチするだろう。一例として、JavaTM内のリン クされたリストを考慮する。JavaTMライブラリは、挿入、削除及び列挙といった 共通リストオペレーションを提供する標準クラスを全くもたない。 その代り、大部分のJavaTMプログラマは、それらを次のフィールド上で合わせて リンクすることにより、特別のものとしてオブジェクトリストを構築することに なる。かかるリストを通しての反復は、JavaTMプログラムにおいては非常に共通 したパターンである。自動化されたプログラム認識の分野で発明された技術(本 書に参考とし内含されているLinda Mary Wills,自動化プログラム認識;フィー ジビリティの立証、人工頭脳、45(1−2);113−172,1990参照 を参照のこと)が、共通パターンの識別及びさほど明白でないものとの置換のた めに使用可能である。例えばリンクされたリストの場合には、要素アレイ内にカ ーソルといったさほど共通でないもので標準リストデータ構造を表わすかもしれ ない。 6.2.5 テーブル解釈 最も有効な(かつ高価な)変換の1つは、テーブル解釈である。考え方は、コ ードの1区分(この例ではJavaバイトコード)を異なる仮想計算機コードに転換 するというものである。この新しいコードはこのとき、混乱化済みアプリケーシ ョンと共に内含された仮想計算機インタプリタにより実行される。明らかに、特 定のアプリケーションには、各々異なる言語を受諾し混乱化済みアプリケーショ ンの異なる区分を実行する複数のインタプリタが含まれている可能性がある。 各々の解釈レベルについて通常1桁の減速が存在することから、この変換は、 全体的ランタイムの小さな部分を構成するか又は非常に高レベルの保護を必要と するコードの区分に予約されたものであるべきである。 6.2.6 冗長オペランドの付加 ひとたびいくつかの不明瞭変数を構築したならば、算術式に冗長オペランドを 付加するために代数法則を使用することができる。こ うして、U1メトリックが増大されることになる。明らかにこの技術は、数値的 な制度が問題でない整数式の場合に最もうまく機能する。以下の混乱化済みの文 (1’)では、値が1である不明瞭変数Pが使用される。文(2’)では、値が 2である不明瞭部分式P/Qを構築する。明らかに、文(2’)に達した時につ ねにそれらの商が2となるかぎりにおいて、プログラム実行中に、P及びQに異 なる値をとらせることができる。 (1) X=X+V;=T=> (1’) X−X+V*P-1; (2) Z=L+1; (2’) Z=L+(P=2Q/Q=P/2)/2 6.2.7 コードの並列化 自動並列化は、マルチブロセッサ計算機上でランするアプリケーションの性能 を増大させるのに用いられる重要なコンパイラ最適化である。我々がプログラム を並列化することを望む理由は、当然のことながらさまざまである。我々は、性 能を増大させるためではなく、実際の制御フローをあいまいにするために並行性 を増大することを望んでいる。考えられる2つのオペレーションが利用可能であ る:すなわち、 1.有用なタスクを全く行なわないダミープロセスを作成することができる 。又 2.アプリケーションコードの逐次区分を、並行して実行する多重区分へと 分割することができる。 アプリケーションが単一プロセッサ計算機上でランしている場合、我々はこれ らの変換が多大な実行時間ペナルティを有することを予想することができる。こ れは、これらの変換の弾力性が高いことから、数多くの状況において受諾できる ものである。すなわち、プログラムを通しての考えられる実行経路の数が実行プ ロセス数と共 に指数的に大きくなることから、並列プログラムの静的分析は非常にむずかしい 。並列化は又、高レベルの効力をも生み出す:すなわち、リバースエンジニアは 、逐次プログラムに比べ、並列プログラムがはるかに理解し難いものであること がわかるだろう。 図14に示されているように、1コード区分は、それがデータ従属性を全く含 まない場合、容易に並列化されうる。例えば、S1及びS2が2つのデータ独立型 文である場合、これらは並行してランされ得る。JavaTM言語といったような明示 的な並列コンストラクトを全くもたないプログラミング言語においては、プログ ラムはスレッド(軽量プロセス)ライブラリに対する呼出しを用いて並列化され 得る。 図15で示されているように、データ従属性を含むコード区分は、アウェイア ンドアドバンスといった適切な同期化基本命令を挿入することにより、同時並行 スレッドへと分割され得る(本書に参考として内含されているMichael Wolfe, 並列計算用高性能コンパイラ.Addison-Wesley,1996。ISBNO−805 3−2730−4を参照のこと)。このようなプログラムは基本的に逐次的にラ ンしているが、制御フローは、1つのスレッドから次のスレッドへとシフトして いることになる。 6.3 集合変換 プログラマは、抽象化を導入することによってプログラミングの固有の複雑性 を克服する。1つのプログラムの数多くのレベルで抽象化が存在するが、手順抽 象化は最も重要なものである。このような理由から、混乱化器にとっては、手順 及びメソッド呼出しをあいまいにすることが重要であり得る。以下では、メソッ ド及びメソッド呼出しをあいまいにすることのできるいくつかの方法、すなわち インライン処理、アウトライン処理、インタリーブ及びクローニン グについて考慮する。これら全ての背後にある基本的考えは、同じである:すな わち(1)プログラマが1つの方法に集合した(恐らくはそれが論理的に相互帰 属していたため)コードは分割され、プログラム全体にわたり分散されるべきで あること、及び(2)相互に帰属していないと思われるコードは1つのメソッドの 形に集合させられるべきであることである。 6.3.1 インライン及びアウトライン方法 インライン処理は、当然のことながら、重要なコンパイラ最適化である。これ は、プログラムから手順抽象を除去することから、きわめて有用な混乱化変換で もある。インライン処理は、手順呼出しがひとたび、呼出された手順の本体と置 換され、手順自体が除去された場合、コード内には抽象の痕跡が全く残らないこ とから、きわめて弾力性の高い変換である(これは基本的にワンウェイである) 。図16は、手順P及びQがその呼出しサイトでいかにインライン処理され、次 にコードから除去されるかを示す。 アウトライン処理(一続きの文をサブルーチンへと変えさせること)は、イン ライン処理に対する非常に有用な姉妹変換である。我々は、Qのコードの始まり 及びPのコードの終りを新しい手順Rへと抽出することにより偽りの手順抽象を 作成する。 JavaTM言語といったようなオブジェクト指向言語では、インライン処理は、事 実上、つねに完全にワンウェイの変換であるとはかぎらない。メソッド呼出しm .P()を考えてみよう。呼出される実際の手順は、mのランタイムタイプによっ て左右されることになる。複数のメソッドを特定の呼出しサイトで呼出すことか できる場合、我々は考えられる全てのメソッドをインライン処理し(本書に参考 として内含されているJeffrey Dean,オブジェクト指向言語の全プログラム最適 化。ワシントン大学博士論文、1996を参照の こと)、m)aタイプについて分岐することにより適切なコードを選択する。従 って、メソッドのインライン処理及び除去の後でさえ、混乱化済みコードはなお も、オリジナル抽象の痕跡を幾分か含んでいる可能性がある。例えば、図17は 、メソッド呼出しのインライン処理を例示している。mのタイプを統計的に決定 できるのでないかぎり、m.P( )を結びつけることのできる考えられる全て のメソッドが呼出しサイトでインライン処理されなくてはならない。 6.3.2 インタリーブメソッド インタリーブメソッドの検出は、重要で困難なリバースエンジニアリングタス クである。 図18は、同じクラスで宣言された2つのメソッドをどのようにインタリーブ できるかを示す。考え方は、メソッドの本体及びパラメータリストを併合し余分 のパラメータ(又は大域変数)を付加して個々のメソッドに対する呼出しを弁別 するというものである。理想的には、メソッドは共通のコード及びパラメータの 併合を可能にするべく性質が類似しているべきである。図18の場合がこれであ り、ここではM1及びM2の第1のパラメータは同じタイプをもつ。 6.3.3 クローンメソッド サブルーチンの目的を理解しようとするとき、リバースエンジニアは当然のこ とながらその署名及び本体を検査することになる。しかしながら、ルーチンの挙 動を理解するのに同じように重要なのは、それが呼出しされている異なる環境で ある。我々は、実際にはそうでないのに異なるルーチンが呼出されつつあるよう に見えるようにするべくメソッドの呼出しサイトを混乱化することによって、こ のプロセスをさらに難しくすることができる。 図19は、オリジナルコードに異なる混乱化変換セットを適用することによっ てメソッドの複数の異なるバージョンを作成することができる。我々は、ランタ イムで異なるバージョン間で選択を行なうのにメソッドディスパッチを使用する 。 メソッドクローニングは、図11の述語挿入変換と類似しているが、ここでは 、コードの異なるバーション間で選択を行なうのに不明瞭述語ではなくメソッド ディスパッチを使用しようとしているという点が異なっている。 6.3.4 ループ変換 (特に)数値アプリケーションの性能を改善することを意図して数多くのルー プ変換が設計されてきた。広範な調査についてはBacon〔2〕を参照のこと。こ れらの変換のいくつかは、図7に関して、上述した複雑性メトリックも増大させ ることから、我々にとって有用である。図20aに示されているようなループブ ロック化は、内部ループが、キャッシュ内にフィットするように相互作用空間を 分割することによりループのキャッシュ挙動を改善するために使用される。ルー プアンロールは、図20bに示されている通り、1回又は複数回ループの本体を 複製する。コンパイル時点でループ境界がわかっている場合、そのループを全体 的にアンロールすることができる。図20cに示されているようなループ分裂は 、複合本体を伴うループを同じ反復空間を伴う複数のループへと変える。 3つの変換は全て、ソースアプリケーションの合計コードサイズ及び条件数を 増大させることから、U1及びU2メトリックを増大させる。ループブロック化変 換は同様に、余分のネスティングを導入し、従ってU3メトリックも増大させる 。 分離して適用された場合、これらの変換の弾力性はきわめて低い。混乱化解除 器がアンロールされたループを再度ロールするのに多 大な静的分析は必要でない。しかしながら変換が組合わされた時点で、弾力性は 劇的に上昇する。例えば、図20bの単純なループが与えられた場合、我々はま ず最初にアンロールを適用し、次に分裂、そして最後にブロック化を適用するこ とができる。結果として得たループをそのオリジナル形態に戻すには、混乱化解 除器にとってかなりの量の分析が必要となるだろう。 6.4 オーダリング変換 プログラマは、その局所性を最大限にするように自らのソースコードを組織す る傾向をもつ。考え方は、論理的に関係する2つの項目がソーステキスト内で同 様に物理的に近い場合に、プログラムがさらに読取り、理解しやすくなるという ものである。この種の局所性は、ソースの全てのレベルで機能する:例えば、式 内の項の間、基本ブロック内の文、方法内の基本ブロック、クラス内の方法そし てファイル内のクラスの間に局所性が存在する。全ての種類の空間的局所性がR Eに対し有用な手掛りを提供することができる。従って、可能な場合にはつねに 、我々はソースアプリケーション中の任意の項目の配置をランダム化する。いく つかのタイプの項目(例えばクラス内のメソッド)について、これはトリビアル である。その他のケースでは(例えば基本ブロック内の文)、どの再オーダリン グが技術的に有効であるかを見極めるため、データ従属性分析(本書に参考とし て内含されている(David F.Bacon,Susan L.Graham,及びOliver J.Sharp. 高性能計算のためのコンパイラ変換A CM Computing Surveys,26(4):34 5−420,1994年12月、http://www.acm.org/pubs/toc/Abstracts/03 60−0300/197406.html.及びMichael Wolfe.並列計算のための高 性能コンバイラ。Addison-Wesley,1996.ISBN 0−8053−2730− 4,を参照のこと)が行なわれる。 これらの変換は低い効力を有する(プログラムに多大なあいまいさを付加しな い)が、その弾力性は高く、数多くのケースでワンウェイである。例えば、基本 ブロック内の文の配置がランダム化された時点で、結果として得たコードにはも との順序の痕跡は全く残っていないことになる。 オーダリング変換、第6,3,1節の「インライン−アウトライン」変換に対 する特に有用な姉妹変換である。その変換の効力は、(1)手順P内で複数の手 順呼出しをインライン処理すること、(2)P内の文の順序をランダム化するこ と及び、(3)Pの文の隣接区分をアウトライン処理することによって増強され 得る。このようにして、以前複数の異なる手順の一部であった無関係な文が、偽 りの手順抽象内に合わせて入れられる。 いくつかのケースでは、例えば後向きにランさせることによって、ループを再 オーダリングすることも可能である。このようなループ逆転変換は、高性能コン パイラにおいて共通である。(David F.Bacon,Susan L.Graham,及びOliver J.Sharp.高性能計算のためのコンパイラ変換ACM Computing Surveys,26( 4):345−420,1994年12月、http.//www.acm.org/pubs/toc/Abst racts/0360−0300/197406.html.)。 7.データ変換 本節では、ソースアプリケーションで使用されるデータ構造を混乱化する変換 について説明する。図2eに示しているように、こうした変換は、データの記憶 、符号化、集合、または、オーダリングを行う変換として分類される。 7.1 記憶および符号化変換 多くの場合には、プログラム中の特定のデータ項目を記憶するた めの「自然な」方法がある。例えば、1つの配列の各要素を繰り返すためには、 反復変数として適切なサイズのローカル整変数を割り当てることが選択されるだ ろう。他の変数タイプが使用可能であるが、こうした他の変数タイプは自然さの 点で劣るだろうし、恐らくは効率的にも劣ることだろう。 さらに、変数のタイプに基づいている特定の変数が有することが可能であるビ ットパターンの「自然な」解釈が存在する場合も多い。例えば、一般的に、ビッ トバターン「0000000000001100」を記憶する16ビット整変数 が整数値「12」を表すと仮定される。当然のことながら、これらは単なる取決 めであり、他の解釈が可能である。 混乱化記憶変換は、動的データと静的データとのための不自然な記憶域クラス を選択することを試みる。同様に、符号化変換は、共通データタイプに関して不 自然な符号化を選択しようとする。記憶変換と符号化変換とが組み合わせて使用 される場合が多いが、場合によっては、これらの変換の各々が単独で使用される ことも可能である。 7.1.1 符号化の変更 符号化変換の単純な事例として、c1とc2とが定数である場合に、i0=c1* i+c2で整変数iを置き換える。効率のために、c1を2の累乗として選択する ことが可能である。次の例では、c1=8、c2=3とすると、 当然のことながら、オーバフロー(および、浮動小数点変数の場合には、正確 度)の問題に対処する必要がある。問題の変数の範囲(この範囲は、静的解析法 を使用することによってまたはユーザに質問することによって決定されることが 可能である)のせいでオーバフローが発生しないということ、または、より大き な変数タイプに変更可能であるということを調べることが可能である。 一方では弾力性と効力との間のトレードオフ、他方では弾力性とコストとの間 のトレードオフとがあり得る。上記例のi0=c1+i+c2のような単純な符号 化関数は僅かな追加の実行時間しか付加しないが、一般的なコンパイラ解析法(M ichael Wolfe.High performance Compilers For Parallel Computing.Add1son -Wesley,1996.ISBN O-8053-2730-4、および、David F.Bacon,Susan L.Grah am and Oliver J.Sharp.Compiler transformations for high-performance co mputing.ACM Computing Surveys,26(4):345-420,December 1994.http.//www .acm.org/pubs/toc/Abstracts/0360-0300/197406.html)を使用して混乱解除され ることが可能である。 7.1.2 変数のプロモート 特殊化された記憶域クラスからより汎用のクラスに変数をプロモートする単純 な記憶変換が幾つか存在する。こうした記憶変換の効力と弾力性は一般的に低い が、他の変換と組み合わせて使用される場合には、極めて有効であり得る。例え ば、Javaでは、整変数が整数オブジェクトにプロモートされることが可能である 。同じことが、対応する「パッケージ化された」クラスを全てが有する他のスカ ラ型の場合に当てはまる。JavaTMが不要部分の整理をサポートするので、オブジ ェクトがすでに参照されなくなっている時には、そのオブジェクトが自動的に除 去されるだろう。ここに、その一例があ る。 変数の寿命を変更することも可能である。最も単純なこうした変換は、独立し た手続き呼出しの間で後で共有されるグローバル変数へとローカル変数を変更す る。例えば、手続きPと手続きQの両方がローカル整変数を参照し、かつ、Pと Qとが両方とも同時にアクティブであることが不可能である(プログラムがスレ ッドを含まなければ、これは、静的呼出しグラフ(static call graph)を調べる ことによって求められることが可能である)場合には、変数がグローバル変数に されて、これらの手続きの間で共有されることが可能である。 PとQとによって参照されるグローバルデータ構造の数が増大させられるので 、この変換は、u5メトリックを増大させる。 7.1.3 変数の分割 ブール変数と制限された範囲内の他の変数とが、2つ以上の変数 に分割されることが可能である。k個の変数p1,...,pkに分割された変数 VをV−[p1,...,pk]と記述する。典型的には、この変換の効力がkと ともに増大するだろう。残念なことに、変換コストもkとともに増大し、したが って、kを2または3に制限することが一般的である。 タイプTの変数VがタイプUの2つの変数p、qに分割されることを可能にす るためには、3つの情報断片、すなわち、(1)対応するVの値にpとqの値を マップする関数F(p;q)、(2)対応するp、qの値にVの値をマップする 関数g(V)、(3)pとqとに対する演算の観点からキャストされた新たな演 算(タイプTの値に対する基本演算に対応する)が、与えられることが必要であ る。この節の残りの部分では、Vがブール変数タイプであり、pとqとが小整変 数であると仮定する。 図21aは、分割ブール変数に関して行われることが可能である表現の選択を 示す。この表は、Vがpとqとに分割されている場合に、および、プログラムの 何らかのポイントでp=q=0またはp=q=1である場合に、それが、Vが偽 であることに相当するということを示している。同様に、p=0かつq=1、ま たは、p=1かつq=0が、真に相当する。 この新たな表現で示される場合には、様々な組込みブール演算(例えば、AN D、OR)に関する置換えが考案されなければならない。1つのアプローチは、 各々の演算子に関する実行時ルックアップテーブルを提供することである。「A ND」と「OR」とに関するテーブルが図21cと図21dとに別々に示されて いる。2つのブール変数V1=[p,q]とV2=[r,s]とが与えられてい ると仮定すると、V1&V2が、AND[2p+q,2r+s]として計算される 。 図21eには、3つのブール変数A=[a1,a2]、B=[b1,b2]、 C=[c1,c2]の分割の結果が示されている。本発明者が選択した表現の興 味深い側面は、同じブール式を計算するために使用可能な方法が幾つかあるとい うことである。例えば、図21eの文(3’)と文(4’)は、両方とも偽を変 数に割り当てるが、互いに異って見える。同様に、文(5’)と文(6’)は互 いに全く異っているが、両方ともA&Bを計算する。 この変換の効力と弾力性とコストとの全てが、オリジナルの変数が分割される 変数の個数に応じて増大する。弾力性は、実行時に符号化を選択することによっ てさらに増強される。言い換えれば、図21bから図21dまでの実行時ルック アップテーブルは、コンパイル時には構築されないが(このことが、実行時ルッ クアップテーブルに対して静的解析を行うことを可能にするだろう)、混乱化ア プリケーションに含まれるアルゴリズムによって構築される。当然のことながら 、このことが、図21eでの文(6’)で行われるように、基本演算を計算する ためにインラインコードを使用することを防止する。 7.1.4 静的データの手続きデータへの転換 静的データ、特に文字列は、リバースエンジニアにとって有用な実際的情報を 多く含んでいる。静的ストリングを混乱化するための方法は、静的ストリングを そのストリングを生成するプログラムの形に変換することである。DFAまたは トライ走査(Trie traversal)であることが可能であるプログラムが、他のストリ ングも生成することが可能である。 例えば、ストリング“AAA”、“BAAAA”、“CCB”を混乱化するよ うに構築されている図22の関数Gを考察しよう。Gによって生成される値は、 G(1)=“AAA”、G(2)=“B AAAA”、G(3)=G(5)=“CCB”、および、(実際にはプログラム で使用されない)G(4)=“XCB”である。他の引数値の場合には、Gが終 了しても終了しなくてもよい。 当然のことながら、全ての静的ストリングデータの計算を単一の関数の形に集 合することは、極めて望ましくない。ソースプログラムの「通常の」制御流れの 中に埋め込まれたより小さなコンポーネントの形にG関数が分割されている場合 には、はるかに高度な効力と弾力性とが実現される。 この手法を節6.2.5のテーブル解釈変換と組み合わせることが可能である ということを指摘しておくことが重要である。その混乱化の意図は、Javaバイト コードの1つのセクションを別の仮想計算機のためのコードに変換するというこ とである。この新たなコードが、典型的には、被混乱化プログラム内の静的スト リングデータとして記憶されるだろう。しかし、さらに高いレベルの効力と弾力 性とを得るためには、上記ストリングが、上記のように、そのストリングを生成 するプログラムに転換されることも可能である。 7.2 集合変換 命令型言語および機能言語とは対照的に、オブジェクト指向言語は、制御指向 であるよりもデータ指向である。言い換えれば、オブジェクト指向プログラムで は、制御が、データ構造まわりに編成されるが、他の仕方では編成されない.こ のことは、オブジェクト指向アプリケーションのリバースエンジニアリングの重 要部分は、プログラムのデータ構造の復元を試みることであることを意味する。 逆に、混乱化器がこうしたデータ構造を隠蔽しようとすることが重要である。 オブジェクト指向言語の殆どでは、データの集合を行うための方法は2つだけ であり、すなわち、配列の形でのデータ集合と、オブ ジェクトの形でのデータ集合である。次の3つのセクションでは、こうしたデー タ構造が混乱化されることが可能な方法を検討する。 7.2.1 スカラ変数の併合 V1,...,Vkの組合せ範囲がVMの精度に適合するならば、2つ以上のス カラ変数V1,...,VKが、1つの変数VMの形に併合されることが可能であ る。例えば、2つの32ビット整変数が、1つの64ビット変数に併合されるこ とが可能である。個々の変数に対する演算が、VMに対する演算の形に変換され るだろう。簡単な例として、2つの32ビット整変数X、Yを64ビット変数Z の形へ併合することを考察する。次の併合式 Z(X,Y)=232*Y+X を使用して、図23aの算術恒等式が得られる。図23bには幾つかの簡単な例 が示されている。特に、図23は、2つの32ビット整変数X、Yを1つの64 ビット変数Zへ併合することを示している,。YがZの上側32ビットを占め、 かつ、Xが下側32ビットを占める。XまたはYのどちらかの実際の値域がプロ グラムから演繹されることが可能である場合には、直感的により一層分かりにく い併合が使用されることも可能である。図23aは、XとYによる加算と乗算と のための規則を示している。図23bは、幾つかの簡単な例を示す。この例は、 例えば(2’)と(3’)とを「Z+=47244640261」の形に併合す る事によって、さらに混乱化されることが可能である。 変数併合の弾力性は極めて低い。ある特定の変数が実際には2つの併合変数か ら成るということを推定するためには、混乱解除器は、算術演算セットがその特 定の変数に適用されていることを調べるだけでよい。個々の変数に対する妥当な 演算のいずれにも対応することが不可能であるボーガス(bogus)演算を導 入することに よって、弾力性を増大させることが可能である。図23bの例では、例えば回転 によって、すなわち、If(PF)Z−rotate(Z,5)によって、Zの 2つの半分部分を併合するように見える演算を挿入することが可能である。 この変換の1つの変形は、V1,...,VKを、次のような適切なタイプの1 つの配列に併合することである。 VA= 1...k V1...Vk 1,...,Vkがオブジェクト参照変数である場合には、例えば、VAの要素 タイプが、継承階層においてV1,...,Vkのタイプのいずれよりも高いレベ ルにある全てのクラスであることが可能である。 7.2.2 配列の再構成 配列に対して行われる演算を混乱化するために、幾つかの変換が考案されるこ とが可能である。例えば、1つの配列を幾つかの二次配列に分割するか、2つ以 上の配列を1つの配列に併合するか、1つの配列を折り畳む(fold)(次元 数を増大させる)か、または、1つの配列を平坦化する(flatten)(次 元数を減少させる)ことが可能である。 図24は、配列再構成の幾つかの例を示す。文(1−2)では、配列Aが2つ の二次配列A1、A2の形に分割される。A1が、偶数のインデックスを有する Aの要素を保持し、A2が、奇数のインデックスを有する要素を保持する。 図24の文(3−4)が、どのようにして整数配列B、Cが結果としての配列 BCの形に交互配置されることが可能であるかを示している。配列Bからの要素 と配列Cからの要素とが、その結果得られる配列全体にわたって均一に分散させ られている。 文(6−7)は、1次元配列Dが2次元配列D1の形にどのように折り畳まれ ることが可能であるかを示している。最後に、文(8−9)は逆変換を示してい る。2次元配列Eが1次元配列E1の形に平坦化される。 配列の分割と折畳みとがu6データ複雑性メトリックを増大させる。一方、配 列の併合と平坦化とが、このメトリックを減少させる。このことは、これらの変 換が僅かなまたはネガティブな効力だけしか持たないということを示しているよ うに見えるかも知れないが、実際には、これは誤りを生じさせやすい。問題は、 幾つかのデータ構造変換の重要な側面を把握することには、図7の複雑性メトリ ックが役立たないということである。すなわち、こうした変換が、当初は存在し なかった構造を導入するか、または、オリジナルのプログラムから構造を取り除 くことになる。このことは、プログラムの混乱化を著しく増大させることが可能 である。例えば、2次元配列を宣言するプログラマは、意図的にそうするのであ る。選択された構造が、操作されているデータをとにかく適切にマップする。そ の配列が1次元構造に折り畳まれる場合には、リバースエンジニアは、貴重な実 際的情報を奪われてしまっていることになるだろう。 7.2.3 継承関係の修正 JavaTM言語のような現在のオブジェクト指向言語では、主要なモジュール化お よび抽象化概念はクラスである。クラスは、データ(インスタンス変数)と制御 (方法)とをカプセル化する本質的に抽象的なデータタイプである。クラスはC −(V,M)と記述され、前式のVがCのインスタンス変数のセットであり、M がその方法である。 抽象データタイプの従来の概念とは対照的に、2つのクラスC1、C2が、集合 化(C2がタイプC1のインスタンス変数を有する )と継承(新たな方法とインスタンス変数とを加えることによって、C2がC1を 拡張する)とによって構築されることが可能である。継承はC2=C1UC’2と 記述される。C2は、そのスーパークラスまたは親クラスであるC1を継承すると 表現される。U演算子は、C’2で定義される新たなプロパティと親クラスとを 組み合わせる関数である。Uの正確なセマンティクスは、個々のプログラミング 言語に依存している。Javaのような言語では、一般的に、Uが、インスタンス変 数に適用される場合には合併として解釈され、一方、方法に適用される場合には オーバーライドと解釈される。 メトリックu7にしたがって、クラスC1の複雑性が、継承階層と直接の子孫の 個数とにおけるその深さ(ルートからの距離)に応じて増大する。例えば、この 複雑性を増加させることが可能な方法が2つある。すなわち、図25aに示され ているように、ある1つのクラスを分割(ファクタ)することと、図25bに示 されているように、新たな、にせ(bogus)の、クラスを挿入することとが可能で ある。 クラスファクタリングに関する問題点はその弾力性である。ファクタされたク ラスを混乱解除器が簡単に併合することを阻止するものは全くない。これを防止 するために、一般的には、図25dに示されているように、ファクタリングと挿 入とが組み合わされる。これらのタイプの変換の弾力性を増加させる別の方法は 、導入されたクラス全てに関して新たなオブジェクトが生成されることを確実な ものにすることである。 図25cは、「偽のリファクタリング」と呼ばれる、クラス挿入の変形を示し ている。リファクタリングは、その構造が劣化してしまっているオブジェクト指 向プログラムを再構築するための(時として自動の)手法である(本明細書に参 考として採り入れられてい る、William F.Opdyke and RalphE.Johnson.Creating abstract superclasse s by refactoring.In Stan C.Kwansny and John F.Buck,editors,Proceedin gs of the 21st Annual Conference on Computer Science,page 66-73,New Yo rk,NY,USA,February 1993.ACM Press.ftp://st.cs.uiuc.edu/pub/papers/ refactoring/refactoring-superclasses.psを参照されたい)。リファクトリン グは2ステップのプロセスである。第1に、見掛け上は別個の2つのクラスが事 実上は同様の動作をするということが検出される。その次に、両方のクラスに共 通する特徴が、新たな(おそらくは抽象的な)親クラスの中に移される。偽のリ ファクタリングは同様の操作であるが、共通の動作を持たない2つのクラスC1 、C2に対してだけ行われる。両方のクラスが同じタイプのインスタンス係数を 有する場合には、これらのクラスが新たな親クラスC3の中に移される。C’3の 方法が、C1とC2からの方法のバグだらけ(buggy)なバージョンであり得 る。 7.3 オーダリング変換 セクション6.4では、(可能な場合にではあるが)計算が行われる順序をラ ンダム化することが有用な混乱化であることを示した。同様に、ソースアプリケ ーションにおける宣言の順序をランダム化することが有益である。 特に、本発明においては、クラス内の方法およびインスタンス変数と方法の仮 バラメタ方法との順序をランダム化する。後者の場合には、当然のことながら、 対応する実際の順序が再オーダリングされなければならない。こうした変換の効 力は低く、弾力性は片方向である。 多くの場合には、配列中の要素を再オーダリングすることも可能だろう。簡単 に述べると、本発明では、オリジナルの配列内のi番 目の要素を、再オーダリングされた配列の新たな位置にマップする、不明瞭性( opaque)符号化関数f(i)が提供される。 8.不明瞭値と不明瞭述語 上記のように、不明瞭な述語が、制御流れを混乱化する変換の設計における主 要なビルディングブロックである。事実として、殆どの制御変換の品質が、こう した述語の品質に直接的に依存している。 セクション6.1では、トリビアルで弱い弾力性を有する単純な不明瞭述語の 例を示した。これは、ローカル静的分析またはグローバル静的解析を使用して不 明瞭述語が解読されることが可能である(自動混乱解除器がその値を発見するこ とができる)ということを意味する。当然のことながら、一般的に、攻撃に対す るはるかにより高度の抵抗性が必要とされている。理想的には、それを解読する のには(プログラムのサイズにおいて)最悪指数関数的時間を要するが、それを 構築するには多項式的時間しか要さない不明瞭述語を、構築することが可能であ ることが望ましい。このセクションでは、2つのこうした手法を説明する。第1 の手法はエイリアシングに基づいており、第2の手法は軽量プロセス(ligh tweight poess)に基づいている。 8.1 オブジェクトとエイリアスとを使用する不明瞭構造体 エイリアシングが可能である場合には常に、手続き間静的分析が著しく複雑化 される。実際に、動的割付けとループとIF文を有する言語においては、正確で 流れ依存形のエイリアス解析は決定不可能である。 このセクションでは、低コストでかつ自動混乱解除攻撃に対して弾力性がある 不明瞭述語を構築するために、エイリアス解析の困難さが利用される。 8.2 スレッドを使用する不明瞭構造体 並列プログラムは順次プログラムに比べて静的分析を行うこと困難である。そ の理由は、並列プログラムのインターリービングセマンティクスである。すなわ ち、並列領域PAR S1,S2,...,Sn,ENDPAR内のn個の文が、 n!個の異った方法で実行されることが可能である。これにも係わらず、並列プ ログラムの幾つかの静的解析が、多項式的時間[18]で行われることが可能で あり、一方、他は、n!個のインタリービング全てが考慮されることを必要とす る。 Javaでは、並列領域が、スレッドとして知られている軽量プロセスを使用 して構築される。(本発明者の視点から見て)Javaスレッドは2つの有益な 特性を有する。すなわち、(1)Javaスレッドのスケジューリングポリシー は言語仕様によっては厳密に指定されておらず、したがって、インプリメンテー ションに依存することになり、(2)スレッドの実際のスケジューリングが、ユ ーザインタラクションによって生成される非同期イベントのような非同期イベン トと、ネットワークのトラフィックとに依存することになるという特性を有する 。並列領域の固有インタリービングセマンティクスと組み合わされる時には、こ のことは、スレッドを静的解析することが非常に困難であるということを意味す る。 本発明では、解読には最悪指数関数的時間を必要とする不明瞭述語(図32を 参照されたい)を生成するために、上記の考察結果が利用される。この基本的な 着想は、セクション8.2で使用されている着想と非常に類似している。すなわ ち、グローバルデータ構造Vが生成され、時たま更新されるが、不明瞭問合せが 行われることが可能であるような状態に維持される。相違点は、現在実行中のス レッドによってVが更新されるということである。 当然のことながら、Vは、図26で生成された動的データ構造のような動的デ ータ構造であることが可能である。スレッドが、移動と挿入のための呼出しを非 同期的に実行することによって、そのスレッドの個々のコンポーネント内におい てグローバルポインタg、hをランダムに移動させるだろう。これは、非常に高 い弾力性を得るために、データ競合をインタリービング効果およびエイリアシン グ効果と組み合わせるという利点を有する。 図27では、Vが1対のグローバル整変数X、Yである、よりはるかに単純な 例を使用して、上記の着想を図解している。これは、任意の整数xおよび整数y の場合に「7y2−1」がx2に等しくないという基本数論からの公知の事実に基 づいている。 9.混乱解除と予防変換 本発明者の混乱化変換の多く(特にセクション6.2の制御変換)は、実プロ グラム内にボーガスプログラム(bogus program)を埋め込むと言 い表されることが可能である。言い換えれば、被混乱化アプリケーションは、実 際には、1つに併合された2つのプログラムから成り、すなわち、有用なタスク を行う実プログラムと、無益な情報を計算するボーガスプログラムとが、1つに 併合されている。このボーガスプログラムの唯一の目的は、無関係 なコードの背後に実プログラムを隠蔽することによって、潜在的なリバースエン ジニアを混乱させることである。 上記不明瞭述語は、ボーガス内部プログラムが容易に識別されて除去されるこ とを防止するために、混乱化器が自由に使用できる主要な仕掛けである。例えば 、図28aでは、混乱化器が、実プログラムの3つの文の中に、不明瞭述語によ って保護されたボーガスコード(bogus code)を埋め込む。混乱解除 器のタスクは、被混乱化アプリケーションを調べて、内部ボーガスコードを自動 的に識別して取り除くことである。これを行うために、混乱解除器が、最初に不 明瞭構造体を識別してから、その構造体を評価しなければならない。このプロセ スが図28bから図28dに示されている。 図29は、半自動的混乱解除ツールの構造を示す。このツールは、リバースエ ンジニアリングのコミュニティでは公知である幾つかの手法を採り入れている。 このセクションの残り部分では、こうした手法の幾つかを簡単に検討し、混乱解 除をより困難にするために混乱化器を使用することが可能である様々な対抗策( いわゆる予防変換)を説明する。 9.1 予防変換 図2gに関連して上記で説明した予防変換は、制御変換またはデータ変換とは 趣が全く異っている。制御変換またはデータ変換とは対照的に、予防変換の主要 な目標は、人間の読み手に対してプログラムを覆い隠すことではない。むしろ、 予防変換は、公知の自動混乱解除手法をより困難にするように(本来予防変換) 、または、現在の混乱解除器またはデコンパイラにおける既知の問題を探り出す ように(目標予防変換)設計される。 9.1.1 本来予防変換 本来予防変換は、一般的に、低い効力と高い弾力性とを有する。最も重要なこ とは、本来予防変換が他の変換の弾力性を増強する能力を有するだろうというこ とである。一例として、セクション6.4で示唆されているように、forルー プを逆方向に実行するように再オーダリングし終わっているものと仮定する。ル ープがループ運搬データ従属性を持たないことを調べることが可能だったという 理由だけから、この変換が適用されることが可能だった。当然のことながら、混 乱解除器が同じ解析を行ってループを順方向実行に戻すことを阻止するものは何 もない。これを防止するために、逆ループに対するボーガスデータ従属性を加え ることが可能である。 この本来予防変換がループ再オーダリング変換に加える弾力性は、ボーガス従 属性の複雑性と従属性解析の技術的現状とに依存している[36]。 9.1.2 目標予防変換 目標予防変換の一例として、HoseMochaプログラムを考察する(Ma rk D.LaDue.HoseMocha.http://www.xyny x.demon.nl/java/HoseMocha.java,Janua ry 1997)。このプログラムは、Mochaデコンバイラ(Hans P eter Van Vliet.Mocha−−−The Java deco mpiler.http://web.inter.nl.n et/users/H.P.van.Vliet/mocha.html,Ja nuary 1996)の弱点を調査するために特別に設計されている。Hos eMochaプログラムは、ソースプログラム内の全ての方法の中のあらゆる復 帰文の後に、特別な命令を挿入する。この変換は、アプリケーションの動作に対 して全く影響を及ぼさないが、Mochaをクラッシュさせるには十分である。 9.2 不明瞭構造体の識別と評価 混乱解除の最も重要な部分は、不明瞭構造体の識別と評価である。識別と評価 が別個のアクティビティであることに留意されたい。不明瞭構造体は、ローカル である(単一の基本ブロック内に含まれる)か、または、グローバルである(単 一の手続きに含まれる)か、または、手続き間である(プログラム全体にわたっ て分散している)ことが可能である。例えば、if(x*x==(7F*y*y −1))がローカル不明瞭述語であり、R=X*X;...;S=7*y*y− 1;...;if(R==SF)...がグローバル不明瞭術語である。RとS の計算が互いに異った手続きで行われた時には、構造体は手続き間不明瞭構造体 であるだろう。当然のことながら、ローカル不明瞭述語の識別は、手続き間の不 明瞭述語の識別よりも容易である。 9.3 バターン照合による識別 混乱解除器は、不明瞭述語を識別するために、既知の混乱化器によって使用さ れるストラレジの知識を使用することが可能である。混乱解除器の設計者は、( 混乱化器をデコンパイルすることによって、または、単純に、混乱化器が生成す る被混乱化コードを調査することによって)混乱化器を調査することが可能であ り、一般的に使用される不明瞭述語を識別することが可能なパターン照合規則を 構築することが可能である。この方法は、x*x==(7*y*y −1)またはrandom(1F,5)<0のような単純なローカル述語に対し て最も効果的に働くだろう。 パターン照合の試みを妨害するために、混乱化器は、常套的な不明瞭構造体の 使用を避けなければならない。さらに、実アプリケーションで使用される構造体 に構文上類似している不明瞭構造体を選択することも重要である。 9.4 プログラムスライシングによる識別 プログラマは、一般的に、プログラムの被混乱化バージョンが、リバースエン ジニアにとってオリジナルのプログラムよりも理解が困難であることを発見する だろう。その主たる理由は、被混乱化プログラムでは、(a)生きている「実」 コードに、死んだボーガスコードがちりばめられ、かつ、(b)論理的に関係付 けられたコード断片が分解されてプログラム全体にわたって分散されるというこ とである。プログラムスライシングツールが、こうした混乱化に対抗するために リバールエンジニアによって使用されることが可能である。こうしたツールは、 スライスと呼ばれる管理可能なチャンク(chunck)の形にプログラムを分 解するために、リバースエンジニアを対話式に補助することが可能である。ポイ ントpと変数vとに関するプログラムPのスライスは、pにおいてvの値に寄与 することが可能だったPの文の全てから成る。したがって、プログラムスライサ は、混乱化器がこうした文をプログラム全体に分散させた場合にさえ、不明瞭変 数vを計算するアルゴリズムの文を、被混乱化プログラムから抽出することが可 能だろう。 スライシングを有効性がより劣る識別ツールにするために混乱化器で使用可能 な幾つかのストラテジが存在する。AddパラメタエイリアスAパラメタエイリ アスは、同じ記憶場所を参照する2つの仮バラメタ(または、仮バラメタとグロ ーバル変数)である。厳密 な手続き間スライシングは、プログラム中の潜在的エイリアスの個数に応じて増 大し、一方、この潜在的エイリアスの個数は、仮パラメタの個数に応じて指数関 数的に増大する。したがって、混乱化器が、エイリアシングされたダミーパラメ タをプログラムに追加する場合には、その混乱化器が、(厳密なスライスが要求 される場合には)スライサを著しく減速させるか、または、(高速スライシング が必要とされる場合には)スライサに非厳密なスライスを生じさせるように強制 する。 Unravel(James R.Lyle,Dolorres R.Wal lace,James R.Graham,Kelth B.Gallaghe r,Joseph P.Poole,and David W. Binkle y.Unravel:A CASE tool to assist eval uation of high integrity software.Vo 1ume 1:Requirements and design.Techn ical Report NIS−TIR 5691,U.S.Departm ent of Commerce,August 1995)のような一般に普 及しているスライシングツールのような加算変数従属性(add variab le dependency)は、小さなスライスの計算には適切に機能するが 、より大きいスライスの計算に対しては過大な時間を要する場合がある。例えば 、4000行のCプログラムに対して使用した場合には、Unravelがスラ イス計算を完了するのに30分間を越える時間を必要としたケースがあった。こ うした特徴を強制的に引き出すために、混乱化器が、ボーガス変数従属性を加え ることによってスライスサイズを増大させようとしなければならない。次の例で は、見掛け上ではxの値に寄与するが実際には寄与しない2つの文を 加えることによって、スライス計算のサイズxが増大させられている。 9.5 静的解析 混乱解除器は、述語全ての結果を分析するために、被混乱化プログラムを利用 することが可能である。このようにして被混乱化アプリケーションの実行時の特 徴を調査する任意の混乱解除方法、すなわち、静的解析が呼び出されるだろう。 混乱解除器は、多数のテストランにおいて常に同じ真理値を戻す述語が不明瞭PT (PF)述語であることが判明するかも知れないので、こうした真理値を戻す述 語の全てに対するリバースエンジニアの注意を促す。混乱解除器は、こうした述 語を真(偽)でむやみに置き換えることは不可能であるが、これは、そうするこ とが危険過ぎる可能性があるからである。多くのアプリケーションは、例外的な 状況下でしか発生しない条件を検査する「真の」述語を含むが、混乱解除器にと っては、こうしたアプリケーションは、不明瞭述語と同じに動作するように見え るだろう。例えば、pif(Leap Year)...を考察されたい。 静的解析は、さらに、評価のためにも使用されることが可能である。プログラ ムM内の潜在的な不明瞭述語(例えば、PT)がすでに識別されている時に、そ の値(真)が推定され、上記不明瞭述語がこの推定値ですでに置き換えられてい る被混乱化プログラムのバ ージョンM’が作成される。その次に、同一の入力に対してMとM’とが並行に 実行され、MとM’とが同一の出力を生じさせることを確認するために比較が行 われる。これらの出力が同一である場合には、図30に示されているように、そ の述語が、真のアプリケーションではないボーガスの一部であったと結論付けら れることが可能である。 選択された入力が上記プログラム中の全てのパスを適切にカバーすることが確 保されなければならない。同様に、上記プログラムが、稀にしかとられないパス (if(Leap Year)...)を含む場合には、これは困難だろう。さ らに、多数の正しい入力/出力データを生成することは非常に困難であり、特に アプリケーションの内部構造が未知である時、または、(往々にしてJavaプ ログラムに当てはまるように)複雑なグラフィカルユーザインタフェースを通し て入力が行われる時には、これは非常に困難である。 静的解析による識別を防止するために、混乱化器が、PT述語またはPF述語を 挿入する変換よりも、(図11bに示されているような)P?述語を挿入する変 換を優先するように選択してもよい。 静的解析に対する別の採用可能な対抗策は、幾つかの述語が同時に解読されな けばならないように、不明瞭述語を設計することである。これを行うための方法 の1つは、不明瞭述語に副作用を持たせることである。下記の例では、混乱化器 が、(一種の静的流れ解析によって)、文S1、S2が常に同じ回数だけ実行しな ければならないということを決定する。これらの文が、関数Q1と関数Q2とに対 する呼出しである不明瞭述語を導入することによって混乱化される。関数Q1と 関数Q2はグローバル変数を増減する。 混乱解除器が1つの(両方ではない)述語を真で置き換えようとする場合には 、kがオーバフローするだろう。その結果として、混乱解除されたプログラムが 、エラー状態で終了するだろう。 9.6 データフロー解析による評価 混乱解除は、様々なタイプのコード最適化に類似している。if(False )...を取り除くことは、死んだコード(dead code)削除であり、 if文ブランチ(例えば、図28におけるS1とS0 1)から同一コードを移動す ることは、コードホイスティング(code hoisting)であり、これ らは一般的なコード最適化手法である。 不明瞭構造体が識別され終わると、その構造体の評価を試みることが可能にな る。単純な事例では、到達定義データフロー解析(reaching defi nition data−flow analysis)を使用する定数伝搬で 十分であることが可能である。x=5;...;y=7;...;if(x*x ==(7*y*y=1).... 9.7 定理の証明による評価 データフロー解析が不明瞭述語を解読するのに十分なだけ強力で はない場合には、混乱解除器が定理の証明を使用することを試みることが可能で ある。これが可能であるか不可能であるかは、(確認が困難な)技術的現状の定 理証明プログラムの能力と、証明されることが必要な定理の複雑性とに依存して いる。当然のことながら、帰納によって証明可能な定理(例えば、x2(x+1 )2=0(mod 4))は、十分に現行の定理証明プログラムの到達範囲内で ある。 事柄をさらに困難にするために、証明が困難であることが知られている定理、 または、それに関する既知の証明が存在しない定理を使用することが可能である 。下記の例では、混乱解除器が、S2が生きたコード(live code)で あることを調査するために、ボーガスループ(bogus loop)が常に終 了するということを証明しなければならないだろう。 これは、Collatz問題として知られている。上記ループが常に終了する だろうということが推測される。この推測の既知の根拠は存在しないが、7*1 011までの全ての数に関してそのコードが終了することが知られている。したが って、この混乱化は安全であり(オリジナルの混乱化されたコードが全く同じに 動作する)、混乱解除を行うことは困難である。 9.8 混乱解除および部分評価 混乱解除は、さらに、部分評価にも類似している。部分評価器は、プログラム を、2つの部分、すなわち、部分評価器によって事前計算されることが可能であ る静的部分と、実行時に実行される動的部分とに分割する。動的部分は、混乱化 されていないオリジナルのプログラムに相当するだろう。静的部分は、ボーガス 内部プログラムに相当し、このボーガス内部プログラムは、識別された場合には 、混乱解除時点で評価され除去されることが可能である。 他の静的内部手続き解析手法の全てと同様に、部分評価はエイリアシングの影 響を受けやすい。したがって、スライシングに関連して言及した予防変換と同じ 予防変換が、部分評価にも適用される。 10.混乱化アルゴリズム 次に、セクション3の混乱化器アーキテクチャと、セクション5の混乱化品質 の定義と、セクション6からセクション9の様々な混乱化変換の説明とに基づい て、本発明の実施様態の1つによるさらに詳細なアルゴリズムを説明する。 混乱化ツールの最上位レベルのループは、次の一般構造を有することが可能で ある。 WHILE NOT Done(A)DO S:=SelectCode(A); T:=SelectTransform(S); A:=Apply(T,S); END; SelectCodeは、混乱化されるべきその次のソースコードオブジェク トを戻す。SelectTransformは、この特定のソースコードオブジ ェクトを混乱化するために使用されなけ ればならない変換を戻す。Applyが、変換をソースコードオブジェクトに適 用し、それに応じてアプリケーションを更新する。Doneは、所要レベルの混 乱化に達し終わった時を決定する。これらの関数の複雑性は、混乱化ツールのソ フィスティケーションに依存するだろう。単純な位取りの結果として、Sele ctCodeとSelectTransformとが単純にランダムなソースコ ードオブジェクト/変換を戻し、Doneが、特定の限界をアプリケーションの サイズが越える時にループを終了させることが可能である。通常では、こうした 動作は不十分である。 アルゴリズム1は、さらにはるかに洗練された選択動作および終了動作を含む コード混乱化ツールの記述を与える。実施様態の1つでは、このアルゴリズムが 幾つかのデータ構造を使用し、こうしたデータ構造がアルゴリズム5、6、7に よって構築される。 各ソースコードオブジェクトSに関するPSである時に、PS(S)は、プログ ラマがSで使用した言語構造体セットである。PS(S)が、Sに関する適切な 混乱化変換を発見するために使用される。 各ソースコードオブジェクトSに関するAである時に、A(S)={Ti−− >V1;...;Tn=−>Vn}は、変換Tiから値Viへのマッピングであり、 TiをSに適用することがどのように適切であるかを記述する。この着想は、S にとって「不自然である」新たなコードを特定の変換が導入するので、こうした 変換が特定のソースコードオブジェクトSに関して不適切である可能性があると いうことであるこの新たなコードは、Sの中では場違いに見え、したがって、リ バースエンジニアには発見しやすいだろう。適切性値(appropriate ness value)Viが大きければ大きいほど、変換Tiによって導入され るコードがよ り良好に適合するだろう。 各ソースコードオブジェクトSに関するIである時に、I(S)はSの混乱化 プライオリティである。I(S)が、Sの内容を混乱化することがどれだけ重要 であるかを記述する。Sが重要なトレードシークレットを含む場合には、I(S )がHIGHであるだろうし、一方、それが主として「ブレッドアンドバター」 コードを含む場合には、I(S)がLOWだろう。 各ルーチンMに関するRである時に、R(M)はMの実行時間ランクである。 他のいずれのルーチンよりも多くの時間がMを実行するために費やされる場合に は、R(M)=1である。 アルゴリズム1に対する一次入力は、アプリケーションAと混乱化変換のセッ ト{T1;T2;...}である。このアルゴリズムは、さらに、各々の変換に関 する情報も要求し、特に、(セクション5での同名の関数と同様であるが、数値 を戻す)3つの品質関数Tres(S)、Tpot(S)、Tcost(S)と、関数Pt を要求する。 ソースコードオブジェクトSに適用される時に、Tres(S)が、変換Tの弾 力性(すなわち、Tが自動混乱解除器からの攻撃にどれだけ適切に耐えるか)の 測度を戻す。 ソースコードオブジェクトSに適用される時に、Tpot(S)が、変換Tの効 力(すなわち、Tによって混乱化された後に、人間がどれほど難しいSを理解す るのか)の測度を戻す。 Tcost(S)が、TによってSに加えられる実行時間および空間ペナルティー の測度を戻す。 Ptが、Tがアプリケーションに加えることになる言語構造体のセットに各々 の変換Tをマップする。 アルゴリズム1のポイント1からポイント3が、混乱化されるべ きアプリケーションをロードし、適切な内部データ構造を構築する。ポイント4 が、PS(S)、A(S)、I(S)、R(M)を構築する。所要の混乱化レベ ルに達し終わるまで、または、最大実行時間ペナルティが越えられるまで、ポイ ント5が混乱化変換を適用する。最後に、ポイント6が新たなアプリケーション A’を書き換える。 アルゴリズム1(コード混乱化) 入力: a)ソースコードまたはオブジェクトコードファイルで構成されているアプリ ケーションA C1;C2;...。 b)言語によって定義される標準ライブラリL1;L2;...。 c)混乱化変換セット{T1;T2;...}。 d)変換Tの各々に関して、Tがアプリケーションに加えることになる言語構 造体セットを与えるマッピングPt。 e)ソースコードオブジェクトSに対する変換Tの品質を表現する3つの関数 Tres(S)、Tpot(S)、Tcost(S)。 f)Aに対する入力データセットI={I1;I2;...}。 g)2つの数値AcceptCost>0およびReqObf>0。Acce ptCostが、ユーザが受け入れることになる最大の追加実行時間/空間ペナ ルティの測度である。ReqObfが、ユーザによって要求される混乱化の量の 測度である。 出力:ソースコードまたはオブジェクトコードファイルで構成されている被混乱 化アプリケーションA’。 1.混乱化されるべきアプリケーションC1;C2;...をロードする。混乱化 器は、 (a)ソースコードファイルをロードすることが可能であり、こ の場合には混乱化器が、字句解析と構文解析と意味解析とを行う完全なコンパイ ラフロントエンドを含まなければならないだろうし(純粋に構文変換だけに自己 限定する非力な混乱化器は、意味解析なしに処理することが可能である)、また は、 (b)オブジェクトコードファイルをロードすることが可能であり、オブジェ クトコードがソースコード内に情報の大半または全てを保持する場合には(Ja vaクラスファイルの場合のように)この方法が好ましい。 2.アプリケーションによって直接的または間接的に参照されるライブラリコー ドファイルL1;L2;...をロードする。 3.アプリケーションの内部表現を構築する。内部表現の選択は、混乱化器が使 用するソース言語の構造と変換の複雑性とに依存する。典型的なデータ構造セッ トは、次のものを含んでよい。 (a)A内の各ルーチンに関する制御流れグラフ。 (b)A内のルーチンに関する呼出しグラフ。 (c)A内のクラスに関する継承グラフ。 4.マッピングR(M)およびPs(S)(アルゴリズム5を使用)、I(S) (アルゴリズム6を使用)、及びA(S)(アルゴリズム7を使用)を構築する 。 5.アプリケーションに混乱化変換を適用する。各ステップにおいて、混乱化さ れるべきソースコードオブジェクトSと、Sに対して適用すべき適切な変換Tと が選択される。所要の混乱化レベルに達した時に、または、許容可能な実行時間 コストを超過した時に、このプロセスが終了する。 REPEAT S :=SelectCode(I); T :=SelectTransform(S,A); TをSに適用し、ポイント3からの適切なデータ構造を更新する; UNTIL Done(ReqObf,AcceptCost,S,T,I). 6.被混乱化ソースコードオブジェックトを新たな被混乱化アプリケーションA ’に再構成する。 アルゴリズム2(SelectCode) 入力:アルゴリズム6によって計算される通りの混乱化プライオリティマッピン グ。 出力:ソースコードオブジェクトS。 Iが各々のソースコードオブジェクトSをI(S)にマップし、このI(S) は、Sを混乱化することがどれだけ重要であるかの測度である。混乱化すべき次 のソースコードオブジェクトを選択するために、Iが優先待ち行列として処理さ れることが可能である。言い換えれば、I(S)が最大化されるようにSが選択 される。 アルゴリズム3(SelectTransform) 入力: a)ソースコードオブジェクトS。 b)アルゴリズム7によって計算される通りの適切性マッピングA。 出力:変換T ある特定のソースコードオブジェクトSに適用するための最も適切な変換を選 択するために、任意の個数の発見法(heuristics)が使用可能である 。しかし、考慮すべき2つの重要な問題がある。第1に、選択された変換が、S 内のコードの残り部分と自然に混じり合わなければならない。これは、A(S) において高い適切性値を有する変換を優先することによって取扱可能である。第 2に、高い「出費に見合うだけの価値(bang−for−the−buck) 」を得る(すなわち、低い実行時間ペナルティで高レベルの混乱化を得る)変換 が優先されることが望ましい。これは、効力と弾力性を最大化すると同時にコス トを最小化する変換を選択することによって実現される。これらの発見法が次の コードによって取り込まれ、このコード内のw1、w2、w3がインプリメンテ ーション定義定数である。 T−−>VがA(S)内であるように変換Tを戻し、かつ、(w1*Tpott (S)+w2*Tres(S)+W3*V)/Tcost(S)が最大化される。 アルゴリズム4(Done) 入力 a)ReqObf、混乱化の残留レベル。 b)AcceptCost、残留する許容可能な実行時間ペナルティ。 c)ソースコードオブジェクトS。 d)変換T。 e)混乱化プライオリティマッピングI。 出力: a)更新されたReqObf。 b)更新されたAcceptCost。 c)更新された混乱化プライオリティマッピングI。 d)終了条件に達している場合には真であるブール返却値。 Done関数が2つの目的を満たす。この関数は、ソースコードオブジェクト Sが混乱化され終わっており、かつ、縮小された優先順位値を受け取らなければ ならないという事実を反映させるために、優先待ち行列Iを更新する。この縮小 は、変換の弾力性と効力と の組合せに基づいている。Doneは、さらに、ReqObfとAcceptC ostとを更新し、終了条件に達しているかどうかを調べる。w1、w2、w3 、w4は、インプリメンテーション定義定数である。 I(S):=I(S)-(w2Tpos(S)+w2Tres(S)); ReqObf:=ReqObf-(w2Tpos(S)+w2Tres(S)); AcceptCost:=AcceptCost-Tcost(S); RETURN AcceptCost<=0 OR ReqObf<=O. アルゴリズム5(プラグマティック情報) 入力 a)アプリケーションA。 b)Aに対する入力データセットI={I1;I2;...}。 出力: a)A内の各ルーチンMに関してMの実行時間ランクを与えるマッビングR( M)。 b)A内の各ソースコードオブジェクトSに関してSで使用される言語構造体 のセットを与える、マッピングPs(S)。 プラグマティック情報を計算する。この情報が、各々の個別のソースコードオ ブジェクトに関する情報の適正タイプを選択するために使用されることになる。 1.動的プラグマティック情報を計算する(すなわち、ユーザによって提供さ れる入力データセットIに基づくプロファイラ下でアプリケーションを実行する )。アプリケーションがその時間の大部分をどこで費やすのかを示す、各ルーチ ン/基本ブロックに関するR(M)(Mの実行時間ランク)を計算する。 2.静的プラグマティック情報PS(S)を計算する。PS(S)が、プログラ マがSで使用した言語構造体の種類に関する統計を 提供する。 FOR S:=A DOにおける各ソースコードオブジェクト O:=Sが使用する演算子のセット; C:=Sが使用する高レベル言語構造体(WHILE文、例外、スレッ ド等)のセット; L:=Sが参照するライブラリクラス/ルーチンのセット; Ps(S)−OUCUL; END FOR. アルゴリズム6(混乱化プライオリティ) 入力: a)アプリケーションA。 b)R(M)、Mのランク。 出力 Aの各ソースコードオブジェクトSに関してSの混乱化プライオリティを与え るマッピングI(S)。 I(S)が、ユーザによって明示的に提供されることが可能であるか、または 、アルゴリズム5で収集された静的データに基づいた発見法を使用して計算され ることが可能である。使用可能な発見法は次の通りであってよい。 1.Aの任意のルーチンMに関して、Mのランク、すなわち、R(M)に対し てI(M)を反比例させる。すなわち、この着想は、「ルーチンを実行するのに 多くの時間が費やされる場合には、恐らくは、Mが、厳重に混乱化されなければ ならない重要な手続きだろう」ということである。 2.テーブル1のソフトウェア複雑性測度の1つによって定義される通りに、 I(S)をSの複雑性とする。この場合も同様に、( 間違っている可能性もある)直感的洞察は、複雑なコードの方が単純なコードの 場合よりも重要なトレードシークレットを含む可能性が高いということである。 アルゴリズム7(混乱化の適切性) 入力: a)アプリケーションA。 b)変換Tの各々に関して、Tがアプリケーションに加えるであろう言語構造 体のセットを与える、マッピングPt。 c)Aの各ソースコードオブジエクトSに関して、Sで使用される言語構造体 のセットを与えるマッピングPs(S)。 出力: Aの各ソースコードオブジェクトSと各変換Tとに関して、Sに対するTの適 切性を与えるマッピングA(S)。 各ソースコードオブジェクトSに関して適切性セットA(S)を計算する。マ ッピングは、基本的に、アルゴリズム5で計算された静的プラグマティック情報 に基づいている。 FOR S:=A DOにおける各ソースコードオブジェクト FOR T:=各変換DO V:=Pt(T)とPs(S)との間の類似性の度合い; A(S):=A(S)U{T−−>V}; END FOR END FOR 11.概要と考察 被混乱化プログラムがオリジナルのプログラムとは異った形で動 作することが、多くの状況において許容可能であるだろうということを、本発明 者は認識している。特に、本発明の混乱化変換の殆どが、そのオリジナルのプロ グラムに比べて目標プログラムの動作速度を遅くするかまたはプログラムサイズ を大きくする。本発明では、特殊な場合に、目標プログラムが、オリジナルのプ ログラムとは異った副作用を有することさえ可能とされ、または、オリジナルの プログラムがエラー条件で終了する時に目標プログラムが終了しないことさえ可 能とされる。本発明の混乱化変換の唯一の必要条件は、これら2つのプログラム の観測可能な動作(ユーザによって経験されるような動作)が同一でなければな らないということだけである。 オリジナルのプログラムと被混乱化プログラムとの間のこうした弱い同一性を 可能にすることは、新規性のある非常に刺激的な着想である。様々な変換が提供 され上述されているが、他の様々な変換が当業者には明らかだろうし、本発明に よるソフトウェアセキュリティ増強のための混乱化を実現するために使用される ことが可能である。 さらに、未だ知られていない変換を発見するために、様々な将来の調査研究が 行われる可能性が大きい。特に、次の領域の調査研究が行われることが期待され ている。 1.新たな混乱化変換が発見されるべきである。 2.様々な変換の間での相互関係とオーダリングとが研究されるべきである。こ れは、最適化変換シーケンスのオーダリングが常に困難な問題である、コード最 適化における研究と同様である。 3.効力とコストとの間の関係が研究されるべきである。個々の種類のコードに 関して、どの変換が最良の「出費に見合うだけの価値」(すなわち、最低の実行 オーバヘッドで最高の効力)を与えるか を知ることが求められている。 上記の変換の全てを概観するためには、図31を参照されたい。上記の不明瞭 構造体を概観するためには、図32を参照されたい。しかし、本発明は、上記の 典型的な変換と不明瞭構造体とに限定されてはならない。 11.1 混乱化能力 暗号化とプログラム混乱化は互いに極めて類似している。これらの両方は、秘 密を探り出そうとする人間たちの目から情報を隠蔽しようとするだけでなく、限 られた時間でこの隠蔽を行うことも意図している。暗号化されたドキュメントは 限られた貯蔵寿命を有する。暗号化プログラム自体が攻撃に耐えている限りにお いてだけ、かつ、ハードウェアの処理速度の進歩が、選択されたキー長に関する メッセージが頻繁に解読されることを可能にしない限りにおいてだけ、暗号化さ れたドキュメントが安全であるにすぎない。被混乱化アプリケーションにも同じ ことが当てはまる。十分に強力な混乱解除器が未だ構築されていない限りにおい てだけ、被混乱化アプリケーションが安全であるにすぎない。 混乱解除器が混乱化器が追いつくのに要する時間よりもリリースの間の時間が 短い限りは、アプリケーションを進化させる上では、このことは問題ではないだ ろう。混乱解除器が混乱化器に追いついても、アプリケーションが自動的に混乱 解除されることが可能となる時点までには、そのアプリケーションが既に時代遅 れになっており、したがって競合相手の関心の対象ではなくなっているだろう。 しかし、アプリケーションが、何回かのリリースにわたって存続すると考えら れるトレードシークレットを含む場合には、こうしたトレードシークレットが混 乱化以外の手段によって保護されなければならない。部分サーバ側実行(図2( b))がその自明の選択で あるが、アプリケーションの実行速度が低速となるかまたは(ネットワーク接続 がダウンした時には)実行が不可能となるという欠点がある。 11.2 混乱化の他の使用 上記の通りの混乱化用途以外に他の潜在的な混乱化用途が存在するかも知れな いということを指摘することは興味深い。1つの可能性は、ソフトウェアの海賊 版製造販売業者を追跡するために混乱化を使用することである。例えば、ベンダ が、自分のアプリケーションの新たな被混乱化バージョンを新たな個々の顧客の ために作成し(SelectTransformアルゴリズム(アルゴリズム3 )の中にランダム性要素を導入することによって、同じアプリケーションの各々 に異った被混乱化バージョンが生成されることが可能である。乱数発生器に対す る異ったシードが別々のバージョンを生じさせる)、各バージョンを販売した顧 客の記録を保持する。そのアプリケーションがネットを通じて販売され配給され ている場合にだけ、これはおそらく妥当であるにすぎないだろう。ベンダが自分 のアプリケーションの海賊版が販売されていることを発見した場合には、このベ ンダに必要なことは、その海賊版バージョンのコピーを手に入れて、それをデー タベースと比較し、そのオリジナルのアプリケーションを誰が購入したかを発見 することだけである。実際は、販売された全ての被混乱化バージョンのコビーを 保存することは不要である。販売された乱数シードを保存しておくだけで十分で ある。 ソフトウェアの海賊版製造販売業者が混乱化を(不正)使用する可能性もある 。本明細書で概説されたJava混乱化器がバイトコードのレベルで動作するの で、合法的に購入されたJavaアプリケーションに対して海賊版製造販売業者 が混乱化を施すことを阻止 するものは何もない。その後で、この被混乱化バージョンが再販売されることも 可能である。海賊版製造販売業者が訴訟に直面した時には、彼らは、実際には自 分が最初に購入したアプリケーションを再販売しているのではなくて(結局のと ころ、そのコードが全く異っている!)、合法的に再設計したバージョンを販売 しているのであると主張することも可能である。 結論 結論として、本発明は、ソフトウェアのリバースエンジニアリングを防止する かまたは少なくとも妨害するための、コンピュータ上で実現される方法と装置と を提供する。これは、実行時間またはプログラムサイズを犠牲として実現される ことが可能であり、その結果として変換されたプログラムが詳細なレベルでは異 った形で動作するけれども、本発明の方法が、適切な状況では高い有用性をもた らすものと考えられる。実施様態の1つでは、変換されたプログラムが、非変換 のプログラムと見掛け上では同じ動作をする。したがって、本発明は、オリジナ ルのプログラムと被混乱化プログラムとの間のこうした弱い同一性を可能にする 。 本発明の開示が主としてソフトウェアのリバースエンジニアリングの阻止とい う文脈において行われてきたが、ソフトウェアオブジェクト(アプリケーション を含む)のウォーターマーキング(watermarking)ような他のアプ リケーションが想定されている。これは、あらゆる単一の混乱化手続きの潜在的 に特有の性質を利用する。ベンダは、アプリケーション販売先の個々の顧客に対 して、個々に異った被混乱化バージョンを作成するだろう。海賊版コピーが発見 された場合には、そのベンダは、その海賊版バージョンをオリジナルの混乱化情 報データベースと比較するだけで、オリジナルのアプリケーションを追跡するこ とが可能である。 本明細書で説明されている特定の混乱化変換は、網羅的なものではない。さら に別のタイプの混乱化が、本発明の新規の混乱化ツールアーキテクチャにおいて 提供され使用されてよい。 上記の説明では、公知の等効物を有する要素または整数が言及されてきたが、 こうした等効物が、上記で個々に説明されたように、本発明に含まれている。 本発明が特定の実施様態を参照して単なる具体例の形で説明されてきたが、本 発明の範囲から逸脱することなしに、改変と改善とが行われることが可能である ことが理解されなければならない。
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE),OA(BF,BJ ,CF,CG,CI,CM,GA,GN,ML,MR, NE,SN,TD,TG),AP(GH,GM,KE,L S,MW,SD,SZ,UG,ZW),EA(AM,AZ ,BY,KG,KZ,MD,RU,TJ,TM),AL ,AM,AT,AU,AZ,BA,BB,BG,BR, BY,CA,CH,CN,CU,CZ,DE,DK,E E,ES,FI,GB,GE,GH,GM,GW,HU ,ID,IL,IS,JP,KE,KG,KP,KR, KZ,LC,LK,LR,LS,LT,LU,LV,M D,MG,MK,MN,MW,MX,NO,NZ,PL ,PT,RO,RU,SD,SE,SG,SI,SK, SL,TJ,TM,TR,TT,UA,UG,US,U Z,VN,YU,ZW (72)発明者 トムボーソン,クラーク デビット ニュージーランド国,オークランド,メド ウバンクス,ファンコート ストリート 3/61 (72)発明者 ロウ,ダグラス ウェイ コック ニュージーランド国,オークランド 3, エプソム,アルモラー ロード 56

Claims (1)

  1. 【特許請求の範囲】 1.コンピュータが実施するコードを混乱化するための方法であって、 混乱化すべきコードのサブセットを選択する段階; 適用すべき混乱化変換を選択する段階;及び 変換を適用する段階; を含んで成り、変換されたコードは未変換コードに対する弱い等価性を提供す る方法。 2.処理すべきアプリケーションのコードのため、ソースコードに対応する単 数又は複数のソースコード入力ファイルを識別する段階; 必要とされる混乱化レベル(効力)を選択する段階; 最大実行時間又は空間ペナルティ(コスト)を選択する段階; 入力ファイルを読取りかつ構文解析する段階; 処理すべきアプリケーションによって使用されるデータタイプ、データ構造、 及び制御構造を識別する情報を提供する段階; 必要とされる効力が選択されるか又は最大コストを上回ってしまうまで、ソー スコードオブジェクトに対して混乱化変換を選択し適用する段階;及び アプリケーションの変換済みコードを出力する段階; をさらに含む、請求項1に記載のコンピュータにより実施される方法。 3.変換には、不明瞭なコンストラクトが含まれ、この不明瞭コンストラクト は、エイリアシング及び同時実行技術を用いて構築されている、請求項1に記載 の方法。 4.混乱化されたコードに対し適用された混乱化変換についての 情報及びそのアプリケーションのソースコードに対する変換済みアプリケーショ ンの混乱化されたコードに関する情報を出力する段階をさらに含んで成る、請求 項1に記載の方法。 5.変換は、1つのアプリケーションのコードの可観測性挙動を保存するよう に選択される、請求項1に記載の方法。 6.コードを混乱化解除する段階をさらに含んで成り、コードの混乱化解除に は、スライシング、部分評価、データフロー分析又は統計分析を使用することに より1つのアプリケーションの混乱化されたコードからあらゆる混乱化を除去す る段階が含まれる、請求項1に記載の方法。 7.コードを混乱化するためのコンピュータ読取り可能な媒体上に具体化され たコンピュータプログラムであって、 混乱化すべきコードのサブセットを選択する論理; 適用すべき混乱化変換を選択する論理;及び 変換を適用する論理; を含み、変換されたコードが、未変換コードに対する弱い等価性を提供する、 コンピュータプログラム。 8.処理すべきアプリケーションのコードのため、ソースコードに対応する単 数又は複数のソースコード入力ファイルを識別する論理; 必要とされる混乱化レベル(効力)を選択する論理; 最大実行時間又は空間ペナルティ(コスト)を選択する論理; 入力ファイルを読取りかつ構文解析する論理; 処理すべきアプリケーションによって使用されるデータタイプ、データ構造、 及び制御構造を識別する情報を提供する論理; 必要とされる効力が達成されるか又は最大コストを上回ってしまうまで、ソー スコードオブジェクトに対して混乱化変換を選択し適 用する論理;及び アプリケーションの変換済みコードを出力する論理; をさらに含む、請求項7に記載のコンピュータプログラム。 9.変換には、不明瞭なコンストラクトが含まれ、この不明瞭コンストラクト は、エイリアシング及び同時実行技術を用いて構築されている、請求項7に記載 のコンピュータプログラム。 10.混乱化されたコードに対し適用された混乱化変換についての情報及びその アプリケーションのソースコードに対する変換済みアブリケーションの混乱化さ れたコードに関する情報を出力する論理をさらに含む、請求項7に記載のコンピ ュータプログラム。 11.変換は、1つのアプリケーションのコードの可観測性挙動を保存するよう に選択される、請求項7に記載のコンピュータプログラム。 12.コードを混乱化解除する論理をさらに含んで成り、コードの混乱化解除に は、スライシング、部分評価、データフロー分析又は統計分析を使用することに より1つのアプリケーションの混乱化されたコードからあらゆる混乱化を除去す る段階が含まれる、請求項7に記載のコンピュータプログラム。 13.コードを混乱化するための装置であって、 混乱化すべきコードのサブセットを選択するための手段; 適用すべき混乱化変換を選択するための手段;及び 変換を適用するための手段; を含み、変換されたコードが、未変換コードに対する弱い等価性を提供する、 装置。 14.処理すべきアプリケーションのコードのため、ソースコードに対応する単 数又は複数のソースコード入力ファイルを識別するための手段; 必要とされる混乱化レベル(効力)を選択するための手段; 最大実行時間又は空間ペナルティ(コスト)を選択するための手段; 入力ファイルを読取りかつ構文解析するための手段; 処理すべきアプリケーションによって使用されるデータタイプ、データ構造、 及び制御構造を識別する情報を提供するための手段; 必要とされる効力が達成されるか又は最大コストを上回ってしまうまで、ソー スコードオブジェクトに対して混乱化変換を選択し適用するための手段; アプリケーションの変換済みコードを出力するための手段; をさらに含んで成る、請求項13に記載の装置。 15.変換には、不明瞭なコンストラクトが含まれ、この不明瞭コンストラクト は、エイリアシング及び同時実行技術を用いて構築されている、請求項13に記 載の装置。 16.混乱化されたコードに対し適用された混乱化変換についての情報及びその アプリケーションのソースコードに対する変換済みアプリケーションの混乱化さ れたコードに関する情報を出力するための手段をさらに含んで成る、請求項13 に記載の装置。 17.変換は、1つのアプリケーションのコードの可観測性挙動を保存するよう に選択される、請求項13に記載の装置。 18.コードを混乱化解除するための手段をさらに含んで成り、コードの混乱化 解除には、スライシング、部分評価、データフロー分析又は統計分析を使用する ことにより1つのアプリケーションの混乱化されたコードからあらゆる混乱化を 除去する段階が含まれる、請求項13に記載の装置。 19.コードがJavaTMバイトコードを含む、請求項13に記載の装置。 20.変換が、データ混乱化,制御混乱化又は予防混乱化を提供する、請求項1 3に記載の装置。
JP50866099A 1997-06-09 1998-06-09 ソフトウェアセキュリティを増強するための混乱化技術 Expired - Lifetime JP4739465B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
NZ328057 1997-06-09
NZ32805797 1997-06-09
PCT/US1998/012017 WO1999001815A1 (en) 1997-06-09 1998-06-09 Obfuscation techniques for enhancing software security

Publications (3)

Publication Number Publication Date
JP2002514333A true JP2002514333A (ja) 2002-05-14
JP2002514333A5 JP2002514333A5 (ja) 2006-01-05
JP4739465B2 JP4739465B2 (ja) 2011-08-03

Family

ID=19926287

Family Applications (1)

Application Number Title Priority Date Filing Date
JP50866099A Expired - Lifetime JP4739465B2 (ja) 1997-06-09 1998-06-09 ソフトウェアセキュリティを増強するための混乱化技術

Country Status (7)

Country Link
US (1) US6668325B1 (ja)
EP (1) EP0988591A1 (ja)
JP (1) JP4739465B2 (ja)
CN (1) CN1260055A (ja)
AU (1) AU7957998A (ja)
CA (1) CA2293650C (ja)
WO (1) WO1999001815A1 (ja)

Cited By (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005011326A (ja) * 2003-06-20 2005-01-13 Microsoft Corp スパムフィルタの不明瞭化
JP2005085188A (ja) * 2003-09-11 2005-03-31 Fujitsu Ltd プログラム保護方法、プログラム保護プログラムおよびプログラム保護装置
JP2005235076A (ja) * 2004-02-23 2005-09-02 Fujitsu Ltd コンピュータシステム、中央装置及びプログラム実行方法
WO2006009081A1 (ja) * 2004-07-16 2006-01-26 Matsushita Electric Industrial Co., Ltd. アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法
WO2006085595A1 (ja) * 2005-02-10 2006-08-17 Matsushita Electric Industrial Co., Ltd. プログラム変換装置及びプログラム実行装置
JP2006235688A (ja) * 2005-02-22 2006-09-07 Kddi Corp プログラム難読化装置およびその方法ならびにプログラム
WO2006115217A1 (ja) * 2005-04-21 2006-11-02 Matsushita Electric Industrial Co., Ltd. プログラム変換装置及び秘密保持プログラム
JP2007503038A (ja) * 2003-08-20 2007-02-15 マクロヴィジョン ヨーロッパ リミテッド コード難読化およびエミュレーションによるプロセッサ制御
JP2007086845A (ja) * 2005-09-20 2007-04-05 Kddi Corp クライアントサーバシステムおよび同システムにおけるサーバサイドプログラムの実現方法ならびにそのサーバ装置、サーバサイドプログラム
JP2007514193A (ja) * 2003-12-11 2007-05-31 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 各暗号化ラウンドのコア暗号化関数を隠蔽するために置換を用いたブロック暗号化システム
JP2008090668A (ja) * 2006-10-03 2008-04-17 Kddi Corp プログラム難読化方法およびプログラム
JP2008102576A (ja) * 2006-10-17 2008-05-01 Kddi Corp プログラム解析方法およびプログラム
JP2008518262A (ja) * 2004-10-28 2008-05-29 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 暗号化関数を難読化するための方法及びシステム
KR100841282B1 (ko) 2005-11-24 2008-06-25 후지제롯쿠스 가부시끼가이샤 보호된 실행 프로그램의 작성을 위한 기록 매체, 방법 및장치
JP2008523480A (ja) * 2004-12-06 2008-07-03 ギーゼッケ ウント デフリエント ゲーエムベーハー ロードフォーマットのプログラムコードの生成および実行可能プログラムコードの提供
JP2008269398A (ja) * 2007-04-23 2008-11-06 Fuji Xerox Co Ltd プログラム難読化装置及びプログラム
JP2009514060A (ja) * 2005-10-28 2009-04-02 パナソニック株式会社 難読化評価方法および難読化方法
JP2009543498A (ja) * 2006-07-12 2009-12-03 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ デジタルデータ処理装置の耐改竄性
JP2010515945A (ja) * 2007-01-11 2010-05-13 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 実装のコピーの追跡
JP2010517119A (ja) * 2007-01-18 2010-05-20 パナソニック株式会社 難読化支援装置
JP2010191847A (ja) * 2009-02-20 2010-09-02 Fuji Xerox Co Ltd プログラム難読化プログラム及びプログラム難読化装置
JP2011150560A (ja) * 2010-01-22 2011-08-04 Kddi Corp ソフトウェア保護システム、ソフトウェア保護方法、ソフトウェア変換方法およびプログラム
JP4783289B2 (ja) * 2004-06-28 2011-09-28 パナソニック株式会社 プログラム生成装置、プログラムテスト装置、プログラム実行装置、及び情報処理システム
JP2011209801A (ja) * 2010-03-29 2011-10-20 Kddi Corp ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム
JP4970279B2 (ja) * 2005-10-31 2012-07-04 パナソニック株式会社 セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路
JP2012133736A (ja) * 2010-12-24 2012-07-12 Kddi Corp ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム
JP2012526310A (ja) * 2009-05-06 2012-10-25 イルデト カナダ コーポレーション ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護
JP2012221510A (ja) * 2011-04-13 2012-11-12 Safenet Inc 保護するためのルーチンの自動選択
JP2013186647A (ja) * 2012-03-07 2013-09-19 Yokohama National Univ 難読化装置、難読化方法、及び難読化プログラム、並びに難読化されたソースコード

Families Citing this family (446)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7362775B1 (en) 1996-07-02 2008-04-22 Wistaria Trading, Inc. Exchange mechanisms for digital information packages with bandwidth securitization, multichannel digital watermarks, and key management
CN100452071C (zh) 1995-02-13 2009-01-14 英特特拉斯特技术公司 用于安全交易管理和电子权利保护的系统和方法
US6658568B1 (en) 1995-02-13 2003-12-02 Intertrust Technologies Corporation Trusted infrastructure support system, methods and techniques for secure electronic commerce transaction and rights management
US5943422A (en) 1996-08-12 1999-08-24 Intertrust Technologies Corp. Steganographic techniques for securely delivering electronic digital rights management control information over insecure communication channels
US5892900A (en) 1996-08-30 1999-04-06 Intertrust Technologies Corp. Systems and methods for secure transaction management and electronic rights protection
US6948070B1 (en) 1995-02-13 2005-09-20 Intertrust Technologies Corporation Systems and methods for secure transaction management and electronic rights protection
US7133846B1 (en) 1995-02-13 2006-11-07 Intertrust Technologies Corp. Digital certificate support system, methods and techniques for secure electronic commerce transaction and rights management
US6157721A (en) 1996-08-12 2000-12-05 Intertrust Technologies Corp. Systems and methods using cryptography to protect secure computing environments
US5613004A (en) 1995-06-07 1997-03-18 The Dice Company Steganographic method and device
US6205249B1 (en) 1998-04-02 2001-03-20 Scott A. Moskowitz Multiple transform utilization and applications for secure digital watermarking
US7664263B2 (en) 1998-03-24 2010-02-16 Moskowitz Scott A Method for combining transfer functions with predetermined key creation
US7159116B2 (en) 1999-12-07 2007-01-02 Blue Spike, Inc. Systems, methods and devices for trusted transactions
US5889868A (en) 1996-07-02 1999-03-30 The Dice Company Optimization methods for the insertion, protection, and detection of digital watermarks in digitized data
US7346472B1 (en) 2000-09-07 2008-03-18 Blue Spike, Inc. Method and device for monitoring and analyzing signals
US7457962B2 (en) * 1996-07-02 2008-11-25 Wistaria Trading, Inc Optimization methods for the insertion, protection, and detection of digital watermarks in digitized data
US7177429B2 (en) 2000-12-07 2007-02-13 Blue Spike, Inc. System and methods for permitting open access to data objects and for securing data within the data objects
US7095874B2 (en) 1996-07-02 2006-08-22 Wistaria Trading, Inc. Optimization methods for the insertion, protection, and detection of digital watermarks in digitized data
US6052780A (en) * 1996-09-12 2000-04-18 Open Security Solutions, Llc Computer system and process for accessing an encrypted and self-decrypting digital information product while restricting access to decrypted digital information
US8079086B1 (en) 1997-11-06 2011-12-13 Finjan, Inc. Malicious mobile code runtime monitoring system and methods
US9219755B2 (en) 1996-11-08 2015-12-22 Finjan, Inc. Malicious mobile code runtime monitoring system and methods
US7058822B2 (en) 2000-03-30 2006-06-06 Finjan Software, Ltd. Malicious mobile code runtime monitoring system and methods
US7730317B2 (en) 1996-12-20 2010-06-01 Wistaria Trading, Inc. Linear predictive coding implementation of digital watermarks
US6092147A (en) * 1997-04-15 2000-07-18 Sun Microsystems, Inc. Virtual machine with securely distributed bytecode verification
US6480959B1 (en) 1997-12-05 2002-11-12 Jamama, Llc Software system and associated methods for controlling the use of computer programs
US6643775B1 (en) 1997-12-05 2003-11-04 Jamama, Llc Use of code obfuscation to inhibit generation of non-use-restricted versions of copy protected software applications
US7809138B2 (en) * 1999-03-16 2010-10-05 Intertrust Technologies Corporation Methods and apparatus for persistent control and protection of content
US6957341B2 (en) * 1998-05-14 2005-10-18 Purdue Research Foundation Method and system for secure computational outsourcing and disguise
AU4535699A (en) * 1998-06-10 1999-12-30 Auckland Uniservices Limited Software watermarking techniques
US7017188B1 (en) * 1998-11-16 2006-03-21 Softricity, Inc. Method and apparatus for secure content delivery over broadband access networks
US6763370B1 (en) 1998-11-16 2004-07-13 Softricity, Inc. Method and apparatus for content protection in a secure content delivery system
AU1936900A (en) * 1998-12-08 2000-06-26 Mediadna, Inc. A system and method of obfuscating data
US7526468B2 (en) * 1999-01-08 2009-04-28 Computer Associates Think, Inc. System and method for recursive path analysis of DBMS procedures
FR2790844B1 (fr) * 1999-03-09 2001-05-25 Gemplus Card Int Procede et dispositif de surveillance du deroulement d'un programme, dispositif programme permettant la surveillance de son programme
US7664264B2 (en) 1999-03-24 2010-02-16 Blue Spike, Inc. Utilizing data reduction in steganographic and cryptographic systems
US7370071B2 (en) 2000-03-17 2008-05-06 Microsoft Corporation Method for serving third party software applications from servers to client computers
US7730169B1 (en) 1999-04-12 2010-06-01 Softricity, Inc. Business method and system for serving third party software applications
US8099758B2 (en) 1999-05-12 2012-01-17 Microsoft Corporation Policy based composite file system and method
US7421586B2 (en) * 1999-05-12 2008-09-02 Fraunhofer Gesselschaft Protecting mobile code against malicious hosts
WO2000072112A2 (en) * 1999-05-12 2000-11-30 Fraunhofer Crcg, Inc. Obfuscation of executable code
US7263722B1 (en) * 1999-05-12 2007-08-28 Fraunhofer Crcg, Inc. Obfuscation of executable code
US6959384B1 (en) 1999-12-14 2005-10-25 Intertrust Technologies Corporation Systems and methods for authenticating and protecting the integrity of data streams and other data
US6594761B1 (en) 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
EP1192516A1 (en) * 1999-06-09 2002-04-03 Cloakware Corporation Tamper resistant software encoding
US7152165B1 (en) 1999-07-16 2006-12-19 Intertrust Technologies Corp. Trusted storage systems and methods
WO2001006374A2 (en) 1999-07-16 2001-01-25 Intertrust Technologies Corp. System and method for securing an untrusted storage
US7770016B2 (en) 1999-07-29 2010-08-03 Intertrust Technologies Corporation Systems and methods for watermarking software and other media
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US7243236B1 (en) 1999-07-29 2007-07-10 Intertrust Technologies Corp. Systems and methods for using cryptography to protect secure and insecure computing environments
DE60023013T2 (de) 1999-07-30 2006-06-29 Intertrust Technologies Corp., Santa Clara Verfahren und systeme zur transaktionsaufzeichnungsübertragung unter anwendung von schwellen und einem mehrstufigen protokoll
US7475246B1 (en) 1999-08-04 2009-01-06 Blue Spike, Inc. Secure personal content server
US6779114B1 (en) * 1999-08-19 2004-08-17 Cloakware Corporation Tamper resistant software-control flow encoding
US7406603B1 (en) 1999-08-31 2008-07-29 Intertrust Technologies Corp. Data protection systems and methods
US7287166B1 (en) * 1999-09-03 2007-10-23 Purdue Research Foundation Guards for application in software tamperproofing
US7757097B2 (en) 1999-09-03 2010-07-13 Purdue Research Foundation Method and system for tamperproofing software
US6985885B1 (en) 1999-09-21 2006-01-10 Intertrust Technologies Corp. Systems and methods for pricing and selling digital goods
US6449719B1 (en) 1999-11-09 2002-09-10 Widevine Technologies, Inc. Process and streaming server for encrypting a data stream
US8055894B2 (en) 1999-11-09 2011-11-08 Google Inc. Process and streaming server for encrypting a data stream with bandwidth based variation
US6996720B1 (en) 1999-12-17 2006-02-07 Microsoft Corporation System and method for accessing protected content in a rights-management architecture
US6970849B1 (en) 1999-12-17 2005-11-29 Microsoft Corporation Inter-server communication using request with encrypted parameter
US7047411B1 (en) 1999-12-17 2006-05-16 Microsoft Corporation Server for an electronic distribution system and method of operating same
US6832316B1 (en) 1999-12-22 2004-12-14 Intertrust Technologies, Corp. Systems and methods for protecting data secrecy and integrity
AUPQ486599A0 (en) * 1999-12-23 2000-02-03 Zentronix Pty Ltd A method of storing and retrieving miniaturised data
WO2001053908A2 (en) * 2000-01-18 2001-07-26 Telcordia Technologies, Inc. Method and systems for identifying the existence of one or more unknown programs in a system
JP3888823B2 (ja) * 2000-02-14 2007-03-07 松下電器産業株式会社 半導体集積回路
US6829710B1 (en) * 2000-03-14 2004-12-07 Microsoft Corporation Technique for producing, through watermarking, highly tamper-resistant executable code and resulting “watermarked” code so formed
US7080257B1 (en) * 2000-03-27 2006-07-18 Microsoft Corporation Protecting digital goods using oblivious checking
US7054443B1 (en) * 2000-03-27 2006-05-30 Microsoft Corporation System and method for protecting digital goods using random and automatic code obfuscation
US7085839B1 (en) 2000-04-07 2006-08-01 Intertrust Technologies Corporation Network content management
US7266681B1 (en) 2000-04-07 2007-09-04 Intertrust Technologies Corp. Network communications security agent
CA2305078A1 (en) * 2000-04-12 2001-10-12 Cloakware Corporation Tamper resistant software - mass data encoding
US7000119B1 (en) 2000-04-20 2006-02-14 Realnetworks, Inc. Instruction/data protection employing derived obscuring instruction/data
CA2447451C (en) * 2000-05-12 2013-02-12 Xtreamlok Pty. Ltd. Information security method and system
US7313692B2 (en) * 2000-05-19 2007-12-25 Intertrust Technologies Corp. Trust management systems and methods
US7107448B1 (en) 2000-06-04 2006-09-12 Intertrust Technologies Corporation Systems and methods for governing content rendering, protection, and management applications
US7213266B1 (en) 2000-06-09 2007-05-01 Intertrust Technologies Corp. Systems and methods for managing and protecting electronic content and applications
US7050586B1 (en) 2000-06-19 2006-05-23 Intertrust Technologies Corporation Systems and methods for retrofitting electronic appliances to accept different content formats
US7065652B1 (en) 2000-06-21 2006-06-20 Aladdin Knowledge Systems, Ltd. System for obfuscating computer code upon disassembly
US7171692B1 (en) 2000-06-27 2007-01-30 Microsoft Corporation Asynchronous communication within a server arrangement
US7051200B1 (en) 2000-06-27 2006-05-23 Microsoft Corporation System and method for interfacing a software process to secure repositories
US6981262B1 (en) 2000-06-27 2005-12-27 Microsoft Corporation System and method for client interaction in a multi-level rights-management architecture
US7539875B1 (en) 2000-06-27 2009-05-26 Microsoft Corporation Secure repository with layers of tamper resistance and system and method for providing same
US7017189B1 (en) 2000-06-27 2006-03-21 Microsoft Corporation System and method for activating a rendering device in a multi-level rights-management architecture
AU2001267055A1 (en) * 2000-06-27 2002-01-08 Microsoft Corporation System and method for providing an individualized secure repository
US6891953B1 (en) 2000-06-27 2005-05-10 Microsoft Corporation Method and system for binding enhanced software features to a persona
US7158953B1 (en) 2000-06-27 2007-01-02 Microsoft Corporation Method and system for limiting the use of user-specific software features
WO2002003604A2 (en) * 2000-06-29 2002-01-10 Cachestream Corporation Digital rights management
US7225159B2 (en) 2000-06-30 2007-05-29 Microsoft Corporation Method for authenticating and securing integrated bookstore entries
US6938170B1 (en) * 2000-07-17 2005-08-30 International Business Machines Corporation System and method for preventing automated crawler access to web-based data sources using a dynamic data transcoding scheme
US7752214B2 (en) * 2000-09-01 2010-07-06 Op40, Inc. Extended environment data structure for distributed digital assets over a multi-tier computer network
US7165175B1 (en) * 2000-09-06 2007-01-16 Widevine Technologies, Inc. Apparatus, system and method for selectively encrypting different portions of data sent over a network
US7127615B2 (en) 2000-09-20 2006-10-24 Blue Spike, Inc. Security based on subliminal and supraliminal channels for data objects
US7043473B1 (en) 2000-11-22 2006-05-09 Widevine Technologies, Inc. Media tracking system and method
CA2327911A1 (en) * 2000-12-08 2002-06-08 Cloakware Corporation Obscuring functions in computer software
US7150045B2 (en) 2000-12-14 2006-12-12 Widevine Technologies, Inc. Method and apparatus for protection of electronic media
FR2818772A1 (fr) * 2000-12-21 2002-06-28 Bull Cp8 Procede de securisation d'un operateur logique ou mathematique implante dans un module electronique a microprocesseur, ainsi que le module electronique et le systeme embarque associes
JP4252229B2 (ja) 2001-03-28 2009-04-08 ユミルリンク株式会社 情報交換システム、情報通信端末、情報交換方法、プログラム、および、記録媒体
US7580988B2 (en) * 2001-04-05 2009-08-25 Intertrust Technologies Corporation System and methods for managing the distribution of electronic content
US7188342B2 (en) 2001-04-20 2007-03-06 Microsoft Corporation Server controlled branding of client software deployed over computer networks
US7136840B2 (en) 2001-04-20 2006-11-14 Intertrust Technologies Corp. Systems and methods for conducting transactions and communications using a trusted third party
FR2824401A1 (fr) * 2001-05-04 2002-11-08 Thomson Csf Dispositif et procede pour la signature, le marquage et l'authentification de programmes d'ordinateur
FR2824402A1 (fr) 2001-05-04 2002-11-08 Thales Sa Dispositif et procede pour la signature, le marquage et l'authenticification de programmes d'ordinateur
CA2348355A1 (en) * 2001-05-24 2002-11-24 Cloakware Corporation General scheme of using encodings in computations
US7581103B2 (en) 2001-06-13 2009-08-25 Intertrust Technologies Corporation Software self-checking systems and methods
WO2003003169A2 (en) * 2001-06-28 2003-01-09 Cloakware Corporation Secure method and system for biometric verification
US7313824B1 (en) * 2001-07-13 2007-12-25 Liquid Machines, Inc. Method for protecting digital content from unauthorized use by automatically and dynamically integrating a content-protection agent
US7111285B2 (en) * 2001-07-17 2006-09-19 Liquid Machines, Inc. Method and system for protecting software applications against static and dynamic software piracy techniques
US6694435B2 (en) * 2001-07-25 2004-02-17 Apple Computer, Inc. Method of obfuscating computer instruction streams
EP1280148A3 (en) * 2001-07-26 2003-09-17 Irdeto Access B.V. Compilation technique and data distribution system using the same
FR2828302B1 (fr) * 2001-07-31 2010-09-03 Validy Procede pour proteger un logiciel a l'aide d'un principe dit de "branchement conditionnel" contre son utilisation non autorisee
FR2828304B1 (fr) * 2001-07-31 2010-09-03 Validy Procede pour proteger un logiciel a l'aide d'un principe dit de "dissociation temporelle" contre son utilisation non autorisee
FR2828303B1 (fr) * 2001-07-31 2010-09-03 Validy Procede pour proteger un logiciel a l'aide d'un principe dit de "renommage" contre son utilisation non autorisee
FR2828300B1 (fr) * 2001-07-31 2010-09-03 Validy Procede pour proteger un logiciel a l'aide d'un principe dit de "fonctions elementaires" contre son utilisation non autorisee
FR2828305B1 (fr) * 2001-07-31 2010-09-03 Validy Procede pour proteger un logiciel a l'aide d'un principe dit de "variable" contre son utilisation non autorisee
US7502940B2 (en) 2001-08-01 2009-03-10 Sas Validy Method to protect software against unwanted use with a “conditional branch” principle
US7343494B2 (en) 2001-08-01 2008-03-11 Sas Validy Method to protect software against unwanted use with a “renaming” principle
US7269740B2 (en) * 2001-08-01 2007-09-11 Sas Validy Method to protect software against unwanted use with a “variable principle”
US7434064B2 (en) 2001-08-01 2008-10-07 Sas Validy Method to protect software against unwanted use with a “elementary functions” principle
GB0121064D0 (en) * 2001-08-31 2001-10-24 Transitive Technologies Ltd Obtaining translation of generic code representation
US20070277037A1 (en) * 2001-09-06 2007-11-29 Randy Langer Software component authentication via encrypted embedded self-signatures
US7210134B1 (en) * 2001-09-06 2007-04-24 Sonic Solutions Deterring reverse-engineering of software systems by randomizing the siting of stack-based data
DE60223990T2 (de) * 2001-10-31 2008-12-04 Aplix Corp. System zum Ausführen von Zwischenkode, Methode zum Ausführen von Zwischenkode, und Computerprogrammprodukt zum Ausführen von Zwischenkode
EP1308838A3 (en) * 2001-10-31 2007-12-19 Aplix Corporation Intermediate code preprocessing apparatus, intermediate code execution apparatus, intermediate code execution system, and computer program product for preprocessing or executing intermediate code
CA2363795A1 (en) * 2001-11-26 2003-05-26 Cloakware Corporation Computer system protection by communication diversity
US7328345B2 (en) 2002-01-29 2008-02-05 Widevine Technologies, Inc. Method and system for end to end securing of content for video on demand
CA2369304A1 (en) * 2002-01-30 2003-07-30 Cloakware Corporation A protocol to hide cryptographic private keys
AU2003212647A1 (en) * 2002-03-13 2003-09-22 Matsushita Electric Industrial Co., Ltd. Secure device for preventing unauthorised use of distributed content
JP2003280754A (ja) * 2002-03-25 2003-10-02 Nec Corp 隠蔽化ソースプログラム、ソースプログラム変換方法及び装置並びにソース変換プログラム
JP2003280755A (ja) * 2002-03-25 2003-10-02 Nec Corp 自己復元型プログラム、プログラム生成方法及び装置、情報処理装置並びにプログラム
US7299292B2 (en) * 2002-03-29 2007-11-20 Widevine Technologies, Inc. Process and streaming server for encrypting a data stream to a virtual smart card client system
US7287275B2 (en) 2002-04-17 2007-10-23 Moskowitz Scott A Methods, systems and devices for packet watermarking and efficient provisioning of bandwidth
US20030200449A1 (en) * 2002-04-17 2003-10-23 International Business Machines Corporation Method of accessing a shared subroutine of computer system
US7383570B2 (en) 2002-04-25 2008-06-03 Intertrust Technologies, Corp. Secure authentication systems and methods
US7149899B2 (en) 2002-04-25 2006-12-12 Intertrust Technologies Corp. Establishing a secure channel with a human user
US20030217280A1 (en) * 2002-05-17 2003-11-20 Keaton Thomas S. Software watermarking for anti-tamper protection
US7272725B2 (en) 2002-06-25 2007-09-18 Sas Validy Method to protect software against unwanted use with a “temporal dissociation” principle
US7383443B2 (en) * 2002-06-27 2008-06-03 Microsoft Corporation System and method for obfuscating code using instruction replacement scheme
US7254586B2 (en) * 2002-06-28 2007-08-07 Microsoft Corporation Secure and opaque type library providing secure data protection of variables
WO2004023313A1 (en) * 2002-09-04 2004-03-18 Fraunhofer Crcg, Inc. Protecting mobile code against malicious hosts cross references to related applications
US7594271B2 (en) * 2002-09-20 2009-09-22 Widevine Technologies, Inc. Method and system for real-time tamper evidence gathering for software
US7603662B2 (en) * 2002-10-09 2009-10-13 Microsoft Corporation System and method for sensing types of local variables
JP2004362532A (ja) * 2002-10-25 2004-12-24 Matsushita Electric Ind Co Ltd 透かし挿入装置および透かし取出装置
US20040083177A1 (en) * 2002-10-29 2004-04-29 General Instrument Corporation Method and apparatus for pre-encrypting VOD material with a changing cryptographic key
US7150003B2 (en) * 2002-11-25 2006-12-12 Matsushita Electric Industrial Co., Ltd. Class coalescence for obfuscation of object-oriented software
US7051322B2 (en) * 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US7149900B2 (en) * 2002-12-12 2006-12-12 Intel Corporation Method of defending software from debugger attacks
US7912920B2 (en) 2002-12-13 2011-03-22 Stephen Loomis Stream sourcing content delivery system
US7412532B2 (en) 2002-12-13 2008-08-12 Aol Llc, A Deleware Limited Liability Company Multimedia scheduler
US7797064B2 (en) 2002-12-13 2010-09-14 Stephen Loomis Apparatus and method for skipping songs without delay
FR2849232B1 (fr) * 2002-12-24 2005-02-25 Trusted Logic Procede pour la securisation des systemes informatiques incorporant un module d'interpretation de code
US7584354B2 (en) * 2003-01-31 2009-09-01 Intel Corporation Implementing portable content protection to secure secrets
US9818136B1 (en) 2003-02-05 2017-11-14 Steven M. Hoffberg System and method for determining contingent relevance
US20060130016A1 (en) * 2003-03-17 2006-06-15 Wagner John R Method of kernal-mode instruction interception and apparatus therefor
US7356143B2 (en) 2003-03-18 2008-04-08 Widevine Technologies, Inc System, method, and apparatus for securely providing content viewable on a secure device
US7007170B2 (en) 2003-03-18 2006-02-28 Widevine Technologies, Inc. System, method, and apparatus for securely providing content viewable on a secure device
US8510571B1 (en) 2003-03-24 2013-08-13 Hoi Chang System and method for inserting security mechanisms into a software program
US20040199771A1 (en) * 2003-04-04 2004-10-07 Widevine Technologies, Inc. Method for tracing a security breach in highly distributed content
DE10319435B4 (de) * 2003-04-25 2018-07-26 Whitecryption Corporation Verfahren zur Verarbeitung von Daten zum Schutz eines Softwareprogramms vor Rekonstruktion
KR100568228B1 (ko) * 2003-05-20 2006-04-07 삼성전자주식회사 고유번호를 이용한 프로그램 탬퍼 방지 방법과 난독처리된 프로그램 업그레이드 방법, 상기 방법을 위한 장치
WO2004109443A2 (en) 2003-06-02 2004-12-16 Liquid Machines, Inc. Managing data objects in dynamic, distributed and collaborative contexts
AU2004264582B2 (en) * 2003-06-05 2010-05-13 Intertrust Technologies Corporation Interoperable systems and methods for peer-to-peer service orchestration
US20050108562A1 (en) * 2003-06-18 2005-05-19 Khazan Roger I. Technique for detecting executable malicious code using a combination of static and dynamic analyses
US20050021756A1 (en) * 2003-07-26 2005-01-27 Grant Bruce K. Method of developing, delivering and rendering network applications
US20050028010A1 (en) * 2003-07-29 2005-02-03 International Business Machines Corporation System and method for addressing denial of service virus attacks
US7454323B1 (en) * 2003-08-22 2008-11-18 Altera Corporation Method for creation of secure simulation models
US7340734B1 (en) * 2003-08-27 2008-03-04 Nvidia Corporation Method and apparatus to make code more difficult to reverse engineer
US7591021B2 (en) * 2003-09-05 2009-09-15 Microsoft Corporation Object model document for obfuscating object model therein
US8220058B2 (en) * 2003-09-25 2012-07-10 Oracle America, Inc. Rendering and encryption engine for application program obfuscation
US7353499B2 (en) * 2003-09-25 2008-04-01 Sun Microsystems, Inc. Multiple instruction dispatch tables for application program obfuscation
US7424620B2 (en) * 2003-09-25 2008-09-09 Sun Microsystems, Inc. Interleaved data and instruction streams for application program obfuscation
US7415618B2 (en) * 2003-09-25 2008-08-19 Sun Microsystems, Inc. Permutation of opcode values for application program obfuscation
US20050069138A1 (en) * 2003-09-25 2005-03-31 Sun Microsystems, Inc., A Delaware Corporation Application program obfuscation
US20050071656A1 (en) * 2003-09-25 2005-03-31 Klein Dean A. Secure processor-based system and method
US7363620B2 (en) * 2003-09-25 2008-04-22 Sun Microsystems, Inc. Non-linear execution of application program instructions for application program obfuscation
JP3873047B2 (ja) * 2003-09-30 2007-01-24 株式会社東芝 識別情報埋込装置、識別情報解析装置、識別情報埋込方法、識別情報解析方法及びプログラム
US7788496B2 (en) 2003-10-08 2010-08-31 Microsoft Corporation First computer process and second computer process proxy-executing code on behalf thereof
US7979911B2 (en) * 2003-10-08 2011-07-12 Microsoft Corporation First computer process and second computer process proxy-executing code from third computer process on behalf of first process
US8103592B2 (en) * 2003-10-08 2012-01-24 Microsoft Corporation First computer process and second computer process proxy-executing code on behalf of first process
US7631292B2 (en) * 2003-11-05 2009-12-08 Microsoft Corporation Code individualism and execution protection
US7966499B2 (en) * 2004-01-28 2011-06-21 Irdeto Canada Corporation System and method for obscuring bit-wise and two's complement integer computations in software
FR2866451B1 (fr) * 2004-02-18 2008-02-29 Cit Alcatel Procede et dispositif de transformation d'un systeme d'exploitation en vue de la protection d'un programme informatique contre des intrusions exterieures
US7383583B2 (en) * 2004-03-05 2008-06-03 Microsoft Corporation Static and run-time anti-disassembly and anti-debugging
JPWO2005098795A1 (ja) * 2004-03-31 2008-02-28 松下電器産業株式会社 コンピュータシステム、コンピュータプログラム及び加算方法
US8694802B2 (en) 2004-04-30 2014-04-08 Apple Inc. System and method for creating tamper-resistant code
NZ533028A (en) * 2004-05-19 2005-09-30 Auckland Uniservices Ltd Method of introducing digital signature into software
FR2871255B1 (fr) * 2004-06-04 2006-08-04 Gemplus Sa Procede d'obfuscation de code compile, terminal et logiciel associes
US7552337B2 (en) 2004-06-12 2009-06-23 Microsoft Corporation Service protection
US7721340B2 (en) 2004-06-12 2010-05-18 Microsoft Corporation Registry protection
US20050289037A1 (en) * 2004-06-15 2005-12-29 Smith Joseph B Financial asset product and method for implementing same
US7694121B2 (en) * 2004-06-30 2010-04-06 Microsoft Corporation System and method for protected operating system boot using state validation
US7841009B1 (en) * 2004-07-09 2010-11-23 Angel Secure Networks System and method for defending against reverse engineering of software, firmware and hardware
US8631077B2 (en) 2004-07-22 2014-01-14 International Business Machines Corporation Duplicate e-mail content detection and automatic doclink conversion
US20060037005A1 (en) * 2004-08-15 2006-02-16 Russell Paul F Method and apparatus for increasing computer security
US20060041625A1 (en) * 2004-08-19 2006-02-23 International Business Machines Corporation System and method for sectional e-mail transmission
US7890593B2 (en) * 2008-07-17 2011-02-15 International Business Machines Corporation Sectional E-mail Transmission
US20060041940A1 (en) * 2004-08-21 2006-02-23 Ko-Cheng Fang Computer data protecting method
US7590589B2 (en) 2004-09-10 2009-09-15 Hoffberg Steven M Game theoretic prioritization scheme for mobile ad hoc networks permitting hierarchal deference
US9609279B2 (en) 2004-09-24 2017-03-28 Google Inc. Method and system for providing secure CODECS
KR20070083987A (ko) * 2004-11-09 2007-08-24 코닌클리케 필립스 일렉트로닉스 엔.브이. Dsp 알고리즘 보호
DE602005018736D1 (de) * 2004-12-22 2010-02-25 Ericsson Telefon Ab L M Wasserzeichenmarkierung eines Computerprogrammcodes mittels äquivalenter mathematischer Ausdrücke
DE602005013178D1 (de) * 2004-12-22 2009-04-23 Ericsson Telefon Ab L M Wasserzeichenmarkierung eines Computerprogrammcodes
US20060168044A1 (en) * 2005-01-11 2006-07-27 Yen-Fu Chen System and method for display of chained messages in a single email in different orders
US7689969B1 (en) * 2005-01-18 2010-03-30 The Mathworks, Inc. Obfuscation of automatically generated code
US20080015999A1 (en) * 2005-02-04 2008-01-17 Widevine Technologies, Inc. Securely ingesting encrypted content into content servers
US8020152B2 (en) * 2005-02-24 2011-09-13 Microsoft Corporation Code morphing
US7587616B2 (en) * 2005-02-25 2009-09-08 Microsoft Corporation System and method of iterative code obfuscation
US7370190B2 (en) * 2005-03-03 2008-05-06 Digimarc Corporation Data processing systems and methods with enhanced bios functionality
US7810142B2 (en) * 2005-03-21 2010-10-05 International Business Machines Corporation Auditing compliance with a hippocratic database
EP1873676B1 (en) * 2005-03-25 2013-11-20 Panasonic Corporation Program converting device, secure processing device, computer program, and recording medium
US7805714B2 (en) * 2005-03-30 2010-09-28 Alcatel-Lucent Usa Inc. Technique for constructing syntax-directed search and modifications in program transformation systems
US8719786B2 (en) * 2005-03-30 2014-05-06 Alcatel Lucent Method for performing conditionalized N-way merging of source code
US7624385B2 (en) * 2005-03-30 2009-11-24 Alcatel-Lucent Usa Inc. Method for handling preprocessing in source code transformation
CN101203859B (zh) * 2005-04-21 2013-08-14 松下电器产业株式会社 程序难破解化装置和难破解化方法
US20060259903A1 (en) * 2005-05-12 2006-11-16 Xerox Corporation Method for creating unique identification for copies of executable code and management thereof
US20060259900A1 (en) * 2005-05-12 2006-11-16 Xerox Corporation Method for creating unique identification for copies of executable code and management thereof
WO2007055729A2 (en) * 2005-05-19 2007-05-18 Reifer Consultants, Inc. Protecting applications software against unauthorized access, reverse engineering or tampering
US20070266434A1 (en) * 2006-05-11 2007-11-15 Reifer Consultants, Inc. Protecting Applications Software Against Unauthorized Access, Reverse Engineering or Tampering
JP4669934B2 (ja) * 2005-06-10 2011-04-13 国立大学法人 奈良先端科学技術大学院大学 プログラム変換装置、実行支援装置、それらの方法およびそれらのコンピュータ・プログラム
US8838974B2 (en) * 2005-07-15 2014-09-16 The Mathworks, Inc. System and method for verifying the integrity of read-only components in deployed mixed-mode applications
US7620987B2 (en) * 2005-08-12 2009-11-17 Microsoft Corporation Obfuscating computer code to prevent an attack
WO2007030931A1 (en) * 2005-09-14 2007-03-22 Tetraglyph Technologies Inc. System and method for preventing unauthorized use of digital works
US8719716B2 (en) * 2005-09-15 2014-05-06 The Mathworks, Inc. Locked element for use in a graphical modeling environment
WO2007038245A2 (en) 2005-09-23 2007-04-05 Widevine Technologies, Inc. Method for evolving detectors to detect malign behavior in an artificial immune system
US7817608B2 (en) * 2005-09-23 2010-10-19 Widevine Technologies, Inc. Transitioning to secure IP communications for encoding, encapsulating, and encrypting data
US8065733B2 (en) 2005-09-23 2011-11-22 Google, Inc. Method for evolving detectors to detect malign behavior in an artificial immune system
DE102005045852A1 (de) * 2005-09-26 2007-04-05 Siemens Ag Verfahren und System zum Schutz von Quellcode
US8874477B2 (en) 2005-10-04 2014-10-28 Steven Mark Hoffberg Multifactorial optimization system and method
US9626667B2 (en) 2005-10-18 2017-04-18 Intertrust Technologies Corporation Digital rights management engine systems and methods
AU2006304655B2 (en) 2005-10-18 2012-08-16 Intertrust Technologies Corporation Methods for digital rights management
US8122122B1 (en) 2005-11-08 2012-02-21 Raytheon Oakley Systems, Inc. Event monitoring and collection
US8463612B1 (en) 2005-11-08 2013-06-11 Raytheon Company Monitoring and collection of audio events
US8141149B1 (en) * 2005-11-08 2012-03-20 Raytheon Oakley Systems, Inc. Keyword obfuscation
US8689016B2 (en) 2005-12-02 2014-04-01 Google Inc. Tamper prevention and detection for video provided over a network to a client
WO2007066740A1 (ja) * 2005-12-07 2007-06-14 Matsushita Electric Industrial Co., Ltd. セキュアデバイス、情報処理端末、サーバ、および認証方法
NL1030639C2 (nl) * 2005-12-09 2007-06-12 Antonius Theodorus Ceci Hauzer Ventilatiesysteem voor tunneltraject of overdekte weg.
US8701091B1 (en) 2005-12-15 2014-04-15 Nvidia Corporation Method and system for providing a generic console interface for a graphics application
US20070157311A1 (en) * 2005-12-29 2007-07-05 Microsoft Corporation Security modeling and the application life cycle
US20070192344A1 (en) * 2005-12-29 2007-08-16 Microsoft Corporation Threats and countermeasures schema
US20070156420A1 (en) * 2005-12-29 2007-07-05 Microsoft Corporation Performance modeling and the application life cycle
US20070162890A1 (en) * 2005-12-29 2007-07-12 Microsoft Corporation Security engineering and the application life cycle
US7890315B2 (en) 2005-12-29 2011-02-15 Microsoft Corporation Performance engineering and the application life cycle
US8526612B2 (en) * 2006-01-06 2013-09-03 Google Inc. Selective and persistent application level encryption for video provided to a client
US20070180231A1 (en) * 2006-01-31 2007-08-02 Widevine Technologies, Inc. Preventing entitlement management message (EMM) filter attacks
WO2007091558A1 (ja) * 2006-02-06 2007-08-16 Matsushita Electric Industrial Co., Ltd. プログラム難読化装置
US7818788B2 (en) * 2006-02-14 2010-10-19 Microsoft Corporation Web application security frame
US7712137B2 (en) 2006-02-27 2010-05-04 Microsoft Corporation Configuring and organizing server security information
US8452981B1 (en) 2006-03-01 2013-05-28 Nvidia Corporation Method for author verification and software authorization
US7891012B1 (en) 2006-03-01 2011-02-15 Nvidia Corporation Method and computer-usable medium for determining the authorization status of software
US7987514B2 (en) 2006-04-04 2011-07-26 Intertrust Technologies Corp. Systems and methods for retrofitting electronic appliances to accept different content formats
EP1850260A1 (en) 2006-04-26 2007-10-31 Macrovision Corporation A computer-implemented method and system for binding digital rights management executable code to a software application
US8458673B2 (en) 2006-04-26 2013-06-04 Flexera Software Llc Computer-implemented method and system for binding digital rights management executable code to a software application
US20070261124A1 (en) * 2006-05-03 2007-11-08 International Business Machines Corporation Method and system for run-time dynamic and interactive identification of software authorization requirements and privileged code locations, and for validation of other software program analysis results
FR2903508B1 (fr) * 2006-07-10 2008-10-17 Sagem Defense Securite Protection d'un programme interprete par une machine virtuelle
US8436864B2 (en) * 2006-08-01 2013-05-07 Nvidia Corporation Method and user interface for enhanced graphical operation organization
US7778800B2 (en) * 2006-08-01 2010-08-17 Nvidia Corporation Method and system for calculating performance parameters for a processor
US8963932B1 (en) 2006-08-01 2015-02-24 Nvidia Corporation Method and apparatus for visualizing component workloads in a unified shader GPU architecture
US8607151B2 (en) * 2006-08-01 2013-12-10 Nvidia Corporation Method and system for debugging a graphics pipeline subunit
US8436870B1 (en) 2006-08-01 2013-05-07 Nvidia Corporation User interface and method for graphical processing analysis
US8301890B2 (en) 2006-08-10 2012-10-30 Inside Secure Software execution randomization
US7613907B2 (en) 2006-08-11 2009-11-03 Atmel Corporation Embedded software camouflage against code reverse engineering
US8191131B2 (en) * 2006-08-23 2012-05-29 International Business Machines Corporation Obscuring authentication data of remote user
US20080271001A1 (en) * 2006-09-11 2008-10-30 Yo Nonomura Method of generating program, information processing device and microcomputer
WO2008034900A1 (en) * 2006-09-21 2008-03-27 Boesgaard Soerensen Hans Marti Fabrication of computer executable program files from source code
US20090249492A1 (en) * 2006-09-21 2009-10-01 Hans Martin Boesgaard Sorensen Fabrication of computer executable program files from source code
US7554865B2 (en) 2006-09-21 2009-06-30 Atmel Corporation Randomizing current consumption in memory devices
US8001607B2 (en) * 2006-09-27 2011-08-16 Direct Computer Resources, Inc. System and method for obfuscation of data across an enterprise
US8689193B2 (en) * 2006-11-01 2014-04-01 At&T Intellectual Property Ii, L.P. Method and apparatus for protecting a software application against a virus
FR2909467A1 (fr) * 2006-12-05 2008-06-06 Logiways France Sa Procede et dispositif de protection d'un systeme de traitement de l'information
US8468351B2 (en) 2006-12-15 2013-06-18 Codesealer Aps Digital data authentication
EP1947584B1 (en) * 2006-12-21 2009-05-27 Telefonaktiebolaget LM Ericsson (publ) Obfuscating computer program code
DE602006008166D1 (de) 2006-12-21 2009-09-10 Ericsson Telefon Ab L M Verschleierung von Computerprogrammcodes
US8146102B2 (en) * 2006-12-22 2012-03-27 Sap Ag Development environment for groupware integration with enterprise applications
US8613080B2 (en) 2007-02-16 2013-12-17 Veracode, Inc. Assessment and analysis of software security flaws in virtual machines
US20080209401A1 (en) * 2007-02-22 2008-08-28 Microsoft Corporation Techniques for integrating debugging with decompilation
US8752032B2 (en) * 2007-02-23 2014-06-10 Irdeto Canada Corporation System and method of interlocking to protect software-mediated program and device behaviours
WO2008101340A1 (en) * 2007-02-23 2008-08-28 Cloakware Corporation System and method for interlocking to protect software-mediated program and device behaviours
US8370606B2 (en) 2007-03-16 2013-02-05 Atmel Corporation Switching data pointers based on context
US7797516B2 (en) 2007-03-16 2010-09-14 Atmel Corporation Microcontroller with low-cost digital signal processing extensions
US20080229115A1 (en) * 2007-03-16 2008-09-18 Microsoft Corporation Provision of functionality via obfuscated software
US8788848B2 (en) * 2007-03-22 2014-07-22 Microsoft Corporation Optical DNA
US8837721B2 (en) * 2007-03-22 2014-09-16 Microsoft Corporation Optical DNA based on non-deterministic errors
US7987380B2 (en) 2007-03-27 2011-07-26 Atmel Rousset S.A.S. Methods and apparatus to detect voltage class of a circuit
US8181039B2 (en) * 2007-04-13 2012-05-15 Microsoft Corporation Disc drive counterfeiting countermeasure
US7912894B2 (en) * 2007-05-15 2011-03-22 Adams Phillip M Computerized, copy-detection and discrimination apparatus and method
US8621093B2 (en) 2007-05-21 2013-12-31 Google Inc. Non-blocking of head end initiated revocation and delivery of entitlements non-addressable digital media network
US7984288B2 (en) 2007-05-21 2011-07-19 Sercomm Corporation Software protection apparatus and protection method thereof
EP1998267A1 (en) * 2007-05-29 2008-12-03 Sercomm Corporation Software protection apparatus and protection method thereof
US8243924B2 (en) 2007-06-29 2012-08-14 Google Inc. Progressive download or streaming of digital media securely through a localized container and communication protocol proxy
ATE456837T1 (de) * 2007-06-29 2010-02-15 Ericsson Telefon Ab L M Verschleierung von ausführungsspuren eines computerprogrammcodes
US8130956B2 (en) * 2007-08-02 2012-03-06 International Business Machines Corporation Efficient and low power encrypting and decrypting of data
US8026930B2 (en) * 2007-08-06 2011-09-27 International Business Machines Corporation Preventing viewing by bystanders of information on a display screen
WO2009021070A1 (en) * 2007-08-06 2009-02-12 Bernard De Monseignat System and method for authentication, data transfer, and protection against phishing
US8296738B1 (en) 2007-08-13 2012-10-23 Nvidia Corporation Methods and systems for in-place shader debugging and performance tuning
US20090049425A1 (en) * 2007-08-14 2009-02-19 Aladdin Knowledge Systems Ltd. Code Obfuscation By Reference Linking
US9035957B1 (en) 2007-08-15 2015-05-19 Nvidia Corporation Pipeline debug statistics system and method
US8112636B1 (en) * 2007-11-06 2012-02-07 Lockheed Martin Corporation Protection of code or data from exposure by use of code injection service
US7765500B2 (en) * 2007-11-08 2010-07-27 Nvidia Corporation Automated generation of theoretical performance analysis based upon workload and design configuration
CN100474253C (zh) * 2007-11-22 2009-04-01 北京飞天诚信科技有限公司 .Net程序保护方法及装置
EP2071483A1 (fr) * 2007-12-07 2009-06-17 Gemplus Procédé de sécurisation de l'éxécution d'un code par masquage itératifs
US20110035601A1 (en) * 2007-12-21 2011-02-10 University Of Virginia Patent Foundation System, method and computer program product for protecting software via continuous anti-tampering and obfuscation transforms
US8868464B2 (en) 2008-02-07 2014-10-21 Google Inc. Preventing unauthorized modification or skipping of viewing of advertisements within content
US8055668B2 (en) 2008-02-13 2011-11-08 Camouflage Software, Inc. Method and system for masking data in a consistent manner across multiple data sources
US8176337B2 (en) * 2008-03-12 2012-05-08 Apple Inc. Computer object code obfuscation using boot installation
GB0806284D0 (en) * 2008-04-07 2008-05-14 Metaforic Ltd Profile-guided tamper-proofing
US8448002B2 (en) * 2008-04-10 2013-05-21 Nvidia Corporation Clock-gated series-coupled data processing modules
WO2009139650A1 (en) * 2008-05-12 2009-11-19 Business Intelligence Solutions Safe B.V. A data obfuscation system, method, and computer implementation of data obfuscation for secret databases
US8800048B2 (en) * 2008-05-20 2014-08-05 Microsoft Corporation Software protection through interdependent parameter cloud constrained software execution
US8429637B2 (en) * 2008-09-02 2013-04-23 Apple Inc. System and method for conditional expansion obfuscation
US8434061B2 (en) * 2008-06-06 2013-04-30 Apple Inc. System and method for array obfuscation
US8522015B2 (en) * 2008-06-27 2013-08-27 Microsoft Corporation Authentication of binaries in memory with proxy code execution
US8069053B2 (en) * 2008-08-13 2011-11-29 Hartford Fire Insurance Company Systems and methods for de-identification of personal data
US8589372B2 (en) 2008-12-16 2013-11-19 Clinton A. Krislov Method and system for automated document registration with cloud computing
US8914351B2 (en) 2008-12-16 2014-12-16 Clinton A. Krislov Method and system for secure automated document registration from social media networks
US8341141B2 (en) 2008-12-16 2012-12-25 Krislov Clinton A Method and system for automated document registration
US9135948B2 (en) * 2009-07-03 2015-09-15 Microsoft Technology Licensing, Llc Optical medium with added descriptor to reduce counterfeiting
US20100214894A1 (en) * 2009-02-20 2010-08-26 Microsoft Corporation Optical Medium with Added Descriptor to Reduce Counterfeiting
FR2942559B1 (fr) * 2009-02-24 2016-05-20 European Aeronautic Defence And Space Company - Eads France Procede de protection du code source d'un programme d'ordinateur.
FR2942558B1 (fr) 2009-02-24 2014-05-30 Eads Europ Aeronautic Defence Procede d'obscurcissement d'un programme d'ordinateur.
EP2234031A1 (en) * 2009-03-24 2010-09-29 SafeNet, Inc. Obfuscation
US8929303B2 (en) * 2009-04-06 2015-01-06 Samsung Electronics Co., Ltd. Control and data channels for advanced relay operation
CN101859330B (zh) * 2009-04-09 2012-11-21 辉达公司 验证集成电路效能模型的方法
US8914903B1 (en) 2009-06-03 2014-12-16 Amdocs Software System Limited System, method, and computer program for validating receipt of digital content by a client device
US9027143B1 (en) 2009-08-26 2015-05-05 Adobe Systems Incorporated System and method for multipronged authentication
US9524345B1 (en) 2009-08-31 2016-12-20 Richard VanderDrift Enhancing content using linked context
CN102598017B (zh) * 2009-11-13 2016-03-09 爱迪德技术有限公司 提高Java字节码的防窜改能力的系统和方法
EP2343663A1 (fr) * 2009-12-17 2011-07-13 Gemalto SA Procédé de protection polymorphe d'un code exécutable
US8645930B2 (en) * 2010-01-04 2014-02-04 Apple Inc. System and method for obfuscation by common function and common function prototype
US9639707B1 (en) 2010-01-14 2017-05-02 Richard W. VanderDrift Secure data storage and communication for network computing
US8887140B2 (en) * 2010-01-15 2014-11-11 Apple Inc. System and method for annotation-driven function inlining
US11301592B2 (en) * 2010-01-28 2022-04-12 Pure Storage, Inc. Distributed storage with data obfuscation and method for use therewith
WO2011116446A1 (en) * 2010-03-24 2011-09-29 Irdeto Canada Corporation System and method for random algorithm selection to dynamically conceal the operation of software
KR20140053754A (ko) 2010-03-25 2014-05-08 어데토 캐나다 코포레이션 부 채널 및 반복 호출 공격들의 방지를 위한 동적 시간 가변 연산 경로 시스템 및 방법
CA2792787C (en) * 2010-03-31 2017-07-25 Irdeto Canada Corporation System and method for protecting cryptographic assets from a white-box attack
US9152411B2 (en) * 2010-05-12 2015-10-06 Microsoft Technology Licensing, Llc Edge computing platform for delivery of rich internet applications
EP2402880A1 (en) * 2010-07-01 2012-01-04 Aladdin Europe GmbH Method and device for selectively protecting one of a plurality of methods of a class of an application written in an object-orientated language
US20120101929A1 (en) * 2010-08-26 2012-04-26 Massively Parallel Technologies, Inc. Parallel processing development environment and associated methods
KR101216995B1 (ko) * 2010-12-03 2012-12-31 충남대학교산학협력단 인덱스 테이블 기반 코드 암호화 및 복호화 장치 및 그 방법
US9195810B2 (en) 2010-12-28 2015-11-24 Microsoft Technology Licensing, Llc Identifying factorable code
EP2482184A1 (en) * 2011-02-01 2012-08-01 Irdeto B.V. Adaptive obfuscated virtual machine
US8707053B2 (en) * 2011-02-09 2014-04-22 Apple Inc. Performing boolean logic operations using arithmetic operations by code obfuscation
US8930717B2 (en) 2011-03-01 2015-01-06 Angel Secure Networks, Inc. Secure processing module and method for making the same
US9058482B2 (en) 2011-03-01 2015-06-16 Angel Secure Networks, Inc. Controlling user access to electronic resources without password
JP5777189B2 (ja) 2011-03-24 2015-09-09 イルデト ビー ヴイIrdeto B.V. 攻撃耐性のためにアプリケーション全体に依存関係ネットワークを提供するシステムおよび方法
CA2832752A1 (en) 2011-04-11 2012-10-18 Intertrust Technologies Corporation Information security systems and methods
FR2974207B1 (fr) * 2011-04-14 2013-05-24 In Webo Technologies Procede et systeme de securisation d'un logiciel
US8621237B1 (en) * 2011-06-30 2013-12-31 Emc Corporation Protecting against cryptographic key exposure in source code
US20130014267A1 (en) * 2011-07-07 2013-01-10 Farrugia Augustin J Computer protocol generation and obfuscation
US20130097431A1 (en) * 2011-10-18 2013-04-18 Paul Marion Hriljac Systems and methods of source software code modification
US9116765B2 (en) 2011-10-20 2015-08-25 Apple Inc. System and method for obfuscating data using instructions as a source of pseudorandom values
AU2012337403B2 (en) * 2011-11-16 2015-04-30 V-Key Inc Cryptographic system and methodology for securing software cryptography
US8751800B1 (en) 2011-12-12 2014-06-10 Google Inc. DRM provider interoperability
WO2013091709A1 (en) * 2011-12-22 2013-06-27 Fundació Privada Barcelona Digital Centre Tecnologic Method and apparatus for real-time dynamic transformation of the code of a web document
US8539601B2 (en) 2012-01-17 2013-09-17 Lockheed Martin Corporation Secure data storage and retrieval
CN104396181B (zh) * 2012-02-09 2018-02-23 爱迪德技术有限公司 用于生成和保护密码密钥的系统和方法
US9286063B2 (en) 2012-02-22 2016-03-15 Veracode, Inc. Methods and systems for providing feedback and suggested programming methods
US8661549B2 (en) * 2012-03-02 2014-02-25 Apple Inc. Method and apparatus for obfuscating program source codes
EP2828782A1 (en) * 2012-03-23 2015-01-28 Irdeto B.V. Software fingerprinting
EP2831795B1 (en) * 2012-03-30 2019-01-09 Irdeto B.V. Securing accessible systems using variable dependent coding
WO2013184108A1 (en) * 2012-06-06 2013-12-12 Empire Technology Development Llc Software protection mechanism
EP2682865B1 (de) * 2012-07-05 2018-05-30 Vector Informatik GmbH Verfahren zur Kommunikation mit einem Steuerprogramm eines Steuergeräts sowie Applikationsmodule dazu
DE102012015899A1 (de) * 2012-08-10 2014-02-13 Giesecke & Devrient Gmbh Verfahren zum Erzeugen von ausführbarem Programmcode
US9323315B2 (en) 2012-08-15 2016-04-26 Nvidia Corporation Method and system for automatic clock-gating of a clock grid at a clock source
US8850371B2 (en) 2012-09-14 2014-09-30 Nvidia Corporation Enhanced clock gating in retimed modules
US9270660B2 (en) 2012-11-25 2016-02-23 Angel Secure Networks, Inc. System and method for using a separate device to facilitate authentication
US8918768B2 (en) * 2012-12-06 2014-12-23 Apple Inc. Methods and apparatus for correlation protected processing of data operations
KR101429229B1 (ko) * 2012-12-27 2014-08-12 한라대학교산학협력단 명령문 병합을 이용한 자바 난독화방법
US9519568B2 (en) 2012-12-31 2016-12-13 Nvidia Corporation System and method for debugging an executing general-purpose computing on graphics processing units (GPGPU) application
US10152591B2 (en) * 2013-02-10 2018-12-11 Paypal, Inc. Protecting against malware variants using reconstructed code of malware
IL224743A0 (en) * 2013-02-14 2013-06-27 Harel Cain A system for automatic obfuscation of computer programs
US9116712B2 (en) 2013-02-28 2015-08-25 Microsoft Technology Licensing, Llc Compile based obfuscation
US9411708B2 (en) 2013-04-12 2016-08-09 Wipro Limited Systems and methods for log generation and log obfuscation using SDKs
US9430534B2 (en) 2013-05-09 2016-08-30 Wipro Limited Systems and methods for improved security and precision in executing analytics using SDKS
US9471456B2 (en) 2013-05-15 2016-10-18 Nvidia Corporation Interleaved instruction debugger
CN104166822B (zh) * 2013-05-20 2017-10-13 阿里巴巴集团控股有限公司 一种数据保护的方法和装置
US10102384B2 (en) * 2013-05-30 2018-10-16 Jscrambler S.A. Digital content execution control mechanism
EP3005209B1 (en) 2013-05-30 2021-02-17 JScrambler S.A. Web application protection
US8738931B1 (en) * 2013-10-21 2014-05-27 Conley Jack Funk Method for determining and protecting proprietary source code using mnemonic identifiers
US9419993B2 (en) * 2013-12-12 2016-08-16 Empire Technology Development Llc Randomization of processor subunit timing to enhance security
US8954583B1 (en) 2014-01-20 2015-02-10 Shape Security, Inc. Intercepting and supervising calls to transformed operations and objects
TW201530344A (zh) * 2014-01-21 2015-08-01 hong-jian Zhou 應用程式存取保護方法及應用程式存取保護裝置
EP2913772A1 (de) 2014-02-28 2015-09-02 Wibu-Systems AG Verfahren und Computersystem zum Schutz eines Computerprogramms gegen Beeinflussung
GB201405754D0 (en) * 2014-03-31 2014-05-14 Irdeto Bv Protecting an item of software comprising conditional code
WO2015149828A1 (en) * 2014-03-31 2015-10-08 Irdeto B.V. Protecting an item of software
US8997256B1 (en) 2014-03-31 2015-03-31 Terbium Labs LLC Systems and methods for detecting copied computer code using fingerprints
US9459861B1 (en) 2014-03-31 2016-10-04 Terbium Labs, Inc. Systems and methods for detecting copied computer code using fingerprints
US9497252B2 (en) 2014-03-31 2016-11-15 International Business Machines Corporation On-demand code version switching
US9378001B2 (en) 2014-05-02 2016-06-28 Microsoft Technology Licensing, Llc Matching program sections through feature extraction
US9411597B2 (en) * 2014-05-06 2016-08-09 Nxp B.V. Return-oriented programming as an obfuscation technique
US9858440B1 (en) * 2014-05-23 2018-01-02 Shape Security, Inc. Encoding of sensitive data
US9003511B1 (en) 2014-07-22 2015-04-07 Shape Security, Inc. Polymorphic security policy action
CN105404794B (zh) * 2014-09-04 2019-09-20 腾讯科技(深圳)有限公司 Java应用软件的保护方法和装置
US9602543B2 (en) 2014-09-09 2017-03-21 Shape Security, Inc. Client/server polymorphism using polymorphic hooks
US10657262B1 (en) 2014-09-28 2020-05-19 Red Balloon Security, Inc. Method and apparatus for securing embedded device firmware
CN104318134B (zh) * 2014-11-05 2017-06-06 北京深思数盾科技股份有限公司 一种数据保护方法
WO2016118216A2 (en) 2014-11-06 2016-07-28 Intertrust Technologies Corporation Secure application distribution systems and methods
US11269621B2 (en) * 2015-01-27 2022-03-08 Arris Enterprises Llc Obfuscation for protection of streaming media and other data flows
WO2016190922A2 (en) 2015-02-09 2016-12-01 Medici, Inc. Crypto integration platform
US9779239B2 (en) * 2015-03-15 2017-10-03 Fujitsu Limited Detection of malicious software behavior using signature-based static analysis
CN104766166B (zh) * 2015-03-27 2018-06-19 杭州安恒信息技术有限公司 一种面向等级保护的信息系统安全合规性检查方法
US9805203B2 (en) * 2015-04-21 2017-10-31 Sap Se Cooperative static and dynamic analysis of web application code for finding security vulnerabilities
US11704733B2 (en) 2015-05-01 2023-07-18 Tzero Ip, Llc Crypto multiple security asset creation and redemption platform
US20160328539A1 (en) * 2015-05-05 2016-11-10 Nxp B.V. Obscuring Software Code With Split Variables
US10068070B2 (en) * 2015-05-05 2018-09-04 Nxp B.V. White-box elliptic curve point multiplication
EP3295404A4 (en) * 2015-05-26 2019-02-06 T0.Com, Inc. MISSING OF INTENTIONS IN TRANSACTIONS USING ENCRYPTION TECHNIQUES
WO2017007936A1 (en) 2015-07-07 2017-01-12 Shape Security, Inc. Split serving of computer code
US9471285B1 (en) 2015-07-09 2016-10-18 Synopsys, Inc. Identifying software components in a software codebase
CN106407754B (zh) * 2015-07-30 2021-06-18 中兴通讯股份有限公司 一种生成随机布局程序的方法及装置
US9946853B1 (en) * 2015-09-17 2018-04-17 Symantec Corporation Techniques for application code obfuscation
US10509918B1 (en) * 2015-09-18 2019-12-17 Hrl Laboratories, Llc One-time obfuscation for polynomial-size ordered binary decision diagrams (POBDDs)
US10594705B2 (en) * 2015-10-06 2020-03-17 Shouhuai Xu Systems and methods for instructions-based detection of sophisticated obfuscation and packing
US9703537B2 (en) 2015-11-02 2017-07-11 International Business Machines Corporation Method for defining alias sets
CN108475303A (zh) * 2015-12-31 2018-08-31 计算机2.0(2015)有限公司 应用递增多项式代码增强抵抗反向工程的计算机实现方法
EP3220304B1 (en) * 2016-02-22 2018-11-07 Eshard Method of testing the resistance of a circuit to a side channel analysis
US10171493B2 (en) 2016-03-05 2019-01-01 Sears Brands, L.L.C. Method and system to dynamically obfuscate a web services interface
WO2017156158A1 (en) 2016-03-09 2017-09-14 Shape Security, Inc. Applying bytecode obfuscation techniques to programs written in an interpreted language
US10216488B1 (en) 2016-03-14 2019-02-26 Shape Security, Inc. Intercepting and injecting calls into operations and objects
JP6730587B2 (ja) * 2016-06-13 2020-07-29 富士通株式会社 キャッシュミス推定プログラム、キャッシュミス推定方法及び情報処理装置
US10574632B2 (en) * 2016-06-30 2020-02-25 Hcl Technologies Limited System and method for secure sharing of a source code
US10243937B2 (en) * 2016-07-08 2019-03-26 Nxp B.V. Equality check implemented with secret sharing
US10078505B2 (en) * 2016-07-20 2018-09-18 International Business Machines Corporation Partial connection of iterations during loop unrolling
US10394554B1 (en) * 2016-09-09 2019-08-27 Stripe, Inc. Source code extraction via monitoring processing of obfuscated byte code
WO2018102767A1 (en) 2016-12-02 2018-06-07 Shape Security, Inc. Obfuscating source code sent, from a server computer, to a browser on a client computer
US10382450B2 (en) * 2017-02-21 2019-08-13 Sanctum Solutions Inc. Network data obfuscation
JP7131946B2 (ja) 2017-04-20 2022-09-06 Line株式会社 アプリケーションの保安性を評価する方法およびシステム
WO2018194196A1 (ko) * 2017-04-20 2018-10-25 라인 가부시키가이샤 Elf 파일의 난독화 적용 여부의 탐지 및 보안성 평가를 위한 방법 및 시스템
WO2018194198A1 (ko) * 2017-04-20 2018-10-25 라인 가부시키가이샤 Pe 파일의 난독화 적용 여부의 탐지 및 보안성 평가를 위한 방법 및 시스템
US10521612B2 (en) * 2017-06-21 2019-12-31 Ca, Inc. Hybrid on-premises/software-as-service applications
CN107506651B (zh) * 2017-07-04 2021-10-22 环玺信息科技(上海)有限公司 一种代码加密方法及系统
US10331839B2 (en) * 2017-08-18 2019-06-25 Honeywell Federal Manufacturing & Technologies, Llc System and method for obfuscation of electronic circuits
EP3467691B1 (en) 2017-10-05 2020-08-26 Eshard Method of selecting software files
US10121022B1 (en) 2017-10-09 2018-11-06 Jason McNutt Methods and systems for encrypting data using object-based screens
CN110659200B (zh) * 2018-06-29 2023-05-02 中国航发商用航空发动机有限责任公司 航空机载软件的源码和目标码对比分析方法及系统
US11307962B2 (en) 2018-07-09 2022-04-19 United States Of America As Represented By The Secretary Of The Navy Method for semantic preserving transform mutation discovery and vetting
US10521613B1 (en) * 2018-08-08 2019-12-31 Carlos Manuel Gonzalez Adaptive standalone secure software
US10620946B1 (en) * 2018-10-23 2020-04-14 Oracle International Corporation Dynamic modeling for opaque code during static analysis
KR20200047187A (ko) * 2018-10-26 2020-05-07 삼성전자주식회사 서버 및 서버의 제어 방법
DE102019004398A1 (de) * 2019-06-21 2020-12-24 Giesecke+Devrient Mobile Security Gmbh Obfuskierung einer Softwareapplikation
US20210004485A1 (en) * 2019-07-01 2021-01-07 International Business Machines Corporation Cognitive Iterative Minimization of Personally Identifiable Information in Electronic Documents
US11741197B1 (en) 2019-10-15 2023-08-29 Shape Security, Inc. Obfuscating programs using different instruction set architectures
US11599671B1 (en) * 2019-12-13 2023-03-07 TripleBlind, Inc. Systems and methods for finding a value in a combined list of private values
US11431688B2 (en) 2019-12-13 2022-08-30 TripleBlind, Inc. Systems and methods for providing a modified loss function in federated-split learning
CN111190601A (zh) * 2019-12-25 2020-05-22 航天信息股份有限公司 面向安卓应用程序的渐进控制流混淆方法和电子设备
US11204985B2 (en) * 2020-03-31 2021-12-21 Irdeto Canada Corporation Systems, methods, and storage media for creating secured computer code having entangled transformations
US11354218B2 (en) * 2020-05-06 2022-06-07 Sap Se Generation of optimal program variation
CN113158147B (zh) * 2021-03-24 2022-12-09 中国人民解放军战略支援部队信息工程大学 一种基于母体融合的代码混淆方法
WO2023009588A1 (en) 2021-07-27 2023-02-02 TripleBlind, Inc. Systems and methods for providing a multi-party computation system for neural networks
US20230289449A1 (en) * 2022-03-11 2023-09-14 Bank Of America Corporation Apparatus and methods for leveraging machine learning to programmatically identify and detect obfuscation

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4644493A (en) 1984-09-14 1987-02-17 International Business Machines Corporation Implementing a shared higher level of privilege on personal computers for copy protection of software
US4827508A (en) 1986-10-14 1989-05-02 Personal Library Software, Inc. Database usage metering and protection system and method
US5224160A (en) 1987-02-23 1993-06-29 Siemens Nixdorf Informationssysteme Ag Process for securing and for checking the integrity of the secured programs
US4965724A (en) 1987-03-05 1990-10-23 Oki Electric Industry Co., Ltd. Compiler system using reordering of microoperations to eliminate interlocked instructions for pipelined processing of assembler source program
US4866769A (en) 1987-08-05 1989-09-12 Ibm Corporation Hardware assist for protecting PC software
CA2010056C (en) 1990-02-14 1998-05-12 Charles Brian Hall Method for improving the efficiency of arithmetic code generation in an optimizing compiler using machine independent update instruction generation
EP0459046A1 (en) 1990-05-31 1991-12-04 International Business Machines Corporation Computer software protection
US5481708A (en) 1992-06-05 1996-01-02 Borland International, Inc. System and methods for optimizing object-oriented compilations
US5287408A (en) 1992-08-31 1994-02-15 Autodesk, Inc. Apparatus and method for serializing and validating copies of computer software
US5367685A (en) 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
JP3280449B2 (ja) 1993-03-01 2002-05-13 富士通株式会社 コンパイル装置
JPH07114473A (ja) 1993-10-19 1995-05-02 Fujitsu Ltd コンパイラの命令列最適化方法
US5579520A (en) 1994-05-13 1996-11-26 Borland International, Inc. System and methods for optimizing compiled code according to code object participation in program activities
US5950505A (en) 1994-05-24 1999-09-14 Locher; Beat Process for stripping an insulated wire or cable having a cross-section which may be non-circular and stripping device for carrying out the process
US5724425A (en) 1994-06-10 1998-03-03 Sun Microsystems, Inc. Method and apparatus for enhancing software security and distributing software
US5559884A (en) 1994-06-30 1996-09-24 Microsoft Corporation Method and system for generating and auditing a signature for a computer program
US5664191A (en) 1994-06-30 1997-09-02 Microsoft Corporation Method and system for improving the locality of memory references during execution of a computer program
FR2721984B1 (fr) 1994-06-30 1996-09-06 Valeo Volant amortisseur, et embrayage notamment pour vehicule automobile equipe d'un tel volant
US5646997A (en) 1994-12-14 1997-07-08 Barton; James M. Method and apparatus for embedding authentication information within digital data
US5745569A (en) 1996-01-17 1998-04-28 The Dice Company Method for stega-cipher protection of computer code
CN100452071C (zh) 1995-02-13 2009-01-14 英特特拉斯特技术公司 用于安全交易管理和电子权利保护的系统和方法
US5943422A (en) 1996-08-12 1999-08-24 Intertrust Technologies Corp. Steganographic techniques for securely delivering electronic digital rights management control information over insecure communication channels
US5892900A (en) 1996-08-30 1999-04-06 Intertrust Technologies Corp. Systems and methods for secure transaction management and electronic rights protection
US6157721A (en) 1996-08-12 2000-12-05 Intertrust Technologies Corp. Systems and methods using cryptography to protect secure computing environments
US5499333A (en) 1995-04-20 1996-03-12 International Business Machines Corporation Method and apparatus for at least partially instantiating an object in a compound document using the object's parent class configuration data when the object's configuration data is unavailable
US5592549A (en) 1995-06-15 1997-01-07 Infosafe Systems, Inc. Method and apparatus for retrieving selected information from a secure information source
US6006328A (en) 1995-07-14 1999-12-21 Christopher N. Drake Computer software authentication, protection, and security system
WO1997004394A1 (en) * 1995-07-14 1997-02-06 Christopher Nathan Drake Computer software authentication, protection, and security system
JP4518574B2 (ja) 1995-08-11 2010-08-04 ソニー株式会社 記録方法及び装置、記録媒体、並びに再生方法及び装置
US5835776A (en) 1995-11-17 1998-11-10 Sun Microsystems, Inc. Method and apparatus for instruction scheduling in an optimizing compiler for minimizing overhead instructions
US6088452A (en) * 1996-03-07 2000-07-11 Northern Telecom Limited Encoding technique for software and hardware
WO1997043761A2 (en) 1996-05-15 1997-11-20 Intertrust Technologies Corp. Cryptographic methods, apparatus and systems for storage media electronic rights management in closed and connected appliances
US5805895A (en) 1996-06-09 1998-09-08 Motorola, Inc. Method and apparatus for code translation optimization
US5892899A (en) * 1996-06-13 1999-04-06 Intel Corporation Tamper resistant methods and apparatus
AU739693B2 (en) 1996-08-12 2001-10-18 Intertrust Technologies Corp. Trusted and secure techniques for item delivery and execution
US5966537A (en) * 1997-05-28 1999-10-12 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing an executable computer program using input data
US6102966A (en) 1998-03-20 2000-08-15 Preemptive Solutions, Inc. Method for renaming identifiers of a computer program

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
CSND199800170004, Robert S. Swanke, "他人の作ったプログラムの上手な解析方法 The Art of Reverse Engineering", C MAGAZINE 第3巻 第10号, 19911001, 第3巻, 42−44頁, JP, ソフトバンク株式会社 *
CSNG200000560005, 門田 暁人 Akito MONDEN, "プログラムの難読化法の実験的評価 An Experiment to Evaluate Methods for Program Scrambling", 情報処理学会研究報告 Vol.96 No.32 IPSJ SIG Notes, 19960322, 第96巻, 33−40頁, JP, 社団法人情報処理学会 Information Processing Socie *
CSNG200000608002, 村山 隆徳 Takanori MURAYAMA, "ソフトウェアの難読化について How to make a software program hard to understand", 電子情報通信学会技術研究報告 Vol.95 No.353 IEICE Technical Report, 19951116, 第95巻, 9−14頁, JP, 社団法人電子情報通信学会 The Institute of Electro *
JPN6009001059, Robert S. Swanke, "他人の作ったプログラムの上手な解析方法 The Art of Reverse Engineering", C MAGAZINE 第3巻 第10号, 19911001, 第3巻, 42−44頁, JP, ソフトバンク株式会社 *
JPN6009001061, 村山 隆徳 Takanori MURAYAMA, "ソフトウェアの難読化について How to make a software program hard to understand", 電子情報通信学会技術研究報告 Vol.95 No.353 IEICE Technical Report, 19951116, 第95巻, 9−14頁, JP, 社団法人電子情報通信学会 The Institute of Electro *
JPN6009001063, 門田 暁人 Akito MONDEN, "プログラムの難読化法の実験的評価 An Experiment to Evaluate Methods for Program Scrambling", 情報処理学会研究報告 Vol.96 No.32 IPSJ SIG Notes, 19960322, 第96巻, 33−40頁, JP, 社団法人情報処理学会 Information Processing Socie *

Cited By (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4572087B2 (ja) * 2003-06-20 2010-10-27 マイクロソフト コーポレーション スパムフィルタの不明瞭化
JP2005011326A (ja) * 2003-06-20 2005-01-13 Microsoft Corp スパムフィルタの不明瞭化
JP4688805B2 (ja) * 2003-08-20 2011-05-25 マクロヴィジョン ヨーロッパ リミテッド コード難読化およびエミュレーションによるプロセッサ制御
JP2007503038A (ja) * 2003-08-20 2007-02-15 マクロヴィジョン ヨーロッパ リミテッド コード難読化およびエミュレーションによるプロセッサ制御
JP2005085188A (ja) * 2003-09-11 2005-03-31 Fujitsu Ltd プログラム保護方法、プログラム保護プログラムおよびプログラム保護装置
JP4568489B2 (ja) * 2003-09-11 2010-10-27 富士通株式会社 プログラム保護方法、プログラム保護プログラムおよびプログラム保護装置
JP2007514193A (ja) * 2003-12-11 2007-05-31 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 各暗号化ラウンドのコア暗号化関数を隠蔽するために置換を用いたブロック暗号化システム
JP2012037904A (ja) * 2003-12-11 2012-02-23 Irdeto Corporate Bv 各暗号化ラウンドのコア暗号化関数を隠蔽するために置換を用いたブロック暗号化システム
US8023651B2 (en) 2003-12-11 2011-09-20 Irdeto B.V. Block ciphering system, using permutations to hide the core ciphering function of each encryption round
JP4884976B2 (ja) * 2003-12-11 2012-02-29 イルデト・コーポレート・ビー・ヴイ 各暗号化ラウンドのコア暗号化関数を隠蔽するために置換を用いたブロック暗号化システム
US7865961B2 (en) 2004-02-23 2011-01-04 Fujitsu Limited Computer system, central unit, and program execution method
JP2005235076A (ja) * 2004-02-23 2005-09-02 Fujitsu Ltd コンピュータシステム、中央装置及びプログラム実行方法
JP4514473B2 (ja) * 2004-02-23 2010-07-28 富士通株式会社 コンピュータシステム、中央装置及びプログラム実行方法
US8307354B2 (en) 2004-06-28 2012-11-06 Panasonic Corporation Program creation device, program test device, program execution device, information processing system
JP4783289B2 (ja) * 2004-06-28 2011-09-28 パナソニック株式会社 プログラム生成装置、プログラムテスト装置、プログラム実行装置、及び情報処理システム
CN100465982C (zh) * 2004-07-16 2009-03-04 松下电器产业株式会社 应用执行装置及应用执行装置的应用执行方法
WO2006009081A1 (ja) * 2004-07-16 2006-01-26 Matsushita Electric Industrial Co., Ltd. アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法
JP2008518262A (ja) * 2004-10-28 2008-05-29 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 暗号化関数を難読化するための方法及びシステム
JP2008523480A (ja) * 2004-12-06 2008-07-03 ギーゼッケ ウント デフリエント ゲーエムベーハー ロードフォーマットのプログラムコードの生成および実行可能プログラムコードの提供
WO2006085595A1 (ja) * 2005-02-10 2006-08-17 Matsushita Electric Industrial Co., Ltd. プログラム変換装置及びプログラム実行装置
JP4828517B2 (ja) * 2005-02-10 2011-11-30 パナソニック株式会社 プログラム変換装置及びプログラム実行装置
US8135963B2 (en) 2005-02-10 2012-03-13 Panasonic Corporation Program conversion device and program execution device
JP2006235688A (ja) * 2005-02-22 2006-09-07 Kddi Corp プログラム難読化装置およびその方法ならびにプログラム
JP4675642B2 (ja) * 2005-02-22 2011-04-27 Kddi株式会社 プログラム難読化装置およびその方法ならびにプログラム
WO2006115217A1 (ja) * 2005-04-21 2006-11-02 Matsushita Electric Industrial Co., Ltd. プログラム変換装置及び秘密保持プログラム
JP2007086845A (ja) * 2005-09-20 2007-04-05 Kddi Corp クライアントサーバシステムおよび同システムにおけるサーバサイドプログラムの実現方法ならびにそのサーバ装置、サーバサイドプログラム
JP2009514060A (ja) * 2005-10-28 2009-04-02 パナソニック株式会社 難読化評価方法および難読化方法
US8108689B2 (en) 2005-10-28 2012-01-31 Panasonic Corporation Obfuscation evaluation method and obfuscation method
JP4970279B2 (ja) * 2005-10-31 2012-07-04 パナソニック株式会社 セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路
KR100841282B1 (ko) 2005-11-24 2008-06-25 후지제롯쿠스 가부시끼가이샤 보호된 실행 프로그램의 작성을 위한 기록 매체, 방법 및장치
JP2009543498A (ja) * 2006-07-12 2009-12-03 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ デジタルデータ処理装置の耐改竄性
JP2008090668A (ja) * 2006-10-03 2008-04-17 Kddi Corp プログラム難読化方法およびプログラム
JP2008102576A (ja) * 2006-10-17 2008-05-01 Kddi Corp プログラム解析方法およびプログラム
JP2010515945A (ja) * 2007-01-11 2010-05-13 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 実装のコピーの追跡
JP2010517119A (ja) * 2007-01-18 2010-05-20 パナソニック株式会社 難読化支援装置
US9589115B2 (en) 2007-01-18 2017-03-07 Panasonic Intellectual Property Management Co., Ltd. Obfuscation assisting apparatus
JP2008269398A (ja) * 2007-04-23 2008-11-06 Fuji Xerox Co Ltd プログラム難読化装置及びプログラム
JP2010191847A (ja) * 2009-02-20 2010-09-02 Fuji Xerox Co Ltd プログラム難読化プログラム及びプログラム難読化装置
JP2012526310A (ja) * 2009-05-06 2012-10-25 イルデト カナダ コーポレーション ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護
US9141787B2 (en) 2009-05-06 2015-09-22 Irdeto B.V. Interlocked binary protection using whitebox cryptography
JP2011150560A (ja) * 2010-01-22 2011-08-04 Kddi Corp ソフトウェア保護システム、ソフトウェア保護方法、ソフトウェア変換方法およびプログラム
JP2011209801A (ja) * 2010-03-29 2011-10-20 Kddi Corp ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム
JP2012133736A (ja) * 2010-12-24 2012-07-12 Kddi Corp ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム
JP2012221510A (ja) * 2011-04-13 2012-11-12 Safenet Inc 保護するためのルーチンの自動選択
JP2013186647A (ja) * 2012-03-07 2013-09-19 Yokohama National Univ 難読化装置、難読化方法、及び難読化プログラム、並びに難読化されたソースコード

Also Published As

Publication number Publication date
JP4739465B2 (ja) 2011-08-03
CA2293650C (en) 2012-09-25
AU7957998A (en) 1999-01-25
EP0988591A1 (en) 2000-03-29
US6668325B1 (en) 2003-12-23
CN1260055A (zh) 2000-07-12
WO1999001815A1 (en) 1999-01-14
CA2293650A1 (en) 1999-01-14

Similar Documents

Publication Publication Date Title
JP4739465B2 (ja) ソフトウェアセキュリティを増強するための混乱化技術
Collberg et al. A taxonomy of obfuscating transformations
Collberg et al. Sandmark-a tool for software protection research
EP1410150B1 (en) Protecting software applications against software piracy
Low Java control flow obfuscation
Collberg et al. Manufacturing cheap, resilient, and stealthy opaque constructs
Udupa et al. Deobfuscation: Reverse engineering obfuscated code
US9064099B2 (en) Software self-defense systems and methods
US20160364707A1 (en) Potentate: A Cryptography-Obfuscating, Self-Policing, Pervasive Distribution System For Digital Content
US8589897B2 (en) System and method for branch extraction obfuscation
Drape Intellectual property protection using obfuscation
Drape Obfuscation of Abstract Data− Types
Batchelder et al. Obfuscating Java: The most pain for the least gain
Cimato et al. Overcoming the obfuscation of Java programs by identifier renaming
Dalla Preda Code obfuscation and malware detection by abstract interpretation
Gampe et al. Safe, multiphase bounds check elimination in Java
Capiluppi et al. Code defactoring: Evaluating the effectiveness of java obfuscations
Novac et al. LLWM & IR-mark: Integrating software watermarks into an LLVM-based framework
Low A Taxonomy of Cbfuscating Transformations
Petráček LLVM obfuskátor
Gautam et al. Intensification of Software Security using Secure Obfuscation with Injecting and Detecting Code Clones
Patki Dasho java obfuscator
Udupa et al. Reverse Engineering Obfuscated Code
Das Code Obfuscation Using Code Splitting with Self-Modifying Code
Hamilton An Empirical Evaluation of Java Decompilation and Intellectual Property Protection via Software Watermarking

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050609

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050609

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090120

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090417

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090601

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090721

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100112

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100408

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101005

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110105

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110214

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110221

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110329

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110428

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140513

Year of fee payment: 3

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

EXPY Cancellation because of completion of term