(57)【特許請求の範囲】
【請求項１】
ＣＰＵを備えるコンピュータを用いてオブジェクト指向言語で書かれた検査対象プログラムの流用を検出するプログラムの流用検出方法であって、
前記ＣＰＵが、
前記検査対象プログラムを記憶装置からメモリに読み込むステップと、
前記検査対象プログラムが、複数の機能クラスによって継承される共通クラスに含まれる認証メソッドのメソッド名であって、他の名前と識別可能な独自の当該メソッド名を含むか否かを判別するステップと、
前記検査対象プログラムが前記独自のメソッド名を含むと判別されたことに応答して、前記検査対象プログラムは特定のプログラムを流用して作成されたものであると判定し、流用に対応するための所定の処理を行うステップと、
を実行することを特徴とするプログラムの流用検出方法。
【請求項２】
ＣＰＵを備えるコンピュータを用いてオブジェクト指向言語で書かれた検査対象プログラムの流用を検出するプログラムの流用検出方法であって、
前記ＣＰＵが、
前記検査対象プログラムの実行を開始するステップと、
前記検査対象プログラムの各機能クラスに含まれるメソッドの処理の中で、複数の機能クラスによって継承される共通クラスに含まれる認証メソッドを呼び出すステップと、
前記呼び出された認証メソッドの処理の中で、前記共通クラスに付与された認証キーが引数に含まれるか否かを判別するステップと、
前記呼び出された認証メソッドの処理の中で、前記共通クラスに付与された認証キーが引数に含まれていないと判別されたことに応答して、前記検査対象のプログラムは特定のプログラムを不正に流用して作成されたものであると判定し、不正流用に対応するための所定の処理を行うステップと、
を実行することを特徴とするプログラムの流用検出方法。
【請求項３】
前記共通クラスに含まれる所定のメソッド名を有する認証メソッドが、初期化処理を行うメソッドであることを特徴とする請求項１または２に記載のプログラムの流用検出方法。
【請求項４】
前記共通クラスに含まれる所定のメソッド名を有する認証メソッドが、エラー処理を行うメソッドであることを特徴とする請求項１または２に記載のプログラムの流用検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムが流用されたことを検出するプログラムの流用検出方法に関する。
【背景技術】
【０００２】
システムの発注元が保守時の迅速な対応などを理由に、パッケージのソースコードの開示を要求してくる場合がある。システムの開発や保守に複数のベンダーが関係している場合、ソースコードを開示すると、契約条件によるが、結果として、ベンダーをまたがったノウハウの展開が行われることになる。
【０００３】
一方、システム開発では、パッケージも含めた、既存のソフトウェアコンポーネントを再利用することが有効とされており、従来から再利用方法の検討がなされている。一定レベル以上の技術者であれば、容易にソースコードをコピーして、プログラムを開発することができる。
上述したように、システムの発注元にソースコードを開示すると、ソースコードを保護するために、ソースコードに対して、コメントでコピーライトを記載したり、その一部に特殊なコードを埋め込んだりする対策をとっていても、プログラムの開発元とは異なるベンダーがそのソースコードを不正に流用してプログラムを開発したり改良したりすることが可能となる。
更に、不用意なコピーが繰り返された結果、開発元のソースコードを不正に流用した開発者が権利を主張して、開発元を訴えることさえ可能となる。
【０００４】
そこで、ソースコードの著作権を守るべく以下のようにソースコードに透かし情報を挿入する方法が提案されている。
特許文献１には、透かしが挿入されるプログラムのソースコードから、順序を入れ替えてもプログラムの仕様に影響がない命令文を複数個取り出し、その命令文と命令文との間に、ダミー変数に関する計算式を挿入し、命令文同士をランダムに入れ替え、入れ替えた命令文の順序を透かし情報として保存する透かし挿入方法が開示されている。
特許文献２には、識別情報（透かし情報）をビット列に変換し、ソースコードに含まれる空白または行間の長さをこのビット列に含まれる各ビットの１／０に合わせて変換するソフトウェア識別情報埋め込み方法が開示されている。例えば、１のビットはブランク１個または行間１行、０のビットはブランク２個または行間２行に変換する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−７６０６４号公報
【特許文献２】特開２００１−２６５５８７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１に記載の透かし挿入方法では、ソースコードが変更されたことによってバグが生じていないことを検証するために莫大な時間を必要とする。また、プログラムをコンパイルする際に、実行速度を向上させるためにコンパイラが命令の順番を入れ替える場合がある。特許文献１に記載の透かし挿入方法では、このような場合、デコンパイルなどを通して復元されたソースコードでは、透かし情報が消滅しているおそれがある。
また、特許文献２に記載のソフトウェア識別情報埋め込み方法では、ファイルの文字コードが変更された場合に、透かしとして埋め込んだビット列が有効にならない可能性があり、ちょっとしたソースコードの変更に弱いことが想定される。さらに各所に埋め込んでいるために、ソースコードの修正に弱いことが想定される。また、デコンパイルなどを通して復元されたソースコードでは、透かし情報が消滅するおそれがある点は特許文献１に記載の透かし挿入方法と同様である。
【０００７】
以上の点から、特許文献１や特許文献２に開示されている方法によるソースコードへの透かし導入は実現していない。現状では、コメントによるコピーライト表記や、ソースコードを含めた、特殊な契約により不正な流用を防いでいることがほとんどある。
しかし、従来のコメントによる著作者のコピーライト表記では、ソースコードを流用する際に安易にコピーライトの変更や削除が可能であり、流用され続けていると、本当の著作者を判別することが難しくなる。
【０００８】
また、プログラムの不正な流用を防止するためには、著作者（プログラムの開発元）がはっきり分かることが最も重要であるが、保守や大規模開発を考慮すると、ソースコードの可読性への対応も行う必要がある。また、最近のソフトウェアの主流であるＪａｖａ（登録商標）での実現性を考慮すると、デコンパイルなどを通して復元されたソースコードに対する著作権の証明も考慮に入れる必要がある。
【０００９】
本発明の目的は、ソースコードの可読性を損なうことがなく、ソースコードの変更や修正に強く、デコンパイルなどを通してソースコードが復元されても消滅しない透かし情報を用いてプログラムの流用を検出するプログラムの流用検出方法を提供することである。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明のプログラムの流用検出方法は、
ＣＰＵを備えるコンピュータを用いてオブジェクト指向言語で書かれた検査対象プログラムの流用を検出するプログラムの流用検出方法であって、
前記ＣＰＵが、
前記検査対象プログラムを記憶装置からメモリに読み込むステップと、
前記検査対象プログラムが、複数の機能クラスによって継承される共通クラスに含まれる認証メソッドのメソッド名であって、他の名前と識別可能な独自の当該メソッド名を含むか否かを判別するステップと、
前記検査対象プログラムが前記独自のメソッド名を含むと判別されたことに応答して、前記検査対象プログラムは特定のプログラムを流用して作成されたものであると判定し、流用に対応するための所定の処理を行うステップと、
を実行することを特徴とする。
【００１１】
好ましくは、本発明のプログラムの流用検出方法は、
ＣＰＵを備えるコンピュータを用いてオブジェクト指向言語で書かれた検査対象プログラムの流用を検出するプログラムの流用検出方法であって、
前記ＣＰＵが、
前記検査対象プログラムの実行を開始するステップと、
前記検査対象プログラムの各機能クラスに含まれるメソッドの処理の中で、複数の機能クラスによって継承される共通クラスに含まれる認証メソッドを呼び出すステップと、
前記呼び出された認証メソッドの処理の中で、前記共通クラスに付与された認証キーが引数に含まれるか否かを判別するステップと、
前記呼び出された認証メソッドの処理の中で、前記共通クラスに付与された認証キーが引数に含まれていないと判別されたことに応答して、前記検査対象のプログラムは特定のプログラムを不正に流用して作成されたものであると判定し、不正流用に対応するための所定の処理を行うステップと、
を実行することを特徴とする。

【００１２】
好ましくは、本発明のプログラムの流用検出方法は、
前記共通クラスに含まれる所定のメソッド名を有する認証メソッドが、初期化処理を行うメソッドであることを特徴とする。
【００１３】
好ましくは、本発明のプログラムの流用検出方法は、
前記共通クラスに含まれる所定のメソッド名を有する認証メソッドが、エラー処理を行うメソッドであることを特徴とする。
【発明の効果】
【００１４】
本発明によれば、ソースコードの可読性を損なうことがなく、ソースコードの変更や修正に強く、デコンパイルなどを通してソースコードが復元されても消滅しない透かし情報を用いてプログラムの流用を検出することができる。
【図面の簡単な説明】
【００１５】
【図１】プログラムを実行するコンピュータの構成の一例を示す図である。
【図２】本発明の第１の実施形態に係る透かし情報が組み込まれた検査対象プログラムの構成の一例を示す図である。
【図３】認証メソッドのメソッド名を検知するための検査用プログラムの検査処理の一例を示す図である。
【図４】本発明の第２の実施形態に係る透かし情報が組み込まれた検査対象プログラムの構成の一例を示す図である。
【図５】第２の実施形態に係る検査対象プログラムの処理の一例を示す図である。
【図６】本発明の第２の実施形態の第１の変形例に係る検査対象プログラムの構成の一例を示す図である。
【図７】第２の実施形態の第１の変形例に係る検査対象プログラムの処理の一例を示す図である。
【図８】本発明の第２の実施形態の第２の変形例に係る検査対象プログラムの構成の一例を示す図である。
【図９】第２の実施形態の第２の変形例に係る検査対象プログラムの処理の一例を示す図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施形態に係るプログラムの流用検出方法について図面を参照しながら詳細に説明する。
【００１７】
本発明の実施形態に係るプログラムの流出検出方法は、検査用プログラムまたは検査対象プログラムをコンピュータで実行することにより実施される。
図１は、プログラムを実行するコンピュータ１の構成の一例を示す。
コンピュータ１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１とメモリ１２とを含むコンピュータ本体１０と、記憶部２０と、入力部３０と、表示部４０とを有している。
記憶部２０は、ハードディスク装置やＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）等の光ディスク装置等で構成される。記憶部２０は、検査用プログラムと検査対象プログラムの両方、または検査対象プログラムを記憶する。
メモリ１２は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）やＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）等で構成される。ＣＰＵ１１は記憶部２０から検査用プログラムと検査対象プログラムの両方、または検査対象プログラムをメモリ１２に読み出し、メモリ１２に記憶されている検査用プログラムまたは検査対象プログラムを実行する。
入力部３０は、キーボードやマウス等で構成される。表示部４０は、ディスプレイやプリンタ等で構成される。利用者は、表示部４０に検査用プログラムや検査対象プログラムを表示させ、入力部３０を用いて検査用プログラムや検査対象プログラムを作成し、また修正する。
【００１８】
本発明は、検査対象プログラムが、例えばＪａｖａ（登録商標）言語（Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ社が開発したプログラミング言語）のようなオブジェクト指向言語で書かれていることを前提とする。
【００１９】
図２は、本発明の第１の実施形態に係る透かし情報が組み込まれた検査対象プログラムの構成の一例を示す。
第１の実施形態に係る検査対象プログラムは、複数の機能クラス１００と共通クラス２００とを含む。各機能クラス１００はメソッド１０１を含み、共通クラス２００は認証メソッド２０１を含む。
各機能クラス１００は、共通クラス２００を継承する。共通クラス２００は、例えば基底クラスであるが、基底クラスを継承したクラスであってもよい。各機能クラス１００は、システムやアプリケーションにおける所定の機能を実現するクラスである。
【００２０】
共通クラス２００は、複数の機能クラス１００で共通に実行される処理を実現するクラスである。共通に実行される処理とは、例えば、エラー処理や初期化処理である。ただし、共通に実行される処理はエラー処理や初期化処理以外の処理であってもよい。
プログラムではエラー処理や初期化処理は開発者の意識に関わらず、行われる。特に、Ｊａｖａ（登録商標）ではエラー処理として、必ず例外処理が行われる。エラー処理や初期化処理は類似のソースコードを記述することが多く、共通化の対象となることが多い。
なお、共通に実行される処理が初期化処理である場合、認証メソッド２０１はコンストラクタである。この場合には、Ｊａｖａ（登録商標）の規約により認証メソッド２０１（コンストラクタ）の名前は共通クラス２００のクラス名と同一でなければならない。
【００２１】
第１の実施形態では、認証メソッド２０１のメソッド名を透かし情報とみなす。すなわち、認証メソッド２０１のメソッド名を他の名前と識別可能な独自のものとする。例えば、認証メソッド２０１のメソッド名を６４文字のランダムな英数字列とする。
第１の実施形態では、各機能クラス１００から共通クラス２００を呼び出すため、認証メソッド２０１のメソッド名により独自性が見出せることになる。さらにメソッド名が独自であれば、中間コードなどからデコンパイルされても再生される。このため、デコンパイル後のソースコードをチェックすることによりプログラムが流用されたものであるか否かを判別することができる。
【００２２】
第１の実施形態では、検査用プログラムにより認証メソッド２０１のメソッド名を検知する。ＣＰＵ１１は、検査用プログラムを記憶部２０からメモリ１２に読み込み、検査用プログラムを実行する。検査用プログラムが実行されると、図３に示すように、ＣＰＵ１１は、検査対象プログラムを記憶部２０からメモリ１１に読み込み（Ｓ１０１）、検査対象プログラムに認証メソッド２０１のメソッド名と一致するメソッド名が含まれるか否かを判別する（Ｓ１０２）。一致するメソッド名が含まれていた場合、ＣＰＵ１１は、検査対象プログラムは流用されたものであると判定し（Ｓ１０２：Ｙｅｓ）、流用されたものである旨のメッセージを表示する等の流用されたプログラムに対応するための所定の処理を行う（Ｓ１０３）。一方、一致するメソッド名が含まれていなかった場合、ＣＰＵ１１は、検査対象のプログラムは正当なものであって流用されたものではないと判定し（Ｓ１０２：Ｙｅｓ）、正当なものである旨のメッセージを表示する等の正当なプログラムに対応するための所定の処理を行う（Ｓ１０４）。
【００２３】
図４は、本発明の第２の実施形態に係る透かし情報が組み込まれた検査対象プログラムの構成の一例を示す。
第２の実施形態に係る検査対象プログラムは、複数の機能クラス１１０と共通クラス２１０とを含む。各機能クラス１１０はメソッド１１１を含み、共通クラス２１０は認証メソッド２１１を含む。
機能クラス１１０と共通クラス２１０の関係は、第１の実施形態における機能クラス１００と共通クラス２００の関係と同様であり、説明を省略する。
【００２４】
第２の実施形態では、共通クラス２１０毎に付与された認証キーと認証メソッド２１１とを透かし情報とみなす。すなわち、メソッド１１１は共通クラス２１０毎に付与された認証キーを引数として共通クラス２１０に含まれる認証メソッド２１１を呼び出す処理を含み、認証メソッド２１１は認証キーに基づいて認証を行う認証処理を含んでいる。
本発明の第２の実施形態では、ＣＰＵ１１は検査対象プログラム自身を実行することによってその流用の有無を判定する。
【００２５】
ＣＰＵ１１は、図５に示すように、検査対象プログラムを記憶部２０からメモリ１２に読み込み、検査対象プログラムの実行を開始する（Ｓ２０１）。検査対象プログラムの実行が開始されると、ＣＰＵ１１はメソッド１１１の処理の中で、共通クラス２１０に含まれる認証メソッド２１１を呼び出す（Ｓ２０２）。ＣＰＵ１１は呼び出された認証メソッド２１１の処理の中で、共通クラス２１０に付与された認証キーが引数に含まれるか否かを判別する（Ｓ２０３）。共通クラス２１０に付与された認証キーが引数に含まれていた場合（Ｓ２０３：Ｙｅｓ）、ＣＰＵ１１は、検査対象のプログラムは正当なものであって流用されたものではないと判定し、通常の処理を行う（Ｓ２０４）。一方、共通クラス２１０に付与された認証キーが引数に含まれてなかった場合、すなわち、共通クラス２１０に付与された認証キーと異なる認証キーが引数に含まれていた場合、および認証キーが引数に含まれていなかった場合（Ｓ２０３：Ｎｏ）、ＣＰＵ１１は、検査対象のプログラムは流用されたものであると判定して処理を中断する等、不正流用に対応するための所定の処理を行う（Ｓ２０５）。
【００２６】
なお、第２の実施形態でも、第１の実施形態と同様に、認証メソッド２１１のメソッド名を独自のものとし、第１の実施形態に係る流用検出方法を実施した後、第２の実施形態に係る流用検出方法を実施することとしてもよい。
検査対象のプログラムが開発元によって作成された正当なものである場合、当然ながらそれは認証メソッド２０１のメソッド名を含んでいる。このため、第１の実施形態に係るプログラムの流用検出方法では、ＣＰＵ１１は検査対象プログラムが開発元によって作成された正当なものであっても流用対応処理を行う（Ｓ１０３）。このため、第１の実施形態に係る流用検出方法によって流用と判定された後に、第２の実施形態に係る流用検出方法によって流用の有無を更に判定することにより、開発元によって作成された正当なものを流用と判定する誤判定を防ぐことができる。
【００２７】
また、第１の実施形態に係る検査用プログラムの実行時間は一般に短く、第１の実施形態では検査対象のプログラムを動作させるためのテストパタンも不要である。このため、第１の実施形態に係る流用検出方法によって流用と判定されたもののみ、更に、第２の実施形態に係る流用検出方法によって検査することにより、検査の手間と時間を大幅に削減することができる。
【００２８】
図６は、本発明の第２の実施形態の第１の変形例に係る検査対象プログラムの構成の一例を示す。
第２の実施形態の第１の変形例に係る検査対象プログラムは、複数の機能クラス１２０と基底クラス２２０とを含む。各機能クラス１２０は、コンストラクタ１２１と、機能メソッド１２２とを含む。基底クラス２２０は、コンストラクタ２２１と、エラー処理メソッド２２２と、認証サブメソッド２２３とを含む。
各機能クラス１２０は、基底クラス２２０を継承する。各機能クラス１２０は、システムやアプリケーションにおける所定の機能を実現するクラスである。機能メソッド１２２は、基底クラス２２０毎に付与された認証キーを引数として基底クラス２２０に含まれるエラー処理メソッド２２２を呼び出す処理を含む。
【００２９】
基底クラス２２０は、複数の機能クラス１２０で共通に実行される処理を実現するクラスである。エラー処理メソッド２２２は、機能メソッド１２２から渡された認証キーを引数として認証サブメソッド２２３を呼び出す処理を含む。
Ｊａｖａ（登録商標）はエラー処理として、必ず例外処理を行う。これらの例外処理は類似のソースコードを記述することが多く、共通化の対象となることが多い。そのため、基底クラス２２０にエラー処理メソッド２２２を作成する意味が発生する。機能メソッド１２２がエラー処理を行う場合はエラー処理メソッド２２２を実行することで処理の共通化が図られ、効率的なソースコードとすることができる。認証サブメソッド２２３は、エラー処理メソッド２２２から呼び出され、不正流用に対する処理の中断等を行う。
【００３０】
ＣＰＵ１１が検査対象プログラムを実行し、機能メソッド１２２の中で、エラーが発生すると、図７に示すように、ＣＰＵ１１は例外クラスと認証キーを引数としてエラー処理メソッド２２２を呼び出す（Ｓ３０１）。
次に、ＣＰＵ１１は、呼び出されたエラー処理メソッド２２２の中で、もらった認証キーを引数として認証サブメソッド２２３を呼び出し（Ｓ３０２）、認証処理を行う。
【００３１】
ＣＰＵ１１は、認証サブメソッド２２３の中で、基底クラス２２０に付与された認証キーが引数に含まれるか否かを判定する（Ｓ３０３）。基底クラス２２０に付与された認証キーが引数に含まれていた場合（Ｓ３０３：Ｙｅｓ）、ＣＰＵ１１は、エラー処理メソッド２２２に戻り（Ｓ３０４）、エラー解析処理を行って例外クラスを分析し（Ｓ３０５）、適切なメッセージをユーザに示せるようにメッセージを編集し（Ｓ３０６）、呼び出し元に戻り値等でエラーメッセージを引き渡す（Ｓ３０７）。
一方、基底クラス２２０に付与された認証キーと異なる認証キーが引数に含まれていた場合、または認証キーが引数に含まれていなかった場合（Ｓ３０３：Ｎｏ）、ＣＰＵ１１は、検査対象のプログラムは流用されたものであると判定して処理を中断し、不正利用を防ぐ（Ｓ３０８）。
なお、エラー処理メソッド２２２は認証メソッドの一例である。エラー処理メソッド２２２と認証サブメソッド２２３を分離せず、エラー処理メソッド２２２の中で認証処理を行うこととしてもよい。
【００３２】
図８は、本発明の第２の実施形態の第２の変形例に係る検査対象プログラムの構成の一例を示す。
第２の実施形態の第２の変形例に係る検査対象プログラムは、複数の機能クラス１３０と基底クラス２３０とを含む。各機能クラス１３０は、コンストラクタ１３１と、機能メソッド１３２とを含む。基底クラス２３０は、コンストラクタ２３１と、認証サブメソッド２３２とを含む。
各機能クラス１３０は、基底クラス２３０を継承する。各機能クラス１３０は、システムやアプリケーションにおける所定の機能を実現するクラスである。コンストラクタ１３１は、基底クラス２３０毎に付与された認証キーを引数として基底クラス２３０に含まれるコンストラクタ２３１を呼び出す処理を含む。
【００３３】
基底クラス２３０は、複数の機能クラス１３０で共通に実行される処理を実現するクラスである。コンストラクタ２３１は、機能クラス１３０のコンストラクタ１３１から渡された認証キーを引数として認証サブメソッド２３２を呼び出す処理を含む。
初期化もエラー処理同様に、クラスを使う上で必ず実行される。ただし、初期化処理はメソッドが使われる場合がなく、コンストラクタと呼ばれるクラス名と同じ名称のメソッドが動作する。この初期化処理はクラスファイルが記憶部２０からコンピュータ１のメモリ１２にロードされるタイミングで実行される。機能クラス１３０は基底クラス２３０を継承して作成されているため、機能クラス１３０のコンストラクタ１３１が実行されると、基底クラス２３０のコンストラクタ２３１が実行される。
認証サブメソッド２３２は、基底クラス２３０のコンストラクタ２３１から呼び出され、不正流用に対する処理の中断等を行う。
【００３４】
ＣＰＵ１１が検査対象プログラムを実行し、機能クラス１３０のコンストラクタ１３１が実行されると、図９に示すように、ＣＰＵ１１は認証キーを引数として基底クラス２３０のコンストラクタ２３１を呼び出す（Ｓ４０１）。
次に、ＣＰＵ１１は呼び出された基底クラス２３０のコンストラクタ２３１の中で、もらった認証キーを引数として認証サブメソッド２３２を呼び出し（Ｓ４０２）、認証処理を行う。
【００３５】
ＣＰＵ１１は認証サブメソッド２３２の中で、基底クラス２３０に付与された認証キーが引数に含まれるか否かを判定する（Ｓ４０３）。基底クラス２３０に付与された認証キーが引数に含まれていた場合（Ｓ４０３：Ｙｅｓ）、ＣＰＵ１１は、基底クラス２３０のコンストラクタ２３１に戻り（Ｓ４０４）、初期化処理を行って（Ｓ４０５）、機能クラス１３０のコンストラクタ１３１に戻る（Ｓ４０６）。
一方、基底クラス２３０に付与された認証キーと異なる認証キーが引数に含まれていた場合、または認証キーが引数に含まれていなかった場合（Ｓ４０３：Ｎｏ）、ＣＰＵ１１は、検査対象のプログラムは流用されたものであると判定して処理を中断し、不正利用を防ぐ（Ｓ４０７）。
なお、基底クラス２３０のコンストラクタ２３１は認証メソッドの一例である。コンストラクタ２３１と認証サブメソッド２３２を分離せず、コンストラクタ２３１の中で認証処理を行うとしてもよい。
【００３６】
上述した実施形態ではＪａｖａ（登録商標）言語を例として説明したが、Ｃ＋＋言語等他のオブジェクト指向言語で書かれたプログラムについても本発明を適用することができるのはもちろんである。
【００３７】
以上の構成により、ソースコードを大幅に変更することなく、ソースコードに透かし情報を持たせることが可能になる。また、認証を行うことで、不正流用時の機能停止等を行うことも可能である。
【符号の説明】
【００３８】
１…コンピュータ、１０…コンピュータ本体、１１…ＣＰＵ、１２…メモリ、２０…記憶部、３０…入力部、４０…表示部、１００…機能クラス、１０１…メソッド、２００…共通クラス、２０１…認証メソッド、１１０…機能クラス、１１１…メソッド、２１０…共通クラス、２１１…認証メソッド、１２０…機能クラス、１２１…機能クラスのコンストラクタ、１２２…機能メソッド、２２０…基底クラス、２２１…基底クラスのコンストラクタ、２２２…エラー処理メソッド、２２３…認証サブメソッド、１３０…機能クラス、１３１…機能クラスのコンストラクタ、１３２…機能メソッド、２３０…基底クラス、２３１…基底クラスのコンストラクタ、２３２…認証サブメソッド
【図１】
0005670269.tif 000002
【図２】
0005670269.tif 000003
【図３】
0005670269.tif 000004
【図４】
0005670269.tif 000005
【図５】
0005670269.tif 000006
【図６】
0005670269.tif 000007
【図７】
0005670269.tif 000008
【図８】
0005670269.tif 000009
【図９】
0005670269.tif 000010