JP4147472B2 - コンピュータプログラムの編集システム及びその方法 - Google Patents

コンピュータプログラムの編集システム及びその方法 Download PDF

Info

Publication number
JP4147472B2
JP4147472B2 JP2003053512A JP2003053512A JP4147472B2 JP 4147472 B2 JP4147472 B2 JP 4147472B2 JP 2003053512 A JP2003053512 A JP 2003053512A JP 2003053512 A JP2003053512 A JP 2003053512A JP 4147472 B2 JP4147472 B2 JP 4147472B2
Authority
JP
Japan
Prior art keywords
encryption
encrypted
file
code
function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2003053512A
Other languages
English (en)
Other versions
JP2004265037A (ja
Inventor
卓也 森下
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2003053512A priority Critical patent/JP4147472B2/ja
Publication of JP2004265037A publication Critical patent/JP2004265037A/ja
Application granted granted Critical
Publication of JP4147472B2 publication Critical patent/JP4147472B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、コンピュータプログラムを編集するための編集システム及びその方法に関し、特に、コンピュータプログラムの一部を無効化又は暗号化するための編集システム及びその方法に関する。
【0002】
【従来の技術】
通常、コンピュータプログラムは製品版の仕様で販売されるが、販売促進のために試用版の仕様で無料で頒布される場合がある。試用版のコンピュータプログラムは、試用期間が制限されていたり、機能が制限されていたりする。
【0003】
また、コンピュータプログラムの解析や改竄を防止するために、コンピュータプログラムを暗号化し、暗号化されたコンピュータプログラムをハードディスクドライブに記録し、実行時にコンピュータプログラムの暗号解除を行うシステムもある。
【0004】
なお、本願発明に関連する先行技術文献としては以下のものがある。
【0005】
【特許文献1】
特開2001−175466公報
【特許文献2】
特開2000−76075公報
【0006】
【発明が解決しようとする課題】
ある種の試用版のコンピュータプログラムは、製品版のコンピュータプログラムと比較し、一部の機能が制限されている。この種の試用版のコンピュータプログラムは、製品版のコンピュータプログラムを基に作成されることとなるが、製品版のソースファイルを基に試用版のソースファイルを作成することとなると、その作成の過程でソースファイルを誤って書き換えてしまったりする危険がある。また、数種類の試用版を作成する場合に、種類毎にソースファイルを作るのは煩わしい。従って、試用版の実行ファイルを生成するためにわざわざ試用版のソースファイルを作成する必要のない方法が望まれている。コンピュータプログラムのグレードを複数用意する場合も同様である。
【0007】
また、試用版のコンピュータプログラムを試用してみたユーザが製品版のコンピュータプログラムを使用したいと希望した場合、そのユーザは試用版のコンピュータプログラムとは別に新たに製品版のコンピュータプログラムを購入しなければならず、ユーザにとっては煩わしい。従って、試用版のコンピュータプログラムを使用したユーザが製品版のコンピュータプログラムを使用したいと希望した場合、そのユーザがわざわざ製品版のコンピュータプログラムを購入しくても済むような方法が望まれている。
【0008】
更に、ある種の試用版のコンピュータプログラムは、製品版のコンピュータプログラムと同一の機能を有するが、試用期間が制限されている。この種の試用版のコンピュータプログラムは、使用期間を制限するために何らかの方法で日付の管理を行っているが、その管理方法がユーザに見破られると、試用期間を過ぎても不法に使い続けられることとなり、販売者の利益が害される。従って、試用期間の管理情報が不正に改竄されることのない方法が望まれている。
【0009】
このような使用期間制限の管理方法の解析や使用期間の管理情報の改竄を防ぐためプログラムコードやデータを暗号化することは広く行われている。
【0010】
ところで、暗号化された関数(プログラミング言語でいうところの「関数」であり、一種のサブルーチンである。)を含む実行ファイルを一旦メモリにロードしてから、暗号化された関数を実行直前に暗号解除し、それから暗号解除された関数を実行するためには、暗号解除された関数をメモリに再書込みしなければならない。一方、実行ファイルの通常のロード先はメモリのコード領域であり、このコード領域は通常は書換え不能である。従って、暗号化された関数を含む実行ファイルを一旦コード領域にロードしてから、暗号化された関数を実行直前に暗号解除して、それから暗号解除された関数を実行することは通常は不可能である。
【0011】
従って、実行ファイルのうちの暗号化された関数のみを書換可能であるデータ領域にロードして、暗号化されていない関数をコード領域にロードするようにして上記の問題点を解決する方法がある。
【0012】
しかし、このような方法を採用した場合、元々実行ファイル全体がコード領域にロードされることを前提として設定された相対アドレスが、誤ったものとなってしまう。すなわち、データ領域にロードされた関数が、コード領域にあるデータ又は命令を相対アドレスで参照する命令を含んでいるとすると、この相対アドレスは誤ったものとなってしまう。
【0013】
特許文献1に記載の発明は、データ領域にロードされた暗号化されている関数に含まれている相対アドレス指定の命令の参照先がコード領域にある場合に、暗号解除後の相対アドレスが誤ったものとなってしまうという問題を解決するものであり、実行ファイル中に暗号化された関数の再配置情報を埋め込んでおいて、この再配置情報を用いて正しい相対アドレスを復元するものである。
【0014】
しかし、特許文献1には、実行ファイルの一部を関数単位で暗号化し、それを暗号解除する技術が記載されているが、コンパイル又はリンク時に暗号化対象の関数を特定する方法については記載されていない(段落[0059]参照)。特許文献2にも同様にコンパイル又はリンク時に暗号化対象の関数を特定する方法については記載されていない。(段落[0055]参照)。
【0015】
ソースコード中に暗号化対象の関数を特定するためのディレクティブを埋め込み、コンパイラがそのディレクティブを解釈して、必要な関数のみを暗号化する方法も考えられるが、このような方法を用いると、柔軟性に欠けることとなる。すなわち、例えば、仕様上の全機能を有する実行ファイルを生成するためのソースファイルに含まれている関数のうち特定の機能を実現するための関数のみ無効とすることにより、機能制限をすることとした場合、無効とする機能の数に応じて複数種類のソースファイルを作成しなければならず、管理しづらくなる。また、このような方法を用いると、ソースファイルを直接書換えることとなるので、人為的ミスが生じやすい。
【0016】
一方、実行ファイルをメモリにロードする際に、そのときのメモリの使用状況に応じて、実行ファイルのロードアドレスをダイナミックに変えるオペレーティングシステムは、実行ファイルに含まれている絶対アドレス指定を含む命令の絶対アドレスを実行ファイルのロード先のアドレスに応じてダイナミックに書き換える。
【0017】
このような絶対アドレスのダイナミックな書換えを行うためには、書換え前のディフォルトの絶対アドレスに関する情報を実行ファイルが保有していなければならない。従って、暗号化された関数に絶対アドレスに関する情報が隠されていると、オペレーティングシステムはプログラムをメモリにロードする際に絶対アドレスの書換えをすることができなくなってしまう。
【0018】
特許文献1には、プログラムをメモリにロードする際に絶対アドレスの書換えを行うことも相対アドレスの書換えを行うことも記載されておらず、関数実行直前に再配置情報を用いて相対アドレスを復元するのみが記載されている。従って、特許文献1では、絶対アドレスの扱い方が不明である。
【0019】
特許文献2には、絶対アドレスの扱い方についての発明が記載されている。この発明によれば、実行プログラムを起動して全体の再配置を行うときには、符号化対象コードに対する再配置は行わず、符号化されていないコード部分しか再配置しない。そして、プログラムの実行が進み、符号化対象コードを実行すべき段階になったところで、まず符号化対象コードの復号化を行い、次いで、再配置が必要ならば当該コード部分の再配置を行う。この発明の絶対アドレスの扱い方は、本発明によるものと異なる。また、特許文献2では、再配置前の絶対アドレス等を不正に改竄することでプログラムコードの正常動作を妨げ符号化対象コードを取得するといった攻撃の余地がある。
【0020】
そこで、本発明は、試用版の実行ファイルを生成するために、製品版のソースファイルとは別に、わざわざ試用版のソースファイルを作成する必要のないコンピュータプログラムの編集システム及びその方法を提供することを目的とする。
【0021】
また、本発明は、試用版のコンピュータプログラムを使用したユーザが製品版のコンピュータプログラムを使用したいと希望した場合、そのユーザがわざわざ製品版のコンピュータプログラムを購入しくても済むようにするコンピュータプログラムの編集システム及びその方法を提供することを目的とする。
【0022】
更に、本発明は、試用期間の管理情報が不正に改竄されることのないコンピュータプログラムの編集システム及びその方法を提供することを目的とする。
【0023】
更に、本発明は、無効化又は暗号化する関数を柔軟に特定することができるコンピュータプログラムの暗号化システム及びその方法を提供することを目的とする。
【0024】
更に、本発明は、実行ファイルが暗号化された関数を含んでいる場合であっても、オペレーティングシステムが実行ファイル中の絶対アドレスの書換えを行うことを可能としユーザーが絶対アドレス等を不正に改竄することを防止するコンピュータプログラムの暗号化システム及びその方法を提供することを目的とする。
【0025】
【課題を解決するための手段】
本発明によれば、ソースファイルから生成されたオブジェクトファイルをリンクすることにより暗号化前実行ファイルを生成するリンカであって、前記ソースファイル中の暗号化するべき関数を指定する指定ファイルを基に、前記暗号化前実行ファイル中の暗号化するべき関数のコードを暗号化開始位置識別語及び暗号化終了位置識別語で挟むリンカと、前記暗号化前実行ファイル中の前記暗号化開始位置識別語及び前記暗号化終了位置識別語で挟まれた前記暗号化するべき関数のコードを暗号化して、暗号化後実行ファイルを生成する暗号化部と、を有することを特徴とするコンピュータプログラムの暗号化システムであって、前記暗号化部は、前記暗号化前実行ファイルに記述されている絶対アドレスリスを参照して、前記暗号化開始位置識別子語と前記暗号化終了位置識別語で挟まれたコードのうちの絶対アドレスを暗号化せずに、前記暗号化開始位置識別子語と前記暗号化終了位置識別語で挟まれたコードのうちの前記絶対アドレス以外の部分を暗号化することを特徴とするコンピュータプログラムの暗号化システムが提供される。
【0026】
上記のコンピュータプログラムの暗号化システムにおいて、前記暗号化部は、暗号解除コードを前記暗号化後実行ファイルに付加するようにしてもよい。
【0027】
上記のコンピュータプログラム暗号化システムにおいて、前記リンカは、前記暗号化開始位置識別語と前記暗号化終了位置識別語の間に暗号化するべき関数のコードに加え、当該関数の使用期間を限定するための情報を入れ、前記暗号化部は、当該関数及び前記使用期間を限定するための情報を暗号化するようにしてもよい。
【0028】
上記のコンピュータプログラムの暗号化システムにおいて、前記暗号化部は、暗号化するべきコードよりパリティ又はハッシュ値を計算し、該パリティ又はハッシュ値を前記暗号化後実行ファイルに付加するようにしてもよい。
【0029】
上記のコンピュータプログラムの暗号化システムにおいて、前記暗号化部は、暗号化されたコードを実行時に暗号解除し、暗号解除されたコードよりパリティ又はハッシュ値を計算し、該計算されたパリティ又はハッシュ値を前記暗号化後実行ファイルに付加されている前記パリティ又はハッシュ値と比較し、両者が不一致である場合に、前記暗号化後実行ファイルの実行を制限するコードを前記暗号化後実行ファイルに付加するようにしてもよい。
【0039】
【発明の実施の形態】
以下、図面を参照して本発明の実施形態について詳細に説明する。
【0040】
[実施形態1]
図1は、実施形態1によるプログラム編集システムの構成を示すブロック図である。図1を参照すると、実施形態1によるプログラム編集システムは、コンパイラ201、リンカ203、編集部205を有する。
【0041】
コンパイラ201はソースファイル101をコンパイルしてオブジェクトファイル105を生成する。ソースファイル101は、図2(a)に示すようなものであり、例えば、6つの関数function000(), function 001,・・・,function005を含んでいる。
【0042】
また、コンパイラ201は、識別語リスト103をコンパイルしてオブジェクトファイル107を生成する。識別語ファイル103は、図2(b)に示すようなものであり、例えば、3対の識別語(funcstart000, funcend000), (funcstart001, funcend001), (funcstart002, funcend002)を含んでいる。なお、1対の識別語は、編集開始識別語及び編集終了識別語より成る。
【0043】
リンカ203は、オブジェクトファイル105とオブジェクトファイル107をリンクして編集前実行ファイル111を生成する。なお、ソースファイル101及びオブジェクトファイル105は複数あってもよい。リンカ203はリンクをする際に、指定ファイル109を読み込む。指定ファイル109は、図2(c)に示す様なものであり、編集開始識別語、無効化したい関数の名称及び編集終了識別語の組を無効化したい関数の数だけ含む。なお、識別語リスト103は、少なくとも指定ファイル109に含まれる無効化したい関数の数の識別語対を含んでいればよい。図2(c)の例では、無効化したい関数は、function002, function005の2つである。
【0044】
なお、リンカ203は、編集開始識別語及び編集終了識別語を予約語として認識しないために、識別語リスト103よりコンパイラ201により生成されるオブジェクトファイル107をリンカ203が必要とするが、リンカ203が、編集開始識別語及び編集終了識別語を編集開始位置及び編集終了位置を示す予約語として認識するならば、オブジェクトファイル107は不要であり、従って、識別語リスト103も不要である。
【0045】
図2(a)に示すソースファイル101、図2(b)に示す識別語リスト103及び図2(c)に示す指定ファイル109を基に生成された編集前実行ファイル111は、図3(a)に示すようなものとなる。図3(a)を参照すると、編集前実行ファイル111において、無効化したい関数function002の前に編集開始識別語funcstart000が置かれ、その関数funiction002の後に編集終了識別語funcend000が置かれる。同様に、無効化したい関数function005の前に編集開始識別子function002が置かれ、その関数function005の後に編集終了識別語funcend002が置かれる。
【0046】
編集部205は、編集前実行ファイル111から識別語リスト103又は指定ファイル109に含まれている編集開始識別語及び編集終了識別語を検索し、その間にあるコードを無実行命令(NOP命令)に置き換え、置き換え後のファイルを編集後実行ファイル113として出力する。なお、編集開始識別語及び編集終了識別語が特定のパターンを含むようにしておけば、編集部205は、識別語リスト103又は指定ファイル109を参照しなくても、編集開始識別語及び編集終了識別語を検索することが可能である。
【0047】
なお、編集後実行ファイル11の編集開始識別語の直後の部分に無実行命令の代わりに関数の終了コードを書き込み関数コードのその他の部分を任意のデータで上書きしてもよい。また、編集前実行ファイル111に書かれていた編集開始識別語及び編集終了識別語を他の値に書き換えても良い。更に、無効化したい関数を呼び出す命令の呼出し先を編集開始識別語の位置から編集終了識別語の位置の間のいずれかの位置として、その位置に関数の終了コードを書き込むようにしてもよい。
【0048】
このようにして得られた編集後実行ファイル113は、無効化した関数が実行できないものとなっている。
【0049】
次に、実施形態1におけるコンパイラ201、リンカ203及び編集部205が行うコンピュータプログラムの編集方法について説明する。
【0050】
この編集方法の全体を示す図4を参照すると、まず、コンパイラ201は、ソースファイル101を含む全てのソースファイルをコンパイルして、オブジェクトファイル105を含むオブジェクトファイルを生成する(ステップS301、S303)。次に、コンパイラ201は、識別語リスト103をコンパイルして、オブジェクトファイル107を生成する(ステップS305)。次に、リンカ203は、ステップS301〜S305で生成した全てのオブジェクトファイルをリンクして、編集前実行ファイル111を生成する(ステップS307)。最後に、編集部205は、編集前実行ファイル111より編集後実行ファイル113を生成する(ステップS309)。
【0051】
次に、図5を参照して、実施形態1におけるステップS307の詳細について説明する。オブジェクトファイル107を除く全てのオブジェクトファイルに含まれている全ての関数について(ステップS311)、その関数は指定ファイル109において編集開始位置識別語と編集終了識別語の間に挟まれているか否かを判断する(ステップS313)。この判断の際に、オブジェクトファイル107を参照して、編集開始位置識別語と編集終了位置識別語を認識してもよいし、予め定めた予約語として編集開始位置識別語と編集終了位置識別語を認識してもよい。ステップS313の判断結果が肯定的であれば、その関数を編集開始識別語と編集終了識別語で挟んで、これらをリンクし(ステップS315)、ステップS313の判断結果が否定的であれば、その関数を通常通りリンクする(ステップS317)。
【0052】
次に、図6を参照して、実施形態1におけるステップS309の詳細について説明する。編集前実行ファイル111の全てのコードについてステップS323〜S329を繰り返す(ステップS321)。ステップS323では、編集前実行ファイル111よりコードを読み込む。次に、ステップS323で読み込んだコードは編集開始識別語であるか否かを判断する(ステップS325)。ステップS325の判断結果が肯定的であれば、書換えフラグをセットし(ステップS327)、ステップS329に進む。ステップS325の判断結果が否定的であれば、ステップS323で読み込んだコードは編集終了識別語であるか否かを判断する(ステップS331)。ステップS331の判断結果が肯定的であれば、書換えフラグをリセットし(ステップS333)。ステップS329に進む。ステップS331の判断結果が否定的であれば、書換えフラグがセットされているか否かを判断する(ステップS335)。ステップS335の判断結果が肯定的であれば、ステップS323で読み込んだコードを無実行命令に書き換え(ステップS337)、ステップS329に進む。ステップS335の判断結果が否定的であれば、直接ステップS329に進む。ステップS329では、編集後実行ファイルに現在のコードを書き込む。
【0053】
[実施形態2]
実施形態1は、無効化したい関数のコードを無実行命令とするものである。実施形態1によれば、無効化した関数を解析されることはないが、無効化した関数を復元することができない。
【0054】
実施形態2は、無効化したい関数を暗号化して、後に暗号解除することにより無効化した関数を復元できるようにするものである。こうすることにより、例えば、販売者が暗号化により無効化した関数を含む実行ファイルを試用版として提供し、後に、暗号鍵を提供することにより、購入者が暗号解除して、その実行ファイルを正規版にアップグレードすることが可能となる。
【0055】
図7は、実施形態2によるプログラム編集システムの構成を示すブロック図である。図1と図7を比較すると明らかなように、実施形態1と実施形態2の相違点は、編集部205が編集部207に変更された点と、編集後実行ファイル113が編集後実行ファイル115に変更された点のみである。従って、コンパイラ201、リンカ203、ソースファイル101、識別語リスト103、オブジェクトファイル105、107、指定ファイル109及び編集前実行ファイル111の説明は省略する。
【0056】
編集部207は、編集前実行ファイル111から識別語リスト103又は指定ファイル109に含まれている編集開始識別語及び編集終了識別語を検索し、その間にあるコードを暗号化し、暗号化後のファイルを編集後実行ファイル115として出力する。又は、編集開始識別語及び編集終了識別語が特定のパターンを含むようにしておけば、編集部207は、識別語リスト103又は指定ファイル109を参照しなくても、編集開始識別語及び編集終了識別語を検索することが可能である。
【0057】
なお、編集開始識別語の直後の部分に関数の終了コードを書き込み、この関数の終了コードを暗号化しないようにしてもよい。
【0058】
暗号キーを用いて暗号解除をするために、編集後実行ファイル113には、暗号解除コード116を追加する。暗号解除コード116に編集開始識別語及び編集終了識別語を含ませておき、暗号化した関数の前後の編集開始識別語及び編集終了識別語をそのままとしておけば、暗号解除コード116は、パターンマッチにより、暗号解除するべき関数の位置を特定することが可能となる。また、暗号化した関数の前後の編集開始識別語及び編集終了識別語を他の値に書き換えたり暗号化した場合であっても、暗号解除コード116に暗号化した関数の位置を特定する情報を含ませておけば、暗号解除コード116は、暗号解除するべき関数の位置を特定することが可能となる。
【0059】
このようにして生成された編集後実行ファイル115の構成を図8に示す。
【0060】
暗号解除コード116を、編集後実行ファイル115から分離させてもよい。
【0061】
試用版から製品版へのアップグレードのための支払いをして暗号解除のための暗号キーを入手したユーザは、暗号解除コード116を起動し、これに暗号キーを入力する。すると、暗号解除コードは暗号化されている関数の暗号解除を行い、編集後実行ファイル115の暗号化されている関数を暗号解除された関数に書き換える。
【0062】
次に、実施形態2におけるコンパイラ201、リンカ203及び編集部207が行うコンピュータプログラムの編集方法について説明する。
【0063】
実施形態2による編集方法の全体は、実施形態1によるものと同様に、図4に示すとおりであり、ステップS307の詳細も、実施形態2によるものと同様に、図5に示すとおりであるので、これらの説明は省略する。ステップS309の詳細は、図9に示すとおりである。図6と図9を比較すると明らかなように、実施形態2は、実施形態1と比較し、コードを無実行命令に書き換えるステップS337が、コードを暗号化するステップS339に置き換わっている点及び暗号解除コードを編集後実行ファイル115に書き込むステップS341が追加されている点のみが異なる。従って、ステップS321〜S335の説明は省略する。
【0064】
[実施形態3]
実施形態2で生成した編集後実行ファイルの暗号化により無効化した関数は、初期においては実行できず、暗号解除して編集後実行ファイルを書換えた後においては実行できる。実施形態3は、編集後実行ファイルに暗号化した関数を含める点においては実施形態2と同様である。しかし、実施形態3では、編集後実行ファイルを書換えるようなことはしない。また、実施形態3では、暗号化した関数を含んだ編集後実行ファイルをメモリにロードした後に、暗号化した関数を実行する直前に暗号解除して実行するようにする。但し、暗号化した関数内又はその隣に試用期間に関する暗号化情報を埋め込んでおく。暗号解除してから実行する前に試用期間に関する情報を参照して、試用期間が経過していなければ実行をして、試用期間が経過していれば実行を中止する。実施形態3は、実施形態2とは逆であり、試用期間に仕様上の全ての機能を使えるようにして、試用期間が経過したならば一部の機能を使えなくする。こうすることにより、試用版で全ての機能を試用してみたユーザが試用期間経過後に製品版のコンピュータプログラムを購入することを促進する。実施形態3では、暗号化した関数内又はその隣に試用期間に関する暗号化情報を埋め込むので、試用期間に関する情報が不正に解析されたり、改竄されたりすることを防止でき、従って、本来試用期間のみに試用できることとしていた機能が試用期間が経過しても不正に使われるという事態を防止することができる。
【0065】
なお、実施形態3では、実行ファイルがコード領域にロードされるものとするが、コード領域であっても再書込みを可能とする命令を用いたり、コード領域のうちの実行ファイルをロードした領域の属性を書込み許可とすることにより、コード領域にロードされた実行ファイルは再書込み可能となり、従って、暗号解除された関数を再書込みすることが可能となる。
【0066】
前述したように、実行ファイルをメモリにロードする際に、実行ファイル中の絶対アドレス指定の命令に含まれている絶対アドレスを、その命令にオペランドとして含まれているディフォルトの絶対アドレス及び実行ファイルをロードするアドレスを基に、ダイナミックに書換えるオペレーティングシステムがある。実施形態2では、暗号化されている関数を実行することがないので、暗号化されている関数に絶対アドレス指定の命令が含まれていても問題は生じない。ところが、このようなオペレーティングシステムを用いた場合において、暗号化された関数を暗号化されたままメモリにロードし、実行直前において暗号解除することとなると、暗号化された関数に含まれている絶対アドレス指定の命令の絶対アドレスを実行ファイルがロードされたアドレスに応じてダイナミックに書換えることが不可能となってしまう。そこで、実施形態3においては、暗号化しようとする関数中の絶対アドレス指定命令中の絶対アドレスを暗号化せず、残りの部分のみを暗号化する。実行ファイル中の絶対アドレスが記述されている部分は実行ファイルの特定の場所に記述されているので、オペレーティングシステムは、実行ファイルをメモリにロードする際に、その特定の場所を参照して、ディフォルトの絶対アドレスが記述されている部分を特定し、ディフォルトの絶対アドレスを、ディフォルトの絶対アドレスと実行ファイルをロードしようとするアドレスを基に算出した絶対アドレスに書換える。
【0067】
図10は、実施形態3によるプログラム編集システムの構成を示すブロック図である。図1と図10を比較すると明らかなように、実施形態1と実施形態3の相違点は、リンカ203がリンカ209に変更された点と、編集部205が編集部211に変更された点と、指定ファイル109が指定ファイル117に変更された点と、編集前実行ファイル111が編集前実行ファイル119に変更された点と、編集後実行ファイル113が編集後実行ファイル121に変更された点のみである。従って、コンパイラ201、ソースファイル101、識別語リスト103、オブジェクトファイル105、107の説明は省略する。
【0068】
指定ファイル117は、図11に示すようなものである。編集開始識別語と編集終了識別語の間には、無効化したい関数の名称に加え、その関数を無効化したい日付又は実行ファイルをコンピュータにインストールしてからその関数を無効化するまでの日数が記述されている。図11の例では、編集開始識別語funcstart000と編集終了識別語funcend000の間には、無効化したい関数の名称function002と関数function002を無効化したい日付2003/03/31が記述され、編集開始識別語function002と編集終了識別語funcend002の間には、無効化したい関数の名称function005と実行ファイルをコンピュータにインストールしてからその関数function005を無効化するまでの日数60daysが記述されている。
【0069】
リンカ209は、オブジェクトファイル105、107及び指定ファイル117を基に編集前実行ファイル119を生成する。例えば、図2(a)に示すソースファイル101から生成したオブジェクトファイル105、図2(b)に示す識別語リスト103から生成したオブジェクトファイル107及び図11に示す指定ファイル117を基にリンカ209が生成した編集前実行ファイル119は、図12(a)に示す様なものとなる。
【0070】
図12を参照すると、編集前実行ファイル119は、関数function002のコード中に含まれる絶対アドレスの位置及び関数function005のコード中に含まれる絶対アドレスの位置を記述した絶対アドレスリスト123を有している。また、編集開始識別語funcstart000と編集終了識別語funcend000の間には、関数function002のコード及び関数function002を無効化したい日付2003/03/31が挟まれている。更に、編集開始識別語funcstart002と編集終了識別語funcend002の間には、関数function005のコードと実行ファイルをコンピュータにインストールしてからその関数function005を無効化するまでの日付60daysが挟まれている。
【0071】
編集部211は、編集前実行ファイル119の編集開始識別語と編集終了識別語の間に挟まれている関数及び日付又は日数を暗号化し、更に、暗号解除コード116を付加して、編集後実行ファイル121を生成する。但し、編集部211は、絶対アドレスリスト123を参照して、編集開始識別語と編集終了識別語の間に挟まれている関数に含まれている絶対アドレスを暗号化しない。このようにして得られた編集後実行ファイル121中の暗号化されたfunction002(符号125)のコードの模式図を図13に示す。斜線で示す部分は暗号化されており、白抜きの部分は絶対アドレスであり暗号化されていない。
【0072】
編集部211は、図14(a)に示すように暗号化する部分のパリティ126を編集後実行ファイル121に付加しても良い。ここでいう「暗号化する部分」とは、編集開始識別語と編集終了識別語の間に挟まれている関数及び日付又は日数の部分である。この場合、暗号解除コード116は、実行時に暗号解除した部分のパリティを計算し、計算されたパリティをパリティ126と比較し、両者が一致していないときには、日付や日数等が改竄されたと判断してプログラム実行の強制終了、プログラムの一部の機能の無効化等のプログラム実行の制限を行う。同様に、編集部211は、図14(b)に示すように暗号化する部分のハッシュ値127を編集後実行ファイル121に付加しても良い。ここでいう「暗号化する部分」とは、編集開始識別語と編集終了識別語の間に挟まれている関数及び日付又は日数の部分である。この場合、暗号解除コード116は、実行時に暗号解除した部分のハッシュ値を計算し、計算されたハッシュ値をハッシュ値127と比較し、両者が一致していないときには、日付や日数等が改竄されたと判断してプログラム実行の強制終了、プログラムの一部の機能の無効化等のプログラム実行の制限を行う。更にハッシュ値を公開鍵暗号で暗号化して格納しておき、実行時には電子署名改竄検査を行っても良い。
【0073】
試用期間の日数制限をしている場合において、編集後実行ファイル121を起動した時には、暗号解除コード116が、その時がコンピュータに編集後実行ファイル121をコンピュータにインストールしてから無効化するまでの日数を経過した時であるのか否かを判断する必要がある。このために、編集後実行ファイル121をコンピュータにインストールするインストールプログラムは、インストールが行われた日付をコンピュータの所定の場所に記録する。また、インストールプログラムは、その日付を編集後実行ファイル121に書き込んでもよい。暗号解除コード116は、その日付を参照する。
【0074】
次に、実施形態3におけるコンパイラ201、リンカ209及び編集部211が行うコンピュータプログラムの編集方法について説明する。
【0075】
実施形態3による編集方法の全体は、実施形態1によるものと同様に、図4に示すとおりである。
【0076】
ステップS309の詳細は、図15に示すとおりである、図5と図15を比較すると明らかな様に、実施形態3は、実施形態1と比較し、ステップS315がステップS343に置き換わっている点が異なる。ステップS343では、指定ファイル117に記述されている関数及び日付又は日数を編集開始識別語と編集終了識別語の間に挟んで、これらをリンクする。他のステップS311、S313、S317の説明は省略する。
【0077】
ステップS309の詳細は、図16に示すとおりである。図9と図16を比較すると明らかなように、実施形態2は、実施形態2と比較し、ステップS345、S347、S349が追加されている点が異なる。ステップS335の判断結果が肯定的であるときに実行されるステップS345では、コードが絶対アドレスであるかを判断する。ステップS345の判断結果が肯定的であれば、ステップS329に進む。ステップS345の判断結果が否定的であれば、パリティ又はハッシュ値の中間値を計算し(ステップS341)、コードを暗号化し(ステップS339)、ステップS329に進む。ステップS341の後のステップS349では、編集後実行ファイル121にパリティ又はハッシュ値を書き込む。ステップS321、S323、S325、S327、S329、S331、S333、S335の説明は省略する。
【0078】
なお、上記の実施形態で説明した編集前実行ファイル及び編集後実行ファイルは、通常は、機械語コードで記述されたファイルであるが、BASIC言語、JAVA(登録商標)言語、「.NET」等の中間言語コードで記述されたファイルであってもよい。
【0079】
【発明の効果】
以上説明したように、本発明によれば、一部のコードを無効化又は暗号化した実行ファイルを作成するために、ソースファイルに変更を加える必要がないので、無効化又は暗号化する関数の相違に応じて複数のソースファイルを作成する必要がなくなり、保守性が向上する。
【0080】
また、本発明によれば、一部のコードを暗号化して、後に暗号解除してそのコードを利用できるようにしているので、ユーザは試用版の実行ファイルとは別に製品版を購入する必要がなくなり、購入に伴う労力を省くことができる。また、販売費、流通費等を削減できる。
【0081】
更に、本発明によれば、関数を暗号化する場合であっても、その関数に含まれている絶対アドレスを暗号化しないので、実行ファイルのメモリへのロード時に実行ファイル中の絶対アドレスの書き換えをするオペレーティングシステムに対応することが可能となる。
【0082】
更に、本発明によれば、使用期間を限定するための情報を暗号化するので、使用期間が改竄される可能性が低くなり、使用期間を過ぎた実行ファイルの不正な使用を防止することができる。
【0083】
更に、本発明によれば、暗号化された部分のパリティ又はハッシュ値を実行ファイルに書き込んでおいて、実行時に計算されたパリティ又はハッシュ値と実行ファイルに書き込まれているパリティ又はハッシュ値を比較し、両者が不一致であった場合に、実行ファイルの実行を制限するので、例え、暗号化された部分が改竄されたとしても、不正な使用を防止することができる。特に、使用期間を限定するための情報も暗号化している場合には、使用期間経過後の不正な使用を防止することができる。
【図面の簡単な説明】
【図1】本発明の実施形態1によるコンピュータプログラムの編集システムの構成を示すブロック図である。
【図2】本発明の実施形態1によるソースファイル、識別語ファイル及び指定ファイルの内容の例を示す図である。
【図3】本発明の実施形態1による編集前実行ファイル及び編集後実行ファイルの内容の例を示す図である。
【図4】本発明の実施形態1によるコンピュータプログラムの編集方法を示すフローチャトである。
【図5】本発明の実施形態1による「全てのオブジェクトをリンクして、編集前実行ファイルを生成する」ステップの詳細を示すフローチャートである。
【図6】本発明の実施形態1による「編集前実行ファイルよび編集後実行ファイルを生成する」ステップの詳細を示すフローチャートである。
【図7】本発明の実施形態2によるコンピュータプログラムの編集システムの構成を示すブロック図である。
【図8】本発明の実施形態2による編集後実行ファイルの内容の例を示す図である。
【図9】本発明の実施形態2による「編集前実行ファイルよび編集後実行ファイルを生成する」ステップの詳細を示すフローチャートである。
【図10】本発明の実施形態3によるコンピュータプログラムの編集システムの構成を示すブロック図である。
【図11】本発明の実施形態3による指定ファイルの内容の例を示す図である。
【図12】本発明の実施形態3による編集前実行ファイル及び編集後実行ファイルの内容の例を示す図である。
【図13】本発明の実施形態3による編集後実行ファイル中の関数の暗号化の状態を示す図である。
【図14】本発明の実施形態3による編集後実行ファイルの内容の他の例を示す図である。
【図15】本発明の実施形態3による「全てのオブジェクトをリンクして、編集前実行ファイルを生成する」ステップの詳細を示すフローチャートである。
【図16】本発明の実施形態3による「編集前実行ファイルよび編集後実行ファイルを生成する」ステップの詳細を示すフローチャートである。
【符号の説明】
101 ソースファイル
103 識別語リスト
105、107 オブジェクトファイル
109、117 指定ファイル
111、119 編集前実行ファイル
113、115、121 編集後実行ファイル
201 コンパイラ
203、209 リンカ
205、207、211 編集部

Claims (6)

  1. ソースファイルから生成されたオブジェクトファイルをリンクすることにより暗号化前実行ファイルを生成するリンカであって、前記ソースファイル中の暗号化するべき関数を指定する指定ファイルを基に、前記暗号化前実行ファイル中の暗号化するべき関数のコードを暗号化開始位置識別語及び暗号化終了位置識別語で挟むリンカと、
    前記暗号化前実行ファイル中の前記暗号化開始位置識別語及び前記暗号化終了位置識別語で挟まれた前記暗号化するべき関数のコードを暗号化して、暗号化後実行ファイルを生成する暗号化部と、
    を有することを特徴とするコンピュータプログラムの暗号化システムであって、
    前記暗号化部は、前記暗号化前実行ファイルに記述されている絶対アドレスリスを参照して、前記暗号化開始位置識別子語と前記暗号化終了位置識別語で挟まれたコードのうちの絶対アドレスを暗号化せずに、前記暗号化開始位置識別子語と前記暗号化終了位置識別語で挟まれたコードのうちの前記絶対アドレス以外の部分を暗号化することを特徴とするコンピュータプログラムの暗号化システム。
  2. 請求項に記載のコンピュータプログラムの暗号化システムにおいて、
    前記暗号化部は、暗号解除コードを前記暗号化後実行ファイルに付加することを特徴とするコンピュータプログラムの暗号化システム。
  3. 請求項に記載のコンピュータプログラム暗号化システムにおいて、
    前記リンカは、前記暗号化開始位置識別語と前記暗号化終了位置識別語の間に暗号化するべき関数のコードに加え、当該関数の使用期間を限定するための情報を入れ、前記暗号化部は、当該関数及び前記使用期間を限定するための情報を暗号化することを特徴とするコンピュータプログラムの暗号化システム。
  4. 請求項に記載のコンピュータプログラムの暗号化システムにおいて、
    前記暗号化部は、暗号化するべきコードよりパリティ又はハッシュ値を計算し、該パリティ又はハッシュ値を前記暗号化後実行ファイルに付加することを特徴とするコンピュータプログラムの暗号化システム。
  5. 請求項に記載のコンピュータプログラムの暗号化システムにおいて、
    前記暗号化部は、暗号化されたコードを実行時に暗号解除し、暗号解除されたコードよりパリティ又はハッシュ値を計算し、該計算されたパリティ又はハッシュ値を前記暗号化後実行ファイルに付加されている前記パリティ又はハッシュ値と比較し、両者が不一致である場合に、前記暗号化後実行ファイルの実行を制限するコードを前記暗号化後実行ファイルに付加することを特徴とするコンピュータプログラムの暗号化システム。
  6. コンピュータを請求項1乃至5の何れか1項のコンピュータプログラムの暗号化システムとして機能させるためのプログラム。
JP2003053512A 2003-02-28 2003-02-28 コンピュータプログラムの編集システム及びその方法 Expired - Fee Related JP4147472B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003053512A JP4147472B2 (ja) 2003-02-28 2003-02-28 コンピュータプログラムの編集システム及びその方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003053512A JP4147472B2 (ja) 2003-02-28 2003-02-28 コンピュータプログラムの編集システム及びその方法

Publications (2)

Publication Number Publication Date
JP2004265037A JP2004265037A (ja) 2004-09-24
JP4147472B2 true JP4147472B2 (ja) 2008-09-10

Family

ID=33118090

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003053512A Expired - Fee Related JP4147472B2 (ja) 2003-02-28 2003-02-28 コンピュータプログラムの編集システム及びその方法

Country Status (1)

Country Link
JP (1) JP4147472B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10229277B2 (en) 2013-03-19 2019-03-12 Kabushiki Kaisha Toshiba Code processing apparatus and computer program product

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4818279B2 (ja) * 2005-12-22 2011-11-16 富士通株式会社 プログラム処理装置、プログラム処理方法及びプログラム
JP2013179453A (ja) * 2012-02-28 2013-09-09 Nippon Telegr & Teleph Corp <Ntt> 計算機システムおよび計算方法
JP6343869B2 (ja) * 2013-02-20 2018-06-20 凸版印刷株式会社 携帯端末装置及び復号処理プログラム
KR101556908B1 (ko) * 2013-11-14 2015-10-02 (주)잉카엔트웍스 프로그램 보호 장치

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10229277B2 (en) 2013-03-19 2019-03-12 Kabushiki Kaisha Toshiba Code processing apparatus and computer program product

Also Published As

Publication number Publication date
JP2004265037A (ja) 2004-09-24

Similar Documents

Publication Publication Date Title
CN109284586B (zh) 一种软件授权许可实现方法和装置
JP4981136B2 (ja) アドオンデータファイルへのアクセスを管理する方法及びシステム
US5222134A (en) Secure system for activating personal computer software at remote locations
JP4770425B2 (ja) 保護済み実行プログラムの作成のためのプログラム、方法及び装置
US5530752A (en) Systems and methods for protecting software from unlicensed copying and use
US6405316B1 (en) Method and system for injecting new code into existing application code
EP1084549B1 (en) Method of controlling usage of software components
US8745406B2 (en) Program executable image encryption
US6499035B1 (en) Licensing java objects
JP3444227B2 (ja) ソフトウェアの不正使用防止方法
US20030120938A1 (en) Method of securing software against reverse engineering
US20020169974A1 (en) Detecting and responding to a clock rollback in a digital rights management system on a computing device
JP2003330560A (ja) デジタル権利管理(drm)システムを使用するソフトウェアアプリケーションの保護のための方法および媒体
EA006639B1 (ru) Способ компиляции и исполнения прикладных программ в многопроцессорной среде
EP0266748A2 (en) A software protection system using a single-key cryptosystem, a hardware-based authorization system and a secure coprocessor
KR20070093712A (ko) 라이센스 생성 방법 및 이를 이용한 컨텐츠 제공 방법 및 그 장치
CN101872404A (zh) 一种保护Java软件程序的方法
CN112417380A (zh) 一种基于编译技术的Licence管理系统
JP3377087B2 (ja) ソフトウェア・コンポーネントを処理および配布するための方法および装置
JP2006318464A (ja) 実行可能コードのコピーについての固有の識別を生成する方法及びその管理
JP4147472B2 (ja) コンピュータプログラムの編集システム及びその方法
US20090271875A1 (en) Upgrade Module, Application Program, Server, and Upgrade Module Distribution System
JP2006318465A (ja) 実行可能コードのコピーについての固有の識別を生成する方法及びその管理
WO1996018951A1 (en) Methods and apparatus for protection of executable programs, libraries and data
JP4655613B2 (ja) プログラム実行装置及びプログラム実行方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20061010

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061113

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070110

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080304

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080430

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080509

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080529

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080611

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110704

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110704

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120704

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120704

Year of fee payment: 4

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120704

Year of fee payment: 4

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120704

Year of fee payment: 4

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120704

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120704

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120704

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120704

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130704

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130704

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130704

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees