JP4517636B2 - 実行プログラム作成方法、関数プログラム、及び関数プログラム実行方法 - Google Patents

実行プログラム作成方法、関数プログラム、及び関数プログラム実行方法 Download PDF

Info

Publication number
JP4517636B2
JP4517636B2 JP2003407019A JP2003407019A JP4517636B2 JP 4517636 B2 JP4517636 B2 JP 4517636B2 JP 2003407019 A JP2003407019 A JP 2003407019A JP 2003407019 A JP2003407019 A JP 2003407019A JP 4517636 B2 JP4517636 B2 JP 4517636B2
Authority
JP
Japan
Prior art keywords
code
execution
protection
memory
key calculation
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
JP2003407019A
Other languages
English (en)
Other versions
JP2005165919A (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.)
Fujifilm Business Innovation Corp
Original Assignee
Fuji Xerox Co Ltd
Fujifilm Business Innovation 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 Fuji Xerox Co Ltd, Fujifilm Business Innovation Corp filed Critical Fuji Xerox Co Ltd
Priority to JP2003407019A priority Critical patent/JP4517636B2/ja
Publication of JP2005165919A publication Critical patent/JP2005165919A/ja
Application granted granted Critical
Publication of JP4517636B2 publication Critical patent/JP4517636B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

本発明は、実行プログラム作成方法、関数プログラム、及び関数プログラム実行方法に関し、特にソフトウェアの内部を解析する行為に対して耐性を持たせた実行プログラム作成方法、関数プログラム、及び関数プログラム実行方法に関する。
IT(Information Technology)技術の普及に伴い、コンピュータソフトウェアの実装上の安全性が問題となってきている。特にソフトウェアプログラムの内部を解析、改造されることによって、ソフトウェア製作者が意図した動作を変更され、不正な利用を可能にしてしまう、ということが問題視されてきている。
例えば市販されているソフトウェアには、これの著作権などを保護する目的として、様々な手法が盛り込まれている。代表的な例としては、ソフトウェア製品を正規に購入した者だけが知りえるシリアル番号を利用して、ソフトウェアの使用を許可するか否かを判定するルーチンを組み込む手法が挙げられる。
しかしながら、上記のような手法では、判定ルーチンを解析することで、どのようなシリアル番号であっても、あるいはシリアル番号が入力されなくても、常にソフトウェアの使用を許可するようにプログラムを改造することが可能である。
このような解析からソフトウェアを保護する技術としては、例えば以下の特許文献1に開示される方法が存在する。本従来技術は、保護対象とするソフトウェアプログラムをセンタ側と端末側に分割した構成を有する。また、ソフトウェアを使用する際は、センタ側に保持されたソフトウェアの断片を端末にダウンロードする。この方法によれば、端末側に保持されたソフトウェアの断片を解析しても、ソフトウェア全体を把握することができない。従って、解析に対するソフトウェアの保護を向上することができる。
また、前記のような解析に対して保護作用を付与する方法としては、ソフトウェアプログラムに対し、暗号化に代表される変換を施す方法が考えられる。例えば、プログラムコード全体を暗号化し、実行時にプログラムコード全体をメモリ上で復号するやりかたなどがこれである。この場合、非実行時においてプログラムコードは暗号化されているため、それを解析することはできないという利点がある。
この他、ソフトウェアを暗号化する技術としては、例えば特許文献2に開示される方法が存在する。本従来技術では、一部が暗号化されたプログラムを複数用いる。また、一方のプログラムにおける暗号化部分を復号化するためのコードは他方のプログラムが格納している。従って、プログラム全体は、それぞれのプログラムにおける暗号化部分を交互に復号化しつつ、実行される。
特開平8−16385号公報 特開2001−318786号公報
しかしながら、上述した各従来技術には様々な問題点が存在する。例えば保護対象とするソフトウェアプログラムをセンタ側と端末側に分割した技術では、ソフトウェアを実行する際、センタ側の断片を端末側にダウンロードし、これをメモリ上に展開する必要がある。このため、このメモリを参照することで、プログラム全体を解析することができるという問題が存在する。
また、プログラムコード全体を暗号化する技術では、実行時にすべてのプログラムコードが復号化され、メモリ上に展開されてしまうため、メモリ上のコードが解析されることを妨ぐことはできないという問題が存在する。
更に、一部が暗号化されたプログラムを複数用いる技術では、必ず二つ以上のプログラムを用意する必要があり、設計が煩雑となるという問題が存在する。尚、上記した特許文献2には、具体的にどのようにプログラムを構築すれば、実行時に復号できるようになるかが記載されておらず、実現方法が不明である。
したがって、本発明は、上記問題点に鑑みてなされたものであって、プログラムの解析を簡素な構成で困難化することが可能な実行プログラム作成方法、関数プログラム、及び関数プログラム実行方法を提供することを目的とする。
かかる目的を達成するために、本発明は、請求項1記載のように、保護対象コードと、前記保護対象コードの位置を示すコードであってコンパイラによってコンパイルされたときに実行可能なコードとなるとともに特定のパターンを表す保護箇所識別子と、実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として前記保護箇所識別子の特定のパターンを検索させて前記保護対象コードの前記実行時のメモリ上でのアドレス範囲を特定させるための検索コードと、前記検索コードにより特定された前記実行時のメモリ上でのアドレス範囲を復号させるための解除コードと、を含み、前記検索コード、前記解除コード、及び前記保護対象コードが、前記情報処理装置のメモリ上に展開されて実行されるときに、前記検索コード、前記解除コード、及び前記保護対象コードの順で実行されるように配置されている関数プログラムのソースコードに基づいて、情報処理装置にコンパイラによって実行コードを作成させ、前記コンパイラによるコンパイルによって作成された実行コードを対象として、情報処理装置に、前記保護箇所識別子の前記特定のパターンを検索させて前記保護対象コードを特定させ、情報処理装置に、前記コンパイラによるコンパイルによって作成された実行コードのうちの特定した前記保護対象コードを、該保護対象コードを暗号化した保護対象コードで置き換えさせるとともに、前記コンパイルにより作成された実行コードのコード領域を書き換え可能状態に設定させる。
また、請求項1記載の発明は、例えば請求項2記載のように、前記関数プログラムはさらに、前記解除コードを含む鍵計算対象コードの位置を示すコードであって実行可能のコードで構成され、前記特定のパターンとは異なる第2特定パターンを表す鍵計算箇所識別子と、鍵計算コードとを含み、前記検索コードは、さらに、実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として前記鍵計算箇所識別子の前記第2特定パターンを検索させて前記鍵計算対象コードの前記実行時のメモリ上でのアドレス範囲を特定されるものであり、前記鍵計算コードは、前記検索コードによりアドレス範囲が特定された前記鍵計算対象コードに基づき、前記解除コードで用いられる復号鍵を計算させるためのコードであって、前記情報処理装置のメモリ上に展開されて実行されるときに、前記検索コードの後、かつ前記解除コードより先に実行されるように配置されており、前記暗号化した保護対象コードは、前記保護対象コードを暗号鍵によって暗号化したものであり、前記コンパイラによるコンパイルによって作成された実行コードを対象として、前記処理装置に、前記第2特定パターンを検索させて前記鍵計算対象コードを特定させ、前記情報処理装置に、前記特定された前記鍵計算対象コードに基づき、前記暗号鍵を計算させて前記保護対象コードの暗号化に用いる構成としてもよい。
また、他の本発明は、請求項3記載のように、情報処理装置のメモリ上に展開されて実行される関数プログラムであって、暗号化された保護対象コードと、前記保護対象コードの位置を示すコードであって実行可能なコードで構成され特定のパターンを表す保護箇所識別子と、実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として前記保護箇所識別子の前記特定パターンを検索させて前記保護対象コードの前記実行時のメモリ上でのアドレス範囲を特定させるための検索コードと、前記検索コードにより特定された前記保護対象コードの前記実行時のメモリ上でのアドレス範囲を復号させるための解除コードと、を含み、前記検索コード、前記解除コード、及び前記保護対象コードは、前記情報処理装置のメモリ上に展開されて実行されるときに、前記検索コード、前記解除コード、及び前記保護対象コードの順で実行されるように配置されている。
また、請求項3記載の発明は、例えば請求項4記載のように、前記保護対象コードの前記実行時のメモリ上でのアドレス範囲を暗号化させるための適用コードを含み、前記提要コードは、前記情報処理装置のメモリ上に展開されて実行されるときに、前記保護対象コードの後で実行されるように配置されていてもよい。
また、請求項3または4に記載の発明は、例えば請求項5記載のように、前記解除コードを含む鍵計算対象コードの位置を示すコードであって実行可能なコードで構成され前記特定のパターンとは異なる第2特定パターンを表す鍵計算箇所識別子と、鍵計算コードとを含み、前記検索コードは、さらに、実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として前記鍵計算箇所識別子の前記第2特定パターンを検索させて前記鍵計算対象コードの前記実行時のメモリ上でのアドレス範囲を特定され、前記鍵計算コードは、さらに、実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として前記鍵計算箇所識別子の前記第2特定パターンを検索させて前記鍵計算対象コードの前記実行時のメモリ上でのアドレス範囲を特定させ、前記鍵計算コードは、前記検索コードによりアドレス範囲が特定された前記鍵計算対象コードに基づき、前記解除コードで用いられる復号鍵を計算させるためのコードであって、前記情報処理装置のメモリ上に展開されて実行されるときに、前記検索コードの後、かつ、前記解除コードより先に実行されるように配置されていてもよい。
また、他の本発明は、請求項6記載のように、関数プログラムを情報処理装置に実行させる関数プログラム実行方法であって、暗号化された保護対象コードと、前記保護対象コードの位置を示すコードであって実行可能なコードで構成され特定のパターンを表す保護箇所識別子と、実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として前記保護箇所識別子の前記特定のパターンを検索させて前記保護対象コードの前記実行時のメモリ上でのアドレス範囲を特定させるための検索コードと、前記検索コードにより特定された前記実行時のメモリ上でのアドレス範囲を復号させるための解除コードと、を含む関数プログラムを前記情報処理装置のメモリ上に展開させ、前記情報処理装置に前記展開された前記関数プログラムを記述に沿って順次実行させ、前記検索コードによって前記情報処理装置に、前記メモリ上に展開された前記関数プログラムの先頭アドレスを基点として、前記保護箇所識別子の特定パターンを検索させて前記保護対象コードの前記メモリ上のアドレス範囲を特定させ、前記解除コードによって前記情報処理装置に、前記特定された前記メモリ上のアドレス範囲を復号させ、前記情報処理装置に、前記暗号化が解除された保護対象コードを実行させる、情報処理装置の関数プログラム実行方法である。

また、請求項6記載の発明は、例えば請求項7記載のように、前記関数プログラムは、さらに、前記保護対象コードの前記実行時のメモリ上でのアドレス範囲を暗号化させるための適用コードを含み、前記情報処理装置に、前記暗号化が解除された保護対象コードを実行させた後で、前記定期用コードによって前記実行時のメモリ上でのアドレス範囲を暗号化させる構成をとってもよい。
また、請求項6または7記載の発明は、例えば請求項8記載のように、前記関数プログラムはさらに、前記解除コードを含む鍵計算対象コードの位置を示すコードであって実行可能なコードで構成され前記特定のパターンとは異なる第2特定パターンを表す鍵計算箇所識別子と、鍵計算コードとを含み、前記検索コードは、さらに、実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として、前記鍵計算箇所識別子の前記第2特定パターンを検索させて前記鍵計算対象コードの前記実行時のメモリ上でのアドレス範囲を特定させるものであり、前記情報処理装置に、前記検索コードの後、かつ前記解除コードより先に、前記鍵計算コードによって、前記検索コードによりアドレス範囲が特定された前記鍵計算対象コードに基づき、前記解除コードで用いられる復号鍵を計算させる構成をとってもよい。
本発明によれば、プログラムの解析を簡素な構成で困難化することが可能なプログラム実行方法、そのプログラム作成方法、それを実行する情報処理装置及びそのプログラムを実現することができる。
以下、本発明を実施するための最良の形態を図面と共に詳細に説明する。
まず、本発明による実施例1について図面を用いて詳細に説明する。本実施例は、コンパイルされた実行プログラムの一部に保護作用を適用するものである。これにより、当該実行プログラムの非実行時に、当該実行プログラムの解析を困難とすることができる。また、本実施例は、上記した実行プログラムの一部に適用された保護作用を、当該実行プログラムの実行中に解除するものである。これにより、保護作用が解除された状態、すなわち解析が可能な状態を短い時間とすることができ、当該実行プログラムの解析を困難とすることができる。
図1は本実施例によるプログラム作成装置1の構成を示す機能ブロック図である。このプログラム作成装置1には、例えばパーソナルコンピュータやサーバなどの一般的な情報処理装置を用いることができる。尚、以下の説明では、C言語を用いてプログラムを作成する場合を例に挙げる。但し、本発明はこれに限定されず、後述するように、関数ポインタの値から関数の実行時のアドレスを取得することができる言語であれば、如何なるものを適用してもよい。
プログラム作成装置1はエディタ2とコンパイラ3と保護作用適用手段4とを有して構成される。エディタ2はユーザがプログラムを作成するための手段である。これには各種、市販されている開発ツールを用いることができる。このエディタ2を用いて作成されたプログラムは、作成者(以下、ユーザという)が理解できる高級言語で作成されており、ソースコードで記述されている。本実施例では、エディタ2によりプログラム100及び100aが作成される。
コンパイラ3はプログラム100aをアセンブリ言語などの低レベルの言語に変換するための手段である。コンパイラ3には言語毎で用意された一般的なものを適用することができる。また、変換後のプログラムはCPU(Central Processing Unit)が実行できるオブジェクトコードで記述されている。本実施例では、これを実行プログラム100Aという。
保護作用適用手段4は本発明特有の構成であり、実行プログラム100Aにおける保護対象箇所のコード(これを以下、保護対象コードという)に保護作用を適用するための手段である。尚、本実施例において、コードに保護作用を適用することはコードを暗号化することを指し、コードの保護作用を解除することはコードを復号化することを指す。すなわち、保護作用として暗号化を用いる。また、この暗号化におけるアルゴリズムには、種々のものを適用することができる。
次に、上記のプログラム作成装置1を用いて実行プログラム100Aを作成するまでの流れを図面と共に詳細に説明する。尚、以下では、プログラムの作成者(以下、これをユーザという)が行う手順に沿って説明する。
図2は実行プログラム100Aの作成手順を示すフローチャートである。図2に示すように、本手順おいてユーザは、先ず通常通りのプログラム100を作成する(ステップS101)。これには図1におけるエディタ2を用いることができる。次にユーザは、作成したプログラム100のソースコードにおける保護対象コード102を決定する(ステップS102)。この際、ソースコードの該当個所にコメントなどを記述しておくとよい。
ここで、ステップS102までに作成されたプログラム100のファイルイメージを図3に示す。図3に示すように、プログラム100は、あるルーチン(関数)内に保護対象とするコード(保護対象コード102)が含まれてなる。また、他のプログラムコードは任意のコード101,103とすることができる。
保護対象コード102は、作成者以外のユーザ(以下、これを解析者という)によるデバッガなどを用いた解析に対し、これを困難化したいコードである。これには、例えばシリアル番号を用いてプログラム全体の実行の可否を判定するためのルーチン、若しくはこれに含まれた一部のコードなどを適用することが好ましい。これにより、当該プログラムの不正な使用を防止することができる。但し、これに限らず、種々のコードを適用することができる。
図2に戻り説明する。以上のようなプログラム100を作成すると、次にユーザは、保護対象コード102に保護作用を適用するための事前準備として、保護箇所検索ルーチン呼び出しコード11と保護作用解除ルーチン呼び出しコード12と保護箇所開始識別子13と保護箇所終了識別子14とをプログラム100に挿入する(ステップS103)。これにより、図4に示すようなプログラム100aが作成される。尚、図4はプログラム100aのファイルイメージを示す図である。
ここで、プログラム100aの構成について説明する。図3に示すプログラム100と図4に示すプログラム100aとを比較すると明らかなように、プログラム100aは、任意のコード101,103及び保護対象コード102の他に、保護対象コード102の直前に設けられた保護箇所開始識別子13と、保護対象コード102の直後に設けられた保護箇所終了識別子14と、保護対象コード102より以前の行に設けられた保護箇所検索ルーチン呼び出しコード11及び保護作用解除ルーチン呼び出しコード12とを有する。
保護箇所開始識別子13は保護対象コード102の開始位置(アドレス)を示すコードである。また、保護箇所終了識別子14は保護対象コード102の終了位置(アドレス)を示すコードである。すなわち、本実施例では保護箇所開始識別子13と保護箇所終了識別子14とで挟まれたコード(但し、保護箇所開始識別子13及び保護箇所終了識別子14を含まない)が保護対象コード102となる。尚、保護箇所開始識別子13および保護箇所終了識別子14は、ソースコードをコンパイルした結果である実行プログラム100Aにおいて、特定のパターンを表すものである。これらの記述には、例えばコンパイラ3のインラインアセンブラ機能を使うことができる。すなわち、インラインアセンブラ機能を用いて特定のバイト列をソースコードの該当個所に埋め込むことで、保護箇所開始識別子13および保護箇所終了識別子14を所望する位置に記述することができる。
保護箇所検索ルーチン呼び出しコード11は、メインルーチンとなるプログラム100aとは別に作成された保護箇所検索ルーチンを呼び出して実行するためのコードである。保護箇所検索ルーチンは、上述の保護箇所開始識別子13と保護箇所終了識別子14とを検索することで、保護対象コード102を特定するためのサブルーチンである。但し、保護箇所検索ルーチンをサブルーチンとすることは必須の要件でなく、これをプログラム100a内に記述してもよい。また、メインルーチンとサブルーチンとで構成されたプログラムであっても、プログラムコードの実行手順は単一のプログラムと同一である。従って、本発明では、メインルーチンとサブルーチンとで構成されたプログラムを単一のプログラムと見なす。
また、保護作用解除ルーチン呼び出しコード12は、メインルーチンとなるプログラム100aとは別に作成された保護作用解除ルーチンを呼び出して実行するためのコードである。保護作用解除ルーチンは、後述において保護された保護対象コード102(暗号化された保護対象コード102Aに相当)の保護作用を解除するためのサブルーチンである。但し、保護作用適用ルーチンをサブルーチンとすることは必須の要件でなく、これをプログラム100a内に記述してもよい。
図2に戻り説明する。以上のようにプログラム100aを編集すると、ユーザは次に、当該プログラム100aを、保護箇所検索ルーチン及び保護作用解除ルーチンと共に、コンパイラ3を用いてコンパイルする(ステップS104)。これにより、プログラム100aはソースコードからオブジェクトコードに変換され、実行プログラム100Aが作成される。この際、実行プログラム100Aは、保護箇所検索ルーチン及び保護作用解除ルーチンとリンクされる。
このように実行プログラム100Aを作成すると、次にユーザは、保護作用適用手段4を起動し、これを用いて実行プログラム100Aにおける保護対象コード102に保護作用を適用する(ステップS105)。
ここで、保護作用適用手段4の動作を図面と共に詳細に説明する。図5は保護作用適用手段4の動作を示すフローチャートである。図5に示すように、保護作用適用手段4は、図2のステップS105において起動されると先ず、図2のステップS104で作成した実行プログラム100Aを読み込み(ステップS111)、実行プログラム100Aに埋め込まれた保護箇所開始識別子13と保護箇所終了識別子14とを検索する(ステップS112)。これにより、保護対象コード102が特定される。
次に保護作用適用手段4は、特定した保護対象コード102に保護作用を適用する(ステップS113)。保護作用とは上述したように暗号化である。これにより、保護対象コード102が暗号化された保護対象コード102Aに置き換えられる。このように、保護したいコードである保護対象コード102を暗号化することにより、プログラムを実行していない状態で、これが暗号化された状態となる。このため、静的な解析、すなわちプログラムを実行していない状態での解析を困難にすることができる。
次に保護作用適用手段4は、実行プログラム100Aのコード領域を書き換え可能状態に設定する(ステップS114)。保護作用として上述したように暗号化を適用した場合、実行プログラム100Aを実行する際、暗号化されたコードを復号化する必要がある。そのため、コード領域を書き換え可能状態に設定しておく必要がある。尚、コード領域を書き換え可能状態に設定するためには、例えば、実行プログラム100Aのファイル中に存在するコード領域の属性値を、書き換え可能を表す属性値に変更すればよい。
以上のような行程を経ることによって、保護作用が適用された実行プログラム100Aが完成する。ここで、実行プログラム100Aのファイルイメージを図6に示す。図6に示すように、保護作用適用後の実行プログラム100Aでは、保護対象コード102が暗号化された保護対象コード102Aに置き換えられている。
次に、上述のように作成した実行プログラム100Aを実行した際の処理の流れを図面と共に詳細に説明する。尚、実行プログラム100Aを実行する装置には、パーソナルコンピュータやサーバなど、一般の情報処理装置を適用することができる。
情報処理装置は、実行プログラム100Aを実行すると、当該実行プログラム100AをRAM(Random Access Memory)などのメモリにロードする。この際、メモリ上に展開される実行プログラム100Aの構成は図6に示す構成と同様である。このように実行プログラム100Aを展開した状態で、情報処理装置は順次コードを実行する。図7のフローチャートに、実行プログラム100Aを実行した際の情報処理装置の動作を示す。
図7に示すように、情報処理装置は先ず、任意のコード101の先頭から記述に沿ってコードを順次実行する(ステップS121)。この流れにおいて保護箇所検索ルーチン呼び出しコード11が実行されると、情報処理装置は保護箇所検索ルーチンを呼び出し、これを実行する(ステップS122)。
保護箇所検索ルーチンを実行すると、情報処理装置は保護箇所開始識別子13と保護箇所終了識別子14とを検索し、これらに基づいて暗号化された保護対象コード102Aを特定する。保護箇所開始識別子13及び保護箇所終了識別子14の検索は、暗号化された保護対象コード102Aを含む関数の先頭アドレスを基点とし、この先頭アドレスからアドレスの上位方向に向かって各識別子を検索することで行われる。尚、保護箇所検索ルーチンの詳細は後述において詳細に説明する。
このように保護箇所検索ルーチンを実行し、暗号化された保護対象コード102Aを特定すると、次に情報処理装置は、記述に沿って保護作用解除ルーチン呼び出しコード12を実行する。これにより、情報処理装置では保護作用解除ルーチンが呼び出され、これが実行される(ステップS123)。
保護作用解除ルーチンは、上述のように、暗号化された保護対象コード102Aに適用された保護作用を解除するためのルーチンである。従って、本実施例のように、保護作用が暗号化である場合、保護作用解除ルーチンでは暗号化された保護対象コード102Aを復号化する処理が行われる。これにより、暗号化された保護対象コード102Aに適用された保護作用が解除される。
このように保護作用を解除すると、次に情報処理装置は、記述に沿って復号化した保護対象コード102を実行し(ステップS124)、その後、同じく記述に沿って残りのコード(任意コード103を含む)を実行する(ステップS125)。
ここで、保護箇所開始識別子13及び保護箇所終了識別子14について触れておく。保護箇所開始識別子13は、前述したように、特定のパターンを表すものである。但し、保護箇所開始識別子13は保護作用解除ルーチン呼び出しコード12と暗号化された保護対象コード102Aとの間に挟まれたコード領域に存在する。このため、保護箇所開始識別子13は、実行可能なコードで構成されていることが好ましい。または保護作用解除ルーチンにおいて、保護箇所開始識別子13が実行可能なコードに書き換えられるように構成することもできる。あるいは、保護箇所解除ルーチンの呼び出し後に、コード実行の流れが保護対象コード102へジャンプする、換言すれば保護箇所開始識別子13を飛び越えて(スキップしてともいう)コードの実行が進行するように構成することで、保護箇所開始識別子13が実行されないように構成することもできる。尚、これは、保護箇所終了識別子14についても同様である。
次に、保護箇所検索ルーチンについて図面と共に詳細に説明する。図8は、保護箇所検索ルーチンが実行された際の情報処理装置の動作を示すフローチャートである。
図8に示すように、情報処理装置は、保護箇所検索ルーチンを実行すると、先ず関数ポインタの値を利用して、関数の実行時のアドレスを特定する(ステップS131)。尚、ここで言うアドレスとは、RAMなどのメモリにおけるアドレスである。
これを具体例を挙げて説明する。例えばLinux OS(オペレーティングシステム)のコンパイラ(GCC(GNU Compiler Collection/GNU C Compiler)など)で処理されるC言語を利用する場合、関数ポインタの値は、そのまま関数の実行時のアドレスとなる。このため、例えば“int func1(int a)”という関数が存在すると仮定すると、当該関数の実行時のアドレスは以下の命令文で取得することができる。
unsigned char *p = (unsigned char *)func1;
この命令文によれば、“func1”の実行時のアドレスを変数“p”として取得することができる。
また、他のプラットフォーム、例えばWindows(登録商標) OSやMac OS(登録商標)などの場合、上述したLinuxの場合と異なり、関数ポインタの値が、関数のアドレステーブルを指している場合がある。この場合、そのテーブル内の値を参照することにより、いずれの場合も関数ポインタの値から関数の実行時のアドレスを計算することが可能である。
以上のように関数の実行時アドレスを取得すると、次に情報処理装置は、当該実行時のアドレスを基点として、保護箇所開始識別子13と保護箇所終了識別子14とを検索する(ステップS132)。これにより、ある関数内の暗号化された保護対象コード102Aを実行時に特定することができる。その後、図7におけるステップS123へ移行し、暗号化された保護対象コード102Aを復号化して実行すると共に、残りのコードを実行する。
以上のように構成及び動作することで、本実施例によれば、非実行時にプログラムの一部が保護されているため、これの静的な解析を困難とすることができる。また、この保護作用は、プログラムの実行時であって該当するコードの実行前に解除されるため、保護作用が解除されている状態を非常に短い時間とすることができる。この結果、メモリを参照する解析に対しても、これを困難とすることができる。
尚、以上の説明では、保護対象コード102の存在範囲を示す識別子(保護箇所開始識別子13及び保護箇所終了識別子14)を保護対象コード102の直前及び直後に設けた場合を例に挙げた。この場合、保護対象コード102の先頭アドレスは保護箇所開始識別子13の直後のアドレスとなり、保護対象コード102の後尾アドレスは保護箇所終了識別子14の直前のアドレスとなる。
但し、本発明は、これに限定されるものではない。例えば保護箇所開始識別子13のアドレスに対して所定アドレス分、前後したアドレスを保護対象コード102の先頭アドレスとすることも可能である。同様に、例えば保護箇所終了識別子14のアドレスに対して所定アドレス分、前後したアドレスを保護対象コード102の後尾アドレスとすることも可能である。このように構成した場合、保護箇所検索ルーチンでは、検索により得られた保護箇所開始識別子13及び保護箇所終了識別子14のアドレスに対して所定アドレス分、加算又は除算したアドレスが保護対象コード102の先頭アドレス及び後尾アドレスとして取得される。
この他、例えば保護対象コード102のコード長を固定長とした場合、保護箇所開始識別子13若しくは保護箇所終了識別子14の何れか一方を省略することができる。すなわち、保護対象コード102の存在範囲を示す識別子を1つとすることができる。このように構成した場合であって例えば当該識別子を保護対象コード102の直前に設けた場合、保護箇所検索ルーチンでは、検索により得られた識別子に対して直後のアドレスから所定長のコードが保護対象コード102として取得される。尚、保護対象コード102の先頭アドレスに対して所定コード分、離れた位置に識別子を設けた場合でも、当該所定コードのコード長を考慮しつつ同様の手法により保護対象コード102が存在するアドレスを取得することができる。また、識別子を保護対象コード102の後尾アドレスに対して設けた場合でも同様である。
また、本発明は、保護作用解除ルーチンが保護箇所検索ルーチンで検索された識別子(例えば保護箇所開始識別子13及び保護箇所終了識別子14)のアドレスから保護対象コード102の先頭アドレス及び後尾アドレスを特定するように構成することもできる。
次に、本発明の実施例2について図面を用いて詳細に説明する。尚、以下の説明において、実施例1と同様の構成については、同一の符号を付し、その詳細な説明を省略する。また、特記しない構成に関しては実施例1と同様である。
本実施例は、実施例1と同様の構成において、保護対象コードの保護作用が解除済みであるか否かを判断する。これにより、保護対象コードを複数回実行する場合にも、実施例1による構成を適用することができる。尚、以下では、本実施例を実施例1と組み合わせた場合を例に挙げて説明する。
本実施例において、プログラム作成装置の構成は実施例1と同様である。但し、エディタ2で作成されるプログラムは、図9に示すようなファイルイメージとなる。本実施例では、これをプログラム100bとする。
図4に示すプログラム100aと図9に示すプログラム100bとを比較すると明らかなように、本実施例によるプログラム100bは、任意のコード101,103,保護対象コード102,保護箇所開始識別子13,保護箇所終了識別子14,保護箇所検索ルーチン呼び出しコード11及び保護作用解除ルーチン呼び出しコード12の他に、保護箇所検索ルーチン呼び出しコード11より以前の行に設けられた保護作用解除済み確認ルーチン呼び出しコード21を有する。
任意のコード101,103,保護対象コード102,保護箇所開始識別子13,保護箇所終了識別子14,保護箇所検索ルーチン呼び出しコード11及び保護作用解除ルーチン呼び出しコード12は実施例1と同様である。
保護作用解除済み確認ルーチン呼び出しコード21は、メインルーチンとなるプログラム100bとは別に作成された保護作用解除済み確認ルーチンを呼び出して実行するためのコードである。保護作用解除済み確認ルーチンは保護対象コード102に適用された保護作用(ここでは暗号化)が解除されたか否かを判断し、解除済みである場合、保護箇所検索ルーチン及び保護作用解除ルーチンを飛ばして保護対象コード102を実行するためのサブルーチンである。但し、保護作用解除済み確認ルーチンをサブルーチンとすることは必須の要件でなく、これをプログラム100b内に記述してもよい。
以上のように作成したプログラム100bは、実施例1と同様に、コンパイラ3に入力され、実行プログラムに変換される。本実施例では、これを実行プログラム100Bとする。尚、作成された実行プログラム100Bは、保護箇所検索ルーチン,保護作用解除ルーチン及び保護作用解除済み確認ルーチンとリンクされる。
次に、上述のように作成した実行プログラム100Bを実行した際の情報処理装置の動作を図面と共に詳細に説明する。
情報処理装置は、実行プログラム100Bを実行すると、当該実行プログラム100BをRAMなどのメモリにロードする。この際、メモリ上に展開される実行プログラム100Bにおいて、保護対象コード102には保護作用が適用されている(暗号化された保護対象コード102Aに相当)。このように実行プログラム100Bを展開した状態で、情報処理装置は順次コードを実行する。図10のフローチャートに、実行プログラム100Bを実行した際の情報処理装置の動作を示す。
図10に示すように、情報処理装置は先ず、任意のコード101の先頭から記述に沿ってコードを順次実行する(ステップS201)。この流れにおいて保護作用解除済み確認ルーチン呼び出しコード21が実行されると、情報処理装置は保護作用解除済み確認ルーチンを呼び出し、これを実行する(ステップS201)。
保護作用解除済み確認ルーチンを実行すると、情報処理装置は保護対象コード102に適用された保護作用が解除済みであるか否かを判定する(ステップS202)。これは、保護対象コード102に適用した保護作用を解除したか否かを、情報処理装置が管理しておくことで実現することができる(ステップS205)。すなわち、情報処理装置は、保護作用解除ルーチンを実行した場合、これをメモリに保存しておく等の手段で管理するように構成される。
ステップS202の判定の結果、保護作用を解除済みである場合(ステップS202のYes)、情報処理装置はステップS206に移行し、保護対象コード102を実行する(ステップS206)。すなわち、情報処理装置は、保護箇所検索ルーチン呼び出しコード11及び保護作用解除ルーチン呼び出しコード12を飛ばし、保護対象コード102を実行する。
また、保護作用が解除されていない場合(ステップS202のNo)、情報処理装置は、記述に沿って保護箇所検索ルーチン呼び出しコード11を実行する。これにより、保護箇所検索ルーチンが呼び出され、これが実行される(ステップS203)。
保護箇所検索ルーチンを実行すると、情報処理装置は、実施例1と同様に、保護箇所開始識別子13と保護箇所終了識別子14とを検索し、これらに基づいて暗号化された保護対象コード102Aを特定する。また、暗号化された保護対象コード102Aを特定すると、情報処理装置は、記述に沿って保護作用解除ルーチン呼び出しコード12を実行する。これにより、情報処理装置では保護作用解除ルーチンが呼び出され、これが実行される(ステップS204)。
また、暗号化された保護対象コード102Aの保護作用を解除すると、次に情報処理装置は、記述に沿って復号化した保護対象コード102を実行し(ステップS206)、その後、同じく記述に沿って残りのコード(任意のコード103を含む)を実行する(ステップS207)。
以上のように構成及び動作することで、本実施例によれば、実施例1と同様の構成において、保護対象コードの保護作用が解除されているか否かを実行プログラムの実行中に判断することが可能となる。これにより、保護対象コードを複数回実行する場合にも、実施例1による構成を適用することができる。
次に、本発明の実施例3について図面を用いて詳細に説明する。尚、以下の説明において、実施例1又は実施例2と同様の構成については、同一の符号を付し、その詳細な説明を省略する。また、特記しない構成に関しては実施例1又は実施例2と同様である。
本実施例は、実行中の実行プログラムに保護作用を適用するものである。これにより、当該実行プログラムの実行中であっても、保護したいコードに必要に応じて即座に保護作用を適用することができる。また、この構成を実施例1による構成と組み合わせることで、保護したいコードを実行後に、これに保護作用を即座に適用することが可能となるため、メモリ上で保護対象コードの保護作用が解除されている時間を極小化でき、解析の困難性を高めることができる。尚、以下では、本実施例を実施例1と組み合わせた場合を例に挙げて説明する。但し、本実施例は他の実施例と組み合わせることもできる。
本実施例において、プログラム作成装置の構成は実施例1と同様である。但し、エディタ2で作成されるプログラムは、図11に示すファイルイメージとなる。本実施例では、これをプログラム100cとする。
図4に示すプログラム100aと図11に示すプログラム100cとを比較すると明らかなように、本実施例によるプログラム100cは、任意のコード101,103,保護対象コード102,保護箇所開始識別子13,保護箇所終了識別子14,保護箇所検索ルーチン呼び出しコード11及び保護作用解除ルーチン呼び出しコード12の他に、暗号化された保護対象コード102Aより以降の行に設けられた保護作用適用ルーチン呼び出しコード31を有する。
任意のコード101,103,保護対象コード102,保護箇所開始識別子13,保護箇所終了識別子14,保護箇所検索ルーチン呼び出しコード11及び保護作用解除ルーチン呼び出しコード12は実施例1と同様である。
保護作用適用ルーチン呼び出しコード31は、メインルーチンとなるプログラム100cとは別に作成された保護作用適用ルーチンを呼び出して実行するためのコードである。保護作用適用ルーチンは保護作用が解除された保護対象コード102に再度、保護作用を適用するためのサブルーチンである。但し、保護作用適用ルーチンをサブルーチンとすることは必須の要件でなく、これをプログラム100c内に記述してもよい。
以上のように作成したプログラム100cは、実施例1と同様に、コンパイラ3に入力され、実行プログラムに変換される。本実施例では、これを実行プログラム100Cとする。尚、作成された実行プログラム100Cは、保護箇所検索ルーチン,保護作用解除ルーチン及び保護作用適用ルーチンとリンクされる。
次に、上述のように作成した実行プログラム100Cを実行した際の情報処理装置の動作を図面と共に詳細に説明する。
情報処理装置は、実行プログラム100Cを実行すると、当該実行プログラム100CをRAMなどのメモリにロードする。この際、メモリ上に展開される実行プログラム100Cにおいて、保護対象コード102には保護作用が適用されている(暗号化された保護対象コード102Aに相当)。このように実行プログラム100Cを展開した状態で、情報処理装置は順次コードを実行する。図12のフローチャートに、実行プログラム100Cを実行した際の情報処理装置の動作を示す。
図12に示すように、情報処理装置は先ず、任意のコード101の先頭から記述に沿ってコードを順次実行する(ステップS301)。この流れにおいて保護箇所検索ルーチン呼び出しコード11が実行されると、情報処理装置は保護箇所検索ルーチンを呼び出し、これを実行する(ステップS302)。
保護箇所検索ルーチンを実行すると、情報処理装置は保護箇所開始識別子13と保護箇所終了識別子14とを検索し、これらに基づいて暗号化された保護対象コード102Aを特定する。この際、情報処理装置は暗号化された保護対象コード102Aのアドレスを保持しておく。また、暗号化された保護対象コード102Aを特定すると、情報処理装置は、記述に沿って保護作用解除ルーチン呼び出しコード12を実行する。これにより、情報処理装置では保護作用解除ルーチンが呼び出され、これが実行される(ステップS303)。
また、暗号化された保護対象コード102Aの保護作用を解除すると、次に情報処理装置は、記述に沿って復号化した保護対象コード102を実行する(ステップS304)。次に情報処理装置は、同じく記述に沿って保護作用適用ルーチン呼び出しコード31を実行する。これにより、情報処理装置では、保護作用適用ルーチンが呼び出され、これが実行される(ステップS305)。
保護作用適用ルーチンが実行されると、情報処理装置は上述において保持しておいた暗号化された保護対象コード102Aのアドレスを保護対象コード102のアドレスとして取得し、これを暗号化する。これにより、保護対象コード102に保護作用が再度適用される。尚、保護作用適用後の保護対象コード102は暗号化された保護対象コード102Aとなる。
このように保護対象コード102に再度保護作用を適用すると、次に情報処理装置は、記述に沿って残りのコード(任意のコード103を含む)を実行する(ステップS306)。
以上のように構成及び動作することで、本実施例によれば、実施例1と同様の構成において、保護したいコードを実行後に、これに保護作用を即座に適用することが可能となる。これにより、メモリ上で保護対象コードの保護作用が解除されている時間を極小化でき、解析の困難性を高めることができる。
次に、本発明の実施例4について図面を用いて詳細に説明する。尚、以下の説明において、実施例1から実施例3の何れかと同様の構成については、同一の符号を付し、その詳細な説明を省略する。また、特記しない構成に関しては実施例1から実施例2の何れかと同様である。
本実施例は、実行プログラムの実行中に、これが解析されているか否かを判断し、解析されている場合、正常な実行を行わない、若しくは実行を終了するものである。これにより、メモリ上で実行プログラムが解析されることを未然に防ぐことができる。尚、以下では、本実施例を実施例1と組み合わせた場合を例に挙げて説明する。但し、本実施例は他の実施例と組み合わせることもできる。
本実施例において、プログラム作成装置の構成は実施例1と同様である。但し、エディタ2で作成されるプログラムは、図13に示すようなファイルイメージとなる。本実施例では、これをプログラム100dとする。
図4に示すプログラム100aと図13に示すプログラム100dとを比較すると明らかなように、本実施例によるプログラム100dは、任意のコード101,103,保護対象コード102,保護箇所開始識別子13,保護箇所終了識別子14,保護箇所検索ルーチン呼び出しコード11及び保護作用解除ルーチン呼び出しコード12の他に、保護箇所検索ルーチン呼び出しコード11と保護作用解除ルーチン呼び出しコード12との間にデバッガ検出有無判定コード41を有する。
任意のコード101,103,保護対象コード102,保護箇所開始識別子13,保護箇所終了識別子14,保護箇所検索ルーチン呼び出しコード11及び保護作用解除ルーチン呼び出しコード12は実施例1と同様である。
デバッガ検出有無判定コード41は、実行プログラム(これを100Dとする)が実行されているOSにおいてデバッガが検出されたか否かを判定するための処理が記述されたコードである。尚、一般的なOSには、デバッガなどの解析プログラムの存在を監視するための手段が設けられている。尚、デバッガが検出されたか否かを判定するための処理は、サブルーチンとして記述することもできる。
以上のように作成したプログラム100dは、実施例1と同様に、コンパイラ3に入力され、実行プログラムに変換される。本実施例では、これを実行プログラム100Dとする。尚、作成された実行プログラム100Dは、保護箇所検索ルーチン及び保護作用解除ルーチンとリンクされる。
次に、上述のように作成した実行プログラム100Dを実行した際の情報処理装置の動作を図面と共に詳細に説明する。
情報処理装置は、実行プログラム100Dを実行すると、当該実行プログラム100DをRAMなどのメモリにロードする。この際、メモリ上に展開される実行プログラム100Dにおいて、保護対象コード102には保護作用が適用されている(暗号化された保護対象コード102Aに相当)。このように実行プログラム100Dを展開した状態で、情報処理装置は順次コードを実行する。図14のフローチャートに、実行プログラム100Dを実行した際の情報処理装置の動作を示す。
図14に示すように、情報処理装置は先ず、任意のコード101の先頭から記述に沿ってコードを順次実行する(ステップS401)。この流れにおいて保護箇所検索ルーチン呼び出しコード11が実行されると、情報処理装置は保護箇所検索ルーチンを呼び出し、これを実行する(ステップS402)。
保護箇所検索ルーチンを実行すると、情報処理装置は保護箇所開始識別子13と保護箇所終了識別子14とを検索し、これらに基づいて暗号化された保護対象コード102Aを特定する。
また、情報処理装置は、デバッガ検出有無判定コード41を実行し、OSにおいてデバッガが検出されたか否かを判定する(ステップS403)。この判定の結果、デバッガが検出されていた場合(ステップS403のYes)、情報処理装置は、以降のコードを実行せず、そのまま処理を終了する。一方、デバッガが検出されていない場合(ステップS403のNo)、情報処理装置は、記述に沿って保護作用解除ルーチン呼び出しコード12を実行する。これにより、情報処理装置では保護作用解除ルーチンが呼び出され、これが実行される(ステップS404)。
また、暗号化された保護対象コード102Aの保護作用を解除すると、次に情報処理装置は、記述に沿って復号化した保護対象コード102を実行し(ステップS405)、その後、同じく記述に沿って残りのコード(任意のコード103を含む)を実行する(ステップS406)。
以上のように構成及び動作することで、本実施例によれば、実行プログラムの実行中に、これが解析されているか否かを判断することが可能となる。また、解析されている場合、実行プログラムの正常な動作を行わない、若しくは実行を終了することが可能となる。これにより、メモリ上で実行プログラムが解析されることを未然に防ぐことができる。
尚、上記した本実施例では、保護作用解除ルーチン呼び出しコード12の直前にデバッガ検出有無判定コード41を記述したが、本発明はこれに限らず、保護作用解除ルーチン呼び出しコード12の前であれば、どの位置に記述してもよい。また、複数の位置にデバッガ検出有無判定コード41を記述してもよい。複数箇所で行うことにより、解析に対する耐性をより向上させることができる。更に、上記した具体例では、デバッガが検出された際、実行プログラム100Dの実行を終了するように構成されていたが、本発明ではこれに限定されず、例えば保護作用解除ルーチンの実行をスキップさせ、保護作用が解除されていない状態の保護対象コード102を実行させることで、結果的に正常に実行されないように構成することもできる。
次に、本発明の実施例5について図面を用いて詳細に説明する。尚、以下の説明において、実施例1から実施例4の何れかと同様の構成については、同一の符号を付し、その詳細な説明を省略する。また、特記しない構成に関しては実施例1から実施例4の何れかと同様である。
上述したように、各実施例において保護作用には暗号化を採用していた。本実施例では、このような場合における、暗号化のための暗号鍵及び復号化のための復号鍵について説明する。尚、以下では、本実施例を実施例1と組み合わせた場合を例に挙げて説明する。但し、本実施例は他の実施例と組み合わせることもできる。
本実施例では、実行プログラムにおけるコードの一部分をデータとみなし、この部分に対して何らかの計算を行うことで得られた結果を暗号鍵及び復号鍵として用いる。何らかの計算としては、例えばチェックサム値の計算やハッシュ値の計算などを適用することができる。実行プログラムの一部に対して行った計算結果を暗号鍵及び復号鍵とすることで、鍵の計算に使われる部分のコードが改変された場合に、正しい鍵が生成できなくなるという効果が得られる。
暗号鍵及び復号鍵の計算に使う一部のコード(以下、鍵計算対象コードという)には、保護作用解除ルーチン、すなわち復号ルーチンのコードを含めることが好ましい。なぜならば、復号ルーチンのコードは、解析者がデバッガ上で復号ルーチンの解析を行おうとする際に、デバッガのブレークポイント機能によって書き換えられるためである。このため、デバッガ上で鍵の計算ルーチンを動作させると、正しい鍵の値を得ることができない。この結果、暗号化された保護対象箇所を正しく復号化することができず、正常な実行を妨げることとなり、解析に対する耐性を高めることができる。
また、本実施例では、実行プログラムの実行時に、暗号鍵及び復号鍵をコードの一部分から生成する。このため、これらの鍵を実行プログラムの中に静的に保持しておく必要がない。従って、解析者が復号鍵を得るためには、実行プログラムを実行させ、復号鍵の生成ルーチンを動作させる必要がある。しかしながら、この行為をデバッガ上で行うと、前述したように正しい鍵を得ることができない。すなわち、鍵を取得するためには実行プログラムをデバッガ上で実行させなければならないが、デバッガ上で当該実行プログラムを実行させると正しい鍵が得られない、という状況を作り出すことができ、解析に対する耐性を高めることができる。
次に、本実施例による構成及び動作について説明する。本実施例において、プログラム作成装置の構成は実施例1と同様である。但し、エディタ2で作成されるプログラムは、図15に示すようなファイルイメージとなる。本実施例では、これをプログラム100eとする。
図4に示すプログラム100aと図15に示すプログラム100eとを比較すると明らかなように、本実施例によるプログラム100eは、任意のコード101,103,保護対象コード102,保護箇所開始識別子13,保護箇所終了識別子14及び保護作用解除ルーチン呼び出しコード12の他に、保護箇所及び鍵計算対象箇所検索ルーチン呼び出しコード11eと鍵計算対象箇所開始識別子51と鍵計算対象箇所終了識別子52と鍵計算ルーチン呼び出しコード53とを有する。また、鍵計算対象箇所開始識別子51と鍵計算対象箇所終了識別子52とで挟まれたコード、すなわち、保護箇所及び鍵計算対象箇所検索ルーチン呼び出しコード11eと鍵計算ルーチン呼び出しコード53と保護作用解除ルーチン呼び出しコード12とは、暗号鍵及び復号鍵の計算に使われる鍵計算対象コード54を構成する。
任意のコード101,103,保護対象コード102,保護箇所開始識別子13,保護箇所終了識別子14及び保護作用解除ルーチン呼び出しコード12は実施例1と同様である。
鍵計算対象箇所開始識別子51は、暗号鍵及び復号鍵を計算する際に用いる鍵計算対象コード54の開始位置(アドレス)を示すコードである。また、鍵計算対象箇所終了識別子52は、鍵計算対象コード54の終了位置(アドレス)を示すコードである。すなわち、本実施例では鍵計算対象箇所開始識別子51と鍵計算対象箇所終了識別子52とは、後述する実行プログラム100Eの少なくとも一部のコードを指定するための識別子である。本実施例において暗号鍵及び復号鍵は、これらで挟まれた鍵計算対象コード54を用いて計算される。尚、鍵計算対象箇所開始識別子51および鍵計算対象箇所終了識別子52は、ソースコードをコンパイルした結果である実行プログラム100Eにおいて、特定のパターンを表すものである。また、これらの記述には、例えばコンパイラ3のインラインアセンブラ機能を使うことができる。すなわち、インラインアセンブラ機能を用いて特定のバイト列をソースコードの該当個所に埋め込むことで、鍵計算対象箇所開始識別子51および鍵計算対象箇所終了識別子52を所望する位置に記述することができる。
ここで、鍵計算対象箇所開始識別子51及び鍵計算対象箇所終了識別子52について触れておく。鍵計算対象箇所開始識別子51は、前述したように、特定のパターンを表すものである。但し、鍵計算対象箇所開始識別子51は任意のコード101と保護箇所及び鍵計算対象箇所検索ルーチン呼び出しコード11eとの間に挟まれたコード領域に存在する。このため、鍵計算対象箇所開始識別子51は、実行可能なコードで構成されていることが好ましい。または任意のコード101において、鍵計算対象箇所開始識別子51が実行可能なコードに書き換えられるように構成することもできる。あるいは、任意のコード101の実行後に、コード実行の流れが保護箇所及び鍵計算対象箇所検索ルーチン呼び出しコード11eへジャンプする、換言すれば鍵計算対象箇所開始識別子51を飛び越えてコードの実行が進行するように構成することで、鍵計算対象箇所開始識別子51が実行されないように構成することもできる。尚、これは、鍵計算対象箇所終了識別子52についても同様である。
保護箇所及び鍵計算対象箇所検索ルーチン呼び出しコード11eは、メインルーチンとなるプログラム100eとは別に作成された保護箇所及び鍵計算対象箇所検索ルーチンを呼び出して実行するためのコードである。保護箇所及び鍵計算対象箇所検索ルーチンは、実施例1と同様に保護箇所開始識別子13と保護箇所終了識別子14とを検索することで、保護対象コード102を特定する他、鍵計算対象箇所開始識別子51と鍵計算対象箇所終了識別子52とを検索することで、鍵計算対象コード54を特定するためのサブルーチンである。但し、保護箇所及び鍵計算対象箇所検索ルーチンをサブルーチンとすることは必須の要件でなく、これをプログラム100e内に記述してもよい。
また、鍵計算ルーチン呼び出しコード53は、メインルーチンとなるプログラム100eとは別に作成された鍵計算ルーチンを呼び出して実行するためのコードである。鍵計算ルーチンは、保護箇所及び鍵計算対象箇所検索ルーチンで特定された鍵計算対象コード54に基づいて、暗号鍵及び復号鍵を計算するためのサブルーチンである。但し、鍵計算ルーチンをサブルーチンとすることは必須の要件でなく、これをプログラム100e内に記述してもよい。また、鍵計算ルーチンを保護作用解除ルーチン又は保護作用適用ルーチンに含めてもよい。すなわち、保護作用解除ルーチン又は保護作用適用ルーチンが復号鍵又は暗号鍵を算出するように構成してもよい。
以上のように作成されたプログラム100eは、実施例1と同様に、コンパイラ3を用いてオブジェクトコードにコンパイルされ、実行プログラムが作成される。本実施例では、これを実行プログラム100Eとする。尚、作成された実行プログラム100Eは、保護箇所及び鍵計算対象箇所検索ルーチン,鍵計算ルーチン及び保護作用解除ルーチンとリンクされる。
このように実行プログラム100Eを作成すると、次にユーザは、保護作用適用手段4を起動し、これを用いて実行プログラム100Eにおける保護対象コード102に保護作用を適用する。ここで、保護作用適用手段4の動作を図面と共に詳細に説明する。
図16は保護作用適用手段4の動作を示すフローチャートである。図16に示すように、保護作用適用手段4は、起動されると先ず、作成された実行プログラム100Eを読み込み(ステップS501)、実行プログラム100Eに埋め込まれた保護箇所開始識別子13及び保護箇所終了識別子14と鍵計算対象箇所開始識別子51及び鍵計算対象箇所終了識別子52とを検索する(ステップS502)。これにより、保護対象コード102と鍵計算対象コード54とが特定される。
次に保護作用適用手段4は、特定した鍵計算対象コード54から暗号鍵を生成する(ステップS503)。暗号鍵の計算は、上述のように、例えばチェックサム値の計算やハッシュ値の計算などを適用することが可能である。
次に保護作用適用手段4は、計算した暗号鍵を用いて、特定された保護対象コード102に保護作用を適用する(ステップS504)。保護作用とは上述したように暗号化である。これにより、保護対象コード102が暗号化された保護対象コード102Aに置き換えられる。
次に保護作用適用手段4は、実行プログラム100Eのコード領域を書き換え可能状態に設定する(ステップS505)。以上のような行程を経ることによって、保護作用が適用された実行プログラム100Eが完成する。
次に、上述のように作成した実行プログラム100Eを実行した際の情報処理装置の動作を図面と共に詳細に説明する。
情報処理装置は、実行プログラム100Eを実行すると、当該実行プログラム100EをRAMなどのメモリにロードする。この際、メモリ上に展開される実行プログラム100Eにおいて、保護対象コード102には保護作用が適用されている(暗号化された保護対象コード102Aに相当)。このように実行プログラム100Eを展開した状態で、情報処理装置は順次コードを実行する。図17のフローチャートに、実行プログラム100Eを実行した際の情報処理装置の動作を示す。
図17に示すように、情報処理装置は先ず、任意のコード101の先頭から記述に沿ってコードを順次実行する(ステップS511)。この流れにおいて保護箇所及び鍵計算対象箇所検索ルーチン呼び出しコード11eが実行されると、情報処理装置は保護箇所及び鍵計算対象箇所検索ルーチンを呼び出し、これを実行する(ステップS512)。
保護箇所及び鍵計算対象箇所検索ルーチンを実行すると、情報処理装置は保護箇所開始識別子13及び保護箇所終了識別子14と鍵計算対象箇所開始識別子51及び鍵計算対象箇所終了識別子52とを検索し、これらに基づいて暗号化された保護対象コード102Aと鍵計算対象コード54とを特定する。また、暗号化された保護対象コード102A及び鍵計算対象コード54を特定すると、情報処理装置は、記述に沿ったコードの実行に従って鍵計算ルーチン呼び出しコード53を実行する。これにより、情報処理装置では鍵計算ルーチンが呼び出され、これが実行される(ステップS513)。
鍵計算ルーチンにより復号鍵を算出すると、次に情報処理装置は、記述に沿って保護作用解除ルーチン呼び出しコード12を実行する。これにより、情報処理装置では保護作用解除ルーチンが呼び出され、これが実行される(ステップS514)。
また、暗号化された保護対象コード102Aの保護作用を解除すると、次に情報処理装置は、記述に沿って復号化した保護対象コード102を実行し(ステップS515)、その後、同じく記述に沿って残りのコード(任意のコード103を含む)を実行する(ステップS516)。
以上のように構成及び動作することで、本実施例によれば、復号鍵を実行プログラムの中に静的に保持しておく必要がなく、且つデバッガ上で正しい鍵を得ることができないため、解析に対する耐性を高めることができる。
尚、以上の構成において、鍵計算対象箇所終了識別子52と保護箇所開始識別子13とを隣接させた場合、これらを1つの識別子で代用することができる。これにより、実行プログラム100Eを簡略化することができる。
また、以上の説明では、鍵計算対象コード54の存在範囲を示す識別子(鍵計算対象箇所開始識別子51及び鍵計算対象箇所終了識別子52)を鍵計算対象コード54の直前及び直後に設けた場合を例に挙げた。この場合、鍵計算対象コード54の先頭アドレスは鍵計算対象箇所開始識別子51の直後のアドレスとなり、鍵計算対象コード54の後尾アドレスは鍵計算対象箇所終了識別子52の直前のアドレスとなる。
但し、本発明は、これに限定されるものではない。例えば鍵計算対象箇所開始識別子51のアドレスに対して所定アドレス分、前後したアドレスを鍵計算対象コード54の先頭アドレスとすることも可能である。同様に、例えば鍵計算対象箇所終了識別子52のアドレスに対して所定アドレス分、前後したアドレスを鍵計算対象コード54の後尾アドレスとすることも可能である。このように構成した場合、保護箇所及び鍵計算対象箇所検索ルーチンでは、検索により得られた鍵計算対象箇所開始識別子51及び鍵計算対象箇所終了識別子52のアドレスに対して所定アドレス分、加算又は除算したアドレスが鍵計算対象コード54の先頭アドレス及び後尾アドレスとして取得される。
この他、例えば鍵計算対象コード54のコード長を固定長とした場合、鍵計算対象箇所開始識別子51若しくは鍵計算対象箇所終了識別子52の何れか一方を省略することができる。すなわち、鍵計算対象コード54の存在範囲を示す識別子を1つとすることができる。このように構成した場合であって例えば当該識別子を鍵計算対象コード54の直前に設けた場合、鍵計算対象箇所検索ルーチンでは、検索により得られた識別子に対して直後のアドレスから所定長のコードが鍵計算対象コード54として取得される。尚、鍵計算対象コード54の先頭アドレスに対して所定コード分、離れた位置に識別子を設けた場合でも、当該所定コードのコード長を考慮しつつ同様の手法により鍵計算対象コード54が存在するアドレスを取得することができる。また、識別子を鍵計算対象コード54の後尾アドレスに対して設けた場合でも同様である。
また、本発明は、鍵計算ルーチンが保護箇所及び鍵計算対象箇所検索ルーチンで検索された識別子(例えば鍵計算対象箇所開始識別子51及び鍵計算対象箇所終了識別子52)のアドレスから鍵計算対象コード54の先頭アドレス及び後尾アドレスを特定するように構成することもできる。
次に、本発明の実施例6について図面を用いて詳細に説明する。尚、以下の説明において、実施例1から実施例5の何れかと同様の構成については、同一の符号を付し、その詳細な説明を省略する。また、特記しない構成に関しては実施例1から実施例5の何れかと同様である。
上述の実施例5では、鍵計算対象コード54が一定のコードとされていた。しかしながら、鍵計算対象コード54が一定である場合、それを元に計算される暗号鍵及び復号鍵も常に一定となる。すなわち、保護したい箇所が複数ある場合に、すべて同じ暗号鍵となってしまう。これは、安全性の観点から好ましくない。そこで本実施例では、鍵計算対象コード54に変化を持たせる。これにより、計算される暗号鍵及び復号鍵が変化するため、解析に対する耐性をより向上することができる。尚、以下では、本実施例を実施例3及び実施例5と組み合わせた場合を例に挙げて説明する。但し、本実施例は他の実施例と組み合わせることもできる。
本実施例において、プログラム作成装置の構成は実施例1と同様である。但し、エディタ2で作成されたプログラムは、図18に示すようなファイルイメージとなる。本実施例では、これをプログラム100fとする。
図4に示すプログラム100aと図18に示すプログラム100fとを比較すると明らかなように、本実施例によるプログラム100fは、任意のコード101,103,保護対象コード102,保護箇所開始識別子13,保護箇所終了識別子14及び保護作用解除ルーチン呼び出しコード12の他に、保護箇所及び鍵計算対象箇所検索ルーチン呼び出しコード11eと鍵計算対象箇所開始識別子51と鍵計算対象箇所終了識別子52と鍵計算ルーチン呼び出しコード53と乱数格納領域61と保護作用適用ルーチン呼び出しコード31とを有する。また、鍵計算対象箇所開始識別子51と鍵計算対象箇所終了識別子52とで挟まれたコード、すなわち、保護箇所及び鍵計算対象箇所検索ルーチン呼び出しコード11eと鍵計算ルーチン呼び出しコード53と保護作用解除ルーチン呼び出しコード12と乱数格納領域61(但し、実際にはこれに格納された乱数)とは、暗号鍵及び復号鍵の計算に使われる鍵計算対象コード54を構成する。
任意のコード101,103,保護対象コード102,保護箇所開始識別子13,保護箇所終了識別子14及び保護作用解除ルーチン呼び出しコード12は実施例1と同様である。また、保護箇所及び鍵計算対象箇所検索ルーチン呼び出しコード11eと鍵計算対象箇所開始識別子51と鍵計算対象箇所終了識別子52と鍵計算ルーチン呼び出しコード53とは実施例5と同様である。更に、保護作用適用ルーチン呼び出しコード31は実施例3と同様である。
乱数格納領域61は鍵計算対象コード54から計算した暗号鍵又は復号鍵に変化を持たせるための乱数を格納する領域である。すなわち、乱数格納領域61に例えば外部で発生させた乱数を格納することで、鍵計算対象コード54が変化する。従って、これに対してチェックサムやハッシュなどを行うことで計算した暗号鍵又は復号鍵も変化する。
以上のように作成されたプログラム100fは、実施例1と同様に、コンパイラ3を用いてオブジェクトコードにコンパイルされ、実行プログラムが作成される。本実施例では、これを実行プログラム100Fとする。尚、作成された実行プログラム100Fは、保護箇所及び鍵計算対象箇所検索ルーチン,鍵計算ルーチン,保護作用解除ルーチン及び保護作用適用ルーチンとリンクされる。
このように実行プログラム100Fを作成すると、次にユーザは、保護作用適用手段4を起動し、これを用いて実行プログラム100Fにおける保護対象コード102に保護作用を適用すると共に、乱数格納領域61に乱数を格納する。ここで、保護作用適用手段4の動作を図面と共に詳細に説明する。
図19は保護作用適用手段4の動作を示すフローチャートである。図19に示すように、保護作用適用手段4は、起動されると先ず、作成された実行プログラム100Fを読み込み(ステップS601)、実行プログラム100Fに埋め込まれた保護箇所開始識別子13及び保護箇所終了識別子14と鍵計算対象箇所開始識別子51及び鍵計算対象箇所終了識別子52と乱数格納領域61とを検索する(ステップS602)。これにより、保護対象コード102と鍵計算対象コード54とが特定される。また、乱数格納領域61の検索は、例えばこの領域に所定パターンのコードを格納しておく、または鍵計算対象箇所終了識別子52の直前に置く等あらかじめ場所を決めておくことなどで実現することができる。
次に保護作用適用手段4は、乱数を発生させ(ステップS603)、これを特定した乱数格納領域61に格納する(ステップS604)。次に保護作用適用手段4は、特定した鍵計算対象コード54から暗号鍵を生成する(ステップS605)。暗号鍵の計算は、上述のように、例えばチェックサム値の計算やハッシュ値の計算などを適用することが可能である。
次に保護作用適用手段4は、実行プログラム100Fのコード領域を書き換え可能状態に設定する(ステップS606)。以上のような行程を経ることによって、保護作用が適用された実行プログラム100Fが完成する。ここで、実行プログラム100Fのファイルイメージを図20に示す。図20に示すように、保護作用適用後の実行プログラム100Fでは、保護対象コード102が暗号化された保護対象コード102Aに置き換えられていると共に、乱数格納領域61に乱数61Fが格納されている。
次に、上述のように作成した実行プログラム100Fを実行した際の情報処理装置の動作を図面と共に詳細に説明する。
情報処理装置は、実行プログラム100Fを実行すると、当該実行プログラム100FをRAMなどのメモリにロードする。この際、メモリ上に展開される実行プログラム100Fにおいて、保護対象コード102には保護作用が適用されている(暗号化された保護対象コード102Aに相当)。このように実行プログラム100Fを展開した状態で、情報処理装置は順次コードを実行する。図21のフローチャートに、実行プログラム100Fを実行した際の情報処理装置の動作を示す。
図21に示すように、情報処理装置は先ず、任意のコード101の先頭から記述に沿ってコードを順次実行する(ステップS611)。この流れにおいて保護箇所及び鍵計算対象箇所検索ルーチン呼び出しコード11eが実行されると、情報処理装置は保護箇所及び鍵計算対象箇所検索ルーチンを呼び出し、これを実行する(ステップS612)。
保護箇所及び鍵計算対象箇所検索ルーチンを実行すると、情報処理装置は保護箇所開始識別子13及び保護箇所終了識別子14と鍵計算対象箇所開始識別子51及び鍵計算対象箇所終了識別子52とを検索し、これらに基づいて暗号化された保護対象コード102A及び鍵計算対象コード54とを特定する。また、暗号化された保護対象コード102A及び鍵計算対象コード54を特定すると、情報処理装置は、記述に沿って鍵計算ルーチン呼び出しコード53を実行する。これにより、情報処理装置では鍵計算ルーチンが呼び出され、これが実行される(ステップS613)。
鍵計算ルーチンにより復号鍵を算出すると、次に情報処理装置は、記述に沿って保護作用解除ルーチン呼び出しコード12を実行する。これにより、情報処理装置では保護作用解除ルーチンが呼び出され、これが実行される(ステップS614)。この際、情報処理装置は暗号化された保護対象コード102Aのアドレスを保持しておく。また、情報処理装置は、乱数格納領域61に格納された乱数61Fを実行可能なコードで書き換えておく(ステップS615)。この際、情報処理装置は、書換えの対象である乱数61Fをメモリに保持しておく。尚、ステップS615は保護作用解除ルーチン内で行われてもよい。
また、暗号化された保護対象コード102Aの保護作用を解除すると、次に情報処理装置は、記述に沿って復号化した保護対象コード102を実行する(ステップS616)。次に情報処理装置は、同じく記述に沿って保護作用適用ルーチン呼び出しコード31を実行する。これにより、情報処理装置では、保護作用適用ルーチンが呼び出され、これが実行される(ステップS617)。
保護作用適用ルーチンが実行されると、情報処理装置は上述において保持しておいた暗号化された保護対象コード102Aのアドレスを保護対象コード102のアドレスとして取得し、これを暗号化する。これにより、保護対象コード102に保護作用が再度適用される。尚、保護作用適用後の保護対象コード102は暗号化された保護対象コード102Aである。また、情報処理装置は、保持しておいた乱数61Fを乱数格納領域61に戻す(ステップS618)。これにより、何度でも暗号鍵及び復号鍵を計算することができる。尚、ステップS615は保護作用解除ルーチン内で行われてもよい。
このように保護対象コード102に再度保護作用を適用すると、次に情報処理装置は、記述に沿って残りのコード(任意のコード103を含む)を実行する(ステップS619)。
以上のように構成することで、本実施例によれば、計算される暗号鍵及び復号鍵を変化させることが可能となり、結果として、解析に対する耐性をより向上することができる。
上述のように、本発明によれば、関数ポインタのアドレス情報と保護箇所識別情報とを利用することで、プログラムの実行時に保護作用適用箇所を特定することが可能となり、実行時に保護作用を解除する具体的手法を提供することができる。また、本発明によれば、保護作用の解除時に解析ツールの存在を検出するため、解析ツールを用いた解析時に正常な実行を妨げることが可能となり、解析を困難にさせることができる。更に、本発明によれば、保護作用として暗号化を用いた場合、実行時に保護対象箇所を復号する際に使用する復号鍵を、実行時に計算するため、実行コードが改変された場合に正しく復号されることを防止でき、結果として、正常な実行を妨げ、解析を困難にさせることができる。
尚、上記実施例1から実施例5は本発明を実施するための例にすぎず、本発明はこれらに限定されるものではなく、これらの実施例を種々変形することは本発明の範囲内であり、更に本発明の範囲内において、他の様々な実施例が可能であることは上記記載から自明である。
例えば暗号鍵及び復号鍵を取得する方法は、実施例で例示した方法に限られるものではなく、例えばこれを外部ファイル又はネットワーク経由で取得するようにも構成することができる。また、実施例で例示した方法で計算した暗号鍵又は復号鍵と、外部ファイル又はネットワーク経由で取得した暗号鍵又は復号鍵とを組み合わせる、若しくは計算することで、真の復号鍵を生成するようにも構成することができる。
また、本発明は、暗号鍵及び復号鍵を実行プログラム中に予め埋め込んでおくことを排除するものでもない。例えば解析から実行プログラムを保護すると共に、実行効率を重視するような場合などのように、実行時に暗号鍵及び復号鍵を計算するオーバヘッドを避けるために、予め計算しておいた暗号鍵及び復号鍵を実行プログラム中に埋め込んでおく方法を取ることが好ましい場合がある。
本発明の実施例1によるプログラム作成装置1の構成を示す機能ブロック図である。 本発明の実施例1による実行プログラム100Aの作成手順を示すフローチャートである。 本発明の実施例1によるプログラム100のファイルイメージを示す図である。 本発明の実施例1によるプログラム100aのファイルイメージを示す図である。 本発明の実施例1による保護作用適用手段4の動作を示すフローチャートである。 本発明の実施例1によるプログラム100Aのファイルイメージを示す図である。 本発明の実施例1において実行プログラム100Aを実行した際の情報処理装置の動作を示すフローチャートである。 本発明の実施例1による保護箇所検索ルーチンが実行された際の情報処理装置の動作を示すフローチャートである。 本発明の実施例2によるプログラム100bのファイルイメージを示す図である。 本発明の実施例2において実行プログラム100Bを実行した際の情報処理装置の動作を示すフローチャートである。 本発明の実施例3によるプログラム100cのファイルイメージを示す図である。 本発明の実施例3において実行プログラム100Cを実行した際の情報処理装置の動作を示すフローチャートである。 本発明の実施例4によるプログラム100dのファイルイメージを示す図である。 本発明の実施例4において実行プログラム100Dを実行した際の情報処理装置の動作を示すフローチャートである。 本発明の実施例5によるプログラム100eのファイルイメージを示す図である。 本発明の実施例5による保護作用適用手段4の動作を示すフローチャートである。 本発明の実施例5において実行プログラム100Eを実行した際の情報処理装置の動作を示すフローチャートである。 本発明の実施例6によるプログラム100fのファイルイメージを示す図である。 本発明の実施例6による保護作用適用手段4の動作を示すフローチャートである。 本発明の実施例6によるプログラム100Fのファイルイメージを示す図である。 本発明の実施例5において実行プログラム100Fを実行した際の情報処理装置の動作を示すフローチャートである。
符号の説明
1 プログラム作成装置 2 エディタ
3 コンパイラ 4 保護作用適用手段
13 保護箇所開始識別子 14 保護箇所終了識別子
41 デバッガ検出有無判定コード 51 鍵計算対象箇所開始識別子
53 鍵計算ルーチン呼び出しコード 54 鍵計算対象コード
61 乱数格納領域 61F 乱数
101、103 任意のコード 102 保護対象コード
11 保護箇所検索ルーチン呼び出しコード
11e 保護箇所及び鍵計算対象箇所検索ルーチン呼び出しコード
12 保護作用解除ルーチン呼び出しコード
21 保護作用解除済み確認ルーチン呼び出しコード
31 保護作用適用ルーチン呼び出しコード
52 鍵計算対象箇所終了識別子
102A 暗号化された保護対象コード
100、100a、100b、100c、100d、100e、100f プログラム
100A、100B、100C、100D、100E、100F 実行プログラム

Claims (8)

  1. プログラムの解析から保護する対象となる保護対象コードと、
    前記保護対象コードの位置を示すコードであってコンパイラによってコンパイルされたときに実行可能なコードとなるとともに特定のパターンを表す保護箇所識別子と、
    実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として前記保護箇所識別子の特定のパターンを検索させて前記保護対象コードの前記実行時のメモリ上でのアドレス範囲を特定させるための検索コードと、
    前記検索コードにより特定された前記実行時のメモリ上でのアドレス範囲を復号させるための解除コードと、を含み、前記検索コード、前記解除コード、及び前記保護対象コードが、前記情報処理装置のメモリ上に展開されて実行されるときに、前記検索コード、前記解除コード、及び前記保護対象コードの順で実行されるように配置されている関数プログラムのソースコードに基づいて、情報処理装置にコンパイラによって実行コードを作成させ、
    前記コンパイラによるコンパイルによって作成された実行コードを対象として、情報処理装置に、前記保護箇所識別子の前記特定のパターンを検索させて前記保護対象コードを特定させ、
    情報処理装置に、前記コンパイラによるコンパイルによって作成された実行コードのうちの特定した前記保護対象コードを、該保護対象コードを暗号化した保護対象コードで置き換えさせるとともに、前記コンパイルにより作成された実行コードのコード領域を書き換え可能状態に設定させる、
    実行プログラム作成方法。
  2. 前記関数プログラムはさらに、前記解除コードを含む鍵計算対象コードの位置を示すコードであって実行可能のコードで構成され、前記特定のパターンとは異なる第2特定パターンを表す鍵計算箇所識別子と、鍵計算コードとを含み、
    前記検索コードは、さらに、実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として前記鍵計算箇所識別子の前記第2特定パターンを検索させて前記鍵計算対象コードの前記実行時のメモリ上でのアドレス範囲を特定されるものであり、
    前記鍵計算コードは、前記検索コードによりアドレス範囲が特定された前記鍵計算対象コードに基づき、前記解除コードで用いられる復号鍵を計算させるためのコードであって、前記情報処理装置のメモリ上に展開されて実行されるときに、前記検索コードの後、かつ前記解除コードより先に実行されるように配置されており、
    前記暗号化した保護対象コードは、前記保護対象コードを暗号鍵によって暗号化したものであり、
    前記コンパイラによるコンパイルによって作成された実行コードを対象として、前記処理装置に、前記第2特定パターンを検索させて前記鍵計算対象コードを特定させ、
    前記情報処理装置に、前記特定された前記鍵計算対象コードに基づき、前記暗号鍵を計算させて前記保護対象コードの暗号化に用いる、
    請求項1に記載の実行プログラム作成方法。
  3. 情報処理装置のメモリ上に展開されて実行される関数プログラムであって、
    暗号化された保護対象コードと、
    前記保護対象コードの位置を示すコードであって実行可能なコードで構成され特定のパターンを表す保護箇所識別子と、
    実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として前記保護箇所識別子の前記特定パターンを検索させて前記保護対象コードの前記実行時のメモリ上でのアドレス範囲を特定させるための検索コードと、
    前記検索コードにより特定された前記保護対象コードの前記実行時のメモリ上でのアドレス範囲を復号させるための解除コードと、
    を含み、
    前記検索コード、前記解除コード、及び前記保護対象コードは、前記情報処理装置のメモリ上に展開されて実行されるときに、前記検索コード、前記解除コード、及び前記保護対象コードの順で実行されるように配置されている、
    関数プログラム。
  4. 前記保護対象コードの前記実行時のメモリ上でのアドレス範囲を暗号化させるための適用コードを含み、
    前記提要コードは、前記情報処理装置のメモリ上に展開されて実行されるときに、前記保護対象コードの後で実行されるように配置されている、請求項3に記載の関数プログラム。
  5. 前記解除コードを含む鍵計算対象コードの位置を示すコードであって実行可能なコードで構成され前記特定のパターンとは異なる第2特定パターンを表す鍵計算箇所識別子と、鍵計算コードとを含み、
    前記検索コードは、さらに、実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として前記鍵計算箇所識別子の前記第2特定パターンを検索させて前記鍵計算対象コードの前記実行時のメモリ上でのアドレス範囲を特定され、
    前記鍵計算コードは、さらに、実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として前記鍵計算箇所識別子の前記第2特定パターンを検索させて前記鍵計算対象コードの前記実行時のメモリ上でのアドレス範囲を特定させ、
    前記鍵計算コードは、前記検索コードによりアドレス範囲が特定された前記鍵計算対象コードに基づき、前記解除コードで用いられる復号鍵を計算させるためのコードであって、前記情報処理装置のメモリ上に展開されて実行されるときに、前記検索コードの後、かつ、前記解除コードより先に実行されるように配置されている、請求項3または4に記載の関数プログラム。
  6. 関数プログラムを情報処理装置に実行させる関数プログラム実行方法であって、
    暗号化された保護対象コードと、
    前記保護対象コードの位置を示すコードであって実行可能なコードで構成され特定のパターンを表す保護箇所識別子と、
    実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として前記保護箇所識別子の前記特定のパターンを検索させて前記保護対象コードの前記実行時のメモリ上でのアドレス範囲を特定させるための検索コードと、
    前記検索コードにより特定された前記実行時のメモリ上でのアドレス範囲を復号させるための解除コードと、
    を含む関数プログラムを前記情報処理装置のメモリ上に展開させ、
    前記情報処理装置に前記展開された前記関数プログラムを記述に沿って順次実行させ、
    前記検索コードによって前記情報処理装置に、前記メモリ上に展開された前記関数プログラムの先頭アドレスを基点として、前記保護箇所識別子の特定パターンを検索させて前記保護対象コードの前記メモリ上のアドレス範囲を特定させ、
    前記解除コードによって前記情報処理装置に、前記特定された前記メモリ上のアドレス範囲を復号させ、
    前記情報処理装置に、前記暗号化が解除された保護対象コードを実行させる、
    情報処理装置の関数プログラム実行方法。
  7. 前記関数プログラムは、さらに、前記保護対象コードの前記実行時のメモリ上でのアドレス範囲を暗号化させるための適用コードを含み、
    前記情報処理装置に、前記暗号化が解除された保護対象コードを実行させた後で、前記定期用コードによって前記実行時のメモリ上でのアドレス範囲を暗号化させる、
    請求項6に記載の関数プログラム実行方法。
  8. 前記関数プログラムはさらに、前記解除コードを含む鍵計算対象コードの位置を示すコードであって実行可能なコードで構成され前記特定のパターンとは異なる第2特定パターンを表す鍵計算箇所識別子と、鍵計算コードとを含み、
    前記検索コードは、さらに、実行時にメモリ上に展開された関数プログラムの先頭アドレスを基点として、前記鍵計算箇所識別子の前記第2特定パターンを検索させて前記鍵計算対象コードの前記実行時のメモリ上でのアドレス範囲を特定させるものであり、
    前記情報処理装置に、前記検索コードの後、かつ前記解除コードより先に、前記鍵計算コードによって、前記検索コードによりアドレス範囲が特定された前記鍵計算対象コードに基づき、前記解除コードで用いられる復号鍵を計算させる請求項6または7に記載の関数プログラム実行方法。
JP2003407019A 2003-12-05 2003-12-05 実行プログラム作成方法、関数プログラム、及び関数プログラム実行方法 Expired - Fee Related JP4517636B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003407019A JP4517636B2 (ja) 2003-12-05 2003-12-05 実行プログラム作成方法、関数プログラム、及び関数プログラム実行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003407019A JP4517636B2 (ja) 2003-12-05 2003-12-05 実行プログラム作成方法、関数プログラム、及び関数プログラム実行方法

Publications (2)

Publication Number Publication Date
JP2005165919A JP2005165919A (ja) 2005-06-23
JP4517636B2 true JP4517636B2 (ja) 2010-08-04

Family

ID=34729196

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003407019A Expired - Fee Related JP4517636B2 (ja) 2003-12-05 2003-12-05 実行プログラム作成方法、関数プログラム、及び関数プログラム実行方法

Country Status (1)

Country Link
JP (1) JP4517636B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013137646A (ja) * 2011-12-28 2013-07-11 Nec System Technologies Ltd プログラム保護装置、プログラム保護方法、及びプログラム

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4770425B2 (ja) 2005-11-24 2011-09-14 富士ゼロックス株式会社 保護済み実行プログラムの作成のためのプログラム、方法及び装置
JP2008176352A (ja) * 2007-01-16 2008-07-31 Lac Co Ltd コンピュータプログラム、コンピュータ装置、及び動作制御方法
KR101405915B1 (ko) * 2007-04-26 2014-06-12 삼성전자주식회사 데이터의 암호화 저장 방법 및 암호화된 데이터의 판독방법
JP5387089B2 (ja) * 2009-03-27 2014-01-15 富士ゼロックス株式会社 プログラム及びプログラム実行装置
EP2402880A1 (en) * 2010-07-01 2012-01-04 Aladdin Europe GmbH Method and device for selectively protecting one of a plurality of methods of a class of an application written in an object-orientated language
JP5574550B2 (ja) * 2012-11-22 2014-08-20 京セラドキュメントソリューションズ株式会社 情報秘匿化方法および情報秘匿化装置
KR101434860B1 (ko) * 2013-08-16 2014-09-02 (주)잉카엔트웍스 해시를 이용한 동적코드의 무결성 검증 방법
KR101556908B1 (ko) * 2013-11-14 2015-10-02 (주)잉카엔트웍스 프로그램 보호 장치
JP6478724B2 (ja) * 2015-03-09 2019-03-06 Kddi株式会社 情報処理装置、情報処理方法、及びコンピュータプログラム

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1131131A (ja) * 1997-07-14 1999-02-02 Fuji Xerox Co Ltd サービス提供システム、認証装置及び認証プログラムを記録した媒体
JPH1139156A (ja) * 1997-07-22 1999-02-12 Fuji Xerox Co Ltd 暗号化データ復号装置
JP2001175466A (ja) * 1999-12-21 2001-06-29 Fuji Xerox Co Ltd 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1131131A (ja) * 1997-07-14 1999-02-02 Fuji Xerox Co Ltd サービス提供システム、認証装置及び認証プログラムを記録した媒体
JPH1139156A (ja) * 1997-07-22 1999-02-12 Fuji Xerox Co Ltd 暗号化データ復号装置
JP2001175466A (ja) * 1999-12-21 2001-06-29 Fuji Xerox Co Ltd 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013137646A (ja) * 2011-12-28 2013-07-11 Nec System Technologies Ltd プログラム保護装置、プログラム保護方法、及びプログラム

Also Published As

Publication number Publication date
JP2005165919A (ja) 2005-06-23

Similar Documents

Publication Publication Date Title
JP4770425B2 (ja) 保護済み実行プログラムの作成のためのプログラム、方法及び装置
CN101084478B (zh) 为计算机程序代码加水印
KR101920597B1 (ko) 동적 코드 추출 기반 자동 분석 방지 우회 및 코드 로직 해석 장치
KR102433011B1 (ko) Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체
US20180373848A1 (en) A build system with plugins for encryption of application components
JP4517636B2 (ja) 実行プログラム作成方法、関数プログラム、及び関数プログラム実行方法
JP2003280754A (ja) 隠蔽化ソースプログラム、ソースプログラム変換方法及び装置並びにソース変換プログラム
CN106228041B (zh) 一种针对Android预编译的代码保护方法
JP4514473B2 (ja) コンピュータシステム、中央装置及びプログラム実行方法
JP2021515314A (ja) コンパイルデバイス及び方法
JP2003280755A (ja) 自己復元型プログラム、プログラム生成方法及び装置、情報処理装置並びにプログラム
KR101823226B1 (ko) 코드 보호 방법 및 시스템
CN108021790B (zh) 文件保护方法、装置、计算设备及计算机存储介质
US20080301654A1 (en) Program processing apparatus, program processing method and computer readable information recording medium
CN113094664B (zh) 一种防止安卓应用程序被反编译的系统
US6931634B2 (en) Encrypted compiler
CN110147238B (zh) 一种程序编译方法、装置及系统
CN113221077A (zh) 基于spring容器的class文件加密方法及设备
JP2007172526A (ja) 情報処理システム、情報処理方法
CN111651781A (zh) 日志内容保护方法、装置、计算机设备和存储介质
JP2003050640A (ja) ソフトウェア複製防止方法
JP3949105B2 (ja) 「リネーム」原理を使用してその無許可使用に対してソフトウェアを保護する方法
KR100940347B1 (ko) 소위 변수 원리를 사용하여 소프트웨어를 불법사용으로부터 보호하는 방법
JP2004265037A (ja) コンピュータプログラムの編集システム及びその方法
US9965621B2 (en) Program protection device

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061127

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100119

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100317

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100406

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100409

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

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

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

Free format text: PAYMENT UNTIL: 20130528

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4517636

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

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees