(57)【要約】【課題】デバッガによるプログラムの解析行為を防止することができるようにしたプログラムを提供する。【解決手段】このプログラムは、コンピュータに、保護対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能と、前記監視プログラム起動機能によって起動された監視プログラムによって前記保護対象プログラムを起動またはアタッチするプログラム起動機能を実現させる。【選択図】図１
2008059404.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項２】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが起動していることを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項３】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
秘密の値である秘密値を記憶している第１の秘密値記憶機能、
前記監視プログラムにより、
前記保護対象プログラムの前記第１の秘密値記憶機能に記憶されている秘密値と同じ値である秘密値を記憶している第２の秘密値記憶機能、
前記保護対象プログラムにより、
前記第２の秘密値記憶機能によって記憶されている秘密値は、前記第１の秘密値記憶機能によって記憶されている秘密値と同じであるか否かを判断する判断機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項４】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項５】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶機能、
前記プログラムコードを前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項６】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項７】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記関数呼出先を記憶している関数呼出先記憶機能、
前記関数呼出先を保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項８】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記監視プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項９】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記監視プログラムに前記情報を設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項１０】
前記監視プログラムは他の監視プログラムから監視されている
ことを特徴とする請求項１，２，３，４，５，６，７，８または９に記載のプログラム。
【請求項１１】
前記監視プログラムは前記保護対象プログラムの監視を解除し、
前記保護対象プログラムは前記監視プログラムの監視を開始する
ことを特徴とする請求項１，２，３，４，５，６，７，８または９に記載のプログラム。
【請求項１２】
前記監視プログラムと前記保護対象プログラムを１つのモジュールとし、
前記モジュールを起動する場合の引数によって、前記監視プログラムまたは前記保護対象プログラムを起動する
ことを特徴とする請求項１，２，３，４，５，６，７，８または９に記載のプログラム。
【請求項１３】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項１４】
コンピュータに、
第２のプログラムを監視する第１のプログラムを起動する第１のプログラム起動機能、
前記第１のプログラムにより、
前記第２のプログラムを起動し、監視する第２のプログラム監視機能と、
前記第２のプログラムにより、
前記第１のプログラムを監視する監視機能、
を実現させ、前記第１のプログラムまたは前記第２のプログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項１５】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項１６】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが起動していることを確認する確認手段、
を有し、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項１７】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより秘密の値である秘密値を記憶している第１の秘密値記憶手段と、
前記監視プログラムにより前記第１の秘密値記憶手段によって記憶されている秘密値と同じ値である秘密値を記憶している第２の秘密値記憶手段と、
前記保護対象プログラムにより前記第２の秘密値記憶手段によって記憶されている秘密値は、前記第１の秘密値記憶手段によって記憶されている秘密値と同じであるか否かを判断する判断手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項１８】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記保護対象プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項１９】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶手段と、
前記保護対象プログラムに前記プログラムコードを設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項２０】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項２１】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより前記関数呼出先を記憶している関数呼出先記憶手段と、
前記保護対象プログラムに前記関数呼出先を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項２２】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記監視プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項２３】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記情報を前記監視プログラムに設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項２４】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項２５】
第２のプログラムを監視する第１のプログラムを起動する第１のプログラム起動手段と、
前記第１のプログラムにより前記第２のプログラムを起動する第２のプログラム起動手段と、
前記第２のプログラムにより前記第１のプログラムを監視する監視手段、
を有し、
前記第１のプログラムまたは第２のプログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システムおよびプログラムに関する。
【背景技術】
【０００２】
従来より、機密保護などの目的でデータやプログラムを暗号化することが行われている。
しかし、第三者によって、暗号化されたデータやプログラムが解析され、そのデータ等が盗用されたりする危険性が存在する。そこで、データやプログラムをこのような不正アクセスから保護することが必要である。プログラムの解析による改ざんなどの不正行為に対して、主にソフトウェアのみでその行為を防ぐ（解析を難しくする）というソフトウェア耐タンパー技術、あるいは難読化技術と呼ばれる技術がある。
【０００３】
これらに関連する技術として、例えば、特許文献１には、ソフトウェアを分割し、一部をサーバ上に配置して、使用する毎に、クライアントにサーバからプログラムの一部を送る方法が開示されている。
また、例えば、特許文献２には、プログラムの一部を暗号化しておいて、適宜復号する方法を前提として、それをリロケーション処理の必要なＯＳ上で実現するための方法が開示されている。
また、例えば、特許文献３には、プログラムの一部を暗号化しておいて、適宜復号する方法であり、その過程を複雑化した方法が開示されている。
また、例えば、特許文献４には、プログラムの関数呼び出しを、関数ポインタおよびそのテーブルを経由して行うことで、関数間の呼び出し関係を難読化する方法が開示されている。
また、例えば、特許文献５には、プログラムの制御構造（ループなど）を複雑化する方法が開示されている。
【０００４】
特許文献１から特許文献５に開示されている技術は、プログラムの解析行為を難しくするものである。つまり、基本的にプログラムの制御構造を複雑化したり、プログラムの一部を暗号化したりするなどの技術である。
一方、プログラムは、通常、デバッガなどにより容易に動作解析が可能である。このため、プログラムに秘密情報が含まれている場合には、プログラムを解析することによって容易に秘密情報が盗み出されるという事態が生じ得る。
これらに関連する技術として、例えば、特許文献６には、ソフトウェアが現在デバッガ上で実行されているかどうかをプロセッサのフラグを参照することで検出し、検出されたらプログラムの実行を停止する方法が開示されている。
【特許文献１】特開平０８−０１６３８５号公報
【特許文献２】特許第３０３３５６２号公報
【特許文献３】特開２００５−０１８７２５号公報
【特許文献４】特開２００３−３３７６２９号公報
【特許文献５】特開２００４−１８５０６４号公報
【特許文献６】特開平１１−１７５３３６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、このような背景技術の状況の中でなされたもので、デバッガによるプログラムの解析行為を防止することができるようにした情報処理システムおよびプログラムを提供することを目的としている。
【課題を解決するための手段】
【０００６】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
［１］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【０００７】
［２］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが起動していることを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【０００８】
［３］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
秘密の値である秘密値を記憶している第１の秘密値記憶機能、
前記監視プログラムにより、
前記保護対象プログラムの前記第１の秘密値記憶機能に記憶されている秘密値と同じ値である秘密値を記憶している第２の秘密値記憶機能、
前記保護対象プログラムにより、
前記第２の秘密値記憶機能によって記憶されている秘密値は、前記第１の秘密値記憶機能によって記憶されている秘密値と同じであるか否かを判断する判断機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【０００９】
［４］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【００１０】
［５］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶機能、
前記プログラムコードを前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【００１１】
［６］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【００１２】
［７］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記関数呼出先を記憶している関数呼出先記憶機能、
前記関数呼出先を保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【００１３】
［８］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記監視プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【００１４】
［９］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記監視プログラムに前記情報を設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【００１５】
［１０］  前記監視プログラムは他の監視プログラムから監視されている
ことを特徴とする［１］，［２］，［３］，［４］，［５］，［６］，［７］，［８］または［９］に記載のプログラム。
【００１６】
［１１］  前記監視プログラムは前記保護対象プログラムの監視を解除し、
前記保護対象プログラムは前記監視プログラムの監視を開始する
ことを特徴とする［１］，［２］，［３］，［４］，［５］，［６］，［７］，［８］または［９］に記載のプログラム。
【００１７】
［１２］  前記監視プログラムと前記保護対象プログラムを１つのモジュールとし、
前記モジュールを起動する場合の引数によって、前記監視プログラムまたは前記保護対象プログラムを起動する
ことを特徴とする［１］，［２］，［３］，［４］，［５］，［６］，［７］，［８］または［９］に記載のプログラム。
【００１８】
［１３］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【００１９】
［１４］  コンピュータに、
第２のプログラムを監視する第１のプログラムを起動する第１のプログラム起動機能、
前記第１のプログラムにより、
前記第２のプログラムを起動し、監視する第２のプログラム監視機能と、
前記第２のプログラムにより、
前記第１のプログラムを監視する監視機能、
を実現させ、前記第１のプログラムまたは前記第２のプログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【００２０】
［１５］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【００２１】
［１６］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが起動していることを確認する確認手段、
を有し、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【００２２】
［１７］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより秘密の値である秘密値を記憶している第１の秘密値記憶手段と、
前記監視プログラムにより前記第１の秘密値記憶手段によって記憶されている秘密値と同じ値である秘密値を記憶している第２の秘密値記憶手段と、
前記保護対象プログラムにより前記第２の秘密値記憶手段によって記憶されている秘密値は、前記第１の秘密値記憶手段によって記憶されている秘密値と同じであるか否かを判断する判断手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【００２３】
［１８］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記保護対象プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【００２４】
［１９］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶手段と、
前記保護対象プログラムに前記プログラムコードを設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【００２５】
［２０］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【００２６】
［２１］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより前記関数呼出先を記憶している関数呼出先記憶手段と、
前記保護対象プログラムに前記関数呼出先を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【００２７】
［２２］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記監視プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【００２８】
［２３］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記情報を前記監視プログラムに設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【００２９】
［２４］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【００３０】
［２５］  第２のプログラムを監視する第１のプログラムを起動する第１のプログラム起動手段と、
前記第１のプログラムにより前記第２のプログラムを起動する第２のプログラム起動手段と、
前記第２のプログラムにより前記第１のプログラムを監視する監視手段、
を有し、
前記第１のプログラムまたは第２のプログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【発明の効果】
【００３１】
請求項１のプログラムによれば、本構成を有していない場合に比較して、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００３２】
請求項２のプログラムによれば、本構成を有していない場合に比較して、保護対象プログラムは監視プログラムが起動していることを確認することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００３３】
請求項３のプログラムによれば、本構成を有していない場合に比較して、保護対象プログラムは、第２の秘密値記憶機能によって記憶されている秘密値は、第１の秘密値記憶機能によって記憶されている秘密値と同じであるか否かを判断することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００３４】
請求項４のプログラムによれば、本構成を有していない場合に比較して、監視プログラムは、保護対象プログラムが処理を続行するために必要な情報を記憶することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００３５】
請求項５のプログラムによれば、本構成を有していない場合に比較して、監視プログラムは、保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００３６】
請求項６のプログラムによれば、本構成を有していない場合に比較して、監視プログラムは、保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００３７】
請求項７のプログラムによれば、本構成を有していない場合に比較して、監視プログラムは、関数呼出先を保護対象プログラムに設定することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００３８】
請求項８のプログラムによれば、本構成を有していない場合に比較して、保護対象プログラムは、監視プログラムが処理を続行するために必要な情報を記憶することができ、保護対象プログラムが他のプログラムにより解析されるのを防止することができる。
【００３９】
請求項９のプログラムによれば、本構成を有していない場合に比較して、監視プログラムは、保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号することができ、保護対象プログラムは、監視プログラムが処理を続行するために必要な情報を記憶することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００４０】
請求項１０のプログラムによれば、本構成を有していない場合に比較して、請求項１から９のプログラムによる効果に加えて、監視プログラムは他の監視プログラムから監視されることになり、監視プログラムに対する監視行為を防止することができる。
【００４１】
請求項１１のプログラムによれば、本構成を有していない場合に比較して、請求項１から９のプログラムによる効果に加えて、監視プログラムは保護対象プログラムの監視を解除し、保護対象プログラムは監視プログラムの監視を開始でき、他のプログラムによる監視の防止をより強固にすることができる。
【００４２】
請求項１２のプログラムによれば、本構成を有していない場合に比較して、請求項１から９のプログラムによる効果に加えて、保護対象プログラムを起動する場合の引数によって、監視プログラムまたは保護対象プログラムを起動することができ、他のプログラムによる監視の防止をより強固にすることができる。
【００４３】
請求項１３のプログラムによれば、本構成を有していない場合に比較して、監視プログラムが他の監視プログラムから監視されているか否かを確認することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００４４】
請求項１４のプログラムによれば、本構成を有していない場合に比較して、第１のプログラムまたは第２のプログラムが他のプログラムにより監視されるのを防止することができる。
【００４５】
請求項１５の情報処理システムによれば、本構成を有していない場合に比較して、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００４６】
請求項１６の情報処理システムによれば、本構成を有していない場合に比較して、保護対象プログラムは監視プログラムが起動していることを確認することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００４７】
請求項１７の情報処理システムによれば、本構成を有していない場合に比較して、保護対象プログラムは、第２の秘密値記憶手段によって記憶されている秘密値は、第１の秘密値記憶手段によって記憶されている秘密値と同じであるか否かを判断することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００４８】
請求項１８の情報処理システムによれば、本構成を有していない場合に比較して、監視プログラムは、保護対象プログラムが処理を続行するために必要な情報を記憶することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００４９】
請求項１９の情報処理システムによれば、本構成を有していない場合に比較して、監視プログラムは、保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００５０】
請求項２０の情報処理システムによれば、本構成を有していない場合に比較して、監視プログラムは、保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００５１】
請求項２１の情報処理システムによれば、本構成を有していない場合に比較して、監視プログラムは、関数呼出先を保護対象プログラムに設定することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００５２】
請求項２２の情報処理システムによれば、本構成を有していない場合に比較して、保護対象プログラムは、監視プログラムが処理を続行するために必要な情報を記憶することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００５３】
請求項２３の情報処理システムによれば、本構成を有していない場合に比較して、監視プログラムは、保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号することができ、保護対象プログラムは、監視プログラムが処理を続行するために必要な情報を記憶することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００５４】
請求項２４の情報処理システムによれば、本構成を有していない場合に比較して、保護対象プログラムは、監視プログラムが他の監視プログラムから監視されているか否かを確認することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【００５５】
請求項２５の情報処理システムによれば、本構成を有していない場合に比較して、第１のプログラムまたは第２のプログラムが他のプログラムにより解析されるのを防止することができる。
【発明を実施するための最良の形態】
【００５６】
まず、実施の形態の理解を容易にするために、デバッガの動作環境、その動作について説明する。ここで、デバッガとはあるプログラムのデバッグをするためのプログラム、デバッギとはデバッグ対象のプログラムをいう。デバッガは、一般的にはプログラム開発時に用いられ、そのプログラムの挙動を確認するために利用するソフトウェアツールである。またデバッガは、他のプログラムの挙動を監視する監視プログラムである。また、ここでは「プログラムが他のプログラムを監視する」とは、「プログラムが他のプログラムのデバッガとして動作する」ということである。
【００５７】
図２は、デバッガとデバッギとの関係を示す説明図である。あるコンピュータのＯＳ上で、デバッグ対象プログラム２２０（デバッギ）とそのデバッグ対象プログラム２２０をデバッグするためのプログラムであるデバッガ２１０の両者が動作しているとする。
ステップ２１では、デバッガ２１０が、デバッグ対象プログラム２２０をデバッグ対象として、プロセスを生成、もしくは、既存のプロセスにデバッガとしてアタッチする。ここで、「アタッチ」とは、実行中のプロセスの挙動の監視を開始することを意味する。また、「デタッチ」とは、プロセスの挙動を監視している状態を解除（終了）することを意味する。
つまり、デバッガ２１０が、デバッグ対象プログラム２２０を起動する。このとき、デバッガ２１０が、デバッグ対象プログラム２２０のデバッガとして振舞えるように、ＯＳのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を呼び出し、パラメータを指定して起動する。例えば、ウィンドウズ（Ｗｉｎｄｏｗｓ、登録商標）ではＡＰＩ関数ＣｒｅａｔｅＰｒｏｃｅｓｓ（）が使われ、引数に”ＤＥＢＵＧ＿ＰＲＯＣＥＳＳ”フラグを指定する。これによって、デバッグ対象プログラム２２０は一時停止の状態でプロセスが生成される。既に実行中のプロセス（デバッグ対象プログラム２２０）をデバッグすることもできる。この場合は、既存のプロセスにデバッガをアタッチするためのＡＰＩを呼び出す。Ｗｉｎｄｏｗｓの場合は、ＡＰＩ関数ＤｅｂｕｇＡｃｔｉｖｅＰｒｏｃｅｓｓ（）であり、デバッガ２１０をアタッチした時点でデバッグ対象プログラム２２０はイベントを通知し、動作を一時停止する。
【００５８】
ステップ２２では、デバッグ対象プログラム２２０が、デバッグ対象プログラム２２０でイベント（ブレークポイント、スレッドの生成など）が発生すると、デバッガ２１０に通知する。
つまり、デバッグ対象プログラム２２０内で、デバッガ２１０が設定したブレークポイント（プログラムの実行を特定のアドレスで一時停止するために用いる）が実行されたり、特定のメモリアドレスの内容が変更されたり、他のプロセスやスレッドを生成したり、などのイベントが発生すると、デバッグ対象プログラム２２０からデバッガ２１０にイベントが発生したことが知らされる（実際にはデバッグ対象プログラム２２０が直接知らせるのではなく、ＯＳが介在して行われる）。イベントの通知に伴って、デバッグ対象プログラム２２０はプログラムの実行をそこで一時停止する。Ｗｉｎｄｏｗｓの場合は、デバッガ２１０がＡＰＩ関数ＷａｉｔＦｏｒＤｅｂｕｇＥｖｅｎｔ（）を呼び出すと、自分宛にイベント通知が来ていれば、その内容を受け取ることができる。
【００５９】
ステップ２３では、デバッガ２１０は、デバッグ対象プログラム２２０内の状態を取得し、表示する。その後、ユーザの指示によって、デバッグ対象プログラム２２０の内部状態を書き換え（ブレークポイントの設定、メモリ内容の変更など）、プロセスを続行する。
つまり、デバッガ２１０は、デバッグ対象プログラム２２０内でイベントが発生したことの通知を受け、デバッグ対象プログラム２２０内のメモリの内容や中断時のレジスタの内容を取得して、ユーザに理解できる形で表示し、ユーザによる次の指示を待つ。ユーザはメモリやレジスタの内容を変更し、必要ならばブレークポイントを新たに設定し、デバッグ対象プログラム２２０の実行を再開する。Ｗｉｎｄｏｗｓの場合は、メモリの内容を読み書きするには、ＡＰＩ関数ＲｅａｄＰｒｏｃｅｓｓＭｅｍｏｒｙ／ＷｒｉｔｅＰｒｏｃｅｓｓＭｅｍｏｒｙ、メモリの属性（読み込み／書き込み／実行）を書き換えるには、ＡＰＩ関数ＶｉｒｔｕａｌＰｒｏｔｅｃｔＥｘ（）、レジスタの内容の読み書きには、ＡＰＩ関数ＧｅｔＴｈｒｅａｄＣｏｎｔｅｘｔ／ＳｅｔＴｈｒｅａｄＣｏｎｔｅｘｔ、ブレークポイントを設定するには、実行を中断させたいアドレスの実行をブレーク命令に置き換えることで、行われる。デバッグ対象プログラム２２０の実行を再開するには、ＡＰＩ関数ＣｏｎｔｉｎｕｅＤｅｂｕｇＥｖｅｎｔ（）が用いられる。
ステップ２４では、以降、デバッグ対象プログラム２２０が終了するか、もしくは、デバッガ２１０が処理を中断するまで、ステップ２２〜ステップ２３の処理が繰り返される。
【００６０】
このように、デバッガ２１０は、デバッグとしてデバッグ対象プログラム２２０の挙動を監視することができる。したがって、デバッガ２１０をデバッグ目的でなく、難読化したプログラムの挙動解析に用いることも考えられる。従来の技術では、デバッガによる解析行為そのものを防ぐ方法ではなく、デバッガを検出している部分を解析することは可能であった。
【００６１】
次に、ここで実施の形態の理解をさらに容易にするために、基本的な考え方を説明する。
後述する実施の形態は、特定のプロセスに対しては、唯一のプロセスしかデバッガになれないというＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ、オペレーティングシステム、例えば、Ｗｉｎｄｏｗｓ（登録商標）やＬｉｎｕｘ（登録商標）など）がサポートするデバッガＡＰＩの特徴を利用するものである。
デバッグＡＰＩは、プログラムのデバッグを補助するために、一般的には予めＯＳに用意されたＡＰＩであり、あるプロセス（プログラム）が別のプロセス（プログラム）のデバッガになれるような機能が用意されており、開発環境などが有する通常のデバッグ機能はこのデバッグＡＰＩを利用して実現されている。
一方、デバッグＡＰＩでは、あるプロセスのデバッガとして振舞うことができるのは、唯一のデバッグプロセスのみである。これは複数のプロセスがデバッガとして機能できると、デバッギ内の状態に一貫性が無くなるためであり（同時に複数のデバッガからメモリ内容が変更されたり、など）、ＯＳの種類によらずデバッグＡＰＩはこの性質がある。
そこで、デバッガによる解析を防ぐために、保護したいプロセスに対してデバッガとして動作するプロセスを予め設けることで、保護対象のプロセスに対する攻撃者によるデバッガ解析を不可能とする。
【００６２】
すなわち、攻撃者による解析から防ぎたいプログラムに対して、言わばダミーのデバッガであるプロセスを起動しておくことで、攻撃者がデバッガによって解析しようとしても対象のプログラムをデバッグできないという状態を作り出すことを基本とするものである。なお、ここでダミーデバッガと呼んでいるのは、ダミーデバッガが本来のデバッグ機能のために存在しているわけではないからである。
【００６３】
これを図１を用いて説明する。ＯＳ４０上では、保護対象プログラム２０に対してただ一つのデバッガのみを発生させるだけであり、保護対象プログラム２０に対して２つ以上のデバッガを発生させることはできない。そこで、保護対象プログラム２０を解析しようとする攻撃者が保護対象プログラム２０の挙動を監視する攻撃者のデバッガ３０を発生させようとしても、その前にダミーデバッガ１０を発生させ、ダミーデバッガ１０が保護対象プログラム２０をデバッグしている状態にすることによって、攻撃者のデバッガ３０から保護対象プログラム２０に対する監視を阻止することができるようになる。
さらにダミーデバッガ１０が存在しないと、保護対象プログラム２０が正常に実行することができないように様々に工夫した実施の形態がある。つまり、より強力に保護するために、一方のプロセスが他方に依存するような仕組みを導入する。
【００６４】
図３を用いて、後述する実施の形態の全体の構成例を説明する。なお、図３に示したブロック図は、複数の実施の形態を示したものであり、これらの一部を用いて、各種の実施の形態が実現できる。また、図３に示したモジュールを組み合わせることで、各種のプログラム解析防止プログラム、プログラム解析防止システムを構築することが可能である。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはプログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、プログラム、システムおよび方法の説明をも兼ねている。また、モジュールは機能にほぼ一対一に対応しているが、実装においては、１モジュールを１プログラムで構成してもよいし、複数モジュールを１プログラムで構成してもよく、逆に１モジュールを複数プログラムで構成してもよい。また、複数モジュールは１コンピュータによって実行されてもよいし、分散または並列環境におけるコンピュータによって１モジュールが複数コンピュータで実行されてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続を含む。
また、システムとは、複数のコンピュータ、ハードウェア、装置等がネットワーク等で接続されて構成されるほか、１つのコンピュータによって実現される場合も含まれる。
【００６５】
図３に示すように、本実施の形態は、基本的には、攻撃者による解析から保護すべき保護対象プログラム１３００、その保護対象プログラム１３００を監視する監視プログラム１２００、その監視プログラム１２００を起動する監視プログラム起動モジュール１１００を有している。
監視プログラム起動モジュール１１００は、保護対象である保護対象プログラム１３００を起動する場合に、保護対象プログラム１３００を監視する監視プログラム１２００を起動する。ここで、保護対象プログラム１３００を起動する場合、保護対象プログラム１３００と監視プログラム１２００が起動される順番はいずれが先であってもよい。すなわち、攻撃者によるデバッガＡＰＩが発生する前に、監視プログラム１２００が起動されていればよい。監視プログラム１２００が保護対象プログラム１３００よりも先に起動される場合は、監視プログラム１２００が保護対象プログラム１３００を起動すればよい。逆に、保護対象プログラム１３００が監視プログラム１２００よりも先に起動される場合は、監視プログラム１２００が保護対象プログラム１３００にアタッチすればよい。
監視プログラム１２００内のプログラム起動モジュール１２１０は、監視プログラム起動モジュール１１００によって起動された監視プログラム１２００が保護対象プログラム１３００を起動または保護対象プログラム１３００にアタッチする。
【００６６】
保護対象プログラム１３００内の確認モジュール１３１０は、監視プログラム１２００が起動していることを確認する。また、監視プログラム１２００が他の監視プログラムから監視されているか否かを確認するようにしてもよい。
保護対象プログラム１３００内の第１の秘密値記憶モジュール１３２０は、秘密の値である秘密値を記憶している。
監視プログラム１２００内の第２の秘密値記憶モジュール１２２０は、保護対象プログラム１３００内の第１の秘密値記憶モジュール１３２０によって記憶されている秘密値と同じ値である秘密値を記憶している。
保護対象プログラム１３００内の判断モジュール１３３０は、第２の秘密値記憶モジュール１２２０によって記憶されている秘密値は、第１の秘密値記憶モジュール１３２０によって記憶されている秘密値と同じであるか否かを判断する。
【００６７】
監視プログラム１２００内の必要情報記憶モジュール１２３０は、保護対象プログラム１３００が処理を続行するために必要な情報を記憶している。
保護対象プログラム１３００内の必要情報取得モジュール１−１３４０は、必要情報記憶モジュール１―１２３０によって記憶されている必要情報を取得する。
監視プログラム１２００内のプログラムコード記憶モジュール１２４０は、保護対象プログラム１３００のプログラムコードとして欠けているプログラムコードを記憶している。
監視プログラム１２００内の復号モジュール１２５０は、保護対象プログラム１３００の一部が暗号化されているプログラムコードを復号する。ここで復号モジュール１２５０は、保護対象プログラム１３００内のプログラムコード取得モジュール１３５０から取得されるだけでなく、保護対象プログラム１３００内の暗号化されたコード保持部（プログラムだけではなく、データ等も含む）を直接復号してもよい。
保護対象プログラム１３００内のプログラムコード取得モジュール１３５０は、プログラムコード記憶モジュール１２４０によって記憶されているプログラムコードまたは復号モジュール１２５０によって復号されたプログラムコードを取得する。
【００６８】
監視プログラム１２００内の関数呼出先記憶モジュール１２６０は、関数呼出先を介して関数を呼び出すプログラムコードあるいは関数テーブルのようなデータであって、関数呼出先を記憶している。
保護対象プログラム１３００内の関数呼出先取得モジュール１３６０は、関数呼出先記憶モジュール１２６０によって記憶されている関数呼出先を取得する。
保護対象プログラム１３００内の必要情報記憶モジュール２―１３７０は、監視プログラム１２００が処理を続行するために必要な情報を記憶している。
監視プログラム１２００内の必要情報取得モジュール２―１２７０は、必要情報記憶モジュール２−１３７０によって記憶されている必要情報を取得する。
また、監視プログラム１２００は、他の監視プログラム１２００から監視されていてもよい。つまり、攻撃者による監視プログラム１２００の解析を防止するために、監視プログラム１２００自身が保護対象プログラム１３００と同様の立場になるようにするものである。
また、監視プログラム１２００は保護対象プログラム１３００をデタッチ、つまり監視を解除し、保護対象プログラム１３００は監視プログラム１２００にアタッチ、つまり監視を開始させてもよい。すなわち、監視プログラム１２００と保護対象プログラム１３００の立場を逆転させるものである。
また、監視プログラム１２００と保護対象プログラム１３００を１つのモジュールとして作成し、そのモジュールを起動する場合の引数によって、監視プログラム１２００または保護対象プログラム１３００を起動するようにしてもよい。
また、監視プログラム１２００は保護対象プログラム１３００を起動して監視し、保護対象プログラム１３００は監視プログラム１２００にアタッチして監視する。つまり互いに監視し合う関係になってもよい。
【００６９】
以下、図面に基づき本発明の好適な各種の実施の形態を説明する。
図４は、第１の実施の形態（ターゲットがホストを認証する例）の概念的なモジュール構成図を示している。
ここでのホスト３１０は図３の監視プログラム１２００に対応し、ターゲット３２０は図３の保護対象プログラム１３００に対応する。
監視プログラム（以下、「ホスト」ともいう）１２００がデバッガとして、保護対象プログラム（以下、「ターゲット」ともいう）１３００がデバッギとして、動作する実施の形態である。ターゲット３２０は、ホスト３１０の存在を間欠的に監視する。ここで、間欠的にとは、間隔をおいて繰り返されることの意であって、その間隔は一定時間であってもよいし、ランダムな時間間隔であってもよい。
【００７０】
以下にプログラムの実行の手順を示す。
ステップ３１では、ホスト３１０がユーザによって起動される。
ステップ３２では、ホスト３１０がターゲット３２０をデバッグ対象として、ターゲット３２０のプロセスを生成する。つまり、ホスト３１０は、ターゲット３２０をデバッグ対象として起動する。ホスト３１０はその後、ターゲット３２０からデバッグイベントを受け取るために待機する。
ステップ３３では、ターゲット３２０は、処理の先頭で、新規スレッドを生成し、そのスレッドで、ホスト３１０のプロセスが存在しているかどうかをチェックする。例えば、１分置きにホスト３１０のプログラムの実行ファイル名のプロセスが存在しているかどうかをチェックする。もし、存在していない場合は、ターゲット３２０のプログラムを終了する。
【００７１】
ステップ３４では、ターゲット３２０で特定のイベント（ブレークポイント、スレッドの生成など）が発生すると、ホスト３１０に通知される。
ステップ３５では、ホスト３１０はイベントを受け取ると、それが終了イベントでない限り、ターゲット３２０のプロセスを続行し、引き続きイベントを待つ。
ステップ３６では、以降、ターゲット３２０からプロセス終了イベントが通知されるまで、ステップ３４〜ステップ３５が繰り返される。ターゲット３２０からプロセス終了イベントが通知されたら、ホスト３１０もプロセスを終了する。
【００７２】
また、上記ステップ３３において、ホスト３１０のプロセスが正しいホスト３１０かどうかは、例えば、システムから、現在存在するプロセスの一覧を取得し（Ｗｉｎｄｏｗｓの場合は、ＥｎｕｍＰｒｏｃｅｓｓなど）、その一つ一つのプロセスに関して、そのプロセスの起動ファイル名を取得し（Ｗｉｎｄｏｗｓの場合は、ＥｎｕｍＰｒｏｃｅｓｓＭｏｄｕｌｅｓなど）、そのモジュールの名前や属性が正しいかどうかで判定する。属性とは、そのモジュールのファイルの作成者や日付情報などである。具体的には、ファイル名に基づく認証だけでは、例えば、偽のプログラムが同一パス上に同一のファイル名で正規のプログラムと置き換えられた場合、攻撃者からの解析を阻止しにくい。しかし、上記の通りファイル名以外の属性情報を用いて認証を行えば、そのような不正な置き換えが行われた場合にも解析を阻止できる可能性が高まる。
また、ファイルに対する電子署名を確認してもよい。具体的には、不正な解析を防止するために、ターゲット３２０がホスト３１０をデジタル署名の確認などによって認証して、その認証結果が正しいホスト３１０の場合のみターゲット３２０の処理を継続させる。
【００７３】
図５は、第２の実施の形態（ターゲットがホストをチャレンジ＆レスポンスで認証する例）の概念的なモジュール構成図を示している。
ここでのホスト４１０は図３の監視プログラム１２００に対応し、ターゲット４２０は図３の保護対象プログラム１３００に対応する。
第２の実施の形態は、第１の実施の形態におけるステップ３３の、ターゲット３２０がホスト３１０は正規のものであるかどうかを確認する処理を、チャレンジ＆レスポンスで行う例である。チャレンジ＆レスポンスとは、相手方が正しいかどうかを検証するために、何らかのチャレンジを投げ、相手方から返されたレスポンスが、チャレンジに対する正しい値かどうかをチェックすることで確認する方法である。例えば、ある秘密のバイト列を共有し、検証時に乱数を生成し、その乱数をチャレンジとして相手方に送り、相手は乱数と秘密値を連結したものを一方向性ハッシュ関数（ＳＨＡ１など）に与えて得られた値を計算してレスポンスとして送り返す。レスポンスを受け取ったら、同じ計算を行って、値が一致するかどうかをチェックするというものである。この方法の場合は、秘密の値が他者に漏洩しないかぎり、相手が正しいということを認証できる。
【００７４】
本実施の形態では、この方法を第１の実施の形態に適用する。具体的には第１の実施の形態のステップ３３〜ステップ３５を以下のようなステップ４３〜ステップ４５−３に変更する。ステップ３６は、第２の実施の形態でも用いる。なお、これに先立って、ホスト４１０とターゲット４２０では、秘密の２０バイトのデータである秘密の値Ｘおよび、生成した乱数Ｒを格納するアドレスＡ１と、レスポンスを格納するアドレスＡ２とをお互いに保持しているものとする。なお、他の実施の形態では、同様にアドレスＡ１、Ａ２等を用いる場合もあるが、発明の説明の簡潔性のため明示しない場合がある。
ステップ４３では、ターゲット４２０は、乱数Ｒを生成して、デバッグブレークを発生する。つまり、ターゲット４２０は、処理の先頭で、新規スレッドを生成する。そのスレッドは間欠的（定期的でもよく、例えば１分おきなど）に、以下の処理を行う。乱数Ｒを生成し、それを予め定めた特定のアドレスにセットし、デバッグブレークを発生させる。
【００７５】
ステップ４４では、ターゲット４２０の実行は中断し、デバッグブレークイベントが発生し、ホスト４１０に通知される。
ステップ４５−１では、ホスト４１０はイベントを受け取り、それがデバッグブレークイベントの場合は、ターゲット４２０の特定のアドレスＡ１からデータＲを読み取り、その値と自分が保持する秘密の値Ｘを連結して、ハッシュ値Ｈを求め（ＳＨＡ１など）、それをターゲット４２０の特定のアドレスＡ２に書き込む。
ステップ４５−２では、ホスト４１０はターゲット４２０のプロセスでデバッグブレーク命令を繰り返すことのないようにプログラムカウンタを一つ進めて、ターゲット４２０のプロセスを続行させる。受け取ったイベントが終了イベントだったらステップ３６に進む。それ以外なら、何もせずにターゲット４２０のプロセスを続行し、引き続きイベントを待つ。
ステップ４５−３では、ホスト４１０から実行継続を指示されたターゲット４２０は、続いて、アドレスＡ１に格納してあった乱数Ｒと、自分が保持する秘密の値Ｘを連結して、ハッシュ値Ｈ’を求め、その値が、アドレスＡ２に格納してある値と一致するかどうかをチェックする。一致しない場合は、ターゲット４２０はプロセスを終了する。
【００７６】
なお、第２の実施の形態では、ホスト４１０側とターゲット４２０側のデータの受け渡しのために、デバッグブレークイベントを使っているので、ホスト４１０がターゲット４２０のプロセスを生成する際に、このイベントを受け取れるように指定をして、プロセスを生成しなければならない。
【００７７】
また、第２の実施の形態では、秘密のデータとハッシュ関数を用いて認証を行っているが、デジタル署名によって、同様の認証処理を行うようにしてもよい。また、デバッグブレークイベントの代わりに他の種類のイベント（スレッドが生成された、など）を使うようにしてもよい。
【００７８】
図６は、第３の実施の形態（ターゲットのデータの一部をホストが保持する例）の概念的なモジュール構成図を示している。
ここでのホスト５１０は図３の監視プログラム１２００に対応し、ターゲット５２０は図３の保護対象プログラム１３００に対応する。
これまでの実施の形態では、ターゲットがホストの認証処理を行うのみであり、ターゲットが行うべき本来の処理には、ホストは一切かかわりが無かった。第３の実施の形態は、ターゲットプログラムの処理を続行するためには、ホスト側の助けを必要とするというものである。
ここでは、ターゲットの処理を行うために必須な何らかのデータをホスト５１０側が保持しておき、実行時に、ホスト５１０側がターゲット５２０側に、データを与えることによって、ターゲット５２０の処理が行われる例を説明する。
【００７９】
第３の実施の形態は、前述の第２の実施の形態のステップ４３〜ステップ４５−３を以下のようなステップ５３〜ステップ５５−３に変更する。ステップ３６は、第３の実施の形態でも用いる。なお、ターゲット５２０側は、処理に必要な秘密データＹを予めプログラム内には保持していないものとする。
ステップ５３では、ターゲット５２０は、本来の処理を続行する上で、必須な秘密データＹを取得する必要が発生したときには、デバッグブレークを発生させる。
ステップ５４では、ターゲット５２０の実行は中断し、デバッグブレークイベントが発生し、ホスト５１０に通知される。
ステップ５５−１では、ホスト５１０はイベントを受け取り、それがデバッグブレークイベントの場合は、ターゲット５２０の特定のアドレスＡに、ホスト５１０側のみが保持する秘密データＹを設定する。
ステップ５５−２では、ホスト５１０はターゲット５２０のプロセスでデバッグブレーク命令を繰り返すことのないようにプログラムカウンタを一つ進めて、ターゲット５２０のプロセスを続行させる。受け取ったイベントが終了イベントだったらステップ３６に進む。それ以外なら、何もせずにターゲット５２０のプロセスを続行させ、引き続きイベントを待つ。
ステップ５５−３では、ホスト５１０から実行継続を指示されたターゲット５２０は、続いて、アドレスＡに格納されてある秘密データＹを取得して本来の処理を続行する。
【００８０】
ターゲット５２０は、秘密データＹを使用した後、直ぐに破棄することで、必要な時には毎回ホスト５１０側から値を取得することが必要となる。
また、ここでは、秘密のデータはＹのみであると説明したが、秘密のデータをホスト５１０側が複数保持し、ターゲット５２０側が、必要なデータを指定して取得する方法も考えられる。この場合は、ホスト５１０は、データの識別子（番号）と、データの値の組を保持している。そして、第２の実施の形態の乱数Ｒの代わりにデータの識別子（番号）をあるアドレスにセットし、デバッグブレークイベントを発生させ、ホスト５１０は、その識別子に対応したデータをターゲット５２０内のアドレスＡにセットするように構成すればよい。
【００８１】
図７は、第４の実施の形態（ターゲットのプログラムコードの一部をホストが保持する例）の概念的なモジュール構成図を示している。
ここでのホスト６１０は図３の監視プログラム１２００に対応し、ターゲット６２０は図３の保護対象プログラム１３００に対応する。
第４の実施の形態は、ターゲットが持つべき処理を行うプログラムコードの一部をホスト側が保持する例である。
第４の実施の形態は、第３の実施の形態のステップ５３〜ステップ５５−３を以下のようなステップ６３〜ステップ６５−３に変更する。ステップ３６は、第４の実施の形態でも用いる。なお、ターゲット６２０側で必要な処理を行うプログラムコードの一部が欠けている状態であるものとする。
【００８２】
ステップ６３では、ターゲット６２０は、プログラムコードが欠けている部分を実行しようとすると、デバッグブレークを発生する（プログラムを抜き出した部分の先頭に、予めデバッグブレーク命令を埋め込んでおく）。
ステップ６４では、ターゲット６２０の実行は中断し、デバッグブレークイベントが発生し、ホスト６１０に通知される。
ステップ６５−１では、ホスト６１０はイベントを受け取り、それがデバッグブレークイベントの場合は、ターゲット６２０のプロセスのプログラムカウンタの値を読み取り、あらかじめホスト６１０が保持しているターゲット６２０のプログラムコードの一部を、ターゲット６２０のプログラムのプログラムカウンタの位置に埋め込む。
ステップ６５−２では、ホスト６１０はターゲット６２０のプロセスを続行させる。受け取ったイベントが終了イベントだったらステップ３６に進む。それ以外なら、何もせずにターゲット６２０のプロセスを続行し、引き続きイベントを待つ。
ステップ６５−３では、ホスト６１０から実行継続を指示されたターゲット６２０は、ブレークした位置の命令が既に置き換えられているので、それまでの処理を引き続き続行する。
【００８３】
なお、ステップ６５−１で、ホスト６１０がターゲット６２０のコード領域にプログラムコードを埋め込む際には、対象となるメモリ領域のページ属性を書き込み可能に設定することが必要な場合がある（Ｗｉｎｄｏｗｓなどは、ＶｉｒｔｕａｌＰｒｏｔｅｃｔＥｘ（）で行う）。
この実施の形態では、ホスト６１０側はターゲット６２０のプログラムのプログラムコードの一部を一つしか保持しない場合を説明しているが、当然ながら複数保持するようにしても良い。その場合は、ホスト６１０が、埋め込むアドレス値とプログラムコードの組を保持しておけば、デバッグブレークイベントが発生したときのターゲット６２０のプログラムのプログラムカウンタの値を参照することで、どのプログラムコードを埋め込めばよいかを特定できる。
【００８４】
ステップ６５−３では、ホスト６１０がターゲット６２０にプログラムコードを一度書き込むと、その場所ではそれ以降二度とデバッグブレークが発生しなくなるが、これは、ホスト６１０が不要になることを意味するので、プログラムの解析に対する耐性の観点からは好ましくない。
そこで、ホスト６１０が書き込むターゲット６２０のプログラムの最後の部分をデバッグブレーク命令にしておけば、ターゲット６２０のプロセスが埋め込まれたコードの実行を終えると最後のデバッグブレークを実行して再びデバッグブレークイベントが発生し、ホスト６１０に通知され、ホスト６１０側はそのイベントを受け取って、先ほど埋め込んだプログラムコードをターゲット６２０側から消去するという処理を行わせることが可能になる。なお、ホスト６１０側は、デバッグイベントがプログラムコードを埋め込むべきものか、消去すべきものかをターゲット６２０のプロセスのプログラムカウンタの値を参照することで判別できる。あるいはデバッグブレーク命令の代わりに、ホスト６１０が書き込んだプログラムの最後の部分で、自分自身を元に戻す命令、すなわち、先頭にデバッグブレークを設定し、残りを消去（ゼロクリア）する命令を入れておいてもよい。
【００８５】
図８は、第５の実施の形態（暗号化されたターゲットのプログラムコードをホストが復号する例）の概念的なモジュール構成図を示している。
ここでのホスト７１０は図３の監視プログラム１２００に対応し、ターゲット７２０は図３の保護対象プログラム１３００に対応する。
第５の実施の形態は、予め一部分が暗号化されているターゲットのプログラムコードをホスト側が復号する例である。
第５の実施の形態は、第３の実施の形態のステップ５３〜ステップ５５−３を以下のようなステップ７３〜ステップ７５−３に変更する。ステップ３６は、第５の実施の形態でも用いる。なお、ターゲット７２０側は、一部のプログラムコードが予め暗号化されており、その復号鍵は、ホスト７１０側が保持するものとする。また、暗号化されたプログラムコードの始まりには、デバッグブレーク命令が配置されているものとする。なお、プログラムの暗号化に関しては、特許文献２や特許文献３などの既存の技術で実現可能である。
【００８６】
ステップ７３では、ターゲット７２０は、暗号化されたプログラムコードの部分を実行しようとすると、その直前にあるデバッグブレーク命令を実行し、デバッグブレークを発生する。なお、デバッグブレーク命令は暗号化されていない。
ステップ７４では、ターゲット７２０の実行は中断し、デバッグブレークイベントが発生し、ホスト７１０に通知される。
ステップ７５−１では、ホスト７１０はイベントを受け取り、それがデバッグブレークイベントの場合は、あらかじめホスト７１０が保持しているターゲット７２０のプログラムコードの復号鍵Ｋと、暗号化されているバイト長Ｌを使って、ターゲット７２０のプログラムカウンタ部分からＬバイトを復号し、ターゲット７２０のメモリ上の命令列を書き換える。
ステップ７５−２では、ホスト７１０は、ターゲット７２０のプロセスでデバッグブレーク命令を繰り返すことのないようにプログラムカウンタを一つ進めて、ターゲット７２０のプロセスを続行させる。受け取ったイベントが終了イベントだったらステップ３６に進む。それ以外なら、何もせずにターゲット７２０のプロセスを続行し、引き続きイベントを待つ。
ステップ７５−３では、ホストから実行継続を指示されたターゲット７２０は、既にブレークした箇所以降の命令が復号されているので、それ以降の処理を継続する。
【００８７】
ステップ７５−１で、ホスト７１０がターゲット７２０のコード領域にプログラムコードを埋め込む際には、対象となるメモリ領域のページ属性を書き込み可能に設定する必要があるのは前例と同様である。
この例では、ホスト７１０側はターゲット７２０のプログラムのプログラムコードの一箇所しか復号しない場合を説明しているが、当然ながら複数箇所を復号するようにしてもよい。また、復号する箇所毎に復号鍵を変更したり、アルゴリズムを変えたりするようにしても良い。その場合は、デバッグブレークイベントが発生したときのターゲット７２０のプログラムのプログラムカウンタの値を参照して、復号鍵を特定しても良いし、第２の実施の形態で乱数Ｒをホストに渡したのと同じように、復号鍵を特定するパラメータや暗号アルゴリズム、初期値などの情報をターゲット７２０からホスト７１０に渡すようにしても良い。また、復号処理はホスト７１０側で行うのではなく、復号鍵のみをホスト７１０側が提供するようにしてもよい。その場合の構成は、第３の実施の形態と同様になる。
【００８８】
さらに、第４の実施の形態と同様に、ステップ７５−３では、ホスト７１０がターゲット７２０にプログラムコードを一度書き込むと、その場所では平文のプログラムコードが維持されてしまうので、暗号化された範囲の最後にデバッグブレーク命令を埋め込むことで、ホストに暗号化された範囲の実行の終了を通知し、ホストが再暗号化するようにしてもよい。また、ここでは暗号化対象をプログラムコードで説明しているが、対象をデータにしてもよい。
【００８９】
図９は、第６の実施の形態（ターゲットの一部の関数テーブルをホストが保持する例）の概念的なモジュール構成図を示している。
ここでのホスト８１０は図３の監視プログラム１２００に対応し、ターゲット８２０は図３の保護対象プログラム１３００に対応する。
第６の実施の形態は、ターゲット側が特許文献４に挙げられているように、関数の呼び出しを関数ポインタ経由で実行し、その関数ポインタの中身を特定の関数内で決定するようにプログラミングされている場合に、関数の呼び出し先を決定する処理をホスト側で実行するようにした例である。
【００９０】
第６の実施の形態は、第３の実施の形態のステップ５３〜ステップ５５−３を以下のようなステップ８３〜ステップ８５−３に変更する。ステップ３６は、第６の実施の形態でも用いる。なお、ターゲット８２０側は、少なくとも一部のプログラムコードは、関数を呼び出す際に直接呼び出すのではなく、ある関数ポインタに設定されたアドレスを呼び出すように、かつ、その呼び出し先を決定する際にデバッグブレークが発生するように、プログラミングされているものとする。また、ホストプログラムはターゲット８２０内の関数アドレスと、その関数を表す識別子(番号など)の対応表を持っている。
【００９１】
ステップ８３では、ターゲット８２０は、呼び出し先を決定しなければならない箇所で、呼び出し先パラメータをレジスタＲ１に格納しデバッグブレーク命令を実行し、デバッグブレークを発生する。
ステップ８４では、ターゲット８２０の実行は中断し、デバッグブレークイベントが発生し、ホスト８１０に通知される。
ステップ８５−１では、ホスト８１０はイベントを受け取り、それがデバッグブレークイベントの場合は、ターゲット８２０のプロセスのレジスタＲ１の値を読み取り、あらかじめホスト８１０が保持している呼び出し先一覧リストの中からその識別子に対応する呼び出し先を決定し、そのアドレスをターゲット８２０のプロセス内のメモリアドレスＦの位置に書き込む。
ステップ８５−２では、ホスト８１０はターゲット８２０のプロセスでデバッグブレーク命令を繰り返すことのないようにプログラムカウンタを一つ進めて、ターゲット８２０のプロセスを続行させる。受け取ったイベントが終了イベントだったらステップ３６に進む。それ以外なら、何もせずにターゲット８２０のプロセスを続行し、引き続きイベントを待つ。
ステップ８５−３では、ホスト８１０から実行継続を指示されたターゲット８２０は、アドレスＦに格納されているアドレス情報を関数アドレスであると解釈し、そのアドレスを関数呼び出しして、処理を続行する。
【００９２】
なお、この例では、ホスト８１０側が決定したアドレス情報をターゲット８２０のメモリ内に書き込むようにしているが、ターゲット８２０のプログラムのプログラムカウンタを直接書き換えるようにしてもよい。この場合は、必要に応じて、関数からの戻りアドレスをターゲット８２０のプログラムのスタック上に設定しておく。
またホスト８１０側が呼び出し先を決定するようにしているが、関数テーブルそのものをターゲット８２０に渡して、呼び出し先の決定はターゲット８２０が行うようにしても良い。
【００９３】
図１０は、第７の実施の形態（ホストの処理に必要な処理の一部をターゲットが実行する例）の概念的なモジュール構成図を示している。
ここでのホスト９１０は図３の監視プログラム１２００に対応し、ターゲット９２０は図３の保護対象プログラム１３００に対応する。
これまでの実施の形態は、すべて、ターゲットの処理を続行するために、ホスト側がそれを支援する（ターゲットに必要なデータ、プログラム、処理などの一部をホスト側が保持・処理する）ものであった。しかし、第５の実施の形態のバリエーションで挙げたように、ターゲットのコードの一部を復号するための復号鍵をホスト側が保持する場合、ホストプログラム内に復号鍵が埋め込まれることになる。プログラムに埋め込まれた鍵はディスアセンブラのような静的な解析によって発見されてしまう可能性があるので、簡単には解析できないようにするのが望ましい。
そこで、第７の実施の形態では、ホスト側が処理を続行するために必要な一部のデータ・プログラム・処理などをターゲット側が提供するという方法を行う。例えば、ホスト側が保持するターゲットの復号鍵をさらに暗号化しておき、その復号をターゲット９２０側が行うようにする。このようにホスト９１０側もターゲット９２０の助けを借りないと処理を続行できないようにする。例えば、これまでの実施の形態とは異なり、ホスト９１０を主な処理を行うアプリケーションプログラムとして、ターゲット９２０を補助的なものとすることができる。
【００９４】
本実施の形態の処理手順を以下に示す。予め、ホスト９１０側のデータあるいはプログラムの一部が暗号鍵Ｋで暗号化されているが、ホスト９１０側はターゲット９２０しか知らない秘密鍵である復号鍵Ｋｄで暗号鍵Ｋを暗号化したＥＫしか持っていないものとする。
ステップ９１では、ホスト９１０がユーザによって起動される。
ステップ９２では、ホスト９１０は、ターゲット９２０をデバッグ対象として起動する。
ステップ９３では、ターゲット９２０は、一時停止状態で起動され、一方でプロセスが生成されたというデバッグイベントがホスト９１０に通知される。
ステップ９４では、ホスト９１０はイベントを受け取ると、暗号化された復号鍵ＥＫのデータをターゲットのアドレスＡに書き込み、ターゲット９２０の処理を続行させ、引き続きイベントを待つ。
【００９５】
ステップ９５では、ターゲット９２０は実行を再開すると、アドレスＡから暗号化された鍵情報を読み込み、それを自分自身が保持する復号鍵Ｋｄで復号し、結果の暗号鍵Ｋを再びアドレスＡに書き込み、デバッグブレークを実行する。
ステップ９６では、ホスト９１０がデバッグイベントを受け取ると、ターゲット９２０のアドレスＡの内容を参照し、復号された結果を受け取る。以降、ホスト９１０側の暗号化されたデータやプログラムを暗号鍵Ｋで復号して実行を継続する。
【００９６】
ここでは、初期化の処理時にのみ、ホスト９１０側がターゲット９２０側に処理を依頼する例であるが、ステップ９６以降でターゲット９２０を一時停止状態で待機させておき、ホスト９１０で必要になったら、ステップ９４以降の処理を行うというように構成する例も考えられる。このとき、ターゲット９２０に依頼したい処理の内容をターゲット９２０内のアドレスやレジスタに書き込んでから、ターゲット９２０の処理を続行させ、ターゲット９２０は指定された処理を行って、ホスト９１０側に値を返すというように構成することで、ターゲット９２０側の必要な機能をホスト９１０側が任意のタイミングで呼び出すことができる。ここで挙げた処理は暗号鍵を提供する例であるが、当然ながら任意の処理をターゲット９２０側に行わせることもできる。
また、前述の第２の実施の形態〜第６の実施の形態と組み合わせることもできる。例えば、第３の実施の形態と組み合わせて、ステップ９６で得られた暗号鍵Ｋで、別のデータを復号すると、それがターゲット９２０内の暗号化されたコードを復号するための鍵を得られ、それをターゲット９２０に供給するというように組み合わせることもできる。
【００９７】
図１１は、第８の実施の形態（ホストとターゲットが協調してお互いに暗号化されたコードを実行する例）の概念的なモジュール構成図を示している。
ここでのホスト１０１０は図３の監視プログラム１２００に対応し、ターゲット１０２０は図３の保護対象プログラム１３００に対応する。
第８の実施の形態は、第５の実施の形態と第７の実施の形態を組み合わせたものである。第５の実施の形態では、ターゲットが任意のタイミングでホスト側に処理を依頼し、コードを復号してもらう。これに第７の実施の形態のような、ホスト側が任意のタイミングでターゲットに処理を依頼する仕組みを組み合わせる。      
【００９８】
以下に、本実施の形態の処理手順を示すが、処理が複雑であるので、ホスト１０１０側とターゲット１０２０側に分けて示す。
まず、ホスト１０１０側の処理についてである。
ステップ１１０１では、ホスト１０１０がユーザによって起動される。
ステップ１１０２では、ホスト１０１０は、ターゲット１０２０をデバッグ対象として起動し、ホスト１０１０のメインの処理を行うアプリスレッド１０１３を生成する。メインスレッド１０１１ではデバッグイベントを受け取る処理を行う。
ステップ１１０３−１（アプリスレッド１０１３の処理）では、アプリスレッド１０１３は元々のホスト１０１０の処理を続行する。ターゲット１０２０の処理を呼び出したいときには、ホスト１０１０のコマンド変数ＴＧＣＭＤにターゲット１０２０に対するコマンドを書き込み、ホスト１０１０のコマンド結果変数ＴＧＲＥＳに値が書き込まれるのを待機する。
ステップ１１０３−２（アプリスレッド１０１３の処理）では、コマンド結果変数ＴＧＲＥＳに値が書き込まれたらそれを参照して処理を続行する。以下、ステップ１１０３−１からステップ１１０３−２を必要時に繰り返す。
【００９９】
ステップ１１０４では、デバッグイベントを受け取り、レジスタＲ１の値によって、ターゲット１０２０の要求を処理したり、ターゲット１０２０に処理要求を出す。具体的には、以下のステップ１１０４−１からステップ１１０４−４の処理となる。
ステップ１１０４−１（メインスレッド１０１１の処理）では、メインスレッド１０１１は、デバッグブレークイベントを待つ。発生したら、ターゲット１０２０のレジスタＲ１の内容を参照し、その値が特定の値（例えば０ｘＦＦＦＦＦＦ０１）であったら、ターゲット１０２０からの処理要求であると判断し、ターゲット１０２０のメモリ状態を読み込んで（例えば、メモリアドレスＡ（コマンド指定用）の内容）、処理を行い、その結果をターゲット１０２０に書き込んで（例えば、メモリアドレスＢ（結果格納用）に書き込む）、ターゲット１０２０を継続させる。
ステップ１１０４−２（メインスレッド１０１１の処理）では、レジスタＲ１の内容が別の特定の値（例えば０ｘＦＦＦＦＦＦ０２）である時は、ターゲット１０２０からの処理受付であると判断し、さらに、ホスト１０１０のコマンド変数ＴＧＣＭＤを参照し、そこにコマンドが書き込まれているときは、ターゲット１０２０のメモリにコマンドを書き込んで処理を継続させる。ＴＧＣＭＤが空であれば何もせず、ターゲット１０２０の処理を継続させる。
ステップ１１０４−３（メインスレッド１０１１の処理）では、レジスタＲ１の内容がさらに別の特定の値（例えば０ｘＦＦＦＦＦＦ０３）である時は、ターゲット１０２０からの処理結果通知であると判断し、ターゲット１０２０内の特定のメモリの値を読み込んで、ホスト１０１０のコマンド結果変数ＴＧＲＥＳに値を書き込んで、ターゲット１０２０の処理を継続させる。
ステップ１１０４−４（メインスレッド１０１１の処理）では、以上のいずれでもない場合、ターゲット１０２０の終了イベントでなければターゲット１０２０の処理を継続し、終了イベントであればホスト１０１０も終了する。
【０１００】
以下にターゲット１０２０側の処理手順を示す。
ステップ１２０１では、ターゲット１０２０は、ホスト１０１０によって起動される。
ステップ１２０２では、ターゲット１０２０は、ホスト１０１０に対して、コマンドを受け付けるためのスレッド（受付スレッド１０２２）を生成する。
ステップ１２０３−１（メインスレッド１０２１の処理）では、メインスレッド１０２１は処理を続行し、ホスト１０１０を呼び出したいときには、レジスタＲ１に０ｘＦＦＦＦＦＦ０１を入れ、また特定のメモリ領域にホスト１０１０に対する処理依頼内容を書き込んで、デバッグブレークイベントを発生させる。
ステップ１２０３−２では、処理を続行すると、ホスト１０１０からの処理結果がメモリ領域に書き込まれているはずなので、それを読み込んで処理を続行する。以下、ステップ１２０３−１からステップ１２０３−２を必要時に繰り返す。
【０１０１】
ステップ１２０４では、デバッグイベントを定期的に発生させながら、ホスト１０１０のコマンドを処理する。具体的には、以下のステップ１２０４−１からステップ１２０４−３の処理となる。
ステップ１２０４−１（受付スレッド１０２２の処理）では、一定時間毎（例えば、５０ｍｓｅｃおきなど）に、レジスタＲ１に０ｘＦＦＦＦＦＦ０２を入れて、デバッグブレークイベントを発生させる。
ステップ１２０４−２（受付スレッド１０２２の処理）では、特定のメモリ領域が空でなければ、それをホスト１０１０からのコマンド（処理依頼内容）と判断し、その処理を行い、結果を別のメモリ領域に書き込み、レジスタＲ１に０ｘＦＦＦＦＦＦ０３を入れて、デバッグブレークイベントを発生させる。何もなければ何もしない。
ステップ１２０４−３（受付スレッド１０２２の処理）では、ステップ１２０４−１からの処理を繰り返す。
【０１０２】
第９の実施の形態（ターゲットがホストのデバッグ状態を検出する例）を説明する。
これまでの実施の形態ではデバッギとして振舞うのはターゲットのみであるので、ホスト側をデバッガで解析する行為は防げない。そこで、ホスト側がデバッグされているかどうかをターゲット側で定期的に確認し、もし、ホスト側がデバッグされていることを検出したら、直ちに実行を停止するように構成することもできる。処理例を以下に示す。
（Ａ）ホスト側の処理を以下に示す。
（１）ターゲットをデバッギとして起動する。このとき、自分のプロセスＩＤを引数として渡す。
（２）ターゲットからのデバッグイベントを待ち、終了イベントでない限りは、（２）を繰り返す。
【０１０３】
（Ｂ）ターゲット側の処理を以下に示す。
（１）引数として渡されたプロセスＩＤのプロセスがデバッグされていないかどうかをチェックするスレッドを生成する。そのスレッドは（２）の処理を行う。メインスレッドはターゲットの本来の処理（アプリケーションの機能など）を続行する。Ｗｉｎｄｏｗｓでは、ＣｈｅｃｋＲｅｍｏｔｅＤｅｂｕｇｇｅｒＰｒｅｓｅｎｔ（）というＡＰＩを使ったり、あるいは、主流なデバッガ（Ｖｉｓｕａｌ  Ｓｔｕｄｉｏなど）のプロセスが起動されることを検出しても良い。
（２）特定のプロセスＩＤのプロセスがデバッグされているかどうかを定期的（１分おきなど）にチェックし、もし、デバッグされていることを検出したら自分自身の処理を終了する。そうでなければ（２）を繰り返す。
このようにすると、ホストがデバッグされると、ターゲットをそれが検出して、プログラムを終了するようにできる。
【０１０４】
第１０の実施の形態（多段構成の例）を説明する。
ホスト側をデバッガで解析する行為を防ぐための構成である。ホストに対するホスト、さらにはそのホストに対するホスト、というように多段階に構成する。
このとき、ホストとその下位のターゲット間の依存関係において、これまでに述べた実施の形態の様々な構成を組み合わせる。      
【０１０５】
第１１の実施の形態（相互にデバッガとして動作する例）を説明する。
ホストとターゲットの関係を対称なように（お互いがお互いのホストであり、ターゲットであるという）構成する。ステップを以下に示す。
（Ａ）ホスト側の処理
（１）ターゲットをデバッギとして起動する。このとき、自分のプロセスＩＤを引数として渡す。
（２）ホストが本来行うべき処理を行うスレッドを生成する。
（３）ターゲットからのデバッグイベントを待ち、終了イベントでない限りは、（３）を繰り返す。
（Ｂ）ターゲット側の処理
（１）引数として渡されたプロセスＩＤに対して、自分がデバッガとしてアタッチする。アタッチに失敗したら、プロセスＩＤのプロセスを強制終了し、自分も終了する。
（２）ホストからのデバッグイベントを待ち、終了イベントでない限りは（２）を繰り返す。
【０１０６】
このようにすると、両方のプロセスが互いのプロセスのデバッガとなるので、外部からデバッグすることは一切できなくなる。上記では「アプリケーションが提供する本来の処理」をホスト側で行っているが、これはターゲット側で行ってもよいし、あるいは両者で処理してもよい。
また、この実施の形態は、お互いがお互いのデバッガとして動作するのであるが、これまで述べてきた実施の形態のようなホストとターゲットの依存関係を作り出すとより解析を困難にすることができる。
【０１０７】
第１２の実施の形態（モジュールの構成に関する例）を説明する。
ホストとターゲットが別ファイルで、同じフォルダ内に存在していると、対応関係を推測される可能性があるので、モジュールとして一つに統合し、起動時オプションで、ホストとターゲットの動作を切り替えるようにする。ここで、オプションとは、例えば、コマンド名の後にハイフン（−）を付加して指定するものであり、そのコマンドによる処理に対する選択ができるものである。
【０１０８】
第１３の実施の形態（ホストとターゲットのデバッガ／デバッギ関係を一定時間毎に切り替える例）を説明する。
動作しているプロセスに対して後からデバッガとしてアタッチするというＡＰＩと対になるＡＰＩとして、デバッガをデタッチするというＡＰＩがある。これを利用して、あるタイミング毎にデバッガとデバッギの関係を切り替えるという方法もある。例えば、既にホストがターゲットを起動してターゲットのデバッガとして動作している状態で、以下のようにして切り替える。
【０１０９】
（１）ターゲット側では、一定時間毎に、レジスタに特定の値を入れるなどして、デバッガ切り替えを意味するデバッグブレークを発生させる。ターゲットは直ちに実行を停止する。
（２）ホストはデバッグイベントを受け取り、イベントがデバッガ切り替えであると判断したら、ターゲットの動作を継続させた上で、ターゲットからデタッチする。
（３）ターゲットは動作を再開したら、自分自身がデバッグされていないことを確認した上で（Ｗｉｎｄｏｗｓの場合は、ＩｓＤｅｂｕｇｇｅｒＰｒｅｓｅｎｔ（）や、ＤｅｂｕｇＡｃｔｉｖｅＰｒｏｃｅｓｓＳｔｏｐ（）でＦＡＬＳＥが返るかどうか、などによって調べられる）、ホストにアタッチし、ホストからのデバッグイベントを待つ。
（４）ホストは、一定時間待ったら、（１）と同様のデバッガ切り替えのデバッグブレークを発生する。ホストは実行を停止する。
（５）ターゲットはデバッグイベントを受け取り、イベントがデバッガ切り替えであると判断したら、ホストの動作を継続させた上でホストからデタッチする。
（６）ホストは動作を再開したら、自分自身がデバッグされていないことを確認した上で、ターゲットにアタッチし、ターゲットからのデバッグイベントを待つ。
（７）上記（１）〜（６）を繰り返す。
【０１１０】
なお、ターゲットからホストへ制御を渡すのに、前述したブレークポイント等以外に、様々な例外（エラーによるデバッグイベント）を発生させるようにしてもよい。
ターゲットのプロセス内で、通常はエラーのときにしか発生しない例外である、０による除算や、アクセスバイオレーションなど、デバッガが存在しないと正常に実行を継続できない例外を複数回発生させる（ループ内などで）。
ホストは、どこでその例外が発生するかを把握しているので、例外が発生したら、ターゲットプロセス内の例外発生の原因を修正し（プログラムカウンタを進めたり、レジスタやメモリの内容を書き換えるなど）、処理を継続させる。これによって、ターゲット単体では実行できないようにする。
【０１１１】
なお、起動方法のバリエーションとして次のようにしてもよい。
これまでの実施の形態では、ホストが先に起動され、ホストからターゲットをデバッギとして起動していたが、ターゲットを普通に起動した後に、ターゲットが、自分自身のプロセスのＩＤを引数にしてホストを起動して、ホストがターゲットにアタッチするという構成もある。
【０１１２】
なお、ターゲット（デバッギ）からホスト（デバッガ）への通知（デバッグイベント）の例として、次のようにしてもよい。
デバッグイベントはプロセス／スレッドが生成／終了したとき、例外（アクセス違反など）が発生したとき、ＤＬＬ（Ｄｙｎａｍｉｃ  Ｌｉｎｋｉｎｇ  Ｌｉｂｒａｒｙ）をロード／アンロードしたとき、デバッグ文字列を出力したとき、などがある。これらはいずれもターゲットからホストに処理要求を通知するのに使うことができる。特にデバッグ文字列の出力は、ホストに対するパラメータを文字列として渡すことができる。
【０１１３】
なお、ホスト（デバッガ）からターゲット（デバッギ）への通知方法例として、次のようにしてもよい。
これまでの実施例では、ターゲットをホストが呼び出す際には、下記の２つの方法があった。
（１）ターゲット側が定期的にデバッグブレークを発生させ、そのタイミングで、コマンドがあれば、ホスト側がターゲットプロセス内のメモリに処理依頼内容を書き込んでおく方法
（２）ターゲット側は、必要がない場合は、一時停止状態で待機させておいて、ホスト側が必要になったときに、ターゲット側のプロセス内のメモリに処理依頼内容を書き込んで、処理を再開させる方法
これら以外にも、ＯＳがサポートするＡＰＩの種類によっては、ホスト側が強制的にターゲットの処理を中断させる方法もある（Ｗｉｎｄｏｗｓの場合は、ＤｅｂｕｇＢｒｅａｋＰｒｏｃｅｓｓ（）、Ｕｎｉｘ（登録商標）系の場合は、ｋｉｌｌ（）でシグナルを送る、など）。
【０１１４】
この方法を用いた処理の例を以下に示す。
（１）ターゲット側には要求処理を待つスレッドを用意しておく。
（２）ホストがターゲットを強制中断する。
（３）ホストはターゲット内の特定のメモリに要求内容を書き込んでプロセスを再開させる。
（４）ターゲットは終了したらデバッグブレークを発生させる。もしくは、別のメモリ領域に結果を書き込む。
（５）ホストは、デバッグブレークを待つ、もしくは、ターゲットの結果が書き込まれる領域を監視し、結果を受け取る。
【０１１５】
なお、本実施の形態としてのプログラムが実行されるコンピュータのハードウェア構成は、図１２に示すように、一般的なコンピュータであり、具体的には各種アプリケーションソフトウェアが実装されたパーソナルコンピュータ等である。本実施の形態では、アプリケーションソフトウェアは、主に保護対象プログラム１３００等となる。その保護対象プログラム１３００、保護対象プログラム１３００とペアになる監視プログラム１２００等のプログラムを実行するＣＰＵ９０１と、そのプログラムやデータを記憶するＲＡＭ９０２と、本コンピュータを起動するためのプログラム等が格納されているＲＯＭ９０３と、補助記憶装置であるＨＤ９０４と、キーボード、マウス等のデータを入力する入力装置９０６と、ＣＲＴや液晶ディスプレイ等の出力装置９０５と、通信ネットワークと接続するための通信回線インタフェース９０７、そして、それらをつないでデータのやりとりをするためのバス９０８により構成されている。これらのコンピュータが複数台互いにネットワークによって接続されていてもよい。
【０１１６】
なお、図１２に示すハードウェア構成は、１つの構成例を示すものであり、本実施の形態は、図１２に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア（例えばＡＳＩＣ等）で構成してもよい。また、特に、パーソナルコンピュータの他、携帯電話、ゲーム機、カーナビ機、情報家電、複写機、ファックス、スキャナ、プリンタ、複合機（多機能複写機とも呼ばれ、スキャナ、プリンタ、複写機、ファックス等の機能を有している）などに組み込まれていてもよい。
【０１１７】
なお、説明したプログラムについては、記録媒体に格納することも可能であり、また、そのプログラムを通信手段によって提供することもできる。その場合、例えば、上記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えることもできる。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通などのために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク（ＤＶＤ）であって、ＤＶＤフォーラムで策定された規格である「ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ−ＲＡＭ等」、ＤＶＤ＋ＲＷで策定された規格である「ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等」、コンパクトディスク（ＣＤ）であって、読出し専用メモリ（ＣＤ−ＲＯＭ）、ＣＤレコーダブル（ＣＤ−Ｒ）、ＣＤリライタブル（ＣＤ−ＲＷ）等、光磁気ディスク（ＭＯ）、フレキシブルディスク（ＦＤ）、磁気テープ、ハードディスク、読出し専用メモリ（ＲＯＭ）、電気的消去および書換可能な読出し専用メモリ（ＥＥＰＲＯＭ）、フラッシュ・メモリ、ランダム・アクセス・メモリ（ＲＡＭ）等が含まれる。
そして、上記のプログラムまたはその一部は、上記記録媒体に記録して保存や流通等させることが可能である。また、通信によって、例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、あるいは無線通信ネットワーク、さらにはこれらの組合せ等の伝送媒体を用いて伝送することが可能であり、また、搬送波に乗せて搬送することも可能である。
さらに、上記のプログラムは、他のプログラムの一部分であってもよく、あるいは別個のプログラムと共に記録媒体に記録されていてもよい。
【図面の簡単な説明】
【０１１８】
【図１】システム全体の構成例を示すブロック図である。
【図２】デバッガとデバッギとの関係を示す説明図である。
【図３】本実施の形態の全体の構成例を示すブロック図である。
【図４】第１の実施の形態の構成例を示すブロック図である。
【図５】第２の実施の形態の構成例を示すブロック図である。
【図６】第３の実施の形態の構成例を示すブロック図である。
【図７】第４の実施の形態の構成例を示すブロック図である。
【図８】第５の実施の形態の構成例を示すブロック図である。
【図９】第６の実施の形態の構成例を示すブロック図である。
【図１０】第７の実施の形態の構成例を示すブロック図である。
【図１１】第８の実施の形態の構成例を示すブロック図である。
【図１２】実施の形態を実現するコンピュータのハードウェア構成例を示すブロック図である。
【符号の説明】
【０１１９】
１０…ダミーデバッガ
２０…保護対象プログラム
３０…攻撃者のデバッガ
４０…ＯＳ
２１０…デバッガ
２２０…デバッグ対象プログラム
３１０、４１０、５１０、６１０、７１０、８１０、９１０、１０１０…ホスト
３２０、４２０、５２０、６２０、７２０、８２０、９２０、１０２０…ターゲット
１０１１…メインスレッド
１０１２…コマンド変数ＴＧＣＭＤ／コマンド結果変数ＴＧＲＥＳ
１０１３…アプリスレッド
１０２１…メインスレッド
１０２２…受付スレッド
１１００…監視プログラム起動モジュール
１２００…監視プログラム
１２１０…プログラム起動モジュール
１２２０…第２の秘密値記憶モジュール
１２３０…必要情報記憶モジュール１
１２４０…プログラムコード記憶モジュール
１２５０…復号モジュール
１２６０…関数呼出先記憶モジュール
１２７０…必要情報取得モジュール２
１３００…保護対象プログラム
１３１０…確認モジュール
１３２０…第１の秘密値記憶モジュール
１３３０…判断モジュール
１３４０…必要情報取得モジュール１
１３５０…プログラムコード取得モジュール
１３６０…関数呼出先取得モジュール
１３７０…必要情報記憶モジュール２
【図１】
2008059404.tif 000003
【図２】
2008059404.tif 000004
【図３】
2008059404.tif 000005
【図４】
2008059404.tif 000006
【図５】
2008059404.tif 000007
【図６】
2008059404.tif 000008
【図７】
2008059404.tif 000009
【図８】
2008059404.tif 000010
【図９】
2008059404.tif 000011
【図１０】
2008059404.tif 000012
【図１１】
2008059404.tif 000013
【図１２】
2008059404.tif 000014
【手続補正書】
【提出日】平成19年5月30日(2007.5.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項２】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが起動していることを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項３】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
秘密の値である秘密値を記憶している第１の秘密値記憶機能、
前記監視プログラムにより、
前記保護対象プログラムの前記第１の秘密値記憶機能に記憶されている秘密値と同じ値である秘密値を記憶している第２の秘密値記憶機能、
前記保護対象プログラムにより、
前記第２の秘密値記憶機能によって記憶されている秘密値は、前記第１の秘密値記憶機能によって記憶されている秘密値と同じであるか否かを判断する判断機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項４】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項５】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶機能、
前記プログラムコードを前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項６】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項７】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記関数呼出先を記憶している関数呼出先記憶機能、
前記関数呼出先を保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項８】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記監視プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項９】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記監視プログラムに前記情報を設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項１０】
前記監視プログラムは他の監視プログラムから監視されている
ことを特徴とする請求項１，２，３，４，５，６，７，８または９に記載のプログラム。
【請求項１１】
前記監視プログラムは前記保護対象プログラムの監視を解除し、
前記保護対象プログラムは前記監視プログラムの監視を開始する
ことを特徴とする請求項１，２，３，４，５，６，７，８または９に記載のプログラム。
【請求項１２】
前記監視プログラムと前記保護対象プログラムを１つのモジュールとし、
前記モジュールを起動する場合の引数によって、前記監視プログラムまたは前記保護対象プログラムを起動する
ことを特徴とする請求項１，２，３，４，５，６，７，８または９に記載のプログラム。
【請求項１３】
コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項１４】
コンピュータに、
第２のプログラムを監視する第１のプログラムを起動する第１のプログラム起動機能、
前記第１のプログラムにより、
前記第２のプログラムを監視する第２のプログラム監視機能と、
前記第２のプログラムにより、
前記第１のプログラムを監視する監視機能、
を実現させ、前記第１のプログラムまたは前記第２のプログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項１５】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項１６】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが起動していることを確認する確認手段、
を有し、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項１７】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより秘密の値である秘密値を記憶している第１の秘密値記憶手段と、
前記監視プログラムにより前記第１の秘密値記憶手段によって記憶されている秘密値と同じ値である秘密値を記憶している第２の秘密値記憶手段と、
前記保護対象プログラムにより前記第２の秘密値記憶手段によって記憶されている秘密値は、前記第１の秘密値記憶手段によって記憶されている秘密値と同じであるか否かを判断する判断手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項１８】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記保護対象プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項１９】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶手段と、
前記保護対象プログラムに前記プログラムコードを設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項２０】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項２１】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより前記関数呼出先を記憶している関数呼出先記憶手段と、
前記保護対象プログラムに前記関数呼出先を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項２２】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記監視プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項２３】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記情報を前記監視プログラムに設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項２４】
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【請求項２５】
第２のプログラムを監視する第１のプログラムを起動する第１のプログラム起動手段と、
前記第１のプログラムにより前記第２のプログラムを起動する第２のプログラム起動手段と、
前記第２のプログラムにより前記第１のプログラムを監視する監視手段、
を有し、
前記第１のプログラムまたは第２のプログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００６
【補正方法】変更
【補正の内容】
【０００６】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
［１］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００７
【補正方法】変更
【補正の内容】
【０００７】
［２］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが起動していることを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
［３］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
秘密の値である秘密値を記憶している第１の秘密値記憶機能、
前記監視プログラムにより、
前記保護対象プログラムの前記第１の秘密値記憶機能に記憶されている秘密値と同じ値である秘密値を記憶している第２の秘密値記憶機能、
前記保護対象プログラムにより、
前記第２の秘密値記憶機能によって記憶されている秘密値は、前記第１の秘密値記憶機能によって記憶されている秘密値と同じであるか否かを判断する判断機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
［４］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
［５］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶機能、
前記プログラムコードを前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
［６］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】変更
【補正の内容】
【００１２】
［７］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記関数呼出先を記憶している関数呼出先記憶機能、
前記関数呼出先を保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００１３
【補正方法】変更
【補正の内容】
【００１３】
［８］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記監視プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
［９］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記監視プログラムに前記情報を設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００１８
【補正方法】変更
【補正の内容】
【００１８】
［１３］  コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００１９
【補正方法】変更
【補正の内容】
【００１９】
［１４］  コンピュータに、
第２のプログラムを監視する第１のプログラムを起動する第１のプログラム起動機能、
前記第１のプログラムにより、
前記第２のプログラムを監視する第２のプログラム監視機能と、
前記第２のプログラムにより、
前記第１のプログラムを監視する監視機能、
を実現させ、前記第１のプログラムまたは前記第２のプログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００２０
【補正方法】変更
【補正の内容】
【００２０】
［１５］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００２１
【補正方法】変更
【補正の内容】
【００２１】
［１６］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが起動していることを確認する確認手段、
を有し、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００２２
【補正方法】変更
【補正の内容】
【００２２】
［１７］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより秘密の値である秘密値を記憶している第１の秘密値記憶手段と、
前記監視プログラムにより前記第１の秘密値記憶手段によって記憶されている秘密値と同じ値である秘密値を記憶している第２の秘密値記憶手段と、
前記保護対象プログラムにより前記第２の秘密値記憶手段によって記憶されている秘密値は、前記第１の秘密値記憶手段によって記憶されている秘密値と同じであるか否かを判断する判断手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】００２３
【補正方法】変更
【補正の内容】
【００２３】
［１８］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記保護対象プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】００２４
【補正方法】変更
【補正の内容】
【００２４】
［１９］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶手段と、
前記保護対象プログラムに前記プログラムコードを設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】００２５
【補正方法】変更
【補正の内容】
【００２５】
［２０］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】変更
【補正の内容】
【００２６】
［２１］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより前記関数呼出先を記憶している関数呼出先記憶手段と、
前記保護対象プログラムに前記関数呼出先を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】００２７
【補正方法】変更
【補正の内容】
【００２７】
［２２］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記監視プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】００２８
【補正方法】変更
【補正の内容】
【００２８】
［２３］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記情報を前記監視プログラムに設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正２２】
【補正対象書類名】明細書
【補正対象項目名】００２９
【補正方法】変更
【補正の内容】
【００２９】
［２４］  保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正書】
【提出日】平成19年9月25日(2007.9.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセスに対して、１つのプロセスのみが監視できるオペレーティングシステムで動作するコンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能
を実現させる前記保護対象プログラム及び前記監視プログラムを有しており、
前記監視プログラムは、
前記保護対象プログラムを監視する保護対象プログラム監視機能
を実現させ、
前記保護対象プログラムは、
前記監視プログラムが起動していることを間欠的に確認する確認機能と、
前記確認機能によって前記監視プログラムが起動していないと確認された場合は、保護対象プログラムの実行を終了させる終了機能
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【請求項２】
前記監視プログラムは他の監視プログラムから監視されている
ことを特徴とする請求項１に記載のプログラム。
【請求項３】
前記監視プログラムは前記保護対象プログラムを監視することを解除し、
前記保護対象プログラムは前記監視プログラムを監視することを開始する
ことを特徴とする請求項１に記載のプログラム。
【請求項４】
前記監視プログラムと前記保護対象プログラムを１つのモジュールとし、
前記モジュールを起動する場合の引数によって、前記監視プログラムまたは前記保護対象プログラムを起動する
ことを特徴とする請求項１に記載のプログラム。
【請求項５】
前記確認機能は、前記監視プログラムが他の監視プログラムから監視されているか否かを確認する
ことを実現させることを特徴とする請求項１に記載のプログラム。
【請求項６】
プロセスに対して、１つのプロセスのみが監視できるオペレーティングシステムで動作する情報処理システムに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能
を実現させる前記保護対象プログラム及び前記監視プログラムを有しており、
前記監視プログラムは、
前記保護対象プログラムを監視する保護対象プログラム監視機能
を実現させ、
前記保護対象プログラムは、
前記監視プログラムが起動していることを間欠的に確認する確認機能と、
前記確認機能によって前記監視プログラムが起動していないと確認された場合は、保護対象プログラムの実行を終了させる終了機能
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００６
【補正方法】変更
【補正の内容】
【０００６】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
［１］  プロセスに対して、１つのプロセスのみが監視できるオペレーティングシステムで動作するコンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能
を実現させる前記保護対象プログラム及び前記監視プログラムを有しており、
前記監視プログラムは、
前記保護対象プログラムを監視する保護対象プログラム監視機能
を実現させ、
前記保護対象プログラムは、
前記監視プログラムが起動していることを間欠的に確認する確認機能と、
前記確認機能によって前記監視プログラムが起動していないと確認された場合は、保護対象プログラムの実行を終了させる終了機能
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００７
【補正方法】変更
【補正の内容】
【０００７】
［２］  前記監視プログラムは他の監視プログラムから監視されている
ことを特徴とする［１］に記載のプログラム。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
［３］  前記監視プログラムは前記保護対象プログラムを監視することを解除し、
前記保護対象プログラムは前記監視プログラムを監視することを開始する
ことを特徴とする［１］に記載のプログラム。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
［４］  前記監視プログラムと前記保護対象プログラムを１つのモジュールとし、
前記モジュールを起動する場合の引数によって、前記監視プログラムまたは前記保護対象プログラムを起動する
ことを特徴とする［１］に記載のプログラム。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
［５］  前記確認機能は、前記監視プログラムが他の監視プログラムから監視されているか否かを確認する
ことを実現させることを特徴とする［１］に記載のプログラム。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
［６］  プロセスに対して、１つのプロセスのみが監視できるオペレーティングシステムで動作する情報処理システムに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能
を実現させる前記保護対象プログラム及び前記監視プログラムを有しており、
前記監視プログラムは、
前記保護対象プログラムを監視する保護対象プログラム監視機能
を実現させ、
前記保護対象プログラムは、
前記監視プログラムが起動していることを間欠的に確認する確認機能と、
前記確認機能によって前記監視プログラムが起動していないと確認された場合は、保護対象プログラムの実行を終了させる終了機能
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】削除
【補正の内容】
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００１３
【補正方法】削除
【補正の内容】
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】削除
【補正の内容】
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００１５
【補正方法】削除
【補正の内容】
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】削除
【補正の内容】
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００１７
【補正方法】削除
【補正の内容】
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００１８
【補正方法】削除
【補正の内容】
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００１９
【補正方法】削除
【補正の内容】
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】００２０
【補正方法】削除
【補正の内容】
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】００２１
【補正方法】削除
【補正の内容】
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】００２２
【補正方法】削除
【補正の内容】
【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】００２３
【補正方法】削除
【補正の内容】
【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】００２４
【補正方法】削除
【補正の内容】
【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】００２５
【補正方法】削除
【補正の内容】
【手続補正２２】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】削除
【補正の内容】
【手続補正２３】
【補正対象書類名】明細書
【補正対象項目名】００２７
【補正方法】削除
【補正の内容】
【手続補正２４】
【補正対象書類名】明細書
【補正対象項目名】００２８
【補正方法】削除
【補正の内容】
【手続補正２５】
【補正対象書類名】明細書
【補正対象項目名】００２９
【補正方法】削除
【補正の内容】
【手続補正２６】
【補正対象書類名】明細書
【補正対象項目名】００３０
【補正方法】削除
【補正の内容】
【手続補正２７】
【補正対象書類名】明細書
【補正対象項目名】００３１
【補正方法】変更
【補正の内容】
【００３１】
請求項１のプログラムによれば、本構成を有していない場合に比較して、保護対象プログラムは監視プログラムが起動していることを確認することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【手続補正２８】
【補正対象書類名】明細書
【補正対象項目名】００３２
【補正方法】変更
【補正の内容】
【００３２】
請求項２のプログラムによれば、本構成を有していない場合に比較して、請求項１のプログラムによる効果に加えて、監視プログラムは他の監視プログラムから監視されることになり、監視プログラムに対する監視行為を防止することができる。
【手続補正２９】
【補正対象書類名】明細書
【補正対象項目名】００３３
【補正方法】変更
【補正の内容】
【００３３】
請求項３のプログラムによれば、本構成を有していない場合に比較して、請求項１のプログラムによる効果に加えて、監視プログラムは保護対象プログラムの監視を解除し、保護対象プログラムは監視プログラムの監視を開始でき、他のプログラムによる監視の防止をより強固にすることができる。
【手続補正３０】
【補正対象書類名】明細書
【補正対象項目名】００３４
【補正方法】変更
【補正の内容】
【００３４】
請求項４のプログラムによれば、本構成を有していない場合に比較して、請求項１のプログラムによる効果に加えて、保護対象プログラムを起動する場合の引数によって、監視プログラムまたは保護対象プログラムを起動することができ、他のプログラムによる監視の防止をより強固にすることができる。
【手続補正３１】
【補正対象書類名】明細書
【補正対象項目名】００３５
【補正方法】変更
【補正の内容】
【００３５】
請求項５のプログラムによれば、本構成を有していない場合に比較して、監視プログラムが他の監視プログラムから監視されているか否かを確認することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【手続補正３２】
【補正対象書類名】明細書
【補正対象項目名】００３６
【補正方法】変更
【補正の内容】
【００３６】
請求項６の情報処理システムによれば、本構成を有していない場合に比較して、保護対象プログラムは監視プログラムが起動していることを確認することができ、保護対象プログラムが他のプログラムにより監視されるのを防止することができる。
【手続補正３３】
【補正対象書類名】明細書
【補正対象項目名】００３７
【補正方法】削除
【補正の内容】
【手続補正３４】
【補正対象書類名】明細書
【補正対象項目名】００３８
【補正方法】削除
【補正の内容】
【手続補正３５】
【補正対象書類名】明細書
【補正対象項目名】００３９
【補正方法】削除
【補正の内容】
【手続補正３６】
【補正対象書類名】明細書
【補正対象項目名】００４０
【補正方法】削除
【補正の内容】
【手続補正３７】
【補正対象書類名】明細書
【補正対象項目名】００４１
【補正方法】削除
【補正の内容】
【手続補正３８】
【補正対象書類名】明細書
【補正対象項目名】００４２
【補正方法】削除
【補正の内容】
【手続補正３９】
【補正対象書類名】明細書
【補正対象項目名】００４３
【補正方法】削除
【補正の内容】
【手続補正４０】
【補正対象書類名】明細書
【補正対象項目名】００４４
【補正方法】削除
【補正の内容】
【手続補正４１】
【補正対象書類名】明細書
【補正対象項目名】００４５
【補正方法】削除
【補正の内容】
【手続補正４２】
【補正対象書類名】明細書
【補正対象項目名】００４６
【補正方法】削除
【補正の内容】
【手続補正４３】
【補正対象書類名】明細書
【補正対象項目名】００４７
【補正方法】削除
【補正の内容】
【手続補正４４】
【補正対象書類名】明細書
【補正対象項目名】００４８
【補正方法】削除
【補正の内容】
【手続補正４５】
【補正対象書類名】明細書
【補正対象項目名】００４９
【補正方法】削除
【補正の内容】
【手続補正４６】
【補正対象書類名】明細書
【補正対象項目名】００５０
【補正方法】削除
【補正の内容】
【手続補正４７】
【補正対象書類名】明細書
【補正対象項目名】００５１
【補正方法】削除
【補正の内容】
【手続補正４８】
【補正対象書類名】明細書
【補正対象項目名】００５２
【補正方法】削除
【補正の内容】
【手続補正４９】
【補正対象書類名】明細書
【補正対象項目名】００５３
【補正方法】削除
【補正の内容】
【手続補正５０】
【補正対象書類名】明細書
【補正対象項目名】００５４
【補正方法】削除
【補正の内容】
【手続補正５１】
【補正対象書類名】明細書
【補正対象項目名】００５５
【補正方法】削除
【補正の内容】