(57)【要約】抗タンパーコードを生成するシステム及び方法が、ここに記載されている。一実施形態において、本方法は、第１のオブジェクトコードブロックを受け取ることを備えている。本方法はまた、第１のオブジェクトコードブロックを第２のコードブロックに翻訳することを備えており、この翻訳は、抗タンパー技術を第１のオブジェクトコードブロック又は第２のオブジェクトコードブロックに適用することを含んでいる。本方法はまた、第２のオブジェクトコードブロックを実行することを備えている。【選択図】図１
2007535761.tif 000002
【特許請求の範囲】
【請求項１】
第１のオブジェクトコードブロックを受け取ることと、
前記第１のオブジェクトコードブロックを第２のオブジェクトコードブロックに翻訳することと、
前記第２のオブジェクトコードブロックを実行することと、を備え、
前記翻訳は、前記第１のオブジェクトコードブロック又は前記第２のオブジェクトコードブロックに抗タンパー技術を適用することを含む、
ことを特徴とする方法。
【請求項２】
前記抗タンパー技術は、マシン属性又はユーザ属性に基づく識別名を決定することと、前記第１のオブジェクトコードブロック又は前記第２のオブジェクトコードブロックに追加のコードを挿入することとを含み、前記識別名がない場合は前記第２のオブジェクトコードブロックを実行しない、ことを特徴とする請求項１記載の方法。
【請求項３】
前記抗タンパー技術は、補助結果を生成するオブジェクトコードを前記第１のオブジェクトコードブロック又は前記第２のオブジェクトコードブロックに追加することを含み、前記補助結果がない場合は前記第２のオブジェクトコードブロックを実行しない、ことを特徴とする請求項１記載の方法。
【請求項４】
前記第１のオブジェクトコードブロックは、第１のマシン上での実行に適したフォーマットのバイトコードを含むことを特徴とする請求項１記載の方法。
【請求項５】
前記第１のマシンは仮想のマシンであることを特徴とする請求項４記載の方法。
【請求項６】
前記第２のオブジェクトコードブロックは第２のマシン上での実行に適したフォーマットであることを特徴とする請求項４記載の方法。
【請求項７】
前記抗タンパー技術は、前記第１のオブジェクトコードブロック又は前記第２のオブジェクトコードブロックを不明瞭化することを含むことを特徴とする請求項１記載の方法。
【請求項８】
前記第２のマシンは仮想のマシンであることを特徴とする請求項１記載の方法。
【請求項９】
前記翻訳は、前記第２のオブジェクトコードブロックに基づくチェックサム又はディジタル署名を決定することを含み、該チェックサム又はディジタル署名は前記第２のオブジェクトコードの実行前又は実行中に確認されることを特徴とする請求項１記載の方法。
【請求項１０】
１つ以上のマシン属性又はユーザ属性に基づく識別名を決定することと、
ランタイムに、第１のオブジェクトコードブロックを第２のオブジェクトコードブロックに翻訳することと、
前記第２のオブジェクトコードブロックを後から実行するために格納することと、を備え、
前記翻訳は、前記第２のオブジェクトコードブロックを不明瞭化することを含み、該不明瞭化は前記識別名に基づく、
ことを特徴とする方法。
【請求項１１】
前記識別名が異なる場合には前記第２のオブジェクトブロックを後から実行しないことにより、前記抗タンパー技術が適用されることを特徴とする請求項１０記載の方法。
【請求項１２】
前記マシン属性はハードウェアのアドレス又はリードオンリメモリのシリアル番号を含むことを特徴とする請求項１１記載の方法。
【請求項１３】
前記ユーザ属性は、ユーザ識別名、ユーザパスワード、ユーザアカウント名、及びユーザアカウント番号からなる集合の中から選択されることを特徴とする請求項１１記載の方法。
【請求項１４】
前記不明瞭化は、前記第１のオブジェクトコードブロック又は前記第２のオブジェクトコードブロックに追加のコードを挿入することを含むことを特徴とする請
求項１０記載の方法。
【請求項１５】
前記抗タンパー技術は、補助結果を生成するオブジェクトコードを前記第１のオブジェクトコードブロック又は前記第２のオブジェクトコードブロックに追加することを含み、前記補助結果がない場合は前記第２のオブジェクトコードブロックを実行しない、ことを特徴とする請求項１０記載の方法。
【請求項１６】
前記マシン属性はクロックに基づくことを特徴とする請求項１０記載の方法。
【請求項１７】
前記マシン属性はハードウェアのアドレス又はリードオンリメモリのシリアル番号を含むことを特徴とする請求項１０記載の方法。
【請求項１８】
前記ユーザ属性は、ユーザ識別名、ユーザパスワード、ユーザアカウント名、及びユーザアカウント番号からなる集合の中から選択されることを特徴とする請求項１０記載の方法。
【請求項１９】
前記第１のマシンは仮想のマシンであることを特徴とする請求項１０記載の方法。
【請求項２０】
第１のオペレーティングシステムからのサービスを要求するようにフォーマット化されたシステムコールであって、第２のオブジェクトコードブロックのランタイムの翻訳である第１のオブジェクトコードブロックに含まれるシステムコールを受け取ることと、
前記サービスを提供するのに第２のオペレーティングシステムのどのシステムコールサービスが必要とされるのかを決定することと、
前記システムコールをサービスするためのシステムコールサービスが不能であるかどうかを抗タンパーポリシーに基づき決定することと、
前記システムコールをサービスするためのシステムコールサービスが不能でない場合、前記システムコールをサービスすることと、
を含むことを特徴とする方法。
【請求項２１】
前記抗タンパーポリシーは、システムリソースにアクセスするシステムコールサービスを不能にすることを特徴とする請求項２０記載の方法。
【請求項２２】
前記第１のオペレーティングシステムは、Mac OS X、Linux、及びMicrosoft Windows（登録商標）からなる集合の中から選択されることを特徴とする請求項２０記載の方法。
【請求項２３】
前記第２のオペレーティングシステムは、Mac OS X、Linux、及びMicrosoft Windows（登録商標） からなる集合の中から選択されることを特徴とする請求項２０記載の方法。
【請求項２４】
第１のオブジェクトコードプログラムをインストールすることと、
マシンによる実行のために第２のオブジェクトコードプログラムを格納することと、を備え、
前記インストールは、前記第１のオブジェクトコードプログラムを、前記マシン上で実行可能な前記第２のオブジェクトコードプログラムに静的に翻訳することを含み、
該静的な翻訳は、
前記マシンの状態又はユーザ属性に基づき識別名を決定することと、
前記第１のオブジェクトコードプログラム又は前記第２のオブジェクトコードプログラムを前記識別名に基づき不明瞭化することと、
を含むことを特徴とする方法。
【請求項２５】
前記不明瞭化は、前記第１のオブジェクトコードプログラム又は前記第２のオブジェクトコードプログラムに追加のコードを挿入することを含むことを特徴とする請求項２４記載の方法。
【請求項２６】
前記挿入された追加のコードは補助結果を生成することを特徴とする請求項２５記載の方法。
【請求項２７】
前記第１のオブジェクトコードプログラムは前記マシン上で実行可能でないことを特徴とする請求項２４記載の方法。
【請求項２８】
前記静的な翻訳はネットワークサーバ上で行われ、前記第２のオブジェクトコードプログラムはネットワークのクライアント上に格納されることを特徴とする請求項２４記載の方法。
【請求項２９】
前記マシンは、Microsoft Windows（登録商標）、Linux、及び Mac OS X からなる集合の中から選択されたオペレーティングシステムを含むことを特徴とする請求項２４記載の方法。
【請求項３０】
前記第１のオブジェクトコードプログラム又は前記第２のオブジェクトコードプログラムはネットワーク接続を介して受け取られることを特徴とする請求項２４記載の方法。
【請求項３１】
前記マシンは、Apple Macintosh 及び Windows（登録商標） PC からなる集合の中から選択されることを特徴とする請求項２４記載の方法。
【請求項３２】
前記マシンの状態は、クロック、ＲＯＭのシリアル番号、及びハードウェアのアドレスからなるグループの中から選択された、マシンに特有の属性に基づいていることを特徴とする請求項２４記載の方法。
【請求項３３】
ランタイムに第１のオブジェクトコードプログラムのブロックを第２のオブジェクトコードプログラムのブロックに翻訳する翻訳部であって、前記第２のオブジェクトコードプログラムのブロックが前記翻訳の結果として不明瞭化され、前記第２のオブジェクトコードプログラムのブロックがシステムコールを含んでいる翻訳部と、
前記システムコールのいくつかのためのサービスを提供し、前記システムコールのその他のためのサービスを抗タンパーポリシーに基づいて拒否するランタイムサポート部と、
を備えることを特徴とする装置。
【請求項３４】
前記第１のオブジェクトコードプログラムはバイトコードを含むことを特徴とする請求項３３記載の装置。
【請求項３５】
前記第２のオブジェクトコードプログラムはApple Macintosh 又は Windows（登録商標） PC 上で実行可能であることを特徴とする請求項３３記載の装置。
【請求項３６】
前記第１のオブジェクトコードは仮想のマシン上で実行可能であることを特徴とする請求項３３記載の装置。
【請求項３７】
第１のオブジェクトコードプログラムを第２のオブジェクトコードプログラムに翻訳する翻訳部であって、前記第２のオブジェクトコードプログラムが第１のオペレーティングシステムへのシステムコールを含み、前記第２のオブジェクトコードブロックが前記翻訳の結果として不明瞭化されたオブジェクトコードを含んでいる翻訳部と、
前記第２のオブジェクトコードプログラムを実行し、前記システムコールを送信する実行部と、
前記実行部から前記システムコールを受け取り、第２のオペレーティングシステムのシステムコールサービスルーティンを有するシステムコールをサービスするランタイムサポート部と、
を備えることを特徴とする装置。
【請求項３８】
前記不明瞭化されたオブジェクトコードはマシン属性に基づいていることを特徴とする請求項３７記載の装置。
【請求項３９】
前記マシン属性は、クロック、リードオンリメモリのシリアル番号、及びハードウェアアドレスからなるグループの中から選択されることを特徴とする請求項３８記載の装置。
【請求項４０】
前記不明瞭化されたコードはユーザ属性に基づいており、該ユーザ属性は、ユーザ識別名、ユーザパスワード、ユーザアカウント番号、及びユーザアカウント名からなる集合の中から選択されることを特徴とする請求項３７記載の装置。
【請求項４１】
前記第２のオペレーティングシステムは、Apple Macintosh オペレーティングシステム及び Windows（登録商標） オペレーティングシステムからなる集合の中から選択されることを特徴とする請求項３７記載の装置。
【請求項４２】
プロセッサと、該プロセッサに接続されたメモリ部とを備えるシステムであって、
前記メモリ部は、
ランタイムに第１のオブジェクトコードプログラムのブロックを第２のオブジェクトコードプログラムのブロックに翻訳する翻訳部であって、前記第２のオブジェクトコードプログラムのブロックが前記翻訳の結果として不明瞭化され、前記第２のオブジェクトコードプログラムのブロックがシステムコールを含んでいる翻訳部と、
前記システムコールのいくつかのためのサービスを提供し、前記システムコールのその他のためのサービスを抗タンパーポリシーに基づいて拒否するランタイムサポート部と、
を備えることを特徴とするシステム。
【請求項４３】
前記第１のオブジェクトコードプログラムはバイトコードを含むことを特徴とする請求項４２記載のシステム。
【請求項４４】
前記第２のオブジェクトコードプログラムは、Apple Macintosh 及び Windows（登録商標）PC からなる集合の中から選択されたコンピュータ上で実行可能であることを特徴とする請求項４２記載のシステム。
【請求項４５】
前記第１のオブジェクトコードは仮想のマシン上で実行可能であることを特徴とする請求項４２記載のシステム。
【請求項４６】
マシンによって実行される時に該マシンに動作を行わせる命令を提供するマシン読み取り可能な媒体であって、前記動作は、
第１のオブジェクトコードブロックを受け取ることと、
前記第１のオブジェクトコードブロックを第２のオブジェクトコードブロックに翻訳することと、
前記第２のオブジェクトコードブロックを実行することと、を備え、
前記翻訳は、前記第１のオブジェクトコードブロック又は前記第２のオブジェクトコードブロックに抗タンパー技術を適用することを含む、
ことを特徴とするマシン読み取り可能な媒体。
【請求項４７】
前記抗タンパー技術は、マシン属性又はユーザ属性に基づく識別名を決定することと、前記第１のオブジェクトコードブロック又は前記第２のオブジェクトコードブロックに追加のコードを挿入することとを含み、前記識別名がない場合は前記第２のオブジェクトコードブロックを実行しない、ことを特徴とする請求項４６記載の方法。
【請求項４８】
前記抗タンパー技術は、補助結果を生成するオブジェクトコードを前記第１のオブジェクトコードブロック又は前記第２のオブジェクトコードブロックに追加することを含み、前記補助結果がない場合は前記第２のオブジェクトコードブロックを実行しない、ことを特徴とする請求項４８記載の方法。
【請求項４９】
前記第１のオブジェクトコードブロックは、第１のマシン上での実行に適したフォーマットのバイトコードを含むことを特徴とする請求項４６記載のマシン読み取り可能な媒体。
【請求項５０】
前記第１のマシンは仮想のマシンであることを特徴とする請求項４６記載のマシン読み取り可能な媒体。
【請求項５１】
前記第２のオブジェクトコードブロックは第２のマシン上での実行に適したフォーマットであることを特徴とする請求項４９記載のマシン読み取り可能な媒体。
【請求項５２】
前記抗タンパー技術は、前記オブジェクトコードブロックを不明瞭化することを含むことを特徴とする請求項４６記載のマシン読み取り可能な媒体。
【請求項５３】
前記第２のマシンは仮想のマシンであることを特徴とする請求項４６記載のマシン読み取り可能な媒体。
【請求項５４】
前記翻訳は、前記第２のオブジェクトコードブロックに基づくチェックサム又はディジタル署名を決定することを含み、該チェックサム又はディジタル署名は前記第２のオブジェクトコードを実行する前に確認されることを特徴とする請求項４６記載のマシン読み取り可能な媒体。
【請求項５５】
マシンによって実行される時に該マシンに動作を行わせる命令を提供するマシン読み取り可能な媒体であって、前記動作は、
１つ以上のマシン属性又はユーザ属性に基づく識別名を決定することと、
ランタイムに、第１のオブジェクトコードブロックを第２のオブジェクトコードブロックに翻訳することと、
前記第２のオブジェクトコードブロックを後から実行するために格納することと、を備え、
前記翻訳は、前記第２のオブジェクトコードブロックを不明瞭化することを含み、該不明瞭化は前記識別名に基づく、
ことを特徴とするマシン読み取り可能な媒体。
【請求項５６】
前記識別名が異なる場合には前記第２のオブジェクトブロックを後から実行しないことにより、前記抗タンパー技術が適用されることを特徴とする請求項５５記載の方法。
【請求項５７】
前記マシン属性はハードウェアアドレス又はリードオンリメモリのシリアル番号を含むことを特徴とする請求項５６記載の方法。
【請求項５８】
前記ユーザ属性は、ユーザ識別名、ユーザパスワード、ユーザアカウント名、及びユーザアカウント番号からなる集合の中から選択されることを特徴とする請求項５６記載の方法。
【請求項５９】
前記マシン属性はクロックに基づくことを特徴とする請求項５５記載のマシン読み取り可能な媒体。
【請求項６０】
前記マシン属性はマシンに特有の情報に基づくことを特徴とする請求項５５記載のマシン読み取り可能な媒体。
【請求項６１】
前記マシンに特有の情報はハードウェアアドレス又はリードオンリメモリのシリアル番号を含むことを特徴とする請求項６０記載のマシン読み取り可能な媒体。
【請求項６２】
前記第１のマシンは仮想のマシンであることを特徴とする請求項５５記載のマシン読み取り可能な媒体。
【請求項６３】
前記ユーザ属性は、ユーザ識別名、パスワード、ユーザアカウント番号、及びユーザアカウント名からなる集合の中から選択されることを特徴とする請求項５５記載のマシン読み取り可能な媒体。
【請求項６４】
マシンによって実行される時に該マシンに動作を行わせる命令を提供するマシン読み取り可能な媒体であって、前記動作は、
第１のオペレーティングシステムからのサービスを要求するようにフォーマット化されたシステムコールであって、第２のオブジェクトコードブロックのランタイムの翻訳である第１のオブジェクトコードブロックに含まれるシステムコールを受け取ることと、
前記サービスを提供するのに第２のオペレーティングシステムのどのシステムコールサービスが必要とされるのかを決定することと、
前記システムコールをサービスするためのシステムコールサービスが不能であるかどうかを抗タンパーポリシーに基づき決定することと、
前記システムコールをサービスするためのシステムコールサービスが不能でない場合、前記システムコールをサービスすることと、
を含むことを特徴とするマシン読み取り可能な媒体。
【請求項６５】
前記抗タンパーポリシーは、システムリソースにアクセスするシステムコールサービスを不能にすることを特徴とする請求項６４記載のマシン読み取り可能な媒体。
【請求項６６】
前記第１のオペレーティングシステムは、Microsoft Window（登録商標）、Linux、及び Mac OS Xからなる集合の中から選択されることを特徴とする請求項６４記載のマシン読み取り可能な媒体。
【請求項６７】
前記第２のオペレーティングシステムは、Apple Macintosh オペレーティングシステム、Linux、及び Microsoft Windows（登録商標）からなる集合の中から選択されることを特徴とする請求項６４記載のマシン読み取り可能な媒体。
【請求項６８】
マシンによって実行される時に該マシンに動作を行わせる命令を提供するマシン読み取り可能な媒体であって、前記動作は、
第１のオブジェクトコードプログラムをインストールすることと、
マシンによる実行のために第２のオブジェクトコードプログラムを格納することと、を備え、
前記インストールは、前記第１のオブジェクトコードプログラムを、前記マシン上で実行可能な前記第２のオブジェクトコードプログラムに静的に翻訳することを含み、
該静的な翻訳は、
前記マシンの状態又はユーザ属性に基づき識別名を決定することと、
前記第１のオブジェクトコードプログラム又は前記第２のオブジェクトコードプログラムを前記識別名に基づき不明瞭化することと、
を含むことを特徴とするマシン読み取り可能な媒体。
【請求項６９】
前記第１のオブジェクトコードプログラムは前記マシン上で実行可能でないことを特徴とする請求項６８記載のマシン読み取り可能な媒体。
【請求項７０】
前記静的な翻訳はネットワークサーバ上で行われ、前記第２のオブジェクトコードプログラムはネットワークのクライアント上に格納されることを特徴とする請求項６８記載のマシン読み取り可能な媒体。
【請求項７１】
前記第１のオブジェクトコードプログラム又は前記第２のオブジェクトコードプログラムはネットワーク接続を介して受け取られることを特徴とする請求項６８記載のマシン読み取り可能な媒体。
【請求項７２】
前記マシンは、Apple Macintosh 及び Windows（登録商標） PC からなる集合の中から選択されることを特徴とする請求項６８記載のマシン読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータデータ処理の分野に関するものであり、特には、抗タンパー（tamper-resistant：改ざんに対抗する）ソフトウェアを生成する技術に関する。
【背景技術】
【０００２】
抗タンパーソフトウェアは、変更、改ざん、及び／又は攻撃することの困難なソフトウェアである。コードの不明瞭化（code obfuscation）は、抗タンパーソフトウェアを達成するための１つの技術である。一般に、コードの不明瞭化が目標とするところは、コードのブロック中で何が起こっているのかを攻撃者が決定することを困難にすることである。攻撃者がデバッガーやエミュレーターを使用する場合、コードの不明瞭化はコードの理解又は変更を困難にすることが可能である。
【０００３】
或るコード不明瞭化の技術によれば、追加の命令がプログラムに追加される。この命令は、攻撃者を混乱させたり、及び／又は補助結果（ancillary results）を生成するために追加されるのであり、実行が或る点を過ぎて続行可能である前に確認されなければならない。このコード不明瞭化の方法に伴う１つの問題点は、一般に、それが人手によって変更されなければならないコードを必要とするということである。更に、特にソフトウェアの一部が、システムサービスの限定を伴う抗タンパーの解釈的環境（interpretive environment）の中で動作しなければならない場合は、完全に再構築されなければならない現存のソフトウェアを必要とする場合もある。
【発明の開示】
【０００４】
ここには、抗タンパーコードを生成するシステム及び方法について記載する。一実施の形態において、本方法は、第１のオブジェクトコードブロックを受け取ることを備えている。本方法はまた、第１のオブジェクトコードブロックを第２のオブジェクトコードブロックに翻訳することを備え、この翻訳は、第１のオブジェクトコードブロック又は第２のオブジェクトコードブロックに抗タンパー技術を適用することを含む。本方法はまた、第２のオブジェクトコードブロックを実行することを備えている。
【０００５】
一実施の形態において、本システムは、プロセッサと、このプロセッサに接続されたメモリ部とを備えている。本システムにおいて、メモリ部は、ランタイムに第１のオブジェクトコードプログラムのブロックを第２のオブジェクトコードプログラムのブロックに翻訳する翻訳部を含んでおり、第２のオブジェクトコードプログラムのブロックは翻訳の結果として不明瞭化され、また、第２のオブジェクトコードプログラムのブロックはシステムコールを含んでいる。メモリ部はまた、システムコールのいつくかのためのサービスを提供するランタイムサポート部を含んでおり、このランタイムサポート部はシステムコールのその他のためのサービスを拒否し、また、サービスは抗タンパーポリシーに基づいて拒否される。
【発明を実施するための最良の形態】
【０００６】
以下、本発明の一例について図面を用いて説明するが、本発明は図示された構成に限定されるものではない。
【０００７】
ここには、抗タンパーコードを生成するシステム及び方法が記載されている。以下の記述においては、多くの特別な詳細構成が述べられている。しかし、本発明の実施形態はこれらの特別な詳細構成なしで実施されてもよいものと理解される。他の例では、この記述の理解が不明瞭にならないよう、周知の回路、構造、及び技術は詳細に示されていない。
なお、この記述では、「一実施形態」又は「実施形態」という用語は、その言及されている構成が本発明の少なくとも１つの実施形態に含まれているということを意味している。更に、この記述における「一実施形態」という個々の用語は、必ずしも同一の実施形態を意味するのではなく、しかし、いずれも相互に相容れないものでもなく、このことはもしそのように述べられていなくとも当業者には極めて明らかなことである。従って、本発明は、ここに記載された実施形態の各種の組み合わせ及び／又は統合を含むものであってもよい。更に、この記述において、「模範的な実施形態」という語句は、その言及されている実施形態が１つの例又は例示であることを意味している。
【０００８】
ここで、ブロック図は、本発明の模範的な実施形態を示す。またここで、フローチャートは、本発明の模範的な実施形態の動作を示す。フローチャートの動作は、ブロック図に示された模範的な実施形態を参照して記述される。しかし、フローチャートの動作は、ブロック図を参照して議論された実施形態以外の本発明の実施形態によって行なわれることも可能であり、また、ブロック図を参照して議論された実施形態は、フローチャートを参照して議論された動作とは異なる動作を行なうことも可能である、と理解されるべきである。更に、フローチャートは連続した動作を描いたものであるが、或る実施形態はこれらの動作のいくつかを並行して行なうことも可能である、と理解されるべきである。
【０００９】
実施例についての以下の記述は、４つのセクションに分かれている。第１のセクションでは、システムレベルの概要が説明される。第２のセクションでは、模範的な実現について記述される。第３のセクションでは、模範的な実施形態を用いる方法が記述される。第４のセクションでは、模範的なハードウェア及び動作環境について記述される。
【００１０】
＜システムレベルの概要＞
このセクションでは、本発明の模範的な実施形態のシステム構成を提供する。図１〜２は、抗タンパーコードを生成するための、選択可能な２つのシステムを示す。図１〜２の各機能部の動作は、後に続くセクションで記述されている。以下では、コードを不明瞭化するための技術を含む、幾つかの抗タンパー技術について議論する。このコード不明瞭化の技術は、単独で、又は、システムコールを限定したり補助結果を確認するような他のコード不明瞭化技術や抗タンパー技術と組み合わせて、使用可能である。
【００１１】
図１は、本発明の模範的な実施形態に係る、動的翻訳を用いて抗タンパーコードを生成するシステムを示すブロック図である。図１に示されるように、抗タンパーコードシステム１００は翻訳環境１３２を含み、この翻訳環境１３２は、翻訳器１１０、実行部１１２、翻訳キャッシュ１１４、及びランタイムサポート部１１６を含んでいる。このシステム１００はまたコンパイラ１０２を含んでおり、このコンパイラ１０２はオブジェクトコード格納部１０３に接続されている。このオブジェクトコード格納部１０３はローダ１０４に接続され、このローダ１０４は翻訳器１１０に接続されている。翻訳器１１０は翻訳キャッシュ１１４に接続されている。翻訳器１１０はまた実行部１１２に接続され、この実行部１１２はランタイムサポート部１１６に接続されている。ランタイムサポート部１１６はシステムリソース１１８に接続されている。
【００１２】
一実施形態によれば、コンパイラ１０２は高水準言語コンパイラ（例えば、Objective C コンパイラ、C++ コンパイラ、Java（登録商標） コンパイラ、C コンパイラ等）である。コンパイラ１０２は高水準ソースコードプログラムを１つ以上のオブジェクトコードブロックにコンパイルし、それをオブジェクコード格納部１０３に格納する。オブジェクトコード格納部１０３は、何らかの適当な記憶媒体（例えば、ＲＡＭ、ＲＯＭ、ディスク等）であり得る。
【００１３】
ローダ１０４は、オブジェクトコードブロックを翻訳器１１０へロードする。
このシステム１００の動作を、以下に記す。
【００１４】
図２は、本発明の模範的な実施形態に係る、静的翻訳を用いて抗タンパーコードを生成するシステムを示すブロック図である。図２に示されるように、抗タンパーコードシステム２００はランタイム環境２１６を含んでいる。このランタイム環境２１６は、実行部２１０及びランタイムサポート部２１２を含んでいる。抗タンパーコードシステム２００はまたコンパイラ２０８を含み、このコンパイラ２０８はオブジェクトコード格納部２０４に接続されている。このオブジェクトコード格納部２０４は翻訳器２０６に接続されている。オブジェクトコード格納部２０４はまたローダ２０２に接続され、このローダ２０２は実行部２１０に接続されている。この実行部２１０はランタイムサポート部２１２に接続されている。このランタイムサポート部２１２はシステムリソース２１４に接続されている。
【００１５】
一実施形態によれば、コンパイラ２０８は高水準言語コンパイラ（例えば、Objective C コンパイラ、C++ コンパイラ、Java（登録商標）コンパイラ、C コンパイラ等）である。コンパイラ２０８は高水準ソースコードを１つ以上のオブジェクトコードブロックにコンパイルする。コンパイラ２０８はまた、このオブジェクトコードブロックをオブジェクコード格納部２０４に格納する。コンパイラ２０８はネットワークサーバ上に遠隔配置することが可能であり、一方、このシステム２００の他の要素はネットワーククライアント上に局所的に格納される（上述したコンパイラ１０２の記載を参照のこと）。一実施形態では、オブジェクトコード格納部２０４はまた、翻訳器２０６によって生成されたオブジェクトコードを格納する。本発明の実施形態によれば、オブジェクトコード格納部２０４は、何らかの適当な記憶媒体（例えば、ＲＡＭ、ＲＯＭ、ディスク等）であり得る。
【００１６】
一実施形態では、ランタイム環境２１６は実行部２１０及びランタイムサポート部２１２を含んでいる。実施例によれば、実行部２１０はプログラム命令を実行するための何らかの適当な機構であり得る。例えば、実行部２１０は、プログラム命令を実行するのに必要な何らかのプロセッサ及び／又はメモリを含むことができる。上記プログラム命令は、バイトコード又はオブジェクトコードの命令であり得る。更に、プログラム命令は、ランタイムサポート部２１２によってサービスされるシステムコールを含んでいてもよい。一実施形態において、ランタイムサポート部２１２は、システムコールをサービスするためのソフトウェア及び／又はハードウェアを含んでいる。実行部２１０及びランタイムサポート部２１２の動作は、以下で、より詳細に記述する（次のセクションを参照のこと）。
【００１７】
本発明の実施形態によれば、図１及び図２の各機能部（例えば、翻訳器１１０、ランタイムサポート部１１６等）は、統合又は分離されることで、より少ない又はより多くの数の機能部を形成するようにすることも可能である。実施形態によれば、各機能部は、ここに記載された機能を行なうのに必要な、キュー、スタック、又はその他のデータ構造を含んでいてもよい。更に、各機能部は、何らかの適当な通信方法（メッセージ伝達、パラメータ伝達、信号等）を用いて通信可能なように結合されていてもよい。加えて、各機能部は、何らかの適当な相互接続構造（完全接続（fully connected）、ハイパーキューブ等）に従って接続可能である。本発明の実施例と共に使用される各機能部のいずれかは、ここに記載した動作を行なうための命令を含むマシン読み取り可能な媒体（マシン可読媒体）を含んでいてもよい。マシン読み取り可能な媒体は、マシン（例えばコンピュータ）によって読み取り可能な形式の情報を提供（すなわち、格納及び／又は送信）する何らかの機構を含んでいる。例えば、マシン読み取り可能な媒体は、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記録媒体、光記録媒体、フラッシュメモリデバイス、電気・光・音響又は他の伝達信号形態（例えば、搬送波、赤外線信号、ディジタル信号等）等を含む。本発明の実施形態によれば、各機能部は、抗タンパーコードを生成する動作を実行するための他のタイプのロジック（例えば、ディジタルロジック）であってもよい。
【００１８】
＜模範的な実現＞
このセクションでは、上述したシステムによって行なわれる模範的な動作について説明する。このセクションでは、図３〜７が示される。以下の議論において、図３は、抗タンパーコードをコンパイルし、翻訳し、実行する一般的な動作を記載している。図４及び図５は、オブジェクトコードを抗タンパーオブジェクトコードに動的及び静的に翻訳する方法を記載している。図６はランタイムサポート動作を記載しており、図７はオブジェクトコードを不明瞭化する方法を記載している。
【００１９】
図３は、本発明の模範的な実施形態に係る、ソフトウェアを生成、翻訳、及び実行する動作を示すフローチャートである。このフローチャートは抗タンパーコードシステムの一般的な動作を記載しており、このシステムの各要素の詳細な動作はその後のフローチャートに記載されている。フローチャート３００の動作は、図１の模範的な抗タンパーコードシステムを参照して記載される。フローチャート３００は、ブロック３０２から始まる。
【００２０】
ブロック３０２では、ソースコードがコンパイルされて、最初のオブジェクトコードが生成される。例えば、コンパイラ１０２がソースコードプログラムをコンパイルして、最初のオブジェクトコードプログラムを生成する。一実施形態において、最初のオブジェクトコードは、仮想のマシン上で実行可能なバイトコードを含んでいる。一実施形態において、最初のオブジェクトコードは、特別なプロセッサ構造（例えば、PowerPC、MIPS、Intel Pentium(登録商標）等）上での実行に適したフォーマットとなっている。実施形態によれば、オブジェクトコードは、何らかの適当なローダフォーマットであってもよい。フローはブロック３０４に続く。
【００２１】
ブロック３０４では、最初のオブジェクトコードが抗タンパーオブジェクトコードに翻訳される。例えば、翻訳器１１０が、最初のオブジェクトコードを抗タンパーオブジェクトコードに翻訳する。一実施形態では、ローダ１０４が格納部（不図示）から最初のオブジェクトコードを取り出し、この最初のオブジェクトコードを翻訳器１１０へ渡す。翻訳器１１０は、最初のオブジェクトコードを受け取った後、翻訳中に抗タンパー技術を遂行することにより、最初のオブジェクトコードを抗タンパーオブジェクトコードに翻訳する。一実施形態において、翻訳器１１０は、翻訳を遂行する度に、最初のオブジェクトコードを異なる抗タンパーオブジェクトコードに翻訳可能である。一実施形態において、抗タンパー技術はオブジェクトコードを不明瞭化することを含んでいる。オブジェクトコードを不明瞭化する動作は、後に、図７を参照して、より詳細に記す。フローはブロック３０６に続く。
【００２２】
ブロック３０６に示されるように、抗タンパーコードオブジェクトが実行される。例えば、実行部１１２が抗タンパーオブジェクトコードを実行する。一実施形態において、翻訳器１１０が抗タンパーオブジェクトコードを実行部１１２へ送り、ここで抗タンパーオブジェクトコードが実行される。抗タンパーオブジェクトコードを翻訳及び実行する動作は、後に、図４〜５を参照して、より詳細に記す。このフローは、ブロック３０６で終了する。上述したように、図３は抗タンパーコードを生成するシステムの一般的な動作を記載し、一方、図４及び図５は翻訳器及び実行部の一層詳細な動作を記載している。
【００２３】
図４は、本発明の模範的な実施形態に係る、オブジェクトコードを動的に翻訳し実行する動作を示すフローチャートである。フローチャート４００の動作は、図１の模範的なシステムを参照して記載される。特に、フローチャート４００は、翻訳器１１０及び実行部１１２によって行なわれる動作を主に記載する。フローチャート４００は、ブロック４０
２から始まる。
【００２４】
ブロック４０２に示されるように、最初のオブジェクトコードブロックが選択される。例えば、翻訳器１１０が、操作を加えるための最初のオブジェクトコードブロックを選択する。一実施形態においては、最初のオブジェクトコードブロックは、仮想のマシン上で実行可能なバイトコードを含んでいるが、それに代わる実施形態は、プロセッサ上で実行可能なオブジェクトコードブロックを必要とする。フローはブロック４０４に続く。
【００２５】
ブロック４０４では、最初のオブジェクトコードブロックが既に翻訳されたかどうかが決定される。例えば、翻訳器１１０が、最初のオブジェクトコードブロックが既に翻訳されたかどうかを決定する。一実施形態においては、翻訳器１１０が、翻訳キャッシュ１１４を調べて、最初のオブジェクトブロックが既に翻訳されたかどうかを決定する。最初のオブジェクトコードブロックがまだ翻訳されていない場合、フローはブロック４０６へと続く。そうでない場合、フローはブロック４１６へと続く。
【００２６】
ブロック４１６では、翻訳された抗タンパーオブジェクトコードブロックがなくなったかどうかが決定される。例えば、翻訳器１１０が、翻訳キャッシュ１１４の中の翻訳された抗タンパーオブジェクトコードブロックを探し、それがなくなったかどうかを決定する。翻訳された抗タンパーブロックは、所定期間よりも長く翻訳キャッシュ１１４内に格納された後に、消滅する。例えば、翻訳された抗タンパーブロックが５つの時間単位（5 time units）以上の間キャッシュに格納されていると、それは消滅する。翻訳された抗タンパーコードブロックがなくなった場合、フローはブロック４０６へと続く。そうでない場合は、ブロック４１０へと続く。或る実施形態では、翻訳された抗タンパーオブジェクトコードブロックはなくならず、従って、これらの実施形態においてはブロック４１６がフローから省略されてもよい。そのような場合、ブロック４０４からの「ＹＥＳ」の経路はブロック４１０へと続くことになる。
【００２７】
ブロック４１０では、抗タンパーオブジェクトコードブロックが翻訳キャッシュから取り出される。例えば、翻訳器１１０が、翻訳キャッシュ１１４から抗タンパーオブジェクトコードブロックを取り出す。ブロック４１０から、フローはブロック４１２へと続く。
【００２８】
ブロック４０６では、最初のオブジェクトコードブロックが抗タンパーオブジェクトコードブロックに翻訳される。例えば、翻訳器１１０が、最初のオブジェクトコードブロックを抗タンパーオブジェクトコードブロックに翻訳する。一実施形態では、翻訳器１１０が、最初のオブジェクトコードブロックを抗タンパーオブジェクトコードブロックに翻訳する前に不明瞭化する。従って、最初のオブジェクトコードブロックを不明瞭化した結果として、翻訳が、不明瞭化されたオブジェクトコードブロックを生成する（すなわち、抗タンパーオブジェクトコードブロックが、不明瞭化されたコードを含む）。それに代わる実施形態では、翻訳器１１０が、最初のオブジェクトコードブロックを第２のオブジェクトコードブロックに翻訳し、これを不明瞭化して抗タンパーオブジェクトコードブロックを形成する。それに代わる実施形態では、翻訳器１１０が、同一プロセスの中で最初のオブジェクトコードブロックを翻訳及び不明瞭化する。すなわち、翻訳器１１０は、抗タンパーオブジェクトコードを生成する時に、最初のオブジェクトコードブロックを一命令ずつ（instruction-by-instruction）翻訳及び不明瞭化していく。或る実施形態では、オブジェクトコードブロックが翻訳される度に、翻訳器１１０が異なるオブジェクトコードを生成する。例えば、翻訳されてキャッシュされたオブジェクトコードがなくなると、翻訳器１１０が、なくなったブロックとは異なる、翻訳されたオブジェクトコードブロックを生成する。
【００２９】
一実施形態では、翻訳器１１０が、最初のオブジェクトコードブロックを抗タンパーオ
ブジェクトコードブロックに翻訳し、また、この抗タンパーオブジェクトコードブロックを証明する手段を使用する。例えば、翻訳器１１０が抗タンパーオブジェクトコードブロックのチェックサムを計算して格納する。或いは、翻訳器１１０が抗タンパーオブジェクトコードブロックにディジタル署名を行なう。抗タンパーオブジェクトコードブロックを実行する前に、実行部１１２が、チェックサムを確認するか、又はディジタル署名を証明して、抗タンパーオブジェクトコードブロックが変更されていないことを確かめてもよい。その他には、実行部１１２が、元のオブジェクトコードに追加された命令によって或る補助結果が生成されたことを確認するようにしてもよい。チェックサム、ディジタル署名、及び補助結果の確認のみを記したが、本発明の実施形態では、抗タンパーオブジェクトコードブロックを証明するための何らかの適当な技術を使用可能である。フローはブロック４０８へと続く。
【００３０】
ブロック４０８では、抗タンパーオブジェクトコードブロックが翻訳キャッシュに格納される。例えば、翻訳器１１０が、抗タンパーオブジェクトコードブロックを翻訳キャッシュ１１４に格納する。フローはブロック４１２へ続く。
【００３１】
ブロック４１２に示されるように、抗タンパーオブジェクトコードブロックが実行される。例えば、実行部１１２が抗タンパーオブジェクトコードブロックを取り出して実行する。一実施形態では、実行部１１２が、ランタイムサポート部１１６を用いて、抗タンパーオブジェクトコードブロック内に含まれるシステムコールを実行する。ランタイムサポート部１１６の動作は、後に図６についての議論の中で、より詳細に記載する。フローはブロック４１４へと続く。
【００３２】
ブロック４１４では、キャッシュされた抗タンパーオブジェクトコードブロックに対して、何らかの望ましい変更が行われる。例えば、もし望まれるのであれば、翻訳器１１０が、翻訳キャッシュ１１４内に格納されたオブジェクトブロックを更に変更することが可能である。ブロック４１４でフローが終了する。フロー４００は、単一のオブジェクトコードブロックを翻訳して実行するものとして示されているが、フロー４００は追加のオブジェクトコードブロックのために繰り返されるようにしてもよい。
【００３３】
フロー４００の動作は、高速のコード実行を考慮に入れている。コードはネイティブプロセッサの命令に翻訳されるので、その結果は抗タンパーのインタプリタ環境よりも高速である。
【００３４】
図５は、本発明の模範的な実施形態に係る、オブジェクトコードプログラムを静的に翻訳し実行する動作を示すフローチャートである。図５のフローチャートは、図２の模範的な翻訳システムを参照して説明する。特に、フローチャート５００は、翻訳器２０６及び実行部２１０の動作を主に記述する。フローチャート５００はブロック５０２から始まる。
【００３５】
ブロック５０２では、最初のオブジェクトコードプログラムが受け取られる。例えば、翻訳器２０６が、オブジェクトコードプログラムをオブジェクトコード格納部２０４から取り出す。一実施形態では、ソフトウェア導入プロセス（すなわち、ソフトウェアを格納し、それを実行用に構成するプロセス）の進行中に、翻訳器２０６がオブジュクトコード格納部２０４からオブジェクトコードプログラムを受け取る。それに代わる実施形態では、ソフトウェア導入プロセス中に、翻訳器２０６がネットワーク接続を介してオブジェクトコードプログラムを受け取る。フローはブロック５０４へ続く。
【００３６】
ブロック５０４では、最初のオブジェクトコードプログラムが抗タンパーオブジェクトコードプログラムに翻訳される。例えば、翻訳器２０６がオブジェクトコードプログラム
を抗タンパーオブジェクトコードプログラムに翻訳する。一実施形態では、これは最初のオブジェクトプログラムを不明瞭化することを含み、これについては後に更に詳しく説明する（図７を参照のこと）。上述したように、一実施形態においては、翻訳器２０６が抗タンパーオブジェクトコードプログラムのチェックサム又はディジタル署名を決定する。チェックサムが実行ユニット２１０によって使用されることで、抗タンパーオブジェクトコードプログラムが変更されているかどうかを決定することが可能である。フローはブロック５０６へ続く。
【００３７】
ブロック５０６では、抗タンパーオブジェクトコードプログラムが格納される。例えば、翻訳器２０６が抗タンパーオブジェクトコードプログラムをオブジェクトコード格納部２０４に格納する。フローはブロック５０８へ続く。
【００３８】
ブロック５０８では、抗タンパーオブジェクトコードプログラムがロードされる。例えば、ローダ２０２が抗タンパーオブジェクトコードプログラムを実行部２１０へロードする。フローはブロック５１０へと続く。
【００３９】
ブロック５１０では、抗タンパーオブジュクトコードプログラムが実行される。例えば、実行部２１０が抗タンパーオブジェクトコードプログラムを実行する。一実施形態では、オブジェクトプログラムが、システムリソース２１４へのアクセスを要求するシステムコールを含んでいる。一実施形態では、実行部２１０がランタイムサポート部２１２と協働して、システムコールをサービスする。システムコールをサービスする動作は、後に図６についての議論の中で、より詳細に説明する。一実施形態では、抗タンパーオブジェクトコードプログラムが、異なるコンピュータシステム上で実行可能である。例えば、ロード動作（ブロック５０８）は、翻訳（ブロック５０４）を行なうコンピュータシステム以外のコンピュータシステムに、抗タンパーオブジェクトコードをロードする。ブロック５１０でフローが終了する。
【００４０】
上述した図４及び図５についての議論では抗タンパーオブジェクトコードを動的又は静的に生成する動作を説明したが、図６はシステムコールをサービスする動作を示している。
【００４１】
図６は、本発明の模範的な実施形態に係る、抗タンパーポリシーに基づきシステムコールをサービスする動作を示すフローチャートである。フローチャート６００の動作は、ランタイムサポート部１１６の動作を示している。図６のフローチャートの動作は、図１に記載された模範的システムを参照して説明する。フローチャート６００はブロック６０２から始まる。
【００４２】
ブロック６０２に示されるように、システムコールが受け取られる。例えば、ランタイムサポート部１１６が実行部１１２からシステムコールを受け取る。一実施形態では、システムコールは、オペレーティングシステムからリソースを要求する機構である。実施形態によれば、システムコールは、システムリソース（例えば、ディスクドライブ、メモリ管理部等）へのアクセスを提供することのような限定された動作を実行部１１２に行なわせる、オブジェクトコード命令又はバイトコードである。フローはブロック６０４へと続く。
【００４３】
ブロック６０４では、システムコールをサービスすることが許可されているかどうかが決定される。例えば、ランタイムサポート部１１６が、システムコールサービスすることが許可されているかどうかを決定する。一実施形態では、ランタイムサポート部１１６が、抗タンパーポリシーをチェックして、システムコールをサービスすることが許可されているかどうかを決定する。実施形態によれば、抗タンパーポリシーは、ランタイムサポー
ト１１６内に格納されたデータ構造で表され得る。ランタイムサポート部１１６は上記データ構造を調べて、抗タンパーポリシーがシステムコールをサービスすることを考慮に入れているかどうかを決定する。ランタイムサポート部１１６がシステムコールをサービスすることを許可されていれば、フローはブロック６０８へと続く。そうでなければ、フローはブロック６０６へと続く。
【００４４】
ブロック６０６に示されるように、エラーが送信される。例えば、ランタイムサポート部１１６が実行部１１２へエラーを送信する。６０６でフローが終了する。
【００４５】
ブロック６０８では、システムコールがサービスされる。例えば、ランタイムサポート部１１６がシステムコールをサービスする。一実施形態では、ランタムサポート部１１６が、システムリソース１１８へのアクセスを提供することにより、システムコールをサービスする。一実施形態では、実行部１１２及びシステムリソース１１８が第１のオペレーティングシステムによって制御され、一方、システムコールは第２のオペレーティングシステムで使用されるようフォーマット化される。従って、ランタイムサポート部１１６は、第１のオペレーティングシステム用にフォーマット化されたシステムコールをサービスするのに、第２のオペレーティングシステムがどのサービスを提供しなければならないかを決定する。言い換えれば、ランタイムサポート部１１６は、システムコールをもう１つのオペレーティングシステムから現在のオペレーティングシステム（すなわち、実行部１１２を制御するオペレーティングシステム）のサービス上へマップする。一実施形態では、第１及び第２のオペレーティングシステムは一般には同一であるが、第２のオペレーティングシステムはシステムコールの限定された部分をサポートする。ブロック６０８でフローが終了する。
【００４６】
或る実施形態は、以下に記載された動作の１つ以上を遂行することにより、コードを不明瞭化することが可能である。一実施形態では、コードの不明瞭化は、不明瞭化の識別名を決定して該識別名に基づく１つ以上の動作を行なうことにより達成される。上記識別名は、ＲＯＭシリアル番号、ハードウェアアドレス、クロック値等のような、マシン固有の属性であり得る。或いは、上記識別名は、ユーザ識別名、コンピュータ識別名、アカウント識別名、又はその他のユーザ関連情報等のような、ユーザ属性から決定可能である。識別名を決定した後、この識別名に基づいて生成された無関係な（extraneous）コードをオブジェクトコード内に挿入可能である。更に、ダイレクトソースコードに相当するものを持たないオブジェクトコード機能（object code features）が、識別名に基づいて生成可能であり、そのようなオブジェクトコード機能が、その後、オブジェクトコードに挿入可能である。
【００４７】
その他の不明瞭化技術として、補助結果を生成する追加のコードが、識別名に基づいて生成可能である。この追加のコードは、その後、オブジェクトコードに挿入可能である。識別名が異なる時にコードが実行されないようにすると、抗タンパーが改善される。
【００４８】
幾つかのコード不明瞭化技術及び抗タンパー技術がここで述べられたが、本発明の実施形態は、翻訳中に適用されるべきあらゆるコード不明瞭化技術又は抗タンパー技術を考慮に入れている。
【００４９】
＜本発明の方法＞
このセクションでは、本発明の実施形態によって遂行される方法を説明する。或る実施形態では、この方法はマシン読み取り可能な媒体に格納された命令（例えばソフトウェア）によって遂行され、一方、他の実施形態では、この方法はハードウェア又は他のロジック（例えばディジタルロジック）によって遂行される。
【００５０】
このセクションでは、図７〜１０について議論される。特に、図７は、抗タンパーコードを生成する動的翻訳器によって行なわれる動作を記載しており、一方、図８は、識別名に基づくコード不明瞭化を用いて抗タンパーコードを生成する動的翻訳器の動作を記載している。図９は、抗タンパーポリシーに基づきシステムコールをサービスする動作を記載している。更に、図１０は、導入時のオブジェクトコード不明瞭化のための動作を記載している。
【００５１】
図７は、本発明の模範的な実施形態に係る、動的翻訳を用いて抗タンパーコードを生成する方法を示すフローチャートである。フローチャート７００はブロック７０２で始まり、ここで第１のオブジェクトコードブロックが受け取られる。フローはブロック７０４へ続く。ブロック７０４では、第１のオブジェクトコードブロックが第２のオブジェクトコードブロックに翻訳される。フローはブロック７０６へ続く。ブロック７０６では、第２のコードブロックが実行される。ブロック７０６でフローが終了する。
【００５２】
図８は、本発明の模範的な実施形態に係る、識別名に基づくコード不明瞭化を用いて抗タンパーコードを生成する動作を示すフローチャートである。フローチャート８００はブロック８０２で始まる。ブロック８０２では、マシンの状態に基づき識別名が決定される。フローはブロック８０４へ続く。ブロック８０４では、第１のオブジェクトコードブロックが第２のオブジェクトコードブロックに翻訳され、この第２のオブジェクトコードブロックが上記識別名を用いて不明瞭化される。フローはブロック９０６へと続く。ブロック８０６では、第１のブロックが実行される。ブロック８０６でフローが終了する。
【００５３】
図９は、本発明の模範的な実施形態に係る、抗タンパーポリシーに基づきシステムコールをサービスする動作を示すフローチャートである。フローチャート９００はブロック９０２で始まる。ブロック９０２では、第１のオブジェクトコードブロックのシステムコールが受けとられ、ここで、このシステムコールは第１のオペレーティングシステムからのサービスを要求するようフォーマット化される。フローはブロック９０４へ続く。ブロック９０４に示されるように、上記サービスを提供するのに第２のオペレーティングシステムのどのシステムコールサービスが必要とされるのかが決定される。フローはブロック９０６へ続く。ブロック９０６では、システムコールをサービスするためのシステムコールサービスが不能であるかどうかが、抗タンパーポリシーに基づき決定される。フローはブロック９０８へと続く。ブロック９０８に示されるように、システムコールをサービスするためのシステムコールが不能でない場合、システムコールがサービスされる。ブロック９０８でフローは終了する。
【００５４】
図１０は、本発明の模範的な実施形態に係る、オブジェクトコードがインストールされた場合におけるオブジェクトコードの翻訳及び不明瞭化を行なう動作を示すフローチャートである。フローチャート１０００は、ブロック１００２で始まる。ブロック１００２では、第１のオブジェクトコードプログラムがインストールされ、この第１のオブジェクトコードプログラムが第２のオブジェクトコードプログラムに翻訳され、そして、第１のオブジェクトコードプログラム又は第２のオブジェクトコードプログラムが不明瞭化される。フローはブロック１００４へ続く。ブロック１００４に示されるように、第２のオブジェクトコードプログラムがその実行のために格納される。ブロック１００４でフローが終了する。
【００５５】
＜ハードウェア及び動作環境＞
このセクションでは、本発明の実施形態が実施され得る模範的なハードウェア及び動作環境の概要を提供する。
【００５６】
図１１は、本発明の或る実施形態と共に使用される模範的なコンピュータシステムを示
す図である。図１１に示されるように、コンピュータシステム１１００は１つ以上のプロセッサ１１０２を備えている。コンピュータシステム１１００はまた、メモリ部１１３０、プロセッサバス１１２２、及び入力／出力コントローラ（ＩＯＣ）１１２４を含んでいる。プロセッサ１１０２、メモリ部１１３０、及びＩＯＣ１１２４はプロセッサバス１１２２に接続されている。プロセッサ１１０２は、何らかの適当なプロセッサ構造を備えていてもよい。コンピュータシステム１１００は１つ、２つ、３つ、又はそれ以上のプロセッサを備えていてもよく、それらのいずれかが本発明の実施形態に従った一連の命令を実行してもよい。
【００５７】
メモリ部１１３０は翻訳環境１３２を含んでいる。メモリ部１１３０はデータ及び／又は命令を記憶しており、例えばダイナミックランダムアクセスメモリ（ＤＲＡＭ）のような何らかの適当なメモリを備えていてもよい。コンピュータシステム１１００はまた、ＩＤＥドライブ及び／又はその他の適当な記録デバイスを含んでいる。グラフィックコントローラ１１０４は、本発明の実施形態に従い、表示デバイス１１０６上での情報の表示を制御する。
【００５８】
入力／出力コントローラ（ＩＯＣ）１１２４は、コンピュータシステム１１００のためのＩ／Ｏデバイス又は周辺機器へのインタフェースを提供する。ＩＯＣ１１２４は、プロセッサ１１０２、メモリ部１１３０、及び／又は、ＩＯＣ１１２４と通信する何らかの適当なデバイスや部品との、何らかの適当な通信リンクを提供するための、何らかの適当なインタフェースコントローラを備えていてもよい。本発明の一実施形態においては、ＩＯＣ１１２４は、各インタフェースのための適当なアービトレーション及びバッファリングを提供する。
【００５９】
本発明の一実施形態では、ＩＯＣ１１２４は、ハードディスクドライブ（ＨＤＤ）やコンパクトディスクリードオンリメモリ（ＣＤ ＲＯＭ）ドライブのような１つ以上の適当な統合ドライブエレクトロニクス（ＩＤＥ）ドライブ１１０８に、又は、１つ以上のＵＳＢポート１１１０を介して適当なユニバーサルシリアルバス（ＵＳＢ）デバイスに、インタフェースを提供する。一実施形態においては、ＩＯＣ１１２４はまた、キーボード１１１２、マウス１１１４、ＣＤ−ＲＯＭドライブ１１１８に、及び１つ以上のＦＩＲＥＷＩＲＥポート１１１６を介して１つ以上の適当なデバイスに、インタフェースを提供する。本発明の一実施形態では、ＩＯＣ１１２４はまた、コンピュータシステム１１００が他のコンピュータ及び／又はデバイスと通信可能であるように介在するネットワークインタフェース１１２０を提供する。
【００６０】
一実施形態においては、コンピュータシステム１１００は、ここに述べたオブジェクトモジュールを動的にロードするための方法論のいずれか１つ又は全部を実現する一連の命令（例えばソフトウェア）を記憶するマシン読み取り可能な媒体を含んでいる。更に、ソフトウェアは、完全に又は少なくとも一部が、メモリ部１１３０及び／又はプロセッサ１１０２内に常駐可能である。
【００６１】
このように、抗タンパーコードを生成するシステム及び方法について記載した。本発明は特定の模範的な実施形態を参照して記載されたが、これらの実施形態には、本発明の広い精神及び範囲から逸脱することなしに各種の変更及び変化を加えてもよいことは明らかである。従って、本明細書及び図面の記載は、限定的な意味ではなく、一例であるとみなされるべきである。
【図面の簡単な説明】
【００６２】
【図１】本発明の模範的な実施形態に係る、動的翻訳を用いて抗タンパーコードを生成するシステムを示すブロック図である。
【図２】本発明の模範的な実施形態に係る、静的翻訳を用いて抗タンパーコードを生成するシステムを示すブロック図である。
【図３】本発明の模範的な実施形態に係る、ソフトウェアを生成、翻訳、及び実行する動作を示すフローチャートである。
【図４】本発明の模範的な実施形態に係る、オブジェクトコードを翻訳及び実行する動作を示すフローチャートである。
【図５】本発明の模範的な実施形態に係る、オブジェクトコードプログラムを静的に翻訳し実行する動作を示すフローチャートである。
【図６】本発明の模範的な実施形態に係る、抗タンパーポリシーに基づきシステムコールをサービスする動作を示すフローチャートである。
【図７】本発明の模範的な実施形態に係る、動的翻訳を用いて抗タンパーコードを生成する方法を示すフローチャートである。
【図８】本発明の模範的な実施形態に係る、識別名に基づくコード不明瞭化を用いて抗タンパーコードを生成する動作を示すフローチャートである。
【図９】本発明の模範的な実施形態に係る、抗タンパーポリシーに基づきシステムコールをサービスする動作を示すフローチャートである。
【図１０】本発明の模範的な実施形態に係る、オブジェクトコードがインストールされた場合におけるオブジェクトコードの翻訳及び不明瞭化を行なう動作を示すフローチャートである。
【図１１】本発明の或る実施形態と共に使用される模範的なコンピュータシステムを示す図である。
【図１】
2007535761.tif 000003
【図２】
2007535761.tif 000004
【図３】
2007535761.tif 000005
【図４】
2007535761.tif 000006
【図５】
2007535761.tif 000007
【図６】
2007535761.tif 000008
【図７】
2007535761.tif 000009
【図８】
2007535761.tif 000010
【図９】
2007535761.tif 000011
【図１０】
2007535761.tif 000012
【図１１】
2007535761.tif 000013
【国際調査報告】
2007535761.tif 000014
2007535761.tif 000015
2007535761.tif 000016
2007535761.tif 000017
2007535761.tif 000018