モジュールの集合体からなるプログラム本体であって、各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、からなるプログラム複合体。請求項1に記載の復号化プログラム。請求項1に記載の復号化プログラムを実行可能に前記暗号化を計算機に実行させるための暗号化プログラム。次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための削除プログラムをさらに有する請求項1に記載のプログラム複合体。次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための再暗号化プログラムをさらに有する請求項1に記載のプログラム複合体。しかし、ソースコード自体の難読性を上げても、そこから生じる実行形式のコード自体が平文であるため、時間をかければ必ず解析が可能である点が問題となる。そこで、実行形式のコードを暗号化し実行時に復号化するという方法が考えられる。これにより、記憶域に保存された状態の実行形式のファイルについては、暗号化されているため、解析がほぼ不可能である。しかしながら、暗号化するだけでは実行時には何らかの形で復号化する必要があり、復号化し実行中のコードについてはデバッガ等による解析が可能である点が問題となる。例えば、実行時に全てのコードを復号化してから実行する方法であると、実行前においては暗号化されているため、解析はほぼ不可能であるが、実行時にプログラム全てを復号化する方式であると、メモリ上において復号化されたプログラムがロードされた状態のイメージを解析することにより、その内容を把握することが可能である。そうすると、暗号化されたモジュールを容易に解析できないような、プログラムの実行方式の実現という課題が生じる。以上の課題を解決するために、第一に本発明は以下のようなプログラム複合体を提供する。該プログラム複合体は複数のモジュールから構成されている。実行前においては、少なくとも一つのモジュールは暗号化データで保持され、実行時においては暗号化されたモジュールの前に実行されるモジュールが復号化の処理を行い、復号化されたモジュールが実行されるといったプログラム複合体である。具体的には、モジュールの集合体からなるプログラム本体であって、各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、からなるプログラム複合体である。第二は、上記第一のプログラム複合体を基本として、次に実行されるモジュールを呼び出した後、そのモジュールを記憶域から削除する処理を行うプログラム複合体である。具体的には、次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための削除プログラムをさらに有する請求項1に記載のプログラム複合体である。第三は、上記第一のプログラム複合体を基本として、次に実行されるモジュールを呼び出した後、そのモジュールを再度暗号化する処理を行うプログラム複合体である。具体的には、次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための再暗号化プログラムをさらに有する請求項1に記載のプログラム複合体。以上のような構成をとる第一の本発明によって、実行前には暗号化データでモジュールを保持し、実行時に暗号化されたモジュールを直前に復号化して実行することが可能である。そうすると、実行直前まで、秘匿したいモジュールを暗号化の状態とすることが可能である。このため、デバッガ等でプログラムを解析する場合においても、一度に全てのモジュールが可読で有る場合に比べて、解析に手間がかかることとなる。これにより、プログラムの耐タンパ性が向上することとなる。また、第二の本発明によって、秘匿したいモジュールを実行した後に速やかに記憶媒体より削除することが可能となる。これにより、実行後に記憶域に残存している平文のモジュールを消去し、その内容を解析することを不可能とすることができる。これにより、実行時のみ平文のモジュールが記憶域に存在する動作が可能となり、プログラムの耐タンパ性が向上することとなる。また、第三の本発明によって、秘匿したいモジュールを実行した後に速やかに再暗号化することが可能となる。これにより、実行後に記憶域に残存している平文のモジュールを暗号化し、その内容を解析することを不可能とすることができる。これにより、実行時のみ平文のモジュールが記憶域に存在する動作が可能となり、プログラムの耐タンパ性が向上することとなる。以下に、図を用いて本発明の実施の形態を説明する。なお、本発明はこれら実施の形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施しうる。なお、実施例1は、主に請求項1、2、3について説明する。また、実施例2は、主に請求項4について説明する。また、実施例3は、主に請求項5について説明する。≪実施例1≫図1は、本実施例のプログラム複合体の動作の一例を説明するための概念図である。この図にあるように、プログラムAとしたプログラム複合体は記憶域のアドレスXからアドレスYの間にモジュールP個が存在している。モジュール2からモジュールPは暗号化されている。プログラムは、モジュール1から順にモジュールPまで実行されることとする。モジュール1はモジュール2を呼び出し、モジュール2はモジュール3を呼び出すという階層的な実行方式をとる。ここで、保護すべきモジュールはモジュールPであるとする。実行前の状態では、解析者はモジュールPがアドレスYの位置に存在することは知ることはない。実際にモジュールP-1まで実行し、解析した後でないと、モジュールPを解析することができない。一方、実行時にすべてのモジュールを先に復号化する暗号化方式であると、復号化した後にはプログラム全体の流れを見渡すことが可能となるので、モジュールPが保護すべきモジュールであることが早期に特定でき、モジュールPを解析することが可能である。図2は図1の内容をさらに概略化したものであり、プログラムAの動作を説明するための図である。この図にあるように、初期状態0201ではモジュール1の他は暗号化されている。実行が開始されると、モジュール1が実行され、モジュール1の完了前に、モジュール1がモジュール2を復号化し、順次、次のモジュールを復号化しながら実行していく。そして、保護すべきP番目のモジュールを復号化しながら実行し、終了する0202。このように、本実施例のプログラム複合体は、プログラムの実行時において、モジュールが実行され終了する直前に次に実行すべきモジュールを復号化する動作が可能である。これにより、実行時になって初めてモジュールのコードが可読となるため、図2において保護すべきP番目のモジュールを解析しようとした場合には、直接P番目のモジュールを解析することは出来ず、順番に実行して解析する必要がある。このため、デバッガなどでプログラムを解析する場合、一度に全ての関数が可読である場合に比べ、大幅に解析に時間がかかることとなる。さらに、暗号化により保護対象関数Pまでの流れが隠蔽されているので、解析者がプログラムの全体像を十分につかめない。図3は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例のプログラム複合体0300は、プログラム本体0301と、モジュールの集合体0302と、復号化プログラム0303と、を有する。プログラム本体0301は、モジュールの集合体より構成される。モジュールは複数存在し、少なくとも1つの、保護すべきモジュールからなる。保護すべきモジュールは暗号化されている。モジュールの集合体0302は複数のモジュールからなる。ここでモジュールとは、関数や、サブルーチン、メソッドなどを含む。モジュールは次に実行すべき次モジュールが暗号化されている場合には、復号化プログラム0303を呼び出し、当該モジュール終了前のタイミングにおいて次モジュールを復号化し、次モジュールを実行する。図3では、モジュール2の次モジュールが保護すべきモジュールとなっている。したがって、モジュール2は、モジュール2の終了前のタイミングにおいて復号化プログラム0303を呼び出し、モジュール3を復号化し、実行させる。ここで、モジュールの実行とは、モジュールをメモリ等の記憶域にロードして、演算装置にデータを送り込み、その結果を受け取ることで、システムの内部状態に変化を加えることである。演算装置は、CPUやMPU、GPUなどの演算可能な装置を指す。これら演算装置を内部に組み込み、演算の結果を記憶域において保持可能な装置を計算機とする。暗号化されているモジュールは必ずしも、保護すべきモジュールに限らない。解析者を欺くために、保護すべきモジュール以外のモジュールをも暗号化することによって、保護すべき関数に至るまでの道筋を隠蔽することができる。これにより、解析にかかる手間が増大し、耐タンパ性の向上を見込むことができる。図4はモジュールの終了前のタイミングを説明するための図である。図の横軸は時間軸であり、モジュールが実行されるタイミングを示す。モジュール1は平文のモジュールであり、終了前に暗号化モジュールであるモジュール2を復号化するために復号化プログラムを呼び出すと共にモジュール2を実行させる。モジュール2は終了前にモジュール3を実行する。モジュール4はモジュール3の終了前のタイミングにて実行が開始され、同時にモジュール2の終了前のタイミングにて実行が開始されている。この場合はモジュール2が復号化プログラムを呼びだしてモジュール4を復号化し、実行してもよいし、モジュール3が復号化プログラムを呼び出し、終了前にモジュール4を復号化し、実行してもよい。モジュール5はモジュール4の終了後に実行されているから、モジュール2の終了前のタイミングでモジュール2が復号化プログラムを呼び出すことによって復号化され実行される。このように、次に実行されるモジュールである次モジュールとは、モジュール2とモジュール4との関係や、モジュール2とモジュール5との関係のように、必ずしも次に実行されるモジュールだけに限られない。上記のとおり、モジュール内の適切な位置に復号化プログラムの呼び出しと、次モジュールの実行命令を組み込むことで、要求されたタイミングでモジュールが実行され、適切なプログラムの動作が得られる。復号化プログラム0303は、次モジュールの復号化を行う。具体的には、実行中のモジュールより次モジュールの記憶域におけるアドレス情報を受け取り、その情報を元に、復号化を行う。復号化プログラムは図2のように、別個独立として存在し、モジュールから呼び出されるものでもよいし、各モジュールに直接埋め込まれたものでもよい。また、復号化プログラムを複数存在させ、複数の種類の暗号化方式に対応させるものでもよい。この場合、実行中のモジュールには次モジュールに適合する暗号化方式の復号化プログラムの実行命令を含ませることができる。図5は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行うステップS0501。暗号化されている場合には、復号化するための処理を実行するステップS0502。暗号化されていない場合には、ステップS0502はスキップする。その後次モジュールを実行しステップS0503、プログラムの終了か否かの判断を行いステップS0504、終了で無ければ、ステップS0501に戻る。終了であれば、プログラムを終了させる。図6は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行うCPU中央演算装置0601と、揮発性メモリ0602と、不揮発性メモリ0603とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される入出力I/F0604を有する。そしてそれらがシステムバス0605などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。また、揮発性メモリ0601は、各種処理を行うプログラムをCPU0601に実行させるために不揮発性メモリ0602から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。ここで、入出力I/F0604からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ0603より揮発性メモリ0602にロードされる。プログラムAはCPU0601により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU0601において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU0601において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ0602に書きこむ。書きこまれたコードはCPU0601において実行される。以上のように本実施例のプログラム複合体によって、暗号化された次に実行されるべきモジュールを呼び出し元のモジュールによって復号化し、実行することができる。これにより、モジュールは階層的に実行されることとなり、実行直前まで保護すべきモジュールを暗号化したままとすることが可能である。これにより、一度に全てのモジュールを復号化する場合よりも、解析に手間がかかることとなるため、プログラムの耐タンパ性が向上する。≪実施例2≫図7は、本実施例のプログラム複合体の適用例について説明するための概念図である。この図にあるように、プログラムの実行開始時0801においては、モジュール1以外のモジュールが暗号化されている。復号化プログラムによりモジュール1の実行終了前に、次に実行すべきモジュール2を復号化する。そして、モジュール1の終了後においては、モジュール1を記憶域から削除する0802。このように本実施例のプログラム複合体は、次に実行すべきモジュールが開始されると、次モジュールを呼び出したモジュールを記憶域から削除することが可能な切換装置である。これにより、プログラム実行終了時において記憶域に残存しているモジュールのコードを解析することが不可能となり、プログラムの耐タンパ性が向上する。図8は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例のプログラム複合体0800は、プログラム本体0801と、モジュールの集合体0802と、復号化プログラム0803と、を有する。なお、これら構成要件については上記実施例にて既に記載済みであるのでその説明は省略する。本実施例のプログラム複合体の特徴点は、プログラム複合体0800が削除プログラム0804を新たに有する点である。削除プログラム0804は、次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための処理を行う。図7において説明すると、モジュール2の動作が完了したのを、モジュール2あるいはモジュール3で検知し、モジュール2またはモジュール3からモジュール2の記憶域のアドレスを取得する。取得したアドレスに基づいて、削除プログラムはモジュール2の削除を実行する。図9は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行うステップS0901。暗号化されている場合には、復号化するための処理を実行するステップS0902。暗号化されていない場合には、ステップS0902はスキップする。その後次モジュールを実行開始ステップS0903する。次いで、次モジュールは呼出元モジュールの削除を行うステップS0904。その後、プログラムの終了か否かの判断を行いステップS0905、終了で無ければ、ステップS0901に戻る。終了であれば、プログラムを終了させる。図10は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行うCPU中央演算装置1001と、揮発性メモリ1002と、不揮発性メモリ1003とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される入出力I/F1004を有する。そしてそれらがシステムバス1005などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。また、揮発性メモリ1002は、各種処理を行うプログラムをCPU1001に実行させるために不揮発性メモリ1003から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。ここで、入出力I/F1004からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ1003より揮発性メモリ1002にロードされる。プログラムAはCPU1001により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU1001において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU1001において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ1002に書きこむ。書きこまれたコードはCPU1001において実行される。平文となったモジュールを実行する際に、プログラムAは削除プログラムをCPU1001にて実行する。削除プログラムは、プログラムAのうち先に実行されたモジュールを揮発性メモリ1002から削除する。このようにして、実行後のモジュールを削除していくことによって、実行後に記憶域に残っている平文のコードを除くことができる。これにより、実行後のモジュールのコードを解析することが不可能となる。したがって、耐タンパ性の高いプログラム複合体の実行が可能となる。≪実施例3≫図11は、本実施例のプログラム複合体の適用例について説明するための概念図である。この図にあるように、プログラムの実行開始時1101においては、モジュール1以外のモジュールが暗号化されている。復号化プログラムによりモジュール1の実行終了前に、次に実行すべきモジュール2を復号化する。そして、モジュール1の終了後においては、モジュール1を再度暗号化する1102。このように本実施例のプログラム複合体は、次モジュールの実行時にそのモジュールを呼出した呼出元のモジュールを再度暗号化する処理が可能である。これにより、モジュールあるいはプログラム本体の実行後において、記憶域に残存しているモジュールのコードを解析されることが不可能となる。したがって、プログラム複合体の耐タンパ性が向上する。図12は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例のプログラム複合体1200は、プログラム本体1201と、モジュールの集合体1202と、復号化プログラム1203と、を有する。なお、これら構成要件については上記実施例にて既に記載済みであるのでその説明は省略する。本実施例のプログラム複合体の特徴点は、プログラム複合体1200が再暗号化プログラム1204を新たに有する点である。再暗号化プログラム1204は、次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための処理を行う。具体的には、次モジュールの実行開始後において、呼出元モジュールモジュール2のアドレス情報を再暗号化プログラムは呼出元モジュールあるいは実行中モジュールモジュール3から取得する。実行中モジュールは再暗号化プログラムを実行し、呼出元モジュールを暗号化する。図13は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行うステップS1301。暗号化されている場合には、復号化するための処理を実行するステップS1302。暗号化されていない場合には、ステップS1302はスキップする。その後次モジュールを実行開始ステップS1303する。次いで、次モジュールは呼出元モジュールの再暗号化を行うステップS1304。その後、プログラムの終了か否かの判断を行いステップS1305、終了で無ければ、ステップS1301に戻る。終了であれば、プログラムを終了させる。図14は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行うCPU中央演算装置1401と、揮発性メモリ1402と、不揮発性メモリ1403とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される入出力I/F1404を有する。そしてそれらがシステムバス1405などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。また、揮発性メモリ1402は、各種処理を行うプログラムをCPU1401に実行させるために不揮発性メモリ1403から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。ここで、入出力I/F1404からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ1403より揮発性メモリ1402にロードされる。プログラムAはCPU1401により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU1401において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU1401において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ1402に書きこむ。書きこまれたコードはCPU1401において実行される。平文となったモジュールを実行する際に、プログラムAは再暗号化プログラムをCPU1401にて実行する。再暗号化プログラムは、プログラムAのうち先に実行されたモジュールを再度暗号化し、不揮発性メモリないしは揮発性メモリに保持する。このようにして、本実施例のプログラム複合体は、実行後に記憶域に残っている平文のコードを再び暗号化できる。これにより、実行後のモジュールのコードを解析することが不可能となる。したがって、耐タンパ性の高いプログラム複合体の実行が可能となる。