JP2004511031A - ディジタル・データ保護構成 - Google Patents

ディジタル・データ保護構成 Download PDF

Info

Publication number
JP2004511031A
JP2004511031A JP2002512772A JP2002512772A JP2004511031A JP 2004511031 A JP2004511031 A JP 2004511031A JP 2002512772 A JP2002512772 A JP 2002512772A JP 2002512772 A JP2002512772 A JP 2002512772A JP 2004511031 A JP2004511031 A JP 2004511031A
Authority
JP
Japan
Prior art keywords
code
executable
block
execution
protected
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
JP2002512772A
Other languages
English (en)
Other versions
JP4892167B2 (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=26244674&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=JP2004511031(A) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Priority claimed from GB0017481A external-priority patent/GB0017481D0/en
Priority claimed from GB0102982A external-priority patent/GB0102982D0/en
Application filed by ビットアーツ リミテッド filed Critical ビットアーツ リミテッド
Publication of JP2004511031A publication Critical patent/JP2004511031A/ja
Application granted granted Critical
Publication of JP4892167B2 publication Critical patent/JP4892167B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

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/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Technology Law (AREA)
  • Storage Device Security (AREA)
  • Analogue/Digital Conversion (AREA)
  • Emergency Protection Circuit Devices (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
  • Bidet-Like Cleaning Device And Other Flush Toilet Accessories (AREA)

Abstract

最初にソフトウエアがRAM(20)内にロードされるとき、エンジン(30A)が、残り部分は空エリアとなるRAM(20)の先頭にインストールされる。被保護アプリケーションが呼び出されると、エンジンがまず、保護ブロック(38)に対する「呼び出し」コマンドを含む一連のステップを生成する(図3D)。呼び出し(36)に到達すると、保護ブロック(38)が実行されて各種のセキュリティ・チェックが完了する。それらが成功した場合には、ステップ2が生成されて呼び出し(36)に上書きされ、その結果、ステップ2および3を通常どおりに継続することが可能になる。つまり、セキュリティ・チェックに成功して完了するまで、被保護ソフトウエア(ステップ1、2、および3)が詮索の前にさらされない。
【選択図】図3

Description

【0001】
本発明は、ディジタル・データのための保護構成に関する。
【0002】
ソフトウエア・ファイルおよびデータ・ファイルを含むディジタル・データは、各種の理由から保護を必要とすることがある。たとえば、権限のないコピーに備えて保護が必要になることがある。ソフトウエアの場合は、ウィルス攻撃、ハッキングもしくは類似の行為による改ざんに備えて保護が必要とされることもある。
【0003】
本発明は、ディジタル・データのための改良された保護構成を提供する。
【0004】
本発明は、実行可能コードを包含するディジタル・データ保護構成を提供し、当該実行可能コードは、実行されたときに、被保護データを使用可能な形式で含む別のコードを生成することが可能になる、被保護データに関連する充分な情報を組み込んでいる。
【0005】
この構成は、被保護データの改ざんを検出するべく動作可能なセキュリティ手段を包含することが可能であり、前述の別のコードは、セキュリティ手段を呼び出して任意の改ざんを評価する少なくとも1つのインストラクションを組み込んでいるものとすることができる。好ましくは、呼び出しインストラクションが、前述の別のコード内における、実行可能コードのセットの必須ロケーションに含まれているものとし、かつ、セキュリティ手段が、実行時に実行可能コードのセットを再形成し、呼び出しインストラクションに置き換えるべく動作可能であるとする。また好ましくは、セキュリティ手段が、改ざんが検出されなかった場合に前述の別のコードを削除するべく動作可能であるとする。
【0006】
この構成は、さらに、セキュリティ手段のロケーションを変更し、かつ呼び出しインストラクションを修正して新しいロケーションを参照させるべく動作可能な配置変更手段を包含することができる。配置変更手段は、被保護データ内に含めることが可能であり、被保護コードが使用されている間にわたって反復的に動作することができる。
【0007】
実行可能コードは、被保護コードを生成するための実行可能インストラクションを包含することができる。この実行可能コードの実行は、好ましくは実行のために暗号解除インストラクションをインストールし、続く暗号解除インストラクションの実行が、被保護データの暗号解除をもたらす。暗号解除インストラクションは、当初、非実行可能形式でストアされるが、その実行が、被保護ソフトウエアの実行を認可するために必要となるものとすることが可能であり、さらにこの構成が、前述のコードのブロックを、少なくとも1つの変換鍵を必要とするアルゴリズムを使用して実行可能形式に変換するべく動作可能であり、かつそのアルゴリズム内において使用するための変換鍵を、実行可能形式もしくは非実行可能形式のターゲットのコードのブロックを参照することによって導出するべく動作可能な変換手段を含み、それによって、ターゲットのブロックが修正されていない場合に限り適切な変換鍵が導出されるものとすることができる。
【0008】
セキュリティ手段は、非実行可能形式でストアされる複数の実行可能コードのブロックであって、それぞれが被保護ソフトウエアの実行を認可するために実行を必要とする複数の実行可能コードのブロックを包含することが可能であり、変換手段は、各ブロックを実行可能形式に変換するべく動作可能であるとすることができる。各ブロックの変換は、好ましくはそれぞれのターゲット・ブロックから導出される変換鍵によって達成されるものとする。好ましくは少なくとも1つのブロックが、実行時に、続く実行のために別のブロックを実行可能形式に変換するべく動作可能であるとする。また好ましくは各ブロックが、実行時に、続く実行のために別のブロックを実行可能形式に変換するべく動作可能であるとする。
【0009】
前述のターゲット・ブロックあるいは各ターゲット・ブロックは、被保護ソフトウエア内または最初のセキュリティ手段内に含まれているものとすることができる。
【0010】
コードを変換するための前述のアルゴリズムあるいは各アルゴリズムは、CRCアルゴリズムを含むことができる。実行可能コードは、暗号化された形式の被保護データを、暗号解除のための実行可能インストラクションとともに組み込むことができる。被保護データは、実行可能コードおよび/またはデータ・ファイルを包含することができる。この構成は、コードを実行するべく動作可能なプロセッシング手段、および実行可能コードがストアされるメモリ手段を備えることが可能であり、前述の実行可能コードは、被保護データに関するスタート・ポイントとしてこの構成内において示されるメモリ・ロケーションにスタート・ポイントを伴ってメモリ手段内にストアされており、それによってプロセッサ手段が被保護データのアクセスを求めるとき、実行可能コードの実行がもたらされるものとすることができる。実行可能コードは、好ましくは実質的に暗号化されていない形式で被保護データを再形成するべく動作可能であるとする。
【0011】
被保護データは、少なくとも1つの実行可能インストラクションを含むことが可能であり、それが複数のステップを含み、それらのステップは、インストラクションを実施するために1を超える種類の順序で実行可能であり、実行可能コードは、当該実行可能コードの各実行時に変化する順序でステップを生成することによってこのインストラクションを生成するべく動作可能であるとすることができる。これらのステップの順序は、好ましくは各実行時に、実質的にランダムに選択される。これらのステップは、少なくとも1つのステップであって、被保護データの改ざんを検出するべく動作可能なセキュリティ手段の動作を開始するステップを含むことができる。実行可能コードは、実行可能インストラクションが実行されることになるごとに、ステップを生成するべく実行されるものとすることができる。
【0012】
実行可能コードは、各実行時に被保護データの一部を使用可能な形式で提供し、かつ残りのデータを改ざんされた形式で提供するべく構成され、それによって被保護データのすべてを使用可能な形式で提供するためには1を超える数の実行が必要になるものとすることができる。各部分が、被保護データ内の完全な実行可能ルーチンに対応しており、それによって被保護データを形成するルーチンの完全なセットが、実行可能コードの繰り返し実行によって生成可能であるとすることができる。実行可能コードの各実行は、好ましくは先行して生成された使用可能コードの改ざんをもたらし、それによって、もっとも新しい実行によって生成されたコードのみがこの構成の動作間において使用可能な形式となる。
【0013】
また本発明は、以上の定義のいずれかに従ったディジタル保護構成を含むメモリ手段を包含するコンピュータ・システムを提供する。
【0014】
さらに本発明は、コンピュータ・システムにインストールされたとき、以上の定義のいずれかに従ったディジタル・データ保護構成として動作可能であるソフトウエアを含むデータ・キャリアを提供する。
【0015】
さらに本発明は、コンピュータ・システムにインストールされたとき、以上の定義のいずれかに従ったディジタル・データ保護構成として動作可能であるコンピュータ・ソフトウエアを提供する。
【0016】
さらにまた本発明は、コンピュータ・ソフトウエアの二次アイテムのための保護を提供するべく動作可能なコンピュータ・ソフトウエアを提供し、この保護ソフトウエアは、1ないしは複数のセキュリティ・チェックに成功して完了したことに応答して被保護ソフトウエアの実行を認可するべく動作可能であり、かつ少なくとも1つの、非実行可能形式でストアされ、被保護ソフトウエアの実行を認可するために実行が必要となる実行可能コードのブロックを有するセキュリティ手段を包含し、さらにこの保護ソフトウエアは、前述のコードのブロックを、少なくとも1つの変換鍵を必要とするアルゴリズムを用いて実行可能形式に変換するべく動作可能な変換手段を包含し、当該変換手段は、さらに、このアルゴリズム内における使用のための変換鍵を、実行可能または非実行可能形式のターゲットのコードのブロックを参照することによって導出するべく動作可能であり、それによって、ターゲットのブロックが修正されていない場合に限り適切な変換鍵が導出されるものとなる。
【0017】
さらにまた本発明は、上記のコンピュータ・ソフトウエアを含むコンピュータ・メモリ・デバイスを提供する。
【0018】
さらにまた本発明は、上記のコンピュータ・ソフトウエアを用いて保護されるコンピュータ・ソフトウエアのアイテムを含むコンピュータ・システムを提供する。
【0019】
以下、添付図面を参照し、例示のみを目的として本発明の例についてより詳細に説明する。
【0020】
本発明を説明するために、まず、本発明を実施することができる単純なコンピューティング装置について簡単に述べておくことは有用である。図1は、プロセッサ12を含む従来のハードウエア・コンポーネントを備えたコンピューティング装置10を示しており、そこにはキーボード14およびディスプレイ16等の適切な入力および出力デバイスが接続されている。メモリは、ソフトウエアの実行間におけるプロセッサ12による使用のために、ハード・ドライブ18あるいはそれに類似の大容量メモリ・デバイスの形式、およびRAM(ランダム・アクセス・メモリ)20の形式で備えられている。この装置は、IBM PCとして知られるタイプ、あるいはそれに等価もしくは類似のマシンとすることができる。
【0021】
図2は、装置10のドライブ18上にストアされたソフトウエアを実行するために、従来はRAM20がどのように使用されていたかについて示している。最初にソフトウエアは、プロセッサ12によってドライブ18からRAM20内にロードされ、その結果、マシン・コードのステップ22(「ステップ1」、「ステップ2」等として図示)のシーケンスが、RAM20内に順次ストアされる。このステップのシーケンスは、「終了」インストラクション24を伴って終了する。ここで認識されようが、実際の例においては、ステップの数が図示のそれと同じでなくてよく、通常は非常に大きな数となろう。
【0022】
最初のステップ「ステップ1」には、習慣的にコードの「ローダ」ブロック26が前置され、実行時にはそれが、入力/出力デバイス14、16用のドライバ、あるいはそのほかの各種のアプリケーション・プログラムによって広く共有されるソフトウエア・リソースといったほかのリソースの識別をもたらし、RAM内のソフトウエアによる使用を可能にする。
【0023】
図2に示されている形式にソフトウエアをロードする間に、装置10のプロセッサ12は、図示の実行可能データのブロックに関するスタート・ポイントを、つまり「ローダ」26が始まるRAM20内のメモリ・ロケーションを記録する。図2においては(およびそのほかの図面において)、このスタート・ポイントの表記が、矢印28の使用によって表されている。
【0024】
装置10に、この時点においてRAM20内に収められているソフトウエアの実行が指示されると、プロセッサ12は、まずスタート・ポイント28として識別されるRAM20のロケーションに行き、そのロケーションにおいて見つかった実行可能データの実行を開始する。つまりプロセッサ12は、まず「ローダ」26を実行し、それに続いてステップ22を実行し、最終的に「終了」ステップ24において終了する。
【0025】
図2から明らかになることは、RAM20内のソフトウエアが暗号化されていない形式でさらされていることであり、したがってウィルス・ソフトウエアによる攻撃、権限のないコピー、ウィルスの生成その他によって当該ソフトウエアの攻撃を謀る悪意のあるユーザによる分析に対して無防備であるということである。
【0026】
(例1)
図3は、本発明に従った基本構成を示しており、それによってソフトウエアの保護が改善される。図3Aは、本発明に従って保護されているソフトウエアが、最初にドライブ18からロードされたときのRAM20の状態を示している。
【0027】
図3Aの状態においては、RAM20が、ここでは「エンジン」30と呼んでいる、スタート・ポイント28にロケートされた実行可能コードの先頭ブロックを含んでおり、それが被保護ソフトウエアであることがプロセッサ12に知らされる。RAM20の、「エンジン」30の下側32は空である。
【0028】
「エンジン」30は、上に述べたように実行可能コードである。しかしながら「エンジン」30の実行可能は、被保護ソフトウエアを実行するための実行可能ではない。むしろエンジン30は、「エンジン」30が実行されたときに被保護ソフトウエアを再形成し、それをRAM20の空領域32に書き込むために実行可能である。つまり、単純な態様においては「エンジン」30を、被保護データの暗号化されたバージョン(または暗号化されたバージョンが入手できるアドレス)、およびソフトウエアを暗号解除し、それを領域32に書き込むための実行可能ソフトウエアから構成することができる。
【0029】
この書類内において、暗号化という用語およびそれに関連する用語は、データがその使用可能な形式から直ちに実行可能でない別の型式に変換される、圧縮を含むあらゆるテクニックを指していることを明確に理解される必要がある。暗号解除ならびにそれに関連する用語は、伸張プロセスを含め、その逆のプロセスを指すために使用されている。
【0030】
図3Aから気付くことは、エンジン30がスタート・ポイント28に位置していることである。その結果、被保護ソフトウエアが呼び出されたとき、プロセッサ12は、最初にロケーション28に行き、したがって「エンジン」30を構成するコードを実行することになる。つまり最初に、図3Bに示されているように、被保護ソフトウエアが非暗号化形式で再形成されてスペース32が埋められる。
【0031】
プロセッサ12が「エンジン」30の実行を続けると、その結果として図3Bの34に示されているようにプログラム・ポインタが「ステップ1」の先頭に到達するが、その時点までには、「ステップ1」および残りの被保護データがスペース32内に再形成されており、それにより被保護ソフトウエアの実行が開始されることになる。
【0032】
ここで理解されるであろうが、「エンジン」30の実行は、図2に示されている従来の構成に比較すると、追加となるステップを構成する。しかしながら、マシン・コードにおける「エンジン」30の動作が充分に迅速となり、この余剰なステップをユーザに意識させないであろうと認識される。
【0033】
図3に示されているような基本動作について説明したが、この被保護データが、図2の従来の構成に比較して、コピーおよび分析に対してより脆弱でないことを理解することができる。これは、被保護データが、「エンジン」30を実行してしまうまで、つまり被保護ソフトウエアが呼び出されてしまうまで、攻撃、コピー、または分析に使用できないことによる。被保護データをドライブ18からRAM20にロードしただけでは、攻撃、コピー、または分析の前に被保護データをさらすという意味では充分でない。
【0034】
図3Aおよび3Bの構成は、図2の構成に対して改善されているが、「エンジン」30を実行してしまった後の被保護データが、図3Bにおいても図2の形式のRAM内と同じ態様で暴露されることは明らかである。さらに保護を向上するために、次に示す方法に従ってスペース32内にデータを再形成するべく「エンジン」30を修正することができる。
【0035】
(例2)
図3C〜3Eの例においては、RAM20が、当初、図3Aに示されている場合と同様に、この例では30Aというラベルの付された「エンジン」および空のRAM_32だけを有している。「エンジン」30Aの実行は、この場合にもスペース32を充填することになる。しかしながら、図3Dと図3Bを比較することによって、2つの変更が明らかになる。まず、「ステップ2」が「呼び出し」インストラクション36に置き換えられ、「エンジン」30Aによって「終了」インストラクション24の後に「保護」ブロック38が挿入されている。これは、以下の方法に従って達成される。
【0036】
「エンジン」30Aは実行中に被保護データを暗号解除する一方、「エンジン」30Aは、結果として得られる暗号解除済みコードをモニタし、コードの特定のパターンまたはシーケンスを探す。その詳細については、例3との関係から説明を後述する。「エンジン」30Aは、1つのシーケンスまたは1を超える数のシーケンスを探すことができる。当然のことながら、探しているシーケンスの長さは、そのシーケンスがロケートされる尤度(likelihood)に影響を与える。この例においては、「エンジン」30Aが「ステップ2」に対応するシーケンスを探す。このあらかじめ決定済みのコードのセット、すなわちこの場合であれば「ステップ2」がロケートされると、「エンジン」30Aは、その、あらかじめ決定済みのコードのセットを書き込むことなく、それに代えて、「保護」ブロック38の呼び出しを指示する「呼び出し」インストラクション36を書き込む。つまり、「エンジン」30Aの実行が完了したときには「ステップ2」に代わって「呼び出し」インストラクション36が存在し、被保護データが完全に可視にはならない。
【0037】
被保護ソフトウエアの実行時においては、いずれかの時点で「ステップ2」の開始が期待されるロケーションにプログラムが到達し、「呼び出し」インストラクション36を見ることになる。それにより「保護」ブロック38の実行が開始する。ブロック38は、2つの機能を有する。第1においては、「ステップ2」用のコードが(エンジン30の動作に類似する方法に従って)生成され、「呼び出し」インストラクション36に上書きされ、それによって被保護コードの暗号解除が完成する。ブロック38は、さらに従来のウィルス保護またはそれに類似する検査等のセキュリティ・チェックを行い、ウィルス保護が適正に実行されていること、および改ざんが検出されていないことを保証する。不適切なことがまったくない場合には、保護ブロック38が終了し、保護ブロック38に対する呼び出しが発生したロケーションに実行を返す。そのロケーションは、この時点において「ステップ2」用のコードの開始になっている。その後、通常の方法に従って「ステップ2」からオペレーションが継続する。
【0038】
この場合にも、マシン・コードにおける完全な動作によって、この追加のステップを、ユーザが気付くことのできない充分な速さにすることが可能である。
【0039】
このように、被保護コードは、そのコードが実行されるまで完全に暗号解除されず、そのためウィルス攻撃、権限のないコピー、あるいは悪意のある分析のリスクが著しく抑えられることが理解できる。
【0040】
「保護」ブロック38がチェック時に何らかの不適切なことを発見した場合には、適切な報復が実施される。単純な例においては、特にウィルス攻撃に対して効果的であるが、ブロック38がRAM20内に収められている被保護データのバージョン(つまり、RAM内のセクション32の全内容)を削除し、それによってウィルス、または被保護コードを汚染したウィルスの効果を削除する。
【0041】
ここで明らかになるであろうが、マシン・コードにおいて、また非常に多くの行のコードを伴う現実的な状況において動作している場合には、多くの「呼び出し」インストラクション36が「エンジン」30Aによって作成され、悪意のあるウォッチャがそのロケーションを予測し、あるいはマシン・コードの複雑なブロック内に見つかる従来的な呼び出しインストラクションと区別することが困難になる。したがって、悪意のあるウォッチャが保護の動作を分析すること、あるいはウィルスが保護を無効化することは、はるかに困難なものとなる。この保護は、エンジン30Aに、それ自体が変化する、おそらくは「呼び出し」インストラクションが挿入されるごとに変化するコードのブロックを待ち構えさせ、外部のオブザーバに対して呼び出しインストラクションの挿入を擬似ランダムにすることによって、さらに強化することができる。
【0042】
(例3)
図4Aおよび4Bは、ある意味で図3C、D、およびEと類似した保護構成を示しているが、以下のような追加のセキュリティを提供する。
【0043】
例2の構成は、保護されたブロックの末尾に配置される単独に識別可能なブロック38を使用するが、この例は、ブロック38と類似に動作するが保護されているソフトウエア内に埋め込まれるブロックを使用する。この埋め込みプロセスは、まず、図4Aを考察することによって説明が可能である。図4Aは、エンジン(この場合には30Bの符号を付している)が被保護ソフトウエアの多数行のコードを生成したが、実行をまだ完了していない状態であり、かつブロック38に対応する保護を生成していない状態のRAM20を示している。図4Aも略図的ではあるが、図3C〜3Eに示されているよりは詳細にRAM20の状態を示している。詳細に述べれば、RAM20の左側に付されている番号は、対応するマシン・コードのリスティングの行番号を示しており、マシン・コードによって提供される各種のプロシージャの間の境界を表すが、これらの境界は、RAM20を区切るラインによっても表されている。つまり、エンジン30Bの下側に、最初のプロセス「プロセス1」用のコードが第1,000行まで延び、それに続いて第2のプロセス「プロセス2」用のコードが第1,500行まで延び、さらに第3のプロセス「プロセス3」用のコードが第2,500行まで、最後に第4のプロセス「プロセス4」用のコードが第3,200行まで延びている。
【0044】
エンジン30Bは、実行を完了するために、RAM20内のエンジン30Bから第3,200行のリストの末尾までの間にブロック38に対応するインストラクションの挿入を試みる。これは、まずRAM20の内容を調べて、データを含んでいない領域を識別することによって達成される。プロセス「プロセス1」は、RAM20内において連続して示されているが、それにもかかわらず、各種の理由からデータを含まないメモリの領域が存在する。詳細に述べれば、アッセンブラおよびコンパイラ・ソフトウエアは、一般にそのルーチンに非効率な部分を有し、その結果としてRAMにデータを持たないデータレス・エリアが作られる。エンジン30Bは、これらのエリアの識別を試みる。しかしながら、エンジン30Bが機能するアルゴリズムは、ほかの理由からデータレス・エリアが生じる可能性があることも考慮しなければならない。たとえば、プロセス「ステップ1」等が、変数のカレント値、あるいは実行間にセットされたフラグの状態を記録するためにスクラッチ・パッドにアクセスを必要とすることがある。RAMのこれらのエリアは、最初は、ゼロを含むべくセットされることがあり、データを有していないように現れる。
【0045】
つまりエンジン30Bは、まずRAM20内を調べて、データレスであるように見えるあらゆるエリアを識別する。見かけ上のデータレス・エリアがロケートされるごとに、そのロケーションがエンジン30Bによって、将来の参照のために記録される。図4Aにおいては、たとえばプロセス「プロセス2」内に比較的大きなそれらしいエリアがあり、ゼロのみを含んでいることから見かけ上はデータレスである。プロセス「プロセス3」内においては、より小さいゼロを含んでいるエリアが明らかになる。実際例においては、さらに多くの、見かけ上のデータレス・エリアがロケートされる可能性がある。
【0046】
すべてのデータレス・エリアが識別された後は、エンジン30Bが、それらを分析していずれが真のデータレスであり、いずれがそのように見えるだけであるかを決定することができる。たとえば、エンジン30Bは、ソフトウエアの全体を逆アッセンブルし、逆アッセンブルしたリスティングを評価して見かけ上のデータレスとして識別されたエリアを呼び出すインストラクション、もしくはそれらのエリアにジャンプするインストラクション、あるいはそれらのエリアに対して書き込みまたは読み出しを行うインストラクションを探す。その種のインストラクションが、それらのエリアの識別を行っている場合には、対応するエリアがソフトウエアによって、たとえばスクラッチ・パッドとして使用される可能性が高い。したがって、そのエリアは、ソフトウエアの実行間に少なくとも断続的にデータ用に使用されることになるため、そのエリアを見かけ上のデータレス・エリアのリストから削除する。
【0047】
この方法に従って、見かけ上のデータレス・エリアのそれぞれのチェックを完了した後は、エンジン30Bがデータレス・エリアの使用を開始することができる。この例においては、プロセス「プロセス3」内の2つのエリアが、そこを識別する呼び出しまたはジャンプ・インストラクションを有していることがわかり、したがって、データレス・エリアのリストから削除され、プロセス「プロセス2」内のエリアがリスト内に残されているものと仮定する。
【0048】
プロセス「プロセス2」内のデータレス・エリアは、エンジン30Bによって、ブロック38の機能の1ないしは複数、たとえばセキュリティ・チェック等の機能が挿入され、また暗号解除アルゴリズムを表す実行可能コードによって充填される。この充填は、図4Bのハッチングによって示されているように、第1,300行から開始する。
【0049】
このとき第1,300行に生成されたコードのブロックを使用するために、続いてエンジン30Bは、ソフトウエア内のいずれかの場所、たとえばプロセス1内の第800行にあるデータのブロックを修正する。まず、第800行において開始するセクションの内容が、エンジン30Bによって読み出される。これには、そのエリアのオリジナルの内容の暗号化に使用される暗号化アルゴリズムが含まれる。その後、暗号化済みバージョンが、第800行から開始するエリアに書き戻される。図4Bにおいては、これが暗号化済みデータEのセットとして示されている。この暗号化済みデータには、エンジン30Bによって挿入される呼び出しインストラクションCが先行する。
【0050】
呼び出しインストラクションCは、第1,300行のコードを呼び出す。その結果、プロセス「プロセス1」の実行が第800行に到達すると、第1,300行が呼び出され、セキュリティ機能が実行された後に、第1,300行のエリアの暗号解除ルーチンが実行される。これらの暗号解除ルーチンは、その呼び出しが行われたエリアに作用するべく記述されており、それによってエンジン30Bの動作を反転して第800行のエリアを暗号解除した後、プロセス「プロセス1」の暗号解除済みの部分を第800行のエリアに書き戻す。
【0051】
第1,300行のエリアからの暗号解除ルーチンが実行された後は、コントロールが呼び出しのソース(第800行)に戻り、暗号解除済みのコードの実行が可能になる。
【0052】
「エンジン」30Bが、その機能を埋め込むための充分なデータレス・エリアをソフトウエア内に見つけられなかった場合には、追加の機能が第3,200行に書き込まれる。
【0053】
この例は、次に示す表を考察することによってさらに詳細に説明することが可能であり、この表の左側の列は行番号を、中央の列は16進数表示のマシン・コード・バイトを、右側の列は逆アッセンブル後のインストラクションをそれぞれ表している。
【0054】
【表1】
Figure 2004511031
【0055】
表1を参照すると、複雑なソフトウエア内には頻繁に現れるように、短いセクションのリストの中に3つの呼び出しインストラクションが含まれていることがわかる。各呼び出しインストラクションは、2バイトのE8およびそれに続く、呼び出し先アドレスを与える4バイトからなる。
【0056】
このように表1は、プロセス「プロセス1」内における第800行から開始するセクション等の、被保護ソフトウエアの実際のリスティングを表している。
【0057】
前述したようにエンジン30Bが、たとえば第01007B45行に呼び出しインストラクションを挿入した後は次のようになる。
【0058】
【表2】
Figure 2004511031
【0059】
表1と表2を並べて考察すると、表2の最初の行に挿入された呼び出しインストラクションが、特にほかと異なる形には見えないことが明らかになる。つまり、これらのセキュリティ機能をディセーブル(disable)するためにセキュリティ機能に対する呼び出しを識別することは、実際上、達成可能となりにくい法外に複雑なタスクになる。たとえば、潜在的なハッカーが、ソフトウエア内にセキュリティ機能が埋め込まれていることを理解していた場合であっても、セキュリティ機能をディセーブルするためには、ソフトウエア内のすべての呼び出しインストラクションを方法論的に調べて、セキュリティ機能を呼び出している呼び出しインストラクションがあるか否か、また、いずれがそれを行っているかということ明らかにする必要がある。今日の複雑なソフトウエア・アプリケーションのマシン・コード・リスティングは、非常に多くの呼び出しインストラクションを含んでいる。
【0060】
上記の説明から明らかになろうが、表2は、呼び出しインストラクション(図4Bの第800行のC)が挿入されたが、続くコードのセクションがまだ暗号化されていない中間段階を示している。
【0061】
また、数行の正当なコードが新しい呼び出しインストラクションによって上書きされていることも理解できる。これらの行を、セキュリティ機能の実行時に再形成されるようにセキュリティ機能内に記録することも可能であり、またそれに代えて、特定のセキュリティ機能に対する呼び出しインストラクションが、特定ターゲット行のコードに代えてだけ使用され、その結果、特定のセキュリティ機能が呼び出されるごとに、同一のコードが要求されてその呼び出しインストラクションが置き換えられるといったことも可能である。
【0062】
さらに、呼び出しインストラクションが、ソフトウエア内のいずれかの場所からの正当な呼び出し先となるコード・ブロックを上書きしないようにする必要があり、それを行うとソフトウエアがフェイルすることも明らかになろう。したがってエンジン30Bは、呼び出しインストラクションを書き込むことが可能なロケーションを探し出し、見かけ上のデータレス・エリアの識別に関連して前述した方法に従って、その種のロケーションを識別するべく構成されている。
【0063】
(例4)
図5Aおよび5Bは、もう1つの、例2の構成に類似した保護構成を示している。詳細に述べれば、これにおいても保護ブロック40が使用されている。
【0064】
図5Aは、最初に被保護コードがドライブ18からRAM20にロードされたときの状態を示している。この例における被保護コードは、プロセッサ12によって42にロードされるプログラムであり、そのスタート・ポイントが28により示されている。この例においては、例証のみを目的として、スタート・ポイントがメモリ・ロケーション10,000として示されている。
【0065】
プログラム42のインストールに加えて、ドライブ18からのダウンロードのオペレーションは、図5Aに示されているように、メモリ・ロケーション12,000から開始する保護ブロック40もインストールする。この保護ブロック40は、後述する理由から「エンジン」44を組み込んでいる。ブロック40に対する呼び出しは、例2との関連から説明を前述したプロセスに類似の方法に従ってプログラム42内に書き込まれる。
【0066】
保護ブロック40は、図3Dのブロック38に類似した態様で動作する。言い換えるとプログラム42は、改ざんの評価のためにブロック40にジャンプする。
【0067】
この種の性質を持った保護ジャンプは、呼び出しを待ち構えて、何らかの形式の保護コードと思われるコードを含むメモリ・ロケーションに規則的にジャンプする呼び出しを識別し、上書きによって呼び出しインストラクションをディセーブルする悪意のあるウォッチャもしくはウィルスによる攻撃ならびに無効化の攻撃を受けやすいと考えられる。
【0068】
この例においては、このタイプの攻撃が次のようにして妨げられる。保護ブロック40に対する最初の呼び出しインストラクションが現れたとき、保護ブロックが実行されて改ざんの評価が行われ、それが成功して完了すると、エンジン44が実行される。「エンジン」44は、2つの機能を実行する。一方の機能においてエンジン44は、プログラム42内の呼び出しインストラクションを異なるメモリ・ロケーション、たとえば13,000等を参照するように書き直す。これを行う前に「エンジン」44は、ロケーション13,000に、ブロック40を収める充分な空のメモリが存在することを保証するプロシージャを実行している。エンジン44の他方の機能は、メモリ・ロケーション13,000から開始する保護ブロック40(および44自体)を再形成することである。したがって、保護ブロック40が移動され、メモリ・ロケーション12,000に対する呼び出しインストラクションが、ロケーション13,000を呼び出すインストラクションによって上書きされる。その結果として、セキュリティ機能に対する呼び出しインストラクションが、プログラム42の実行の間に絶えず変更され、それにより悪意のあるユーザまたはウィルスが保護ブロック40に対する呼び出しを認識し、ディセーブルする上での困難が大幅に増加する。
【0069】
たとえば、あるハッカーが、そのロケーションに対する呼び出しを分析することによって、セキュリティ・コードのロケーションを識別したと確信している場合に、そのハッカーは、そのロケーションに対するすべての呼び出しを識別してそれらをディセーブルする単純なコードを記述すると考えられる。しかしながら、それぞれが異なる場所にセキュリティ・ブロックを有することになるため、そのソリューションは、特定のソフトウエアのすべてのコピーに対して包括的に適用できない。
【0070】
配置変更された保護ブロック40を図5Bに示す。
【0071】
(例5)
図6Aおよび6Bは、さらに別の例のデータ保護を示している。この例においては「エンジン」50が使用されて、例1および図3Aおよび3Bに関連して前述した説明に類似の方法に従って空のRAMセクション52内にコードのブロックが作られる。つまり、被保護コードが最初にドライブ18からRAM20にロードされるときは、エンジン50がRAM内にインストールされ、その残りが52において空となっている図6Aの左側に示されたポジションの関係になる。この例においては、エンジン50が、サブルーチンもしくは他のメイン・プログラム内の従属的なオペレーションのスタート・ポイントに配置される。そのサブルーチンが呼び出されると、「エンジン」50が実行されて領域52を充填するステップが生成される。それにより図6Aの右側に示されているように、4つのステップ「ステップ1」、「ステップ2」等を領域52内に番号順に伴うポジションの関係になる。「エンジン」50が実行されると、続いてステップ(「ステップ1」等)が実行され、サブルーチンが実行される。
【0072】
図6Bは、このサブルーチンが次に呼び出されたときの状態を示している。最初は、図6Bの左側に示されているように、RAM20が、このサブルーチンの最初の実行が終了したときの状態、すなわち図6Aの右側に示されている状態になっている。詳細に述べれば、「エンジン」50が、まだコードのブロックのスタート・ポイントに存在している。つまり、このサブルーチンが次に呼び出されたとき、「エンジン」50が再度実行される。しかしながら「エンジン」50は、実行ごとに異なる順序に従って、好ましくはランダムもしくは擬似ランダムの順序に従ってステップを生成するべく記述されている。これは、サブルーチンの実行に不利な影響をもたらすことなく達成することが可能であり、実際、「プリント」ステートメント等の多くの従来のルーチンは、マシン・コードで記述されたときに数千行の長さになることもあり、実質的にその任意の行は、実質的に任意の順序に従って実行可能である。特定の順序に従った記述を必要とする行のグループがある場合には、それらの行をブロックとして扱い、単一のステップとして記述すればよく、その結果、そのブロック内の順序は保存されるが、そのブロックのポジジョンは、「エンジン」50の実行ごとに変化する。
【0073】
1ないしは複数の「ステップ」を記述し、ウィルス攻撃または改ざんに抗する保護ルーチンを実施し、あるいは呼び出すことができる。それを行う場合には、その「ステップ」がサブルーチンの実行ごとに異なるポジションに現れることになる。したがって悪意のあるウォッチャは、絶えず変化するコードを見ることになり、ディセーブルのためにそれを分析して保護をロケートすることが困難もしくは不可能になる。それとは別に、悪意のあるウォッチャが、あるステップを保護に関連するものとして認識し、たとえばそのステップを上書きすることによってそれをディセーブルした場合にも、この悪意のある介入自体が、次にこのサブルーチンが呼び出された時点において「エンジン」50のオペレーションによって上書きされ、保護の動作が復元される。
【0074】
(例6)
RAM20が図3Bもしくは図6Aおよび6Bの右側に示されている状態にあるときは、完全な被保護データが暗号解除された形式で可視になる。それにもかかわらず前述した保護の形式がコードを保護することは認識されているが、同時に一部の状況においては、暗号化されていない完全なコードの暴露が、それがいかに一時的な暴露であったとしても保護の弱点を表すことが認識されている。さらに別の例は、どのようにすればこの困難が克服できるかについて例証する。再度、図3Aに示されている状態のRAM20を伴う図7Aから開始するが、それにおいては「エンジン」60がサブルーチンのスタート・ポイントにあり、それを除くRAM20は、62において空になっている。
【0075】
このサブルーチンが呼び出されると、プロセッサ12がスタート・ポイント28に行き、「エンジン」60の実行を開始する。「エンジン」60の最初の実行時に、スペース62内にコードのブロックが3つ生成される(この例においては、本発明の原理を例証するために3という数が選択されているが、これが本発明の範囲を限定することはない)。これらのブロックを図7Bに示す。つまり図7Bにおいては、64に「ステップ1」が作成され、その後にアスタリスクによって表されている、改ざんされているか、あるいは意味のないデータの2つのブロック66が続いている。それに代えて、ブロック66を空のままにしておくことも可能であるが、改ざんされているか、あるいは偽のデータを生成することは、より大量のコードを提供することによって、悪意のあるウォッチャもしくはウィルスによる分析をより困難にすると認められる。
【0076】
「エンジン」60によって生成されたときの「ステップ1」は、実行を「エンジン」60の先頭に返す「リターン」ステートメント68を伴って完了する。つまり、「ステップ1」の実行完了後には、「エンジン」60が再度実行される。「エンジン」60は、レジスタをセットして最初の実行がすでに生じたことを記録する。つまり、第2の実行が進行中であるとの認識の下に、「エンジン」60は、ブロック70の前後の改ざんされたブロック66とともに、その70に「ステップ2」を生成する。
【0077】
この場合においても、ブロック66を空のままとしてもよい。
【0078】
この時点において「ステップ2」の実行が可能になり、その後には、72の「エンジン」60へのリターンが続く。その後「エンジン」60の3番目の実行が、2つの改ざんされたブロック66とともに「ステップ3」を74に生成し、「ステップ3」の実行を可能にする。
【0079】
つまりこの方法に従って「エンジン」60の動作を繰り返すことによって、プロセッサ12が「ステップ1」;「ステップ2」;「ステップ3」の完全なシーケンスを実行することが可能になるが、いずれの時点においてもRAM20から完全なシーケンスが可視になることはなく、したがってこのシーケンスの分析もしくは改ざん、あるいはそれ自体もしくはそれが含む保護のディセーブルを困難な、または不可能なものとする。これにおいても悪意のあるウォッチャは、絶えず変化する(または「突然変異する」)コードを見ることになり、したがって適切に分析して攻撃することが実質的に不可能になる。
【0080】
ここで、デバッガ・ソフトウエアを使用するハッカーに対する保護に特に適している、さらに別の例を示すことができる。ハッカーは、ソフトウエアのセキュリティを攻撃するためにデバッガ・ソフトウエアをよく使用する。デバッガ・プログラムは、基本的に、複雑なソフトウエア内の誤りをチェックする正当な運用を意図している。デバッガ・プログラムは、一般に、ソフトウエア内の、オペレータが検討を希望するポイントに割り込みコマンドを挿入することによって機能する。ソフトウエアの実行が割り込みコマンドに到達すると、コントロールがデバッガ・プログラムに渡され、続いてそれが次のコードのブロックを調べて、ハイ・レベルまたはロー・レベルの言語を用いて結果をオペレータに提供し、それによってオペレータは、メイン・プログラムの実行の継続が許可される前にそのブロックをチェックすることが可能になる。
【0081】
セキュリティ・ルーチンを迂回しようとするハッカーによって使用される1つのアプローチは、デバッガ・プログラムを使用してセキュリティ・プロシージャが呼び出されるメイン・プログラム内のポイントを探すことである。そのポイントには、メイン・プログラムの実行時にそれらのルーチンがジャンプされるように、ジャンプ・コマンドが挿入される。より今日的なソフトウエアは、充分に複雑であり、メイン・プログラム内のこれらのポイントをロケートするタスクが困難になっているが、それにもかかわらず熟練した根気強いハッカーが、最終的にそれらを見つけ出せる可能性はある。一度それらを見つけ出した後のハッカーは、セキュリティ・ルーチンをディセーブルすることが可能であり、もっとも複雑なルーチンさえもそれによって無効化される。
【0082】
(例7)
図8は、本発明を実施するさらに別の例を示している。図8には、2つのソフトウエアのブロック120、122を含むRAM20が示されている。最初のブロック120は、本発明の構成によって保護されているソフトウエアである。ブロック122は、保護構成を実施するセキュリティ・ブロックである。被保護ソフトウエア20は、セキュリティ・ヘッダ126が前置されたアプリケーション124(ワード・プロセッサ・アプリケーション等)を含んでいる。
【0083】
アプリケーション124は、暗号化された形式でストアされることになり、圧縮を伴うこともある。つまりアプリケーション124は、これまでの提案に従いセキュリティ・ヘッダ126によって提供されるコントロールの下に実行可能形式に変換されるまで、すなわちコンピュータ・システム内に保持されているソフトウエア・ライセンスの詳細、ユーザの詳細、および現在日時(ソフトウエアが指定の期間に限ってライセンスされる場合)、その他のチェックといった各種のセキュリティ・チェックが行われた後にアプリケーション124が暗号解除され、伸張されるまで使用することができない。これらのチェックが成功して完了すると、ヘッダ126がアプリケーション124の暗号解除および伸張を行い、プロセッサのプログラム・ポインタをアプリケーション124の先頭に移動し、それによってコントロールをアプリケーション124に渡す。このタイプの保護は、多くの状況において有効となり得るが、前述したように「ジャンプ」コマンドを挿入してセキュリティ・ヘッダ126によって行われる1ないしは複数のチェックを迂回し、それによってすべての正常なセキュリティ・チェックが行われることなくアプリケーション124の実行を可能にするハッカーの攻撃を受けやすい。
【0084】
セキュリティ・ブロック122は、この欠点を解決するために提供されている。
【0085】
セキュリティ・ブロック122は、2つの主要な機能を提供するコードのブロックである。第1においては、通常はセキュリティ・ヘッダ126によって提供されるタイプの1ないしは複数のセキュリティ・チェックが、ブロック122の実行時に行われる。これらのチェックは、セキュリティ・ヘッダ126によって行われる二重チェックとするか、あるいはそれらへの追加とすることができる。セキュリティ・チェックをセキュリティ・ヘッダ126とブロック122の間に分ける方法は、広く多様な方法を用いて行うことが可能であり、それ自体は本発明の重要な側面ではない。
【0086】
しかしながら、この例においては、アプリケーション124を暗号解除する機能がヘッダ126によって指示されることはなく、ブロック122のコントロールの下に置かれる。アプリケーション124の暗号解除は、好ましくはブロック122の実行時の最終動作とし、それに続いてブロック122から暗号解除後のアプリケーション124にコントロールが返される。
【0087】
この方法によれば、ブロック122が、そのプロシージャの最後への到達に成功し、暗号解除が許可されて実行されるまで、アプリケーション124の暗号解除が生じることがあり得ない。
【0088】
したがってセキュリティ・ブロック122は、本発明によって提供される保護を迂回しようとするハッカーのターゲットになりやすい。ブロック122に対する攻撃の成功は、次のようにして防止される。
【0089】
セキュリティ・ブロック122は、当初(実行前)は、暗号化された形式で保持されている。暗号化は、暗号解除に少なくとも1つの変換鍵を要求する暗号化アルゴリズムによる。暗号解除に変換鍵を要求する暗号化アルゴリズムは、数多く知られている。変換鍵は、一般に数字となるか、あるいはアルゴリズム内において、変換鍵を構成する英数文字のマシン・コード値から数字形式に変換された後に数字形式で使用される。本発明とともに使用可能なアルゴリズムの1つのクラスは、CRC(巡回冗長検査)アルゴリズムとして知られている。CRCアルゴリズムは、ターゲットのコード・ブロックを評価してターゲット・ブロックの特性である数値を生成する。つまり、単純なCRCアルゴリズムは、ターゲットのコード・ブロックの各文字を表すマシン・コード値を互いに加算するものとすることができる。ほかのCRCアルゴリズムは、単純な加算プロセスよりはるかに複雑になることもある。しかしながら、ここで重要なことは、CRCアルゴリズムがターゲットのコード・ブロックに適用されるごとに、同一の値が返されることであり、ターゲット・ブロック内に変更があると異なる値が返されることである。
【0090】
この例においては、セキュリティ・ブロック122が、CRC暗号化アルゴリズムの使用によって暗号化された形式に保持されている。したがって、最初にブロック122が実行されるときに暗号解除ステップが必要になる。この暗号解除は、ブロック122の残りを非実行可能形式から実行可能形式へ暗号解除することを要求する。これは、ターゲット・ブロックからCRC値として導出される変換鍵に基づく暗号解除ルーチンを実行することによって達成される。ターゲット・ブロックは、好ましくは暗号化されたブロック122とする。
【0091】
これらの構成の結果は、アプリケーション124が呼び出されたときのイベントのシーケンスを説明することによってもっともよく理解することができる。
【0092】
最初に、プロセッサ12のプログラム・ポインタがセキュリティ・ヘッダ126の先頭にポイントされ、ブロック122にコントロールを渡す前にセキュリティ・チェックが実行される。この段階においては、まだアプリケーション124が暗号化された形式のままである。ブロック122もまた暗号化された形式であり、最初にその暗号解除が行われる。暗号解除は、変換鍵を必要とするアルゴリズムによって達成される。この変換鍵は、ブロック122自体から導出されたCRC値である。ブロック122が修正されていなければ、適切なCRC値が返されて変換が許される。その後、ブロック122を正常に実行することが可能になり、その結果としてブロック122の動作によってアプリケーション124が暗号解除されることになる。ブロック122が完全に実行された後は、コントロールがアプリケーション124に渡されて、通常の方法に従ってそれが実行される。しかしながら、ブロック122が何らかの形で修正されていた場合には、ブロック122のCRC値が変化している。その結果、暗号解除アルゴリズム内において変換鍵として使用される値が、正しい暗号解除に適切でなくなる。ブロック122の暗号解除されたバージョンは、改ざんされることになる。実際の状況においては、変換鍵に対するあらゆる変更が、それ以上にブロック122が実行されることを防止する充分な改ざんをもたらすと考えられる。これは、アプリケーション124を暗号化された形式のままに維持することになる。
【0093】
デバッガ・プログラムを使用してブロック122を分析しようとするあらゆる試みは、前述したように、ブロック122内への割り込みコマンドの挿入をもたらす。したがって、デバッガを使用してブロック122を調べる行為は、デバッガが使用されて変更が行われる前であっても、それ自体がブロック122のCRC値を変更することになる。CRC値に対する変更は、アプリケーション124の暗号解除を妨げる。このように、ブロック122によって提供されるセキュリティを調べる試みによって、セキュリティ・ブロックに対して、それを調べた結果としての修正がまったく行われない場合であっても、アプリケーション124の動作が妨げられる。
【0094】
セキュリティを迂回しようとするハッカーは、セキュリティ・チェックを受け持つと見られるコードのブロックの観察にもっとも関心を寄せることになる。したがって、セキュリティ・ブロック122を暗号解除するためのCRC値の生成に使用されるターゲット・ブロックが、アプリケーション124の暗号解除の認可に先行して1ないしは複数のセキュリティ・チェックを処理するブロックの少なくとも一部を含むことは好ましい。つまり、これらのセキュリティ・チェックのすべての実行が、暗号解除されたブロック122によって可能になり、それにおいてCRC変換鍵の導出が、暗号化されたブロック122の一部もしくは全部から可能になる。それに代えて、いくつかのチェックがブロック122によって実行されるようにしてもよく、その場合CRC値を完全に、もしくは部分的に、ヘッダ126の全部もしくは一部から導出するようにもできる。
【0095】
(例8)
図9は、例7のさらに複雑な変形を示している。図9に示されている多くの特徴は、図8の特徴に対応しており、それらの特徴には類似の番号が使用されている。
【0096】
図8および9の具体化の間における主要な相違は、セキュリティ・ブロック122の暗号化の方法にある。ブロック122は、複数のサブ‐ブロック130として示されている。サブ‐ブロック130は、まとまって暗号化された形式のブロック122を提供するが、各サブ‐ブロック130は、独立に暗号化される。それぞれは、同一のアルゴリズムおよびそれぞれの変換鍵によって暗号化してもよく、またそれぞれが同一の変換鍵を要求する異なったアルゴリズムによって、もしくは異なる変換鍵を要求する異なったアルゴリズムによって暗号化してもよい。
【0097】
図9の例の実行時は、図8に関連して説明した動作のシーケンスと概略で等しくなるが、次に述べる点が異なる。ブロック122が最初に呼び出されたとき、暗号解除アルゴリズムが実行されて最上位のサブ‐ブロック130だけが暗号解除される。これは、暗号解除が行われているサブ‐ブロック、もしくは別のサブ‐ブロック、あるいは別の場所にあるターゲット・ブロック(たとえばセキュリティ・ヘッダ126の全部もしくは一部)のCRC値を使用して行うことができる。暗号解除の後は、最初のサブ‐ブロック130の実行が可能になる。これは、セキュリティ・チェックもしくはそのほかの初期ルーチンの実施とすることができる。最初のサブ‐ブロック130の実行は、2番目のサブ‐ブロック130を暗号解除するインストラクションを伴って終了する。これは、変換鍵を、最初のサブ‐ブロック130の暗号解除に使用される変換鍵と同一とする場合であっても、好ましくは暗号解除の時点において導出される変換鍵を要求する暗号解除アルゴリズムによって達成される。つまり、最初のサブ‐ブロックの暗号解除以降におけるターゲット・ブロック内への介入がCRCコードの変更を招き、その結果、2番目のサブ‐ブロック130の適正な暗号解除がもたらされない。
【0098】
これらの動作をより完全な形で図10に示す。図10は、最初と2番目のサブ‐ブロック130A、130Bの間の境界における3行のコードを示している。サブ‐ブロック130Aは、第99行において最終行を伴って終了するが、その性質は本発明にとって重要ではない。続いて第100行が実行される。これは、暗号解除インストラクションである。このインストラクションは、暗号解除予定のデータのブロック、すなわちここでは第101〜200行を指定し、それは2番目のサブ‐ブロック130Bを表している。インストラクション100は、使用されるアルゴリズムも識別し、ここではそれがアルゴリズムAである。最後にインストラクション100は、アルゴリズムA内において使用する変換鍵を導出するためのターゲット・ブロックとして使用される行を指定(ここでは第101〜200行を指定)することによって、使用されるべき変換鍵を明示する。
【0099】
第100行が実行されると、実行が第101行に移る。第100行が暗号解除の成功に到達していれば、第101行が、2番目のサブ‐ブロック130Bの最初の動作を適正に示すことになる。この暗号解除の成功は、サブ‐ブロック130Bが修正されてなく、その結果、正しいCRC値が暗号解除鍵として使用された場合に得られる。しかしながら、2番目のサブ‐ブロック130Bが修正されていた場合、あるいはCRC値の計算が行われる時点においてデバッガ・プログラムによる検査が行われている場合には、正しくないCRC値が第101行の暗号解除に使用され、サブ‐ブロック130Bが改ざんされて、そのポイントにおいて実行が停止する。その場合、アプリケーション124は、暗号化された形式のままとなる。
【0100】
セキュリティ・ブロック122の実行が継続するに従って、前述の方法を用いて図9の矢印132に示されるようにサブ‐ブロックを進めることによって、各サブ‐ブロック130が順番に暗号解除される。ブロック122内に改ざんがなく、かつデバッガ・プログラムが使用されていない場合には、ブロック122が完全に改ざんのない形に暗号解除され、実行が図11に示されている最終サブ‐ブロック130の末尾への到達に成功する。最終サブ‐ブロック130の末尾、すなわちセキュリティ・ブロック122の実行の最後には、アプリケーション124を暗号解除するインストラクション(第998行)およびそれに続くアプリケーション124へ移動するインストラクション(第999行)がある。998における暗号解除は、本発明の原理をさらに適用するために、前述したようなCRC値として導出された暗号解除鍵を必要とするアルゴリズムを基礎とすることができる。第999行へは、各サブ‐ブロック130が適正に暗号解除された場合に限って到達し、適正に実行される。
【0101】
(例9)
前述した例7および8は、図8および9に示されるように、ソフトウエアの実行がRAM20に個別にインストールされるセキュリティ・ブロック122を伴って開始することを前提としている。図12Aおよび12Bに示されている第3の例は、次に説明するように、さらに暗号解除ならびに伸張ステップを含む。
【0102】
最初にRAM20は、単一ブロックのソフトウエア120を含んでいる(図12A)。これは、暗号化されたアプリケーション124、セキュリティ・ヘッダ126、およびこの例においてはアプリケーション124の末尾に取り付けられる形で示されているセキュリティ・スタブ(stub)140を組み込んでいる。セキュリティ・スタブ140は、例7または8のセキュリティ・ブロック122の圧縮ならびに暗号化の行われたバージョンを組み込んでいる。セキュリティ・ヘッダ126は、スタブ140を暗号解除および/または伸張し、結果を、セキュリティ・ブロック122を形成する独立したブロック(図12B)としてインストールするインストラクションを含む。セキュリティ・ヘッダ126が完全に実行されると、コントロールがセキュリティ・ブロック122に渡される。続く実行は、例7および8との関連から前述した説明と同様に進行することになる。
【0103】
この例の利点は、正当なユーザに対するソフトウエア・ライセンスの一部としてスタブ140が提供されることを可能にすることであり、その結果、ライセンスされたアプリケーションがインストールされると、ブロック120が、図9Aに示されるようにスタブ140を含む形でインストールされる。これは、アプリケーション124の適正にライセンスされたバージョンに、常にセキュリティ・スタブ140が伴うことを保証し、したがって本発明のソフトウエア保護構成の恩典によって、認可されたコピーが保護された状態に保たれることを保証する。
【0104】
詳細に述べれば、これらの例においては、暗号解除およびCRC値の計算のための多くの各種アルゴリズムを使用することができる。
【0105】
(要約)
これまで説明した例のそれぞれにおいて、実行可能コードの実行間にRAM内のコードが変化する。最も簡単な例(例1)においては、コードが1回だけ変化してルーチンを作成する。別の例においては、コードがより頻繁に変化し、いくつかの例においては、悪意のあるウォッチャが、絶えず変化するように現れるコードを見ることになる。
【0106】
いずれの場合においても、被保護データが、当初は使用可能な形式で存在しない。しかしながら、ほかの実行可能コードが被保護コードに関連付けされており、被保護データに関する情報を組み込んでいる。この情報は、そのロケーション、暗号化テクニックもしくは鍵、暗号化鍵のロケーション、あるいは暗号化された形式のコード全体に関係する情報とすることができる。これは、別の実行可能コードが別のコードを生成すること、すなわち保護された状態から被保護コードを解放し、使用可能な形式でのアクセスを許可するコードを生成することを可能にする。
【0107】
上記の構成には、非常に多くの変形および修正を行うことが可能である。詳細に述べれば、前述の説明の完全な理解から、そこに説明されている各種のテクニックを各種の組み合わせにおいて使用可能なことが容易に明らかになろう。たとえば、例3に関して説明した配置変更の原理を例5に組み込み、それにより一時的にのみ生成される例5のステップに加えて、それらが生成されるロケーションを、好ましくはランダムもしくは擬似ランダムに変更することが可能である。
【0108】
これまで示した例においては、被保護データが実行可能であったが、このテクニックは非実行可能データ・ファイルに対しても容易に適応することができる。
【0109】
以上の明細においては、特に重要であると思われる本発明の特徴に注意が注がれるべく努めているが、出願人が、特定の強調が置かれているか否かによらず、図面を参照した、および/またはそれに示されている上記のあらゆる特許性のある特徴、もしくは特徴の組み合わせに関する保護を主張していることが理解されるものとする。
【図面の簡単な説明】
【図1】
本発明の実施における使用のための高度に単純化した形式のコンピュータ・システムを示している。
【図2】
RAM内にソフトウエアをストアするための周知の構成の高度に略図化した表現である。
【図3】
本発明に従ったRAMの使用を示している。
【図4】
本発明に従った、配置変更構成を組み込んだRAMの使用を示している。
【図5】
本発明に従った、埋め込みセキュリティ・プロシージャを組み込んだRAMの使用を示している。
【図6】
本発明に従った、自己修正構成を組み込んだRAMの使用を示している。
【図7】
本発明に従った、被保護データの部分的な暗号解除に関する構成を組み込んだRAMの使用を示している。
【図8】
分離セキュリティ・ブロックを使用する本発明の別の例を実施するシステム内におけるRAMの内容を示した概略図である。
【図9】
図8に対応しており、図8の例の変形を示している。
【図10】
図8および9のセキュリティ・ソフトウエアのリスティングの一部を略図的に示している。
【図11】
図8および9のセキュリティ・ソフトウエアのリスティングの末尾を略図的に示している。
【図12】
本発明の実施の別の形式を略図的に示している。

Claims (40)

  1. 実行可能コードを包含するディジタル・データ保護構成であって、前記実行可能コードは、実行されたときに、被保護データを使用可能な形式で含む別のコードを生成することが可能になる、前記被保護データに関連する充分な情報を組み込んでいるものとするディジタル・データ保護構成。
  2. さらに前記被保護データの改ざんを検出するべく動作可能なセキュリティ手段を包含し、前記別のコードが、前記セキュリティ手段を呼び出して任意の改ざんを評価する少なくとも1つのインストラクションを組み込んでいるものとする請求項1記載の構成。
  3. 前記呼び出しインストラクションが、前記別のコード内における、実行可能コードのセットの必須ロケーションに含まれており、前記セキュリティ手段が、実行時に実行可能コードのセットを再形成し、前記呼び出しインストラクションに置き換えるべく動作可能であるとする請求項2記載の構成。
  4. 前記セキュリティ手段が、改ざんが検出されなかった場合に前記別のコードを削除するべく動作可能であるとする請求項2または3記載の構成。
  5. 前記セキュリティ手段が、前記必須ロケーションにおいてロケートされる暗号化されたコードを暗号解除し、かつ前記暗号化されたコードを対応する暗号解除されたコードに置き換えるべく動作可能であるとする請求項2〜4のいずれかに記載の構成。
  6. 前記セキュリティ手段が、前記別のコード内に埋め込まれているものとする請求項2〜4のいずれかに記載の構成。
  7. 前記セキュリティ手段が、前記別のコードによって使用されないロケーションに埋め込まれているものとする請求項6記載の構成。
  8. 前記実行可能コードが実行されたときに、少なくとも1つの埋め込みロケーションが識別され、前記埋め込みロケーションに、前記セキュリティ手段が書き込まれるものとする請求項7記載の構成。
  9. 前記別のコードをデコンパイルし、かつ前記デコンパイルされたコードを分析することによって1つの埋め込みロケーションが識別されるものとする請求項8記載の構成。
  10. さらに、前記セキュリティ手段のロケーションを変更し、かつ前記呼び出しインストラクションを修正して新しいロケーションを参照させるべく動作可能な配置変更手段を包含するものとする請求項2〜9のいずれかに記載の構成。
  11. 前記配置変更手段が、前記被保護データ内に含まれており、被保護コードが使用されている間にわたり反復的に動作するものとする請求項10記載の構成。
  12. 前記実行可能コードが、前記被保護コードを生成するための実行可能インストラクションを包含するものとする先行する請求項のいずれかに記載の構成。
  13. 前記実行可能コードが、暗号化された形式の前記被保護データを、暗号解除のための実行可能インストラクションとともに組み込んでいるものとする先行する請求項のいずれかに記載の構成。
  14. 前記実行可能コードの最初の実行が、実行のために前記暗号解除インストラクションをインストールし、続く前記暗号解除インストラクションの実行が、前記被保護データの暗号解除をもたらすものとする請求項13記載の構成。
  15. 前記暗号解除インストラクションが、当初は非実行可能形式でストアされており、かつ被保護ソフトウエアの実行を認可するために実行を必要とし、さらに前記構成が、前記コードのブロックを、少なくとも1つの変換鍵を必要とするアルゴリズムを使用して実行可能形式に変換するべく動作可能であり、かつ前記アルゴリズム内において使用するための変換鍵を、実行可能形式もしくは非実行可能形式のターゲットのコードのブロックを参照することによって導出するべく動作可能な変換手段を含み、それによって適切な変換鍵が、前記ターゲットのブロックが修正されていない場合に限り導出されるものとする請求項14記載の構成。
  16. 前記セキュリティ手段が、非実行可能形式でストアされる複数の実行可能コードのブロックであって、それぞれが前記被保護ソフトウエアの実行を認可するために実行を必要とする複数の実行可能コードのブロックを包含し、前記変換手段が、各ブロックを実行可能形式に変換するべく動作可能であるものとする請求項15記載の構成。
  17. 前記各ブロックの変換が、それぞれのターゲット・ブロックから導出される変換鍵によって達成されるものとする請求項16記載の構成。
  18. 少なくとも1つのブロックが、実行時に、続く実行のために別のブロックを実行可能形式に変換するべく動作可能であるものとする請求項16記載の構成。
  19. 各ブロックが、実行時に、続く実行のために別のブロックを実行可能形式に変換するべく動作可能であるものとする請求項18記載の構成。
  20. 前記ターゲット・ブロックもしくは各ターゲット・ブロックが、前記被保護ソフトウエア内に含まれているものとする請求項15〜19のいずれかに記載の構成。
  21. 前記ターゲット・ブロックもしくは各ターゲット・ブロックが、第1のセキュリティ手段内に含まれているものとする請求項15〜19のいずれかに記載の構成。
  22. コードを変換するための前記アルゴリズムもしくは各アルゴリズムが、CRCアルゴリズムを含むものとする請求項15〜21のいずれかに記載の構成。
  23. 前記被保護データが、実行可能コードおよび/またはデータ・ファイルを包含しているものとする先行する請求項のいずれかに記載の構成。
  24. コードを実行するべく動作可能なプロセッシング手段、および前記実行可能コードがストアされるメモリ手段を備え、前記実行可能コードが、前記被保護データに関するスタート・ポイントとして前記構成内において示されるメモリ・ロケーションにスタート・ポイントを伴って前記メモリ手段内にストアされており、それによって前記プロセッサ手段が、前記被保護データのアクセスを求めるとき、前記実行可能コードの実行をもたらすものとする先行する請求項のいずれかに記載の構成。
  25. 前記実行可能コードが、実質的に暗号化されていない形式で前記被保護データを再形成するべく動作可能であるとする先行する請求項のいずれかに記載の構成。
  26. 前記被保護データが、少なくとも1つの実行可能インストラクションを含み、それが複数のステップを含み、前記ステップが、前記インストラクションを実施するために1を超える種類の順序で実行可能であり、前記実行可能コードが、前記実行可能コードの各実行時に変化する順序で前記ステップを生成することによって前記インストラクションを生成するべく動作可能であるものとする先行する請求項のいずれかに記載の構成。
  27. 前記ステップの順序が、各実行時に、実質的にランダムに選択されるものとする請求項26記載の構成。
  28. 前記ステップが、少なくとも1つのステップであって、前記被保護データの改ざんを検出するべく動作可能なセキュリティ手段の動作を開始するステップを含むものとする請求項26または27記載の構成。
  29. 前記実行可能コードが、前記実行可能インストラクションが実行されることになるごとに、前記ステップを生成するべく実行可能であるものとする請求項26〜28のいずれかに記載の構成。
  30. 前記実行可能コードが、各実行時に前記被保護データの一部を使用可能な形式で提供し、かつ残りのデータを改ざんされた形式で提供するべく構成されており、それによって、前記被保護データのすべてを使用可能な形式で提供するためには1を超える数の実行が必要になるものとする先行する請求項のいずれかに記載の構成。
  31. 前記被保護データの各部分が、前記被保護データ内の完全な実行可能ルーチンに対応しており、それによって、前記被保護データを形成するルーチンの完全なセットが、前記実行可能コードの繰り返し実行によって生成可能であるものとする請求項30記載の構成。
  32. 前記実行可能コードの各実行が、先行して生成された使用可能コードの改ざんをもたらし、それによって、もっとも新しい実行によって生成されたコードのみが前記構成の動作の間において使用可能な形式になるものとする請求項30または31記載の構成。
  33. 先行するいずれかの請求項に従ったディジタル保護構成を含むメモリ手段を包含するコンピュータ・システム。
  34. コンピュータ・システムにインストールされたとき、請求項1〜32のいずれかに従ったディジタル・データ保護構成として動作可能であるソフトウエアを含むデータ・キャリア。
  35. コンピュータ・システムにインストールされたとき、請求項1〜32のいずれかに従ったディジタル・データ保護構成として動作可能であるコンピュータ・ソフトウエア。
  36. コンピュータ・ソフトウエアの二次アイテムのための保護を提供するべく動作可能なコンピュータ・ソフトウエアであって、保護ソフトウエアが、1ないしは複数のセキュリティ・チェックに成功して完了したことに応答して被保護ソフトウエアの実行を認可するべく動作可能であり、かつ少なくとも1つの、非実行可能形式でストアされ、前記被保護ソフトウエアの実行を認可するために実行が必要となる実行可能コードのブロックを有するセキュリティ手段を包含し、さらに前記保護ソフトウエアが、前記コードのブロックを、少なくとも1つの変換鍵を必要とするアルゴリズムを用いて実行可能形式に変換するべく動作可能な変換手段を包含し、前記変換手段は、前記アルゴリズム内における使用のための変換鍵を、実行可能または非実行可能形式のターゲットのコードのブロックを参照することによって導出するべく動作可能であり、それによって適切な変換鍵が、前記ターゲットのブロックが修正されていない場合に限り導出されるものとするコンピュータ・ソフトウエア。
  37. 請求項36に従ったコンピュータ・ソフトウエアを含むコンピュータ・メモリ・デバイス。
  38. 請求項36または37に従ったコンピュータ・ソフトウエアを用いて保護されるコンピュータ・ソフトウエアのアイテムを含むコンピュータ・システム。
  39. 実質的にこの明細書に、添付図面の参照を伴って記載されているような、ディジタル・データ保護構成。
  40. 先行する請求項のいずれかと同一の発明の範囲であるか否か、もしくはそれに関係するか否かによらず、ここに開示されている新規の内容を含む新規の内容もしくは組み合わせ。
JP2002512772A 2000-07-18 2001-07-13 ディジタル・データ保護構成 Expired - Fee Related JP4892167B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB0017481.3 2000-07-18
GB0017481A GB0017481D0 (en) 2000-07-18 2000-07-18 Digital data protection arrangement
GB0102982.6 2001-02-07
GB0102982A GB0102982D0 (en) 2001-02-07 2001-02-07 Software protection
PCT/GB2001/003159 WO2002006925A2 (en) 2000-07-18 2001-07-13 Digital data protection arrangement

Publications (2)

Publication Number Publication Date
JP2004511031A true JP2004511031A (ja) 2004-04-08
JP4892167B2 JP4892167B2 (ja) 2012-03-07

Family

ID=26244674

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002512772A Expired - Fee Related JP4892167B2 (ja) 2000-07-18 2001-07-13 ディジタル・データ保護構成

Country Status (9)

Country Link
US (1) US7162735B2 (ja)
EP (1) EP1366404B1 (ja)
JP (1) JP4892167B2 (ja)
CN (1) CN100538587C (ja)
AT (1) ATE357026T1 (ja)
AU (1) AU2001270814A1 (ja)
DE (1) DE60127310T2 (ja)
GB (1) GB2381625C (ja)
WO (1) WO2002006925A2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005301949A (ja) * 2004-03-19 2005-10-27 Toshiba Kyaria Kk マイクロコンピュータ
JP2008532113A (ja) * 2005-02-11 2008-08-14 シンプレックス メジャー センドリアン ベルハッド ソフトウェア保護方法
JP2011227897A (ja) * 2010-04-16 2011-11-10 Thomson Licensing 自己修正計算機コードのチェックサム検証のための方法、装置およびコンピュータ・プログラム担体

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE60317242T2 (de) * 2002-08-01 2008-02-14 Matsushita Electric Industrial Co., Ltd., Kadoma Apparate und Verfahren zum Entschlüsseln von verschlüsselten Datenblöcken und zum Lokalisieren der verschlüsselten Datenblöcke im für die Ausführung verwendeten Speicherbereich
US7734932B2 (en) * 2003-11-10 2010-06-08 Broadcom Corporation System and method for securing executable code
TWI227628B (en) * 2003-11-26 2005-02-01 Inst Information Industry System and method for image protection
US7500108B2 (en) 2004-03-01 2009-03-03 Microsoft Corporation Metered execution of code
AU2005255946C1 (en) * 2004-06-14 2009-10-29 The University Of North Carolina At Greensboro Systems and methods for digital content security
JP4612461B2 (ja) * 2004-06-24 2011-01-12 株式会社東芝 マイクロプロセッサ
US7971255B1 (en) 2004-07-15 2011-06-28 The Trustees Of Columbia University In The City Of New York Detecting and preventing malcode execution
ATE425503T1 (de) 2004-12-22 2009-03-15 Ericsson Telefon Ab L M Wasserzeichenmarkierung eines computerprogrammcodes
US7720765B1 (en) * 2006-07-20 2010-05-18 Vatari Corporation System and method for using digital strings to provide secure distribution of digital content
FR2915007A1 (fr) * 2007-04-12 2008-10-17 St Microelectronics Sa Protection de l'execution d'un programme
US8250656B2 (en) * 2007-11-21 2012-08-21 Mikhail Y. Vlasov Processor with excludable instructions and registers and changeable instruction coding for antivirus protection
US20100132047A1 (en) * 2008-11-24 2010-05-27 Honeywell International Inc. Systems and methods for tamper resistant memory devices
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.
US20100287205A1 (en) * 2009-05-06 2010-11-11 Htc Corporation Operating system / electronic device and method for storing or reading a file
TWI484355B (zh) * 2009-05-06 2015-05-11 Htc Corp 作業系統/電子裝置與檔案之存取方法
EP2831787B1 (en) 2012-03-30 2020-07-08 Irdeto B.V. Method and system for preventing and detecting security threats
US12124586B2 (en) * 2013-09-13 2024-10-22 Omnissa, Llc Risk assessment for managed client devices
EP3123384B1 (en) * 2014-03-28 2021-12-22 Irdeto B.V. Protecting an item of software
US9530016B1 (en) * 2016-01-29 2016-12-27 International Business Machines Corporation Using source taint analysis to reduce false positives in an advanced persistent threat (APT) protection solution
US10496814B2 (en) * 2016-03-07 2019-12-03 Intertrust Technologies Corporation Software integrity checking systems and methods
RU2634172C1 (ru) * 2016-06-02 2017-10-24 Акционерное общество "Лаборатория Касперского" Способ передачи управления между адресными пространствами
CN109739620A (zh) * 2018-12-20 2019-05-10 武汉科锐逆向科技有限公司 一种基于vm引擎的保护方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04163627A (ja) * 1990-10-29 1992-06-09 Hitachi Ltd プログラム変換方法
US6006328A (en) * 1995-07-14 1999-12-21 Christopher N. Drake Computer software authentication, protection, and security system

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4120030A (en) * 1977-03-11 1978-10-10 Kearney & Trecker Corporation Computer software security system
US4525599A (en) * 1982-05-21 1985-06-25 General Computer Corporation Software protection methods and apparatus
DE3415209A1 (de) 1983-04-29 1984-10-31 N.V. Philips' Gloeilampenfabrieken, Eindhoven Speichereinheit mit einem speicher und einer schutzeinheit
US4633388A (en) * 1984-01-18 1986-12-30 Siemens Corporate Research & Support, Inc. On-chip microprocessor instruction decoder having hardware for selectively bypassing on-chip circuitry used to decipher encrypted instruction codes
US4847902A (en) * 1984-02-10 1989-07-11 Prime Computer, Inc. Digital computer system for executing encrypted programs
EP0175487A3 (en) * 1984-08-23 1989-03-08 Btg International Limited Software protection device
CA1238427A (en) 1984-12-18 1988-06-21 Jonathan Oseas Code protection using cryptography
US4888802A (en) * 1988-06-17 1989-12-19 Ncr Corporation System and method for providing for secure encryptor key management
US5081675A (en) 1989-11-13 1992-01-14 Kitti Kittirutsunetorn System for protection of software in memory against unauthorized use
US5224166A (en) * 1992-08-11 1993-06-29 International Business Machines Corporation System for seamless processing of encrypted and non-encrypted data and instructions
US5666411A (en) * 1994-01-13 1997-09-09 Mccarty; Johnnie C. System for computer software protection
DE4405330A1 (de) * 1994-02-21 1995-08-24 Vobis Microcomputer Ag Verfahren zum Scrollen von mehreren Rasterzeilen in einem Fenster eines Grafikmodus betriebenen Bildschirms eines Personalcomputers
JPH07295800A (ja) 1994-04-22 1995-11-10 Advance Co Ltd ソフトウエアプロテクト方式
US6636970B2 (en) 1995-02-14 2003-10-21 Fujitsu Limited Software encoding using a combination of two types of encoding and encoding type identification information
JPH08305558A (ja) * 1995-04-27 1996-11-22 Casio Comput Co Ltd 暗号化プログラム演算装置
JP3747520B2 (ja) * 1996-01-30 2006-02-22 富士ゼロックス株式会社 情報処理装置及び情報処理方法
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
US6237137B1 (en) 1997-10-15 2001-05-22 Dell Usa, L.P. Method and system for preventing unauthorized access to a computer program
JP2002529815A (ja) 1998-11-05 2002-09-10 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 複数の暗号化アルゴリズムを用いるセキュアメモリ管理ユニット
AU6607000A (en) 1999-07-22 2001-02-13 Open Security Solutions, Llc A computer system and process for accessing an encrypted and self-decrypting digital information product

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04163627A (ja) * 1990-10-29 1992-06-09 Hitachi Ltd プログラム変換方法
US6006328A (en) * 1995-07-14 1999-12-21 Christopher N. Drake Computer software authentication, protection, and security system

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005301949A (ja) * 2004-03-19 2005-10-27 Toshiba Kyaria Kk マイクロコンピュータ
JP4669666B2 (ja) * 2004-03-19 2011-04-13 東芝キヤリア株式会社 マイクロコンピュータ
JP2008532113A (ja) * 2005-02-11 2008-08-14 シンプレックス メジャー センドリアン ベルハッド ソフトウェア保護方法
JP4922951B2 (ja) * 2005-02-11 2012-04-25 シンプレックス メジャー センドリアン ベルハッド ソフトウェア保護方法
JP2011227897A (ja) * 2010-04-16 2011-11-10 Thomson Licensing 自己修正計算機コードのチェックサム検証のための方法、装置およびコンピュータ・プログラム担体
US9471758B2 (en) 2010-04-16 2016-10-18 Thomson Licensing Method, a device and a computer program support for verification of checksums for self-modified computer code

Also Published As

Publication number Publication date
WO2002006925A2 (en) 2002-01-24
JP4892167B2 (ja) 2012-03-07
GB0303284D0 (en) 2003-03-19
DE60127310T2 (de) 2007-12-20
GB2381625B (en) 2005-01-19
GB2381625C (en) 2008-12-12
ATE357026T1 (de) 2007-04-15
DE60127310D1 (de) 2007-04-26
EP1366404B1 (en) 2007-03-14
AU2001270814A1 (en) 2002-01-30
US20020038428A1 (en) 2002-03-28
US7162735B2 (en) 2007-01-09
WO2002006925A3 (en) 2003-10-02
CN100538587C (zh) 2009-09-09
GB2381625A (en) 2003-05-07
EP1366404A2 (en) 2003-12-03
CN1575445A (zh) 2005-02-02

Similar Documents

Publication Publication Date Title
JP4892167B2 (ja) ディジタル・データ保護構成
US9659157B2 (en) Systems and methods for watermarking software and other media
US7111285B2 (en) Method and system for protecting software applications against static and dynamic software piracy techniques
JP4702957B2 (ja) 耐タンパ・トラステッド仮想マシン
US7237123B2 (en) Systems and methods for preventing unauthorized use of digital content
US8583939B2 (en) Method and apparatus for securing indirect function calls by using program counter encoding
US20080263366A1 (en) Self-verifying software to prevent reverse engineering and piracy
KR20120032477A (ko) 화이트박스 암호화를 사용하는 연동 바이너리 보호 방법
WO2003090021A2 (en) Security framework for protecting rights in computer software
US20110271350A1 (en) method for protecting software
US10331896B2 (en) Method of protecting secret data when used in a cryptographic algorithm
AU2002219852B2 (en) Systems and methods for preventing unauthorized use of digital content
AU2002219852A1 (en) Systems and methods for preventing unauthorized use of digital content
AU2023220809A1 (en) Protecting software
AU2008200472A1 (en) Systems and methods for preventing unauthorized use of digital content related applications

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20060309

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20060309

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080710

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110118

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110408

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110531

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110928

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

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20111003

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111122

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111219

R150 Certificate of patent or registration of utility model

Ref document number: 4892167

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20141222

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

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees