抗タンパーコードを生成するシステム及び方法
抗タンパーコードを生成するシステム及び方法が、ここに記載されている。一実施形態において、本方法は、第1のオブジェクトコードブロックを受け取ることを備えている。本方法はまた、第1のオブジェクトコードブロックを第2のコードブロックに翻訳することを備えており、この翻訳は、抗タンパー技術を第1のオブジェクトコードブロック又は第2のオブジェクトコードブロックに適用することを含んでいる。本方法はまた、第2のオブジェクトコードブロックを実行することを備えている。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、コンピュータデータ処理の分野に関するものであり、特には、抗タンパー(tamper-resistant:改ざんに対抗する)ソフトウェアを生成する技術に関する。
【背景技術】
【0002】
抗タンパーソフトウェアは、変更、改ざん、及び/又は攻撃することの困難なソフトウェアである。コードの不明瞭化(code obfuscation)は、抗タンパーソフトウェアを達成するための1つの技術である。一般に、コードの不明瞭化が目標とするところは、コードのブロック中で何が起こっているのかを攻撃者が決定することを困難にすることである。攻撃者がデバッガーやエミュレーターを使用する場合、コードの不明瞭化はコードの理解又は変更を困難にすることが可能である。
【0003】
或るコード不明瞭化の技術によれば、追加の命令がプログラムに追加される。この命令は、攻撃者を混乱させたり、及び/又は補助結果(ancillary results)を生成するために追加されるのであり、実行が或る点を過ぎて続行可能である前に確認されなければならない。このコード不明瞭化の方法に伴う1つの問題点は、一般に、それが人手によって変更されなければならないコードを必要とするということである。更に、特にソフトウェアの一部が、システムサービスの限定を伴う抗タンパーの解釈的環境(interpretive environment)の中で動作しなければならない場合は、完全に再構築されなければならない現存のソフトウェアを必要とする場合もある。
【発明の開示】
【0004】
ここには、抗タンパーコードを生成するシステム及び方法について記載する。一実施の形態において、本方法は、第1のオブジェクトコードブロックを受け取ることを備えている。本方法はまた、第1のオブジェクトコードブロックを第2のオブジェクトコードブロックに翻訳することを備え、この翻訳は、第1のオブジェクトコードブロック又は第2のオブジェクトコードブロックに抗タンパー技術を適用することを含む。本方法はまた、第2のオブジェクトコードブロックを実行することを備えている。
【0005】
一実施の形態において、本システムは、プロセッサと、このプロセッサに接続されたメモリ部とを備えている。本システムにおいて、メモリ部は、ランタイムに第1のオブジェクトコードプログラムのブロックを第2のオブジェクトコードプログラムのブロックに翻訳する翻訳部を含んでおり、第2のオブジェクトコードプログラムのブロックは翻訳の結果として不明瞭化され、また、第2のオブジェクトコードプログラムのブロックはシステムコールを含んでいる。メモリ部はまた、システムコールのいつくかのためのサービスを提供するランタイムサポート部を含んでおり、このランタイムサポート部はシステムコールのその他のためのサービスを拒否し、また、サービスは抗タンパーポリシーに基づいて拒否される。
【発明を実施するための最良の形態】
【0006】
以下、本発明の一例について図面を用いて説明するが、本発明は図示された構成に限定されるものではない。
【0007】
ここには、抗タンパーコードを生成するシステム及び方法が記載されている。以下の記述においては、多くの特別な詳細構成が述べられている。しかし、本発明の実施形態はこれらの特別な詳細構成なしで実施されてもよいものと理解される。他の例では、この記述の理解が不明瞭にならないよう、周知の回路、構造、及び技術は詳細に示されていない。
なお、この記述では、「一実施形態」又は「実施形態」という用語は、その言及されている構成が本発明の少なくとも1つの実施形態に含まれているということを意味している。更に、この記述における「一実施形態」という個々の用語は、必ずしも同一の実施形態を意味するのではなく、しかし、いずれも相互に相容れないものでもなく、このことはもしそのように述べられていなくとも当業者には極めて明らかなことである。従って、本発明は、ここに記載された実施形態の各種の組み合わせ及び/又は統合を含むものであってもよい。更に、この記述において、「模範的な実施形態」という語句は、その言及されている実施形態が1つの例又は例示であることを意味している。
【0008】
ここで、ブロック図は、本発明の模範的な実施形態を示す。またここで、フローチャートは、本発明の模範的な実施形態の動作を示す。フローチャートの動作は、ブロック図に示された模範的な実施形態を参照して記述される。しかし、フローチャートの動作は、ブロック図を参照して議論された実施形態以外の本発明の実施形態によって行なわれることも可能であり、また、ブロック図を参照して議論された実施形態は、フローチャートを参照して議論された動作とは異なる動作を行なうことも可能である、と理解されるべきである。更に、フローチャートは連続した動作を描いたものであるが、或る実施形態はこれらの動作のいくつかを並行して行なうことも可能である、と理解されるべきである。
【0009】
実施例についての以下の記述は、4つのセクションに分かれている。第1のセクションでは、システムレベルの概要が説明される。第2のセクションでは、模範的な実現について記述される。第3のセクションでは、模範的な実施形態を用いる方法が記述される。第4のセクションでは、模範的なハードウェア及び動作環境について記述される。
【0010】
<システムレベルの概要>
このセクションでは、本発明の模範的な実施形態のシステム構成を提供する。図1〜2は、抗タンパーコードを生成するための、選択可能な2つのシステムを示す。図1〜2の各機能部の動作は、後に続くセクションで記述されている。以下では、コードを不明瞭化するための技術を含む、幾つかの抗タンパー技術について議論する。このコード不明瞭化の技術は、単独で、又は、システムコールを限定したり補助結果を確認するような他のコード不明瞭化技術や抗タンパー技術と組み合わせて、使用可能である。
【0011】
図1は、本発明の模範的な実施形態に係る、動的翻訳を用いて抗タンパーコードを生成するシステムを示すブロック図である。図1に示されるように、抗タンパーコードシステム100は翻訳環境132を含み、この翻訳環境132は、翻訳器110、実行部112、翻訳キャッシュ114、及びランタイムサポート部116を含んでいる。このシステム100はまたコンパイラ102を含んでおり、このコンパイラ102はオブジェクトコード格納部103に接続されている。このオブジェクトコード格納部103はローダ104に接続され、このローダ104は翻訳器110に接続されている。翻訳器110は翻訳キャッシュ114に接続されている。翻訳器110はまた実行部112に接続され、この実行部112はランタイムサポート部116に接続されている。ランタイムサポート部116はシステムリソース118に接続されている。
【0012】
一実施形態によれば、コンパイラ102は高水準言語コンパイラ(例えば、Objective C コンパイラ、C++ コンパイラ、Java(登録商標) コンパイラ、C コンパイラ等)である。コンパイラ102は高水準ソースコードプログラムを1つ以上のオブジェクトコードブロックにコンパイルし、それをオブジェクコード格納部103に格納する。オブジェクトコード格納部103は、何らかの適当な記憶媒体(例えば、RAM、ROM、ディスク等)であり得る。
【0013】
ローダ104は、オブジェクトコードブロックを翻訳器110へロードする。
このシステム100の動作を、以下に記す。
【0014】
図2は、本発明の模範的な実施形態に係る、静的翻訳を用いて抗タンパーコードを生成するシステムを示すブロック図である。図2に示されるように、抗タンパーコードシステム200はランタイム環境216を含んでいる。このランタイム環境216は、実行部210及びランタイムサポート部212を含んでいる。抗タンパーコードシステム200はまたコンパイラ208を含み、このコンパイラ208はオブジェクトコード格納部204に接続されている。このオブジェクトコード格納部204は翻訳器206に接続されている。オブジェクトコード格納部204はまたローダ202に接続され、このローダ202は実行部210に接続されている。この実行部210はランタイムサポート部212に接続されている。このランタイムサポート部212はシステムリソース214に接続されている。
【0015】
一実施形態によれば、コンパイラ208は高水準言語コンパイラ(例えば、Objective C コンパイラ、C++ コンパイラ、Java(登録商標)コンパイラ、C コンパイラ等)である。コンパイラ208は高水準ソースコードを1つ以上のオブジェクトコードブロックにコンパイルする。コンパイラ208はまた、このオブジェクトコードブロックをオブジェクコード格納部204に格納する。コンパイラ208はネットワークサーバ上に遠隔配置することが可能であり、一方、このシステム200の他の要素はネットワーククライアント上に局所的に格納される(上述したコンパイラ102の記載を参照のこと)。一実施形態では、オブジェクトコード格納部204はまた、翻訳器206によって生成されたオブジェクトコードを格納する。本発明の実施形態によれば、オブジェクトコード格納部204は、何らかの適当な記憶媒体(例えば、RAM、ROM、ディスク等)であり得る。
【0016】
一実施形態では、ランタイム環境216は実行部210及びランタイムサポート部212を含んでいる。実施例によれば、実行部210はプログラム命令を実行するための何らかの適当な機構であり得る。例えば、実行部210は、プログラム命令を実行するのに必要な何らかのプロセッサ及び/又はメモリを含むことができる。上記プログラム命令は、バイトコード又はオブジェクトコードの命令であり得る。更に、プログラム命令は、ランタイムサポート部212によってサービスされるシステムコールを含んでいてもよい。一実施形態において、ランタイムサポート部212は、システムコールをサービスするためのソフトウェア及び/又はハードウェアを含んでいる。実行部210及びランタイムサポート部212の動作は、以下で、より詳細に記述する(次のセクションを参照のこと)。
【0017】
本発明の実施形態によれば、図1及び図2の各機能部(例えば、翻訳器110、ランタイムサポート部116等)は、統合又は分離されることで、より少ない又はより多くの数の機能部を形成するようにすることも可能である。実施形態によれば、各機能部は、ここに記載された機能を行なうのに必要な、キュー、スタック、又はその他のデータ構造を含んでいてもよい。更に、各機能部は、何らかの適当な通信方法(メッセージ伝達、パラメータ伝達、信号等)を用いて通信可能なように結合されていてもよい。加えて、各機能部は、何らかの適当な相互接続構造(完全接続(fully connected)、ハイパーキューブ等)に従って接続可能である。本発明の実施例と共に使用される各機能部のいずれかは、ここに記載した動作を行なうための命令を含むマシン読み取り可能な媒体(マシン可読媒体)を含んでいてもよい。マシン読み取り可能な媒体は、マシン(例えばコンピュータ)によって読み取り可能な形式の情報を提供(すなわち、格納及び/又は送信)する何らかの機構を含んでいる。例えば、マシン読み取り可能な媒体は、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記録媒体、光記録媒体、フラッシュメモリデバイス、電気・光・音響又は他の伝達信号形態(例えば、搬送波、赤外線信号、ディジタル信号等)等を含む。本発明の実施形態によれば、各機能部は、抗タンパーコードを生成する動作を実行するための他のタイプのロジック(例えば、ディジタルロジック)であってもよい。
【0018】
<模範的な実現>
このセクションでは、上述したシステムによって行なわれる模範的な動作について説明する。このセクションでは、図3〜7が示される。以下の議論において、図3は、抗タンパーコードをコンパイルし、翻訳し、実行する一般的な動作を記載している。図4及び図5は、オブジェクトコードを抗タンパーオブジェクトコードに動的及び静的に翻訳する方法を記載している。図6はランタイムサポート動作を記載しており、図7はオブジェクトコードを不明瞭化する方法を記載している。
【0019】
図3は、本発明の模範的な実施形態に係る、ソフトウェアを生成、翻訳、及び実行する動作を示すフローチャートである。このフローチャートは抗タンパーコードシステムの一般的な動作を記載しており、このシステムの各要素の詳細な動作はその後のフローチャートに記載されている。フローチャート300の動作は、図1の模範的な抗タンパーコードシステムを参照して記載される。フローチャート300は、ブロック302から始まる。
【0020】
ブロック302では、ソースコードがコンパイルされて、最初のオブジェクトコードが生成される。例えば、コンパイラ102がソースコードプログラムをコンパイルして、最初のオブジェクトコードプログラムを生成する。一実施形態において、最初のオブジェクトコードは、仮想のマシン上で実行可能なバイトコードを含んでいる。一実施形態において、最初のオブジェクトコードは、特別なプロセッサ構造(例えば、PowerPC、MIPS、Intel Pentium(登録商標)等)上での実行に適したフォーマットとなっている。実施形態によれば、オブジェクトコードは、何らかの適当なローダフォーマットであってもよい。フローはブロック304に続く。
【0021】
ブロック304では、最初のオブジェクトコードが抗タンパーオブジェクトコードに翻訳される。例えば、翻訳器110が、最初のオブジェクトコードを抗タンパーオブジェクトコードに翻訳する。一実施形態では、ローダ104が格納部(不図示)から最初のオブジェクトコードを取り出し、この最初のオブジェクトコードを翻訳器110へ渡す。翻訳器110は、最初のオブジェクトコードを受け取った後、翻訳中に抗タンパー技術を遂行することにより、最初のオブジェクトコードを抗タンパーオブジェクトコードに翻訳する。一実施形態において、翻訳器110は、翻訳を遂行する度に、最初のオブジェクトコードを異なる抗タンパーオブジェクトコードに翻訳可能である。一実施形態において、抗タンパー技術はオブジェクトコードを不明瞭化することを含んでいる。オブジェクトコードを不明瞭化する動作は、後に、図7を参照して、より詳細に記す。フローはブロック306に続く。
【0022】
ブロック306に示されるように、抗タンパーコードオブジェクトが実行される。例えば、実行部112が抗タンパーオブジェクトコードを実行する。一実施形態において、翻訳器110が抗タンパーオブジェクトコードを実行部112へ送り、ここで抗タンパーオブジェクトコードが実行される。抗タンパーオブジェクトコードを翻訳及び実行する動作は、後に、図4〜5を参照して、より詳細に記す。このフローは、ブロック306で終了する。上述したように、図3は抗タンパーコードを生成するシステムの一般的な動作を記載し、一方、図4及び図5は翻訳器及び実行部の一層詳細な動作を記載している。
【0023】
図4は、本発明の模範的な実施形態に係る、オブジェクトコードを動的に翻訳し実行する動作を示すフローチャートである。フローチャート400の動作は、図1の模範的なシステムを参照して記載される。特に、フローチャート400は、翻訳器110及び実行部112によって行なわれる動作を主に記載する。フローチャート400は、ブロック40
2から始まる。
【0024】
ブロック402に示されるように、最初のオブジェクトコードブロックが選択される。例えば、翻訳器110が、操作を加えるための最初のオブジェクトコードブロックを選択する。一実施形態においては、最初のオブジェクトコードブロックは、仮想のマシン上で実行可能なバイトコードを含んでいるが、それに代わる実施形態は、プロセッサ上で実行可能なオブジェクトコードブロックを必要とする。フローはブロック404に続く。
【0025】
ブロック404では、最初のオブジェクトコードブロックが既に翻訳されたかどうかが決定される。例えば、翻訳器110が、最初のオブジェクトコードブロックが既に翻訳されたかどうかを決定する。一実施形態においては、翻訳器110が、翻訳キャッシュ114を調べて、最初のオブジェクトブロックが既に翻訳されたかどうかを決定する。最初のオブジェクトコードブロックがまだ翻訳されていない場合、フローはブロック406へと続く。そうでない場合、フローはブロック416へと続く。
【0026】
ブロック416では、翻訳された抗タンパーオブジェクトコードブロックがなくなったかどうかが決定される。例えば、翻訳器110が、翻訳キャッシュ114の中の翻訳された抗タンパーオブジェクトコードブロックを探し、それがなくなったかどうかを決定する。翻訳された抗タンパーブロックは、所定期間よりも長く翻訳キャッシュ114内に格納された後に、消滅する。例えば、翻訳された抗タンパーブロックが5つの時間単位(5 time units)以上の間キャッシュに格納されていると、それは消滅する。翻訳された抗タンパーコードブロックがなくなった場合、フローはブロック406へと続く。そうでない場合は、ブロック410へと続く。或る実施形態では、翻訳された抗タンパーオブジェクトコードブロックはなくならず、従って、これらの実施形態においてはブロック416がフローから省略されてもよい。そのような場合、ブロック404からの「YES」の経路はブロック410へと続くことになる。
【0027】
ブロック410では、抗タンパーオブジェクトコードブロックが翻訳キャッシュから取り出される。例えば、翻訳器110が、翻訳キャッシュ114から抗タンパーオブジェクトコードブロックを取り出す。ブロック410から、フローはブロック412へと続く。
【0028】
ブロック406では、最初のオブジェクトコードブロックが抗タンパーオブジェクトコードブロックに翻訳される。例えば、翻訳器110が、最初のオブジェクトコードブロックを抗タンパーオブジェクトコードブロックに翻訳する。一実施形態では、翻訳器110が、最初のオブジェクトコードブロックを抗タンパーオブジェクトコードブロックに翻訳する前に不明瞭化する。従って、最初のオブジェクトコードブロックを不明瞭化した結果として、翻訳が、不明瞭化されたオブジェクトコードブロックを生成する(すなわち、抗タンパーオブジェクトコードブロックが、不明瞭化されたコードを含む)。それに代わる実施形態では、翻訳器110が、最初のオブジェクトコードブロックを第2のオブジェクトコードブロックに翻訳し、これを不明瞭化して抗タンパーオブジェクトコードブロックを形成する。それに代わる実施形態では、翻訳器110が、同一プロセスの中で最初のオブジェクトコードブロックを翻訳及び不明瞭化する。すなわち、翻訳器110は、抗タンパーオブジェクトコードを生成する時に、最初のオブジェクトコードブロックを一命令ずつ(instruction-by-instruction)翻訳及び不明瞭化していく。或る実施形態では、オブジェクトコードブロックが翻訳される度に、翻訳器110が異なるオブジェクトコードを生成する。例えば、翻訳されてキャッシュされたオブジェクトコードがなくなると、翻訳器110が、なくなったブロックとは異なる、翻訳されたオブジェクトコードブロックを生成する。
【0029】
一実施形態では、翻訳器110が、最初のオブジェクトコードブロックを抗タンパーオ
ブジェクトコードブロックに翻訳し、また、この抗タンパーオブジェクトコードブロックを証明する手段を使用する。例えば、翻訳器110が抗タンパーオブジェクトコードブロックのチェックサムを計算して格納する。或いは、翻訳器110が抗タンパーオブジェクトコードブロックにディジタル署名を行なう。抗タンパーオブジェクトコードブロックを実行する前に、実行部112が、チェックサムを確認するか、又はディジタル署名を証明して、抗タンパーオブジェクトコードブロックが変更されていないことを確かめてもよい。その他には、実行部112が、元のオブジェクトコードに追加された命令によって或る補助結果が生成されたことを確認するようにしてもよい。チェックサム、ディジタル署名、及び補助結果の確認のみを記したが、本発明の実施形態では、抗タンパーオブジェクトコードブロックを証明するための何らかの適当な技術を使用可能である。フローはブロック408へと続く。
【0030】
ブロック408では、抗タンパーオブジェクトコードブロックが翻訳キャッシュに格納される。例えば、翻訳器110が、抗タンパーオブジェクトコードブロックを翻訳キャッシュ114に格納する。フローはブロック412へ続く。
【0031】
ブロック412に示されるように、抗タンパーオブジェクトコードブロックが実行される。例えば、実行部112が抗タンパーオブジェクトコードブロックを取り出して実行する。一実施形態では、実行部112が、ランタイムサポート部116を用いて、抗タンパーオブジェクトコードブロック内に含まれるシステムコールを実行する。ランタイムサポート部116の動作は、後に図6についての議論の中で、より詳細に記載する。フローはブロック414へと続く。
【0032】
ブロック414では、キャッシュされた抗タンパーオブジェクトコードブロックに対して、何らかの望ましい変更が行われる。例えば、もし望まれるのであれば、翻訳器110が、翻訳キャッシュ114内に格納されたオブジェクトブロックを更に変更することが可能である。ブロック414でフローが終了する。フロー400は、単一のオブジェクトコードブロックを翻訳して実行するものとして示されているが、フロー400は追加のオブジェクトコードブロックのために繰り返されるようにしてもよい。
【0033】
フロー400の動作は、高速のコード実行を考慮に入れている。コードはネイティブプロセッサの命令に翻訳されるので、その結果は抗タンパーのインタプリタ環境よりも高速である。
【0034】
図5は、本発明の模範的な実施形態に係る、オブジェクトコードプログラムを静的に翻訳し実行する動作を示すフローチャートである。図5のフローチャートは、図2の模範的な翻訳システムを参照して説明する。特に、フローチャート500は、翻訳器206及び実行部210の動作を主に記述する。フローチャート500はブロック502から始まる。
【0035】
ブロック502では、最初のオブジェクトコードプログラムが受け取られる。例えば、翻訳器206が、オブジェクトコードプログラムをオブジェクトコード格納部204から取り出す。一実施形態では、ソフトウェア導入プロセス(すなわち、ソフトウェアを格納し、それを実行用に構成するプロセス)の進行中に、翻訳器206がオブジュクトコード格納部204からオブジェクトコードプログラムを受け取る。それに代わる実施形態では、ソフトウェア導入プロセス中に、翻訳器206がネットワーク接続を介してオブジェクトコードプログラムを受け取る。フローはブロック504へ続く。
【0036】
ブロック504では、最初のオブジェクトコードプログラムが抗タンパーオブジェクトコードプログラムに翻訳される。例えば、翻訳器206がオブジェクトコードプログラム
を抗タンパーオブジェクトコードプログラムに翻訳する。一実施形態では、これは最初のオブジェクトプログラムを不明瞭化することを含み、これについては後に更に詳しく説明する(図7を参照のこと)。上述したように、一実施形態においては、翻訳器206が抗タンパーオブジェクトコードプログラムのチェックサム又はディジタル署名を決定する。チェックサムが実行ユニット210によって使用されることで、抗タンパーオブジェクトコードプログラムが変更されているかどうかを決定することが可能である。フローはブロック506へ続く。
【0037】
ブロック506では、抗タンパーオブジェクトコードプログラムが格納される。例えば、翻訳器206が抗タンパーオブジェクトコードプログラムをオブジェクトコード格納部204に格納する。フローはブロック508へ続く。
【0038】
ブロック508では、抗タンパーオブジェクトコードプログラムがロードされる。例えば、ローダ202が抗タンパーオブジェクトコードプログラムを実行部210へロードする。フローはブロック510へと続く。
【0039】
ブロック510では、抗タンパーオブジュクトコードプログラムが実行される。例えば、実行部210が抗タンパーオブジェクトコードプログラムを実行する。一実施形態では、オブジェクトプログラムが、システムリソース214へのアクセスを要求するシステムコールを含んでいる。一実施形態では、実行部210がランタイムサポート部212と協働して、システムコールをサービスする。システムコールをサービスする動作は、後に図6についての議論の中で、より詳細に説明する。一実施形態では、抗タンパーオブジェクトコードプログラムが、異なるコンピュータシステム上で実行可能である。例えば、ロード動作(ブロック508)は、翻訳(ブロック504)を行なうコンピュータシステム以外のコンピュータシステムに、抗タンパーオブジェクトコードをロードする。ブロック510でフローが終了する。
【0040】
上述した図4及び図5についての議論では抗タンパーオブジェクトコードを動的又は静的に生成する動作を説明したが、図6はシステムコールをサービスする動作を示している。
【0041】
図6は、本発明の模範的な実施形態に係る、抗タンパーポリシーに基づきシステムコールをサービスする動作を示すフローチャートである。フローチャート600の動作は、ランタイムサポート部116の動作を示している。図6のフローチャートの動作は、図1に記載された模範的システムを参照して説明する。フローチャート600はブロック602から始まる。
【0042】
ブロック602に示されるように、システムコールが受け取られる。例えば、ランタイムサポート部116が実行部112からシステムコールを受け取る。一実施形態では、システムコールは、オペレーティングシステムからリソースを要求する機構である。実施形態によれば、システムコールは、システムリソース(例えば、ディスクドライブ、メモリ管理部等)へのアクセスを提供することのような限定された動作を実行部112に行なわせる、オブジェクトコード命令又はバイトコードである。フローはブロック604へと続く。
【0043】
ブロック604では、システムコールをサービスすることが許可されているかどうかが決定される。例えば、ランタイムサポート部116が、システムコールサービスすることが許可されているかどうかを決定する。一実施形態では、ランタイムサポート部116が、抗タンパーポリシーをチェックして、システムコールをサービスすることが許可されているかどうかを決定する。実施形態によれば、抗タンパーポリシーは、ランタイムサポー
ト116内に格納されたデータ構造で表され得る。ランタイムサポート部116は上記データ構造を調べて、抗タンパーポリシーがシステムコールをサービスすることを考慮に入れているかどうかを決定する。ランタイムサポート部116がシステムコールをサービスすることを許可されていれば、フローはブロック608へと続く。そうでなければ、フローはブロック606へと続く。
【0044】
ブロック606に示されるように、エラーが送信される。例えば、ランタイムサポート部116が実行部112へエラーを送信する。606でフローが終了する。
【0045】
ブロック608では、システムコールがサービスされる。例えば、ランタイムサポート部116がシステムコールをサービスする。一実施形態では、ランタムサポート部116が、システムリソース118へのアクセスを提供することにより、システムコールをサービスする。一実施形態では、実行部112及びシステムリソース118が第1のオペレーティングシステムによって制御され、一方、システムコールは第2のオペレーティングシステムで使用されるようフォーマット化される。従って、ランタイムサポート部116は、第1のオペレーティングシステム用にフォーマット化されたシステムコールをサービスするのに、第2のオペレーティングシステムがどのサービスを提供しなければならないかを決定する。言い換えれば、ランタイムサポート部116は、システムコールをもう1つのオペレーティングシステムから現在のオペレーティングシステム(すなわち、実行部112を制御するオペレーティングシステム)のサービス上へマップする。一実施形態では、第1及び第2のオペレーティングシステムは一般には同一であるが、第2のオペレーティングシステムはシステムコールの限定された部分をサポートする。ブロック608でフローが終了する。
【0046】
或る実施形態は、以下に記載された動作の1つ以上を遂行することにより、コードを不明瞭化することが可能である。一実施形態では、コードの不明瞭化は、不明瞭化の識別名を決定して該識別名に基づく1つ以上の動作を行なうことにより達成される。上記識別名は、ROMシリアル番号、ハードウェアアドレス、クロック値等のような、マシン固有の属性であり得る。或いは、上記識別名は、ユーザ識別名、コンピュータ識別名、アカウント識別名、又はその他のユーザ関連情報等のような、ユーザ属性から決定可能である。識別名を決定した後、この識別名に基づいて生成された無関係な(extraneous)コードをオブジェクトコード内に挿入可能である。更に、ダイレクトソースコードに相当するものを持たないオブジェクトコード機能(object code features)が、識別名に基づいて生成可能であり、そのようなオブジェクトコード機能が、その後、オブジェクトコードに挿入可能である。
【0047】
その他の不明瞭化技術として、補助結果を生成する追加のコードが、識別名に基づいて生成可能である。この追加のコードは、その後、オブジェクトコードに挿入可能である。識別名が異なる時にコードが実行されないようにすると、抗タンパーが改善される。
【0048】
幾つかのコード不明瞭化技術及び抗タンパー技術がここで述べられたが、本発明の実施形態は、翻訳中に適用されるべきあらゆるコード不明瞭化技術又は抗タンパー技術を考慮に入れている。
【0049】
<本発明の方法>
このセクションでは、本発明の実施形態によって遂行される方法を説明する。或る実施形態では、この方法はマシン読み取り可能な媒体に格納された命令(例えばソフトウェア)によって遂行され、一方、他の実施形態では、この方法はハードウェア又は他のロジック(例えばディジタルロジック)によって遂行される。
【0050】
このセクションでは、図7〜10について議論される。特に、図7は、抗タンパーコードを生成する動的翻訳器によって行なわれる動作を記載しており、一方、図8は、識別名に基づくコード不明瞭化を用いて抗タンパーコードを生成する動的翻訳器の動作を記載している。図9は、抗タンパーポリシーに基づきシステムコールをサービスする動作を記載している。更に、図10は、導入時のオブジェクトコード不明瞭化のための動作を記載している。
【0051】
図7は、本発明の模範的な実施形態に係る、動的翻訳を用いて抗タンパーコードを生成する方法を示すフローチャートである。フローチャート700はブロック702で始まり、ここで第1のオブジェクトコードブロックが受け取られる。フローはブロック704へ続く。ブロック704では、第1のオブジェクトコードブロックが第2のオブジェクトコードブロックに翻訳される。フローはブロック706へ続く。ブロック706では、第2のコードブロックが実行される。ブロック706でフローが終了する。
【0052】
図8は、本発明の模範的な実施形態に係る、識別名に基づくコード不明瞭化を用いて抗タンパーコードを生成する動作を示すフローチャートである。フローチャート800はブロック802で始まる。ブロック802では、マシンの状態に基づき識別名が決定される。フローはブロック804へ続く。ブロック804では、第1のオブジェクトコードブロックが第2のオブジェクトコードブロックに翻訳され、この第2のオブジェクトコードブロックが上記識別名を用いて不明瞭化される。フローはブロック906へと続く。ブロック806では、第1のブロックが実行される。ブロック806でフローが終了する。
【0053】
図9は、本発明の模範的な実施形態に係る、抗タンパーポリシーに基づきシステムコールをサービスする動作を示すフローチャートである。フローチャート900はブロック902で始まる。ブロック902では、第1のオブジェクトコードブロックのシステムコールが受けとられ、ここで、このシステムコールは第1のオペレーティングシステムからのサービスを要求するようフォーマット化される。フローはブロック904へ続く。ブロック904に示されるように、上記サービスを提供するのに第2のオペレーティングシステムのどのシステムコールサービスが必要とされるのかが決定される。フローはブロック906へ続く。ブロック906では、システムコールをサービスするためのシステムコールサービスが不能であるかどうかが、抗タンパーポリシーに基づき決定される。フローはブロック908へと続く。ブロック908に示されるように、システムコールをサービスするためのシステムコールが不能でない場合、システムコールがサービスされる。ブロック908でフローは終了する。
【0054】
図10は、本発明の模範的な実施形態に係る、オブジェクトコードがインストールされた場合におけるオブジェクトコードの翻訳及び不明瞭化を行なう動作を示すフローチャートである。フローチャート1000は、ブロック1002で始まる。ブロック1002では、第1のオブジェクトコードプログラムがインストールされ、この第1のオブジェクトコードプログラムが第2のオブジェクトコードプログラムに翻訳され、そして、第1のオブジェクトコードプログラム又は第2のオブジェクトコードプログラムが不明瞭化される。フローはブロック1004へ続く。ブロック1004に示されるように、第2のオブジェクトコードプログラムがその実行のために格納される。ブロック1004でフローが終了する。
【0055】
<ハードウェア及び動作環境>
このセクションでは、本発明の実施形態が実施され得る模範的なハードウェア及び動作環境の概要を提供する。
【0056】
図11は、本発明の或る実施形態と共に使用される模範的なコンピュータシステムを示
す図である。図11に示されるように、コンピュータシステム1100は1つ以上のプロセッサ1102を備えている。コンピュータシステム1100はまた、メモリ部1130、プロセッサバス1122、及び入力/出力コントローラ(IOC)1124を含んでいる。プロセッサ1102、メモリ部1130、及びIOC1124はプロセッサバス1122に接続されている。プロセッサ1102は、何らかの適当なプロセッサ構造を備えていてもよい。コンピュータシステム1100は1つ、2つ、3つ、又はそれ以上のプロセッサを備えていてもよく、それらのいずれかが本発明の実施形態に従った一連の命令を実行してもよい。
【0057】
メモリ部1130は翻訳環境132を含んでいる。メモリ部1130はデータ及び/又は命令を記憶しており、例えばダイナミックランダムアクセスメモリ(DRAM)のような何らかの適当なメモリを備えていてもよい。コンピュータシステム1100はまた、IDEドライブ及び/又はその他の適当な記録デバイスを含んでいる。グラフィックコントローラ1104は、本発明の実施形態に従い、表示デバイス1106上での情報の表示を制御する。
【0058】
入力/出力コントローラ(IOC)1124は、コンピュータシステム1100のためのI/Oデバイス又は周辺機器へのインタフェースを提供する。IOC1124は、プロセッサ1102、メモリ部1130、及び/又は、IOC1124と通信する何らかの適当なデバイスや部品との、何らかの適当な通信リンクを提供するための、何らかの適当なインタフェースコントローラを備えていてもよい。本発明の一実施形態においては、IOC1124は、各インタフェースのための適当なアービトレーション及びバッファリングを提供する。
【0059】
本発明の一実施形態では、IOC1124は、ハードディスクドライブ(HDD)やコンパクトディスクリードオンリメモリ(CD ROM)ドライブのような1つ以上の適当な統合ドライブエレクトロニクス(IDE)ドライブ1108に、又は、1つ以上のUSBポート1110を介して適当なユニバーサルシリアルバス(USB)デバイスに、インタフェースを提供する。一実施形態においては、IOC1124はまた、キーボード1112、マウス1114、CD−ROMドライブ1118に、及び1つ以上のFIREWIREポート1116を介して1つ以上の適当なデバイスに、インタフェースを提供する。本発明の一実施形態では、IOC1124はまた、コンピュータシステム1100が他のコンピュータ及び/又はデバイスと通信可能であるように介在するネットワークインタフェース1120を提供する。
【0060】
一実施形態においては、コンピュータシステム1100は、ここに述べたオブジェクトモジュールを動的にロードするための方法論のいずれか1つ又は全部を実現する一連の命令(例えばソフトウェア)を記憶するマシン読み取り可能な媒体を含んでいる。更に、ソフトウェアは、完全に又は少なくとも一部が、メモリ部1130及び/又はプロセッサ1102内に常駐可能である。
【0061】
このように、抗タンパーコードを生成するシステム及び方法について記載した。本発明は特定の模範的な実施形態を参照して記載されたが、これらの実施形態には、本発明の広い精神及び範囲から逸脱することなしに各種の変更及び変化を加えてもよいことは明らかである。従って、本明細書及び図面の記載は、限定的な意味ではなく、一例であるとみなされるべきである。
【図面の簡単な説明】
【0062】
【図1】本発明の模範的な実施形態に係る、動的翻訳を用いて抗タンパーコードを生成するシステムを示すブロック図である。
【図2】本発明の模範的な実施形態に係る、静的翻訳を用いて抗タンパーコードを生成するシステムを示すブロック図である。
【図3】本発明の模範的な実施形態に係る、ソフトウェアを生成、翻訳、及び実行する動作を示すフローチャートである。
【図4】本発明の模範的な実施形態に係る、オブジェクトコードを翻訳及び実行する動作を示すフローチャートである。
【図5】本発明の模範的な実施形態に係る、オブジェクトコードプログラムを静的に翻訳し実行する動作を示すフローチャートである。
【図6】本発明の模範的な実施形態に係る、抗タンパーポリシーに基づきシステムコールをサービスする動作を示すフローチャートである。
【図7】本発明の模範的な実施形態に係る、動的翻訳を用いて抗タンパーコードを生成する方法を示すフローチャートである。
【図8】本発明の模範的な実施形態に係る、識別名に基づくコード不明瞭化を用いて抗タンパーコードを生成する動作を示すフローチャートである。
【図9】本発明の模範的な実施形態に係る、抗タンパーポリシーに基づきシステムコールをサービスする動作を示すフローチャートである。
【図10】本発明の模範的な実施形態に係る、オブジェクトコードがインストールされた場合におけるオブジェクトコードの翻訳及び不明瞭化を行なう動作を示すフローチャートである。
【図11】本発明の或る実施形態と共に使用される模範的なコンピュータシステムを示す図である。
【技術分野】
【0001】
本発明は、一般に、コンピュータデータ処理の分野に関するものであり、特には、抗タンパー(tamper-resistant:改ざんに対抗する)ソフトウェアを生成する技術に関する。
【背景技術】
【0002】
抗タンパーソフトウェアは、変更、改ざん、及び/又は攻撃することの困難なソフトウェアである。コードの不明瞭化(code obfuscation)は、抗タンパーソフトウェアを達成するための1つの技術である。一般に、コードの不明瞭化が目標とするところは、コードのブロック中で何が起こっているのかを攻撃者が決定することを困難にすることである。攻撃者がデバッガーやエミュレーターを使用する場合、コードの不明瞭化はコードの理解又は変更を困難にすることが可能である。
【0003】
或るコード不明瞭化の技術によれば、追加の命令がプログラムに追加される。この命令は、攻撃者を混乱させたり、及び/又は補助結果(ancillary results)を生成するために追加されるのであり、実行が或る点を過ぎて続行可能である前に確認されなければならない。このコード不明瞭化の方法に伴う1つの問題点は、一般に、それが人手によって変更されなければならないコードを必要とするということである。更に、特にソフトウェアの一部が、システムサービスの限定を伴う抗タンパーの解釈的環境(interpretive environment)の中で動作しなければならない場合は、完全に再構築されなければならない現存のソフトウェアを必要とする場合もある。
【発明の開示】
【0004】
ここには、抗タンパーコードを生成するシステム及び方法について記載する。一実施の形態において、本方法は、第1のオブジェクトコードブロックを受け取ることを備えている。本方法はまた、第1のオブジェクトコードブロックを第2のオブジェクトコードブロックに翻訳することを備え、この翻訳は、第1のオブジェクトコードブロック又は第2のオブジェクトコードブロックに抗タンパー技術を適用することを含む。本方法はまた、第2のオブジェクトコードブロックを実行することを備えている。
【0005】
一実施の形態において、本システムは、プロセッサと、このプロセッサに接続されたメモリ部とを備えている。本システムにおいて、メモリ部は、ランタイムに第1のオブジェクトコードプログラムのブロックを第2のオブジェクトコードプログラムのブロックに翻訳する翻訳部を含んでおり、第2のオブジェクトコードプログラムのブロックは翻訳の結果として不明瞭化され、また、第2のオブジェクトコードプログラムのブロックはシステムコールを含んでいる。メモリ部はまた、システムコールのいつくかのためのサービスを提供するランタイムサポート部を含んでおり、このランタイムサポート部はシステムコールのその他のためのサービスを拒否し、また、サービスは抗タンパーポリシーに基づいて拒否される。
【発明を実施するための最良の形態】
【0006】
以下、本発明の一例について図面を用いて説明するが、本発明は図示された構成に限定されるものではない。
【0007】
ここには、抗タンパーコードを生成するシステム及び方法が記載されている。以下の記述においては、多くの特別な詳細構成が述べられている。しかし、本発明の実施形態はこれらの特別な詳細構成なしで実施されてもよいものと理解される。他の例では、この記述の理解が不明瞭にならないよう、周知の回路、構造、及び技術は詳細に示されていない。
なお、この記述では、「一実施形態」又は「実施形態」という用語は、その言及されている構成が本発明の少なくとも1つの実施形態に含まれているということを意味している。更に、この記述における「一実施形態」という個々の用語は、必ずしも同一の実施形態を意味するのではなく、しかし、いずれも相互に相容れないものでもなく、このことはもしそのように述べられていなくとも当業者には極めて明らかなことである。従って、本発明は、ここに記載された実施形態の各種の組み合わせ及び/又は統合を含むものであってもよい。更に、この記述において、「模範的な実施形態」という語句は、その言及されている実施形態が1つの例又は例示であることを意味している。
【0008】
ここで、ブロック図は、本発明の模範的な実施形態を示す。またここで、フローチャートは、本発明の模範的な実施形態の動作を示す。フローチャートの動作は、ブロック図に示された模範的な実施形態を参照して記述される。しかし、フローチャートの動作は、ブロック図を参照して議論された実施形態以外の本発明の実施形態によって行なわれることも可能であり、また、ブロック図を参照して議論された実施形態は、フローチャートを参照して議論された動作とは異なる動作を行なうことも可能である、と理解されるべきである。更に、フローチャートは連続した動作を描いたものであるが、或る実施形態はこれらの動作のいくつかを並行して行なうことも可能である、と理解されるべきである。
【0009】
実施例についての以下の記述は、4つのセクションに分かれている。第1のセクションでは、システムレベルの概要が説明される。第2のセクションでは、模範的な実現について記述される。第3のセクションでは、模範的な実施形態を用いる方法が記述される。第4のセクションでは、模範的なハードウェア及び動作環境について記述される。
【0010】
<システムレベルの概要>
このセクションでは、本発明の模範的な実施形態のシステム構成を提供する。図1〜2は、抗タンパーコードを生成するための、選択可能な2つのシステムを示す。図1〜2の各機能部の動作は、後に続くセクションで記述されている。以下では、コードを不明瞭化するための技術を含む、幾つかの抗タンパー技術について議論する。このコード不明瞭化の技術は、単独で、又は、システムコールを限定したり補助結果を確認するような他のコード不明瞭化技術や抗タンパー技術と組み合わせて、使用可能である。
【0011】
図1は、本発明の模範的な実施形態に係る、動的翻訳を用いて抗タンパーコードを生成するシステムを示すブロック図である。図1に示されるように、抗タンパーコードシステム100は翻訳環境132を含み、この翻訳環境132は、翻訳器110、実行部112、翻訳キャッシュ114、及びランタイムサポート部116を含んでいる。このシステム100はまたコンパイラ102を含んでおり、このコンパイラ102はオブジェクトコード格納部103に接続されている。このオブジェクトコード格納部103はローダ104に接続され、このローダ104は翻訳器110に接続されている。翻訳器110は翻訳キャッシュ114に接続されている。翻訳器110はまた実行部112に接続され、この実行部112はランタイムサポート部116に接続されている。ランタイムサポート部116はシステムリソース118に接続されている。
【0012】
一実施形態によれば、コンパイラ102は高水準言語コンパイラ(例えば、Objective C コンパイラ、C++ コンパイラ、Java(登録商標) コンパイラ、C コンパイラ等)である。コンパイラ102は高水準ソースコードプログラムを1つ以上のオブジェクトコードブロックにコンパイルし、それをオブジェクコード格納部103に格納する。オブジェクトコード格納部103は、何らかの適当な記憶媒体(例えば、RAM、ROM、ディスク等)であり得る。
【0013】
ローダ104は、オブジェクトコードブロックを翻訳器110へロードする。
このシステム100の動作を、以下に記す。
【0014】
図2は、本発明の模範的な実施形態に係る、静的翻訳を用いて抗タンパーコードを生成するシステムを示すブロック図である。図2に示されるように、抗タンパーコードシステム200はランタイム環境216を含んでいる。このランタイム環境216は、実行部210及びランタイムサポート部212を含んでいる。抗タンパーコードシステム200はまたコンパイラ208を含み、このコンパイラ208はオブジェクトコード格納部204に接続されている。このオブジェクトコード格納部204は翻訳器206に接続されている。オブジェクトコード格納部204はまたローダ202に接続され、このローダ202は実行部210に接続されている。この実行部210はランタイムサポート部212に接続されている。このランタイムサポート部212はシステムリソース214に接続されている。
【0015】
一実施形態によれば、コンパイラ208は高水準言語コンパイラ(例えば、Objective C コンパイラ、C++ コンパイラ、Java(登録商標)コンパイラ、C コンパイラ等)である。コンパイラ208は高水準ソースコードを1つ以上のオブジェクトコードブロックにコンパイルする。コンパイラ208はまた、このオブジェクトコードブロックをオブジェクコード格納部204に格納する。コンパイラ208はネットワークサーバ上に遠隔配置することが可能であり、一方、このシステム200の他の要素はネットワーククライアント上に局所的に格納される(上述したコンパイラ102の記載を参照のこと)。一実施形態では、オブジェクトコード格納部204はまた、翻訳器206によって生成されたオブジェクトコードを格納する。本発明の実施形態によれば、オブジェクトコード格納部204は、何らかの適当な記憶媒体(例えば、RAM、ROM、ディスク等)であり得る。
【0016】
一実施形態では、ランタイム環境216は実行部210及びランタイムサポート部212を含んでいる。実施例によれば、実行部210はプログラム命令を実行するための何らかの適当な機構であり得る。例えば、実行部210は、プログラム命令を実行するのに必要な何らかのプロセッサ及び/又はメモリを含むことができる。上記プログラム命令は、バイトコード又はオブジェクトコードの命令であり得る。更に、プログラム命令は、ランタイムサポート部212によってサービスされるシステムコールを含んでいてもよい。一実施形態において、ランタイムサポート部212は、システムコールをサービスするためのソフトウェア及び/又はハードウェアを含んでいる。実行部210及びランタイムサポート部212の動作は、以下で、より詳細に記述する(次のセクションを参照のこと)。
【0017】
本発明の実施形態によれば、図1及び図2の各機能部(例えば、翻訳器110、ランタイムサポート部116等)は、統合又は分離されることで、より少ない又はより多くの数の機能部を形成するようにすることも可能である。実施形態によれば、各機能部は、ここに記載された機能を行なうのに必要な、キュー、スタック、又はその他のデータ構造を含んでいてもよい。更に、各機能部は、何らかの適当な通信方法(メッセージ伝達、パラメータ伝達、信号等)を用いて通信可能なように結合されていてもよい。加えて、各機能部は、何らかの適当な相互接続構造(完全接続(fully connected)、ハイパーキューブ等)に従って接続可能である。本発明の実施例と共に使用される各機能部のいずれかは、ここに記載した動作を行なうための命令を含むマシン読み取り可能な媒体(マシン可読媒体)を含んでいてもよい。マシン読み取り可能な媒体は、マシン(例えばコンピュータ)によって読み取り可能な形式の情報を提供(すなわち、格納及び/又は送信)する何らかの機構を含んでいる。例えば、マシン読み取り可能な媒体は、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記録媒体、光記録媒体、フラッシュメモリデバイス、電気・光・音響又は他の伝達信号形態(例えば、搬送波、赤外線信号、ディジタル信号等)等を含む。本発明の実施形態によれば、各機能部は、抗タンパーコードを生成する動作を実行するための他のタイプのロジック(例えば、ディジタルロジック)であってもよい。
【0018】
<模範的な実現>
このセクションでは、上述したシステムによって行なわれる模範的な動作について説明する。このセクションでは、図3〜7が示される。以下の議論において、図3は、抗タンパーコードをコンパイルし、翻訳し、実行する一般的な動作を記載している。図4及び図5は、オブジェクトコードを抗タンパーオブジェクトコードに動的及び静的に翻訳する方法を記載している。図6はランタイムサポート動作を記載しており、図7はオブジェクトコードを不明瞭化する方法を記載している。
【0019】
図3は、本発明の模範的な実施形態に係る、ソフトウェアを生成、翻訳、及び実行する動作を示すフローチャートである。このフローチャートは抗タンパーコードシステムの一般的な動作を記載しており、このシステムの各要素の詳細な動作はその後のフローチャートに記載されている。フローチャート300の動作は、図1の模範的な抗タンパーコードシステムを参照して記載される。フローチャート300は、ブロック302から始まる。
【0020】
ブロック302では、ソースコードがコンパイルされて、最初のオブジェクトコードが生成される。例えば、コンパイラ102がソースコードプログラムをコンパイルして、最初のオブジェクトコードプログラムを生成する。一実施形態において、最初のオブジェクトコードは、仮想のマシン上で実行可能なバイトコードを含んでいる。一実施形態において、最初のオブジェクトコードは、特別なプロセッサ構造(例えば、PowerPC、MIPS、Intel Pentium(登録商標)等)上での実行に適したフォーマットとなっている。実施形態によれば、オブジェクトコードは、何らかの適当なローダフォーマットであってもよい。フローはブロック304に続く。
【0021】
ブロック304では、最初のオブジェクトコードが抗タンパーオブジェクトコードに翻訳される。例えば、翻訳器110が、最初のオブジェクトコードを抗タンパーオブジェクトコードに翻訳する。一実施形態では、ローダ104が格納部(不図示)から最初のオブジェクトコードを取り出し、この最初のオブジェクトコードを翻訳器110へ渡す。翻訳器110は、最初のオブジェクトコードを受け取った後、翻訳中に抗タンパー技術を遂行することにより、最初のオブジェクトコードを抗タンパーオブジェクトコードに翻訳する。一実施形態において、翻訳器110は、翻訳を遂行する度に、最初のオブジェクトコードを異なる抗タンパーオブジェクトコードに翻訳可能である。一実施形態において、抗タンパー技術はオブジェクトコードを不明瞭化することを含んでいる。オブジェクトコードを不明瞭化する動作は、後に、図7を参照して、より詳細に記す。フローはブロック306に続く。
【0022】
ブロック306に示されるように、抗タンパーコードオブジェクトが実行される。例えば、実行部112が抗タンパーオブジェクトコードを実行する。一実施形態において、翻訳器110が抗タンパーオブジェクトコードを実行部112へ送り、ここで抗タンパーオブジェクトコードが実行される。抗タンパーオブジェクトコードを翻訳及び実行する動作は、後に、図4〜5を参照して、より詳細に記す。このフローは、ブロック306で終了する。上述したように、図3は抗タンパーコードを生成するシステムの一般的な動作を記載し、一方、図4及び図5は翻訳器及び実行部の一層詳細な動作を記載している。
【0023】
図4は、本発明の模範的な実施形態に係る、オブジェクトコードを動的に翻訳し実行する動作を示すフローチャートである。フローチャート400の動作は、図1の模範的なシステムを参照して記載される。特に、フローチャート400は、翻訳器110及び実行部112によって行なわれる動作を主に記載する。フローチャート400は、ブロック40
2から始まる。
【0024】
ブロック402に示されるように、最初のオブジェクトコードブロックが選択される。例えば、翻訳器110が、操作を加えるための最初のオブジェクトコードブロックを選択する。一実施形態においては、最初のオブジェクトコードブロックは、仮想のマシン上で実行可能なバイトコードを含んでいるが、それに代わる実施形態は、プロセッサ上で実行可能なオブジェクトコードブロックを必要とする。フローはブロック404に続く。
【0025】
ブロック404では、最初のオブジェクトコードブロックが既に翻訳されたかどうかが決定される。例えば、翻訳器110が、最初のオブジェクトコードブロックが既に翻訳されたかどうかを決定する。一実施形態においては、翻訳器110が、翻訳キャッシュ114を調べて、最初のオブジェクトブロックが既に翻訳されたかどうかを決定する。最初のオブジェクトコードブロックがまだ翻訳されていない場合、フローはブロック406へと続く。そうでない場合、フローはブロック416へと続く。
【0026】
ブロック416では、翻訳された抗タンパーオブジェクトコードブロックがなくなったかどうかが決定される。例えば、翻訳器110が、翻訳キャッシュ114の中の翻訳された抗タンパーオブジェクトコードブロックを探し、それがなくなったかどうかを決定する。翻訳された抗タンパーブロックは、所定期間よりも長く翻訳キャッシュ114内に格納された後に、消滅する。例えば、翻訳された抗タンパーブロックが5つの時間単位(5 time units)以上の間キャッシュに格納されていると、それは消滅する。翻訳された抗タンパーコードブロックがなくなった場合、フローはブロック406へと続く。そうでない場合は、ブロック410へと続く。或る実施形態では、翻訳された抗タンパーオブジェクトコードブロックはなくならず、従って、これらの実施形態においてはブロック416がフローから省略されてもよい。そのような場合、ブロック404からの「YES」の経路はブロック410へと続くことになる。
【0027】
ブロック410では、抗タンパーオブジェクトコードブロックが翻訳キャッシュから取り出される。例えば、翻訳器110が、翻訳キャッシュ114から抗タンパーオブジェクトコードブロックを取り出す。ブロック410から、フローはブロック412へと続く。
【0028】
ブロック406では、最初のオブジェクトコードブロックが抗タンパーオブジェクトコードブロックに翻訳される。例えば、翻訳器110が、最初のオブジェクトコードブロックを抗タンパーオブジェクトコードブロックに翻訳する。一実施形態では、翻訳器110が、最初のオブジェクトコードブロックを抗タンパーオブジェクトコードブロックに翻訳する前に不明瞭化する。従って、最初のオブジェクトコードブロックを不明瞭化した結果として、翻訳が、不明瞭化されたオブジェクトコードブロックを生成する(すなわち、抗タンパーオブジェクトコードブロックが、不明瞭化されたコードを含む)。それに代わる実施形態では、翻訳器110が、最初のオブジェクトコードブロックを第2のオブジェクトコードブロックに翻訳し、これを不明瞭化して抗タンパーオブジェクトコードブロックを形成する。それに代わる実施形態では、翻訳器110が、同一プロセスの中で最初のオブジェクトコードブロックを翻訳及び不明瞭化する。すなわち、翻訳器110は、抗タンパーオブジェクトコードを生成する時に、最初のオブジェクトコードブロックを一命令ずつ(instruction-by-instruction)翻訳及び不明瞭化していく。或る実施形態では、オブジェクトコードブロックが翻訳される度に、翻訳器110が異なるオブジェクトコードを生成する。例えば、翻訳されてキャッシュされたオブジェクトコードがなくなると、翻訳器110が、なくなったブロックとは異なる、翻訳されたオブジェクトコードブロックを生成する。
【0029】
一実施形態では、翻訳器110が、最初のオブジェクトコードブロックを抗タンパーオ
ブジェクトコードブロックに翻訳し、また、この抗タンパーオブジェクトコードブロックを証明する手段を使用する。例えば、翻訳器110が抗タンパーオブジェクトコードブロックのチェックサムを計算して格納する。或いは、翻訳器110が抗タンパーオブジェクトコードブロックにディジタル署名を行なう。抗タンパーオブジェクトコードブロックを実行する前に、実行部112が、チェックサムを確認するか、又はディジタル署名を証明して、抗タンパーオブジェクトコードブロックが変更されていないことを確かめてもよい。その他には、実行部112が、元のオブジェクトコードに追加された命令によって或る補助結果が生成されたことを確認するようにしてもよい。チェックサム、ディジタル署名、及び補助結果の確認のみを記したが、本発明の実施形態では、抗タンパーオブジェクトコードブロックを証明するための何らかの適当な技術を使用可能である。フローはブロック408へと続く。
【0030】
ブロック408では、抗タンパーオブジェクトコードブロックが翻訳キャッシュに格納される。例えば、翻訳器110が、抗タンパーオブジェクトコードブロックを翻訳キャッシュ114に格納する。フローはブロック412へ続く。
【0031】
ブロック412に示されるように、抗タンパーオブジェクトコードブロックが実行される。例えば、実行部112が抗タンパーオブジェクトコードブロックを取り出して実行する。一実施形態では、実行部112が、ランタイムサポート部116を用いて、抗タンパーオブジェクトコードブロック内に含まれるシステムコールを実行する。ランタイムサポート部116の動作は、後に図6についての議論の中で、より詳細に記載する。フローはブロック414へと続く。
【0032】
ブロック414では、キャッシュされた抗タンパーオブジェクトコードブロックに対して、何らかの望ましい変更が行われる。例えば、もし望まれるのであれば、翻訳器110が、翻訳キャッシュ114内に格納されたオブジェクトブロックを更に変更することが可能である。ブロック414でフローが終了する。フロー400は、単一のオブジェクトコードブロックを翻訳して実行するものとして示されているが、フロー400は追加のオブジェクトコードブロックのために繰り返されるようにしてもよい。
【0033】
フロー400の動作は、高速のコード実行を考慮に入れている。コードはネイティブプロセッサの命令に翻訳されるので、その結果は抗タンパーのインタプリタ環境よりも高速である。
【0034】
図5は、本発明の模範的な実施形態に係る、オブジェクトコードプログラムを静的に翻訳し実行する動作を示すフローチャートである。図5のフローチャートは、図2の模範的な翻訳システムを参照して説明する。特に、フローチャート500は、翻訳器206及び実行部210の動作を主に記述する。フローチャート500はブロック502から始まる。
【0035】
ブロック502では、最初のオブジェクトコードプログラムが受け取られる。例えば、翻訳器206が、オブジェクトコードプログラムをオブジェクトコード格納部204から取り出す。一実施形態では、ソフトウェア導入プロセス(すなわち、ソフトウェアを格納し、それを実行用に構成するプロセス)の進行中に、翻訳器206がオブジュクトコード格納部204からオブジェクトコードプログラムを受け取る。それに代わる実施形態では、ソフトウェア導入プロセス中に、翻訳器206がネットワーク接続を介してオブジェクトコードプログラムを受け取る。フローはブロック504へ続く。
【0036】
ブロック504では、最初のオブジェクトコードプログラムが抗タンパーオブジェクトコードプログラムに翻訳される。例えば、翻訳器206がオブジェクトコードプログラム
を抗タンパーオブジェクトコードプログラムに翻訳する。一実施形態では、これは最初のオブジェクトプログラムを不明瞭化することを含み、これについては後に更に詳しく説明する(図7を参照のこと)。上述したように、一実施形態においては、翻訳器206が抗タンパーオブジェクトコードプログラムのチェックサム又はディジタル署名を決定する。チェックサムが実行ユニット210によって使用されることで、抗タンパーオブジェクトコードプログラムが変更されているかどうかを決定することが可能である。フローはブロック506へ続く。
【0037】
ブロック506では、抗タンパーオブジェクトコードプログラムが格納される。例えば、翻訳器206が抗タンパーオブジェクトコードプログラムをオブジェクトコード格納部204に格納する。フローはブロック508へ続く。
【0038】
ブロック508では、抗タンパーオブジェクトコードプログラムがロードされる。例えば、ローダ202が抗タンパーオブジェクトコードプログラムを実行部210へロードする。フローはブロック510へと続く。
【0039】
ブロック510では、抗タンパーオブジュクトコードプログラムが実行される。例えば、実行部210が抗タンパーオブジェクトコードプログラムを実行する。一実施形態では、オブジェクトプログラムが、システムリソース214へのアクセスを要求するシステムコールを含んでいる。一実施形態では、実行部210がランタイムサポート部212と協働して、システムコールをサービスする。システムコールをサービスする動作は、後に図6についての議論の中で、より詳細に説明する。一実施形態では、抗タンパーオブジェクトコードプログラムが、異なるコンピュータシステム上で実行可能である。例えば、ロード動作(ブロック508)は、翻訳(ブロック504)を行なうコンピュータシステム以外のコンピュータシステムに、抗タンパーオブジェクトコードをロードする。ブロック510でフローが終了する。
【0040】
上述した図4及び図5についての議論では抗タンパーオブジェクトコードを動的又は静的に生成する動作を説明したが、図6はシステムコールをサービスする動作を示している。
【0041】
図6は、本発明の模範的な実施形態に係る、抗タンパーポリシーに基づきシステムコールをサービスする動作を示すフローチャートである。フローチャート600の動作は、ランタイムサポート部116の動作を示している。図6のフローチャートの動作は、図1に記載された模範的システムを参照して説明する。フローチャート600はブロック602から始まる。
【0042】
ブロック602に示されるように、システムコールが受け取られる。例えば、ランタイムサポート部116が実行部112からシステムコールを受け取る。一実施形態では、システムコールは、オペレーティングシステムからリソースを要求する機構である。実施形態によれば、システムコールは、システムリソース(例えば、ディスクドライブ、メモリ管理部等)へのアクセスを提供することのような限定された動作を実行部112に行なわせる、オブジェクトコード命令又はバイトコードである。フローはブロック604へと続く。
【0043】
ブロック604では、システムコールをサービスすることが許可されているかどうかが決定される。例えば、ランタイムサポート部116が、システムコールサービスすることが許可されているかどうかを決定する。一実施形態では、ランタイムサポート部116が、抗タンパーポリシーをチェックして、システムコールをサービスすることが許可されているかどうかを決定する。実施形態によれば、抗タンパーポリシーは、ランタイムサポー
ト116内に格納されたデータ構造で表され得る。ランタイムサポート部116は上記データ構造を調べて、抗タンパーポリシーがシステムコールをサービスすることを考慮に入れているかどうかを決定する。ランタイムサポート部116がシステムコールをサービスすることを許可されていれば、フローはブロック608へと続く。そうでなければ、フローはブロック606へと続く。
【0044】
ブロック606に示されるように、エラーが送信される。例えば、ランタイムサポート部116が実行部112へエラーを送信する。606でフローが終了する。
【0045】
ブロック608では、システムコールがサービスされる。例えば、ランタイムサポート部116がシステムコールをサービスする。一実施形態では、ランタムサポート部116が、システムリソース118へのアクセスを提供することにより、システムコールをサービスする。一実施形態では、実行部112及びシステムリソース118が第1のオペレーティングシステムによって制御され、一方、システムコールは第2のオペレーティングシステムで使用されるようフォーマット化される。従って、ランタイムサポート部116は、第1のオペレーティングシステム用にフォーマット化されたシステムコールをサービスするのに、第2のオペレーティングシステムがどのサービスを提供しなければならないかを決定する。言い換えれば、ランタイムサポート部116は、システムコールをもう1つのオペレーティングシステムから現在のオペレーティングシステム(すなわち、実行部112を制御するオペレーティングシステム)のサービス上へマップする。一実施形態では、第1及び第2のオペレーティングシステムは一般には同一であるが、第2のオペレーティングシステムはシステムコールの限定された部分をサポートする。ブロック608でフローが終了する。
【0046】
或る実施形態は、以下に記載された動作の1つ以上を遂行することにより、コードを不明瞭化することが可能である。一実施形態では、コードの不明瞭化は、不明瞭化の識別名を決定して該識別名に基づく1つ以上の動作を行なうことにより達成される。上記識別名は、ROMシリアル番号、ハードウェアアドレス、クロック値等のような、マシン固有の属性であり得る。或いは、上記識別名は、ユーザ識別名、コンピュータ識別名、アカウント識別名、又はその他のユーザ関連情報等のような、ユーザ属性から決定可能である。識別名を決定した後、この識別名に基づいて生成された無関係な(extraneous)コードをオブジェクトコード内に挿入可能である。更に、ダイレクトソースコードに相当するものを持たないオブジェクトコード機能(object code features)が、識別名に基づいて生成可能であり、そのようなオブジェクトコード機能が、その後、オブジェクトコードに挿入可能である。
【0047】
その他の不明瞭化技術として、補助結果を生成する追加のコードが、識別名に基づいて生成可能である。この追加のコードは、その後、オブジェクトコードに挿入可能である。識別名が異なる時にコードが実行されないようにすると、抗タンパーが改善される。
【0048】
幾つかのコード不明瞭化技術及び抗タンパー技術がここで述べられたが、本発明の実施形態は、翻訳中に適用されるべきあらゆるコード不明瞭化技術又は抗タンパー技術を考慮に入れている。
【0049】
<本発明の方法>
このセクションでは、本発明の実施形態によって遂行される方法を説明する。或る実施形態では、この方法はマシン読み取り可能な媒体に格納された命令(例えばソフトウェア)によって遂行され、一方、他の実施形態では、この方法はハードウェア又は他のロジック(例えばディジタルロジック)によって遂行される。
【0050】
このセクションでは、図7〜10について議論される。特に、図7は、抗タンパーコードを生成する動的翻訳器によって行なわれる動作を記載しており、一方、図8は、識別名に基づくコード不明瞭化を用いて抗タンパーコードを生成する動的翻訳器の動作を記載している。図9は、抗タンパーポリシーに基づきシステムコールをサービスする動作を記載している。更に、図10は、導入時のオブジェクトコード不明瞭化のための動作を記載している。
【0051】
図7は、本発明の模範的な実施形態に係る、動的翻訳を用いて抗タンパーコードを生成する方法を示すフローチャートである。フローチャート700はブロック702で始まり、ここで第1のオブジェクトコードブロックが受け取られる。フローはブロック704へ続く。ブロック704では、第1のオブジェクトコードブロックが第2のオブジェクトコードブロックに翻訳される。フローはブロック706へ続く。ブロック706では、第2のコードブロックが実行される。ブロック706でフローが終了する。
【0052】
図8は、本発明の模範的な実施形態に係る、識別名に基づくコード不明瞭化を用いて抗タンパーコードを生成する動作を示すフローチャートである。フローチャート800はブロック802で始まる。ブロック802では、マシンの状態に基づき識別名が決定される。フローはブロック804へ続く。ブロック804では、第1のオブジェクトコードブロックが第2のオブジェクトコードブロックに翻訳され、この第2のオブジェクトコードブロックが上記識別名を用いて不明瞭化される。フローはブロック906へと続く。ブロック806では、第1のブロックが実行される。ブロック806でフローが終了する。
【0053】
図9は、本発明の模範的な実施形態に係る、抗タンパーポリシーに基づきシステムコールをサービスする動作を示すフローチャートである。フローチャート900はブロック902で始まる。ブロック902では、第1のオブジェクトコードブロックのシステムコールが受けとられ、ここで、このシステムコールは第1のオペレーティングシステムからのサービスを要求するようフォーマット化される。フローはブロック904へ続く。ブロック904に示されるように、上記サービスを提供するのに第2のオペレーティングシステムのどのシステムコールサービスが必要とされるのかが決定される。フローはブロック906へ続く。ブロック906では、システムコールをサービスするためのシステムコールサービスが不能であるかどうかが、抗タンパーポリシーに基づき決定される。フローはブロック908へと続く。ブロック908に示されるように、システムコールをサービスするためのシステムコールが不能でない場合、システムコールがサービスされる。ブロック908でフローは終了する。
【0054】
図10は、本発明の模範的な実施形態に係る、オブジェクトコードがインストールされた場合におけるオブジェクトコードの翻訳及び不明瞭化を行なう動作を示すフローチャートである。フローチャート1000は、ブロック1002で始まる。ブロック1002では、第1のオブジェクトコードプログラムがインストールされ、この第1のオブジェクトコードプログラムが第2のオブジェクトコードプログラムに翻訳され、そして、第1のオブジェクトコードプログラム又は第2のオブジェクトコードプログラムが不明瞭化される。フローはブロック1004へ続く。ブロック1004に示されるように、第2のオブジェクトコードプログラムがその実行のために格納される。ブロック1004でフローが終了する。
【0055】
<ハードウェア及び動作環境>
このセクションでは、本発明の実施形態が実施され得る模範的なハードウェア及び動作環境の概要を提供する。
【0056】
図11は、本発明の或る実施形態と共に使用される模範的なコンピュータシステムを示
す図である。図11に示されるように、コンピュータシステム1100は1つ以上のプロセッサ1102を備えている。コンピュータシステム1100はまた、メモリ部1130、プロセッサバス1122、及び入力/出力コントローラ(IOC)1124を含んでいる。プロセッサ1102、メモリ部1130、及びIOC1124はプロセッサバス1122に接続されている。プロセッサ1102は、何らかの適当なプロセッサ構造を備えていてもよい。コンピュータシステム1100は1つ、2つ、3つ、又はそれ以上のプロセッサを備えていてもよく、それらのいずれかが本発明の実施形態に従った一連の命令を実行してもよい。
【0057】
メモリ部1130は翻訳環境132を含んでいる。メモリ部1130はデータ及び/又は命令を記憶しており、例えばダイナミックランダムアクセスメモリ(DRAM)のような何らかの適当なメモリを備えていてもよい。コンピュータシステム1100はまた、IDEドライブ及び/又はその他の適当な記録デバイスを含んでいる。グラフィックコントローラ1104は、本発明の実施形態に従い、表示デバイス1106上での情報の表示を制御する。
【0058】
入力/出力コントローラ(IOC)1124は、コンピュータシステム1100のためのI/Oデバイス又は周辺機器へのインタフェースを提供する。IOC1124は、プロセッサ1102、メモリ部1130、及び/又は、IOC1124と通信する何らかの適当なデバイスや部品との、何らかの適当な通信リンクを提供するための、何らかの適当なインタフェースコントローラを備えていてもよい。本発明の一実施形態においては、IOC1124は、各インタフェースのための適当なアービトレーション及びバッファリングを提供する。
【0059】
本発明の一実施形態では、IOC1124は、ハードディスクドライブ(HDD)やコンパクトディスクリードオンリメモリ(CD ROM)ドライブのような1つ以上の適当な統合ドライブエレクトロニクス(IDE)ドライブ1108に、又は、1つ以上のUSBポート1110を介して適当なユニバーサルシリアルバス(USB)デバイスに、インタフェースを提供する。一実施形態においては、IOC1124はまた、キーボード1112、マウス1114、CD−ROMドライブ1118に、及び1つ以上のFIREWIREポート1116を介して1つ以上の適当なデバイスに、インタフェースを提供する。本発明の一実施形態では、IOC1124はまた、コンピュータシステム1100が他のコンピュータ及び/又はデバイスと通信可能であるように介在するネットワークインタフェース1120を提供する。
【0060】
一実施形態においては、コンピュータシステム1100は、ここに述べたオブジェクトモジュールを動的にロードするための方法論のいずれか1つ又は全部を実現する一連の命令(例えばソフトウェア)を記憶するマシン読み取り可能な媒体を含んでいる。更に、ソフトウェアは、完全に又は少なくとも一部が、メモリ部1130及び/又はプロセッサ1102内に常駐可能である。
【0061】
このように、抗タンパーコードを生成するシステム及び方法について記載した。本発明は特定の模範的な実施形態を参照して記載されたが、これらの実施形態には、本発明の広い精神及び範囲から逸脱することなしに各種の変更及び変化を加えてもよいことは明らかである。従って、本明細書及び図面の記載は、限定的な意味ではなく、一例であるとみなされるべきである。
【図面の簡単な説明】
【0062】
【図1】本発明の模範的な実施形態に係る、動的翻訳を用いて抗タンパーコードを生成するシステムを示すブロック図である。
【図2】本発明の模範的な実施形態に係る、静的翻訳を用いて抗タンパーコードを生成するシステムを示すブロック図である。
【図3】本発明の模範的な実施形態に係る、ソフトウェアを生成、翻訳、及び実行する動作を示すフローチャートである。
【図4】本発明の模範的な実施形態に係る、オブジェクトコードを翻訳及び実行する動作を示すフローチャートである。
【図5】本発明の模範的な実施形態に係る、オブジェクトコードプログラムを静的に翻訳し実行する動作を示すフローチャートである。
【図6】本発明の模範的な実施形態に係る、抗タンパーポリシーに基づきシステムコールをサービスする動作を示すフローチャートである。
【図7】本発明の模範的な実施形態に係る、動的翻訳を用いて抗タンパーコードを生成する方法を示すフローチャートである。
【図8】本発明の模範的な実施形態に係る、識別名に基づくコード不明瞭化を用いて抗タンパーコードを生成する動作を示すフローチャートである。
【図9】本発明の模範的な実施形態に係る、抗タンパーポリシーに基づきシステムコールをサービスする動作を示すフローチャートである。
【図10】本発明の模範的な実施形態に係る、オブジェクトコードがインストールされた場合におけるオブジェクトコードの翻訳及び不明瞭化を行なう動作を示すフローチャートである。
【図11】本発明の或る実施形態と共に使用される模範的なコンピュータシステムを示す図である。
【特許請求の範囲】
【請求項1】
第1のオブジェクトコードブロックを受け取ることと、
前記第1のオブジェクトコードブロックを第2のオブジェクトコードブロックに翻訳することと、
前記第2のオブジェクトコードブロックを実行することと、を備え、
前記翻訳は、前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに抗タンパー技術を適用することを含む、
ことを特徴とする方法。
【請求項2】
前記抗タンパー技術は、マシン属性又はユーザ属性に基づく識別名を決定することと、前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに追加のコードを挿入することとを含み、前記識別名がない場合は前記第2のオブジェクトコードブロックを実行しない、ことを特徴とする請求項1記載の方法。
【請求項3】
前記抗タンパー技術は、補助結果を生成するオブジェクトコードを前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに追加することを含み、前記補助結果がない場合は前記第2のオブジェクトコードブロックを実行しない、ことを特徴とする請求項1記載の方法。
【請求項4】
前記第1のオブジェクトコードブロックは、第1のマシン上での実行に適したフォーマットのバイトコードを含むことを特徴とする請求項1記載の方法。
【請求項5】
前記第1のマシンは仮想のマシンであることを特徴とする請求項4記載の方法。
【請求項6】
前記第2のオブジェクトコードブロックは第2のマシン上での実行に適したフォーマットであることを特徴とする請求項4記載の方法。
【請求項7】
前記抗タンパー技術は、前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックを不明瞭化することを含むことを特徴とする請求項1記載の方法。
【請求項8】
前記第2のマシンは仮想のマシンであることを特徴とする請求項1記載の方法。
【請求項9】
前記翻訳は、前記第2のオブジェクトコードブロックに基づくチェックサム又はディジタル署名を決定することを含み、該チェックサム又はディジタル署名は前記第2のオブジェクトコードの実行前又は実行中に確認されることを特徴とする請求項1記載の方法。
【請求項10】
1つ以上のマシン属性又はユーザ属性に基づく識別名を決定することと、
ランタイムに、第1のオブジェクトコードブロックを第2のオブジェクトコードブロックに翻訳することと、
前記第2のオブジェクトコードブロックを後から実行するために格納することと、を備え、
前記翻訳は、前記第2のオブジェクトコードブロックを不明瞭化することを含み、該不明瞭化は前記識別名に基づく、
ことを特徴とする方法。
【請求項11】
前記識別名が異なる場合には前記第2のオブジェクトブロックを後から実行しないことにより、前記抗タンパー技術が適用されることを特徴とする請求項10記載の方法。
【請求項12】
前記マシン属性はハードウェアのアドレス又はリードオンリメモリのシリアル番号を含むことを特徴とする請求項11記載の方法。
【請求項13】
前記ユーザ属性は、ユーザ識別名、ユーザパスワード、ユーザアカウント名、及びユーザアカウント番号からなる集合の中から選択されることを特徴とする請求項11記載の方法。
【請求項14】
前記不明瞭化は、前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに追加のコードを挿入することを含むことを特徴とする請
求項10記載の方法。
【請求項15】
前記抗タンパー技術は、補助結果を生成するオブジェクトコードを前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに追加することを含み、前記補助結果がない場合は前記第2のオブジェクトコードブロックを実行しない、ことを特徴とする請求項10記載の方法。
【請求項16】
前記マシン属性はクロックに基づくことを特徴とする請求項10記載の方法。
【請求項17】
前記マシン属性はハードウェアのアドレス又はリードオンリメモリのシリアル番号を含むことを特徴とする請求項10記載の方法。
【請求項18】
前記ユーザ属性は、ユーザ識別名、ユーザパスワード、ユーザアカウント名、及びユーザアカウント番号からなる集合の中から選択されることを特徴とする請求項10記載の方法。
【請求項19】
前記第1のマシンは仮想のマシンであることを特徴とする請求項10記載の方法。
【請求項20】
第1のオペレーティングシステムからのサービスを要求するようにフォーマット化されたシステムコールであって、第2のオブジェクトコードブロックのランタイムの翻訳である第1のオブジェクトコードブロックに含まれるシステムコールを受け取ることと、
前記サービスを提供するのに第2のオペレーティングシステムのどのシステムコールサービスが必要とされるのかを決定することと、
前記システムコールをサービスするためのシステムコールサービスが不能であるかどうかを抗タンパーポリシーに基づき決定することと、
前記システムコールをサービスするためのシステムコールサービスが不能でない場合、前記システムコールをサービスすることと、
を含むことを特徴とする方法。
【請求項21】
前記抗タンパーポリシーは、システムリソースにアクセスするシステムコールサービスを不能にすることを特徴とする請求項20記載の方法。
【請求項22】
前記第1のオペレーティングシステムは、Mac OS X、Linux、及びMicrosoft Windows(登録商標)からなる集合の中から選択されることを特徴とする請求項20記載の方法。
【請求項23】
前記第2のオペレーティングシステムは、Mac OS X、Linux、及びMicrosoft Windows(登録商標) からなる集合の中から選択されることを特徴とする請求項20記載の方法。
【請求項24】
第1のオブジェクトコードプログラムをインストールすることと、
マシンによる実行のために第2のオブジェクトコードプログラムを格納することと、を備え、
前記インストールは、前記第1のオブジェクトコードプログラムを、前記マシン上で実行可能な前記第2のオブジェクトコードプログラムに静的に翻訳することを含み、
該静的な翻訳は、
前記マシンの状態又はユーザ属性に基づき識別名を決定することと、
前記第1のオブジェクトコードプログラム又は前記第2のオブジェクトコードプログラムを前記識別名に基づき不明瞭化することと、
を含むことを特徴とする方法。
【請求項25】
前記不明瞭化は、前記第1のオブジェクトコードプログラム又は前記第2のオブジェクトコードプログラムに追加のコードを挿入することを含むことを特徴とする請求項24記載の方法。
【請求項26】
前記挿入された追加のコードは補助結果を生成することを特徴とする請求項25記載の方法。
【請求項27】
前記第1のオブジェクトコードプログラムは前記マシン上で実行可能でないことを特徴とする請求項24記載の方法。
【請求項28】
前記静的な翻訳はネットワークサーバ上で行われ、前記第2のオブジェクトコードプログラムはネットワークのクライアント上に格納されることを特徴とする請求項24記載の方法。
【請求項29】
前記マシンは、Microsoft Windows(登録商標)、Linux、及び Mac OS X からなる集合の中から選択されたオペレーティングシステムを含むことを特徴とする請求項24記載の方法。
【請求項30】
前記第1のオブジェクトコードプログラム又は前記第2のオブジェクトコードプログラムはネットワーク接続を介して受け取られることを特徴とする請求項24記載の方法。
【請求項31】
前記マシンは、Apple Macintosh 及び Windows(登録商標) PC からなる集合の中から選択されることを特徴とする請求項24記載の方法。
【請求項32】
前記マシンの状態は、クロック、ROMのシリアル番号、及びハードウェアのアドレスからなるグループの中から選択された、マシンに特有の属性に基づいていることを特徴とする請求項24記載の方法。
【請求項33】
ランタイムに第1のオブジェクトコードプログラムのブロックを第2のオブジェクトコードプログラムのブロックに翻訳する翻訳部であって、前記第2のオブジェクトコードプログラムのブロックが前記翻訳の結果として不明瞭化され、前記第2のオブジェクトコードプログラムのブロックがシステムコールを含んでいる翻訳部と、
前記システムコールのいくつかのためのサービスを提供し、前記システムコールのその他のためのサービスを抗タンパーポリシーに基づいて拒否するランタイムサポート部と、
を備えることを特徴とする装置。
【請求項34】
前記第1のオブジェクトコードプログラムはバイトコードを含むことを特徴とする請求項33記載の装置。
【請求項35】
前記第2のオブジェクトコードプログラムはApple Macintosh 又は Windows(登録商標) PC 上で実行可能であることを特徴とする請求項33記載の装置。
【請求項36】
前記第1のオブジェクトコードは仮想のマシン上で実行可能であることを特徴とする請求項33記載の装置。
【請求項37】
第1のオブジェクトコードプログラムを第2のオブジェクトコードプログラムに翻訳する翻訳部であって、前記第2のオブジェクトコードプログラムが第1のオペレーティングシステムへのシステムコールを含み、前記第2のオブジェクトコードブロックが前記翻訳の結果として不明瞭化されたオブジェクトコードを含んでいる翻訳部と、
前記第2のオブジェクトコードプログラムを実行し、前記システムコールを送信する実行部と、
前記実行部から前記システムコールを受け取り、第2のオペレーティングシステムのシステムコールサービスルーティンを有するシステムコールをサービスするランタイムサポート部と、
を備えることを特徴とする装置。
【請求項38】
前記不明瞭化されたオブジェクトコードはマシン属性に基づいていることを特徴とする請求項37記載の装置。
【請求項39】
前記マシン属性は、クロック、リードオンリメモリのシリアル番号、及びハードウェアアドレスからなるグループの中から選択されることを特徴とする請求項38記載の装置。
【請求項40】
前記不明瞭化されたコードはユーザ属性に基づいており、該ユーザ属性は、ユーザ識別名、ユーザパスワード、ユーザアカウント番号、及びユーザアカウント名からなる集合の中から選択されることを特徴とする請求項37記載の装置。
【請求項41】
前記第2のオペレーティングシステムは、Apple Macintosh オペレーティングシステム及び Windows(登録商標) オペレーティングシステムからなる集合の中から選択されることを特徴とする請求項37記載の装置。
【請求項42】
プロセッサと、該プロセッサに接続されたメモリ部とを備えるシステムであって、
前記メモリ部は、
ランタイムに第1のオブジェクトコードプログラムのブロックを第2のオブジェクトコードプログラムのブロックに翻訳する翻訳部であって、前記第2のオブジェクトコードプログラムのブロックが前記翻訳の結果として不明瞭化され、前記第2のオブジェクトコードプログラムのブロックがシステムコールを含んでいる翻訳部と、
前記システムコールのいくつかのためのサービスを提供し、前記システムコールのその他のためのサービスを抗タンパーポリシーに基づいて拒否するランタイムサポート部と、
を備えることを特徴とするシステム。
【請求項43】
前記第1のオブジェクトコードプログラムはバイトコードを含むことを特徴とする請求項42記載のシステム。
【請求項44】
前記第2のオブジェクトコードプログラムは、Apple Macintosh 及び Windows(登録商標)PC からなる集合の中から選択されたコンピュータ上で実行可能であることを特徴とする請求項42記載のシステム。
【請求項45】
前記第1のオブジェクトコードは仮想のマシン上で実行可能であることを特徴とする請求項42記載のシステム。
【請求項46】
マシンによって実行される時に該マシンに動作を行わせる命令を提供するマシン読み取り可能な媒体であって、前記動作は、
第1のオブジェクトコードブロックを受け取ることと、
前記第1のオブジェクトコードブロックを第2のオブジェクトコードブロックに翻訳することと、
前記第2のオブジェクトコードブロックを実行することと、を備え、
前記翻訳は、前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに抗タンパー技術を適用することを含む、
ことを特徴とするマシン読み取り可能な媒体。
【請求項47】
前記抗タンパー技術は、マシン属性又はユーザ属性に基づく識別名を決定することと、前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに追加のコードを挿入することとを含み、前記識別名がない場合は前記第2のオブジェクトコードブロックを実行しない、ことを特徴とする請求項46記載の方法。
【請求項48】
前記抗タンパー技術は、補助結果を生成するオブジェクトコードを前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに追加することを含み、前記補助結果がない場合は前記第2のオブジェクトコードブロックを実行しない、ことを特徴とする請求項48記載の方法。
【請求項49】
前記第1のオブジェクトコードブロックは、第1のマシン上での実行に適したフォーマットのバイトコードを含むことを特徴とする請求項46記載のマシン読み取り可能な媒体。
【請求項50】
前記第1のマシンは仮想のマシンであることを特徴とする請求項46記載のマシン読み取り可能な媒体。
【請求項51】
前記第2のオブジェクトコードブロックは第2のマシン上での実行に適したフォーマットであることを特徴とする請求項49記載のマシン読み取り可能な媒体。
【請求項52】
前記抗タンパー技術は、前記オブジェクトコードブロックを不明瞭化することを含むことを特徴とする請求項46記載のマシン読み取り可能な媒体。
【請求項53】
前記第2のマシンは仮想のマシンであることを特徴とする請求項46記載のマシン読み取り可能な媒体。
【請求項54】
前記翻訳は、前記第2のオブジェクトコードブロックに基づくチェックサム又はディジタル署名を決定することを含み、該チェックサム又はディジタル署名は前記第2のオブジェクトコードを実行する前に確認されることを特徴とする請求項46記載のマシン読み取り可能な媒体。
【請求項55】
マシンによって実行される時に該マシンに動作を行わせる命令を提供するマシン読み取り可能な媒体であって、前記動作は、
1つ以上のマシン属性又はユーザ属性に基づく識別名を決定することと、
ランタイムに、第1のオブジェクトコードブロックを第2のオブジェクトコードブロックに翻訳することと、
前記第2のオブジェクトコードブロックを後から実行するために格納することと、を備え、
前記翻訳は、前記第2のオブジェクトコードブロックを不明瞭化することを含み、該不明瞭化は前記識別名に基づく、
ことを特徴とするマシン読み取り可能な媒体。
【請求項56】
前記識別名が異なる場合には前記第2のオブジェクトブロックを後から実行しないことにより、前記抗タンパー技術が適用されることを特徴とする請求項55記載の方法。
【請求項57】
前記マシン属性はハードウェアアドレス又はリードオンリメモリのシリアル番号を含むことを特徴とする請求項56記載の方法。
【請求項58】
前記ユーザ属性は、ユーザ識別名、ユーザパスワード、ユーザアカウント名、及びユーザアカウント番号からなる集合の中から選択されることを特徴とする請求項56記載の方法。
【請求項59】
前記マシン属性はクロックに基づくことを特徴とする請求項55記載のマシン読み取り可能な媒体。
【請求項60】
前記マシン属性はマシンに特有の情報に基づくことを特徴とする請求項55記載のマシン読み取り可能な媒体。
【請求項61】
前記マシンに特有の情報はハードウェアアドレス又はリードオンリメモリのシリアル番号を含むことを特徴とする請求項60記載のマシン読み取り可能な媒体。
【請求項62】
前記第1のマシンは仮想のマシンであることを特徴とする請求項55記載のマシン読み取り可能な媒体。
【請求項63】
前記ユーザ属性は、ユーザ識別名、パスワード、ユーザアカウント番号、及びユーザアカウント名からなる集合の中から選択されることを特徴とする請求項55記載のマシン読み取り可能な媒体。
【請求項64】
マシンによって実行される時に該マシンに動作を行わせる命令を提供するマシン読み取り可能な媒体であって、前記動作は、
第1のオペレーティングシステムからのサービスを要求するようにフォーマット化されたシステムコールであって、第2のオブジェクトコードブロックのランタイムの翻訳である第1のオブジェクトコードブロックに含まれるシステムコールを受け取ることと、
前記サービスを提供するのに第2のオペレーティングシステムのどのシステムコールサービスが必要とされるのかを決定することと、
前記システムコールをサービスするためのシステムコールサービスが不能であるかどうかを抗タンパーポリシーに基づき決定することと、
前記システムコールをサービスするためのシステムコールサービスが不能でない場合、前記システムコールをサービスすることと、
を含むことを特徴とするマシン読み取り可能な媒体。
【請求項65】
前記抗タンパーポリシーは、システムリソースにアクセスするシステムコールサービスを不能にすることを特徴とする請求項64記載のマシン読み取り可能な媒体。
【請求項66】
前記第1のオペレーティングシステムは、Microsoft Window(登録商標)、Linux、及び Mac OS Xからなる集合の中から選択されることを特徴とする請求項64記載のマシン読み取り可能な媒体。
【請求項67】
前記第2のオペレーティングシステムは、Apple Macintosh オペレーティングシステム、Linux、及び Microsoft Windows(登録商標)からなる集合の中から選択されることを特徴とする請求項64記載のマシン読み取り可能な媒体。
【請求項68】
マシンによって実行される時に該マシンに動作を行わせる命令を提供するマシン読み取り可能な媒体であって、前記動作は、
第1のオブジェクトコードプログラムをインストールすることと、
マシンによる実行のために第2のオブジェクトコードプログラムを格納することと、を備え、
前記インストールは、前記第1のオブジェクトコードプログラムを、前記マシン上で実行可能な前記第2のオブジェクトコードプログラムに静的に翻訳することを含み、
該静的な翻訳は、
前記マシンの状態又はユーザ属性に基づき識別名を決定することと、
前記第1のオブジェクトコードプログラム又は前記第2のオブジェクトコードプログラムを前記識別名に基づき不明瞭化することと、
を含むことを特徴とするマシン読み取り可能な媒体。
【請求項69】
前記第1のオブジェクトコードプログラムは前記マシン上で実行可能でないことを特徴とする請求項68記載のマシン読み取り可能な媒体。
【請求項70】
前記静的な翻訳はネットワークサーバ上で行われ、前記第2のオブジェクトコードプログラムはネットワークのクライアント上に格納されることを特徴とする請求項68記載のマシン読み取り可能な媒体。
【請求項71】
前記第1のオブジェクトコードプログラム又は前記第2のオブジェクトコードプログラムはネットワーク接続を介して受け取られることを特徴とする請求項68記載のマシン読み取り可能な媒体。
【請求項72】
前記マシンは、Apple Macintosh 及び Windows(登録商標) PC からなる集合の中から選択されることを特徴とする請求項68記載のマシン読み取り可能な媒体。
【請求項1】
第1のオブジェクトコードブロックを受け取ることと、
前記第1のオブジェクトコードブロックを第2のオブジェクトコードブロックに翻訳することと、
前記第2のオブジェクトコードブロックを実行することと、を備え、
前記翻訳は、前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに抗タンパー技術を適用することを含む、
ことを特徴とする方法。
【請求項2】
前記抗タンパー技術は、マシン属性又はユーザ属性に基づく識別名を決定することと、前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに追加のコードを挿入することとを含み、前記識別名がない場合は前記第2のオブジェクトコードブロックを実行しない、ことを特徴とする請求項1記載の方法。
【請求項3】
前記抗タンパー技術は、補助結果を生成するオブジェクトコードを前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに追加することを含み、前記補助結果がない場合は前記第2のオブジェクトコードブロックを実行しない、ことを特徴とする請求項1記載の方法。
【請求項4】
前記第1のオブジェクトコードブロックは、第1のマシン上での実行に適したフォーマットのバイトコードを含むことを特徴とする請求項1記載の方法。
【請求項5】
前記第1のマシンは仮想のマシンであることを特徴とする請求項4記載の方法。
【請求項6】
前記第2のオブジェクトコードブロックは第2のマシン上での実行に適したフォーマットであることを特徴とする請求項4記載の方法。
【請求項7】
前記抗タンパー技術は、前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックを不明瞭化することを含むことを特徴とする請求項1記載の方法。
【請求項8】
前記第2のマシンは仮想のマシンであることを特徴とする請求項1記載の方法。
【請求項9】
前記翻訳は、前記第2のオブジェクトコードブロックに基づくチェックサム又はディジタル署名を決定することを含み、該チェックサム又はディジタル署名は前記第2のオブジェクトコードの実行前又は実行中に確認されることを特徴とする請求項1記載の方法。
【請求項10】
1つ以上のマシン属性又はユーザ属性に基づく識別名を決定することと、
ランタイムに、第1のオブジェクトコードブロックを第2のオブジェクトコードブロックに翻訳することと、
前記第2のオブジェクトコードブロックを後から実行するために格納することと、を備え、
前記翻訳は、前記第2のオブジェクトコードブロックを不明瞭化することを含み、該不明瞭化は前記識別名に基づく、
ことを特徴とする方法。
【請求項11】
前記識別名が異なる場合には前記第2のオブジェクトブロックを後から実行しないことにより、前記抗タンパー技術が適用されることを特徴とする請求項10記載の方法。
【請求項12】
前記マシン属性はハードウェアのアドレス又はリードオンリメモリのシリアル番号を含むことを特徴とする請求項11記載の方法。
【請求項13】
前記ユーザ属性は、ユーザ識別名、ユーザパスワード、ユーザアカウント名、及びユーザアカウント番号からなる集合の中から選択されることを特徴とする請求項11記載の方法。
【請求項14】
前記不明瞭化は、前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに追加のコードを挿入することを含むことを特徴とする請
求項10記載の方法。
【請求項15】
前記抗タンパー技術は、補助結果を生成するオブジェクトコードを前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに追加することを含み、前記補助結果がない場合は前記第2のオブジェクトコードブロックを実行しない、ことを特徴とする請求項10記載の方法。
【請求項16】
前記マシン属性はクロックに基づくことを特徴とする請求項10記載の方法。
【請求項17】
前記マシン属性はハードウェアのアドレス又はリードオンリメモリのシリアル番号を含むことを特徴とする請求項10記載の方法。
【請求項18】
前記ユーザ属性は、ユーザ識別名、ユーザパスワード、ユーザアカウント名、及びユーザアカウント番号からなる集合の中から選択されることを特徴とする請求項10記載の方法。
【請求項19】
前記第1のマシンは仮想のマシンであることを特徴とする請求項10記載の方法。
【請求項20】
第1のオペレーティングシステムからのサービスを要求するようにフォーマット化されたシステムコールであって、第2のオブジェクトコードブロックのランタイムの翻訳である第1のオブジェクトコードブロックに含まれるシステムコールを受け取ることと、
前記サービスを提供するのに第2のオペレーティングシステムのどのシステムコールサービスが必要とされるのかを決定することと、
前記システムコールをサービスするためのシステムコールサービスが不能であるかどうかを抗タンパーポリシーに基づき決定することと、
前記システムコールをサービスするためのシステムコールサービスが不能でない場合、前記システムコールをサービスすることと、
を含むことを特徴とする方法。
【請求項21】
前記抗タンパーポリシーは、システムリソースにアクセスするシステムコールサービスを不能にすることを特徴とする請求項20記載の方法。
【請求項22】
前記第1のオペレーティングシステムは、Mac OS X、Linux、及びMicrosoft Windows(登録商標)からなる集合の中から選択されることを特徴とする請求項20記載の方法。
【請求項23】
前記第2のオペレーティングシステムは、Mac OS X、Linux、及びMicrosoft Windows(登録商標) からなる集合の中から選択されることを特徴とする請求項20記載の方法。
【請求項24】
第1のオブジェクトコードプログラムをインストールすることと、
マシンによる実行のために第2のオブジェクトコードプログラムを格納することと、を備え、
前記インストールは、前記第1のオブジェクトコードプログラムを、前記マシン上で実行可能な前記第2のオブジェクトコードプログラムに静的に翻訳することを含み、
該静的な翻訳は、
前記マシンの状態又はユーザ属性に基づき識別名を決定することと、
前記第1のオブジェクトコードプログラム又は前記第2のオブジェクトコードプログラムを前記識別名に基づき不明瞭化することと、
を含むことを特徴とする方法。
【請求項25】
前記不明瞭化は、前記第1のオブジェクトコードプログラム又は前記第2のオブジェクトコードプログラムに追加のコードを挿入することを含むことを特徴とする請求項24記載の方法。
【請求項26】
前記挿入された追加のコードは補助結果を生成することを特徴とする請求項25記載の方法。
【請求項27】
前記第1のオブジェクトコードプログラムは前記マシン上で実行可能でないことを特徴とする請求項24記載の方法。
【請求項28】
前記静的な翻訳はネットワークサーバ上で行われ、前記第2のオブジェクトコードプログラムはネットワークのクライアント上に格納されることを特徴とする請求項24記載の方法。
【請求項29】
前記マシンは、Microsoft Windows(登録商標)、Linux、及び Mac OS X からなる集合の中から選択されたオペレーティングシステムを含むことを特徴とする請求項24記載の方法。
【請求項30】
前記第1のオブジェクトコードプログラム又は前記第2のオブジェクトコードプログラムはネットワーク接続を介して受け取られることを特徴とする請求項24記載の方法。
【請求項31】
前記マシンは、Apple Macintosh 及び Windows(登録商標) PC からなる集合の中から選択されることを特徴とする請求項24記載の方法。
【請求項32】
前記マシンの状態は、クロック、ROMのシリアル番号、及びハードウェアのアドレスからなるグループの中から選択された、マシンに特有の属性に基づいていることを特徴とする請求項24記載の方法。
【請求項33】
ランタイムに第1のオブジェクトコードプログラムのブロックを第2のオブジェクトコードプログラムのブロックに翻訳する翻訳部であって、前記第2のオブジェクトコードプログラムのブロックが前記翻訳の結果として不明瞭化され、前記第2のオブジェクトコードプログラムのブロックがシステムコールを含んでいる翻訳部と、
前記システムコールのいくつかのためのサービスを提供し、前記システムコールのその他のためのサービスを抗タンパーポリシーに基づいて拒否するランタイムサポート部と、
を備えることを特徴とする装置。
【請求項34】
前記第1のオブジェクトコードプログラムはバイトコードを含むことを特徴とする請求項33記載の装置。
【請求項35】
前記第2のオブジェクトコードプログラムはApple Macintosh 又は Windows(登録商標) PC 上で実行可能であることを特徴とする請求項33記載の装置。
【請求項36】
前記第1のオブジェクトコードは仮想のマシン上で実行可能であることを特徴とする請求項33記載の装置。
【請求項37】
第1のオブジェクトコードプログラムを第2のオブジェクトコードプログラムに翻訳する翻訳部であって、前記第2のオブジェクトコードプログラムが第1のオペレーティングシステムへのシステムコールを含み、前記第2のオブジェクトコードブロックが前記翻訳の結果として不明瞭化されたオブジェクトコードを含んでいる翻訳部と、
前記第2のオブジェクトコードプログラムを実行し、前記システムコールを送信する実行部と、
前記実行部から前記システムコールを受け取り、第2のオペレーティングシステムのシステムコールサービスルーティンを有するシステムコールをサービスするランタイムサポート部と、
を備えることを特徴とする装置。
【請求項38】
前記不明瞭化されたオブジェクトコードはマシン属性に基づいていることを特徴とする請求項37記載の装置。
【請求項39】
前記マシン属性は、クロック、リードオンリメモリのシリアル番号、及びハードウェアアドレスからなるグループの中から選択されることを特徴とする請求項38記載の装置。
【請求項40】
前記不明瞭化されたコードはユーザ属性に基づいており、該ユーザ属性は、ユーザ識別名、ユーザパスワード、ユーザアカウント番号、及びユーザアカウント名からなる集合の中から選択されることを特徴とする請求項37記載の装置。
【請求項41】
前記第2のオペレーティングシステムは、Apple Macintosh オペレーティングシステム及び Windows(登録商標) オペレーティングシステムからなる集合の中から選択されることを特徴とする請求項37記載の装置。
【請求項42】
プロセッサと、該プロセッサに接続されたメモリ部とを備えるシステムであって、
前記メモリ部は、
ランタイムに第1のオブジェクトコードプログラムのブロックを第2のオブジェクトコードプログラムのブロックに翻訳する翻訳部であって、前記第2のオブジェクトコードプログラムのブロックが前記翻訳の結果として不明瞭化され、前記第2のオブジェクトコードプログラムのブロックがシステムコールを含んでいる翻訳部と、
前記システムコールのいくつかのためのサービスを提供し、前記システムコールのその他のためのサービスを抗タンパーポリシーに基づいて拒否するランタイムサポート部と、
を備えることを特徴とするシステム。
【請求項43】
前記第1のオブジェクトコードプログラムはバイトコードを含むことを特徴とする請求項42記載のシステム。
【請求項44】
前記第2のオブジェクトコードプログラムは、Apple Macintosh 及び Windows(登録商標)PC からなる集合の中から選択されたコンピュータ上で実行可能であることを特徴とする請求項42記載のシステム。
【請求項45】
前記第1のオブジェクトコードは仮想のマシン上で実行可能であることを特徴とする請求項42記載のシステム。
【請求項46】
マシンによって実行される時に該マシンに動作を行わせる命令を提供するマシン読み取り可能な媒体であって、前記動作は、
第1のオブジェクトコードブロックを受け取ることと、
前記第1のオブジェクトコードブロックを第2のオブジェクトコードブロックに翻訳することと、
前記第2のオブジェクトコードブロックを実行することと、を備え、
前記翻訳は、前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに抗タンパー技術を適用することを含む、
ことを特徴とするマシン読み取り可能な媒体。
【請求項47】
前記抗タンパー技術は、マシン属性又はユーザ属性に基づく識別名を決定することと、前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに追加のコードを挿入することとを含み、前記識別名がない場合は前記第2のオブジェクトコードブロックを実行しない、ことを特徴とする請求項46記載の方法。
【請求項48】
前記抗タンパー技術は、補助結果を生成するオブジェクトコードを前記第1のオブジェクトコードブロック又は前記第2のオブジェクトコードブロックに追加することを含み、前記補助結果がない場合は前記第2のオブジェクトコードブロックを実行しない、ことを特徴とする請求項48記載の方法。
【請求項49】
前記第1のオブジェクトコードブロックは、第1のマシン上での実行に適したフォーマットのバイトコードを含むことを特徴とする請求項46記載のマシン読み取り可能な媒体。
【請求項50】
前記第1のマシンは仮想のマシンであることを特徴とする請求項46記載のマシン読み取り可能な媒体。
【請求項51】
前記第2のオブジェクトコードブロックは第2のマシン上での実行に適したフォーマットであることを特徴とする請求項49記載のマシン読み取り可能な媒体。
【請求項52】
前記抗タンパー技術は、前記オブジェクトコードブロックを不明瞭化することを含むことを特徴とする請求項46記載のマシン読み取り可能な媒体。
【請求項53】
前記第2のマシンは仮想のマシンであることを特徴とする請求項46記載のマシン読み取り可能な媒体。
【請求項54】
前記翻訳は、前記第2のオブジェクトコードブロックに基づくチェックサム又はディジタル署名を決定することを含み、該チェックサム又はディジタル署名は前記第2のオブジェクトコードを実行する前に確認されることを特徴とする請求項46記載のマシン読み取り可能な媒体。
【請求項55】
マシンによって実行される時に該マシンに動作を行わせる命令を提供するマシン読み取り可能な媒体であって、前記動作は、
1つ以上のマシン属性又はユーザ属性に基づく識別名を決定することと、
ランタイムに、第1のオブジェクトコードブロックを第2のオブジェクトコードブロックに翻訳することと、
前記第2のオブジェクトコードブロックを後から実行するために格納することと、を備え、
前記翻訳は、前記第2のオブジェクトコードブロックを不明瞭化することを含み、該不明瞭化は前記識別名に基づく、
ことを特徴とするマシン読み取り可能な媒体。
【請求項56】
前記識別名が異なる場合には前記第2のオブジェクトブロックを後から実行しないことにより、前記抗タンパー技術が適用されることを特徴とする請求項55記載の方法。
【請求項57】
前記マシン属性はハードウェアアドレス又はリードオンリメモリのシリアル番号を含むことを特徴とする請求項56記載の方法。
【請求項58】
前記ユーザ属性は、ユーザ識別名、ユーザパスワード、ユーザアカウント名、及びユーザアカウント番号からなる集合の中から選択されることを特徴とする請求項56記載の方法。
【請求項59】
前記マシン属性はクロックに基づくことを特徴とする請求項55記載のマシン読み取り可能な媒体。
【請求項60】
前記マシン属性はマシンに特有の情報に基づくことを特徴とする請求項55記載のマシン読み取り可能な媒体。
【請求項61】
前記マシンに特有の情報はハードウェアアドレス又はリードオンリメモリのシリアル番号を含むことを特徴とする請求項60記載のマシン読み取り可能な媒体。
【請求項62】
前記第1のマシンは仮想のマシンであることを特徴とする請求項55記載のマシン読み取り可能な媒体。
【請求項63】
前記ユーザ属性は、ユーザ識別名、パスワード、ユーザアカウント番号、及びユーザアカウント名からなる集合の中から選択されることを特徴とする請求項55記載のマシン読み取り可能な媒体。
【請求項64】
マシンによって実行される時に該マシンに動作を行わせる命令を提供するマシン読み取り可能な媒体であって、前記動作は、
第1のオペレーティングシステムからのサービスを要求するようにフォーマット化されたシステムコールであって、第2のオブジェクトコードブロックのランタイムの翻訳である第1のオブジェクトコードブロックに含まれるシステムコールを受け取ることと、
前記サービスを提供するのに第2のオペレーティングシステムのどのシステムコールサービスが必要とされるのかを決定することと、
前記システムコールをサービスするためのシステムコールサービスが不能であるかどうかを抗タンパーポリシーに基づき決定することと、
前記システムコールをサービスするためのシステムコールサービスが不能でない場合、前記システムコールをサービスすることと、
を含むことを特徴とするマシン読み取り可能な媒体。
【請求項65】
前記抗タンパーポリシーは、システムリソースにアクセスするシステムコールサービスを不能にすることを特徴とする請求項64記載のマシン読み取り可能な媒体。
【請求項66】
前記第1のオペレーティングシステムは、Microsoft Window(登録商標)、Linux、及び Mac OS Xからなる集合の中から選択されることを特徴とする請求項64記載のマシン読み取り可能な媒体。
【請求項67】
前記第2のオペレーティングシステムは、Apple Macintosh オペレーティングシステム、Linux、及び Microsoft Windows(登録商標)からなる集合の中から選択されることを特徴とする請求項64記載のマシン読み取り可能な媒体。
【請求項68】
マシンによって実行される時に該マシンに動作を行わせる命令を提供するマシン読み取り可能な媒体であって、前記動作は、
第1のオブジェクトコードプログラムをインストールすることと、
マシンによる実行のために第2のオブジェクトコードプログラムを格納することと、を備え、
前記インストールは、前記第1のオブジェクトコードプログラムを、前記マシン上で実行可能な前記第2のオブジェクトコードプログラムに静的に翻訳することを含み、
該静的な翻訳は、
前記マシンの状態又はユーザ属性に基づき識別名を決定することと、
前記第1のオブジェクトコードプログラム又は前記第2のオブジェクトコードプログラムを前記識別名に基づき不明瞭化することと、
を含むことを特徴とするマシン読み取り可能な媒体。
【請求項69】
前記第1のオブジェクトコードプログラムは前記マシン上で実行可能でないことを特徴とする請求項68記載のマシン読み取り可能な媒体。
【請求項70】
前記静的な翻訳はネットワークサーバ上で行われ、前記第2のオブジェクトコードプログラムはネットワークのクライアント上に格納されることを特徴とする請求項68記載のマシン読み取り可能な媒体。
【請求項71】
前記第1のオブジェクトコードプログラム又は前記第2のオブジェクトコードプログラムはネットワーク接続を介して受け取られることを特徴とする請求項68記載のマシン読み取り可能な媒体。
【請求項72】
前記マシンは、Apple Macintosh 及び Windows(登録商標) PC からなる集合の中から選択されることを特徴とする請求項68記載のマシン読み取り可能な媒体。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公表番号】特表2007−535761(P2007−535761A)
【公表日】平成19年12月6日(2007.12.6)
【国際特許分類】
【出願番号】特願2007−510781(P2007−510781)
【出願日】平成17年4月14日(2005.4.14)
【国際出願番号】PCT/US2005/012835
【国際公開番号】WO2005/111761
【国際公開日】平成17年11月24日(2005.11.24)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(503260918)アップル インコーポレイテッド (568)
【Fターム(参考)】
【公表日】平成19年12月6日(2007.12.6)
【国際特許分類】
【出願日】平成17年4月14日(2005.4.14)
【国際出願番号】PCT/US2005/012835
【国際公開番号】WO2005/111761
【国際公開日】平成17年11月24日(2005.11.24)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(503260918)アップル インコーポレイテッド (568)
【Fターム(参考)】
[ Back to top ]