説明

暗号化プログラム復号方法及び暗号化プログラム復号プログラム

【課題】本発明の課題は、第三者が、ソフトウェアのリバースエンジニアリングを容易には行えないデータ復号方法を提供することである。
【解決手段】本発明では、この課題を解決するために、前記実行プログラムを、電子装置のメモリ上に復号して展開するにあたり、メモリ上の位置につき、ユーザーからは容易には分からず、かつ、展開する電子装置によって、又は展開する時刻等の状況によって異なる位置となるよう工夫をした。結果として、復号後の前記プログラムのリバースエンジニアリングを容易には行えないようにすることができる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、第三者がリバースエンジニアリングを容易には行うことができない暗号化プログラム復号方法又は暗号化プログラム復号プログラムに関する。
【背景技術】
【0002】
近年、コンピュータの急速な普及に伴い、様々なソフトウェアが使用されるようになっている。そして、ソフトウェアを実行する端末としては、サーバ、パーソナルコンピュータ、ワークステーションのほか、PDA、携帯電話、ビデオゲーム機等、あらゆる電子機器が利用可能となっている。
【0003】
そして、ソフトウェア実行プログラムにおいては、デバッガ(例えば非特許文献1参照。)などを用いて、いわゆるリバースエンジニアリングによって違法又は不正な目的で当該ソフトウェアを解析することを防止する必要性は高い。
【0004】
また、ここ数年、電子的な形で記録された音楽、映画、写真等いわゆるデジタルコンテンツが流通又は配布され、前記のような端末を通して再生可能となってきている。一般的に、デジタルコンテンツは、複製が容易であるため、著作権その他知的財産権の保護などの目的から、デジタルコンテンツを容易に複製、剽窃、解読できないようにすることが要求されるようになってきている。
【0005】
そのため、ソフトウェア及びデジタルコンテンツの暗号化及びリバースエンジニアリング防止の方法は、様々な形のものが考案されてきたが、本発明は、新規な方法によってその一をなすものである。
【先行技術文献】
【非特許文献】
【0006】
リチャードMストールマン他著、「GDBデバッギング入門」、日本国、株式会社アスキー発行
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明の課題は、第三者が、ソフトウェアのリバースエンジニアリングを容易には行えないデータ復号方法を提供することである。
【課題を解決するための手段】
【0008】
本発明では、この課題を解決するために、前記実行プログラムを、電子装置のメモリ上に復号して展開するにあたり、メモリ上の位置につき、ユーザーからは容易には分からず、かつ、展開する電子装置によって、又は展開する時刻等の状況によって異なる位置となるよう工夫をした。結果として、復号後の前記プログラムのリバースエンジニアリングを容易には行えないようにすることができる。
【発明の効果】
【0009】
本発明によれば、ソフトウェアが暗号化され、ソフトウェアの実行の際にはメモリに展開される開始アドレスが実行のたびに異なるので、第三者が容易にリバースエンジニアリングを行なえないソフトウェアを提供することが可能となる。
【図面の簡単な説明】
【0010】
【図1】実施形態1を説明するための概念図。
【図2】実施形態1を説明するためのフローチャート。
【図3】プログラムの製造と配布の概要を示す一例図。
【図4】実施形態の具体例を説明するための図。
【発明を実施するための形態】
【0011】
以下に、本発明の実施の形態を説明する。なお、本発明はこれら実施の形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施しうる。
【0012】
実施形態1は、主に請求項1などについて説明する。
【0013】
実施形態2は、主に請求項1などについて説明する。
【0014】
実施形態3は、主に請求項1などについて説明する。
【0015】
実施形態4は、主に請求項1などについて説明する。
【0016】
実施形態5は、主に請求項2などについて説明する。
<<実施形態1>>
【0017】
<実施形態1:概要>
【0018】
実施形態1は、暗号化したプログラムを電子装置に復号する方法であって、前記プログラムが復号する前記電子装置のメモリ上での位置を取得する復号位置取得ステップと、前記プログラムを前記復号位置に復号する復号ステップとを含み、前記復号位置取得ステップで取得される復号位置は、前記電子装置ごとに、又は毎回の復号の度に変化することを特徴とする暗号化プログラム復号方法である。
【0019】
図1は、本実施形態の一例の概念を示すものである。また、図2は、実施形態1を説明するフローチャートである。
【0020】
まず、図1を用いて、本実施形態の概略を説明する。
【0021】
復号プログラム101は、メモリ104のアドレス1上にロードされ、暗号化した実行プログラム102を復号し、電子装置103のメモリ104のアドレス2上に展開するものである。
【0022】
なお、実行プログラム102を暗号化する暗号化技術については、任意のものを用いることができる。例えば、アメリカ政府標準になっているDES、FEAL、MISTY、IDEAといった秘密鍵方式を用いることもでき、また、RSA暗号、楕円曲線暗号、ElGamal暗号などのいわゆる公開鍵方式を用いることもできる。後者(公開鍵方式)の場合には、プログラムの製作者等が、実行プログラム102を、自身の秘密鍵を用いて暗号化する。そして、製作者等が、前記暗号化された実行プログラム102に加え、復号プログラム101に、前記秘密鍵に対応する公開鍵を含めてユーザーに配布したり、別の方法を用いたりして、前記公開鍵をユーザーに配布することになる。
【0023】
復号プログラム101と、実行プログラム102は一体として動作するが、必ずしも復号プログラム101と実行プログラム102が同一ファイルとなっている必要はない。
【0024】
なお、実行プログラム102が展開し実行される電子装置は、PC(パーソナルコンピュータ)のみならず、サーバ、パーソナルコンピュータ、ワークステーションのほか、PDA、携帯電話、ビデオゲーム機等、CPU及びメモリ(これらの機能を含むチップを含む)を搭載するあらゆる電子機器が使用可能である。また、前記電子装置は、単独でもよく、複数の装置がネットワーク接続されたシステム等でもよい。
【0025】
<実施形態1:構成及び処理の流れ>
【0026】
次に、実施形態1の構成を説明する。図2は、実施形態1での処理の流れの一例を示したものである。本実施形態における方法は、以下に示すステップよりなる。以下に示すステップには、本実施形態に必須の構成である、プログラムが復号する電子装置のメモリ上での位置を取得する復号位置取得ステップと、前記プログラムを前記復号位置に復号する復号ステップが含まれている。
【0027】
また、以下の各ステップは、電子装置で動作するプログラムで実行することができる。また、このプログラムを計算機によって読み取り可能な記録媒体に記録することができ、前記記憶媒体は、電子装置から独立した媒体に限らず、LANやインターネット等により送信されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。さらに、以下の各ステップは、電子装置上のOS(オペレーティングシステム)や、データベース管理ソフト、ネットワークソフト等のミドルウェア等によって、本実施形態を実現するための各処理の一部を実行する形でもよい。(本明細書の全体を通して同様である。)
【0028】
<ステップS201>
【0029】
ステップS201は、復号プログラム101を実行するステップである。復号プログラム101を、これを実行する電子装置103のメモリ104にロードし、起動し、実行する。
【0030】
前記復号プログラムがロードされるメモリ上のアドレスは、前記電子装置のオペレーティングシステム(以下、「OS」と記す。)が決めることが多い。
【0031】
<ステップS202>
【0032】
ステップS202は、復号プログラム101が、暗号化した実行プログラム102が復号する電子装置のメモリ上での位置を取得する復号位置取得ステップである。
【0033】
ステップS202によって取得される復号位置は、前記電子装置ごとに、又は毎回の復号の度に変化することが特徴となっている。すなわち、復号位置を、電子装置ごとに、又は毎回の復号の度に変化する値を基礎に、これに何らかの演算を加え、又は演算を加えずに、復号位置たるメモリ上のアドレスの数値とすることを特徴とする。
【0034】
例えば、電子装置によって異なる値を持つものとして、当該電子装置のIPアドレス、当該電子装置の製造番号、当該電子装置のOS等特定ソフトウェアのライセンス番号等があり、また、復号の度に変化する値として、復号時のHDの空容量、メモリの空容量等があるが、使用可能なものはどれでも用いることができる。また、上記各値を複数組み合わせることも可能である。
【0035】
<ステップS203>
【0036】
ステップS203は、ステップS202によって取得された復号位置をもとに、復号プログラム101が、実行プログラム102を、前記復号位置に復号するステップである。
【0037】
すなわち、ステップS202によって算定されたメモリ上のアドレスに、実行プログラム102を復号し、展開するステップである。
【0038】
なお、仮想メモリを使用しているシステムでは、論理的なアドレススペースの全てに対して物理メモリが割り当てられているとは限らないので、ステップS202によって取得された復号位置から、少なくとも実行プログラム102を復号したときのサイズ分の物理メモリを割り当てる作業が必要となる。このためには、メモリを割り当てる関数やシステムコール(例えば、malloc()、sbrk()など)を用いる。より具体的には、sbrk()は指定されたサイズのメモリ領域を、データセグメントを拡張して確保するシステムコールであるので、まず現在のデータセグメントの終わりのアドレスを取得し、この値と、ステップS202で算定されたメモリ上のアドレスとの差を求め、これに実行プログラム102を復号したときのサイズを加えた値をsbrk()の引数として渡してメモリを確保する。
【0039】
また、実行プログラム102の中のジャンプ命令のジャンプ先のアドレスや変数のアドレスを変更するために、実行プログラム102を復号したものに、コンパイラの一部を構成するリンカやローダを実行するようにしてもよい。
【0040】
<実施形態1:具体例>
【0041】
以下、図3を用いて一具体例を説明する。あるソフトウェアメーカーが、Player.exeという実行プログラム302を作成し、これを暗号化して配布することとする。
【0042】
前記ソフトメーカーは、秘密鍵方式を採用することとし、まず、前記player.exe302を、秘密鍵で暗号化する。
【0043】
次に、前記ソフトメーカーは、暗号化した前記Player.exe302を、前記秘密鍵に対応する公開鍵とともに、Decoder.exeという復号プログラム301に組み込み、CD−ROM303などの媒体に記録した上で、ユーザーに配布する。なお、CD−ROMなどの媒体を使って配布せず、インターネットなどを用いてダウンロード可能として配布してもよい。
【0044】
ユーザーは、自己のパーソナルコンピュータ304上で、同パーソナルコンピュータに接続されたCD−ROMドライブから読み込んだDecoder.exe301を実行した。図4のXXXXXXXXは、Decoder.exe301が、パーソナルコンピュータ304のメモリ305にロードされた際のアドレスを表している。前記アドレスは、前記パーソナルコンピュータのOSが決めることが多い。
【0045】
Decoder.exe301は、組み込まれた復号用鍵を用いて、Player.exe302を復号し、電子装置のメモリ305に展開する。
【0046】
まず、Decoder.exe301は、Player.exe302を復号するメモリ上のアドレスYYYYYYYYを取得する。具体的には、Player.exe302は、まず、前記パーソナルコンピュータ304のIPアドレスを取得した。さらに、Decoder.exe301は、前記PCのハードディスクの空容量を取得する。
【0047】
そして、Decoder.exe301は、前記IPアドレス及びHD空容量に、一定の演算を加え、Player.exe302を展開するアドレスをYYYYYYYYと算定する。
【0048】
そして、Decoder.exe301は、前記復号にあたり、算定されたアドレスYYYYYYYYに、Player.exe302を展開する。
【0049】
<実施形態1:効果>
【0050】
以上のとおり、本実施形態によれば、暗号化した実行プログラムを復号する際、復号化するプログラムのメモリ上において展開するアドレスを、復号する電子装置によって異なる値、又は、復号の時によって異なる値に基づいて計算するため、結果として、復号後の前記プログラムのメモリ上の位置を容易に探索することができず、結果、リバースエンジニアリングを容易には行えないようにすることができる。
<<実施形態2>>
【0051】
<実施形態2:概要>
【0052】
実施形態2は、前記復号位置取得ステップは、前記復号位置を、前記復号位置取得ステップが実行される時刻及び/又は前記電子装置の演算装置のシリアルナンバーと関連して取得することを特徴とする実施形態1のデータ復号方法である。
【0053】
実施形態2は、以下に説明するところを除けば、概要、構成、具体例及び効果については、いずれも実施形態1と同様である。
【0054】
実施形態2の特徴は、前記復号位置を、実施形態1と同様、復号化するプログラムのメモリ上において展開するアドレスを、復号する電子装置によって異なる値、又は、復号の時によって異なる値に基づいて計算するため、前者については、前記電子装置の演算装置のシリアルナンバーを、後者については、前記復号位置取得ステップが実行される時刻を使用する点にある。
【0055】
前記シリアルナンバー又は時刻をそれぞれ単独で用いてもよく、両者を組み合わせて用いてもよい。
【0056】
<実施形態2:特徴>
【0057】
時刻情報に基づいてアドレスを計算する方法は様々考えられ、どんな方法でもよいが、一例としては以下の方法が考えられる。
【0058】
ある時点、例えば、1900年1月1日午前0時0分0秒と、復号開始時点の間の秒数を計算し、当該秒数に相当する数値又はこれを適当な数で除した数値を、実行プログラムの先頭アドレスとすることが考えられる。
【0059】
すなわち、前記復号開始時点での時刻が、2003年4月1日午前10時0分0秒であるとすると、1900年1月1日午前0時0分0秒との間の秒数は、3,258,266,400となる。これを16進数に変換すると、C2353320となる。これを、実行プログラムの先頭アドレスとすることができる。または、復号する電子装置のシステムによって、復号位置のアドレスに制約がある場合には、前記数値に適当な演算を加え、前記システムが許容するアドレスを算定することができる。
【0060】
前記電子装置の演算装置のシリアルナンバーを用いてアドレスを計算するには、復号プログラムが、前記演算装置のシリアルナンバーを取得し、復号する電子装置のシステムが許容するアドレスの範囲内となるよう前記シリアルナンバーに適当な演算を加え、復号位置を取得することができる。
<<実施形態3>>
【0061】
<実施形態3:概要>
【0062】
実施形態3は、暗号化したプログラムを電子装置に復号プログラムであって、その内部に暗号化した前記プログラムと、前記復号のための暗号鍵を含み、前記暗号化したプログラムを前記電子装置のメモリ上において復号するにあたり、前記プログラムが復号する前記電子装置のメモリ上での位置は、前記電子装置ごとに、又は毎回の復号の度に変化することを特徴とするデータ復号プログラムである。
【0063】
<実施形態3:構成>
【0064】
実施形態3の発明は、実施形態1の各ステップを実行するためのプログラムであるが、その内部に、暗号化したプログラムと、復号のための暗号鍵を含むことを特徴とする。その他の概要、構成、具体例及び効果については、いずれも実施形態1と同様である。
【0065】
本実施形態のプログラムは、コンピュータなどの電子装置上によって実行される。例えば、その一例として、コンピュータを利用する場合には、本実施形態のプログラムは、CPU、メモリ、バス、インターフェイス、周辺装置などから構成されるハードウエアと、これらのハードウエア上にて実行可能なOS、ミドルウェア等のソフトウエアと協働して実行される。
<<実施形態4>>
【0066】
<実施形態4:概要>
【0067】
実施形態4は、前記暗号化したプログラムを前記電子装置のメモリ上において復号するにあたり、前記プログラムが復号する前記電子装置のメモリ上での位置を、前記復号プログラムが復号を実行する時刻及び/又は前記電子装置の演算装置のシリアルナンバーと関連して取得することを特徴とする実施形態3のデータ復号プログラムである。
【0068】
実施形態4の概要、構成、具体例及び効果については、いずれも実施形態2及び3と同様である。
<<実施形態5>>
【0069】
<実施形態5:概要>
【0070】
実施形態5は、前記暗号化したプログラムが、映像、音声、文字の一又は一以上の組合せでなるデータを再生することをその機能に含むことを特徴とする請求項1の暗号化プログラム復号プログラムである。
【0071】
すなわち、前記暗号化したプログラムは、映像、音声、文字の一又は一以上の組合せでなるデータ、すなわち、いわゆるマルチメディアコンテンツ再生をその機能とするプログラムであることが、本実施形態の特徴である。
【0072】
<実施形態5:具体例>
【0073】
ある映画配信会社が、映像と音声を、映像音声データとして配布する。そして、前記映像音声データは、専用の再生プログラムを使用しないと再生できないよう、特殊なデータ形式を取る。
【0074】
この場合、前記映画配信会社は、前記映像音声データと、専用の再生プログラムを合わせてユーザーに配布する。または、前記専用の再生プログラムをあらかじめ保有しているユーザーに、前記映像音声データを配布する。
【0075】
前記専用の再生プログラムは、実施形態3のように、暗号化され、さらに、符号プログラムと復号のための暗号鍵が含まれている。
【0076】
ユーザーは、前記映像音声データ及び専用の再生プログラムを受け取り、前記専用の再生プログラムを用いて、前記映像音声データを再生することができる。
【0077】
<実施形態5:効果>
【0078】
以上のとおり、本実施形態によれば、実施形態1〜4と同様、リバースエンジニアリングを容易には行えないようにすることができ、再生プログラムを容易には解析できないようにする結果、権限のない者が、再生プログラムが再生するマルチメディアコンテンツを、閲覧したり、複製、改変等を行ったりすることを、容易には行えないようにすることができる。
【産業上の利用可能性】
【0079】
本発明は、第三者が容易にリバースエンジニアリングを行なうことができないプログラムを提供するという効果を有し、暗号化プログラム復号方法及び暗号化プログラム復号プログラムとして有用である。
【符号の説明】
【0080】
0101 復号プログラム
0102 暗号化したプログラム
0103 電子装置
0104 電子装置上のメモリ

【特許請求の範囲】
【請求項1】
暗号化したプログラムを電子装置に復号させるプログラムであって、
その内部に暗号化した前記プログラムと、
前記復号のための暗号鍵を含み、
前記暗号化したプログラムを前記電子装置のメモリ上において復号するにあたり、前記プログラムが復号する前記電子装置のメモリ上での位置は、実行プログラムの一部に対して物理メモリを割り当てるために、復号の時刻を用いてアドレスを計算して、少なくとも実行プログラムを復号したときのサイズ分の物理メモリを割り当てることを特徴とする暗号化プログラム復号プログラム。
【請求項2】
前記暗号化したプログラムは、映像、音声、文字の一又は一以上の組合せでなるデータを再生することをその機能に含むことを特徴とする請求項1に記載の暗号化プログラム復号プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2010−176697(P2010−176697A)
【公開日】平成22年8月12日(2010.8.12)
【国際特許分類】
【出願番号】特願2010−74250(P2010−74250)
【出願日】平成22年3月29日(2010.3.29)
【分割の表示】特願2003−299298(P2003−299298)の分割
【原出願日】平成15年8月22日(2003.8.22)
【出願人】(398055691)株式会社ハイパーテック (7)
【Fターム(参考)】