(57)【要約】【課題】比較的簡単な構成で、共有ライブラリの不正使用を防止可能にする。【解決手段】共有ライブラリは、前処理関数と各種関数とを含み、各種関数は前処理関数の実行結果が有効を示していることを条件に本来の処理を実行する。前処理関数は、一方では、暗号化された固有情報を復号し（Ｓ２２）、他方では、ライブラリを利用する側を識別するための所定情報ｕを取得し（Ｓ２３）、所定情報ｕが固有情報Ｕに含まれていれば、上記結果を有効にする（Ｓ２４）。【選択図】図７
2014167718.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置に格納されてプロセッサにより実行され、前処理関数と各種関数とを含み、各種関数は該前処理関数の実行結果が有効を示していることを条件に本来の処理を実行し、該結果が無効を示していれば該本来の処理を実行しない不正使用防止機能付き共有ライブラリであって、
該前処理関数は、該プロセッサに対し、暗号化された固有情報を該記憶装置内の所定箇所から取得させ、該固有情報を復号させ、該記憶装置内から、該ライブラリを利用する側を識別するための所定情報を取得させ、該所定情報と該復号された固有情報との比較結果に基づいて、有効又は無効を示す値を該実行結果として返させる、
ことを特徴とする不正使用防止機能付き共有ライブラリ。
【請求項２】
該暗号化された固有情報は、該記憶装置内の所定パスのファイル内に存在し、該固有情報は、該ライブラリを利用する複数のアプリケーションのそれぞれから得られる該所定情報の集合である、
ことを特徴とする請求項１に記載の不正使用防止機能付き共有ライブラリ。
【請求項３】
該所定情報及び該固有情報はいずれも、該ライブラリを利用するクラス又は関数の名前を含み、
該前処理関数は、該プロセッサに対し、該所定情報に含まれる該名前が該固有情報に含まれていない場合には該無効を示す値を該実行結果として返させる、
ことを特徴とする請求項１又は２に記載の不正使用防止機能付き共有ライブラリ。
【請求項４】
該所定情報及び該固有情報はいずれも、該ライブラリを利用するアプリケーションのパッケージ又はメインプログラムの名前を含み、
該前処理関数は、該プロセッサに対し、該所定情報に含まれる該名前が該固有情報に含まれていない場合には該無効を示す値を該実行結果として返させる、
ことを特徴とする請求項１又は２に記載の不正使用防止機能付き共有ライブラリ。
【請求項５】
該所定情報及び該固有情報はいずれも、該ライブラリを利用するアプリケーションのバージョン識別情報を含み、
該前処理関数は、該プロセッサに対し、両バージョン識別情報の比較結果が所定条件を満たさない場合には該無効を示す値を該実行結果として返させる、
ことを特徴とする請求項３又は４に記載の不正使用防止機能付き共有ライブラリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不正使用を防止する機能を備えた共有ライブラリに関する。
【背景技術】
【０００２】
複数のアプリケーション間で共通に使用される関数群を共有ライブラリ（Ｗｉｎｄｏｗｓ（登録商標）では、拡張子が．ｄｌｌの動的リンクライブラリ）とし、アプリケーション実行時に共有ライブラリを該アプリケーションに動的にリンクさせる構成とすることにより、例えば、共有ライブラリ内の関数を修正することにより、実質的に、これを利用する各アプリケーションを修正したことになり、アプリケーションの保守性が向上する。
【０００３】
しかし、共有ライブラリ化すると、例えば競合他社のアプリケーションでもこれを利用可能となるので、不正使用を防止する必要がある。
【０００４】
そこで、下記特許文献１では、ライブラリ内のオブジェクトを組み込んだ実行可能プログラムファイルを開発する段階で、専用のソフトウェア開発ツールが無ければ、ライブラリと実行可能プログラムファイルとに、適正に対応するプロテクトコードを埋め込むことができないようにし、前記オブジェクトを実行するとプロテクトコードチェック関数を実行し、両プロテクトコードが適正に対応していなければプログラムの実行を終了するようにしている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−３３９５１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、アプリケーション毎にライブラリ中のオブジェクトを取り出して実行可能プログラムファイルを作成するので、通常の共有ライブラリではなく、ライブラリ中のオブジェクトを修正すると、各アプリケーションについて上記組込を行う必要がある。
【０００７】
また、ライブラリプロテクトのための構成が複雑である。
【０００８】
本発明の目的は、このような問題点に鑑み、比較的簡単な構成で、共有ライブラリの不正使用を防止可能な不正使用防止機能付き共有ライブラリを提供することにある。
【課題を解決するための手段】
【０００９】
本発明の一態様では、記憶装置に格納されてプロセッサにより実行され、前処理関数と各種関数とを含み、各種関数は該前処理関数の実行結果が有効を示していることを条件に本来の処理を実行し、該結果が無効を示していれば該本来の処理を実行しない不正使用防止機能付き共有ライブラリであって、
該前処理関数は、該プロセッサに対し、暗号化された固有情報を該記憶装置内の所定箇所から取得させ、該固有情報を復号させ、該記憶装置内から、該ライブラリを利用する側を識別するための所定情報を取得させ、該所定情報と該復号された固有情報との比較結果に基づいて、有効又は無効を示す値を該実行結果として返させる。
【発明の効果】
【００１０】
上記態様の構成によれば、例えば、該ライブラリを利用する複数のアプリケーションのそれぞれから得られる該所定情報の集合を固有情報とし、これを暗号化して該記憶装置内の所定パスのファイル内に含めることにより、該複数のアプリケーションのみ該ライブラリを共有することができ、比較的簡単な構成で共有ライブラリの不正使用を防止可能となるという効果を奏する。
【００１１】
本発明の他の目的、特徴的な構成及び効果は、以下の説明を特許請求の範囲及び図面の記載と関係づけて読むことにより明らかになる。 
【図面の簡単な説明】
【００１２】
【図１】本発明の実施例１に係る不正使用防止機能付き共有ライブラリのライセンスファイル作成説明図である。
【図２】図１中のＰＣのハードウェア構成を示す概略ブロック図である。
【図３】図１中の固有情報の作成方法を示す概略フローチャートである。
【図４】アプリケーションに共有ライブラリが動的にリンクされた後の動作の様子を示す概略説明図である。
【図５】図４中の共有ライブラリの概略構成説明図である。
【図６】図５中の関数群のそれぞれの関数の動作概要を示すフローチャートである。
【図７】図５中の前処理関数の動作を示す概略フローチャートである。
【図８】図４中のメイン関数による処理を示す概略フローチャートである。
【実施例１】
【００１３】
図１は、本発明の実施例１に係る不正使用防止機能付き共有ライブラリのライセンスファイル作成説明図である。このライセンスファイルは、開発者ＭによりＰＣ（パーソナルコンピュータ）１０を用いて作成される。
【００１４】
図２は、ＰＣ１０のハードウェア構成を示す概略ブロック図である。
【００１５】
このハードウェア構成は、通常のパーソナルコンピュータであり、ＣＰＵ（Central Processing Unit）１１がインターフェイス１２を介してＰＲＯＭ（Programmable Read Only Memory）１３、ＤＲＡＭ（Dynamic Random Access Memory）１４、補助記憶装置１５、ネットワークインターフェイス１６、入力装置１７及び表示装置１８に結合されている。図１では、簡単化の為に、複数種のインターフェイスを１つのブロック１２で表している。
【００１６】
ＰＲＯＭ１３は、例えばフラッシュメモリであり、ＢＩＯＳ（Basic Input/Output System）が格納されている。ＤＲＡＭ１４は、仮想記憶方式の主記憶装置として用いられる。補助記憶装置１５には、ＯＳ（Operating System）、各種ドライバ及びソフトウェア開発統合環境、この環境で開発されたアプリケーションやライブラリのソースコード等が格納されている。入力装置は、例えばキーボード及びポインティングデバイスである。
【００１７】
図１に戻って、複数のアプリケーション２０〜２４で共通に使用される関数群を共有ライブラリ２５とし、アプリケーション実行時に、ＯＳの機能により共有ライブラリ２５を該アプリケーションに動的にリンクさせる構成としている。
【００１８】
このような構成にすれば、例えば共有ライブラリ２５内の１つの関数を修正することにより、実質的に、これを利用するアプリケーション２０〜２４のそれぞれを修正したことになり、アプリケーションの保守性が向上する。
【００１９】
しかし、共有ライブラリ２５は、他のアプリケーションでも使用可能となるため、その不正使用を防止する必要がある。
【００２０】
そこで、開発者Ｍは、ＰＣ１０の入力装置１７を操作して、まず、共有ライブラリ２５を利用する側のアプリケーション２０〜２４のそれぞれの所定情報の集合を、固有情報３０として取得しておき、これを暗号化したライセンスファイル３１を作成する。
【００２１】
図３は、固有情報３０の作成方法を示す概略フローチャートである。以下、括弧内は図中のステップ識別符号である。
【００２２】
（Ｓ０）開発者Ｍは、入力装置１７を操作し、アプリケーション２０〜２４のソースコードからそれぞれの所定情報をコピー＆ペーストでテキストファイルに移し、その集合を固有情報３０として保存する。
【００２３】
ここに所定情報は、正当な共有ライブラリ２５の利用権を有することを示す情報であって、個々のアプリケーション２０〜２４を識別する情報、例えば、アプリケーションに含まれるクラス又は関数の名前、アプリケーションに含まれる特定コード、アプリケーションのパッケージ名、或いはアプリケーションをコンパイルしてバイナリ化した後のこれらのコードである。
【００２４】
同一アプリケーション名であっても、バージョンにより共有ライブラリ２５の内容が異なる場合には、バージョン識別情報も含ませ、これとの論理積によりアプリケーション２０〜２４のそれぞれを識別する所定情報とする。
【００２５】
（Ｓ１）開発者Ｍは、暗号化プログラムを起動させ、暗号化対象として固有情報３０を指定し、暗号化のキーとしてパスワードを入力し、暗号化を実行させることにより、ライセンスファイル３１を生成する。
【００２６】
図４は、アプリケーション２０を実行させた際に、ＯＳの動的リンク機能により共有ライブラリ２５がアプリケーション２０にリンクされた後の動作の様子を示す概略説明図である。
【００２７】
説明の簡単化のため、アプリケーション２０は、メイン関数２０１とクラス２０２とで構成されているとする。メイン関数２０１は、共有ライブラリ２５を直接利用し、又は、クラス２０２内の関数を介して共有ライブラリ２５を利用している。
【００２８】
図５は、共有ライブラリ２５の概略構成説明図である。
【００２９】
共有ライブラリ２５は、複数のアプリケーションで共通に利用される関数群（クラスのメソッド群）２５０と、関数群２５０を利用可能にするための前処理関数２５１（Ｐｒｅｐｒｏｃｅｓｓ）と、前処理関数２５１の処理結果を示す変数２５２（Ｖａｌｉｄ）とを備えている。
【００３０】
図６は、関数群２５０のそれぞれの関数の動作概要を示すフローチャートである。
【００３１】
（Ｓ１０）変数ＶａｌｉｄがｔｒｕｅであればステップＳ１１へ進み、そうでなければステップＳ１２へ進む。
【００３２】
（Ｓ１１）この関数の本来の処理を実行し、リターンする。これにより、この関数の機能が実現される。
【００３３】
（Ｓ１２）例外を投げる（組込のthrow関数を実行する）ことにより、異常終了させる。
【００３４】
したがって、ステップＳ１１を実行させるためには、初期値がｆａｌｓｅの変数Ｖａｌｉｄを、ｔｒｕｅにしておく必要がある。これは、図５の前処理関数２５１で行われる。
【００３５】
図７は、前処理関数２５１の動作を示す概略フローチャートである。
【００３６】
（Ｓ２０）所定ディレクトリ内、例えば共有ライブラリ２５を含むディレクトリ内に存在する各ファイル名を順次読み取りながら、開発者Ｍが付けた所定ファイル名のライセンスファイル３１を探索する。
【００３７】
（Ｓ２１）ライセンスファイル３１が存在すればステップＳ２２へ進み、そうでなければリターンする。換言すれば、ライセンスファイル３１が存在しなければ、変数Ｖａｌｉｄはｆａｌｓｅのままである。
【００３８】
（Ｓ２２）ライセンスファイル３１の内容、すなわち固有情報を復号し、これをＵとする。この復号において、ステップＳ１で入力したパスワードを復号キーとして用いる。したがって、このパスワードを直接又はその保存場所を、前処理関数２５１に組み込んでおくか、前処理関数２５１に引き渡すようにしておく。
【００３９】
（Ｓ２３）共有ライブラリ２５の呼出元側から、固有情報Ｕの要素である所定情報ｕを探索し取得する。すなわち、このアプリケーション２０をバイナリデータとみなし、これに所定情報ｕが含まれているか否かを調べ、存在すれば、これを保持する。
【００４０】
（Ｓ２４）所定情報ｕが固有情報Ｕの要素であればステップＳ２５へ進み、そうでなければリターンする。この判定の前に、所定情報ｕと固有情報Ｕの形式を統一しておく。例えば、固有情報Ｕがテキストで所定情報ｕがテキストに対応したバイナリコードである場合、固有情報Ｕをテキストに対応したバイナリコードに変換するか、所定情報ｕをバイナリコードに対応したテキストに変換しておく。
【００４１】
（Ｓ２５）変数Ｖａｌｉｄにｔｒｕｅを代入し、リターンする。
【００４２】
図４に戻って、メイン関数２０１は、最初に前処理関数２５１を呼び出すことにより、変数Ｖａｌｉｄの値を確定する。その後、共有ライブラリ２５内の関数を呼び出すと、図６の処理により、変数Ｖａｌｉｄがｔｒｕｅの場合のみその関数による処理が実行される。
【００４３】
図８は、メイン関数２０１による処理を示す概略フローチャートである。
【００４４】
（Ｓ３０）前処理関数２５１を呼び出して、変数Ｖａｌｉｄを確定する。
【００４５】
（Ｓ３１）共有ライブラリ２５内の関数群２５０内の関数を呼び出す。変数Ｖａｌｉｄがｔｒｕｅであればその本体部が実行され、そうでなければ例外が投げられて異常終了する。
【００４６】
ステップＳ３２においても、ステップＳ３１と同様である。
【００４７】
このようにして、ライセンスファイル３１により開発者Ｍが許可したアプリケーション２０〜２４のみで、共有ライブラリ２５が利用可能となり、共有ライブラリ２５の不正使用が防止される。
【００４８】
以上において、本発明の好適な実施例を説明したが、本発明には他にも種々の変形例が含まれ、上記各構成要素の機能を実現する他の構成を用いたもの、当業者であればこれらの構成又は機能から想到するであろう他の構成も、本発明に含まれる。
【００４９】
例えば、各アプリケーションに含まれる複数のデータの組み合わせを所定情報とし、開発者がアプリケーションに組み込んだ乱数を所定情報とし、又は、アプリケーションに含まれる画像データから抽出した一部データを所定情報とし、複数のアプリケーションのそれぞれの所定情報の集合を固有情報としてもよい。また、所定情報は、将来開発予定のアプリケーションのものを含んでいてもよい。
【符号の説明】
【００５０】
１０  ＰＣ
１１  ＣＰＵ
１２  インターフェイス
１３  ＰＲＯＭ
１４  ＤＲＡＭ
１５  補助記憶装置
１６  ネットワークインターフェイス
１７  入力装置
１８  表示装置
２０〜２４  アプリケーション
２５  共有ライブラリ
３０  固有情報
３１  ライセンスファイル
２０１  メイン関数
２０２  クラス
２５０  関数群
２５１  前処理関数
２５２  変数Ｖａｌｉｄ
Ｍ  開発者
【図１】
2014167718.tif 000003
【図２】
2014167718.tif 000004
【図３】
2014167718.tif 000005
【図４】
2014167718.tif 000006
【図５】
2014167718.tif 000007
【図６】
2014167718.tif 000008
【図７】
2014167718.tif 000009
【図８】
2014167718.tif 000010