JP2008059404A - 情報処理システムおよびプログラム - Google Patents
情報処理システムおよびプログラム Download PDFInfo
- Publication number
- JP2008059404A JP2008059404A JP2006237124A JP2006237124A JP2008059404A JP 2008059404 A JP2008059404 A JP 2008059404A JP 2006237124 A JP2006237124 A JP 2006237124A JP 2006237124 A JP2006237124 A JP 2006237124A JP 2008059404 A JP2008059404 A JP 2008059404A
- Authority
- JP
- Japan
- Prior art keywords
- program
- monitoring
- protection target
- starting
- target program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
- Debugging And Monitoring (AREA)
Abstract
【解決手段】このプログラムは、コンピュータに、保護対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能と、前記監視プログラム起動機能によって起動された監視プログラムによって前記保護対象プログラムを起動またはアタッチするプログラム起動機能を実現させる。
【選択図】図1
Description
しかし、第三者によって、暗号化されたデータやプログラムが解析され、そのデータ等が盗用されたりする危険性が存在する。そこで、データやプログラムをこのような不正アクセスから保護することが必要である。プログラムの解析による改ざんなどの不正行為に対して、主にソフトウェアのみでその行為を防ぐ(解析を難しくする)というソフトウェア耐タンパー技術、あるいは難読化技術と呼ばれる技術がある。
また、例えば、特許文献2には、プログラムの一部を暗号化しておいて、適宜復号する方法を前提として、それをリロケーション処理の必要なOS上で実現するための方法が開示されている。
また、例えば、特許文献3には、プログラムの一部を暗号化しておいて、適宜復号する方法であり、その過程を複雑化した方法が開示されている。
また、例えば、特許文献4には、プログラムの関数呼び出しを、関数ポインタおよびそのテーブルを経由して行うことで、関数間の呼び出し関係を難読化する方法が開示されている。
また、例えば、特許文献5には、プログラムの制御構造(ループなど)を複雑化する方法が開示されている。
一方、プログラムは、通常、デバッガなどにより容易に動作解析が可能である。このため、プログラムに秘密情報が含まれている場合には、プログラムを解析することによって容易に秘密情報が盗み出されるという事態が生じ得る。
これらに関連する技術として、例えば、特許文献6には、ソフトウェアが現在デバッガ上で実行されているかどうかをプロセッサのフラグを参照することで検出し、検出されたらプログラムの実行を停止する方法が開示されている。
[1] コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが起動していることを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
秘密の値である秘密値を記憶している第1の秘密値記憶機能、
前記監視プログラムにより、
前記保護対象プログラムの前記第1の秘密値記憶機能に記憶されている秘密値と同じ値である秘密値を記憶している第2の秘密値記憶機能、
前記保護対象プログラムにより、
前記第2の秘密値記憶機能によって記憶されている秘密値は、前記第1の秘密値記憶機能によって記憶されている秘密値と同じであるか否かを判断する判断機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶機能、
前記プログラムコードを前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記関数呼出先を記憶している関数呼出先記憶機能、
前記関数呼出先を保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記監視プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記監視プログラムに前記情報を設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
ことを特徴とする[1],[2],[3],[4],[5],[6],[7],[8]または[9]に記載のプログラム。
前記保護対象プログラムは前記監視プログラムの監視を開始する
ことを特徴とする[1],[2],[3],[4],[5],[6],[7],[8]または[9]に記載のプログラム。
前記モジュールを起動する場合の引数によって、前記監視プログラムまたは前記保護対象プログラムを起動する
ことを特徴とする[1],[2],[3],[4],[5],[6],[7],[8]または[9]に記載のプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
第2のプログラムを監視する第1のプログラムを起動する第1のプログラム起動機能、
前記第1のプログラムにより、
前記第2のプログラムを起動し、監視する第2のプログラム監視機能と、
前記第2のプログラムにより、
前記第1のプログラムを監視する監視機能、
を実現させ、前記第1のプログラムまたは前記第2のプログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが起動していることを確認する確認手段、
を有し、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより秘密の値である秘密値を記憶している第1の秘密値記憶手段と、
前記監視プログラムにより前記第1の秘密値記憶手段によって記憶されている秘密値と同じ値である秘密値を記憶している第2の秘密値記憶手段と、
前記保護対象プログラムにより前記第2の秘密値記憶手段によって記憶されている秘密値は、前記第1の秘密値記憶手段によって記憶されている秘密値と同じであるか否かを判断する判断手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記保護対象プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶手段と、
前記保護対象プログラムに前記プログラムコードを設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより前記関数呼出先を記憶している関数呼出先記憶手段と、
前記保護対象プログラムに前記関数呼出先を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記監視プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記情報を前記監視プログラムに設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記第1のプログラムにより前記第2のプログラムを起動する第2のプログラム起動手段と、
前記第2のプログラムにより前記第1のプログラムを監視する監視手段、
を有し、
前記第1のプログラムまたは第2のプログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
ステップ21では、デバッガ210が、デバッグ対象プログラム220をデバッグ対象として、プロセスを生成、もしくは、既存のプロセスにデバッガとしてアタッチする。ここで、「アタッチ」とは、実行中のプロセスの挙動の監視を開始することを意味する。また、「デタッチ」とは、プロセスの挙動を監視している状態を解除(終了)することを意味する。
つまり、デバッガ210が、デバッグ対象プログラム220を起動する。このとき、デバッガ210が、デバッグ対象プログラム220のデバッガとして振舞えるように、OSのAPI(Application Program Interface)を呼び出し、パラメータを指定して起動する。例えば、ウィンドウズ(Windows、登録商標)ではAPI関数CreateProcess()が使われ、引数に”DEBUG_PROCESS”フラグを指定する。これによって、デバッグ対象プログラム220は一時停止の状態でプロセスが生成される。既に実行中のプロセス(デバッグ対象プログラム220)をデバッグすることもできる。この場合は、既存のプロセスにデバッガをアタッチするためのAPIを呼び出す。Windowsの場合は、API関数DebugActiveProcess()であり、デバッガ210をアタッチした時点でデバッグ対象プログラム220はイベントを通知し、動作を一時停止する。
つまり、デバッグ対象プログラム220内で、デバッガ210が設定したブレークポイント(プログラムの実行を特定のアドレスで一時停止するために用いる)が実行されたり、特定のメモリアドレスの内容が変更されたり、他のプロセスやスレッドを生成したり、などのイベントが発生すると、デバッグ対象プログラム220からデバッガ210にイベントが発生したことが知らされる(実際にはデバッグ対象プログラム220が直接知らせるのではなく、OSが介在して行われる)。イベントの通知に伴って、デバッグ対象プログラム220はプログラムの実行をそこで一時停止する。Windowsの場合は、デバッガ210がAPI関数WaitForDebugEvent()を呼び出すと、自分宛にイベント通知が来ていれば、その内容を受け取ることができる。
つまり、デバッガ210は、デバッグ対象プログラム220内でイベントが発生したことの通知を受け、デバッグ対象プログラム220内のメモリの内容や中断時のレジスタの内容を取得して、ユーザに理解できる形で表示し、ユーザによる次の指示を待つ。ユーザはメモリやレジスタの内容を変更し、必要ならばブレークポイントを新たに設定し、デバッグ対象プログラム220の実行を再開する。Windowsの場合は、メモリの内容を読み書きするには、API関数ReadProcessMemory/WriteProcessMemory、メモリの属性(読み込み/書き込み/実行)を書き換えるには、API関数VirtualProtectEx()、レジスタの内容の読み書きには、API関数GetThreadContext/SetThreadContext、ブレークポイントを設定するには、実行を中断させたいアドレスの実行をブレーク命令に置き換えることで、行われる。デバッグ対象プログラム220の実行を再開するには、API関数ContinueDebugEvent()が用いられる。
ステップ24では、以降、デバッグ対象プログラム220が終了するか、もしくは、デバッガ210が処理を中断するまで、ステップ22〜ステップ23の処理が繰り返される。
後述する実施の形態は、特定のプロセスに対しては、唯一のプロセスしかデバッガになれないというOS(Operating System、オペレーティングシステム、例えば、Windows(登録商標)やLinux(登録商標)など)がサポートするデバッガAPIの特徴を利用するものである。
デバッグAPIは、プログラムのデバッグを補助するために、一般的には予めOSに用意されたAPIであり、あるプロセス(プログラム)が別のプロセス(プログラム)のデバッガになれるような機能が用意されており、開発環境などが有する通常のデバッグ機能はこのデバッグAPIを利用して実現されている。
一方、デバッグAPIでは、あるプロセスのデバッガとして振舞うことができるのは、唯一のデバッグプロセスのみである。これは複数のプロセスがデバッガとして機能できると、デバッギ内の状態に一貫性が無くなるためであり(同時に複数のデバッガからメモリ内容が変更されたり、など)、OSの種類によらずデバッグAPIはこの性質がある。
そこで、デバッガによる解析を防ぐために、保護したいプロセスに対してデバッガとして動作するプロセスを予め設けることで、保護対象のプロセスに対する攻撃者によるデバッガ解析を不可能とする。
さらにダミーデバッガ10が存在しないと、保護対象プログラム20が正常に実行することができないように様々に工夫した実施の形態がある。つまり、より強力に保護するために、一方のプロセスが他方に依存するような仕組みを導入する。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはプログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、プログラム、システムおよび方法の説明をも兼ねている。また、モジュールは機能にほぼ一対一に対応しているが、実装においては、1モジュールを1プログラムで構成してもよいし、複数モジュールを1プログラムで構成してもよく、逆に1モジュールを複数プログラムで構成してもよい。また、複数モジュールは1コンピュータによって実行されてもよいし、分散または並列環境におけるコンピュータによって1モジュールが複数コンピュータで実行されてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続を含む。
また、システムとは、複数のコンピュータ、ハードウェア、装置等がネットワーク等で接続されて構成されるほか、1つのコンピュータによって実現される場合も含まれる。
監視プログラム起動モジュール1100は、保護対象である保護対象プログラム1300を起動する場合に、保護対象プログラム1300を監視する監視プログラム1200を起動する。ここで、保護対象プログラム1300を起動する場合、保護対象プログラム1300と監視プログラム1200が起動される順番はいずれが先であってもよい。すなわち、攻撃者によるデバッガAPIが発生する前に、監視プログラム1200が起動されていればよい。監視プログラム1200が保護対象プログラム1300よりも先に起動される場合は、監視プログラム1200が保護対象プログラム1300を起動すればよい。逆に、保護対象プログラム1300が監視プログラム1200よりも先に起動される場合は、監視プログラム1200が保護対象プログラム1300にアタッチすればよい。
監視プログラム1200内のプログラム起動モジュール1210は、監視プログラム起動モジュール1100によって起動された監視プログラム1200が保護対象プログラム1300を起動または保護対象プログラム1300にアタッチする。
保護対象プログラム1300内の第1の秘密値記憶モジュール1320は、秘密の値である秘密値を記憶している。
監視プログラム1200内の第2の秘密値記憶モジュール1220は、保護対象プログラム1300内の第1の秘密値記憶モジュール1320によって記憶されている秘密値と同じ値である秘密値を記憶している。
保護対象プログラム1300内の判断モジュール1330は、第2の秘密値記憶モジュール1220によって記憶されている秘密値は、第1の秘密値記憶モジュール1320によって記憶されている秘密値と同じであるか否かを判断する。
保護対象プログラム1300内の必要情報取得モジュール1−1340は、必要情報記憶モジュール1―1230によって記憶されている必要情報を取得する。
監視プログラム1200内のプログラムコード記憶モジュール1240は、保護対象プログラム1300のプログラムコードとして欠けているプログラムコードを記憶している。
監視プログラム1200内の復号モジュール1250は、保護対象プログラム1300の一部が暗号化されているプログラムコードを復号する。ここで復号モジュール1250は、保護対象プログラム1300内のプログラムコード取得モジュール1350から取得されるだけでなく、保護対象プログラム1300内の暗号化されたコード保持部(プログラムだけではなく、データ等も含む)を直接復号してもよい。
保護対象プログラム1300内のプログラムコード取得モジュール1350は、プログラムコード記憶モジュール1240によって記憶されているプログラムコードまたは復号モジュール1250によって復号されたプログラムコードを取得する。
保護対象プログラム1300内の関数呼出先取得モジュール1360は、関数呼出先記憶モジュール1260によって記憶されている関数呼出先を取得する。
保護対象プログラム1300内の必要情報記憶モジュール2―1370は、監視プログラム1200が処理を続行するために必要な情報を記憶している。
監視プログラム1200内の必要情報取得モジュール2―1270は、必要情報記憶モジュール2−1370によって記憶されている必要情報を取得する。
また、監視プログラム1200は、他の監視プログラム1200から監視されていてもよい。つまり、攻撃者による監視プログラム1200の解析を防止するために、監視プログラム1200自身が保護対象プログラム1300と同様の立場になるようにするものである。
また、監視プログラム1200は保護対象プログラム1300をデタッチ、つまり監視を解除し、保護対象プログラム1300は監視プログラム1200にアタッチ、つまり監視を開始させてもよい。すなわち、監視プログラム1200と保護対象プログラム1300の立場を逆転させるものである。
また、監視プログラム1200と保護対象プログラム1300を1つのモジュールとして作成し、そのモジュールを起動する場合の引数によって、監視プログラム1200または保護対象プログラム1300を起動するようにしてもよい。
また、監視プログラム1200は保護対象プログラム1300を起動して監視し、保護対象プログラム1300は監視プログラム1200にアタッチして監視する。つまり互いに監視し合う関係になってもよい。
図4は、第1の実施の形態(ターゲットがホストを認証する例)の概念的なモジュール構成図を示している。
ここでのホスト310は図3の監視プログラム1200に対応し、ターゲット320は図3の保護対象プログラム1300に対応する。
監視プログラム(以下、「ホスト」ともいう)1200がデバッガとして、保護対象プログラム(以下、「ターゲット」ともいう)1300がデバッギとして、動作する実施の形態である。ターゲット320は、ホスト310の存在を間欠的に監視する。ここで、間欠的にとは、間隔をおいて繰り返されることの意であって、その間隔は一定時間であってもよいし、ランダムな時間間隔であってもよい。
ステップ31では、ホスト310がユーザによって起動される。
ステップ32では、ホスト310がターゲット320をデバッグ対象として、ターゲット320のプロセスを生成する。つまり、ホスト310は、ターゲット320をデバッグ対象として起動する。ホスト310はその後、ターゲット320からデバッグイベントを受け取るために待機する。
ステップ33では、ターゲット320は、処理の先頭で、新規スレッドを生成し、そのスレッドで、ホスト310のプロセスが存在しているかどうかをチェックする。例えば、1分置きにホスト310のプログラムの実行ファイル名のプロセスが存在しているかどうかをチェックする。もし、存在していない場合は、ターゲット320のプログラムを終了する。
ステップ35では、ホスト310はイベントを受け取ると、それが終了イベントでない限り、ターゲット320のプロセスを続行し、引き続きイベントを待つ。
ステップ36では、以降、ターゲット320からプロセス終了イベントが通知されるまで、ステップ34〜ステップ35が繰り返される。ターゲット320からプロセス終了イベントが通知されたら、ホスト310もプロセスを終了する。
また、ファイルに対する電子署名を確認してもよい。具体的には、不正な解析を防止するために、ターゲット320がホスト310をデジタル署名の確認などによって認証して、その認証結果が正しいホスト310の場合のみターゲット320の処理を継続させる。
ここでのホスト410は図3の監視プログラム1200に対応し、ターゲット420は図3の保護対象プログラム1300に対応する。
第2の実施の形態は、第1の実施の形態におけるステップ33の、ターゲット320がホスト310は正規のものであるかどうかを確認する処理を、チャレンジ&レスポンスで行う例である。チャレンジ&レスポンスとは、相手方が正しいかどうかを検証するために、何らかのチャレンジを投げ、相手方から返されたレスポンスが、チャレンジに対する正しい値かどうかをチェックすることで確認する方法である。例えば、ある秘密のバイト列を共有し、検証時に乱数を生成し、その乱数をチャレンジとして相手方に送り、相手は乱数と秘密値を連結したものを一方向性ハッシュ関数(SHA1など)に与えて得られた値を計算してレスポンスとして送り返す。レスポンスを受け取ったら、同じ計算を行って、値が一致するかどうかをチェックするというものである。この方法の場合は、秘密の値が他者に漏洩しないかぎり、相手が正しいということを認証できる。
ステップ43では、ターゲット420は、乱数Rを生成して、デバッグブレークを発生する。つまり、ターゲット420は、処理の先頭で、新規スレッドを生成する。そのスレッドは間欠的(定期的でもよく、例えば1分おきなど)に、以下の処理を行う。乱数Rを生成し、それを予め定めた特定のアドレスにセットし、デバッグブレークを発生させる。
ステップ45−1では、ホスト410はイベントを受け取り、それがデバッグブレークイベントの場合は、ターゲット420の特定のアドレスA1からデータRを読み取り、その値と自分が保持する秘密の値Xを連結して、ハッシュ値Hを求め(SHA1など)、それをターゲット420の特定のアドレスA2に書き込む。
ステップ45−2では、ホスト410はターゲット420のプロセスでデバッグブレーク命令を繰り返すことのないようにプログラムカウンタを一つ進めて、ターゲット420のプロセスを続行させる。受け取ったイベントが終了イベントだったらステップ36に進む。それ以外なら、何もせずにターゲット420のプロセスを続行し、引き続きイベントを待つ。
ステップ45−3では、ホスト410から実行継続を指示されたターゲット420は、続いて、アドレスA1に格納してあった乱数Rと、自分が保持する秘密の値Xを連結して、ハッシュ値H’を求め、その値が、アドレスA2に格納してある値と一致するかどうかをチェックする。一致しない場合は、ターゲット420はプロセスを終了する。
ここでのホスト510は図3の監視プログラム1200に対応し、ターゲット520は図3の保護対象プログラム1300に対応する。
これまでの実施の形態では、ターゲットがホストの認証処理を行うのみであり、ターゲットが行うべき本来の処理には、ホストは一切かかわりが無かった。第3の実施の形態は、ターゲットプログラムの処理を続行するためには、ホスト側の助けを必要とするというものである。
ここでは、ターゲットの処理を行うために必須な何らかのデータをホスト510側が保持しておき、実行時に、ホスト510側がターゲット520側に、データを与えることによって、ターゲット520の処理が行われる例を説明する。
ステップ53では、ターゲット520は、本来の処理を続行する上で、必須な秘密データYを取得する必要が発生したときには、デバッグブレークを発生させる。
ステップ54では、ターゲット520の実行は中断し、デバッグブレークイベントが発生し、ホスト510に通知される。
ステップ55−1では、ホスト510はイベントを受け取り、それがデバッグブレークイベントの場合は、ターゲット520の特定のアドレスAに、ホスト510側のみが保持する秘密データYを設定する。
ステップ55−2では、ホスト510はターゲット520のプロセスでデバッグブレーク命令を繰り返すことのないようにプログラムカウンタを一つ進めて、ターゲット520のプロセスを続行させる。受け取ったイベントが終了イベントだったらステップ36に進む。それ以外なら、何もせずにターゲット520のプロセスを続行させ、引き続きイベントを待つ。
ステップ55−3では、ホスト510から実行継続を指示されたターゲット520は、続いて、アドレスAに格納されてある秘密データYを取得して本来の処理を続行する。
また、ここでは、秘密のデータはYのみであると説明したが、秘密のデータをホスト510側が複数保持し、ターゲット520側が、必要なデータを指定して取得する方法も考えられる。この場合は、ホスト510は、データの識別子(番号)と、データの値の組を保持している。そして、第2の実施の形態の乱数Rの代わりにデータの識別子(番号)をあるアドレスにセットし、デバッグブレークイベントを発生させ、ホスト510は、その識別子に対応したデータをターゲット520内のアドレスAにセットするように構成すればよい。
ここでのホスト610は図3の監視プログラム1200に対応し、ターゲット620は図3の保護対象プログラム1300に対応する。
第4の実施の形態は、ターゲットが持つべき処理を行うプログラムコードの一部をホスト側が保持する例である。
第4の実施の形態は、第3の実施の形態のステップ53〜ステップ55−3を以下のようなステップ63〜ステップ65−3に変更する。ステップ36は、第4の実施の形態でも用いる。なお、ターゲット620側で必要な処理を行うプログラムコードの一部が欠けている状態であるものとする。
ステップ64では、ターゲット620の実行は中断し、デバッグブレークイベントが発生し、ホスト610に通知される。
ステップ65−1では、ホスト610はイベントを受け取り、それがデバッグブレークイベントの場合は、ターゲット620のプロセスのプログラムカウンタの値を読み取り、あらかじめホスト610が保持しているターゲット620のプログラムコードの一部を、ターゲット620のプログラムのプログラムカウンタの位置に埋め込む。
ステップ65−2では、ホスト610はターゲット620のプロセスを続行させる。受け取ったイベントが終了イベントだったらステップ36に進む。それ以外なら、何もせずにターゲット620のプロセスを続行し、引き続きイベントを待つ。
ステップ65−3では、ホスト610から実行継続を指示されたターゲット620は、ブレークした位置の命令が既に置き換えられているので、それまでの処理を引き続き続行する。
この実施の形態では、ホスト610側はターゲット620のプログラムのプログラムコードの一部を一つしか保持しない場合を説明しているが、当然ながら複数保持するようにしても良い。その場合は、ホスト610が、埋め込むアドレス値とプログラムコードの組を保持しておけば、デバッグブレークイベントが発生したときのターゲット620のプログラムのプログラムカウンタの値を参照することで、どのプログラムコードを埋め込めばよいかを特定できる。
そこで、ホスト610が書き込むターゲット620のプログラムの最後の部分をデバッグブレーク命令にしておけば、ターゲット620のプロセスが埋め込まれたコードの実行を終えると最後のデバッグブレークを実行して再びデバッグブレークイベントが発生し、ホスト610に通知され、ホスト610側はそのイベントを受け取って、先ほど埋め込んだプログラムコードをターゲット620側から消去するという処理を行わせることが可能になる。なお、ホスト610側は、デバッグイベントがプログラムコードを埋め込むべきものか、消去すべきものかをターゲット620のプロセスのプログラムカウンタの値を参照することで判別できる。あるいはデバッグブレーク命令の代わりに、ホスト610が書き込んだプログラムの最後の部分で、自分自身を元に戻す命令、すなわち、先頭にデバッグブレークを設定し、残りを消去(ゼロクリア)する命令を入れておいてもよい。
ここでのホスト710は図3の監視プログラム1200に対応し、ターゲット720は図3の保護対象プログラム1300に対応する。
第5の実施の形態は、予め一部分が暗号化されているターゲットのプログラムコードをホスト側が復号する例である。
第5の実施の形態は、第3の実施の形態のステップ53〜ステップ55−3を以下のようなステップ73〜ステップ75−3に変更する。ステップ36は、第5の実施の形態でも用いる。なお、ターゲット720側は、一部のプログラムコードが予め暗号化されており、その復号鍵は、ホスト710側が保持するものとする。また、暗号化されたプログラムコードの始まりには、デバッグブレーク命令が配置されているものとする。なお、プログラムの暗号化に関しては、特許文献2や特許文献3などの既存の技術で実現可能である。
ステップ74では、ターゲット720の実行は中断し、デバッグブレークイベントが発生し、ホスト710に通知される。
ステップ75−1では、ホスト710はイベントを受け取り、それがデバッグブレークイベントの場合は、あらかじめホスト710が保持しているターゲット720のプログラムコードの復号鍵Kと、暗号化されているバイト長Lを使って、ターゲット720のプログラムカウンタ部分からLバイトを復号し、ターゲット720のメモリ上の命令列を書き換える。
ステップ75−2では、ホスト710は、ターゲット720のプロセスでデバッグブレーク命令を繰り返すことのないようにプログラムカウンタを一つ進めて、ターゲット720のプロセスを続行させる。受け取ったイベントが終了イベントだったらステップ36に進む。それ以外なら、何もせずにターゲット720のプロセスを続行し、引き続きイベントを待つ。
ステップ75−3では、ホストから実行継続を指示されたターゲット720は、既にブレークした箇所以降の命令が復号されているので、それ以降の処理を継続する。
この例では、ホスト710側はターゲット720のプログラムのプログラムコードの一箇所しか復号しない場合を説明しているが、当然ながら複数箇所を復号するようにしてもよい。また、復号する箇所毎に復号鍵を変更したり、アルゴリズムを変えたりするようにしても良い。その場合は、デバッグブレークイベントが発生したときのターゲット720のプログラムのプログラムカウンタの値を参照して、復号鍵を特定しても良いし、第2の実施の形態で乱数Rをホストに渡したのと同じように、復号鍵を特定するパラメータや暗号アルゴリズム、初期値などの情報をターゲット720からホスト710に渡すようにしても良い。また、復号処理はホスト710側で行うのではなく、復号鍵のみをホスト710側が提供するようにしてもよい。その場合の構成は、第3の実施の形態と同様になる。
ここでのホスト810は図3の監視プログラム1200に対応し、ターゲット820は図3の保護対象プログラム1300に対応する。
第6の実施の形態は、ターゲット側が特許文献4に挙げられているように、関数の呼び出しを関数ポインタ経由で実行し、その関数ポインタの中身を特定の関数内で決定するようにプログラミングされている場合に、関数の呼び出し先を決定する処理をホスト側で実行するようにした例である。
ステップ84では、ターゲット820の実行は中断し、デバッグブレークイベントが発生し、ホスト810に通知される。
ステップ85−1では、ホスト810はイベントを受け取り、それがデバッグブレークイベントの場合は、ターゲット820のプロセスのレジスタR1の値を読み取り、あらかじめホスト810が保持している呼び出し先一覧リストの中からその識別子に対応する呼び出し先を決定し、そのアドレスをターゲット820のプロセス内のメモリアドレスFの位置に書き込む。
ステップ85−2では、ホスト810はターゲット820のプロセスでデバッグブレーク命令を繰り返すことのないようにプログラムカウンタを一つ進めて、ターゲット820のプロセスを続行させる。受け取ったイベントが終了イベントだったらステップ36に進む。それ以外なら、何もせずにターゲット820のプロセスを続行し、引き続きイベントを待つ。
ステップ85−3では、ホスト810から実行継続を指示されたターゲット820は、アドレスFに格納されているアドレス情報を関数アドレスであると解釈し、そのアドレスを関数呼び出しして、処理を続行する。
またホスト810側が呼び出し先を決定するようにしているが、関数テーブルそのものをターゲット820に渡して、呼び出し先の決定はターゲット820が行うようにしても良い。
ここでのホスト910は図3の監視プログラム1200に対応し、ターゲット920は図3の保護対象プログラム1300に対応する。
これまでの実施の形態は、すべて、ターゲットの処理を続行するために、ホスト側がそれを支援する(ターゲットに必要なデータ、プログラム、処理などの一部をホスト側が保持・処理する)ものであった。しかし、第5の実施の形態のバリエーションで挙げたように、ターゲットのコードの一部を復号するための復号鍵をホスト側が保持する場合、ホストプログラム内に復号鍵が埋め込まれることになる。プログラムに埋め込まれた鍵はディスアセンブラのような静的な解析によって発見されてしまう可能性があるので、簡単には解析できないようにするのが望ましい。
そこで、第7の実施の形態では、ホスト側が処理を続行するために必要な一部のデータ・プログラム・処理などをターゲット側が提供するという方法を行う。例えば、ホスト側が保持するターゲットの復号鍵をさらに暗号化しておき、その復号をターゲット920側が行うようにする。このようにホスト910側もターゲット920の助けを借りないと処理を続行できないようにする。例えば、これまでの実施の形態とは異なり、ホスト910を主な処理を行うアプリケーションプログラムとして、ターゲット920を補助的なものとすることができる。
ステップ91では、ホスト910がユーザによって起動される。
ステップ92では、ホスト910は、ターゲット920をデバッグ対象として起動する。
ステップ93では、ターゲット920は、一時停止状態で起動され、一方でプロセスが生成されたというデバッグイベントがホスト910に通知される。
ステップ94では、ホスト910はイベントを受け取ると、暗号化された復号鍵EKのデータをターゲットのアドレスAに書き込み、ターゲット920の処理を続行させ、引き続きイベントを待つ。
ステップ96では、ホスト910がデバッグイベントを受け取ると、ターゲット920のアドレスAの内容を参照し、復号された結果を受け取る。以降、ホスト910側の暗号化されたデータやプログラムを暗号鍵Kで復号して実行を継続する。
また、前述の第2の実施の形態〜第6の実施の形態と組み合わせることもできる。例えば、第3の実施の形態と組み合わせて、ステップ96で得られた暗号鍵Kで、別のデータを復号すると、それがターゲット920内の暗号化されたコードを復号するための鍵を得られ、それをターゲット920に供給するというように組み合わせることもできる。
ここでのホスト1010は図3の監視プログラム1200に対応し、ターゲット1020は図3の保護対象プログラム1300に対応する。
第8の実施の形態は、第5の実施の形態と第7の実施の形態を組み合わせたものである。第5の実施の形態では、ターゲットが任意のタイミングでホスト側に処理を依頼し、コードを復号してもらう。これに第7の実施の形態のような、ホスト側が任意のタイミングでターゲットに処理を依頼する仕組みを組み合わせる。
まず、ホスト1010側の処理についてである。
ステップ1101では、ホスト1010がユーザによって起動される。
ステップ1102では、ホスト1010は、ターゲット1020をデバッグ対象として起動し、ホスト1010のメインの処理を行うアプリスレッド1013を生成する。メインスレッド1011ではデバッグイベントを受け取る処理を行う。
ステップ1103−1(アプリスレッド1013の処理)では、アプリスレッド1013は元々のホスト1010の処理を続行する。ターゲット1020の処理を呼び出したいときには、ホスト1010のコマンド変数TGCMDにターゲット1020に対するコマンドを書き込み、ホスト1010のコマンド結果変数TGRESに値が書き込まれるのを待機する。
ステップ1103−2(アプリスレッド1013の処理)では、コマンド結果変数TGRESに値が書き込まれたらそれを参照して処理を続行する。以下、ステップ1103−1からステップ1103−2を必要時に繰り返す。
ステップ1104−1(メインスレッド1011の処理)では、メインスレッド1011は、デバッグブレークイベントを待つ。発生したら、ターゲット1020のレジスタR1の内容を参照し、その値が特定の値(例えば0xFFFFFF01)であったら、ターゲット1020からの処理要求であると判断し、ターゲット1020のメモリ状態を読み込んで(例えば、メモリアドレスA(コマンド指定用)の内容)、処理を行い、その結果をターゲット1020に書き込んで(例えば、メモリアドレスB(結果格納用)に書き込む)、ターゲット1020を継続させる。
ステップ1104−2(メインスレッド1011の処理)では、レジスタR1の内容が別の特定の値(例えば0xFFFFFF02)である時は、ターゲット1020からの処理受付であると判断し、さらに、ホスト1010のコマンド変数TGCMDを参照し、そこにコマンドが書き込まれているときは、ターゲット1020のメモリにコマンドを書き込んで処理を継続させる。TGCMDが空であれば何もせず、ターゲット1020の処理を継続させる。
ステップ1104−3(メインスレッド1011の処理)では、レジスタR1の内容がさらに別の特定の値(例えば0xFFFFFF03)である時は、ターゲット1020からの処理結果通知であると判断し、ターゲット1020内の特定のメモリの値を読み込んで、ホスト1010のコマンド結果変数TGRESに値を書き込んで、ターゲット1020の処理を継続させる。
ステップ1104−4(メインスレッド1011の処理)では、以上のいずれでもない場合、ターゲット1020の終了イベントでなければターゲット1020の処理を継続し、終了イベントであればホスト1010も終了する。
ステップ1201では、ターゲット1020は、ホスト1010によって起動される。
ステップ1202では、ターゲット1020は、ホスト1010に対して、コマンドを受け付けるためのスレッド(受付スレッド1022)を生成する。
ステップ1203−1(メインスレッド1021の処理)では、メインスレッド1021は処理を続行し、ホスト1010を呼び出したいときには、レジスタR1に0xFFFFFF01を入れ、また特定のメモリ領域にホスト1010に対する処理依頼内容を書き込んで、デバッグブレークイベントを発生させる。
ステップ1203−2では、処理を続行すると、ホスト1010からの処理結果がメモリ領域に書き込まれているはずなので、それを読み込んで処理を続行する。以下、ステップ1203−1からステップ1203−2を必要時に繰り返す。
ステップ1204−1(受付スレッド1022の処理)では、一定時間毎(例えば、50msecおきなど)に、レジスタR1に0xFFFFFF02を入れて、デバッグブレークイベントを発生させる。
ステップ1204−2(受付スレッド1022の処理)では、特定のメモリ領域が空でなければ、それをホスト1010からのコマンド(処理依頼内容)と判断し、その処理を行い、結果を別のメモリ領域に書き込み、レジスタR1に0xFFFFFF03を入れて、デバッグブレークイベントを発生させる。何もなければ何もしない。
ステップ1204−3(受付スレッド1022の処理)では、ステップ1204−1からの処理を繰り返す。
これまでの実施の形態ではデバッギとして振舞うのはターゲットのみであるので、ホスト側をデバッガで解析する行為は防げない。そこで、ホスト側がデバッグされているかどうかをターゲット側で定期的に確認し、もし、ホスト側がデバッグされていることを検出したら、直ちに実行を停止するように構成することもできる。処理例を以下に示す。
(A)ホスト側の処理を以下に示す。
(1)ターゲットをデバッギとして起動する。このとき、自分のプロセスIDを引数として渡す。
(2)ターゲットからのデバッグイベントを待ち、終了イベントでない限りは、(2)を繰り返す。
(1)引数として渡されたプロセスIDのプロセスがデバッグされていないかどうかをチェックするスレッドを生成する。そのスレッドは(2)の処理を行う。メインスレッドはターゲットの本来の処理(アプリケーションの機能など)を続行する。Windowsでは、CheckRemoteDebuggerPresent()というAPIを使ったり、あるいは、主流なデバッガ(Visual Studioなど)のプロセスが起動されることを検出しても良い。
(2)特定のプロセスIDのプロセスがデバッグされているかどうかを定期的(1分おきなど)にチェックし、もし、デバッグされていることを検出したら自分自身の処理を終了する。そうでなければ(2)を繰り返す。
このようにすると、ホストがデバッグされると、ターゲットをそれが検出して、プログラムを終了するようにできる。
ホスト側をデバッガで解析する行為を防ぐための構成である。ホストに対するホスト、さらにはそのホストに対するホスト、というように多段階に構成する。
このとき、ホストとその下位のターゲット間の依存関係において、これまでに述べた実施の形態の様々な構成を組み合わせる。
ホストとターゲットの関係を対称なように(お互いがお互いのホストであり、ターゲットであるという)構成する。ステップを以下に示す。
(A)ホスト側の処理
(1)ターゲットをデバッギとして起動する。このとき、自分のプロセスIDを引数として渡す。
(2)ホストが本来行うべき処理を行うスレッドを生成する。
(3)ターゲットからのデバッグイベントを待ち、終了イベントでない限りは、(3)を繰り返す。
(B)ターゲット側の処理
(1)引数として渡されたプロセスIDに対して、自分がデバッガとしてアタッチする。アタッチに失敗したら、プロセスIDのプロセスを強制終了し、自分も終了する。
(2)ホストからのデバッグイベントを待ち、終了イベントでない限りは(2)を繰り返す。
また、この実施の形態は、お互いがお互いのデバッガとして動作するのであるが、これまで述べてきた実施の形態のようなホストとターゲットの依存関係を作り出すとより解析を困難にすることができる。
ホストとターゲットが別ファイルで、同じフォルダ内に存在していると、対応関係を推測される可能性があるので、モジュールとして一つに統合し、起動時オプションで、ホストとターゲットの動作を切り替えるようにする。ここで、オプションとは、例えば、コマンド名の後にハイフン(−)を付加して指定するものであり、そのコマンドによる処理に対する選択ができるものである。
動作しているプロセスに対して後からデバッガとしてアタッチするというAPIと対になるAPIとして、デバッガをデタッチするというAPIがある。これを利用して、あるタイミング毎にデバッガとデバッギの関係を切り替えるという方法もある。例えば、既にホストがターゲットを起動してターゲットのデバッガとして動作している状態で、以下のようにして切り替える。
(2)ホストはデバッグイベントを受け取り、イベントがデバッガ切り替えであると判断したら、ターゲットの動作を継続させた上で、ターゲットからデタッチする。
(3)ターゲットは動作を再開したら、自分自身がデバッグされていないことを確認した上で(Windowsの場合は、IsDebuggerPresent()や、DebugActiveProcessStop()でFALSEが返るかどうか、などによって調べられる)、ホストにアタッチし、ホストからのデバッグイベントを待つ。
(4)ホストは、一定時間待ったら、(1)と同様のデバッガ切り替えのデバッグブレークを発生する。ホストは実行を停止する。
(5)ターゲットはデバッグイベントを受け取り、イベントがデバッガ切り替えであると判断したら、ホストの動作を継続させた上でホストからデタッチする。
(6)ホストは動作を再開したら、自分自身がデバッグされていないことを確認した上で、ターゲットにアタッチし、ターゲットからのデバッグイベントを待つ。
(7)上記(1)〜(6)を繰り返す。
ターゲットのプロセス内で、通常はエラーのときにしか発生しない例外である、0による除算や、アクセスバイオレーションなど、デバッガが存在しないと正常に実行を継続できない例外を複数回発生させる(ループ内などで)。
ホストは、どこでその例外が発生するかを把握しているので、例外が発生したら、ターゲットプロセス内の例外発生の原因を修正し(プログラムカウンタを進めたり、レジスタやメモリの内容を書き換えるなど)、処理を継続させる。これによって、ターゲット単体では実行できないようにする。
これまでの実施の形態では、ホストが先に起動され、ホストからターゲットをデバッギとして起動していたが、ターゲットを普通に起動した後に、ターゲットが、自分自身のプロセスのIDを引数にしてホストを起動して、ホストがターゲットにアタッチするという構成もある。
デバッグイベントはプロセス/スレッドが生成/終了したとき、例外(アクセス違反など)が発生したとき、DLL(Dynamic Linking Library)をロード/アンロードしたとき、デバッグ文字列を出力したとき、などがある。これらはいずれもターゲットからホストに処理要求を通知するのに使うことができる。特にデバッグ文字列の出力は、ホストに対するパラメータを文字列として渡すことができる。
これまでの実施例では、ターゲットをホストが呼び出す際には、下記の2つの方法があった。
(1)ターゲット側が定期的にデバッグブレークを発生させ、そのタイミングで、コマンドがあれば、ホスト側がターゲットプロセス内のメモリに処理依頼内容を書き込んでおく方法
(2)ターゲット側は、必要がない場合は、一時停止状態で待機させておいて、ホスト側が必要になったときに、ターゲット側のプロセス内のメモリに処理依頼内容を書き込んで、処理を再開させる方法
これら以外にも、OSがサポートするAPIの種類によっては、ホスト側が強制的にターゲットの処理を中断させる方法もある(Windowsの場合は、DebugBreakProcess()、Unix(登録商標)系の場合は、kill()でシグナルを送る、など)。
(1)ターゲット側には要求処理を待つスレッドを用意しておく。
(2)ホストがターゲットを強制中断する。
(3)ホストはターゲット内の特定のメモリに要求内容を書き込んでプロセスを再開させる。
(4)ターゲットは終了したらデバッグブレークを発生させる。もしくは、別のメモリ領域に結果を書き込む。
(5)ホストは、デバッグブレークを待つ、もしくは、ターゲットの結果が書き込まれる領域を監視し、結果を受け取る。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通などのために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク(DVD)であって、DVDフォーラムで策定された規格である「DVD−R、DVD−RW、DVD−RAM等」、DVD+RWで策定された規格である「DVD+R、DVD+RW等」、コンパクトディスク(CD)であって、読出し専用メモリ(CD−ROM)、CDレコーダブル(CD−R)、CDリライタブル(CD−RW)等、光磁気ディスク(MO)、フレキシブルディスク(FD)、磁気テープ、ハードディスク、読出し専用メモリ(ROM)、電気的消去および書換可能な読出し専用メモリ(EEPROM)、フラッシュ・メモリ、ランダム・アクセス・メモリ(RAM)等が含まれる。
そして、上記のプログラムまたはその一部は、上記記録媒体に記録して保存や流通等させることが可能である。また、通信によって、例えば、ローカル・エリア・ネットワーク(LAN)、メトロポリタン・エリア・ネットワーク(MAN)、ワイド・エリア・ネットワーク(WAN)、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、あるいは無線通信ネットワーク、さらにはこれらの組合せ等の伝送媒体を用いて伝送することが可能であり、また、搬送波に乗せて搬送することも可能である。
さらに、上記のプログラムは、他のプログラムの一部分であってもよく、あるいは別個のプログラムと共に記録媒体に記録されていてもよい。
20…保護対象プログラム
30…攻撃者のデバッガ
40…OS
210…デバッガ
220…デバッグ対象プログラム
310、410、510、610、710、810、910、1010…ホスト
320、420、520、620、720、820、920、1020…ターゲット
1011…メインスレッド
1012…コマンド変数TGCMD/コマンド結果変数TGRES
1013…アプリスレッド
1021…メインスレッド
1022…受付スレッド
1100…監視プログラム起動モジュール
1200…監視プログラム
1210…プログラム起動モジュール
1220…第2の秘密値記憶モジュール
1230…必要情報記憶モジュール1
1240…プログラムコード記憶モジュール
1250…復号モジュール
1260…関数呼出先記憶モジュール
1270…必要情報取得モジュール2
1300…保護対象プログラム
1310…確認モジュール
1320…第1の秘密値記憶モジュール
1330…判断モジュール
1340…必要情報取得モジュール1
1350…プログラムコード取得モジュール
1360…関数呼出先取得モジュール
1370…必要情報記憶モジュール2
[1] コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが起動していることを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
秘密の値である秘密値を記憶している第1の秘密値記憶機能、
前記監視プログラムにより、
前記保護対象プログラムの前記第1の秘密値記憶機能に記憶されている秘密値と同じ値である秘密値を記憶している第2の秘密値記憶機能、
前記保護対象プログラムにより、
前記第2の秘密値記憶機能によって記憶されている秘密値は、前記第1の秘密値記憶機能によって記憶されている秘密値と同じであるか否かを判断する判断機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶機能、
前記プログラムコードを前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記関数呼出先を記憶している関数呼出先記憶機能、
前記関数呼出先を保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記監視プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記監視プログラムに前記情報を設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
第2のプログラムを監視する第1のプログラムを起動する第1のプログラム起動機能、
前記第1のプログラムにより、
前記第2のプログラムを監視する第2のプログラム監視機能と、
前記第2のプログラムにより、
前記第1のプログラムを監視する監視機能、
を実現させ、前記第1のプログラムまたは前記第2のプログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが起動していることを確認する確認手段、
を有し、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより秘密の値である秘密値を記憶している第1の秘密値記憶手段と、
前記監視プログラムにより前記第1の秘密値記憶手段によって記憶されている秘密値と同じ値である秘密値を記憶している第2の秘密値記憶手段と、
前記保護対象プログラムにより前記第2の秘密値記憶手段によって記憶されている秘密値は、前記第1の秘密値記憶手段によって記憶されている秘密値と同じであるか否かを判断する判断手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記保護対象プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶手段と、
前記保護対象プログラムに前記プログラムコードを設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより前記関数呼出先を記憶している関数呼出先記憶手段と、
前記保護対象プログラムに前記関数呼出先を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記監視プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記情報を前記監視プログラムに設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
前記監視プログラムにより前記保護対象プログラムを監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
[1] プロセスに対して、1つのプロセスのみが監視できるオペレーティングシステムで動作するコンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能
を実現させる前記保護対象プログラム及び前記監視プログラムを有しており、
前記監視プログラムは、
前記保護対象プログラムを監視する保護対象プログラム監視機能
を実現させ、
前記保護対象プログラムは、
前記監視プログラムが起動していることを間欠的に確認する確認機能と、
前記確認機能によって前記監視プログラムが起動していないと確認された場合は、保護対象プログラムの実行を終了させる終了機能
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。
ことを特徴とする[1]に記載のプログラム。
前記保護対象プログラムは前記監視プログラムを監視することを開始する
ことを特徴とする[1]に記載のプログラム。
前記モジュールを起動する場合の引数によって、前記監視プログラムまたは前記保護対象プログラムを起動する
ことを特徴とする[1]に記載のプログラム。
ことを実現させることを特徴とする[1]に記載のプログラム。
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能
を実現させる前記保護対象プログラム及び前記監視プログラムを有しており、
前記監視プログラムは、
前記保護対象プログラムを監視する保護対象プログラム監視機能
を実現させ、
前記保護対象プログラムは、
前記監視プログラムが起動していることを間欠的に確認する確認機能と、
前記確認機能によって前記監視プログラムが起動していないと確認された場合は、保護対象プログラムの実行を終了させる終了機能
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
Claims (25)
- コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。 - コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが起動していることを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。 - コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
秘密の値である秘密値を記憶している第1の秘密値記憶機能、
前記監視プログラムにより、
前記保護対象プログラムの前記第1の秘密値記憶機能に記憶されている秘密値と同じ値である秘密値を記憶している第2の秘密値記憶機能、
前記保護対象プログラムにより、
前記第2の秘密値記憶機能によって記憶されている秘密値は、前記第1の秘密値記憶機能によって記憶されている秘密値と同じであるか否かを判断する判断機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。 - コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。 - コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶機能、
前記プログラムコードを前記保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。 - コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。 - コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記関数呼出先を記憶している関数呼出先記憶機能、
前記関数呼出先を保護対象プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。 - コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記情報を前記監視プログラムに設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。 - コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号機能、
前記保護対象プログラムにより、
前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶機能、
前記監視プログラムに前記情報を設定する設定機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。 - 前記監視プログラムは他の監視プログラムから監視されている
ことを特徴とする請求項1,2,3,4,5,6,7,8または9に記載のプログラム。 - 前記監視プログラムは前記保護対象プログラムの監視を解除し、
前記保護対象プログラムは前記監視プログラムの監視を開始する
ことを特徴とする請求項1,2,3,4,5,6,7,8または9に記載のプログラム。 - 前記監視プログラムと前記保護対象プログラムを1つのモジュールとし、
前記モジュールを起動する場合の引数によって、前記監視プログラムまたは前記保護対象プログラムを起動する
ことを特徴とする請求項1,2,3,4,5,6,7,8または9に記載のプログラム。 - コンピュータに、
保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動機能、
前記監視プログラムにより、
前記保護対象プログラムを起動し、監視する保護対象プログラム監視機能、
前記保護対象プログラムにより、
前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認機能、
を実現させ、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。 - コンピュータに、
第2のプログラムを監視する第1のプログラムを起動する第1のプログラム起動機能、
前記第1のプログラムにより、
前記第2のプログラムを起動し、監視する第2のプログラム監視機能と、
前記第2のプログラムにより、
前記第1のプログラムを監視する監視機能、
を実現させ、前記第1のプログラムまたは前記第2のプログラムが他のプログラムにより監視されるのを防止することを特徴とするプログラム。 - 保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。 - 保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが起動していることを確認する確認手段、
を有し、前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。 - 保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより秘密の値である秘密値を記憶している第1の秘密値記憶手段と、
前記監視プログラムにより前記第1の秘密値記憶手段によって記憶されている秘密値と同じ値である秘密値を記憶している第2の秘密値記憶手段と、
前記保護対象プログラムにより前記第2の秘密値記憶手段によって記憶されている秘密値は、前記第1の秘密値記憶手段によって記憶されている秘密値と同じであるか否かを判断する判断手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。 - 保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記保護対象プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。 - 保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムのプログラムコードとして欠けているプログラムコードを記憶しているプログラムコード記憶手段と、
前記保護対象プログラムに前記プログラムコードを設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。 - 保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。 - 保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムは、関数呼出先を介して関数を呼び出すプログラムコードであって、
前記監視プログラムにより前記関数呼出先を記憶している関数呼出先記憶手段と、
前記保護対象プログラムに前記関数呼出先を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。 - 保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記監視プログラムに前記情報を設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。 - 保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記監視プログラムにより前記保護対象プログラムの一部が暗号化されているプログラムコードまたはデータを復号する復号手段と、
前記保護対象プログラムにより前記監視プログラムが処理を続行するために必要な情報を記憶している必要情報記憶手段と、
前記情報を前記監視プログラムに設定する設定手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。 - 保護の対象である保護対象プログラムを起動する場合に、該保護対象プログラムを監視する監視プログラムを起動する監視プログラム起動手段と、
前記監視プログラムにより前記保護対象プログラムを起動し、監視する保護対象プログラム監視手段と、
前記保護対象プログラムにより前記監視プログラムが他の監視プログラムから監視されているか否かを確認する確認手段、
を有し、
前記監視プログラムが起動することにより前記保護対象プログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。 - 第2のプログラムを監視する第1のプログラムを起動する第1のプログラム起動手段と、
前記第1のプログラムにより前記第2のプログラムを起動する第2のプログラム起動手段と、
前記第2のプログラムにより前記第1のプログラムを監視する監視手段、
を有し、
前記第1のプログラムまたは第2のプログラムが他のプログラムにより監視されるのを防止することを特徴とする情報処理システム。
Priority Applications (8)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006237124A JP4048382B1 (ja) | 2006-09-01 | 2006-09-01 | 情報処理システムおよびプログラム |
AU2007211962A AU2007211962B2 (en) | 2006-09-01 | 2007-08-28 | Information processing system, information processing method, information processing program, computer readable medium and computer data signal |
EP11189731.0A EP2420949B1 (en) | 2006-09-01 | 2007-08-29 | Information processing system, information processing method, information processing program, computer readable medium and computer data signal |
US11/846,940 US7930743B2 (en) | 2006-09-01 | 2007-08-29 | Information processing system, information processing method, information processing program, computer readable medium and computer data signal |
EP11189732.8A EP2420950B1 (en) | 2006-09-01 | 2007-08-29 | Information processing system, information processing method, information processing program, computer readable medium and computer data signal |
EP07016935A EP1906330B1 (en) | 2006-09-01 | 2007-08-29 | Information processing system, information processing method, information processing program, computer readable medium and computer data signal |
CN2007101478400A CN101136049B (zh) | 2006-09-01 | 2007-08-30 | 信息处理系统和信息处理方法 |
KR1020070087564A KR101054318B1 (ko) | 2006-09-01 | 2007-08-30 | 정보 처리 시스템 및 프로그램을 기록한 컴퓨터로 읽을 수 있는 매체 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006237124A JP4048382B1 (ja) | 2006-09-01 | 2006-09-01 | 情報処理システムおよびプログラム |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007246418A Division JP4120702B2 (ja) | 2007-09-25 | 2007-09-25 | 情報処理システムおよびプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP4048382B1 JP4048382B1 (ja) | 2008-02-20 |
JP2008059404A true JP2008059404A (ja) | 2008-03-13 |
Family
ID=38751189
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006237124A Expired - Fee Related JP4048382B1 (ja) | 2006-09-01 | 2006-09-01 | 情報処理システムおよびプログラム |
Country Status (6)
Country | Link |
---|---|
US (1) | US7930743B2 (ja) |
EP (3) | EP1906330B1 (ja) |
JP (1) | JP4048382B1 (ja) |
KR (1) | KR101054318B1 (ja) |
CN (1) | CN101136049B (ja) |
AU (1) | AU2007211962B2 (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011248486A (ja) * | 2010-05-25 | 2011-12-08 | International Business Maschines Corporation | 所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を有する装置、所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を付与する方法及び該方法を装置で実行することが可能なコンピュータプログラム |
JP2012008825A (ja) * | 2010-06-25 | 2012-01-12 | Nec Corp | プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム |
JP2012526310A (ja) * | 2009-05-06 | 2012-10-25 | イルデト カナダ コーポレーション | ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護 |
JP2016538641A (ja) * | 2013-11-14 | 2016-12-08 | インカ・エントワークス・インコーポレイテッドInka Entworks, Inc. | アンチデバッグ方法 |
JP2019537150A (ja) * | 2016-12-05 | 2019-12-19 | ナグラビジョン エス アー | セルフデバッギング |
JP2021128772A (ja) * | 2020-02-14 | 2021-09-02 | エヌエイチエヌ コーポレーション | モバイルゲームのマクロユーザ監視方法及びその装置 |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2259205B1 (en) * | 2008-03-28 | 2018-04-25 | Panasonic Corporation | Software updating apparatus, software updating system, alteration verification method and alteration verification program |
US8600896B2 (en) * | 2008-03-28 | 2013-12-03 | Panasonic Corporation | Software updating apparatus, software updating system, invalidation method, and invalidation program |
US8763125B1 (en) * | 2008-09-26 | 2014-06-24 | Trend Micro, Inc. | Disabling execution of malware having a self-defense mechanism |
KR101554326B1 (ko) * | 2009-05-21 | 2015-09-18 | 삼성전자주식회사 | 저장 장치 및 그것의 동작 방법 |
CN102768634B (zh) * | 2011-05-06 | 2016-05-04 | 北大方正集团有限公司 | 目标系统的处理方法及监控系统 |
CN104321782B (zh) * | 2012-03-30 | 2018-01-12 | 爱迪德技术有限公司 | web应用的安全执行 |
CN103116714A (zh) * | 2013-03-01 | 2013-05-22 | 中标软件有限公司 | 一种Windows平台可执行文件双进程保护方法 |
US20160055331A1 (en) * | 2013-03-28 | 2016-02-25 | Irdeto B.V. | Detecting exploits against software applications |
CN104008037A (zh) * | 2014-03-13 | 2014-08-27 | 英业达科技有限公司 | 监控模块的监控方法 |
CN104021079B (zh) * | 2014-06-13 | 2017-05-24 | 中国民航信息网络股份有限公司 | 主机系统数据的实时监控与分析系统及方法 |
CN104102570B (zh) * | 2014-07-18 | 2017-12-01 | 广州猎豹网络科技有限公司 | 一种app运行控制的方法及装置 |
CN104268059B (zh) * | 2014-09-30 | 2017-12-22 | 上海斐讯数据通信技术有限公司 | 一种智能移动终端的应用程序查找方法和系统 |
US9483381B2 (en) * | 2014-12-15 | 2016-11-01 | Dell Products L.P. | Obfuscating debugging filenames |
KR101653741B1 (ko) * | 2015-02-11 | 2016-09-05 | (주) 에스에스알 | 실행 프로그램 동작 감시방법, 감시장치 및 이를 위한 컴퓨터 프로그램, 그 기록매체 |
FR3047585B1 (fr) * | 2016-02-09 | 2018-03-09 | Stmicroelectronics (Rousset) Sas | Procede et dispositif de surveillance de l'execution d'un code programme |
CN109324828B (zh) * | 2018-09-21 | 2023-06-02 | 山东华芯半导体有限公司 | 一种在验证平台中实现闪存多命令并行执行的方法 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62109705A (ja) | 1985-10-28 | 1987-05-20 | 田中 壮吉 | 溶融物の自動充填装置 |
JPH0713780A (ja) | 1993-06-24 | 1995-01-17 | Nikon Corp | グラフィカルユーザインタフェースを備える装置 |
US5699512A (en) | 1994-04-28 | 1997-12-16 | Nippon Telegraph And Telephone Corp. | Software analysis protection method for changing the software pattern on the memory of a user terminal |
JP3463963B2 (ja) | 1994-04-28 | 2003-11-05 | 日本電信電話株式会社 | ソフトウェア解析保護方法 |
CN1123935A (zh) * | 1994-12-03 | 1996-06-05 | 联华电子股份有限公司 | 保护软件的装置及方法 |
US6237137B1 (en) | 1997-10-15 | 2001-05-22 | Dell Usa, L.P. | Method and system for preventing unauthorized access to a computer program |
JP3033562B2 (ja) | 1998-09-02 | 2000-04-17 | 富士ゼロックス株式会社 | 再配置可能な実行プログラムの生成方法及び実行プログラム生成装置 |
US6874087B1 (en) * | 1999-07-13 | 2005-03-29 | International Business Machines Corporation | Integrity checking an executable module and associated protected service provider module |
US7430670B1 (en) * | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
WO2001040945A2 (en) * | 1999-12-01 | 2001-06-07 | Microsoft Corporation | Method and apparatus for providing secure remote debugging of computer software over a serial bus |
US6874067B2 (en) * | 2002-04-11 | 2005-03-29 | International Business Machines Corporation | Eliminating unnecessary data pre-fetches in a multiprocessor computer system |
JP2003337629A (ja) | 2002-05-18 | 2003-11-28 | Mitsuko Miyaji | プログラム難読化方法及び装置 |
EP1429224A1 (en) * | 2002-12-10 | 2004-06-16 | Texas Instruments Incorporated | Firmware run-time authentication |
JP4475894B2 (ja) | 2002-08-01 | 2010-06-09 | パナソニック株式会社 | 暗号化データを復号して実行用メモリ空間に配置する装置、およびその方法 |
DE60314782T2 (de) | 2002-08-01 | 2007-10-31 | Matsushita Electric Industrial Co., Ltd., Kadoma | Vorrichtung zum Generieren eines verschlüsselten Programms |
US20040040013A1 (en) | 2002-08-26 | 2004-02-26 | Mohit Kalra | Time-based breakpoints in debuggers |
JP2004185064A (ja) | 2002-11-29 | 2004-07-02 | Matsushita Electric Ind Co Ltd | プログラムの難読化装置及び難読化方法 |
US7484207B2 (en) * | 2002-12-11 | 2009-01-27 | O'z Co., Ltd. | Software execution control system and software execution control program |
US7149900B2 (en) * | 2002-12-12 | 2006-12-12 | Intel Corporation | Method of defending software from debugger attacks |
US7370319B2 (en) | 2003-02-11 | 2008-05-06 | V.I. Laboratories, Inc. | System and method for regulating execution of computer software |
US7360253B2 (en) * | 2004-12-23 | 2008-04-15 | Microsoft Corporation | System and method to lock TPM always ‘on’ using a monitor |
US20080168562A1 (en) * | 2005-02-25 | 2008-07-10 | Tomoyuki Haga | Secure Processing Device and Secure Processing System |
JP4796050B2 (ja) | 2005-02-25 | 2011-10-19 | パナソニック株式会社 | セキュア処理装置、及びセキュア処理システム |
-
2006
- 2006-09-01 JP JP2006237124A patent/JP4048382B1/ja not_active Expired - Fee Related
-
2007
- 2007-08-28 AU AU2007211962A patent/AU2007211962B2/en not_active Ceased
- 2007-08-29 EP EP07016935A patent/EP1906330B1/en not_active Not-in-force
- 2007-08-29 EP EP11189731.0A patent/EP2420949B1/en not_active Not-in-force
- 2007-08-29 US US11/846,940 patent/US7930743B2/en not_active Expired - Fee Related
- 2007-08-29 EP EP11189732.8A patent/EP2420950B1/en active Active
- 2007-08-30 KR KR1020070087564A patent/KR101054318B1/ko not_active IP Right Cessation
- 2007-08-30 CN CN2007101478400A patent/CN101136049B/zh not_active Expired - Fee Related
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012526310A (ja) * | 2009-05-06 | 2012-10-25 | イルデト カナダ コーポレーション | ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護 |
US9141787B2 (en) | 2009-05-06 | 2015-09-22 | Irdeto B.V. | Interlocked binary protection using whitebox cryptography |
JP2011248486A (ja) * | 2010-05-25 | 2011-12-08 | International Business Maschines Corporation | 所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を有する装置、所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を付与する方法及び該方法を装置で実行することが可能なコンピュータプログラム |
JP2012008825A (ja) * | 2010-06-25 | 2012-01-12 | Nec Corp | プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム |
JP2016538641A (ja) * | 2013-11-14 | 2016-12-08 | インカ・エントワークス・インコーポレイテッドInka Entworks, Inc. | アンチデバッグ方法 |
JP2019537150A (ja) * | 2016-12-05 | 2019-12-19 | ナグラビジョン エス アー | セルフデバッギング |
JP7042270B2 (ja) | 2016-12-05 | 2022-03-25 | ナグラビジョン エス アー | セルフデバッギング |
JP2021128772A (ja) * | 2020-02-14 | 2021-09-02 | エヌエイチエヌ コーポレーション | モバイルゲームのマクロユーザ監視方法及びその装置 |
JP7138737B2 (ja) | 2020-02-14 | 2022-09-16 | エヌエイチエヌ クラウド コーポレーション | モバイルゲームのマクロユーザ監視方法及びその装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101136049A (zh) | 2008-03-05 |
US20080060072A1 (en) | 2008-03-06 |
AU2007211962B2 (en) | 2009-06-18 |
EP2420950B1 (en) | 2013-06-19 |
EP1906330B1 (en) | 2013-03-27 |
EP1906330A2 (en) | 2008-04-02 |
CN101136049B (zh) | 2011-12-14 |
JP4048382B1 (ja) | 2008-02-20 |
EP2420949B1 (en) | 2013-12-25 |
EP1906330A3 (en) | 2011-05-11 |
KR20080020952A (ko) | 2008-03-06 |
AU2007211962A1 (en) | 2008-03-20 |
EP2420950A1 (en) | 2012-02-22 |
EP2420949A1 (en) | 2012-02-22 |
KR101054318B1 (ko) | 2011-08-05 |
US7930743B2 (en) | 2011-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4048382B1 (ja) | 情報処理システムおよびプログラム | |
US8205096B2 (en) | Software license embedded in shell code | |
JP4892167B2 (ja) | ディジタル・データ保護構成 | |
KR20070001893A (ko) | 탬퍼-레지스턴트 트러스티드 가상 머신 | |
JPWO2006009081A1 (ja) | アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法 | |
US9256731B2 (en) | System, information processing apparatus, secure module, and verification method | |
CN104715209A (zh) | 一种外发文档加密保护方法 | |
US8458488B2 (en) | Method and system for diagnosing operation of tamper-resistant software | |
US8656182B2 (en) | Security mechanism for developmental operating systems | |
JP2010039891A (ja) | 情報処理装置、プログラム実行方法、プログラムおよび情報処理システム | |
JP2010097550A (ja) | ウイルス防止プログラム、コンピュータに着脱可能な記憶装置、及びウイルス防止方法 | |
de Assumpção et al. | Forensic method for decrypting TPM-protected BitLocker volumes using Intel DCI | |
JP4120702B2 (ja) | 情報処理システムおよびプログラム | |
KR101405915B1 (ko) | 데이터의 암호화 저장 방법 및 암호화된 데이터의 판독방법 | |
KR101604892B1 (ko) | 안드로이드 기반 어플리케이션의 부정사용 방지 방법 및 장치 | |
US20060212858A1 (en) | Computer readable medium on which is stored a program for preventing the unauthorized use of program data | |
KR101300256B1 (ko) | 동적분석 및 정적분석 방지를 통한 소프트웨어 실행파일 보호 방법, 그리고 그에 따른 소프트웨어 실행파일 보호 프로그램을 기록한 컴퓨터로 판독가능한 기록매체 | |
JP2011204105A (ja) | スクリプト起動プログラム、スクリプト起動プログラムの生成プログラム、およびプログラムセット | |
WO2003029939A2 (en) | Systems and methods for preventing unauthorized use of digital content | |
AU2002219852A1 (en) | Systems and methods for preventing unauthorized use of digital content | |
Vojtěšek | Analýza rescue souboru BestCrypt Volume Encryption | |
CN111625848A (zh) | 一种android应用的加固保护方法、装置及系统 | |
CN113420340A (zh) | 信息记录装置、计算机设备及信息记录方法 | |
AU2008200472A1 (en) | Systems and methods for preventing unauthorized use of digital content related applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071113 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4048382 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101207 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111207 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111207 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121207 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121207 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131207 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |