(57)【要約】【課題】ソフトウェア・コピー元の識別を可能にする。【解決手段】（ａ）ソース・コードをコンパイルし第１のデータ構造を有する実行可能ファイルを生成しコンパイルされる度に第１のデータ構造が実現され、（ｂ）コンパイルされた実行可能ファイル内の所定数のデータ要素の位置を再構成し第１のデータ構造とは異なる第２のデータ構造を有する実行可能ファイルを生成し、（ｃ）再構成位置に従ってファイル内のアドレス・データを編集し第１のデータ構造を有するコンパイルされた実行可能ファイルと同じ方法で機能する第２のデータ構造を有する実行可能ファイルを生成する、ステップを含む方法。【選択図】図５
2006318464.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ要素を含むコンパイルされた実行可能ファイルを電子的に修正する方法であって、
（ａ）ソース・コードをコンパイルし、前記ソース・コードに対応する第１のデータ構造を有するコンパイルされた実行可能ファイルを生成し、該ソース・コードをコンパイルする度に前記第１のデータ構造が実現されるようにし、
（ｂ）前記コンパイルされた実行可能ファイル内の所定数のデータ要素の位置を再構成し、前記第１のデータ構造とは異なる第２のデータ構造を有するコンパイルされたファイルを生成し、
（ｃ）前記再構成された位置に従って、前記第２のデータ構造を有する前記コンパイルされたファイル内のアドレス・データを編集し、前記第１のデータ構造を有する前記コンパイルされた実行可能ファイルと同じ方法で機能する、第２のデータ構造を有するコンパイルされた実行可能ファイルを生成する、
ステップを含むことを特徴とする方法。
【請求項２】
複数のデータ要素を含むコンパイルされた実行可能ファイルを電子的に修正する方法であって、
（ａ）ソース・コードのコンパイル中に所定数のデータ要素の位置を再構成し、所定数のデータ要素の前記位置を再構成することなく同じソース・コードをコンパイルするときに実現され、かつ、再構成することなく前記ソース・コードがコンパイルされる度に実現される第１のデータ構造とは異なる第２のデータ構造を有するコンパイルされたファイルを生成し、
（ｂ）前記再構成された位置に従って、前記コンパイルされたファイル内のアドレス・データを編集し、第１のデータ構造を有するコンパイルされた実行可能ファイルと同じ方法で機能する、第２のデータ構造を有するコンパイルされた実行可能ファイルを生成する、
ステップを含むことを特徴とする方法。
【請求項３】
複数のデータ要素を含むコンパイルされた実行可能ファイルのデータ構造を電子的に修正する方法であって、
（ａ）コンパイル前にソース・コード内のテキスト文字列の位置を再構成し、
（ｂ）前記再構成されたソース・コードをコンパイルし、第２のデータ構造を有するコンパイルされた実行可能ファイルを生成する、
ステップを含み、
第１のデータ構造は、ソース・コード内の前記テキスト文字列の前期位置を再構成することなく、同じソース・コードをコンパイルするときに実現され、かつ、再構成することなく前記ソース・コードをコンパイルする度に実現されることを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明発明は、例えば、実行可能コードのコピーについての固有の識別を生成する方法及びその管理に関する。
【背景技術】
【０００２】
ソフトウェアの著作権侵害は、重要な問題である。人々がソフトウェア及び他の類似した電子ファイルを違法にコピーするのを防止することは非常に困難である。この問題の一部は、ソフトウェア又は電子ファイルの特定のコピーを固有に識別することの難しさである。ここに説明されるのは、ほぼ消去不能な方法で、ソフトウェア・ファイルのコピーを固有に識別する方法である。
【０００３】
ソフトウェアが販売されると、ソフトウェアは、ＣＤ−ＲＯＭ（又は類似したディスク・ベース技術）或いは電子ファイルのダウンロードを介して配布することができる。オペレーティング・システム又は主要アプリケーションのような大量生産品があるときには、ＣＤ−ＲＯＭを用いることができる。電子ファイルのダウンロードを用いて、更新又はパッチを配布することができる。場合によっては、電子ダウンロードを介して、アプリケーション全体を配布することもできる。
ソフトウェア・コードが、デジタル・コンピュータ上で実行できる形態に準備又はコンパイルされるとき、該ソフトウェア・コードは、実行可能ソフトウェア・ファイルに変換される。実行可能ソフトウェア・ファイルの例が、図１に示される。
【０００４】
図１に示されるように、従来の実行可能ソフトウェア・ファイルは、データ・セクション１００及びコード・セクション２００を含む。データ・セクション１００は、データ位置１１０、１２０、１３０、及び１４０を含む。コード・セクション２００内の命令２１０、２２０、２３０、及び２４０によって、データ位置１１０、１２０、１３０、及び１４０を参照することができる。
【０００５】
従来より、コード・セクション２００は、サブルーチン３００及び３１０も含む。コード・セクション２００内のサブルーチン３００及び３１０は、オペランド１１００、１２００、１３００、及び１４００内に格納されたアドレスに配置されたデータについての操作を行うために、それぞれオペランド１１００、１２００、１３００、及び１４００を通してアドレス位置を参照できる命令２１０、２２０、２３０、及び２４０から構成される。より具体的には、図１に示されるように、オペランド１１００、１２００、１３００、及び１４００は、それぞれデータ位置１１０、１２０、１３０、及び１４０についてのアドレス値を格納する。命令２１０、２２０、２３０、及び２４０は、これらのサブルーチンを実行させるために、他のサブルーチンの開始アドレスを参照することもできる。
【０００６】
従来より、ソフトウェア・ファイルの各要素は、そのソフトウェア・ファイル内の特定の位置にある。このことは、上述の要素の各々を異なる位置で示すことによって、図１に象徴される。実行のためにデジタル・コンピュータのメモリにロードされた後も、実行可能ソフトウェア・ファイル内のソフトウェア・ファイルの中の他の品目に対する各品目の相対的位置は、同じままである。アドレス１１０、１２０、１３０、及び１４０の各々は、１つの位置だけを表し、サブルーチン３００及び３１０は、１つより多い連続的位置を含む。
【０００７】
従来の実行可能ソフトウェア・ファイルの第１のエントリ・ポイント２５０は、デジタル・コンピュータが実行可能ソフトウェア・ファイルの命令を実行し始めるときに実行されることになる第１の命令の位置である。この第１のエントリ・ポイント２５０は、従来より、実行可能ソフトウェア・ファイルの第１の位置又はほぼ第１の位置である。
ここで図２を参照すると、命令４１０に少なくとも１つのオペランドが続く。図２においては、２つのオペランド４２０及び４３０が示されている。従来より、オペランドの数は、オペランドに先行する命令のアイデンティティによって変わる。
【０００８】
再び図１を参照すると、ソフトウェア・ファイルが実行されると、第１のエントリ・ポイント２５０内に配置された命令で開始する命令が実行される。この命令は、次の命令に、「ジャンプ」命令に隣接していない位置から読み込ませる「ジャンプ」命令を含むことができる。図１は、データ・セクション１００及びコード・セクション２００に分けられた実行可能ソフトウェア・ファイルを示すが、サブルーチン３００及び３１０、並びにアドレス位置１１０、１２０、１３０、及び１４０は、実行可能ソフトウェア・ファイル内のどこにでも常駐することができ、混合することができる。しかしながら、各々のサブルーチン３００及び３１０は、１つより多い連続的位置を含むので、の分割することができず、完全な状態のままにしなければならない。
【０００９】
再び図２を参照すると、命令４１０のオペランド４２０及び４３０は、データを含むことができ、すなわち、従来の実行可能ソフトウェア・ファイル内のアドレス位置を含むことができる。実行可能ソフトウェア・ファイルのオペランド４２０及び４３０内のアドレスは、実行可能ソフトウェア・ファイル内の位置だけに関連している。実行可能ソフトウェア・ファイルがデジタル・コンピュータのメモリにロードされるまで、オペランド４２０及び４３０内のアドレスは、デジタル・コンピュータのメモリ内の物理的位置に関連していない。
従来の実行可能ソフトウェア・ファイルがメモリにロードされる時に、デジタル・コンピュータは、「リンク編集」として知られている操作を実行しなければならない。言い換えれば、実行可能ソフトウェア・ファイルであるデジタル・コンピュータのメモリ内の物理的位置を参照するように、実行可能ソフトウェア・ファイル内の別の位置への参照を含む、実行可能ソフトウェア・ファイル内の全ての位置を修正しなければならない。
【００１０】
図１を参照すると、デジタル・コンピュータ内の従来の「リンク編集」プログラムが、第１のエントリ・ポイント２５０の物理的開始アドレスを決定する。同じ「リンク編集」プログラムはまた、実行可能ソフトウェア・ファイル内の全てのアドレス参照をその変位だけインクリメントする。例えば、デジタル・コンピュータ内の従来の「リンク編集」プログラムが、値「４００」を有する物理的開始アドレスとなるように第１のエントリ・ポイント２５０の物理的開始アドレスを決定する場合には、オペランド１１００、１２００、１３００、及び１４００内の全ての値も、これらのオペランドがアドレス参照を含むならば「４００」だけインクリメントされる。
【００１１】
「リンク編集」を実行するデジタル・コンピュータ内のプログラムは、第１のエントリ・ポイント２５０内の命令で開始する、実行可能ソフトウェア・ファイル内の命令の実行経路に従うことによって、どの位置がアドレスを含むかを判断することができる。上述のように、アドレス参照を含み得る実行可能ソフトウェア・ファイル内の場所だけが、命令のオペランドである。命令のアイデンティティが、ある場合には、どのオペランドがアドレス参照でなければならないかを判断する。
実行されることになる次の命令は、現在の命令のオペランドの後に配置されるか、又は現在の命令のオペランドの１つによって参照される相対的アドレス内に配置されるので、実行可能ソフトウェア・ファイル内の命令の実行経路は、「リンク編集」を実行するプログラムによって決定することができる。従来のリンク編集方法はまた、ある条件に基づいた実行経路に従うこともできる。こうしたアルゴリズムの詳細は、ここでは説明されない。デジタル・コンピュータが実行可能ソフトウェア・ファイルを成功裏にロードし、実行するために、適切に機能するリンク編集プログラムが必要とされる。
【００１２】
上述の概念を用いるとき、全く同じであるか、又は特定の所定位置内の情報を変えた実行可能ファイルを生成することが可能である。特定の所定位置内の情報を変えることによって、ソフトウェアの配布者は、ソフトウェアを使用可能にするためにユーザが入力する必要があるシリアル番号又は情報の他の部分（キー）を、実行可能なファイルに組み込むことができる。
上述の変形は、特定の所定位置に制約されるので、ソフトウェアの著作権侵害者が、特定の所定位置を容易に確認することが可能であり、よって、ソフトウェアの著作権侵害者は、特定の所定位置に関連した情報を容易に隠してシリアル番号を消すか、又はアプリケーション内に構築された何らかのコピー保護の操作を妨げることができる。シリアル番号領域が消された場合には、どのようにソフトウェアが違法に得られたかを判断することはできない。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
したがって、ソフトウェア・コピー元の識別を可能にする方法を提供することが望ましい。さらに、隠すこと又は消すことが困難な、ソフトウェア・コピー元の識別を可能にする方法を提供することが望ましい。
【発明を実施するための最良の形態】
【００１４】
上述のように、ソフトウェア・コードが、デジタル・コンピュータ上で実行できる形態に準備又はコンパイルされるとき、該ソフトウェア・コードは、データ・セクション及びコード・セクションを含む実行可能ソフトウェア・ファイルに変換される。データ・セクションは、アドレス位置を含み、このアドレス位置は、アドレスに含まれるデータについての操作を行うために、コード・セクション内の命令によって参照することができる。
同じく上述のように、従来より、実行可能ソフトウェア・ファイルの各要素は、そのソフトウェア・ファイル内の特定の位置にある。実行可能ソフトウェア・ファイル内のソフトウェア・ファイル内の他の品目に対する各品目の相対的位置は、各品目がコンパイルされた後も同じままである。
【００１５】
より具体的には、従来より、実行可能ソフトウェア・ファイルにコンパイルされたプログラムは、定められたバイト・シーケンスを有し、従来の環境下では変わらない。プログラムは、プログラム言語で書き込むことができ、変数、データ要素、及び／又は命令を含むことができる。コンパイラは、プログラムを、ロード可能なフォーマットを有する静的実行可能ソフトウェアに変換する。静的とは、バイト・シーケンスが定められ、非変数であることを意味し、ロード可能なフォーマットとは、実行可能ソフトウェア・ファイルが、実行のためにメモリへのロードを容易にするフォーマットであることを意味する。プログラムが、ロード可能にフォーマットされた静的実行可能ソフトウェア・ファイルにコンパイルされた後、適切な配布のために、このファイルをＣＤ−ＲＯＭに書き込むか、又は適切な配布のために電子的に送信することができる。
【００１６】
前述のように、ロード可能にフォーマットされた静的実行可能ソフトウェア・ファイルは、デジタル・コンピュータによって実行のためにファイルをメモリにロードするとき、デジタル・コンピュータの「リンク編集」プログラムによって用いられる。ロード可能なフォーマットは、オペレーティング・システムによって、場合によっては、プログラム言語によって変わることがある。ロード可能にフォーマットされた静的実行可能ソフトウェア・ファイルは、実行されることになる機械命令を特定する方法、及びプログラムを構成する変数及びサブルーチンを（メモリに）配置する方法を提供する。
【００１７】
上述のように、ソフトウェア・コピー元の識別を可能にする方法、及び／又は、ソフトウェア・コピー元の識別を隠す又は消すのを困難にする方法を提供することが望ましい。こうした方法により、ロード可能にフォーマットされた静的実行可能ソフトウェア・ファイルの各々の実際のデータ構造の固有の配置が生成される。言い換えれば、ロード可能にフォーマットされた静的実行可能ソフトウェア・ファイル内の種々の要素の位置は、ソフトウェア・コピー元を識別する固有のランドスケープを生成する。さらに、ロード可能にフォーマットされた静的実行可能ソフトウェア・ファイルの機能を破壊することなく、この固有のデータ構造ベース・シグニチャを変えることは困難である。
【００１８】
ソフトウェア・コピー元の識別を可能にし、及び／又は、ソフトウェア・コピー元の識別を隠す又は消すのを困難にするように、ソフトウェア・ファイルのためのデータ構造の固有の構成の生成をより良く説明するために、次の簡単なプログラムを用いる。
変数
メッセージ１：文字列；
メッセージ２：文字列；
メッセージ３：文字列；
ＭａｋｅＭｅｓｓａｇｅ手順；
開始
メッセージ１：＝‘Ｈｅｌｌｏ’；
メッセージ２：＝‘Ｗｏｒｌｄ’；
メッセージ３：＝メッセージ１＋’‘＋メッセージ２；
終了；
開始
ＭａｋｅＭｅｓｓａｇｅ
終了
【００１９】
ロード可能にフォーマットされた実行可能ソフトウェア・ファイルのデータ構造が静的であるので、上に与えられたような簡単なプログラムをコンパイルし、実行することにより、常に、値「Ｈｅｌｌｏ  Ｗｏｒｌｄ」を有する変数メッセージ３がもたらされる。しかしながら、メッセージ１及びメッセージ２と関連したソース・コードを異なる順序でコンパイラに提供することによって、或いは、コンパイル中又はコンパイル後に機械コードを再構成することによって、コンパイル中にメッセージ１及びメッセージ２の位置が逆にされた場合、異なるものであるが、機能が同一である実行可能ソフトウェア・ファイルが生成される。
【００２０】
より具体的には、コンパイラがメッセージ１及びメッセージ２を逆の順序で受け取った場合、ロード可能にフォーマットされた実行可能ソフトウェア・ファイルのデータ構造は、メッセージ１と関連した元のデータがメッセージ２の元のアドレスに配置され、メッセージ２と関連した元のデータがメッセージ１の元のアドレス位置に配置されるという点で、元の構造とは異なる。こうした状況において、メッセージ１及びメッセージ２のアドレス位置がコンパイラによって逆にされたので、新しくコンパイルされたプログラムは、「Ｗｏｒｌｄ  Ｈｅｌｌｏ」と出力する。さらに、コンパイル中又はコンパイル後、メッセージ１及びメッセージ２と関連した機械コードが位置を変えたとき、新しくコンパイルされたプログラムは、「Ｗｏｒｌｄ  Ｈｅｌｌｏ」と出力する。
【００２１】
生成されたロード可能にフォーマットされた実行可能ソフトウェア・ファイルの分析により、メッセージ１及びメッセージ２と関連したデータについてのアドレス位置を明らかにされ得ることが留意される。言い換えれば、第１の位置にメッセージ１及びメッセージ２と関連したデータを有する、生成されたロード可能にフォーマットされた実行可能ソフトウェア・ファイルは、逆の位置にメッセージ１及びメッセージ２と関連したデータを有する、生成されたロード可能にフォーマットされた実行可能ソフトウェア・ファイルとは異なる実行可能ソフトウェア・ファイルのデータ構造を有する。このように、コンパイル前、コンパイル中、又はコンパイル後に、実行可能ソフトウェア・ファイル内の異なる要素の位置を再構成することによって、実行可能ソフトウェア・ファイルの固有データ構造を生成することができる。この実行可能ソフトウェア・ファイルの固有データ構造は、実行可能ソフトウェア・ファイルについての固有の識別タグを提供することができる。
【００２２】
コンパイル前、コンパイル中、又はコンパイル後に、実行可能ソフトウェア・ファイル内の異なる要素の位置を再構成することによって、実行可能ソフトウェア・ファイルの固有データ構造を生成することができる。しかしながら、これがコンパイル後に行われる場合には、そのまま放置すると出力又は機能が破壊される。コンパイル後に実行可能ソフトウェア・ファイル内の異なる要素の位置を再構成することによる破壊は、変更の全てを追跡し、次にロード可能にフォーマットされた実行可能ソフトウェア・ファイル内の再構成された位置の識別と関連した元のデータを編集し、生成された新しい位置を反映させることによって解決することができる。言い換えれば、位置の変更を追跡し、再構成された位置（アドレス値）の識別と関連した元のデータを更新し、ロード可能にフォーマットされた実行可能ソフトウェア・ファイルのデータ構造内の変更を反映させる場合には、機能に悪影響を及ぼすことなく、ロード可能にフォーマットされた実行可能ソフトウェア・ファイル内の種々の要素の位置を再構成することができる。
【００２３】
ランダム・アルゴリズム、又は所定の所望数のロード可能にフォーマットされた実行可能ソフトウェア・ファイルの固有データ構造を生成する所定のアルゴリズムによって、位置の変更を管理できることが留意される。
ロード可能にフォーマットされた実行可能ソフトウェア・ファイル内の要素を再構成することによって構成された実行可能ソフトウェア・ファイル・データ構造の例が、図３で示される。以下の説明において、図１は、従来のコンパイルからの実行可能ソフトウェア・ファイル・データ構造を示すと考えられる。
【００２４】
図３に示されるように、コンパイル後に、サブルーチン３１０、３２０、及びデータ１１０、１２０、１３０、１４０が、実行可能ソフトウェア・ファイル内で再構成された。サブルーチン３００及び３１０内の命令２１０、２２０、２３０、及び２４０によって、データ位置１１０、１２０、１３０、及び１４０を参照することができる。前述のように、サブルーチン３００及び３１０は、オペランド１１００、１２００、１３００、及び１４００内に格納されたアドレスに配置されたデータについての操作を行うために、それぞれオペランド１１００、１２００、１３００、及び１４００を通してアドレス位置を参照できる命令２１０、２２０、２３０、及び２４０から構成される。より具体的には、図３に示されるように、オペランド１１００、１２００、１３００、及び１４００は、それぞれデータ位置１１０、１２０、１３０、及び１４０についてのアドレス値を格納する。命令２１０、２２０、２３０、及び２４０は、これらのサブルーチンを実行させるために、他のサブルーチンの開始アドレスを参照することもできる。
【００２５】
図３のソフトウェア・ファイルの各要素は、図１に示される位置とは異なるソフトウェア・ファイル内の特定の位置にあるが、図１及び図３のソフトウェア・ファイルは、同一の機能を有する実行可能ファイルを表す。図１と同様に、図３において、実行のためにデジタル・コンピュータのメモリにロードされた後も、実行可能ソフトウェア・ファイル内のソフトウェア・ファイルの中の他の品目に対する各品目の相対的位置は、同じままである。アドレス１１０、１２０、１３０、及び１４０の各々は、１つの位置だけを表し、サブルーチン３００及び３１０は、１つより多い連続的位置を含む。サブルーチン３００及び３１０は分割されないが、完全な状態のままであることが留意される。
【００２６】
このように、図１及び図３に示されるように、実行可能ソフトウェア・ファイルのデータ構造は、異なった固有のものである。
図５−図７は、これらの実行可能ソフトウェア・ファイル・データ構造がどうのように実現されるかについて、より総合的理解を提供するために用いられる。
【００２７】
図５は、対応する同じ実行可能ソフトウェア・ファイルを生成するためであるが、各々が固有データ構造を有する、コンパイルされた機械コードの再構成を示すフローチャートである。最初に、図５に示されるように、Ｓ８００において、コンパイルされた機械コードのファイルを受け取る。Ｓ８１０において、コンパイルされた機械コードのファイル内の種々の要素が再構成される。ランダム・アルゴリズム、又は、所定の所望数のロード可能にフォーマットされた実行可能ソフトウェア・ファイルの固有データ構造を生成する所定のアルゴリズムによって、要素の位置の再構成又は変更を管理できることが留意される。
Ｓ８２０において、コンパイルされた機械コードのファイル内の種々の要素の再構成が追跡され、現在各要素が位置する場所の記録が知られる。Ｓ８３０において、この追跡された情報を用いて、コンパイルされた機械コード内のアドレス・データを編集し、追跡された変更を反映させる。
【００２８】
例えば、データ位置が、最初は、コンパイル後にアドレス「５００」に配置される予定になっていたが、要素が再構成された後にアドレス「７５０」に移動された場合には、コンパイルされたもののうち「５００」に等しい元のアドレス・データを編集し、新しい位置「７５０」を反映させる。このように、変更を追跡することによって、コンパイルされた機械コードを編集し、再構成された種々の要素の新しい位置に対応する正しいアドレス・データを提供することができる。
コンパイルされた機械コードが編集され、再構成された種々の要素の新しい位置に対応する正しいアドレス・データを提供すると、Ｓ８４０において、再構成され、編集されたコンパイルされたコードは、ＣＤ−ＲＯＭのような物理的媒体、或いはネットワークのような通信媒体によって配布する準備が整う。
【００２９】
この方法を用いるとき、配布者は、各々が全く同じに機能するが、各々が基礎となる固有データ構造を有する、多数のソフトウェア・プログラムのコピーを生成できる。この固有データ構造を用いて、ソフトウェアの各コピーについて別個の固有識別情報を提供することができる。
実行可能ソフトウェア・ファイルの固有データ構造を生成する際、実行可能ソフトウェア・ファイルの固有データ構造において、チェックサム生成ルーチン又は他のアルゴリズムを行い、その実行可能ソフトウェア・ファイルを表す固有値を生成することができる。真のランダム性を保証するために、これらの固有値を過去に生成された値と比較し、生成された実行可能ソフトウェア・ファイルのデータ構造が明確に固有のものであることを保証する。
【００３０】
図６は、対応する実行可能ソフトウェア・ファイルを生成するためであるが、各々が固有のデータ構造を有する、コンパイル前のソース・コードの再構成を示すフローチャートである。最初に、図６に示されるように、Ｓ９００において、コンパイルされることになるソース・コードのファイルを受け取る。Ｓ９１０において、コンパイルされることになるソース・コードのファイル内の種々の要素、テキスト文字列が再構成される。ランダム・アルゴリズム、或いは、所定の所望数のロード可能にフォーマットされた実行可能ソフトウェア・ファイルの固有データ構造を生成する所定のアルゴリズムによって、要素の位置の再構成又は変更を管理できることが留意される。
【００３１】
次に、Ｓ９３０において、コンパイルされたコードは、ＣＤ−ＲＯＭのような物理的媒体、或いはネットワークのような通信媒体によって配布する準備が整う。
この方法を用いるとき、配布者は、各々が全く同じに機能するが、各々が基礎となる固有データ構造を有する、多数のソフトウェア・プログラムのコピーを生成できる。この固有データ構造を用いて、ソフトウェアの各コピーについて別個の固有識別情報を提供することができる。
【００３２】
図７は、対応する同じ実行可能ソフトウェア・ファイルを生成するためであるが、各々が固有データ構造を有する、コンパイル中の、コンパイルされた機械コードのファイル内の種々の要素の再構成を示すフローチャートである。最初に、図７に示されるように、Ｓ１０００において、コンパイルされることになるソース・コードのファイルを受け取る。Ｓ１０１０において、ソース・コードがコンパイルされ、コンパイル中に、コンパイルされた機械コードのファイル内の種々の要素が再構成される。ランダム・アルゴリズム、或いは、所定の所望数のロード可能にフォーマットされた実行可能ソフトウェア・ファイルの固有データ構造を生成する所定のアルゴリズムによって、要素の位置の再構成又は変更を管理できることが留意される。
【００３３】
Ｓ１０２０において、コンパイルされた機械コードのファイル内の種々の要素の再構成を追跡し、現在各要素が位置する場所の記録を知る。Ｓ１０３０において、この追跡された情報を用いて、コンパイルされた機械コード内のアドレス・データを編集し、追跡された変更を反映させる。
例えば、データ位置が、最初は、コンパイル後にアドレス「５００」に配置される予定になっていたが、コンパイル中にアドレス「７５０」に移動された場合には、コンパイルされたものうち「５００」に等しい元のアドレス・データを編集し、新しい位置「７５０」を反映させる。このように、変更を追跡することによって、コンパイルされた機械コードを編集し、再構成された種々の要素の新しい位置に対応する正しいアドレス・データを提供することができる。
【００３４】
コンパイルされた機械コードが編集され、再構成された種々の要素の新しい位置に対応する正しいアドレス・データを提供すると、Ｓ１０４０において、再構成され、編集されたコンパイルされたコードは、ＣＤ−ＲＯＭのような物理的媒体、或いはネットワークのような通信媒体によって配布する準備が整う。
この方法を用いるとき、配布者は、各々が全く同じに機能するが、各々が基礎となる固有のデータ構造を有する、多数のソフトウェア・プログラムのコピーを生成できる。この固有データ構造を用いて、ソフトウェアの各コピーについて別個の固有識別情報を提供することができる。
【００３５】
上述した固有のデータ構造生成ルーチンを用いるとき、配布者は、ソフトウェアの著作権侵害コピー元をより容易に識別することができる。例えば、図４に示されるように、Ｓ７１０において、実行可能ソフトウェア・ファイルの固有データ構造が、再構成ルーチンによって生成される。Ｓ７２０において、固有値が、実行可能ソフトウェア・ファイルの固有データ構造に基づいて生成される。
上述のように、固有データ構造は、実行可能ソフトウェアのそのコピーについて固有識別を生成するための基礎を提供する。１つの例は、実行可能ソフトウェアのそのコピーについてのチェックサム値を生成するチェックサム生成装置の利用であり、チェックサム値の生成は、データ構造に基づいている。
【００３６】
実行可能ソフトウェア・ファイル内の全ての位置は、命令、アドレス参照、又はデータ要素を含む。これらのタイプのコンテンツの全ては、バイナリ数値の形態である。したがって、実行可能ソフトウェア・ファイル内の要素のあらゆる順序付けは、全ての位置の全てのコンテンツの合計であるチェックサムによって表すことが可能である。実行可能ソフトウェア・ファイルのコンテンツによって、実行可能ソフトウェア・ファイルのコンテンツの固有順序付けの各々が、固有チェックサムを有することもできる。
【００３７】
データ要素及びサブルーチンの数が増大するにつれて、可能な異なるチェックサムの数も増大することも留意される。したがって、チェックサムとコンテンツの固有構成との関連を用いて、元のライセンシーをソフトウェアのコピーと関連付けることができることが留意される。
チェックサムに加えて、実行可能ソフトウェア・ファイル内の要素の順序付けを表す他の方法も用い得ることが留意される。
【００３８】
Ｓ７３０において、配布者がライセンスを得るか、又は実行可能ソフトウェアのコピーを販売するとき、配布者はライセンシー又は購買者を登録し、実行可能ソフトウェア・ファイルの固有データ構造に基づいて生成された固有識別値を記録することによって、転送されたソフトウェアを識別することができる。
例えば、配布者は、各々が同じ実行可能ソフトウェア・ファイル「Ａ」を有する１０００枚のＣＤ−ＲＯＭを生成できるが、各々のＣＤ−ＲＯＭ上の実行可能ソフトウェア・ファイル「Ａ」は、異なるデータ構造を有し、各々のＣＤ−ＲＯＭは、異なるシリアル番号又はＩＤを有する。データ構造から、配布者は、実行可能ソフトウェア・ファイルの固有データ構造に基づいて生成された固有値、及びＣＤ−ＲＯＭの関連したシリアル番号を、データベースに入力する。ＣＤ−ＲＯＭが配布されると、配布者は、次に、ＣＤ−ＲＯＭを受け取るエンティティと関連した情報を、データベースに入力することができる。
【００３９】
その後、配布者が、著作権侵害バージョンの疑いがあるソフトウェアのバージョンを見つけた場合、該配布者は、著作権が侵害されているかどうかを判断し、著作権が侵害されている場合には著作権が侵害されたオリジナルのコピー元を判断するために、実行可能ファイルのデータ構造を分析して、その固有値を求め、それをデータベース内の値と比較する必要があるだけである。
ここに開示される方法は、実行可能ソフトウェアの機能を決して変えることなく、実行可能ソフトウェア・ファイルのコンテンツの再順序付けを行う方法である。
【００４０】
サブルーチンは、依然として、同じ組の命令を同じ順序で含むことが留意される。
上述のように、データ・アドレスの位置が移動された場合には、そのアドレスを参照する、実行可能ソフトウェア・ファイル内の全てのオペランドも変更しなければならない。同様に、サブルーチンの位置が変更された場合には、そのサブルーチンを参照する、実行可能ソフトウェア・ファイル内の全てのオペランドも変更しなければならないことが留意される。
【００４１】
実行可能ソフトウェア・ファイル内の可動要素の数が大きい程、可能な固有データ構造の数が大きくなることが留意される。実行可能ソフトウェア・ファイル内の可動要素の数が増大するにつれて、変数を順序付ける可能な方法の数が指数関数的に増大することが留意される。最後に、上述の種々のルーチンは、任意のデジタル処理装置上に実装することができる。上述の種々のルーチンは、ファームウェア内に実装しても、又はハードウェア内に直接実装してもよい。
【００４２】
要約すれば、方法は、ソース・コードをコンパイルし、該ソース・コードに対応する第１のデータ構造を有するコンパイルされた実行可能ファイルを生成し、該ソース・コードがコンパイルされる度に第１のデータ構造が実現されるようにすること、コンパイルされた実行可能ファイル内の所定数のデータ要素の位置を再構成し、第１のデータ構造とは異なる第２のデータ構造を有するコンパイルされたファイルを生成すること、及び、再構成された位置に従って、第２のデータ構造を有するコンパイルされたファイル内のアドレス・データを編集し、第１のデータ構造を有するコンパイル実行可能ファイルと同じ方法で機能する、第２のデータ構造を有するコンパイルされた実行可能ファイルを生成することによって、複数のデータ要素を含むコンパイルされた実行可能ファイルを電子的に修正する。データ要素は、コンパイルされた実行可能ファイル内のデータ位置、コンパイルされた実行可能ファイル内のデータ・バイト、及び／又は、コンパイルされた実行可能ファイル内のサブルーチンとすることができる。第１のデータ構造を有するコンパイルされた実行可能ファイル内の所定数のデータ要素の位置は、ランダムに再構成することができ、及び／又は、所定数の固有データ構造を生成する所定のアルゴリズムを用いて再構成することができる。同じソース・コードからのコンパイルされた実行可能ファイルの各コピーは、第１のものでないデータ構造を有するコンパイルされたファイルを生成するように再構成された、第１のデータ構造を有するコンパイルされた実行可能ファイル内の所定数のデータ要素の位置を有し、コンパイルされたファイル内のアドレス・データは、再構成された位置に従って編集される。
【００４３】
或る方法は、ソース・コードのコンパイル中に、所定数のデータ要素の位置を再構成し、所定数のデータ要素の位置を再構成することなく同じソース・コードをコンパイルするときに実現され、かつ、再構成することなく該ソース・コードをコンパイルする度に実現される第１のデータ構造とは異なる第２のデータ構造を有するコンパイルされたファイルを生成すること、及び、再構成された位置に従ってコンパイルされたファイル内のアドレス・データを編集し、第１のデータ構造を有するコンパイルされた実行可能ファイルと同じ方法で機能する、第２のデータ構造を有するコンパイルされた実行可能ファイルを生成することによって、複数のデータ要素を含むコンパイルされた実行可能ファイルを電子的に修正する。
【００４４】
データ要素は、コンパイルされた実行可能ファイル内のデータ位置、コンパイルされた実行可能ファイル内のデータ・バイト、及び／又は、コンパイルされた実行可能ファイル内のサブルーチンとすることができる。第１のデータ構造を有するコンパイルされた実行可能ファイル内の所定数のデータ要素の位置は、ランダムに再構成することができ、及び／又は、所定数の固有データ構造を生成する所定のアルゴリズムを用いて再構成することができる。同じソース・コードからのコンパイルされた実行可能ファイルの各コピーは、第１のものでないデータ構造を有するコンパイルされたファイルを生成するように再構成された、第１のデータ構造を有するコンパイルされた実行可能ファイル内の所定数のデータ要素の位置を有し、コンパイルされたファイル内のアドレス・データは、再構成された位置に従って編集される。
【００４５】
或る方法は、コンパイル前にソース・コード内のテキスト文字列の位置を再構成し、再構成されたソース・コードをコンパイルし、第２のデータ構造を有するコンパイルされた実行可能ファイルを生成することによって、複数のデータ要素を含むコンパイルされた実行可能ファイルのデータ構造を電子的に修正し、第１のデータ構造は、ソース・コード内のテキスト文字列の位置を再構成することなく、同じソース・コードをコンパイルするときに実現され、かつ、再構成することなく該ソース・コードをコンパイルする度に実現される。
テキスト文字列は、コンパイルされた実行可能ファイル内のデータ位置、コンパイルされた実行可能ファイル内のデータ・バイト、及び／又は、コンパイルされた実行可能ファイル内のサブルーチンとすることができる。ソース・コード内のテキスト文字列の位置は、ランダムに再構成することができ、及び／又は、所定数の固有データ構造を生成する所定のアルゴリズムを用いて再構成することができる。
【００４６】
或る方法は、ソース・コードをコンパイルし、該ソース・コードに対応する第１のデータ構造を有するコンパイルされた実行可能ファイルを生成し、該ソース・コードがコンパイルされる度に第１のデータ構造が実現されるようにすること、コンパイルされた実行可能ファイル内の所定数のデータ要素の位置を再構成し、第１のデータ構造とは異なる第２のデータ構造を有するコンパイルされた実行可能ファイルを生成すること、再構成された位置に従って、コンパイルされたファイル内のアドレス・データを編集し、第１のデータ構造を有するコンパイルされた実行可能ファイルと同じ方法で機能する、第２のデータ構造を有するコンパイルされた実行可能ファイルを生成すること、及び、第２のデータ構造を有するコンパイルされた実行可能ファイルのデータ構造を表し、第２のデータ構造を有するコンパイルされた実行可能ファイルについて固有の識別を提供する固有値を生成することによって、各々が固有識別値を有するコンパイルされた実行可能ファイルを生成する。
【００４７】
データ要素は、コンパイルされた実行可能ファイル内のデータ位置、コンパイルされた実行可能ファイル内のデータ・バイト、及び／又は、コンパイルされた実行可能ファイル内のサブルーチンとすることができる。第１のデータ構造を有するコンパイルされた実行可能ファイル内の所定数のデータ要素の位置は、ランダムに再構成することができ、及び／又は、所定数の固有データ構造を生成する所定のアルゴリズムを用いて再構成することができる。固有値は、第２のデータ構造を有するコンパイルされた実行可能ファイルにおいてチェックサム・ルーチンを実行することによって生成される。同じソース・コードからのコンパイルされた実行可能ファイルの各コピーは、第１のものでないデータ構造を有するコンパイルされたファイルを生成するように再構成された、第１のデータ構造を有するコンパイルされた実行可能ファイル内の所定数のデータ要素の位置を有し、コンパイルされたファイル内のアドレス・データは、再構成された位置に従って編集され、第１のものでないデータ構造を有する、コンパイルされた実行可能ファイルの各々のデータ構造を表す固有値が生成される。
【００４８】
或る方法は、ソース・コードをコンパイルし、該ソース・コードに対応する第１のデータ構造を有するコンパイルされた実行可能ファイルを生成して、該ソース・コードがコンパイルされる度に第１のデータ構造が実現されるようにすること、第１のデータ構造を有するコンパイルされた実行可能ファイル内の所定数のデータ要素の位置を再構成し、第１のデータ構造とは異なる第２のデータ構造を有するコンパイルされたファイルを生成すること、再構成された位置に従って、コンパイルされたファイル内のアドレス・データを編集し、第１のデータ構造を有するコンパイルされた実行可能ファイルと同じ方法で機能する、第２のデータ構造を有するコンパイルされた実行可能ファイルを生成すること、第１のものでないデータ構造を有するコンパイルされた実行可能ファイルの固有データ構造の各々を表し、第１のものでない固有のデータ構造を有するコンパイルされた実行可能ファイルの各々についての固有の識別を提供する固有値を生成すること、固有アセット・コードを、第１のものでない固有データ構造を有するコンパイルされた実行可能ファイルの各々に割り当てること、及び、第１のものでない固有データ構造を有するコンパイルされた実行可能ファイルを記録媒体に記録し、第１のものでない固有データ構造を有するコンパイルされた実行可能ファイルと関連した固有値と、関連した方法で第１のものでない固有データ構造を有するコンパイルされた実行可能ファイルと関連した固有アセット・コードとを格納することによって、コンパイルされた実行可能ファイルの各コピーについての固有識別値を生成し、記録する。
【００４９】
データ要素は、コンパイルされた実行可能ファイル内のデータ位置、コンパイルされた実行可能ファイル内のデータのバイト、及び／又は、コンパイルされた実行可能ファイル内のサブルーチンとすることができる。第１のデータ構造を有するコンパイルされた実行可能ファイル内の所定数のデータ要素の位置は、ランダムに再構成することができ、及び／又は、所定数の固有データ構造を生成する所定のアルゴリズムを用いて再構成することができる。固有値は、第２のデータ構造を有するコンパイルされた実行可能ファイルにおいてチェックサム・ルーチンを実行することによって生成される。同じソース・コードからのコンパイルされた実行可能ファイルの各コピーは、第１のものでないデータ構造を有するコンパイルされたファイルを生成するように再構成された、第１のデータ構造を有するコンパイルされた実行可能ファイル内の所定数のデータ要素の位置を有し、コンパイルされたファイル内のアドレス・データは、再構成された位置に従って編集され、第１のものでないデータ構造を有するコンパイルされた実行可能ファイルの各々のデータ構造を表す固有値が生成される。固有アセット・コードは、シリアル番号、コンパイルされた実行可能ファイルのライセンシーを表す情報、コンパイルされた実行可能ファイルの購入者を表す情報、及び／又は、コンパイルされた実行可能ファイルの受信者を表す情報とすることができる。
【図面の簡単な説明】
【００５０】
【図１】従来のソフトウェア・ファイルの構造レイアウトを図示する。
【図２】従来の機械コード命令の構造レイアウトを図示する。
【図３】ソフトウェア・ファイルのコンテンツの再順序付けの概念を図示する。
【図４】ライセンシーをソフトウェア・コピーにマッピングする方法を示すフローチャートである。
【図５】各々が固有データ構造を有する、配布のためのロード可能にフォーマットされた実行可能ソフトウェア・ファイルの生成を示すフローチャートである。
【図６】各々が固有データ構造を有する、配布のためのロード可能にフォーマットされた実行可能ソフトウェア・ファイルの生成を示すフローチャートである。
【図７】各々が固有データ構造を有する、配布のためのロード可能にフォーマットされた実行可能ソフトウェア・ファイルの生成を示すフローチャートである。
【符号の説明】
【００５１】
１００：データ・セクション
１１０、１２０、１３０、１４０：データ位置
２００：コード・セクション
２１０、２２０、２３０、２４０：命令
３００、３１０：サブルーチン
４２０、４３０、１１００、１２００、１３００、１４００：オペランド
【図１】
2006318464.tif 000003
【図２】
2006318464.tif 000004
【図３】
2006318464.tif 000005
【図４】
2006318464.tif 000006
【図５】
2006318464.tif 000007
【図６】
2006318464.tif 000008
【図７】
2006318464.tif 000009