"オブジェクト指向言語、特にJAVAで記述されたアプリケーションのクラスの複数のメソッドのうち1つを選択的にプロテクトするための方法であって、-プロテクトされたアプリケーションは:前記アプリケーションにプロテクションモジュールを追加すること;前記アプリケーションの第一のクラスの複数のメソッドのうちプロテクトされるべき第一のメソッドを分析し、該第一のメソッドを実行するために必要な第一のパラメータ複数可を決定すること;前記決定された第一のパラメータに依存する第一のゲートコードを生成し、前記第一のメソッドの第一コードを前記第一のゲートコードに置き換えて、前記プロテクトされたアプリケーションが実行されている間は、前記プロテクションモジュールによってアクセスできるように、前記置き換えられた第一のコードを保存すること;によって生成され、-前記プロテクトされたアプリケーションが実行されている間で前記第一のメソッドが呼び出されたときに、前記第一のゲートコードは、前記決定された第一のパラメータに基づいて第一のデータを収集し、該収集された第一のデータを前記プロテクションモジュールに送り、前記プロテクションモジュールは、前記保存された第一のコードにアクセスして、前記保存された第一のコードに基づいて第一の置き換えメソッドを含む新たなクラスを生成し、前記プロテクションモジュールは、前記新たなクラスをインスタンス化し、前記プロテクションモジュールは、前記第一の置き換えメソッドを呼び出し、前記実行された第一の置き換えメソッドが第一のメソッドの機能を提供するように、前記呼び出された第一の置き換えメソッドに前記収集された第一のデータの少なくとも一部を渡し、前記第一の置き換えメソッド実行後に、前記第一のゲートコードに実行結果をリターンする、該方法。前記置き換えられた第一のコードを保存するステップが、該置き換えられた第一のコードが暗号化された形式で保存されるように行われる請求項1に記載の方法。前記置き換えられた第一のコードを保存する前に、該置き換えられた第一のコードのシンボルの難読化及び/又はコードの難読化が行われる、請求項1又は2に記載の方法。前記収集された第一のデータが第一のプロテクトされたメソッドを識別する第一のメソッド識別子を含む請求項1~3いずれか1項に記載の方法。実行中に呼び出される前記第一のメソッドのインスタンスを識別するインスタンス識別子を前記収集された第一のデータが含み、前記インスタンスにデータ領域が割り当てられ、前記第一の置き換えメソッドが前記割り当てられたデータ領域を実行中使用するように、前記第一の置き換えメソッドを生成する、請求項1~4いずれか1項に記載の方法。前記第一の置き換えメソッドが、実行中に呼び出された前記第一のメソッドのインスタンスの割り当てられたデータ領域へ、前記呼び出された第一の置き換えメソッドのインスタンスのポインタをリダイレクトさせる追加コードを含む、請求項5に記載の方法。前記プロテクションモジュールが前記新たなクラスを生成するときにコードの難読化及び/又はシンボルの難読化を行う、請求項1~6いずれか1項に記載の方法。前記第一のゲートコード及び前記第一の置き換えメソッドのコードが、同一のランタイム環境で実行できるように生成される、請求項1~7いずれか1項に記載の方法。前記第一のゲートコード及び前記第一の置き換えメソッドのコードが、異なるランタイム環境で実行できるように生成される、請求項1~7いずれか1項に記載の方法。前記実行される第一の置き換えメソッドが更なる機能を提供できるように、保存前に第一のコードを変更する、請求項1~9いずれか1項に記載の方法。前記置き換えステップが、前記第一のクラスの可視性をパブリックに設定することを含む、請求項1~10いずれか1項に記載の方法。前記新たなクラスが1種類の単一のメソッド、即ち前記第一の置き換えメソッドのみ含むように、前記新たなクラスを生成する、請求項1~11いずれか1項に記載の方法。-前記保護されたアプリケーションの生成が:前記アプリケーションの第一のクラス又は第二のクラスのプロテクトされるべき第二のメソッドを分析し、該第二のメソッドを実行するのに必要な第二のパラメータ複数可を決定すること、前記決定された第二のパラメータに依存する第二のゲートコードを生成し、前記第二のメソッドの第二コードを、前記第二のゲートコードに置き換えて、前記プロテクトされたアプリケーションが実行されている間は、前記プロテクションモジュールによってアクセスできるように、前記置き換えられた第二のコードを保存すること;のステップを含み、-前記プロテクトされたアプリケーションが実行されている間で前記第二のメソッドが呼び出されたときに、第二のゲートコードが、前記決定された第二のパラメータに基づいて第二のデータを収集し、該収集された第二のデータを前記プロテクションモジュールに送り、前記プロテクションモジュールは、前記保存された第二のコードにアクセスして、前記保存された第二のコードに基づいて第二の置き換えメソッドを含む第二の新たなクラスを生成し、該第二の新たなクラスをインスタンス化し、前記プロテクションモジュールは、前記第二の置き換えメソッドを呼び出し、前記実行された第二の置き換えメソッドが第二のメソッドの機能を提供するように、前記呼び出された第二の置き換えメソッドに前記収集された第二のデータの少なくとも一部を渡し、前記第二の置き換えメソッド実行後に、前記第二のゲートコードに実行結果をリターンする、請求項1~12いずれか1項に記載の方法。コンピュータープログラム製品であって、該製品がコンピュータ上で実行されたときに請求項1~13いずれか1項に記載の方法に従ってプロテクトされたアプリケーションを生成するためのステップを実行するためのソフトウェアコードを含む、該製品。オブジェクト指向言語、特にJAVAで記述されたアプリケーションのクラスの複数のメソッドのうち1つを選択的にプロテクトするためのデバイスであって、-該デバイスは、プロテクトされたアプリケーションを:前記アプリケーションにプロテクションモジュールを追加すること;前記アプリケーションの第一のクラスの複数のメソッドのうちプロテクトされるべき第一のメソッドを分析し、前記第一のメソッドを実行するために必要な第一のパラメータ複数可を決定すること;前記決定された第一のパラメータに依存する第一のゲートコードを生成し、前記第一のメソッドの第一コードを、前記第一のゲートコードに置き換えて、プロテクトされたアプリケーションが実行されている間は、前記プロテクションモジュールによってアクセスできるように、前記置き換えられた第一のコードを保存すること;によって生成し、-前記プロテクトされたアプリケーションが実行されている間で前記第一のメソッドが呼び出されたときに、前記第一のゲートコードは、前記決定された第一のパラメータに基づいて第一のデータを収集し、該収集された第一のデータを前記プロテクションモジュールに送り、前記プロテクションモジュールは、前記保存された第一のコードにアクセスして、前記保存された第一のコードに基づいて第一の置き換えメソッドを含む新たなクラスを生成し、前記プロテクションモジュールは、前記新たなクラスを起動し、前記プロテクションモジュールは、前記第一の置き換えメソッドをインスタンス化し、前記実行された第一の置き換えメソッドが第一のメソッドの機能を提供するように、前記呼び出された第一の置き換えメソッドに前記第一のデータの少なくとも一部を渡し、前記第一の置き換えメソッド実行後に、前記第一のゲートコードに実行結果をリターンする、該デバイス。これらの観点から、本発明の目的は、オブジェクト指向言語、特にJAVA登録商標で記述されたアプリケーションのクラスの複数のメソッドのうち1つを選択的にプロテクトする方法又はデバイスを提供することにある。前記目的は、以下の方法によって解決される。オブジェクト指向言語、特にJAVA登録商標で記述されたアプリケーションのクラスの複数のメソッドのうち1つを選択的にプロテクトするための方法であって、-プロテクトされたアプリケーションは:前記アプリケーションにプロテクションモジュールを追加すること;前記アプリケーションの第一のクラスの複数のメソッドのうちプロテクトされるべき第一のメソッドを分析し、前記第一のメソッドを実行するために必要な第一のパラメータ複数可を決定すること;前記決定された第一のパラメータに依存する第一のゲートコードを生成し、前記第一のメソッドの第一のコードを、前記第一のゲートコードに置き換えて、前記プロテクトされたアプリケーションが実行されている間は、前記プロテクションモジュールによってアクセスできるように、前記置き換えられた第一のコードを保存すること;によって生成され、-前記プロテクトされたアプリケーションが実行されている間で前記第一のメソッドが呼び出されたときに、前記第一のゲートコードは、前記決定された第一のパラメータに基づいて第一のデータを収集し、該収集された第一のデータを前記プロテクションモジュールに送り、前記プロテクションモジュールは、前記保存された第一のコードにアクセスして、前記保存された第一のコードに基づいて第一の置き換えメソッドを含む新たなクラスを生成し、前記プロテクションモジュールは、前記新たなクラスをインスタンス化し、前記プロテクションモジュールは、前記第一の置き換えメソッドを呼び出し、前記実行された第一の置き換えメソッドが第一のメソッドの機能を提供するように、前記呼び出された第一の置き換えメソッドに前記収集された第一のデータの少なくとも一部を渡し、前記第一の置き換えメソッド実行後に、前記第一のゲートコードに実行結果をリターンする、該方法。前記プロテクトされたアプリケーションの実行中に、前記第一の置き換えコードを含む新たなクラスが生成され、インスタンス化されるので、ランタイム中、プロテクトするために必要な任意のステップ例えば、暗号化された状態で保存することができる前記第一コードの復号化ステップを実行することができる。従って、ランタイム環境がランタイム中に既に存在するクラスのメソッドを変更することを許容するか否かは問題にはならない。なぜなら、ランタイム中、既に存在するクラスのメソッドの変更は必要ないからである。従って、プロテクトされたアプリケーションをJAVA登録商標アプリケーションとして実現することできる。前記第一コードは、ランタイム中プロテクションモジュールのみアクセス可能なように保存することができる例えば、専有コンテナファイルproprietarycontainerfileに保存する。前記方法で良好なプロテクションが達成できる。前記のような第一コードの保存は、スタティックなコード分析の回避及び/又はライセンスの目的で使用することができる。保護されたアプリケーションは、普及したコンピューターシステム例えばインターネットを介して提供される、オンプレミスソフトウェアアプリケーションとして又はサービスアプリケーションSaaSとしてのソフトウェアとして、ライセンスすることができる。特に上記発明の方法は、コンピューターで実装される方法である。前記置き換えられた第一コードを保存するステップは、該置き換えられた第一コードが暗号化された形態で保存されるように、実行することができる。暗号化されたコードはクラッカーにとって使用することができず、解読することもできないため、このことにより良好にプロテクトされる。さらに、前記置き換えられた第一コードのシンボルの難読化及び/又はコードの難読化を保存する前に行うこともできる。このことにより前記プロテクションが強化される。第一のデータには、前記第一のプロテクトされたメソッドを識別するための第一のメソッド識別子を含めることができる。前記保存された第一コードにアクセスするために、プロテクションモジュールが前記メソッド識別子を使用することができる。更に、前記第一データ中にメソッド識別子を提供することにより例えば第一のゲートコードが第一のデータを収集した場合に、1つ以上のクラスの複数のメソッドを選択的にプロテクトすることが可能となる。なぜなら、それぞれプロテクトされたクラスは、前記メソッド識別子を用いることにより、プロテクトされたアプリケーションのランタイム中にプロテクションモジュールによって容易に識別することができるからである。更に、前記第一のデータは、実行中に呼び出される第一のメソッドのインスタンスを識別するインスタンス識別子を含むことができる。ここで、データ領域が通常はランタイム環境によって前記インスタンスに割り当てられるが、第一の置き換えメソッドが該割り当てられたデータ領域を第一の置き換えメソッドが呼び出されたときに使用するように、前記第一置き換えメソッドを生成する。特に、第一の置き換えメソッドは、実行中に呼び出された前記第一のメソッドのインスタンスの割り当てられたデータ領域へ、前記呼び出された第一の置き換えメソッドのインスタンスのポインタをリダイレクトさせる追加コードを含む。プロテクションモジュールは、前記新たなクラスを生成する際にはコードの難読化及び/又はシンボルの難読化を行うことができる。第一のゲートコード及び第一の置き換えメソッドのコードは、同一のランタイム環境で実行されるように生成することができる。しかし、一方で前記第一のゲートコード及び第一の置き換えメソッドのコードは、異なるランタイム環境で実行されるように生成することもできる。この場合、プロテクションモジュールのコードも、前記第一の置き換えメソッドに関する第二のランタイム環境で実行されることが好ましい。しかし、前記プロテクションモジュールのコードは、第一のゲートコードの第一のランタイム環境で実行することも可能である。あるいは、前記プロテクションモジュールのコードの一部を、第二のランタイム環境で実行し、別の一部が第一のランタイム環境で実行することも可能である。このようにして、プロテクションは効率的に強化することができる。第二のランタイム環境は、第一のランタイム環境とは違ったコード文法を理解することが好ましい。この場合、強化されたプロテクションにつながる第二のランタイム環境でコードが実行されるようにするために、所要のコード変換を行わなければならない。第一のゲートコードのためのランタイム環境は、プロテクトされるアプリケーションのためのランタイム環境、例えばJAVA登録商標ランタイム環境であってよい。第二のランタイム環境は、公知ではない専有ランタイム環境であってよい。このようにして非常に良好なプロテクションが実現できる。前記置き換えられた第一のコードを保存する前に、第一の置き換えメソッドの観点から、ランタイム中に生成することを採用することができる。置き換えステップには、第一のクラスの可視性をパブリックに設定することを含めることができるスタティックな可視性の設定。更に、実行される第一の置き換えメソッドは、実行中の第一のクラスの可視性をダイナミックに変更することも可能であるダイナミックな可視性の設定。更に、もし可能でかつ必要であれば、前記スタティックな可視性の設定及びダイナミックな可視性の設定を組み合せることもできる。更なる実施形態では、実行される第一の置き換えメソッド前記第一の置き換えメソッドを含む新たなクラスは保存された第一のコードに基づいて生成されるが更なる機能を提供するように、保存前に第一のコードを変更することができる。前記更なる機能とは、実行される第一の置き換えメソッドによって提供される第一のメソッドの機能に関する更なる機能である。生成した新たなクラスは、1種類の単一のメソッド、即ち第一の置き換えメソッドだけを含むことも可能である。プロテクションモジュールは、第一のゲートコードに実行結果をリターンするときに、生成した新たなクラスのコードをキャッシュすることができる。この場合、第一のメソッドを実行中に再度呼び出すときに、新たなクラスを再度生成する必要がなくなるキャッシュコードを使用することができる。このことにより、ランタイム中の実行速度を上げることができる。しかし、別の実施形態では、プロテクションモジュールは、第一のゲートコードに実行結果をリターンするときに、生成した新たなクラスのコードを廃棄又はクリアすることもできる。第一のメソッドを実行中に再び呼び出す際には、新たなクラスを生成しなければならない。このことにより、生成した新たなクラスのコードが、原則としてクラッカーにとってアクセス可能となる持続時間が減少するため、より強固なプロテクションにつながる。プロテクトされたアプリケーションの生成には、更に以下のステップを含めることができる:前記アプリケーションの第一のクラス又は第二のクラスのプロテクトされるべき第二のメソッドを分析し、該第二のメソッドを実行するのに必要な第二のパラメータ複数可を決定すること、前記決定された第二のパラメータに依存する第二のゲートコードを生成し、前記第二のメソッドの第二コードを、前記第二のゲートコードに置き換えて、前記プロテクトされたアプリケーションが実行されている間は、前記プロテクションモジュールによってアクセスできるように好ましくはアクセスのみできるように、前記置き換えられた第二のコードを保存すること;のステップを含み、-前記プロテクトされたアプリケーションが実行されている間で前記第二のメソッドが呼び出されたときに、第二のゲートコードが、前記決定された第二のパラメータに基づいて第二のデータを収集し、該収集された第二のデータを前記プロテクションモジュールに送り、前記プロテクションモジュールは、前記保存された第二のコードにアクセスして、前記保存された第二のコードに基づいて第二の置き換えメソッドを含む第二の新たなクラスを生成し、該第二の新たなクラスをインスタンス化し、前記プロテクションモジュールは、前記第二の置き換えメソッドを呼び出し、前記実行された第二の置き換えメソッドが第二のメソッドの機能を提供するように、前記呼び出された第二の置き換えメソッドに前記収集された第二のデータの少なくとも一部を渡し、前記第二の置き換えメソッド実行後に、前記第二のゲートコードに実行結果をリターンする。このようにして、複数のメソッドを選択的にプロテクトすることができる。特に、更なるメソッドをプロテクトするための対応するステップを実行することが可能である。異なるクラスのメソッドに関しては、異なるプロテクションモジュールを使用することができ、特に各クラスには1つのプロテクションモジュールを使用することができる。そして、プロテクトされる第二のメソッドに関する実施形態、又は更なるメソッドに関する更なる実施形態は、前記第一のメソッドに関する更なる実施形態に対応する態様で実現することができる。本発明では更にコンピュータープログラム製品を提供し、該製品がコンピューター上で実行されるときに、本発明の方法並びに更なる本発明の方法の実施形態に従って、プロテクトされたアプリケーションを生成するためのステップを実行するためのソフトウェアコードを該製品は含む。さらに、本発明では、オブジェクト指向言語、特にJAVA登録商標で記述されたアプリケーションのクラスの複数のメソッドのうち1つを選択的にプロテクトするためのデバイスであって、-該デバイスは、プロテクトされたアプリケーションを:前記アプリケーションにプロテクションモジュールを追加すること;前記アプリケーションの第一のクラスの複数のメソッドのうちプロテクトされるべき第一のメソッドを分析し、前記第一のメソッドを実行するために必要な第一のパラメータ複数可を決定すること;前記決定された第一のパラメータに依存する第一のゲートコードを生成し、前記第一のメソッドの第一コードを、前記第一のゲートコードに置き換えて、プロテクトされたアプリケーションが実行されている間は、前記プロテクションモジュールによってアクセスできるように好ましくはアクセスのみできるように、前記置き換えられた第一のコードを保存すること;によって生成し、-前記プロテクトされたアプリケーションが実行されている間で前記第一のメソッドが呼び出されたときに、前記第一のゲートコードは、前記決定された第一のパラメータに基づいて第一のデータを収集し、該収集された第一のデータを前記プロテクションモジュールに送り、前記プロテクションモジュールは、前記保存された第一のコードにアクセスして、前記保存された第一のコードに基づいて第一の置き換えメソッドを含む新たなクラスを生成し、前記プロテクションモジュールは、前記新たなクラスをインスタンス化し、前記第一の置き換えメソッドを呼び出し、前記プロテクションモジュールは、前記実行された第一の置き換えメソッドが第一のメソッドの機能を提供するように、前記呼び出された第一の置き換えメソッドに前記収集された第一のデータの少なくとも一部を渡し、前記プロテクションモジュールは、前記第一の置き換えメソッド実行後に、前記第一のゲートコードに実行結果をリターンする、該デバイスを提供する。さらに本発明のデバイスの実施形態は、本発明の方法の全ての更なる実施形態を含めた本発明の方法に関して上述したのと同様の方法で実現することができる。上述した特性及び以下の未だ説明していない事は、ここで示唆された組合せのみならず他の組合せ又は単独で、本発明の思想を離れることなく使用することが可能であることが理解されよう。本発明については、以下本発明に関連した特性を開示している添付図面を参照することによりより詳細に説明する。図1は、JAVA登録商標で記述されたアプリケーション1のバイナリコードコンテナファイルを概念的に示しており、3つのクラス2、3、4を含み、各クラスには複数の異なるメソッド21、22、23、24、31、32、33が含まれる。説明しやすくするため、第一のクラス2は、クラスCarと仮定し、自動車製造業者のウェブサイト上で構築することができる車の特性を表す。さらに、前記第一のクラス2の第一のメソッド21のオリジナルコード5には、関数getcolourtypeを含むと仮定する。アプリケーション1が実行されると、前記メソッドgetcolourtypeは、要求されたtypeの色を決定するここで、typeへの可能な値として、左ドア、右ドア、フロントバンパー、バックバンパー等がある。前記第一のクラス2の第一のメソッド21を選択的にプロテクトするために、以下のステップを実行する。ステップN1図3で、プロテクションモジュール7を前記アプリケーション1図2に追加する。その後、プロテクトされる第一のメソッド21を実行の為に必要なパラメータに関して分析をするステップN2。この例では、関数getcolourtypeに関してのパラメーター値が必要となる。そして、必要なパラメータの例としては、コード属性、スタックマップテーブル属性、及び例外属性である。第一のメソッド21のオリジナルコード5第一のコード5は、前記アプリケーション1から移植されるステップN3。ステップN4では、第一のゲートコード6を、ステップN2での分析からの情報を考慮しながら作成する。以降でより詳細に説明するが、第一のゲートコード6は決定されたパラメータに基づいてデータを収集し、実行中に前記収集したデータをプロテクションモジュール7に送る。そして、プロテクションモジュール7から実行結果がリターンされたときに、ハンドリングを行う。続くステップN5では、後で使用するためのメソッドマッピングテーブルを生成する。前記メソッドマッピングテーブルは複数のメソッドをプロテクトする場合に使用される。この場合、メソッドマッピングテーブルは、プロテクトされる各メソッドに対してユニークなメソッド識別子を割り当てるために使用される。ステップN6では、概念的に図2に示したようなバイナリコンテナファイル中の第一のコード5を、第一のゲートコード6に置き換える。更に、ステップN6において、第一のクラス2の可視性をパブリックに設定することができる。更に、変更されたアプリケーション1’を生成するため図2、移植されたオリジナルコード5は暗号化され、該形態5’でアプリケーションのコンテナファイルに保存されるステップN7。無論、暗号化されたオリジナルコード5’は、プロテクトされたアプリケーション1’のコンテナファイルの外部に保存することもできる。しかし、暗号化されたオリジナルコード5’は、なおもプロテクトされたアプリケーション1’の一部を形成する。更に、ステップN7において、マッピングテーブルは、暗号化された形態で保存される。このようにして、プロテクトされたアプリケーション1’は、前記第一メソッドのスタティックコード分析を防止するために、プロテクトされたメソッド21を含む。ステップN7でコードを暗号化する前に、コードの難読化及び/又はシンボルの難読化を行うこともできる。コードの難読化は、デッドコードやジャンクインストラクションを挿入することによって実現できる。更に、実行のフローは、循環ジャンプCircularJumpを追加することによって変更することができる。シンボルの難読化は、第一のメソッド21のフィールドのオリジナル名称を変更することによって及び/又は第一のメソッド21自身のオリジナル名称を変更することによって実現することができる。特に名称はランダムな文字列に変更することができる。上述したN1~N7までのステップは、上述した順番で実行され、プロテクトされたアプリケーション1’を生成する。無論、ステップN1~N7は他の順番で実行することも可能である。例えば、ステップN1~N2の順番は変更することができる。ステップN1~N7は図4に概念的に示したコンピューター20によって実行することができる。結果として、コンピューター20はプロテクトされたアプリケーション1’を生成する。従って、変更されたJAVA登録商標アプリケーション1’が、仮想JAVA登録商標マシーンJAVA登録商標ランタイム環境で実行されると、図5で概念的に示すように、第一のクラス2の第一のメソッド21の、複数のインスタンスI121、I221が存在させることができる。しかし、前記それぞれのメソッドのコードこの場合だと第一のゲートコード6は、一回のみロードされ、各インスタンスI121、I221に関する別々のデータ領域D121,D221が提供され、並びに各メソッドは呼び出された際にプライベートなメソッドスタックS121,S221を得る。前記メソッドスタックS121,S221は、矢印T121,T221に示されるように、前記割り当てられたデータ領域D121,D221を指す。プロテクトされたアプリケーション1’の第一のクラス2がインスタンス化されたときに、データ領域D121の供給は仮想JAVA登録商標マシーンによってハンドルされ、第一のメソッド21の第二のインスタンスが作成されたときにD221が供給される。前記第一のメソッド21の実行中は、仮想JAVA登録商標マシーンは、呼び出されたメソッド21のメソッドスタック中に参照を保存することによって正しいデータ領域D121,D221の参照を提供する。更に実行中は、コード6、データ領域D121及びメソッドスタックS121は前記メソッド21の第一のインスタンスI121を形成する。そして、コード6、データ領域D221及びメソッドスタックS221は第二のインスタンスI221を形成する。前記メソッドスタックS121,S221は別々のスタックとして示してはいるが、これらはそれぞれのインスタンスI121,I221のランタイム中にのみ生成することができ、仮想JAVA登録商標マシーンによって使用される通常のスタックの一部となりうる。しかし、記載を簡単にするため、前記別々のメソッドスタックS121,S221は図5を記載して示す。以下の、実行中に呼び出されるメソッドの更なるインスタンスの記述についても同様である。第一のインスタンスI121の第一のメソッド21が呼び出された場合図6のステップR1、移植されたゲートコード6が実行される。前記ゲートコード6は、第一のメソッド21を実行するのに必要な全てのメソッドパラメータの値を含むデータ配列を作成する。この場合、関数getcolourtypeのパラメータtypeの値は前記データ配列中に含まれる。そして、データ配列はさらにユニークなメソッド識別子並びに第一のクラス21の各インスタンスここでは第一のインスタンスに関する情報を含む。このデータ配列は、プロテクションモジュール7に送られ、コード制御がプロテクションモジュール7に移る図5の矢印P1及び図6のステップR2。プロテクションモジュール7は、メソッド識別子及び該プロテクションモジュール7によって復号化されたマッピングテーブルに基づいて、どのプロテクトされたメソッドが必要なのかを決定しこの場合、第一のメソッド21、ステップR3、プリプロセッシングを行うステップR4。プロテクションモジュール6はJAVA登録商標コード7で記述されたスタティックなメソッドのみを含むため、コード7及びデータ領域D71のみを図5に示す。前記プリプロセッシングステップR4において、暗号化されたオリジナルコード5は復号化され、ただ1つのメソッド81を含む新たなクラス8が生成される。図5に概念的に示すように、新たなメソッド81は更なるコード9及び復号化されたオリジナルコード5を含む。新たなクラス8を生成する場合、コードの難読化及び/又はシンボルの難読化を実行することができる。新たなクラス8のインスタンスI181は、プロテクションモジュール7によって作成され、インスタンス化される図5の矢印P2及び図6のステップR5。前記インスタンスI181はコード9、5、データ領域D181、及び矢印T181で示される割り当てられた出た領域D181を指すメソッドスタックS181を含む。新たなメソッド81のインスタンスの生成後、該メソッドは呼び出されステップR6、コードの実行は追加コード9からスタートする。矢印T’181で示しているが、メソッドスタックS181がデータ領域D121を指すように、前記追加コード9はメソッドスタックS181を変更するメソッドスタックS181中においていわゆるこのインスタンスに関するアドレスを変更する。その後、オリジナルコード5は、第一のクラス21の第一のインスタンスI121の正しいデータ領域D121を用いて実行される。このようにして、第一のメソッド21の機能は、第一のインスタンスI121のコンテキスト中で提供される。従って、新たなメソッド81は、置き換えメソッド81として名づけることができる。メソッド81実行後、コード制御はプロテクションモジュール7矢印P3に戻り、プロテクトされたアプリケーション1’の実行を継続できるよう、該モジュールはコード制御を第一のインスタンスI121の第一ゲートコード6に戻す。ステップR3では、プロテクションモジュール7は、第一のメソッド21の実行を許可するかどうか、又は例えば、もし必要なライセンスが存在するならばライセンス付与するかどうかをチェックすることができる。そして、実行を許可した場合又は各ライセンスが存在する場合のみ、上述したステップR3~R6は実行される。もし、実行が許可されない場合、又は各ライセンスが存在しない場合には、置き換えメソッド81が実行されないようにするため、ステップR3~R6は実行されない。この場合、実行が許可されていないこと、又は各ライセンスが存在しないこと、そしてコード制御が第一のインスタンスI121の第一のゲートコード6に戻ったという情報を表示することが可能である。上述したステップN2~N7は、第一のクラス2及び/又は他のクラス3、4の2以上のメソッドが選択的に保護されるように、繰り返し実行することができる。既に述べたように、各ゲートコードはステップR1でデータ配列の一部としてユニークなメソッド識別子を作成する。前記メソッド識別子を、プロテクションモジュール7が使用し、プロテクションモジュール7を呼び出すプロテクトされたメソッドを識別する。上述した実施形態において、置き換えメソッドがプロテクトされたメソッドのインスタンスのデータ領域を使用することを保証するために、各置き換えメソッドの各メソッドスタックにおけるポインタは変更される。しかし、置き換えメソッドががプロテクトされたメソッドのデータ領域を直接使用することができるように、ステップN7でオリジナルコードを変更することも可能である。プロテクトされたメソッドのデータ領域へのアクセスを許可するために、各メソッドのクラスの可視性を変更することが必要になる可能性がある。これについては、例えばステップN6で、プロテクトされたアプリケーション1’を生成したときに行うことができる。所要のアクセスを可能にするために、別の方法として、各メソッドのクラスの可視性をラインタイム中ダイナミックに変更することもできる。上述した実施形態において、プロテクトされたアプリケーションのクラス2、3及び4のメソッドのコード、プロテクションモジュール7のコード、並びにランタイム中に生成された新たなクラスの新たなメソッドのコードが、同一のJAVA登録商標ランタイム環境で実行される。しかし、別のランタイム環境を提供することも可能である。この場合、プロテクションモジュール7のコード及び新たなクラスの新たなメソッドのコードは別のランタイム環境専有のランタイム環境であってよいで実行されることが好ましい。しかし、プロテクションモジュール7のコードをJAVA登録商標ランタイム環境で実行することも可能である。更に、プロテクションモジュール7のコードの一部をJAVA登録商標ランタイム環境で実行し、かつプロテクションモジュールのコードの別の一部を別のランタイム環境で実行することも可能である。別のランタイム環境は、異なるコード文法又は異なるコードが必要となるように実装することができる。この場合、別のランタイム環境で実行されるコードは調整又は変換しなくてはならない。別のランタイム環境でのコード文法は公知のものではないことが好ましい。"