JP4568489B2 - プログラム保護方法、プログラム保護プログラムおよびプログラム保護装置 - Google Patents

プログラム保護方法、プログラム保護プログラムおよびプログラム保護装置 Download PDF

Info

Publication number
JP4568489B2
JP4568489B2 JP2003319318A JP2003319318A JP4568489B2 JP 4568489 B2 JP4568489 B2 JP 4568489B2 JP 2003319318 A JP2003319318 A JP 2003319318A JP 2003319318 A JP2003319318 A JP 2003319318A JP 4568489 B2 JP4568489 B2 JP 4568489B2
Authority
JP
Japan
Prior art keywords
program
block
memory
unit
rewriting
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
JP2003319318A
Other languages
English (en)
Other versions
JP2005085188A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2003319318A priority Critical patent/JP4568489B2/ja
Publication of JP2005085188A publication Critical patent/JP2005085188A/ja
Application granted granted Critical
Publication of JP4568489B2 publication Critical patent/JP4568489B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Storage Device Security (AREA)

Description

この発明は、メモリにロードされた実行可能なプログラムの保護方法、プログラム保護プログラムおよびプログラム保護装置に関する。
計算機により実行されるプログラムは、暗号化された状態でファイルシステムに保管されている限り、解析や改竄といった不正行為に対して安全であると考えられる。
もっとも計算機のCPUは、暗号化されたプログラムをそのままの状態で実行することはできないので、メモリへの展開時あるいは実行中にこの暗号を復号する必要がある。したがって、どれほど強固な暗号化を施したとしても実行時には必ず復号されているので、実行中にメモリ上のデータを解析することで、復号後のプログラムや鍵などの重要な情報を比較的容易に取得できる。復号時に復号プログラムの正当性をチェックするようにしても(たとえば、特許文献1参照。)、復号後のデータの安全性が確保されなければ意味がないものになってしまう。PC(パーソナル・コンピュータ)のように、内部の仕様が公開されている計算機ではこうした問題が特に顕著である。
正規の購入者以外によるプログラムの使用を禁止するための技術は従来から存在するが(たとえば、特許文献2参照。)、解析や改竄などは正規の購入者によりなされることも多い。またPCに限らず、プロセッサがメモリにアクセスするときのアドレスを監視し、不正な覗き見や改竄を検出する手法(たとえば、特許文献3参照。)、あるいはメモリには命令語のビット列を入れ替えたプログラムを置いておき、プロセッサに入力する直前に元の順序に戻す手法(たとえば、特許文献4参照。)などがある。
特開平11−39156号公報 特開平11−85498号公報 特開平5−324483号公報 特開2000−56963号公報
しかしながら、上記従来技術に開示された技術は、いずれも汎用性や拡張性に乏しく、一般的な計算機システムやアプリケーション・プログラムには容易に適用できなかった。また、重要なプログラムコードの改竄をメモリの内容を監視することで調べる手法もあるが、監視しているプログラムがCPUによって実行されているプログラムとは別に用意されたものであっても(いわゆる「なりすまし」)、それらを区別することはできなかった。
このように従来技術においては、メモリに展開されたプログラムに対する不正行為を防止するための一般的で効果的な手だてがないという問題があった。
この発明は、上述した従来技術による問題点を解消するため、メモリ上のプログラムに対する不正行為を簡易な処理で、しかも強力に防止することが可能なプログラム保護方法、プログラム保護プログラムおよびプログラム保護装置を提供することを目的とする。
上述した課題を解決し、目的を達成するため、この発明にかかるプログラム保護方法、プログラム保護プログラムおよびプログラム保護装置は、メモリにロードされた実行可能なプログラムに対する解析・改竄などを防止する際に、前記メモリにロードするプログラムを複数のブロックに分割し、分割された任意のブロックの順序を入れ替え、任意のブロックの順序を入れ替えられたプログラムのアドレスを解決し、アドレスを解決されたプログラムを前記メモリにロードすることを特徴とする。
この発明によれば、保護されたプログラムはその実行の都度、コード列の順序を入れ替えられたうえでメモリ上にロードされる。
また、この発明にかかるプログラム保護方法、プログラム保護プログラムおよびプログラム保護装置は、メモリにロードされた実行可能なプログラムに対する解析・改竄などを防止する際に、前記メモリにロードするプログラムを複数のブロックに分割し、分割された任意のブロックのコード列を同等の機能を有する別のコード列に置き換え、任意のブロックのコード列を置き換えられたプログラムのアドレスを解決し、アドレスを解決されたプログラムを前記メモリにロードすることを特徴とする。
この発明によれば、保護されたプログラムはその実行の都度、コード列の一部を機能的に等価な別のコード列に置き換えられたうえでメモリ上にロードされる。
また、この発明にかかるプログラム保護方法、プログラム保護プログラムおよびプログラム保護装置は、メモリにロードされた実行可能なプログラムに対する解析・改竄などを防止する際に、前記メモリにロードするプログラムを複数のブロックに分割し、分割された任意のブロックを同等の機能を有する複数のブロックおよび当該複数のブロックのいずれか1つを指定するブロックにより多重化し、任意のブロックを多重化されたプログラムのアドレスを解決し、アドレスを解決されたプログラムを前記メモリにロードすることを特徴とする。
この発明によれば、保護されたプログラムはその実行の都度、コード列の一部を選択的に実行される複数のコード群で多重化されたうえでメモリ上にロードされる。
本発明にかかるプログラム保護方法、プログラム保護プログラムおよびプログラム保護装置によれば、メモリ上に存在するプログラムの「見た目」は起動ごとに複雑に変化し、しかも実質的に意味のないコードや実行されないコードなどが多数挿入されるので、メモリ上のプログラムに対する不正行為を非常に困難にすることができるという効果を奏する。
以下に添付図面を参照して、この発明にかかるプログラム保護方法、プログラム保護プログラムおよびプログラム保護装置の好適な実施の形態を詳細に説明する。
(実施の形態1)
図1は、この発明の実施の形態1にかかるプログラム保護装置のハードウエア構成の一例を示す説明図である。図示する装置は一般的なPC(パーソナル・コンピュータ)であり、PCが通常備えるハードウエア(同図ではそのうち、本発明の説明に必要な最低限のものしか示していない)に加え、プログラムの不正な改竄・解析などを阻止するための専用の保護装置100を備えたことが特徴となっている。
図示するように上記PCの内部バスには、装置全体の制御を司るCPU101や、DMA(Direct Memory Access)によるデータ転送が可能なメインメモリ102などが接続され、これらがI/Oブリッジ103を介して、汎用バス(ここではPCIバス)に接続されている。この汎用バスには、CPU101により実行されるプログラムや各種データなどを保持するHDD(ハードディスクドライブ)104のほか、上述の保護装置100がPCIカードもしくはPCIボードの形態で接続されている。
また、図2はこの発明の実施の形態1にかかるプログラム保護装置のハードウエア構成の他の一例を示す説明図である。図示する例は汎用バスでなく、内部バスに保護装置100を接続したものである。このように保護装置100は、CPU101やメインメモリ102、HDD104と直接通信できる限り、PCの内外を問わず物理的にどこにあっても、どのように接続されているのでもよい。
また、図3はこの発明の実施の形態1にかかるプログラム保護装置の機能的構成を示す説明図である。ただし、図3には本発明を説明するのに必要な最低限の機能部、具体的には保護装置100により実現される機能部しか示していない。したがって、図示は省略するが、他の機能部を備えていてもよい。
リロケータブルコード生成部300は、保護装置100による保護の対象となるプログラムについて、当該プログラムを後述する分割・再構成後も再配置可能とする(リロケータブル化する)ための「リロケート情報」を生成する機能部である。具体的には上記プログラムの解析により、プログラム内の絶対アドレス参照部分と相対アドレス参照部分とをすべて抽出して、各部分にラベリングしたうえでリロケート情報としてテーブル化する。
また、分割部301は、保護装置100による保護の対象となるプログラムをHDD104から読み出して、複数のブロック(領域)に分割するとともに、各ブロックの間に分岐命令(ジャンプ命令)を挿入する機能部である。
このブロックのサイズは一定でなく、たとえばxバイトのブロックを切り出した後はyバイトのブロックを切り出すというように、分割時にランダムに変更してゆく。1つのブロックには少なくともこの命令が1つ含まれなければならない、などの論理的な制限はない。細かく分割すればするほど保護の強度は上がるが、プログラムの実行速度が落ちるので、このトレード・オフを勘案して適度な細かさで分割する必要がある。
なお、分割された各ブロックの継ぎ目には、直後のブロックへの分岐命令が挿入される。この分岐命令は、後述する再構成部302によりブロックの順序が入れ替えられても、ブロックの実行順序は変化しないような形で(すなわち、プログラムがブロックレベルでリロケータブルとなるように)記述される。図4は、分割部301による分割および分岐命令挿入後のプログラムを模式的に示す説明図である。このプログラムは分割部301により暗号化され、HDD104に保存される。
また、再構成部302は、分割部301によりHDD104に保存されたプログラム(暗号化されリロケータブル化されたプログラム)を読み出して、ブロックの並べ替えなどにより当該プログラムを表面的・実質的に複雑化した後、アドレス解決された実行可能な1つのプログラムとして出力する機能部である。この再構成部302により行われるプログラムの複雑化には、具体的には(1)ブロックの並べ替え(2)ブロックの置き換え(3)ブロックの多重化、の3種類がある。以下順次説明する。
(1)ブロックの並べ替え
図5は、図4に示したプログラムを構成する各ブロックが、再構成部302により並べ替えられた後の状態を模式的に示す説明図である。ブロックの順序が入れ替わることでプログラムの外観(メインメモリ102への展開時の状態)は変化しても、分割部301により挿入されている分岐命令があるので、CPU101による実行順序そのものは変化しない。すなわち、図4および図5に示したプログラムは、いずれもブロック1→2→3→4の順序で実行される。
(2)ブロックの置き換え
図6は、図4に示したプログラムのブロック2が、再構成部302によりブロック2’に置き換えられた後の状態を模式的に示す説明図である。このブロック2’は、元のブロック2と機能的には等価であるが、「見た目」すなわちコード列は異なっている。コンパイラによる最適化と似ているが、違うのはコードの実行効率は問わない点である。すなわち、ブロック2よりブロック2’のほうが実行速度が遅くても置換してしまう。このブロック2’は、ブロック2についてたとえば以下のような処理を行うことで生成される。
(2−1)命令コードの並べ替え
実行順序に前後関係のない命令の順序を入れ替える。実行順序に前後関係がある命令は、並べ替えの後に分岐命令を追加することで、命令の位置が入れ替わっても実行順序そのものは変化しないようにする。
(2−2)1つの命令コードを複数に分割、あるいは複数の命令コードを1つに統合
前者の例はたとえば、「A+1」という命令を「A+2」と「A−1」とに分割したり、複合的な命令を複数の単純な命令で代替したりするようなものである。後者の例はたとえば、「A+1」と「A+2」とを「A+3」に統合するようなものである。
(2−3)ブロック本来の機能に影響しない命令コードの挿入
たとえばnop命令や、レジスタに1を加算する命令と1を減算する命令との組み合わせなど、ブロック本来の機能(以下では「主機能」と呼ぶ)に影響しない冗長な命令を追加する。あるいは、主機能とは無関係な機能(以下では「追加機能」と呼ぶ)を実現するための一群の命令(この命令群はあらかじめ再構成部302に保持されている)を追加する。なお、この追加機能は単にプログラムの外観を変化させるだけでなく、プログラムの「なりすまし」の検出にも利用することができるが、この点については実施の形態2において後述する。
(3)ブロックの多重化
図7は、図4に示したプログラムのブロック2が、再構成部302により複数のブロック「2−a」「2−b」「2−c」「2−d」に多重化された後の状態を模式的に示す説明図である。これらのブロックはいずれも、図4に示したブロック2と機能的に等価であるが、コード列はそれぞれ異なっている。
また、ブロック「2−entry」は多重化されたブロックの切り替えスイッチとしてのみ機能するブロックである。具体的にはブロック2のうち、他のブロックから参照される部分(アドレス被参照部分)が「2−a」〜「2−d」のいずれか1つへの分岐命令に置き換えられ、それ以外の部分には無効な値が詰められるか(この場合「2−entry」のサイズはブロック2のサイズと等しい)、あるいは削除されて間を詰められている。ブロック2を参照する他のブロックから「2−entry」に入ってきた制御は、すぐに「2−entry」を通過して、上記命令で特定される「2−a」「2−b」「2−c」あるいは「2−d」のいずれか1つへ分岐する。
なお、「2−a」〜「2−d」いずれのブロックが実行される場合でも、上述のようにこれらは機能的に等価であるので、他のブロック中の参照する場所(アドレス参照部分)も同一である。そこで、多重化された各ブロックへの入口だけでなく、各ブロックからの出口も「2−entry」に集約するようにしてもよい。すなわち図8に模式的に示すように、ブロック「2−a」〜「2−d」に共通する、他のブロックの同一の場所を参照する部分にはいずれも「2−entry」中の同一の場所を参照させ、そこから間接的に他ブロック中の目的の場所を参照させるようにする。
分割部301によるブロック分割後のプログラムは、上記(1)〜(3)の各手法により複雑化された後、さらに再構成部302により未解決のアドレスを解決される。このアドレス解決には、リロケータブルコード生成部300により生成された上述のリロケート情報、すなわちプログラム中の絶対アドレス参照部分と相対アドレス参照部分とのリストが使用される。
つぎに、図3におけるDMA部303は、再構成部302から出力されたプログラムをDMAによりメインメモリ102に転送するとともに、後述するスイッチ書き換え部304あるいはブロック書き換え部305からの指示により、メインメモリ102に展開されたプログラムの一部をDMAで書き換える機能部である。
また、スイッチ書き換え部304はプログラムの実行中に、つぎのスイッチ切り替えまでの時間をランダムに決定するとともに、当該時間が経過した時点で、スイッチすなわちたとえば上述の「2−entry」中にある分岐命令の飛び先を、現在のブロックから他のブロックへと書き換える機能部である。すなわち、メインメモリ102上での上記命令の展開位置を特定し、当該位置と書き換え後の飛び先とをDMA部303に通知して、リアルタイムにスイッチを書き換えさせる。
また、ブロック書き換え部305はプログラムの実行中に、実行中でないことが確実なブロックを他のブロックで置き換える機能部である。たとえば「2−entry」のスイッチが「2−a」を指している間に、DMA部303に指示して、メインメモリ102上の「2−b」を「2−b’」で上書きさせるか、あるいは「2−b」を削除して別の領域に「2−b’」を書き込ませる。「2−b」のコード列よりも「2−b’」のコード列のほうが長いときは必然的に後者となるが、そうでなくとも後者のようにする(コード内容だけでなくその展開位置も変える)ことで、プログラムの解析がより困難となる。なおこの「2−b’」は、元の「2−b」に上述の(2−1)〜(2−3)を適用するなどして作成する。
なお、メインメモリ102の内容を書き換えるとCPU101に読み込まれているキャッシュも同時に破棄されるので、通常問題は発生しないが、何らかの原因で稀にCPU101が書き換え前のキャッシュを実行し続けることがある。この場合、スイッチ書き換え部304がたとえばメインメモリ102上のスイッチを「2−b」から「2−a」に書き換えた後でも、キャッシュのために「2−b」が依然実行されていることもあり、この実行中の「2−b」をブロック書き換え部305で「2−b’」に置き換えようとすると何らかの不整合が発生する。
そこで、CPU101により現在実行されているのがどのブロックであるかを特定するために、たとえば多重化された個々のブロックごとにカウンタを設け、再構成部302で各ブロックの先頭にカウントアップ命令、末尾にカウントダウン命令を追加しておく。これにより、たとえば「2−b」用のカウンタは「2−b」の実行開始直後に1、実行終了直後に0となる。したがって、「2−b」が実行中でないことが確実なとき、具体的にはスイッチを「2−a」に書き換えた後「2−b」のカウンタが0となるのを待って、「2−b’」をメインメモリ102に書き込めば、実行中のブロックを誤って差し替えてしまうことがない。その後、スイッチが「2−a」から「2−b’」に切り替わった時点で、差し替え後のブロックが実行されるようになる。
つぎに、図9はこの発明の実施の形態1にかかるプログラム保護装置における、プログラムのインストール処理の手順を示すフローチャートである。
本発明により保護されるプログラムのインストーラ(正確には当該インストーラを実行するCPU101)は、CD−ROMなどに格納された当該プログラムを読み出して、保護装置100の分割部301に引き渡す。これを受けた分割部301は、まずその暗号を復号するとともに(ステップS901)、リロケータブルコード生成部300に指示して上述のリロケート情報を生成させる(ステップS902)。
つぎに分割部301は、復号後のプログラムをランダムなサイズの複数のブロックに分割するとともに(ステップS903)、ブロック間の継ぎ目に分岐命令を挿入する(ステップS904)。そして、上記処理後のプログラムとリロケータブルコード生成部300から受け取ったリロケート情報とを暗号化の上(ステップS905)、HDD104に保存する(ステップS906)。なお、保護装置100による上記処理と平行して、CPU101はレジストリの設定など、インストール時に通常行う処理を行う。
つぎに、図10はこの発明の実施の形態1にかかるプログラム保護装置における、プログラムの実行処理の手順を示すフローチャートである。
画面上のアイコンのダブルクリックなどにより、図9の手順でインストールされたプログラムの起動が指示されると(ステップS1001:Yes)、当該プログラムのローダ(正確には当該ローダを実行するCPU101)はメインメモリ102上に当該プログラムの展開領域を確保するとともに、保護装置100の再構成部302を起動する。
これを受けた再構成部302は、HDD104から当該プログラムとそのリロケート情報を読み出して、暗号を復号するとともに(ステップS1002)、上述の(1)〜(3)をプログラム内の任意のブロックに適用することで、当該プログラムを再構成する(ステップS1003)。さらに、再構成後のプログラム内のアドレスを、リロケート情報を参照して解決する(ステップS1004)。
そして、上記処理後のプログラムを再構成部302から受け取ったDMA部303は、ローダがメインメモリ102上に確保した領域へ当該プログラムをロードする(ステップS1005)。この後プログラムの終了指示があるまでの間(ステップS1006:No)、メインメモリ102上に展開されたプログラムがCPU101により順次実行されるが、スイッチの切り替え時期が到来、すなわちスイッチ書き換え部304によりランダムに決定された所定時間が経過すると(ステップS1007:Yes)、スイッチ書き換え部304からの指示を受けたDMA部303により、メインメモリ102上のスイッチ部分(分岐命令の飛び先)が書き換えられる(ステップS1008)。なお、スイッチ書き換え部304によりランダムに決定された所定時間が経過するまでは(ステップS1007:No)、ステップS1006に戻る処理を繰り返す。
そして、書き換え前のスイッチで選択されていたブロックが実行中でなくなったとき、すなわち当該ブロックのカウンタが0になった時点で(ステップS1009:Yes)、ブロック書き換え部305により当該ブロックのコード列が別のコード列で置き換えられる(ステップS1010)。この後ステップS1006に戻る。
また、プログラムの終了指示があったときは(ステップS1006:Yes)、その時点で本フローチャートによる処理を終了する。
以上説明した実施の形態1によれば、保護対象のプログラムはその実行の都度、再構成部302によりコード列を組み替えられたり冗長なコード列を挿入されたりするので、メインメモリ102上に展開された復号後のプログラムの、どの部分がどの機能に対応するのかを容易に特定できない。これにより、解析や改竄などの不正行為を阻止、あるいは事実上無力化・無効化することができる。
なお、上述した実施の形態1ではプログラムのリロケート情報を、本装置へのインストール時に生成するようにしたが、プログラム中のアドレス参照部分は固定的であるので、あらかじめ配布元で生成したものをプログラムとともに暗号化して配布するようにしてもよい。この場合上述のリロケータブルコード生成部300は不要であり、再構成部302はプログラムに元々添付されていたリロケート情報を用いて、再構成後のプログラムのアドレスを解決する。
また、上述した実施の形態1ではプログラムの分割を、本装置へのインストール時に行うようにしたが、この分割も再構成と同様、プログラムの実行の都度行うようにしてもよい。この場合、並び替えなどの対象となるブロックも実行ごとに異なる形で切り出されるので、保護はより強固となる。
(実施の形態2)
さて、上述した実施の形態1はプログラムの「見た目」を複雑化することで、解析や改竄などを困難とする例であったが、以下で説明する実施の形態2のように、万一こうした行為の結果不正なプログラムが実行されることがあっても、保護装置100でその事実を検知できるようにしてもよい。
実施の形態2にかかるプログラム保護装置のハードウエア構成は、図1あるいは図2に示した実施の形態1のそれと同一であるので説明を省略する。図11は、この発明の実施の形態2にかかるプログラム保護装置の機能的構成を示す説明図である。図中、リロケータブルコード生成部1100、分割部1101、スイッチ書き換え部1104およびブロック書き換え部1105は、図3に示した同名の各機能部と同一であるので説明を省略する。
実施の形態1において、再構成部302/1102による複雑化の手法の(2−3)として、ブロックの主機能に影響しない追加機能の挿入を挙げたが、実施の形態2ではたとえばメインメモリ102の所定位置に所定の値を書き込んだり、デバイスドライバを経由して、その制御下にあるデバイスから保護装置100へ所定の信号を返させたりするような追加機能を挿入する。そして実施の形態2の再構成部1102は、どのブロックにどのような機能を追加したか(再構成情報)を後述する不正検出部1107に通知する。
DMA部1103は実施の形態1のDMA部303と同様、再構成後のプログラムをメインメモリ102にロードしたり、ロードしたプログラムの一部を書き換えたりするほか、後述する要約部1106からの指示により、メインメモリ102の内容(メモリイメージ)をDMAで読み出して、要約部1106に出力する。
要約部1106は、再構成部1102から入力したプログラム(メインメモリ102にロードされる直前のメモリイメージ)、およびDMA部1103から入力したプログラム(メインメモリ102上での現在のメモリイメージ)を所定の要約関数などにより要約する機能部である。なお、この要約は個々のブロック単位で行うのが理想的であるが、所定サイズ、たとえばページ単位である4KBごとに分割して要約することも可能である。
不正検出部1107は、プログラムの改竄やなりすましといった不正行為を、プログラムの実行中にリアルタイムに検出する機能部である。
すなわち不正検出部1107は、再構成部1102から通知された再構成情報に対応する所定の作用/反応、たとえばメインメモリ102の所定位置に所定値が書き込まれていたり、所定のデバイスから所定の信号が返ってきたりというように、主機能とは無関係な追加機能により実現されるアクションが実際にあるかどうかを監視する。CPU101により実行されているのが真正のプログラムでない場合、これらの作用/反応がないことをもってその事実を検知できる。
また、不正検出部1107はプログラム実行中に、不定期に要約部1106に指示して、今現在のプログラムのメモリイメージの要約を作成させる。そしてこれを、あらかじめ保持しているロード時点でのメモリイメージの要約と照合する。プログラムの実行中にメモリイメージは変化しないことを前提とすると、メインメモリ102上のプログラムが改竄された場合、両者が一致しないことをもってその事実を検知できる。
実施の形態2にかかるプログラム保護装置における、プログラムのインストール処理の手順は、図9に示した実施の形態1のそれと同一であるので説明を省略する。図12はこの発明の実施の形態2にかかるプログラム保護装置における、プログラムの実行処理の手順を示すフローチャートである。
画面上のアイコンのダブルクリックなどにより、図9の手順でインストールされたプログラムの起動が指示されると(ステップS1201:Yes)、当該プログラムのローダ(正確には当該ローダを実行するCPU101)はメインメモリ102上に当該プログラムの展開領域を確保するとともに、保護装置100の再構成部1102を起動する。
これを受けた再構成部1102は、HDD104から当該プログラムとそのリロケート情報を読み出して、暗号を復号するとともに(ステップS1202)、上述の(1)〜(3)をプログラム内の任意のブロックに適用することで、当該プログラムを再構成する(ステップS1203)。なお、このとき任意のブロックに、たとえばメインメモリ102の特定のアドレスに特定の値(マジックナンバー)を書き込ませるような追加機能を挿入する。さらに、再構成部1102でアドレス解決された(ステップS1204)プログラムは、要約部1106およびDMA部1103にそれぞれ出力される。
要約部1106は、再構成部1102から入力したプログラムをブロックごとに要約する(ステップS1205)。当該処理の結果物、すなわちロード時点における上記プログラムのメモリイメージの要約は、要約部1106から不正検出部1107に引き渡される。
一方DMA部1103は、再構成部1102から入力したプログラムを、ローダがメインメモリ102上に確保した領域へロードする(ステップS1206)。この後プログラムの終了指示があるまでの間(ステップS1207:No)、メインメモリ102上に展開されたプログラムがCPU101により順次実行されるが、スイッチの切り替え時期が到来、すなわちスイッチ書き換え部1104によりランダムに決定された所定時間が経過すると(ステップS1208:Yes)、スイッチ書き換え部1104からの指示を受けたDMA部1103により、メインメモリ102上のスイッチ部分(分岐命令の飛び先)が書き換えられる(ステップS1209)。
そして、書き換え前のスイッチで選択されていたブロックが実行中でなくなったとき、すなわち当該ブロックのカウンタが0になった時点で(ステップS1210:Yes)、ブロック書き換え部1105により当該ブロックのコード列が別のコード列で置き換えられる(ステップS1211)。この後ステップS1207に戻る。
また、プログラムの実行中にメモリイメージの照合時期が到来、すなわち不正検出部1107によりランダムに決定された所定時間が経過すると(ステップS1208:No、ステップS1212:Yes)、不正検出部1107からの指示を受けた要約部1106、さらに要約部1106からの指示を受けたDMA部1103により、メインメモリ102の現在の内容がDMAで読み出され、要約部1106によりブロックごとに要約される(ステップS1213)。
そして、この現在のメモリイメージの要約を要約部1106から受け取った不正検出部1107は、これをステップS1205であらかじめ受け取っているロード時点のメモリイメージの要約と照合し、両者が一致する場合(ステップS1214:Yes)はそのままステップS1207へ戻るが、一致しない場合には(ステップS1214:No)CPU101に指示して、実行中のプログラムを強制終了させる(ステップS1215)。
また、プログラムの実行中にマジックナンバーの検査時期が到来、すなわち不正検出部1107によりランダムに決定された所定時間が経過すると(ステップS1216:Yes)、不正検出部1107からの指示を受けたDMA部1103により、メインメモリ102から上記マジックナンバーが書き込まれるべきアドレスの内容が読み出される(ステップS1217)。そして、この値がマジックナンバーと一致する場合(ステップS1218:Yes)はそのままステップS1207へ戻るが、一致しない場合には(ステップS1218:No)CPU101に指示して、実行中のプログラムを強制終了させる(ステップS1215)。
なお、操作者からプログラムの終了指示があったときは(ステップS1207:Yes)、その時点で本フローチャートによる処理を終了する。
以上説明した実施の形態2によれば、CPU101により実際に実行されているのが、保護装置100によりメインメモリ102にロードされた(ままの)プログラムであるかどうかを、実行の都度変更される追加機能やメモリイメージを手がかりに監視しているので、プログラムのなりすましや改竄といった不正行為を防止できる。
なお、上述した実施の形態2ではこれらの不正を検知した場合に、保護装置100からCPU101に割り込んでプログラムを強制終了させるようにしたが、このほかメインメモリ102上のプログラムコードを破壊する、次回から起動しない、あるいは製造元へ報告するなどの対応を取ることも可能である。
また、上述した実施の形態2ではロード時点でのメモリイメージの要約を保護装置100内に保持するようにしたが、あるいはメインメモリ102に暗号化して置いておき、照合時のみDMAで読み出して復号するようにしてもよい。なお、暗号化/復号化のための鍵は保護装置100内に保持され、外部には取り出せないので安全である。
図13は、メモリイメージを保護装置100でなく、メインメモリ102で保持する場合のプログラム保護装置の機能的構成を示す説明図である。リロケータブルコード生成部1300〜不正検出部1307は図3や図11に示した同名の機能部と同一であるが、要約部1306から出力された要約を暗号部1308で暗号化のうえ、DMA部1303によりメインメモリ102に転送し、照合時にはDMA部1303に指示して読み出させた上記要約を復号部1309で復号のうえ、不正検出部1307で現在のメモリイメージの要約と照合する点のみが異なっている。
なお、実施の形態2でメモリイメージを要約するのは、保護装置100には通常十分な記憶容量が確保できないためであるが、一般にメインメモリ102の容量は潤沢であるので、要約をメインメモリ102に置く場合には必ずしも要約は必要ではない。すなわち、再構成部1302から出力されたプログラムをそのまま(要約せずに)暗号化して、メインメモリ102にDMA転送し、照合時も単に復号するだけで、メインメモリ102の現在のメモリイメージと比較するような構成も可能である。
また、図14はメモリイメージを保護装置100でなく、メインメモリ102で保持する場合の各種データの流れを模式的に示す説明図である。インストール時に複数のブロックに分割され、リロケート情報とともに暗号化のうえHDD104に保存された(図中(1))プログラムは、ローダを実行するCPU101からの起動指示により保護装置100へ読み出され、再構成部1302による復号・再構成およびアドレス解決を経て、DMA部1303からメインメモリ102に転送される(同(2))。
また、再構成部1302から出力されたプログラムは、要約部1306による要約と暗号部1308による暗号化を経て、同じくDMA部1303によりメインメモリ102に転送される(同(3))。
そしてプログラムの実行中、メモリイメージの照合時期が到来すると、DMA部1303によりメインメモリ102上の要約(ロード時点のメモリイメージの要約)が保護装置100側に読み出され、復号部1309で復号されて不正検出部1307に供給される(同(4))。一方、現在のメモリイメージもDMA部1303によりメインメモリ102から読み出され、要約部1306による要約を経て不正検出部1307に供給される(同(5))。そして、不正検出部1307で両者の照合を行うとともに、追加機能による所定の作用/反応の有無も常時監視する。
なお、上述した実施の形態1および2では起動時にプログラムの全体をメインメモリ102へロードするように説明したが、一部のみをロードするようにして、プログラムの全体が同時にメインメモリ102上に存在しないようにすることもできる。たとえば、あるブロックは他のブロックから参照された時点で初めてメインメモリ102に展開するようにし、しばらく実行されなかったブロックはメインメモリ102から削除するような追加機能を任意のブロックに埋め込む。これにより、攻撃者がある瞬間にメインメモリ102のスナップショットを取っても、意味のあるプログラムコードが一部しかなく、かつそのうちどれが意味のあるコードなのか容易に識別できない。
なお、図3や図11あるいは図13に示した各機能部のうち、DMA部303/1103/1303など速度が必要な機能部はハードウエア的に実現してもよいが、それ以外の各部は保護装置100内のプロセッサが、ROMなどに格納されたプログラムを実行することにより実現される。このプログラムはROMのほか、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのプロセッサで読み取り可能な記録媒体に記録され、プロセッサによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
(付記1)メモリにロードされた実行可能なプログラムの保護方法において、
前記メモリにロードするプログラムを複数のブロックに分割する分割工程と、
前記分割工程で分割された任意のブロックの順序を入れ替える入れ替え工程と、
前記入れ替え工程で任意のブロックの順序を入れ替えられたプログラムのアドレスを解決するアドレス解決工程と、
前記アドレス解決工程でアドレスを解決されたプログラムを前記メモリにロードするロード工程と、
を含んだことを特徴とするプログラム保護方法。
(付記2)メモリにロードされた実行可能なプログラムの保護方法において、
前記メモリにロードするプログラムを複数のブロックに分割する分割工程と、
前記分割工程で分割された任意のブロックのコード列を同等の機能を有する別のコード列に置き換える置き換え工程と、
前記置き換え工程で任意のブロックのコード列を置き換えられたプログラムのアドレスを解決するアドレス解決工程と、
前記アドレス解決工程でアドレスを解決されたプログラムを前記メモリにロードするロード工程と、
を含んだことを特徴とするプログラム保護方法。
(付記3)メモリにロードされた実行可能なプログラムの保護方法において、
前記メモリにロードするプログラムを複数のブロックに分割する分割工程と、
前記分割工程で分割された任意のブロックを同等の機能を有する複数のブロックおよび当該複数のブロックのいずれか1つを指定するブロックにより多重化する多重化工程と、
前記多重化工程で任意のブロックを多重化されたプログラムのアドレスを解決するアドレス解決工程と、
前記アドレス解決工程でアドレスを解決されたプログラムを前記メモリにロードするロード工程と、
を含んだことを特徴とするプログラム保護方法。
(付記4)さらに、前記ロード工程で前記メモリにロードされたプログラムの一部を当該プログラムの実行中に書き換える書き換え工程を含んだことを特徴とする前記付記1〜付記3のいずれか一つに記載のプログラム保護方法。
(付記5)さらに、前記ロード工程で前記メモリにロードされたプログラムのメモリイメージもしくは当該メモリイメージの要約と、前記プログラムの実行中のメモリイメージもしくは当該メモリイメージの要約とを照合する照合工程を含んだことを特徴とする前記付記1〜付記4のいずれか一つに記載のプログラム保護方法。
(付記6)前記置き換え工程では前記コード列を当該コード列と同等の機能とともに他の機能も有する別のコード列で置き換えるとともに、
さらに、前記プログラムの実行中に前記他の機能により実現される所定の作用もしくは反応の有無を監視する不正検出工程を含んだことを特徴とする前記付記1〜付記5のいずれか一つに記載のプログラム保護方法。
(付記7)メモリにロードされた実行可能なプログラムに対する解析・改竄などを防止する保護プログラムにおいて、
前記メモリにロードするプログラムを複数のブロックに分割する分割工程と、
前記分割工程で分割された任意のブロックの順序を入れ替える入れ替え工程と、
前記入れ替え工程で任意のブロックの順序を入れ替えられたプログラムのアドレスを解決するアドレス解決工程と、
前記アドレス解決工程でアドレスを解決されたプログラムを前記メモリにロードするロード工程と、
をプロセッサに実行させることを特徴とするプログラム保護プログラム。
(付記8)メモリにロードされた実行可能なプログラムに対する解析・改竄などを防止する保護プログラムにおいて、
前記メモリにロードするプログラムを複数のブロックに分割する分割工程と、
前記分割工程で分割された任意のブロックのコード列を同等の機能を有する別のコード列に置き換える置き換え工程と、
前記置き換え工程で任意のブロックのコード列を置き換えられたプログラムのアドレスを解決するアドレス解決工程と、
前記アドレス解決工程でアドレスを解決されたプログラムを前記メモリにロードするロード工程と、
をプロセッサに実行させることを特徴とするプログラム保護プログラム。
(付記9)メモリにロードされた実行可能なプログラムに対する解析・改竄などを防止する保護プログラムにおいて、
前記メモリにロードするプログラムを複数のブロックに分割する分割工程と、
前記分割工程で分割された任意のブロックを同等の機能を有する複数のブロックおよび当該複数のブロックのいずれか1つを指定するブロックにより多重化する多重化工程と、
前記多重化工程で任意のブロックを多重化されたプログラムのアドレスを解決するアドレス解決工程と、
前記アドレス解決工程でアドレスを解決されたプログラムを前記メモリにロードするロード工程と、
をプロセッサに実行させることを特徴とするプログラム保護プログラム。
(付記10)メモリにロードされた実行可能なプログラムの保護装置において、
前記メモリにロードするプログラムを複数のブロックに分割する分割手段と、
前記分割手段により分割された任意のブロックの順序を入れ替える入れ替え手段と、
前記入れ替え手段により任意のブロックの順序を入れ替えられたプログラムのアドレスを解決するアドレス解決手段と、
前記アドレス解決手段によりアドレスを解決されたプログラムを前記メモリにロードするロード手段と、
を備えたことを特徴とするプログラム保護装置。
(付記11)メモリにロードされた実行可能なプログラムの保護装置において、
前記メモリにロードするプログラムを複数のブロックに分割する分割手段と、
前記分割手段により分割された任意のブロックのコード列を同等の機能を有する別のコード列に置き換える置き換え手段と、
前記置き換え手段により任意のブロックのコード列を置き換えられたプログラムのアドレスを解決するアドレス解決手段と、
前記アドレス解決手段によりアドレスを解決されたプログラムを前記メモリにロードするロード手段と、
を備えたことを特徴とするプログラム保護装置。
(付記12)メモリにロードされた実行可能なプログラムの保護装置において、
前記メモリにロードするプログラムを複数のブロックに分割する分割手段と、
前記分割手段により分割された任意のブロックを同等の機能を有する複数のブロックおよび当該複数のブロックのいずれか1つを指定するブロックにより多重化する多重化手段と、
前記多重化手段により任意のブロックを多重化されたプログラムのアドレスを解決するアドレス解決手段と、
前記アドレス解決手段によりアドレスを解決されたプログラムを前記メモリにロードするロード手段と、
を備えたことを特徴とするプログラム保護装置。
以上のように、本発明にかかるプログラム保護方法、プログラム保護プログラムおよびプログラム保護装置は、実行可能な状態で記憶媒体に保持されているプログラムの保護に有用であり、特にPCなど内部の仕様が公開されている計算機システムにおいて、メモリ上に展開されたプログラムへの攻撃を防止するのに適している。
この発明の実施の形態1にかかるプログラム保護装置のハードウエア構成の一例を示す説明図である。 この発明の実施の形態1にかかるプログラム保護装置のハードウエア構成の他の一例を示す説明図である。 この発明の実施の形態1にかかるプログラム保護装置の機能的構成を示す説明図である。 分割部301による分割および分岐命令挿入後のプログラムを模式的に示す説明図である。 再構成部302によるブロックの並べ替えの一例を示す説明図である。 再構成部302によるブロックの置き換えの一例を示す説明図である。 再構成部302によるブロックの多重化の一例を示す説明図である。 再構成部302によるブロックの多重化の他の一例を示す説明図である。 この発明の実施の形態1にかかるプログラム保護装置における、プログラムのインストール処理の手順を示すフローチャートである。 この発明の実施の形態1にかかるプログラム保護装置における、プログラムの実行処理の手順を示すフローチャートである。 この発明の実施の形態2にかかるプログラム保護装置の機能的構成を示す説明図である。 この発明の実施の形態2にかかるプログラム保護装置における、プログラムの実行処理の手順を示すフローチャートである。 メモリイメージを保護装置100でなく、メインメモリ102で保持する場合のプログラム保護装置の機能的構成を示す説明図である。 メモリイメージを保護装置100でなく、メインメモリ102で保持する場合の各種データの流れを模式的に示す説明図である。
符号の説明
100 保護装置
101 CPU
102 メインメモリ
103 I/Oブリッジ
104 HDD
300,1100,1300 リロケータブルコード生成部
301,1101,1301 分割部
302,1102,1302 再構成部
303,1103,1303 DMA部
304,1104,1304 スイッチ書き換え部
305,1105,1305 ブロック書き換え部
1106,1306 要約部
1107,1307 不正検出部
1308 暗号部
1309 復号部

Claims (5)

  1. 分割手段と、入れ替え手段と、アドレス解決手段と、ロード手段と、書き換え手段と、を備え、メモリにロードされた実行可能なプログラムを保護する保護装置が、
    前記分割手段により、前記メモリにロードするプログラムを複数のブロックに分割する分割工程と、
    前記入れ替え手段により、前記分割工程で分割された任意のブロックの順序を入れ替える入れ替え工程と、
    前記アドレス解決手段により、前記入れ替え工程で任意のブロックの順序を入れ替えられたプログラムのアドレスを解決するアドレス解決工程と、
    前記ロード手段により、前記アドレス解決工程でアドレスを解決されたプログラムを前記メモリにロードするロード工程と、
    前記書き換え手段により、前記ロード工程で前記メモリにロードされたプログラムの一部を当該プログラムの実行中に書き換える書き換え工程と、
    を実行し、
    前記書き換え工程は、前記プログラムのブロックが実行中ではないときに、前記ブロックを前記ブロックと等価であるがコード列が異なるブロックに置き換えることを特徴とするプログラム保護方法。
  2. 分割手段と、置き換え手段と、アドレス解決手段と、ロード手段と、書き換え手段と、を備え、メモリにロードされた実行可能なプログラムを保護する保護装置が、
    前記分割手段により、前記メモリにロードするプログラムを複数のブロックに分割する分割工程と、
    前記置き換え手段により、前記分割工程で分割された任意のブロックのコード列を同等の機能を有する別のコード列に置き換える置き換え工程と、
    前記アドレス解決手段により、前記置き換え工程で任意のブロックのコード列を置き換えられたプログラムのアドレスを解決するアドレス解決工程と、
    前記ロード手段により、前記アドレス解決工程でアドレスを解決されたプログラムを前記メモリにロードするロード工程と、
    前記書き換え手段により、前記ロード工程で前記メモリにロードされたプログラムの一部を当該プログラムの実行中に書き換える書き換え工程と、
    を実行し、
    前記書き換え工程は、前記プログラムのブロックが実行中ではないときに、前記ブロックを前記ブロックと等価であるがコード列が異なるブロックに置き換えることを特徴とするプログラム保護方法。
  3. 分割手段と、多重化手段と、アドレス解決手段と、ロード手段と、書き換え手段と、を備え、メモリにロードされた実行可能なプログラムを保護する保護装置が、
    前記分割手段により、前記メモリにロードするプログラムを複数のブロックに分割する分割工程と、
    前記多重化手段により、前記分割工程で分割された任意のブロックを同等の機能を有する複数のブロックおよび当該複数のブロックのいずれか1つを指定するブロックにより多重化する多重化工程と、
    前記アドレス解決手段により、前記多重化工程で任意のブロックを多重化されたプログラムのアドレスを解決するアドレス解決工程と、
    前記ロード手段により、前記アドレス解決工程でアドレスを解決されたプログラムを前記メモリにロードするロード工程と、
    前記書き換え手段により、前記ロード工程で前記メモリにロードされたプログラムの一部を当該プログラムの実行中に書き換える書き換え工程と、
    を実行し、
    前記書き換え工程は、前記プログラムのブロックが実行中ではないときに、前記ブロックを前記ブロックと等価であるがコード列が異なるブロックに置き換えることを特徴とするプログラム保護方法。
  4. メモリにロードされた実行可能なプログラムに対する解析・改竄などを防止する保護プログラムにおいて、
    前記メモリにロードするプログラムを複数のブロックに分割する分割工程と、
    前記分割工程で分割された任意のブロックの順序を入れ替える入れ替え工程と、
    前記入れ替え工程で任意のブロックの順序を入れ替えられたプログラムのアドレスを解決するアドレス解決工程と、
    前記アドレス解決工程でアドレスを解決されたプログラムを前記メモリにロードするロード工程と、
    前記ロード工程で前記メモリにロードされたプログラムの一部を当該プログラムの実行中に書き換える書き換え工程と、
    をプロセッサに実行させ
    前記書き換え工程は、前記プログラムのブロックが実行中ではないときに、前記ブロックを前記ブロックと等価であるがコード列が異なるブロックに置き換えることを特徴とするプログラム保護プログラム。
  5. メモリにロードされた実行可能なプログラムの保護装置において、
    前記メモリにロードするプログラムを複数のブロックに分割する分割手段と、
    前記分割手段により分割された任意のブロックの順序を入れ替える入れ替え手段と、
    前記入れ替え手段により任意のブロックの順序を入れ替えられたプログラムのアドレスを解決するアドレス解決手段と、
    前記アドレス解決手段によりアドレスを解決されたプログラムを前記メモリにロードするロード手段と、
    前記ロード手段で前記メモリにロードされたプログラムの一部を当該プログラムの実行中に書き換える書き換え手段と、
    を備え
    前記書き換え手段は、前記プログラムのブロックが実行中ではないときに、前記ブロックを前記ブロックと等価であるがコード列が異なるブロックに置き換えることを特徴とするプログラム保護装置。
JP2003319318A 2003-09-11 2003-09-11 プログラム保護方法、プログラム保護プログラムおよびプログラム保護装置 Expired - Fee Related JP4568489B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003319318A JP4568489B2 (ja) 2003-09-11 2003-09-11 プログラム保護方法、プログラム保護プログラムおよびプログラム保護装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003319318A JP4568489B2 (ja) 2003-09-11 2003-09-11 プログラム保護方法、プログラム保護プログラムおよびプログラム保護装置

Publications (2)

Publication Number Publication Date
JP2005085188A JP2005085188A (ja) 2005-03-31
JP4568489B2 true JP4568489B2 (ja) 2010-10-27

Family

ID=34418286

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003319318A Expired - Fee Related JP4568489B2 (ja) 2003-09-11 2003-09-11 プログラム保護方法、プログラム保護プログラムおよびプログラム保護装置

Country Status (1)

Country Link
JP (1) JP4568489B2 (ja)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0514492D0 (en) * 2005-07-14 2005-08-17 Ntnu Technology Transfer As Secure media streaming
US20070174571A1 (en) * 2006-01-25 2007-07-26 Safenet, Inc. Binding a protected application program to shell code
US8694797B2 (en) 2006-02-14 2014-04-08 Lenovo (Sinapore) Pte Ltd Method for preventing malicious software from execution within a computer system
JP4575350B2 (ja) * 2006-02-14 2010-11-04 レノボ・シンガポール・プライベート・リミテッド コンピューター・システム内で悪意あるソフトウェアの実行を防止するための方法
US8041958B2 (en) 2006-02-14 2011-10-18 Lenovo (Singapore) Pte. Ltd. Method for preventing malicious software from execution within a computer system
JP4837506B2 (ja) * 2006-09-21 2011-12-14 Kddi株式会社 プログラム難読化方法およびプログラム
JP4957148B2 (ja) 2006-09-26 2012-06-20 富士通株式会社 鍵管理機能を持つセキュア素子および情報処理装置
JP4917860B2 (ja) * 2006-10-03 2012-04-18 Kddi株式会社 プログラム難読化方法およびプログラム
JP4888057B2 (ja) * 2006-11-01 2012-02-29 富士通セミコンダクター株式会社 情報処理装置
US20110044451A1 (en) 2007-07-25 2011-02-24 Panasonic Corporation Information processing apparatus and falsification verification method
JP4989418B2 (ja) * 2007-10-26 2012-08-01 三菱電機株式会社 プログラム変換装置及びプログラム及びプログラム変換方法
JP4798672B2 (ja) * 2009-06-29 2011-10-19 東芝ストレージデバイス株式会社 磁気ディスク装置
EP2378452B1 (en) * 2010-04-16 2012-12-19 Thomson Licensing Method, device and computer program support for verification of checksums for self-modified computer code
KR20130027026A (ko) * 2010-05-11 2013-03-14 야스다, 히로시 외부 부팅 장치, 외부 부팅 방법 및 네트워크 통신 시스템
KR101236991B1 (ko) * 2011-10-24 2013-02-25 한국전자통신연구원 하드디스크 암호화를 위한 장치 및 방법
JP6428003B2 (ja) * 2013-07-17 2018-11-28 大日本印刷株式会社 書込装置、書込方法、書込処理プログラム、及び情報記憶媒体
CN108027737B (zh) * 2015-04-07 2021-07-27 瑞安安全股份有限公司 通过二进制和存储器多样性进行混淆的系统和方法
JP6712538B2 (ja) * 2016-11-14 2020-06-24 日本電信電話株式会社 改竄検知システム
KR20210151077A (ko) * 2019-05-03 2021-12-13 라인플러스 주식회사 메모리상에서 실행 가능 이미지를 적재하는 방법 및 시스템

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000056964A (ja) * 1998-08-07 2000-02-25 Nippon Telegr & Teleph Corp <Ntt> マイクロプロセッサシステム、マイクロプロセッサ動作解析防止方法およびマイクロプロセッサ動作解析防止プログラムを記録した記録媒体
JP2000112750A (ja) * 1998-10-02 2000-04-21 Hyper Tec:Kk 情報処理装置
JP2002514333A (ja) * 1997-06-09 2002-05-14 インタートラスト テクノロジーズ コーポレイション ソフトウェアセキュリティを増強するための混乱化技術

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002514333A (ja) * 1997-06-09 2002-05-14 インタートラスト テクノロジーズ コーポレイション ソフトウェアセキュリティを増強するための混乱化技術
JP2000056964A (ja) * 1998-08-07 2000-02-25 Nippon Telegr & Teleph Corp <Ntt> マイクロプロセッサシステム、マイクロプロセッサ動作解析防止方法およびマイクロプロセッサ動作解析防止プログラムを記録した記録媒体
JP2000112750A (ja) * 1998-10-02 2000-04-21 Hyper Tec:Kk 情報処理装置

Also Published As

Publication number Publication date
JP2005085188A (ja) 2005-03-31

Similar Documents

Publication Publication Date Title
JP4568489B2 (ja) プログラム保護方法、プログラム保護プログラムおよびプログラム保護装置
US10685145B2 (en) Secure processor and a program for a secure processor
EP2023248B1 (en) Data processing device, method, program, integrated circuit, and program generating device
US5675645A (en) Method and apparatus for securing executable programs against copying
US6185686B1 (en) Computer system and process for accessing an encrypted and self-decrypting digital information product while restricting access to decrypted digital information
US7747870B2 (en) Apparatuses and methods for decrypting encrypted data and locating the decrypted data in a memory space used for execution
US6868495B1 (en) One-time pad Encryption key Distribution
JP4392241B2 (ja) 付属記憶装置を採用したコンピュータ・システム内の安全保護を促進するための方法ならびにシステム
US5109413A (en) Manipulating rights-to-execute in connection with a software copy protection mechanism
KR101054318B1 (ko) 정보 처리 시스템 및 프로그램을 기록한 컴퓨터로 읽을 수 있는 매체
US8307215B2 (en) System and method for an autonomous software protection device
WO1998011690A9 (en) Self-decrypting digital information system and method
JP4892167B2 (ja) ディジタル・データ保護構成
WO1996034334A1 (fr) Dispositif pour l&#39;execution d&#39;un programme chiffre
EP2264640A2 (en) Feature specific keys for executable code
JP2005135265A (ja) 情報処理装置
JP3683031B2 (ja) プログラム保護装置
JP3865347B2 (ja) プログラムへの透かしの挿入方法及びシステム
JP4125995B2 (ja) データ変換システム
JP2004272594A (ja) データ利用装置及びデータ利用方法、並びにコンピュータ・プログラム
WO2001008345A1 (en) A computer system and process for accessing an encrypted and self-decrypting digital information product
KR100298506B1 (ko) 집적회로카드와프로그램의공조에의한불법설치방지시스템
Smith Hacking Code
JP2003005855A (ja) ライセンス管理方法および記録媒体
AU2023220809A1 (en) Protecting software

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060814

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100108

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100209

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100412

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100511

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100712

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: 20100803

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: 20100809

R150 Certificate of patent or registration of utility model

Ref document number: 4568489

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20130813

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees