(57)【要約】      （修正有）【課題】簡単な構成又は手続きでソフトウェアの不正使用を防止する。【解決手段】モジュールＭ１の暗号化では、これを、汎用のファイル圧縮ソフトウェアにより圧縮して、圧縮モジュールＭ１Ａを生成し、その先頭から第（ｐ＋ｑ＋１）〜第（ｐ＋ｑ＋ｒ）バイトのコードＸを読み取り、このコードＸを所定の規則でモディファイし、圧縮モジュールＭ１Ａの第１〜ｐバイトと、ｒバイト長のコードＸ及び圧縮モジュールＭ１Ａの第（ｐ＋１）〜最終バイトを書き込む。復号化では、暗号化モジュールの第１〜ｐバイト及び第（ｐ＋ｒ＋１）〜最終バイトを順に読み出してファイルに書き込み、汎用の解凍ソフトウェアによりこのファイルを解凍してモジュールＭ１を生成する。【選択図】図３
2005310182.tif 000002
【特許請求の範囲】
【請求項１】
暗号化された第１ファイルを複号化して、実行ファイルである第２ファイルを生成し、該第２ファイルをインストールするインストーラが記憶された記憶媒体において、
該第１ファイルには、所定領域に無意味なデータが挿入されており、該第１ファイルから該無意味なデータを削除した第３ファイルは、該第２ファイルの圧縮ファイルとなっており、
該インストーラは、該第１ファイルから該無意味なデータを削除して第３ファイルを生成し、該第３ファイルを解凍することにより、該第２ファイルを生成するプログラムを有する
ことを特徴とする記憶媒体。
【請求項２】
暗号化された実行ファイルが記憶された記憶媒体において、
該実行ファイルは、暗号化されていない実行ファイルを圧縮し、該圧縮された実行ファイルの所定領域に無意味なデータを挿入したものである
ことを特徴とする記憶媒体。
【請求項３】
前記無意味なデータは、前記圧縮された実行ファイルの所定領域のデータに所定の演算を施したものに等しい
ことを特徴とする請求項２記載の記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア不正使用防止機能を備えた記憶媒体に関する。
【背景技術】
【０００２】
ソフトウェアの不正使用は、ソフトウェア会社の存立に関わるので、各種の不正使用防止方法が提案されている。
【０００３】
下記特許文献１では、ソフトウェアの製品版を暗号化し、暗号化していない試用版と共にＣＤＲＯＭに記録し、これを無料配布しておき、試用版を実行して気に入ったら、ソフトウェア販売会社のベンダーコンピュータにユーザコンピュータを電話回線で接続して注文し、パスワードを受信し、暗号化ソフトウェアを複号して通常のコードに戻す。
【０００４】
詳説すれば、ユーザは、マシン識別コードメモリ及び暗号解読ＩＣを備えたＣＤＲＯＭ駆動装置及びＣＤＲＯＭ用システムプログラムが記録されたフロッピーディスクを購入した後、ユーザ登録葉書にユーザ情報を記入してソフトウェア販売会社に送付し、ソフトウェア販売会社は、このユーザ情報をベンダーコンピュータに登録し、ユーザへＣＤＲＯＭを無料配布する。
【０００５】
ユーザは、これらフロッピーディスク及びＣＤＲＯＭをユーザコンピュータに装着し、フロッピーディスク内のＣＤＲＯＭ用システムプログラムを起動し、処理メニューの中の購入手続き処理を実行させ、ソフトウェア注文情報をキーボードから入力する。ユーザコンピュータは、これに応答して、電話回線を介しソフトウェア販売会社のベンダーコンピュータに接続し、マシン識別コードを含むソフトウェア注文情報を送信する。
【０００６】
ベンダーコンピュータは、このソフトウェア注文情報に基づいて、販売許否判定を行い、販売を許可すると、注文したソフトウェアに対応したパスワードを、電話回線を介しユーザコンピュータへ送信する。
【０００７】
ユーザコンピュータは、このパスワードとマシン識別コードとを合成して照合用パスワードを生成し、これをＣＤＲＯＭ駆動装置内の照合用登録パスワードと比較し、両者が一致すれば、ＣＤＲＯＭ駆動装置内の暗号解読ＩＣにより、ＣＤＲＯＭ内の暗号化されたソフトウェアを複号して通常のコードに変換し、ソフトウェアを利用可能にする。
【特許文献１】特開平５−２０４９４５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、上記方法では、特別な暗号解読ＩＣが必要となるので、コスト高になる。
【０００９】
本発明の目的は、上記問題点に鑑み、簡単な構成で不正使用を防止することが可能な、ソフトウェア不正使用防止機能を備えた記憶媒体を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の第１態様では、例えば図３に示す如く、暗号化された第１ファイルＭ１Ｂを複号化して、実行ファイルである第２ファイルＭ１を生成し、該第２ファイルＭ１をインストールするインストーラが記憶された記憶媒体において、該第１ファイルＭ１Ｂには、所定領域に無意味なデータＸが挿入されており、該第１ファイルＭ１Ｂから該無意味なデータＸを削除した第３ファイルＭ１Ａは、該第２ファイルＭ１の圧縮ファイルとなっており、該インストーラは、該第１ファイルＭ１Ｂから該無意味なデータＸを削除して第３ファイルＭ１Ａを生成し、該第３ファイルＭ１Ａを解凍することにより、該第２ファイルＭ１を生成するプログラムを有する。
【００１１】
本発明の第２態様では、例えば図３に示す如く、暗号化された実行ファイルＭ１Ｂが記憶された記憶媒体において、該実行ファイルＭ１Ｂは、暗号化されていない実行ファイルＭ１を圧縮し、該圧縮された実行ファイルＭ１Ａの所定領域に無意味なデータＸを挿入したものである。
【００１２】
本発明の第３態様では、上記第２態様において、上記無意味なデータＸは、上記圧縮された実行ファイルの所定領域のデータに所定の演算、例えば定数加算を施したものに等しい。
【発明の効果】
【００１３】
上記第１態様によれば、新たな解凍ソフトウェアを開発することなく、汎用の解凍ソフトウェアを使用し、これに、第１ファイルの所定領域から無意味なデータを削除するという簡単な構成を付加することにより、ソフトウェアの不正使用を効果的に防止できる安価なインストーラを構成することができる。
【００１４】
上記第２態様によれば、汎用の圧縮ソフトウェアで実行ファイルを圧縮しても、汎用の解凍ソフトウェアで解凍できないので、簡単な構成で実行ファイルの不正使用を防止できる。
【００１５】
上記第３態様によれば、発見し難い無意味なデータを容易に作成することができる。
【００１６】
本発明の他の構成、作用及び効果は、以下の説明から明らかになる。
【発明を実施するための最良の形態】
【００１７】
以下、図面に基づいて本発明の実施例を説明する。
【実施例１】
【００１８】
図６は、不正使用防止機能を備えたコンピュータシステムの概略構成を示す。
【００１９】
ユーザコンピュータ１０は、 一般的な構成であり、プログラムに従って処理を実行するＭＰＵ１１と、ＩＰＬ等が格納されたＲＯＭ１２と、プログラム及びデータを一時格納するためのＲＡＭ１３と、各種インタフェース回路を含む入出力インタフェース１４との間が、バス１５で接続されている。入出力インタフェース１４には、キーボード１６、表示装置１７、フロッピーディスクドライバ１８、ハードディスクドライバ１９及び通信カード２０が接続されている。
【００２０】
フロッピーディスク１８１には、ベンダーから購入したアプリケーションソフトウェアが記憶されている。このアプリケーションソフトウェアは、図７に示す如く、インストーラＭ０と、モジュールＭ１〜Ｍ４とからなり、モジュールＭ１〜Ｍ４はインストーラＭ０により、図６のハードディスク１９１にインストールされる。インストーラＭ０を使用せずにモジュールＭ１〜Ｍ４をフロッピーディスク１８１からハードディスク１９１へコピーしても実行できないようにするために、モジュールＭ１〜Ｍ４はそれぞれ暗号化モジュールＭ１Ｂ〜Ｍ４Ｂにされて、フロッピーディスク１８１に記憶されている。ハードディスク１９１には、ＯＳがインストールされており、ＯＳは電源投入時にＲＡＭ１３にロードされる。通信カード２０には、ＭＰＵ１１により読み込み可能な不揮発性のマシン識別コードＭＩＤを有する。
【００２１】
通信カード２０は、通信回線２１を介してベンダーコンピュータ３０に接続され、ユーザコンピュータ１０とベンダーコンピュータ３０との間で双方向通信可能となっている。
【００２２】
［１］不正使用防止の為のインストーラ
ＲＡＭ１３にロードされたＯＳの下でインストーラＭ０を実行すると、ＯＳによりインストーラＭ０がＲＡＭ１３上にロードされ、インストーラＭ０により図１に示す処理が行われて、モジュールＭ１〜Ｍ４がハードディスク１９１へインストールされる。以下、括弧内の数値は図中のステップ識別番号を表す。
【００２３】
（４０）マシン識別コードＭＩＤを読み込み、ＲＡＭ１３に書き込む。
【００２４】
（４１）フロッピーディスク１８１上のインストーラＭ０をファイルオープンし、先頭から順次読み込み、後述のパスワードＰＷ設定領域からパスワードＰＷを読み込む。ＰＷ＝０、すなわちパスワードＰＷが設定されていなければ、ステップ４２へ進み、ＰＷ≠０であれば、ステップ４６へ進む。
【００２５】
（４２）通信回線２１を介してベンダーコンピュータ３０に接続し、ユーザ登録情報をベンダーコンピュータ３０へ送信する。ユーザ登録情報は、例えば、マシン識別コードＭＩＤ、ユーザの住所、氏名、電話番号、購入ソフトウェアの識別コード、並びに、ユーザ登録情報送信時の日付及び時間である。ユーザの住所、氏名及び電話番号は、対話的にキーボード１６から入力され、購入ソフトウェアの識別コードは予めインストーラに埋め込まれており、Ｍ０日付及び時間はＯＳから受け取る。
【００２６】
ベンダーコンピュータ３０は、以下のステップ５０〜５３の処理を実行する。
【００２７】
（５０）ユーザ登録情報を受信する。
【００２８】
（５１）ユーザ登録情報をハードディスク３０１に登録する。
【００２９】
（５２）マシン識別コードＭＩＤとＡとの間の演算、例えばＰＷ＝ＭＩＤ＋Ａを演算して、パスワードＰＷを決定する。ここに、Ａはベンダー又は上記ソフトウェア識別コードにより定まる定数であり、インストーラＭ０及びハードディスク３０１に共通に記憶されている。
【００３０】
（５３）パスワードＰＷを、通信回線２１を介しユーザコンピュータ１０に送信する。
【００３１】
（４３）ＭＰＵ１１は、パスワードＰＷを受信する。
【００３２】
（４４）フロッピーディスク１８１上のインストーラ中のパスワードＰＷの領域に、パスワードＰＷを設定する。この設定は通常、フロッピーディスク１８１上のインストーラを入力ファイルとしてＲＡＭ１３上又はハードディスクドライバ１９上に読み込み、フロッピーディスク１８１上のインストーラを削除し、ＲＡＭ１３上又はハードディスクドライバ１９上のインストーラをフロッピーディスク１８１上に出力ファイルとして書き込み、その途中でパスワードＰＷをフロッピーディスク１８１上に書き込むことにより行われる。
【００３３】
（４５）フロッピーディスク１８１上の暗号化モジュールＭ１Ｂ〜Ｍ４Ｂを、後述のように複号化してモジュールＭ１〜Ｍ４にし、目的とするソフトウェアであるモジュールＭ１〜Ｍ４をハードディスク１９１上にインストールする。
【００３４】
以上の処理により、初回インストールが完了する。このような方法によれば、初回インストールの際に、通信によりユーザ登録及びパスワードＰＷの送受が行われるので、ユーザ側及びベンダー側の手間が省ける。
【００３５】
（４６）Ａ＝ＰＷ−ＭＩＤを算出する。
【００３６】
（４７）Ａ＝ＳＡであれば、上記ステップ４５へ進む。ここに、許可値ＳＡは、インストーラＭ０に格納されている定数である。フロッピーディスク１８１上のインストーラＭ０〜Ｍ４をハードディスク１９１上にインストールした後に、フロッピーディスク１８１を他のコンピュータで使用すると、マシン識別コードＭＩＤがユーザコンピュータ１０のそれと異なるので、Ａ≠ＳＡとなり、次のステップ４８へ進む。
【００３７】
（４８）上記ステップ４２で送信するユーザ登録情報を不正使用事実（ユーザ登録情報の一部が欠落していてもかまわない。）としてベンダーコンピュータ３０へ送信する。
【００３８】
（５４、５５）ベンダーコンピュータ３０では、この不正使用事実を受信し、ハードディスク３０１に登録する。
【００３９】
（４９）ＭＰＵ１１は、罰としてハードディスク１９１上に無意味なファイルを生成し、目的とするソフトウエアが再試行によりインストールできないようにする。これは、例えば、適当なファイル名を付けた２５６バイトのファイルを、空き領域が２５６バイト未満になるまでハードディスク１９１上に繰り返し書き込むことにより行われる。このプログラムは、例えばＣ言語で、
for (;;) { if (size_256_filemake()) { continue } else { break } };
と記載される。ここに、size_256_filemake()は、適当なファイル名を付けた２５６バイトのファイルを生成する関数であり、生成が成功したら関数値１を返し、失敗したら０を変えす。
【００４０】
このような方法により、不正インストールが防止される。また、従来のような別個の注文用ソフトウェアが不要である。
【００４１】
［２］不正使用防止の為の暗号化及びファイル複号化
図２（Ａ）は、例えば図７のモジュールＭ１を暗号化モジュールＭ１Ｂにする手順を示す。図３は、図２の処理の説明図である。
【００４２】
（７０）モジュールＭ１を、汎用のファイル圧縮ソフトウェアにより圧縮して、圧縮モジュールＭ１Ａを生成し、モジュールＭ１を削除する。
【００４３】
（７１）圧縮モジュールＭ１Ａの先頭から第（ｐ＋ｑ＋１）〜第（ｐ＋ｑ＋ｒ）バイトのコードＸを読み取る。ｑは負であってもよい。図３では、ｐ＝４、ｑ＝２、ｒ＝２となっている。
【００４４】
（７２）コードＸを所定の規則でモディファイする。例えば、コードＸに定数Ｃを加算したものを新たなコードＸとする。図３では、Ｃ＝‘０１０２’である。
【００４５】
（７３〜７５）新たな出力ファイルＭ１Ｂをオープンし、これに、圧縮モジュールＭ１Ａの第１〜ｐバイトと、ｒバイト長のコードＸ及び圧縮モジュールＭ１Ａの第（ｐ＋１）〜最終バイトを書き込み、ファイル（暗号化モジュール）Ｍ１Ｂをクローズし、圧縮モジュールＭ１Ａを削除する。
【００４６】
次に、暗号化モジュールＭ１ＢをモジュールＭ１に戻す手順を説明する。
【００４７】
（８０、８１）暗号化モジュールＭ１Ｂを入力ファイルとしてオープンし、新たな出力ファイルＭ１Ａをオープンし、暗号化モジュールＭ１Ｂの第１〜ｐバイト及び第（ｐ＋ｒ＋１）〜最終バイトを順に読み出してファイルＭ１Ａに書き込み、ファイルＭ１Ｂ及びファイル（圧縮モジュール）Ｍ１Ａをクローズし、暗号化モジュールＭ１Ｂを削除する。
【００４８】
（８２）汎用の解凍ソフトウェアにより圧縮モジュールＭ１Ａを解凍してハードディスク１９１上にモジュールＭ１を生成し、圧縮モジュールＭ１Ａを削除する。
【００４９】
モジュールＭ１は‘００’のバイトを多く含んでいるが、圧縮モジュールＭ１Ａには‘００’のバイトが少ないので、Ｘ＝０になることは殆どない。ここに、‘’で囲まれた数値は１６進数であり、以下同様である。このコードＸが、‘００’でないバイトデータ中に挿入されるので、暗号化モジュールＭ１Ｂのコードを見て無意味なコードＸを捜し出すことが困難となる。
【００５０】
暗号化モジュールＭ１Ｂは、コードＸを含んでいるので汎用の解凍ソフトウェアで解凍してもモジュールＭ１を生成することができず、また、コードＸを除去する処理は、インストーラＭ０中の、図１のステップ４５で実行されるので、不正使用によりステップ４５を実行することができない。
【００５１】
したがって、従来のような特別な暗号解読ＩＣを用いることなく、かつ、新たな圧縮及び解凍のソフトウェアを開発することなく、汎用の圧縮及び解凍ソフトウェアを使用して不正使用を防止することができる。しかも、圧縮及び解凍におけるコードＸの抽出、モディファイ、挿入及び削除処理は容易であり、その処理時間は短時間である。
【００５２】
［３］不正使用防止機能を備えたロードモジュール
ハードディスク１９１上にインストールされたモジュール（実行ファイル）Ｍ１を他のコンピュータのハードディスク１９１にコピーしても使用できないようにするために、モジュールＭ１は、図４に示す如く構成されている。モジュールＭ２〜Ｍ４についてもモジュールＭ１と同様である。モジュールＭ１は、ステップ６１〜６４及び６６〜６８からなる不正使用防止部と、本体部とからなる。図４の処理は、ＯＳによりモジュールＭ１がＲＡＭ１３上にロードされた後に実行される。
【００５３】
モジュールＭ１のデータ領域では、Ｃ言語によりコメント付で例えば次のように記載されている。
struct tag {
long SP;           /*目印コードSP格納領域宣言*/
long PW;           /*パスワードPW格納領域宣言*/
char INIT;         /*初回判定値INIT格納領域宣言*/
} data {
0x02F10003;      /*目印コードSPの設定値*/
0x00000000;      /*パスワードPWの初期設定値*/
0x00;            /*初回判定値INITの初期設定値*/
}
（６０）ＩＮＩＴ＝０、すなわちモジュールＭ１の実行が初回であれば、ステップ６１へ進み、ＩＮＩＴ≠０であればステップ６６へ進む。
【００５４】
（６１）ロードモジュールＭ１自体のデータ領域中の目印コードＳＰを、検索ルーチンにより検索する。目印コードＳＰは、これを基準とする所定相対位置にパスワードＰＷ及び初回判定値ＩＮＩＴが存在することを示すものである。目印コードＳＰは、例えば図５に示す如く、４バイトのデータ‘０２Ｆ１０００３’であって、目印コードＳＰの次に４バイトのパスワードＰＷが配置され、パスワードＰＷの次に１バイトの初回判定値ＩＮＩＴが配置されている。
【００５５】
このような目印コードＳＰを用いることにより、各モジュールＭ１のプログラマーは、モジュールＭ１中のデータ領域の任意の位置に任意の目印コードＳＰを配置でき、この位置に相対的な位置にパスワードＰＷ及び初回判定値ＩＮＩＴを配置することが可能となり、複数のモジュールの全てについてパスワードＰＷ及び初回判定値ＩＮＩＴの位置を見破ることが困難となる。
【００５６】
ステップ６１は、Ｃ言語によりコメント付で例えば次のように記載される。
【００５７】
if (data.INIT == 0) {  /*初回起動時のみ次の検索サブルーチンを実行*/
own_LMfile_serch_and_change(data.SP);  /*検索サブルーチン*/
}
検索サブルーチンの内容は省略する。
【００５８】
（６２）パスワードＰＷを、手動的又は自動的に入力する。例えば、インストール直後に、インストールされたソフトウェアを必ず実行し、図１のステップ４３でＲＡＭ１３又はハードディスクドライバ１９に書き込まれたパスワードＰＷを、モジュールＭ１の実行中に読み出すことにより、パスワードＰＷを自動入力する。または、モジュールＭ１の実行中に、ユーザにパスワードＰＷの入力を表示装置１７で促し、キーボード１６から入力されたパスワードＰＷを読み取る。得られたパスワードＰＷを、上記データ領域のパスワード格納位置に書き込むことにより、パスワードＰＷの上記初期設定値0x00000000を例えば0x1234568に書き換える。この処理は、モジュールＭ１の初回実行の際のみ行われる。
【００５９】
（６３）上記データ領域の初回判定値格納位置に‘１’を設定する。これにより、上記初回判定値ＩＮＩＴの初期設定値0x00が0x01に書き換えられる。
【００６０】
（６４）ハードディスク１９１上のモジュールＭ１中の初回判定値ＩＮＩＴ及びパスワードＰＷの位置に、それぞれ前記初回判定値ＩＮＩＴ及びパスワードＰＷの値を設定する。この設定は通常、ハードディスク１９１上のモジュールＭ１を入力ファイルとして読み込み、ハードディスク１９１上のモジュールＭ１を削除し、モジュールＭ１中の初回判定値ＩＮＩＴ及びパスワードＰＷの位置にそれぞれ初回判定値ＩＮＩＴ及びパスワードＰＷの値を書き込んだモジュールＭ１をハードディスク１９１上に新たに作成することにより行われる。
【００６１】
（６５）ロードモジュール本体部を実行してモジュールＭ１の初回処理を終了する。
【００６２】
（６６）通信カード２０のマシン識別コードＭＩＤを読み出す。
【００６３】
（６７）式Ａ＝ＰＷ−ＭＩＤによりＡを算出する。
【００６４】
（６８）Ａ＝ＳＡであれば上記ステップ６５を実行し、Ａ≠ＳＡであればモジュールＭ１の処理を終了する。
【００６５】
上記ステップ６１〜６４は、Ｃ言語によりコメント付で例えば次のように記載される。
【００６６】
以上のような構成のモジュールＭ１〜Ｍ４によれば、ハードディスク１９１上にインストールされたモジュールＭ１〜Ｍ４を他のコンピュータのハードディスクにコピーしても使用できなくなる。また、目印コードＳＰ、パスワードＰＷ及び初回判定値ＩＮＩＴをロードモジュール中のデータ領域の任意の１箇所に挿入すればよく、従来のように各種条件下で実行の際に必ず出会うようにロードモジュールに多数の資格検証トリガを挿入する必要がない。また、目印コードＳＰはプログラム毎に任意の値にすることができる。
【００６７】
なお、本発明には外にも種々の変形例が含まれる。
【００６８】
例えば、マシン識別コードＭＩＤはユーザコンピュータ１０の機種であってもよく、インストーラＭ０において、メニューでユーザコンピュータ１０の機種を入力させ、ＲＯＭ１２上の、機種に応じたアドレスからマシン識別コードＭＩＤを読み取る構成であってもよい。
【００６９】
また、図４のステップ６７において、モジュールＭ１により異なるパスワードＰＷを用いる構成であってもよい。
【００７０】
図２及び図４の構成は、モジュールＭ１〜Ｍ４のうち１つ、例えば最初に実行されるモジュールのみに関するものであってもよい。
【００７１】
また、パスワードＰＷは、所定の規則で暗号化しておいて、モジュールＭ０〜Ｍ４の実行により複号化する構成であってもよい。
【００７２】
図１において、ステップ４４からステップ４５へ進まずにインストーラの処理を終了し、２回目以降インストーラを実行したときにステップ４７からステップ４５へ進んでインストールを実行する構成であってもよい。この点は、図４においても同様であり、ステップ６４からステップ６５へ進まずに処理を終了し、２回目以降モジュールを実行したときにステップ６８からステップ６５へ進んでモジュール本体部を実行する構成であってもよい。
【図面の簡単な説明】
【００７３】
【図１】不正使用防止機能を備えたインストーラを示すフローチャートである。
【図２】不正使用防止のためのファイル暗号化手順及びファイル複号化手順を示すフローチャートである。
【図３】図２の処理の説明図である。
【図４】不正使用防止機能を備えたロードモジュールを示すフローチャートである。
【図５】パスワード及び初回判定値のファイル内挿入位置説明図である。
【図６】不正使用防止機能を備えたコンピュータシステムの概略ブロック図である。
【図７】ソフトウェアパッケージの概略説明図である。
【符号の説明】
【００７４】
１０    ユーザコンピュータ
２１    通信回線
３０    ベンダーコンピュータ
１８１    フロッピーディスク
１９１、３０１    ハードディスク
ＭＩＤ    マシン識別コード
Ｍ１〜Ｍ４、Ｍ１    モジュール
Ｍ１Ｂ    暗号化モジュール
【図１】
2005310182.tif 000003
【図２】
2005310182.tif 000004
【図３】
2005310182.tif 000005
【図４】
2005310182.tif 000006
【図５】
2005310182.tif 000007
【図６】
2005310182.tif 000008
【図７】
2005310182.tif 000009