(57)【特許請求の範囲】
【請求項１】
実行時には実行メモリ領域に展開されるモジュールの集合体からなるプログラム本体であって、
各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、
次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前であって次モジュールの実行直前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、
次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを実行メモリ領域から削除する処理を計算機に実行させるための削除プログラムと、からなり、
前記復号化は、次モジュールの暗号化されている記憶域におけるアドレス情報を実行中のモジュールから受け取って行われるプログラム複合体。
【請求項２】
実行時には実行メモリ領域に展開されるモジュールの集合体からなるプログラム本体であって、
各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、
次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前であって次モジュールの実行直前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、
次モジュールの実行開始後に呼出元モジュールを実行メモリ領域にて再暗号化する処理を計算機に実行させるための再暗号化プログラムと、からなり、
前記復号化は、次モジュールの暗号化されている記憶域におけるアドレス情報を実行中のモジュールから受け取って行われるプログラム複合体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウエアの耐タンパ性を向上させる技術に関する。
【背景技術】
【０００２】
ソフトウエアのうち、例えば認証アルゴリズムを含むもののように、その中身を知られたくないものが存在する。にもかかわらず、ソースコードはもとより、実行形式のソフトウエアにおいても、逆アセンブルやデバッギングにより、ソフトウエアのアルゴリズム等の内容が明るみにされるという脅威が存在する。特許文献１には以下のような技術が開示されている。該技術では、ソースコードにおける条件分岐命令を複雑化することにより分岐条件の解析を困難とする。これにより、コードの難読性を高め、上記のような脅威を回避することを目指している。つまり、逆アセンブル等が可能であっても、それによって解析され生じたソースコード自体の難読性により、解析の手間が生じる。このようにして、ソフトウエアの耐タンパ性の向上を図ることができる。
【特許文献１】特開２０１１−２８５０６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、ソースコード自体の難読性を上げても、そこから生じる実行形式のコード自体が平文であるため、時間をかければ必ず解析が可能である点が問題となる。そこで、実行形式のコードを暗号化し実行時に復号化するという方法が考えられる。これにより、記憶域に保存された状態の実行形式のファイルについては、暗号化されているため、解析がほぼ不可能である。しかしながら、暗号化するだけでは実行時には何らかの形で復号化する必要があり、復号化し実行中のコードについてはデバッガ等による解析が可能である点が問題となる。例えば、実行時に全てのコードを復号化してから実行する方法であると、実行前においては暗号化されているため、解析はほぼ不可能であるが、実行時にプログラム全てを復号化する方式であると、メモリ上において復号化されたプログラムがロードされた状態のイメージを解析することにより、その内容を把握することが可能である。そうすると、暗号化されたモジュールを容易に解析できないような、プログラムの実行方式の実現という課題が生じる。
【課題を解決するための手段】
【０００４】
以上の課題を解決するために、第一に本発明は以下のようなプログラム複合体を提供する。該プログラム複合体は複数のモジュールから構成されている。実行前においては、少なくとも一つのモジュールは暗号化データで保持され、実行時においては暗号化されたモジュールの前に実行されるモジュールが復号化の処理を行い、復号化されたモジュールが実行されるといったプログラム複合体である。
【０００５】
具体的には、モジュールの集合体からなるプログラム本体であって、各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、からなるプログラム複合体である。
【０００６】
第二は、上記第一のプログラム複合体を基本として、次に実行されるモジュールを呼び出した後、そのモジュールを記憶域から削除する処理を行うプログラム複合体である。
【０００７】
具体的には、次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための削除プログラムをさらに有する請求項１に記載のプログラム複合体である。
【０００８】
第三は、上記第一のプログラム複合体を基本として、次に実行されるモジュールを呼び出した後、そのモジュールを再度暗号化する処理を行うプログラム複合体である。
【０００９】
具体的には、次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための再暗号化プログラムをさらに有する請求項１に記載のプログラム複合体。
【発明の効果】
【００１０】
以上のような構成をとる第一の本発明によって、実行前には暗号化データでモジュールを保持し、実行時に暗号化されたモジュールを直前に復号化して実行することが可能である。そうすると、実行直前まで、秘匿したいモジュールを暗号化の状態とすることが可能である。このため、デバッガ等でプログラムを解析する場合においても、一度に全てのモジュールが可読で有る場合に比べて、解析に手間がかかることとなる。これにより、プログラムの耐タンパ性が向上することとなる。
【００１１】
また、第二の本発明によって、秘匿したいモジュールを実行した後に速やかに記憶媒体より削除することが可能となる。これにより、実行後に記憶域に残存している平文のモジュールを消去し、その内容を解析することを不可能とすることができる。これにより、実行時のみ平文のモジュールが記憶域に存在する動作が可能となり、プログラムの耐タンパ性が向上することとなる。
【００１２】
また、第三の本発明によって、秘匿したいモジュールを実行した後に速やかに再暗号化することが可能となる。これにより、実行後に記憶域に残存している平文のモジュールを暗号化し、その内容を解析することを不可能とすることができる。これにより、実行時のみ平文のモジュールが記憶域に存在する動作が可能となり、プログラムの耐タンパ性が向上することとなる。
【発明を実施するための最良の形態】
【００１３】
以下に、図を用いて本発明の実施の形態を説明する。なお、本発明はこれら実施の形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施しうる。なお、実施例１は、主に請求項１、２に共通の部分について説明する。また、実施例２は、主に請求項１について説明する。また、実施例３は、主に請求項２について説明する。
【００１４】
≪実施例１≫
<概要>
図１は、本実施例のプログラム複合体の動作の一例を説明するための概念図である。この図にあるように、プログラムＡとしたプログラム複合体は記憶域のアドレスＸからアドレスＹの間にモジュールＰ個が存在している。モジュール２からモジュールＰは暗号化されている。プログラムは、モジュール１から順にモジュールＰまで実行されることとする。モジュール１はモジュール２を呼び出し、モジュール２はモジュール３を呼び出すという階層的な実行方式をとる。
【００１５】
ここで、保護すべきモジュールはモジュールＰであるとする。実行前の状態では、解析者はモジュールＰがアドレスＹの位置に存在することは知ることはない。実際にモジュールＰ−１まで実行し、解析した後でないと、モジュールＰを解析することができない。一方、実行時にすべてのモジュールを先に復号化する暗号化方式であると、復号化した後にはプログラム全体の流れを見渡すことが可能となるので、モジュールＰが保護すべきモジュールであることが早期に特定でき、モジュールＰを解析することが可能である。
【００１６】
図２は図１の内容をさらに概略化したものであり、プログラムＡの動作を説明するための図である。この図にあるように、初期状態（０２０１）ではモジュール１の他は暗号化されている。実行が開始されると、モジュール１が実行され、モジュール１の完了前に、モジュール１がモジュール２を復号化し、順次、次のモジュールを復号化しながら実行していく。そして、保護すべきＰ番目のモジュールを復号化しながら実行し、終了する（０２０２）。
【００１７】
このように、本実施例のプログラム複合体は、プログラムの実行時において、モジュールが実行され終了する直前に次に実行すべきモジュールを復号化する動作が可能である。これにより、実行時になって初めてモジュールのコードが可読となるため、図２において保護すべきＰ番目のモジュールを解析しようとした場合には、直接Ｐ番目のモジュールを解析することは出来ず、順番に実行して解析する必要がある。このため、デバッガなどでプログラムを解析する場合、一度に全ての関数が可読である場合に比べ、大幅に解析に時間がかかることとなる。さらに、暗号化により保護対象関数Ｐまでの流れが隠蔽されているので、解析者がプログラムの全体像を十分につかめない。
【００１８】
<機能的構成>
図３は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」（０３００）は、「プログラム本体」（０３０１）と、「モジュールの集合体」（０３０２）と、「復号化プログラム」（０３０３）と、を有する。
【００１９】
「プログラム本体」（０３０１）は、モジュールの集合体より構成される。モジュールは複数存在し、少なくとも１つの、保護すべきモジュールからなる。保護すべきモジュールは暗号化されている。
【００２０】
「モジュールの集合体」（０３０２）は複数のモジュールからなる。ここでモジュールとは、関数や、サブルーチン、メソッドなどを含む。モジュールは次に実行すべき次モジュールが暗号化されている場合には、復号化プログラム（０３０３）を呼び出し、当該モジュール終了前のタイミングにおいて次モジュールを復号化し、次モジュールを実行する。図３では、モジュール２の次モジュールが保護すべきモジュールとなっている。したがって、モジュール２は、モジュール２の終了前のタイミングにおいて復号化プログラム（０３０３）を呼び出し、モジュール３を復号化し、実行させる。
【００２１】
ここで、モジュールの「実行」とは、モジュールをメモリ等の記憶域にロードして、演算装置にデータを送り込み、その結果を受け取ることで、システムの内部状態に変化を加えることである。「演算装置」は、ＣＰＵやＭＰＵ、ＧＰＵなどの演算可能な装置を指す。これら「演算装置」を内部に組み込み、演算の結果を記憶域において保持可能な装置を「計算機」とする。
【００２２】
暗号化されているモジュールは必ずしも、保護すべきモジュールに限らない。解析者を欺くために、保護すべきモジュール以外のモジュールをも暗号化することによって、保護すべき関数に至るまでの道筋を隠蔽することができる。これにより、解析にかかる手間が増大し、耐タンパ性の向上を見込むことができる。
【００２３】
図４は「モジュールの終了前のタイミング」を説明するための図である。図の横軸は時間軸であり、モジュールが実行されるタイミングを示す。モジュール１は平文のモジュールであり、終了前に暗号化モジュールであるモジュール２を復号化するために復号化プログラムを呼び出すと共にモジュール２を実行させる。モジュール２は終了前にモジュール３を実行する。モジュール４はモジュール３の終了前のタイミングにて実行が開始され、同時にモジュール２の終了前のタイミングにて実行が開始されている。この場合はモジュール２が復号化プログラムを呼びだしてモジュール４を復号化し、実行してもよいし、モジュール３が復号化プログラムを呼び出し、終了前にモジュール４を復号化し、実行してもよい。モジュール５はモジュール４の終了後に実行されているから、モジュール２の終了前のタイミングでモジュール２が復号化プログラムを呼び出すことによって復号化され実行される。
【００２４】
このように、「次に実行されるモジュールである次モジュール」とは、モジュール２とモジュール４との関係や、モジュール２とモジュール５との関係のように、必ずしも次に実行されるモジュールだけに限られない。上記のとおり、モジュール内の適切な位置に復号化プログラムの呼び出しと、次モジュールの実行命令を組み込むことで、要求されたタイミングでモジュールが実行され、適切なプログラムの動作が得られる。
【００２５】
「復号化プログラム」（０３０３）は、次モジュールの復号化を行う。具体的には、実行中のモジュールより次モジュールの記憶域におけるアドレス情報を受け取り、その情報を元に、復号化を行う。復号化プログラムは図２のように、別個独立として存在し、モジュールから呼び出されるものでもよいし、各モジュールに直接埋め込まれたものでもよい。また、復号化プログラムを複数存在させ、複数の種類の暗号化方式に対応させるものでもよい。この場合、実行中のモジュールには次モジュールに適合する暗号化方式の復号化プログラムの実行命令を含ませることができる。
【００２６】
<処理の流れ>
図５は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う（ステップＳ０５０１）。暗号化されている場合には、復号化するための処理を実行する（ステップＳ０５０２）。暗号化されていない場合には、ステップＳ０５０２はスキップする。その後次モジュールを実行し（ステップＳ０５０３）、プログラムの終了か否かの判断を行い（ステップＳ０５０４）、終了で無ければ、ステップＳ０５０１に戻る。終了であれば、プログラムを終了させる。
【００２７】
<ハードウエア的構成>
図６は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「ＣＰＵ（中央演算装置）」（０６０１）と、「揮発性メモリ」（０６０２）と、「不揮発性メモリ」（０６０３）とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力Ｉ／Ｆ」（０６０４）を有する。そしてそれらが「システムバス」（０６０５）などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
【００２８】
また、「揮発性メモリ」（０６０１）は、各種処理を行うプログラムを「ＣＰＵ」（０６０１）に実行させるために「不揮発性メモリ」（０６０２）から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。
【００２９】
ここで、入出力Ｉ／Ｆ（０６０４）からのコマンドにより、プログラムＡが起動される。そうすると、プログラムＡが不揮発性メモリ（０６０３）より揮発性メモリ（０６０２）にロードされる。プログラムＡはＣＰＵ（０６０１）により処理が実行される。プログラムＡはＮ個のモジュールと復号化プログラムからなる。モジュールは順にＣＰＵ（０６０１）において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをＣＰＵ（０６０１）において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ（０６０２）に書きこむ。書きこまれたコードはＣＰＵ（０６０１）において実行される。
【００３０】
<効果の簡単な説明>
以上のように本実施例のプログラム複合体によって、暗号化された次に実行されるべきモジュールを呼び出し元のモジュールによって復号化し、実行することができる。これにより、モジュールは階層的に実行されることとなり、実行直前まで保護すべきモジュールを暗号化したままとすることが可能である。これにより、一度に全てのモジュールを復号化する場合よりも、解析に手間がかかることとなるため、プログラムの耐タンパ性が向上する。
【００３１】
≪実施例２≫
<概要>
図７は、本実施例のプログラム複合体の適用例について説明するための概念図である。この図にあるように、プログラムの実行開始時（０８０１）においては、モジュール１以外のモジュールが暗号化されている。復号化プログラムによりモジュール１の実行終了前に、次に実行すべきモジュール２を復号化する。そして、モジュール１の終了後においては、モジュール１を記憶域から削除する（０８０２）。
【００３２】
このように本実施例のプログラム複合体は、次に実行すべきモジュールが開始されると、次モジュールを呼び出したモジュールを記憶域から削除することが可能な切換装置である。これにより、プログラム実行終了時において記憶域に残存しているモジュールのコードを解析することが不可能となり、プログラムの耐タンパ性が向上する。
【００３３】
<機能的構成>
図８は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」（０８００）は、「プログラム本体」（０８０１）と、「モジュールの集合体」（０８０２）と、「復号化プログラム」（０８０３）と、を有する。なお、これら構成要件については上記実施例にて既に記載済みであるのでその説明は省略する。本実施例のプログラム複合体の特徴点は、「プログラム複合体」（０８００）が「削除プログラム」（０８０４）を新たに有する点である。
【００３４】
「削除プログラム」（０８０４）は、次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための処理を行う。図７において説明すると、モジュール２の動作が完了したのを、モジュール２あるいはモジュール３で検知し、モジュール２またはモジュール３からモジュール２の記憶域のアドレスを取得する。取得したアドレスに基づいて、削除プログラムはモジュール２の削除を実行する。
<処理の流れ>
図９は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う（ステップＳ０９０１）。暗号化されている場合には、復号化するための処理を実行する（ステップＳ０９０２）。暗号化されていない場合には、ステップＳ０９０２はスキップする。その後次モジュールを実行開始（ステップＳ０９０３）する。次いで、次モジュールは呼出元モジュールの削除を行う（ステップＳ０９０４）。その後、プログラムの終了か否かの判断を行い（ステップＳ０９０５）、終了で無ければ、ステップＳ０９０１に戻る。終了であれば、プログラムを終了させる。
【００３５】
<ハードウエア構成>
図１０は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「ＣＰＵ（中央演算装置）」（１００１）と、「揮発性メモリ」（１００２）と、「不揮発性メモリ」（１００３）とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力Ｉ／Ｆ」（１００４）を有する。そしてそれらが「システムバス」（１００５）などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
【００３６】
また、「揮発性メモリ」（１００２）は、各種処理を行うプログラムを「ＣＰＵ」（１００１）に実行させるために「不揮発性メモリ」（１００３）から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。
【００３７】
ここで、入出力Ｉ／Ｆ（１００４）からのコマンドにより、プログラムＡが起動される。そうすると、プログラムＡが不揮発性メモリ（１００３）より揮発性メモリ（１００２）にロードされる。プログラムＡはＣＰＵ（１００１）により処理が実行される。プログラムＡはＮ個のモジュールと復号化プログラムからなる。モジュールは順にＣＰＵ（１００１）において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをＣＰＵ（１００１）において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ（１００２）に書きこむ。書きこまれたコードはＣＰＵ（１００１）において実行される。
【００３８】
平文となったモジュールを実行する際に、プログラムＡは削除プログラムをＣＰＵ（１００１）にて実行する。削除プログラムは、プログラムＡのうち先に実行されたモジュールを揮発性メモリ（１００２）から削除する。
【００３９】
<効果の簡単な説明>
このようにして、実行後のモジュールを削除していくことによって、実行後に記憶域に残っている平文のコードを除くことができる。これにより、実行後のモジュールのコードを解析することが不可能となる。したがって、耐タンパ性の高いプログラム複合体の実行が可能となる。
【００４０】
≪実施例３≫
<概要>
図１１は、本実施例のプログラム複合体の適用例について説明するための概念図である。この図にあるように、プログラムの実行開始時（１１０１）においては、モジュール１以外のモジュールが暗号化されている。復号化プログラムによりモジュール１の実行終了前に、次に実行すべきモジュール２を復号化する。そして、モジュール１の終了後においては、モジュール１を再度暗号化する（１１０２）。
【００４１】
このように本実施例のプログラム複合体は、次モジュールの実行時にそのモジュールを呼出した呼出元のモジュールを再度暗号化する処理が可能である。これにより、モジュールあるいはプログラム本体の実行後において、記憶域に残存しているモジュールのコードを解析されることが不可能となる。したがって、プログラム複合体の耐タンパ性が向上する。
【００４２】
<機能的構成>
図１２は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」（１２００）は、「プログラム本体」（１２０１）と、「モジュールの集合体」（１２０２）と、「復号化プログラム」（１２０３）と、を有する。なお、これら構成要件については上記実施例にて既に記載済みであるのでその説明は省略する。本実施例のプログラム複合体の特徴点は、「プログラム複合体」（１２００）が「再暗号化プログラム」（１２０４）を新たに有する点である。
【００４３】
「再暗号化プログラム」（１２０４）は、次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための処理を行う。具体的には、次モジュールの実行開始後において、呼出元モジュール（モジュール２）のアドレス情報を再暗号化プログラムは呼出元モジュールあるいは実行中モジュール（モジュール３）から取得する。実行中モジュールは再暗号化プログラムを実行し、呼出元モジュールを暗号化する。
【００４４】
<処理の流れ>
図１３は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う（ステップＳ１３０１）。暗号化されている場合には、復号化するための処理を実行する（ステップＳ１３０２）。暗号化されていない場合には、ステップＳ１３０２はスキップする。その後次モジュールを実行開始（ステップＳ１３０３）する。次いで、次モジュールは呼出元モジュールの再暗号化を行う（ステップＳ１３０４）。その後、プログラムの終了か否かの判断を行い（ステップＳ１３０５）、終了で無ければ、ステップＳ１３０１に戻る。終了であれば、プログラムを終了させる。
【００４５】
<ハードウエア構成>
図１４は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「ＣＰＵ（中央演算装置）」（１４０１）と、「揮発性メモリ」（１４０２）と、「不揮発性メモリ」（１４０３）とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力Ｉ／Ｆ」（１４０４）を有する。そしてそれらが「システムバス」（１４０５）などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
【００４６】
また、「揮発性メモリ」（１４０２）は、各種処理を行うプログラムを「ＣＰＵ」（１４０１）に実行させるために「不揮発性メモリ」（１４０３）から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。
【００４７】
ここで、入出力Ｉ／Ｆ（１４０４）からのコマンドにより、プログラムＡが起動される。そうすると、プログラムＡが不揮発性メモリ（１４０３）より揮発性メモリ（１４０２）にロードされる。プログラムＡはＣＰＵ（１４０１）により処理が実行される。プログラムＡはＮ個のモジュールと復号化プログラムからなる。モジュールは順にＣＰＵ（１４０１）において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをＣＰＵ（１４０１）において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ（１４０２）に書きこむ。書きこまれたコードはＣＰＵ（１４０１）において実行される。
【００４８】
平文となったモジュールを実行する際に、プログラムＡは再暗号化プログラムをＣＰＵ（１４０１）にて実行する。再暗号化プログラムは、プログラムＡのうち先に実行されたモジュールを再度暗号化し、不揮発性メモリないしは揮発性メモリに保持する。
【００４９】
<効果の簡単な説明>
このようにして、本実施例のプログラム複合体は、実行後に記憶域に残っている平文のコードを再び暗号化できる。これにより、実行後のモジュールのコードを解析することが不可能となる。したがって、耐タンパ性の高いプログラム複合体の実行が可能となる。
【図面の簡単な説明】
【００５０】
【図１】実施例１のプログラム複合体による処理の概要を説明するための図
【図２】実施例１のプログラム複合体による処理の一例を説明するための図
【図３】実施例１のプログラム複合体の機能ブロックの一例を表す図
【図４】実施例１のプログラム複合体の処理の一例を説明するためのタイミングチャート
【図５】実施例１のプログラム複合体における処理の流れの一例を表すフローチャート
【図６】実施例１のプログラム複合体におけるハードウエア構成の一例を表す概略図
【図７】実施例２のプログラム複合体による処理の一例を説明するための図
【図８】実施例２のプログラム複合体の機能ブロックの一例を表す図
【図９】実施例２のプログラム複合体における処理の流れの一例を表すフローチャート
【図１０】実施例２のプログラム複合体におけるハードウエア構成の一例を表す概略図
【図１１】実施例３のプログラム複合体による処理の一例を説明するための図
【図１２】実施例３のプログラム複合体の機能ブロックの一例を表す図
【図１３】実施例３のプログラム複合体における処理の流れの一例を表すフローチャート
【図１４】実施例３のプログラム複合体におけるハードウエア構成の一例を表す概略図
【符号の説明】
【００５１】
０３００  プログラム複合体
０３０１  プログラム本体
０３０２  モジュールの集合体
０３０３  復号化プログラム
【図１】
0005988473.tif 000002
【図２】
0005988473.tif 000003
【図３】
0005988473.tif 000004
【図４】
0005988473.tif 000005
【図５】
0005988473.tif 000006
【図６】
0005988473.tif 000007
【図７】
0005988473.tif 000008
【図８】
0005988473.tif 000009
【図９】
0005988473.tif 000010
【図１０】
0005988473.tif 000011
【図１１】
0005988473.tif 000012
【図１２】
0005988473.tif 000013
【図１３】
0005988473.tif 000014
【図１４】
0005988473.tif 000015