ソフトウェアプログラムを実行する端末装置における改ざんを検出する改ざん検出装置であって、前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、改ざん検出部を備えている、ことを特徴とする改ざん検出装置。前記改ざん検出部が、前記分岐処理または前記復帰処理が行われた場合に、前記端末装置のプロセッサの動作を示す前記状態信号の出力と、環境変数の設定による前記メモリの異常検出機能を起動させたときの出力とが、設定条件を満たすかどうかを判定し、判定の結果、設定条件を満たす場合に、前記スタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定する、請求項1に記載の改ざん検出装置。前記ソフトウェアプログラムを利用することが、前記端末装置に対して許可されているかどうかを判定し、許可されていない場合に、前記端末装置による前記ソフトウェアプログラムの利用を不正利用として検出する、不正利用検出部を、更に備えている、請求項1または2に記載の改ざん検出装置。前記端末装置が、前記ソフトウェアプログラムにアクセス可能な利用者と、前記ソフトウェアプログラムを実行可能な端末装置と、前記ソフトウェアプログラムが前記端末装置にインストールされた日時とを、互いに対応付けて管理するためのアクセス管理情報を記憶しており、前記不正利用検出部が、前記アクセス管理情報に基づいて、許可されているかどうかを判定する、請求項3に記載の改ざん検出装置。前記不正利用検出部が、前記不正利用を検出した場合に、前記端末装置に対して、不正利用の検出を通知する、請求項3または4に記載の改ざん検出装置。改ざん検出装置を有する端末装置と、監視装置とを備え、前記改ざん検出装置は、前記端末装置で実行されるソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出し、更に、検出した前記改ざんを特定する改ざん情報を前記監視装置に送信し、前記監視装置は、前記改ざん検出装置から送信されてきた前記改ざん情報を用いて、前記端末装置を監視する、ことを特徴とする監視システム。ソフトウェアプログラムを実行する端末装置における改ざんを検出するための方法であって、a前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、ステップを有している、ことを特徴とする改ざん検出方法。コンピュータがソフトウェアプログラムを実行している場合における改ざんの検出を、前記コンピュータによって行うためのプログラムであって、前記コンピュータに、a前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記コンピュータのメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、ステップを実行させる、プログラム。しかしながら、特許文献2に開示された監視装置を用いる場合は、不正使用の監視対象となるソフトウェアプログラムに対して、事前にチェッカコードを挿入することが必要になる。特許文献2に開示された監視装置には、不正使用の監視対象が限定されるという問題点がある。本発明の目的の一例は、上記問題を解消し、監視対象となるソフトウェアプログラムを加工することなく、当該ソフトウェアプログラムにおける改ざんを確実に検出し得る、改ざん検出装置、監視システム、改ざん検出方法、およびプログラムを提供することにある。上記目的を達成するため、本発明の一側面における改ざん検出装置は、ソフトウェアプログラムを実行する端末装置における改ざんを検出する改ざん検出装置であって、前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、改ざん検出部を備えている、ことを特徴とする。上記目的を達成するため、本発明の一側面における監視システムは、改ざん検出装置を有する端末装置と、監視装置とを備え、前記改ざん検出装置は、前記端末装置で実行されるソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出し、更に、検出した前記改ざんを特定する改ざん情報を前記監視装置に送信し、前記監視装置は、前記改ざん検出装置から送信されてきた前記改ざん情報を用いて、前記端末装置を監視する、ことを特徴とする。また、上記目的を達成するため、本発明の一側面における改ざん検出方法は、ソフトウェアプログラムを実行する端末装置における改ざんを検出するための方法であって、a前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、ステップを有している、ことを特徴とする。更に、上記目的を達成するため、本発明の一側面におけるプログラムは、コンピュータがソフトウェアプログラムを実行している場合における改ざんの検出を、前記コンピュータによって行うためのプログラムであって、前記コンピュータに、a前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記コンピュータのメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、ステップを実行させる、ことを特徴とする。以上のように、本発明によれば、監視対象となるソフトウェアプログラムを加工することなく、当該ソフトウェアプログラムにおける改ざんを確実に検出することができる。実施の形態以下、本発明の実施の形態における、改ざん検出装置、監視システム、改ざん検出方法、およびプログラムについて、図1~図10を参照しながら説明する。システム構成最初に、図1を用いて、本発明の実施の形態における監視システムの全体構成を説明する。図1は、本発明の実施の形態における監視システムの全体構成を示す図である。図1に示すように、本実施の形態における監視システム300は、端末装置100と、これらを監視する監視装置200とを備えている。端末装置100と監視装置200とは、イントラネット、インターネットといったネットワーク80を介して接続されている。また、図1に示すように、端末装置100は、その内部において、改ざん検出装置20を備えている。改ざん検出装置20は、ソフトウェアプログラムを実行する際の端末100での改ざんを検出し、検出した改ざんを特定する改ざん情報を監視装置200に送信する。なお、図1の例では、単一の端末装置100のみが図示されているが、実際には、複数個の端末装置100が監視装置200に接続されていても良い。本実施の形態において、端末装置100の数は特に限定されるものではない。更に、図1に示すように、監視装置200は、監視部70と、格納部71とを備えている。このうち、監視部70は、端末装置100から送信されてきた改ざん情報61を用いて、端末装置100を監視する。格納部71は、送信されてきた改ざん情報61を、監視情報60として格納する。また、本実施の形態では、改ざん検出装置20は、更に、利用者管理情報41、装置識別情報42、およびアクセス管理情報45も、監視装置200に送信する。このため、格納部71は、これらの情報も監視情報60として格納する。更に、監視部70は、端末装置100の監視に、利用者管理情報41、装置識別情報42、およびアクセス管理情報45も利用する。なお、利用者管理情報41、装置識別情報42、およびアクセス管理情報45の内容については、後述する。また、監視装置200において、監視部70は、予め設定された時間間隔をおいて、監視対象となる端末装置100の監視を行うことができる。なお、不定期で監視が実行されていても良く、例えば、監視装置200の管理者が、監視装置200を起動させたタイミングで、監視部70が監視を行っていても良い。[端末装置の構成]ここで、本実施の形態において監視対象となる端末装置の構成について説明する。図2は、本発明の実施の形態における改ざん検出装置の構成を示すブロック図である。図2に示すように、本実施の形態における改ざん検出装置20は、端末装置100に備えられている。具体的には、改ざん検出装置20は、端末装置100のOS上で動作する改ざん検出プログラムによって構築される。なお、改ざん検出プログラムについては後述する。また、図2に示すように、端末装置100は、改ざん検出装置20以外に、記憶装置10と、CPUCentralProcessingUnit11とを備えている。このうち、記憶装置10は、主記憶装置であり、端末装置100が、ソフトウェアプログラムを実行する際に必要となる情報図2において図示せずを記憶している。更に、記憶装置10は、端末装置100で実行するソフトウェアプログラムでの改ざん検出、および当該ソフトウェアプログラムの不正利用の判定を行うために必要な情報として、記憶領域管理情報30、環境情報40、状態情報50も記憶している。また、ソフトウェアプログラムは、CPU11によって、ハードディスクドライブ等の二次記憶装置から読み出され、記憶装置10に書き込まれてから、実行される。よって、端末装置100が実行するソフトウェアプログラムが、その実行時に改ざんされているかどうかは、記憶装置10の記憶領域において判断される。記憶装置10は、改ざん検出の対象となる装置である。図2に示すように、改ざん検出装置20は、主に、改ざん検出部25を備えている。改ざん検出部25は、ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、端末装置100の記憶装置10のスタック領域に格納されているアドレスが、記憶装置10の動的領域及び静的領域のいずれのアドレスであるかを判定する。そして、改ざん検出部25は、判定結果に基づいて、記憶領域に格納されているデータに対する改ざんを検出する。このように、本実施の形態では、ソフトウェアプログラムの実行時に利用される記憶領域を調べることによって、改ざんの検出が行われている。よって、本実施の形態によれば、監視対象となるソフトウェアプログラムに、チェッカコード、関数などを埋め込むといった加工を行う必要がなく、このような加工を行わなくても、ソフトウェアプログラムにおける改ざんが確実に検出される。ここで、記憶装置10に格納されている情報と、改ざん検出装置20の構成および機能について図3~図6を用いて更に具体的に説明する。[記憶領域管理情報]記憶領域管理情報30は、記憶装置10の記憶領域を管理するために設定された開始アドレス及び終了アドレスを含む情報である。また、記憶領域は、静的に確保されているメモリ領域静的領域、即ち、プログラム領域、共有ライブラリとして活用される領域、または共有メモリとして活用される領域を含み、開始アドレス及び終了アドレスは、これら静的領域に設定されている。具体的には、図2に示すように、記憶領域管理情報30は、Staticareapointer31と、共有ライブラリpointer32とを含む。ここで、図3および図4を用いて、記憶装置10の記憶領域について具体的に説明する。図3は、本実施の形態で用いられる端末装置の記憶装置におけるメモリマップの一例を示す図である。図4は、本実施の形態で用いられる端末装置の記憶装置におけるメモリマップの他の例を示す図である。具体的には、図3は、端末装置100が32ビットマシンである場合のメモリマップを示し、図4は、端末装置100が64ビットマシンである場合のメモリマップを示している。オペレーティングシステムの違いによってメモリマップは変わるが、一般的な仕様においては、動的に確保されるメモリ領域動的領域は高位の位置にアロケーションされる。一方、上述したように、プログラム領域、共通して使用される領域は、ソフトウェアプログラムの実行前にアロケーションされ、且つ、終了まで位置が変わらない、静的領域として確保される。そして、図3および図4に示すように、記憶領域管理情報30、即ち、Staticareapointer31と共有ライブラリpointer32とは、メモリ領域における静的領域の開始アドレスと終了アドレスとを規定している。[環境情報]環境情報40は、利用者を特定するために必要となる利用者管理情報41、装置識別情報42、使用する製品のライセンス契約に関する契約情報43、製品情報44、及びアクセス管理情報45を含む。図5および図6を用いて、これらについて説明する。図5は、本実施の形態において、環境情報として利用される、利用者管理情報、装置識別情報、契約情報、および製品情報の一例を示す図であり、これらの互いの関連性についても示している。図6は、本実施の形態において、環境情報として利用される、利用者管理情報およびアクセス管理情報の一例を示す図であり、両者の関連性についても示している。環境情報:利用者管理情報図5に示すように、利用者管理情報41は、端末装置100の使用が許可される利用者を管理するための情報であり、不正な利用者の排除に活用される。そして、利用者管理情報41は、当該利用者が利用できる端末装置に関する情報として端末装置のコンピュータIDを登録しており、コンピュータIDによって、装置識別情報42と対応付けられている。これにより、利用者は複数の装置を使用することができる。また、同様に、利用者管理情報41は、当該利用者が使用できるソフトウェアプログラムに関する情報としてプロダクトIDも登録している。環境情報:装置識別情報図5に示すように、装置識別情報42は、端末装置100を一意に識別するための情報である。端末装置100は、装置識別情報が含むコンピュータIDによって管理されている。また、装置識別情報42は、コンピュータIDに加え、管理部門、使用者、コンピュータ資源情報、ハードウェア情報、契約情報契約なども含んでいる。装置識別情報42は、コンピュータIDと契約IDとによって、端末装置100に使用できるソフトウェアプログラムを特定する契約情報43に対応付けられている。環境情報:契約情報図5に示すように、契約情報43は、インストールされている各ソフトウェアプログラムの、ライセンス契約に関する情報である。契約情報43は、ライセンス契約により使用が認められている装置、すなわちソフトウェアプログラムをインストールできる装置のIDコンピュータIDによって、装置識別情報42に対応付けられている。また、契約情報43は、ライセンス契約されているソフトウェアプログラム製品のプロダクトIDおよびライセンスコードによって、後述する製品情報44にも対応づけられている。環境情報:製品情報図5に示すように、製品情報44は、ライセンス契約されているソフトウェアプログラム製品を特定する情報であり、ライセンス契約されている製品に関する情報、例えば、製品の世代情報バージョン、保守情報などを含む。製品情報44は、プロダクトIDとライセンスコードとによって、契約情報43に対応付けられている。また、保守情報は、プログラムの不具合を改善する修正プログラムのIDパッチ情報IDを含んでいる。よって、端末装置100の管理者は、当該ソフトウェアプログラムについて、セキュリテイホールなどの問題が生じた場合は、保守情報に基づいて適切な修正プログラムを適用する。環境情報:アクセス管理情報図6に示すように、アクセス管理情報45は、ソフトウェアプログラムにアクセス可能な利用者利用者IDと、ソフトウェアプログラムを実行可能な端末装置コンピュータIDと、ソフトウェアプログラムまたはコンテンツが端末装置にインストールされた日時とを、互いに対応付けて管理するための情報である。また、アクセス管理情報45には、利用者ID、コンピュータIDに加え、端末装置100にインストールされたソフトウェアプログラムの履歴情報が、インストール情報として含まれている。インストール情報は、契約ID、プロダクトID、タイムスタンプ、インストールコードによって構成されている。アクセス管理情報45によれば、利用者が使用する端末装置100と、その端末装置100で使用するソフトウェアプログラムと、の利用環境が、アクセスの頻度またはアクセスの範囲として管理されることによる。そして、この結果、利用者が使用できるソフトウェアプログラムの世代管理も含めた適切なアクセス管理が可能となる。[状態情報]状態情報50は、クライアント端末100のソフトウェアプログラムが、その実行に割り当てられた記憶領域スタックまたはヒープと呼ばれるを参照して、分岐処理または復帰処理を実行した際の、改ざんの検出に用いられる情報である。具体的には、状態情報50は、CPUの動作状態を示す状態信号51と、メモリ関数の動作を制御する環境変数52とを含む。[改ざん検出装置の詳細構造]続いて、改ざん検出装置20の構成について、具体的に説明する。図2に示すように、改ざん検出装置20は、改ざん検出部25に加えて、利用者管理部21と、端末装置管理部22と、タスク管理部23と、不正利用検出部24と、利用アクセス暗号化部26とを更に備えている。利用者管理部21は、端末装置100の利用者が、自身を特定するために必要な管理情報として、利用者管理情報41を登録すると、監視装置200に、当該利用者管理情報を送出する。端末装置管理部22は、端末装置100の利用者が、自身が使用する端末装置100を特定するために必要な管理情報として、装置識別情報42を登録すると、監視装置200に、当該装置識別情報42を送出する。タスク管理部23は、端末装置の稼働状況稼動プロセスを管理する。タスク管理部23は、改ざん検出部25が改ざんを検出すると、その時点において実行しているタスクプロセスを実行時間と共に記録する。タスク管理部23が、記録を監視装置200に送出すると、この記録は、監視装置200における改ざんの分析において、処理中のタスクの確認と、改ざんしたタスクの表出とに利用される。不正利用検出部24は、利用者が端末装置100を用いてソフトウェアプログラムを利用する場合に、利用者管理情報41及び装置識別情報42を、アクセス管理情報45に照らし合わせて、そのことが許可されているかどうかを判定する。そして、不正利用検出部24は、判定結果、許可されていない場合は、端末装置100によるソフトウェアプログラムの利用を不正利用として検出する。また、不正利用検出部24は、検出結果を監視装置200に送出する。送出された検出結果は、監視装置200の監視部70によって参照される。改ざん検出部25は、上述したように、ソフトウェアプログラムに、その実行時に割り当てられた記憶領域のデータアドレス情報に対して改ざんが行われている場合に、それを検出する。本実施の形態では、改ざん検出部25は、ソフトウェアプログラムが、分岐処理または復帰処理を実行すると、先ず、端末装置100のCPUプロセッサ11の動作を示す状態信号の出力と、環境変数の設定によって記憶装置10の異常検出機能を起動させたときの出力とを取得する。環境変数の設定は、具体的には、環境変数MALLOCCHECKに所定の値を設定することによって行われる。そして、改ざん検出部25は、状態信号の出力からスタック操作命令メモリの動的領域確保malloc、解放freeが実行されていると判断できる場合、および異常検出機能の起動により診断メッセージが出力されている場合のいずれかに該当するかどうかを判定する。続いて、改ざん検出部25は、いずれかに該当すると判定する場合に、スタック領域またはヒープ領域に格納されているアドレスが、記憶装置10の動的領域及び静的領域のいずれのアドレスであるかを判定する。そして、判定の結果、動的領域である場合は、改ざん検出部25は、改ざんが行われていると判断し、このことを改ざんとして検出する。また、改ざん検出部25は、検出結果を記憶し、更に、検出結果を特定する改ざん情報を、監視装置200に送出する。利用アクセス暗号化部26は、端末装置100で利用するソフトウェアプログラムおよびコンテンツがインストールされると、インストール時定数として取得したタイムスタンプを用いて、アクセス管理情報45を生成する。利用アクセス暗号化部26は、生成したアクセス管理情報45を監視装置200に送出する。[装置動作]次に、本発明の実施の形態における改ざん検出装置20の動作について図7~図9を用いて説明する。図7は、ソフトウェアプログラムによる分岐処理または復帰処理によって改ざんが行われていない場合を説明する図である。図8は、ソフトウェアプログラムによる分岐処理または復帰処理によって改ざんが行われている場合を説明する図である。図9は、本発明の実施の形態における改ざん検出装置の動作を示すフロー図である。なお、以下の説明においては、適宜図1~図6を参酌する。また、本実施の形態では、改ざん検出装置20を動作させることによって、改ざん検出方法が実施される。よって、本実施の形態における改ざん検出方法の説明は、以下の改ざん検出装置20の動作説明に代える。まず、図7を用いて、改ざんが行われていない正常な状態のメモリマップを示す。図7に示すように、分岐処理または復帰処理では、スタック領域またはヒープ領域が使用される。改ざんがない正常な処理では、スタック領域に設定された分岐先アドレスは、分岐先のプログラムにおける正しいアドレスを保持している。続いて、図8を用いて、改ざんが行われている状態のメモリマップを示す。図8に示すように、正常な分岐処理での流れと異なり、スタック領域に設定された分岐先アドレスが第三者により改ざんされているため、スタック領域に設定された分岐先アドレスは、不正なアドレス、即ち、動的領域にあるアドレスを保持している。続いて、図9を用いて、改ざん検出装置20の動作の流れを説明する。図9に示すように、まず、改ざん検出部25は、端末装置100のCPUプロセッサ11の動作を示す状態信号の出力を取得し、ソフトウェアプログラムが分岐処理または復帰処理を実行しているかどうかを判定するステップA1。具体的には、改ざん検出部25は、記憶装置10から状態情報50を取得し、状態情報50に基づいて判定を行う。ステップA1の判定の結果、ソフトウェアプログラムが分岐処理または復帰処理を実行していない場合は、改ざん検出部25は、待機状態となる。一方、ステップA1の判定の結果、ソフトウェアプログラムが分岐処理または復帰処理を実行している場合は、改ざん検出部25は、ステップA2を実行する。ステップA2では、改ざん検出部25は、更に、状態信号の出力に基づき、スタック操作命令が実行されているかどうかを判定する。ステップA2の判定の結果、スタック操作命令が実行されている場合は、改ざん検出部25は、ステップA5を実行する。一方、ステップA2の判定の結果、スタック操作命令が実行されていない場合は、改ざん検出部25は、環境変数MALLOCCHECKに所定の値を設定し、記憶装置10の異常検出機能を起動させるステップA3。ステップA3が実行されると、更に、改ざん検出部25は、記憶装置10から診断メッセージが出力されているかどうかを判定するステップA4。ステップA4の結果、診断メッセージが出力されていない場合は、改ざん検出部25は、改ざんが行われていないと判断し、処理を終了する。一方、ステップA4の結果、診断メッセージが出力されている場合は、改ざん検出部25は、ステップA5を実行する。このように、ステップA1~A4では、aCPUの動作状態を示す状態信号に異常はないかどうか、b環境変数MALLOC_CHECKの設定後に、診断メッセージが出力されていないかどうか、が確認される。そして、aによる異常、またはbによる診断メッセージの出力がなされている場合に、ステップA5が実行される。ステップA5では、改ざん検出部25は、スタック領域またはヒープ領域に格納されているアドレスが、記憶装置10の静的領域のアドレスであるかどうかを判定する。具体的には、改ざん検出部25は、分岐処理または復帰処理で利用したスタック領域の値アドレスを読み込み、この値がプログラム領域または共有ライブラリ領域にあるかどうかを、Staticareapointer31の値と共有ライブラリpointer32の値とに基づいて判定する。ステップA5の判定の結果、アドレスが静的領域にない場合、即ち、動的領域にある場合は、改ざんが行われていると判断し、改ざんを特定する改ざん情報を、監視装置200に対して送信するステップA6。一方、ステップA5の判定の結果、アドレスが静的領域にある場合は、改ざん検出部25は、改ざんは行われていないと判定する。但し、この場合、改ざん検出部25は、プログラムに不具合が発生している、または実行時における設定値に不正があった、と判断し、ソフトウェアプログラムの不具合を監視装置200に通知するステップA7。ステップA6またはステップA7が実行されると、改ざん検出部25は、再度ステップA1を実行し、再び改ざんの検出処理を実行する。なお、図9には、利用者管理部21、端末装置管理部22、タスク管理部23、不正利用検出部24、および利用アクセス暗号化部26それぞれによる処理ステップは、図示されていないが、これらによる処理ステップも適宜実行される。[本実施の形態における効果]以上のように、本実施の形態によれば、ソフトウェアプログラムの利用にあたり、事前に、ソフトウェアプログラムに、チェッカコード、検出用のマクロ、またか関数を埋め込むこともなく、改ざんされたかどうかを判定できる。また、改ざんが行われた場合は、迅速に適切な対応処置を実行することが可能となる。本実施の形態におけるプログラムは、コンピュータに、図9に示すステップA1~~A7を実行させるプログラムであれば良く、更に、コンピュータは、端末装置100自体であっても良い。この場合、改ざん検出装置20は、本実施の形態におけるプログラムによって、端末装置100のオペレーティングシステム上に構築される。そして、端末装置100のCPU11が、利用者管理部21、装置管理部22、タスク管理部23、不正利用検出部24、改ざん検出部25、利用アクセス暗号化部26として機能し、処理を実行する。ここで、実施の形態における端末装置100の具体例について図10を用いて説明する。図10は、本発明の実施の形態で利用される端末装置の具体例を示すブロック図である。図10に示すように、端末装置コンピュータ100は、記憶装置10およびCPU11に加えて、二次記憶装置113と、入力インターフェイス114と、表示コントローラ115と、データリーダ/ライタ116と、通信インターフェイス117とを備える。これらの各部は、バス121を介して、互いにデータ通信可能に接続される。CPU11は、二次記憶装置113に格納された、本実施の形態におけるプログラムコードをメインメモリ112に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ112は、典型的には、DRAMDynamicRandomAccessMemory等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体120に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス117を介して接続されたインターネット上で流通するものであっても良い。また、二次記憶装置113の具体例としては、ハードディスクの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス114は、CPU111と、キーボード及びマウスといった入力機器118との間のデータ伝送を仲介する。表示コントローラ115は、ディスプレイ装置119と接続され、ディスプレイ装置119での表示を制御する。データリーダ/ライタ116は、CPU111と記録媒体120との間のデータ伝送を仲介し、記録媒体120からのプログラムの読み出し、及びコンピュータ110における処理結果の記録媒体120への書き込みを実行する。通信インターフェイス117は、CPU111と、他のコンピュータとの間のデータ伝送を仲介する。また、記録媒体120の具体例としては、CFCompactFlash及びSDSecureDigital等の汎用的な半導体記憶デバイス、フレキシブルディスクFlexibleDisk等の磁気記憶媒体、又はCD-ROMCompactDiskReadOnlyMemoryなどの光学記憶媒体が挙げられる。上述した実施の形態の一部又は全部は、以下に記載する付記1~付記19によって表現することができるが、以下の記載に限定されるものではない。付記1ソフトウェアプログラムを実行する端末装置における改ざんを検出する改ざん検出装置であって、前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、改ざん検出部を備えている、ことを特徴とする改ざん検出装置。付記2前記改ざん検出部が、前記分岐処理または前記復帰処理が行われた場合に、前記端末装置のプロセッサの動作を示す前記状態信号の出力と、環境変数の設定による前記メモリの異常検出機能を起動させたときの出力とが、設定条件を満たすかどうかを判定し、判定の結果、設定条件を満たす場合に、前記スタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定する、付記1に記載の改ざん検出装置。付記3前記ソフトウェアプログラムを利用することが、前記端末装置に対して許可されているかどうかを判定し、許可されていない場合に、前記端末装置による前記ソフトウェアプログラムの利用を不正利用として検出する、不正利用検出部を、更に備えている、付記1または2に記載の改ざん検出装置。付記4前記端末装置が、前記ソフトウェアプログラムにアクセス可能な利用者と、前記ソフトウェアプログラムを実行可能な端末装置と、前記ソフトウェアプログラムが前記端末装置にインストールされた日時とを、互いに対応付けて管理するためのアクセス管理情報を記憶しており、前記不正利用検出部が、前記アクセス管理情報に基づいて、許可されているかどうかを判定する、付記3に記載の改ざん検出装置。付記5前記不正利用検出部が、前記不正利用を検出した場合に、前記端末装置に対して、不正利用の検出を通知する、付記3または4に記載の改ざん検出装置。付記6改ざん検出装置を有する端末装置と、監視装置とを備え、前記改ざん検出装置は、前記端末装置で実行されるソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出し、更に、検出した前記改ざんを特定する改ざん情報を前記監視装置に送信し、前記監視装置は、前記改ざん検出装置から送信されてきた前記改ざん情報を用いて、前記端末装置を監視する、ことを特徴とする監視システム。付記7前記改ざん検出装置が、前記分岐処理または前記復帰処理が行われた場合に、前記端末装置のプロセッサの動作を示す前記状態信号の出力と、環境変数の設定による前記メモリの異常検出機能を起動させたときの出力とが、設定条件を満たすかどうかを判定し、判定の結果、設定条件を満たす場合に、前記スタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定する、付記6に記載の改ざん監視システム。付記8前記改ざん検出装置が、前記ソフトウェアプログラムを利用することが、前記端末装置に対して許可されているかどうかを判定し、許可されていない場合に、前記端末装置による前記ソフトウェアプログラムの利用を不正利用として検出する、付記6または7に記載の監視システム。付記9前記端末装置が、前記ソフトウェアプログラムにアクセス可能な利用者と、前記ソフトウェアプログラムを実行可能な端末装置と、前記ソフトウェアプログラムが前記端末装置にインストールされた日時とを、互いに対応付けて管理するためのアクセス管理情報を記憶しており、前記改ざん検出装置が、前記アクセス管理情報に基づいて、許可されているかどうかを判定する、付記8に記載の監視システム。付記10前記端末装置が、使用が許可される利用者を管理するための利用者管理情報と、端末装置を一意に識別するための装置識別情報とを記憶しており、前記改ざん検出装置が、前記利用者管理情報、及び前記装置識別情報を、前記監視装置に送信し、前記監視装置が、前記改ざん検出装置から送信されてきた、前記利用者管理情報、及び前記装置識別情報を更に用いて、前記端末装置を監視する、付記6~9のいずれかに記載の監視システム。付記11前記改ざん検出装置が、前記不正利用を検出した場合に、前記端末装置に対して、不正利用の検出を通知する、付記8または9に記載の監視システム。付記12ソフトウェアプログラムを実行する端末装置における改ざんを検出するための方法であって、a前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、ステップを有している、ことを特徴とする改ざん検出方法。付記13前記aのステップにおいて、前記分岐処理または前記復帰処理が行われた場合に、前記端末装置のプロセッサの動作を示す前記状態信号の出力と、環境変数の設定による前記メモリの異常検出機能を起動させたときの出力とが、設定条件を満たすかどうかを判定し、判定の結果、設定条件を満たす場合に、前記スタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定する、付記12に記載の改ざん検出方法。付記14b前記ソフトウェアプログラムを利用することが、前記端末装置に対して許可されているかどうかを判定し、許可されていない場合に、前記端末装置による前記ソフトウェアプログラムの利用を不正利用として検出する、ステップを、更に有している、付記12または13に記載の改ざん検出方法。付記15前記端末装置が、前記ソフトウェアプログラムにアクセス可能な利用者と、前記ソフトウェアプログラムを実行可能な端末装置と、前記ソフトウェアプログラムが前記端末装置にインストールされた日時とを、互いに対応付けて管理するためのアクセス管理情報を記憶している場合に、前記bのステップにおいて、前記アクセス管理情報に基づいて、許可されているかどうかを判定する、付記14に記載の改ざん検出方法。付記16c前記bのステップで、前記不正利用を検出した場合に、前記端末装置に対して、不正利用の検出を通知する、ステップを更に有している、付記14または15に記載の改ざん検出方法。付記17コンピュータがソフトウェアプログラムを実行している場合における改ざんの検出を、前記コンピュータによって行うためのプログラムであって、前記コンピュータに、a前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記コンピュータのメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、ステップを実行させる、プログラム。付記18前記aのステップにおいて、前記分岐処理または前記復帰処理が行われた場合に、前記コンピュータのプロセッサの動作を示す前記状態信号の出力と、環境変数の設定による前記メモリの異常検出機能を起動させたときの出力とが、設定条件を満たすかどうかを判定し、判定の結果、設定条件を満たす場合に、前記スタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定する、付記17に記載の改ざんプログラム。付記19b前記ソフトウェアプログラムを利用することが、前記コンピュータに対して許可されているかどうかを判定し、許可されていない場合に、前記コンピュータによる前記ソフトウェアプログラムの利用を不正利用として検出する、ステップを、更に前記コンピュータに実行させる、付記17または18に記載の改ざんプログラム。付記20前記コンピュータが、前記ソフトウェアプログラムにアクセス可能な利用者と、前記ソフトウェアプログラムを実行可能なコンピュータと、前記ソフトウェアプログラムが前記コンピュータにインストールされた日時とを、互いに対応付けて管理するためのアクセス管理情報を記憶している場合に、前記bのステップにおいて、前記アクセス管理情報に基づいて、許可されているかどうかを判定する、付記19に記載のプログラム。