JP4042280B2 - 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体 - Google Patents
実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体 Download PDFInfo
- Publication number
- JP4042280B2 JP4042280B2 JP36204499A JP36204499A JP4042280B2 JP 4042280 B2 JP4042280 B2 JP 4042280B2 JP 36204499 A JP36204499 A JP 36204499A JP 36204499 A JP36204499 A JP 36204499A JP 4042280 B2 JP4042280 B2 JP 4042280B2
- Authority
- JP
- Japan
- Prior art keywords
- code
- execution
- encoding target
- target code
- program
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44557—Code layout in executable memory
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
- G06F21/126—Interacting with the operating system
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Stored Programmes (AREA)
Description
【発明の属する技術分野】
本発明は、コンピュータ・システム上で実行されるプログラム・コードをメモリにロードするときにプログラム中のアドレス情報を再配置する再配置技術に係り、特に、一部符号化したコード部分を含み且つ実行時までは復号化しないように構成された実行プログラム・コードを実行時に最適に再配置するための再配置技術に関する。
【0002】
更に詳しくは、本発明は、符号化したコード部分を含み且つ実行時まで復号化しないように構成されたプログラムを、汎用コンパイラを用いても生成することができる再配置技術に関する。
【0003】
【従来の技術】
昨今の技術革新に伴い、ワークステーション、汎用パーソナル・コンピュータ(PC)など各種情報処理機器が開発され市販されている。かかる情報処理機器の基本構造は、プロセッサと主メモリである。すなわち、プロセッサは、主メモリにロードしたプログラム・コードを実行し、その作業データを主メモリの作業領域に書き込むようになっている。プロセッサは、一般に、オペレーティング・システム(OS)の制御下で各種プログラム・コードを実行する。
【0004】
プログラム・コードを主メモリ上にロードする場所すなわちメモリ・アドレスを決める方式の1つとして、ハードウェアやプロセスやジョブなどのある単位の中でメモリ・アドレスを一意に決定する「絶対アドレス方式」がある。絶対アドレス方式を利用するプログラムが起動したとき、予定されたアドレスに当該プログラムを割り当てられないという状況が発生すると、プログラム中のアドレス情報を書き換える作業すなわち再配置(リロケーション)が必要となる。また、割り当てるアドレスを予め決めることなく、プログラムを起動する度に再配置を行うことを前提としたオペレーティング・システムもある。
【0005】
一方、メモリ・アドレスの指定方式として、メモリ・アドレスの指定を現在実行している命令のアドレスに対する差分によって表現する「相対アドレス方式」もある(PC相対アドレス等とも呼ばれる)。相対アドレス方式を利用することにより、特定のアドレスに実行制御を移行したり、特定のアドレスに格納されたメモリ内容をアクセスしたりするために絶対アドレスを指定する必要が無くなる。したがって、相対アドレス方式によって表現されたプログラム・コードは、どのメモリ・アドレスに割り当てても、再配置処理を行うことなく実行可能となり、原則として再配置処理を不要にすることができる。つまり、起動時の処理を軽減することが可能となる。このため、相対アドレスによってプログラム・コードを表現することを前提としたオペレーティング・システムもある。
【0006】
ところで、最近では、プログラムの格納に必要な記憶容量を小さくするためにプログラム・コードを圧縮したり、解析や改竄による不正利用を防止するためにプログラム・コードを暗号化したり、あるいはその他の目的のために、プログラム・コードを符号化することが多くなってきた。
【0007】
プログラム全体をまとめて符号化する場合には、プログラムの実行に際しては、プログラム・コードを一旦復号化した後にオペレーティング・システムのローダに処理を委ねるようにすれば、プログラムの正常な実行を担保することができた。
【0008】
他方、プログラム全体ではなく一部にのみ符号化を適用する手法もある。例えば、プログラム・サイズが巨大な場合、プログラム全体を圧縮してしまうと、起動時には伸長処理のために長時間を要してしまう。このため、プログラムを部分的にしか圧縮せず、起動後に必要に応じて適宜伸長して実行するようにしている。このようにすれば、プログラム全体を圧縮する方式に比し、プログラムの起動が速くなる。また、圧縮部分を実行する必要がない場合には伸長処理も不要になるので、全体の処理時間も短縮されるという利点がある。あるいは、プログラムを部分的に暗号化し、且つ、実際に実行する必要があるまでは暗号化部分を復号化しないように構成することで、解析や改竄によるプログラムの不正利用を好適に防止することもできる。
【0009】
しかしながら、オペレーティング・システムのタイプによっては、以下の理由により、実行プログラム・コード部分を実行時に書き換えることをできないようにしたものがある。
【0010】
1.近年、コンピュータ・ウィルスが大きな社会問題になっている。コンピュータ・ウィルスの種類によっては、プログラムの実行時にプログラム・コードを書き換えることによって感染するものがある。このようなタイプのウィルスの感染を未然に防止するために、プログラム・コードの実行時の書き換えを禁止する。
【0011】
2.ある単一のプログラムを複数回起動する場合、メモリ等のコンピュータ資源の利用効率の点から考えると、単一のプログラム・コードを個々に起動されたプログラムから共有するように構成した方が望ましい。プログラムが実行時に書き換えられることを前提とすると、例えば、あるプログラムが書き換え処理を実行している最中に他のプログラムが書き換え処理を実行し始めることによってプログラムの不整合が発生するなど、不整合を防止するための機構が非常に複雑になり、結果としてオペレーティング・システムの処理効率を低下させる要因となる。そこで、プログラムの実行時書き換えを禁止すれば、このような不整合に対する対象を行う必要がなくなり、オペレーティング・システムの機構を単純化することが可能となる。
【0012】
つまり、プログラム・コードの実行時の書き換えを禁止しているタイプのオペレーティング・システム上では、プログラムの一部分を圧縮あるいは暗号化し、実行時に適宜、伸張あるいは復号処理を行うようにプログラムを構成することができないという問題がある。
【0013】
これに対して、幾つかのオペレーティング・システムには、データ領域上に生成された命令コード列を実行するための、すなわち、メモリ領域の属性(読み取り可能、書きこみ可能、実行可能など)を変更したり、CPUのキャッシュとの整合性を保つたりするためのシステムコール関数が用意されている。Microsift社のオペレーティング・システム”Windows”がサポートするWin32 APIではVirtualProtect()やFlushInstructionCache()、米アップル・コンピュータ社のオペレーティング・システム”MacOS”ではMakeDataExecutable()、また、UNIX系のオペレーティング・システム”Linux”ではmprotect()が、システムコール関数である。これらの関数を利用することで、データ領域の命令コード列を実行させることが可能になる。データ領域は実行時に自由に書き換え可能であるので、符号化されたコード領域を復号するための領域として、プログラム・コード領域とは異なるデータ・メモリ領域に確保し、その領域内で復号処理を実行し、復号したコードもその領域内で実行すれば良いと考えられる。
【0014】
しかしながら、符号化対象のコード領域内に、符号化対象のコード領域外の特定のアドレスに実行制御を移行したり、特定のアドレスに格納されたメモリ内容をアクセスしたりする命令が存在している場合、その命令コードのアドレス情報は、呼び出し先あるいはメモリの参照先との相対値(差分)で表現されるため、符号化対象のコード領域のアドレスが変化すると、当然ながら相対アドレス情報も変化するため、そのままでは正常に実行できないという問題がある。
【0015】
以上を要言すれば、符号化したコード部分を含み且つ実行の必要があるまで復号化しないように構成された実行プログラムにおいて、符号化対象のコード領域内に、符号化対象のコード領域外の特定のアドレスに実行制御を移行したり、特定のアドレスに格納されたメモリ内容をアクセスしたりする命令が存在している場合、プログラム・コード領域の書き換えを禁止したオペレーティング・システム上で好適に実行する技術は、これまでに開示された例が見当たらない。
【0016】
さらに、このような機能を持つプログラムを実現できたとしても、従来の汎用コンパイラでは生成することができない。言い換えれば、このようなプログラムを生成するためには、特殊なコンパイラをデザインしなければならず、多大なコストがかかってしまう。
【0017】
【発明が解決しようとする課題】
本発明の目的は、符号化したコード部分を含み且つ実行の必要があるまで復号化しないように構成された実行プログラムを、プログラム・コード領域の書き換えを禁止したオペレーティング・システム上であっても、好適に実行することができる技術を提供することにある。
【0018】
本発明の更なる目的は、プログラム・コード領域の書き換えを禁止したオペレーティング・システム上において、プログラムの一部を符号化しておき、プログラムの起動後に符号化コード部分を復号化して正常に実行することができるプログラムを提供することにある。
【0019】
本発明の更なる目的は、符号化したコード部分を含み且つ実行の必要があるまで復号化しないように構成されたプログラムを、汎用コンパイラを用いても生成することができる技術を提供することにある。
【0020】
【課題を解決するための手段】
本発明は、上記課題を参酌してなされたものであり、その第1の側面は、プログラム・コードの一部に符号化を予定された符号化対象コードを含むタイプの実行プログラムを生成する方法であって、
(a)符号化対象コードを符号化するステップと、
(b)符号化された符号化対象コードを復号化するためのメモリ領域を確保し、該確保した領域に符号化された符号化対象コードを復号化する復号化実施コード部分を実行プログラムに付与するステップ、
(c)復号化された符号化対象コードに対して再配置処理を行う再配置実施コード部分を実行プログラムに付与するステップと、
を具備することを特徴とする実行プログラムの生成方法である。
【0021】
また、本発明の第2の側面は、プログラム・コードの一部に符号化を予定された符号化対象コードを含むタイプの実行プログラムを生成する方法であって、
(a)符号化対象コードの再配置情報を生成するステップと、
(b)符号化対象コードを符号化するステップと、
(c)符号化された符号化対象コードを復号化するためのメモリ領域を確保し、該確保した領域に符号化された符号化対象コードを復号化する復号実施コード部分を実行プログラムに付与するステップ、
(d)復号化された符号化対象コードに対して前記生成された再配置情報を用いて再配置処理を行う再配置実施コード部分を実行プログラムに付与するステップと、
を具備することを特徴とする実行プログラムの生成方法である。
【0022】
本発明の第1あるいは第2の側面に係る実行プログラムの生成方法において、前記符号化は圧縮処理であり、復号化は圧縮されたデータの伸長処理であってもよい。あるいは、前記符号化は暗号化処理であり、復号化は暗号化データの復号処理であってもよい。
【0023】
また、本発明の第3の側面は、実行コード・セクションの一部に圧縮処理の適用を予定された符号化対象コードを含むタイプの実行プログラムを生成する方法であって、
(a)符号化対象コードを圧縮するステップと、
(b)符号化対象コードの圧縮により空きができた領域の分だけ、実行コード・セクション以降のセクションの領域を前につめるステップと、
(c)圧縮された符号化対象コードを伸張するためのメモリ領域を確保し、該確保した領域に圧縮された符号化対象コードを伸長処理する復号実施コード部分を実行プログラムに付与するステップと、
(d)復号化された符号化対象コードに対して再配置処理を行う再配置実施コード部分を実行コード・セクションに挿入するステップと、
を具備することを特徴とする実行プログラムの生成方法である。
【0024】
また、本発明の第4の側面は、実行コード・セクションの一部に圧縮処理の適用を予定された符号化対象コードを含むタイプの実行プログラムを生成する方法であって、
(a)符号化対象コードの再配置情報を生成するステップと、
(b)符号化対象コードを圧縮するステップと、
(c)符号化対象コードの圧縮により空きができた領域の分だけ、実行コード・セクション以降のセクションの領域を前につめるステップと、
(d)圧縮された符号化対象コードを伸張するためのメモリ領域を確保し、該確保した領域に圧縮された符号化対象コードを伸長処理する復号実施コード部分を実行プログラムに付与するステップと、
(e)復号化された符号化対象コードに対して前記生成された再配置情報を用いて再配置処理を行う再配置実施コード部分を実行コード・セクションに挿入するステップと、
を含むことを特徴とする実行プログラムの生成方法である。
【0025】
本発明の第1、第2、第3、及び第4の各側面に係る実行プログラムの生成方法において、前記復号実施コード部分と前記再配置実施コード部分は、実行プログラムをメモリにロードした後符号化対象コードを最初に実行するときに、符号化対象コードに適用されるようにしてもよい。
【0026】
また、本発明の第5の側面は、プログラム・コードの一部に符号化を予定された符号化対象コードを含むタイプの実行プログラムを生成する装置であって、
(a)コーディングされた高級言語形式のソース・プログラム・コードをオブジェクト・プログラム・コードに変換するためのコンパイラと、
(b)コーディングされたプログラム・コード中で、符号化すべき範囲を特定するための符号化対象コード検出手段と、
(c)前記符号化対象コード検出手段によって特定された符号化対象範囲のコードを符号化するための符号化処理手段と、
(d)符号化された符号化対象コードを復号化するためのメモリ領域を確保し、該確保したメモリ領域に符号化された符号化対象コードを復号化する復号処理手段を実行プログラム中に与えるための復号処理付与手段と、
(e)復号化された符号化対象コードに関するアドレス情報を再配置するための再配置処理手段を実行プログラム中に与えるための再配置処理付与手段と、
を具備することを特徴とする実行プログラムの生成装置である。
【0027】
また、本発明の第6の側面は、プログラム・コードの一部に符号化を予定された符号化対象コードを含むタイプの実行プログラムを生成する装置であって、
(a)コーディングされた高級言語形式のソース・プログラム・コードをオブジェクト・プログラム・コードに変換するためのコンパイラと、
(b)コーディングされたプログラム・コード中で、符号化すべき範囲を特定するための符号化対象コード検出手段と、
(c)前記符号化対象コード検出手段によって特定された符号化対象範囲のコードに関するアドレス情報を再配置するために必要な再配置情報を生成する再配置情報生成手段と、
(d)前記符号化対象コード検出手段によって特定された符号化対象範囲のコードを符号化するための符号化処理手段と、
(e)符号化された符号化対象コードを復号化するためのメモリ領域を確保し、該確保したメモリ領域に符号化された符号化対象コードを復号化する復号処理手段を実行プログラム中に与えるための復号処理付与手段と、
(f)復号化された符号化対象コードに関するアドレス情報を前記生成された再配置情報に基づいて再配置するための再配置処理手段を実行プログラム中に与えるための再配置処理付与手段と、
を具備することを特徴とする実行プログラムの生成装置である。
【0028】
本発明の第5及び第6の各側面に係る実行プログラムの生成装置において、前記符号化は圧縮処理であり、復号化は圧縮されたデータの伸長処理であってもよい。あるいは、前記符号化は暗号化処理であり、復号化は暗号化データの復号処理であってもよい。
【0029】
また、前記復号化処理手段と前記再配置処理手段は、実行プログラムをメモリにロードした後符号化対象コードを最初に実行するときに、符号化対象コードに適用されるようにしてもよい。
【0030】
また、本発明の第7の側面に係る側面は、プログラム・コードの一部に符号化された符号化対象コードを含むタイプの実行プログラムを実行する方法であって、
(a)実行プログラムをメモリ空間上に割り付けるステップと、
(b)メモリ・ロードされた実行プログラムを実行するステップと、
(c)符号化対象コードを実行する前に、符号化された符号化対象コードを符号化するメモリ空間を確保し、該確保したメモリ空間に符号化された符号化対象コードを復号化するステップと、
(d)復号化された符号化対象コードに対して再配置処理を行うステップと、
(e)復号化された符号化対象コードを実行するステップと、
を具備することを特徴とする実行プログラムの実行方法である。
【0031】
本発明の第7の側面に係る実行プログラムの実行方法において、復号化された符号化対象コードを実行する前記ステップ(e)の終了後に、さらに、
(f)復号化された符号化対象コードを含む予め確保されたメモリ空間を破棄もしくは解放するステップ
を備えていてもよい。
【0032】
また、前記符号化は圧縮処理であり、復号化は圧縮されたデータの伸長処理であってもよい。あるいは、前記符号化は暗号化処理であり、復号化は暗号化データの復号処理であってもよい。
【0033】
また、実行プログラムは、符号化対象コードをメモリ・ロードした後既に呼び出されたことがあるか否かを示す復号実施フラグを含み、
前記復号実施フラグの設定に応じて前記(c)復号化するステップと前記(d)再配置処理するステップを実行するようにしてもよい。
【0034】
また、本発明の第8の側面は、コンピュータ・システム上で実行可能な実行プログラムをコンピュータ可読形式で格納したコンピュータ可読プログラム記憶媒体であって、前記実行プログラムは、
(a)一部に符号化された符号化対象コードを含む実行コードと、
(b)符号化された符号化対象コードを復号化するためメモリ領域を確保し、該確保したメモリ領域に符号化された符号化対象コードを復号化する復号処理を行うよう記述された、前記コンピュータ・システム上で実行可能なプログラム部分と、
(c)復号化された符号化対象コードに対して再配置処理を行うよう記述された、前記コンピュータ・システム上で実行可能なプログラム部分と、
を具備することを特徴とするコンピュータ可読プログラム記憶媒体である。
【0035】
また、本発明の第9の側面は、コンピュータ・システム上で実行可能な実行プログラムをコンピュータ可読形式で格納したコンピュータ可読プログラム記憶媒体であって、前記実行プログラムは、
(a)一部に符号化された符号化対象コードを含む実行コードと、
(b)符号化対象コードに対する再配置情報と、
(c)符号化された符号化対象コードを復号化するためメモリ領域を確保し、該確保したメモリ領域に符号化された符号化対象コードを復号化する復号処理を行うよう記述された、前記コンピュータ・システム上で実行可能なプログラム部分と、
(d)復号化された符号化対象コードに対して前記再配置情報に基づいて再配置処理を行うよう記述された、前記コンピュータ・システム上で実行可能なプログラム部分と、
を具備することを特徴とするコンピュータ可読プログラム記憶媒体である。
【0036】
【作用】
本発明を実装した実行プログラムは、符号化した符号化対象コードと、それ以外の符号化されていないコードとで構成される。
【0037】
実行プログラムは、符号化対象コードを実行する直前に、符号化対象コードを復号化するとともに、符号化対象コードについての再配置を実施するようにデザインされている。これは、符号化対象コードを復号化するための「復号化関数」と、再配置を実施する「再配置実施関数」とを、実行プログラム内に装備することによって実現される。
【0038】
また、再配置処理を効率的に実行するために、実行プログラムを符号化するときに、予め符号化対象コードに関する再配置情報を生成し、実行プログラムに付与しても良い。
【0039】
実行プログラムを起動した直後は、符号化対象コードに対する復号処理は行わない。そして、プログラムの実行が進み、符号化対象コードを実行すべき段階になったところで、まず符号化対象コードを復号するための領域をプログラム・コード領域ではなくデータ・メモリ領域内に確保し、次いで、その領域内で符号化対象コードの復号化を行い、当該コード部分の再配置を行う。このような手順を経る結果として、プログラムを正常に実行することができる。
【0040】
なお、これまでの説明では、プログラム・コード領域の書き換えを禁止しているタイプのオペレーティング・システム上で、符号化されたコード領域を実行時に復号化する前提で説明をしてきたが、当然ながら本発明はプログラム・コード領域の書き換えを許可しているタイプのオペレーティング・システム上でも実現可能である。その場合には、データ領域内でプログラム・コードを復号して実行するので、解析や改竄によるプログラムの不正利用に対してより好適に防止するという効果を奏する。
【0041】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【0042】
【発明の実施の形態】
本発明を実現したプログラム・コードは、例えば、所定のオペレーティング・システムをインストールした汎用コンピュータ・システム上に実行可能である。汎用コンピュータ・システムは、一般に、プログラム・コードを実行するプロセッサと、プログラム・コードをロードしたり作業データを一時格納するためのメモリと、ディスプレイやキーボード/マウスなどのユーザ入出力装置と、プログラム・ファイルやデータ・ファイルなどを不揮発的に保管するハード・ディスク・ドライブなどの外部記憶装置を含んでいる。但し、コンピュータ・システムの構成自体は本発明の要旨を構成しないので、この明細書ではこれ以上説明しない。
【0043】
以下、本発明を実現した実行プログラム・コードやコンピュータ・システム上における該プログラム・コードの動作特性などについて、図面を参照しながら詳解する。
【0044】
《第1の実施例》
実行ファイルを圧縮する場合、通常は、ファイル全体をまとめて圧縮する。しかし、サイズは大きいが少ない頻度でしか実行されないルーチンを含むようなプログラムの場合には、かかるルーチンのみを部分的に圧縮して、実行時にのみ該ルーチン部分を復号化して利用するような方式を採用する。このような方式によれば、ルーチンを実行しないときには復号化作業が必要でなくなるため、無駄な処理を省略することができる。また、データを初めて参照するときに復号化作業を行うようにしておくことで、少ない頻度でしか参照されない膨大な量のデータを持つプログラムについても同様の方式を採用することができる。
【0045】
ここで述べる第1の実施例は、実行プログラムを部分的に圧縮する場合の例であり、実行プログラムのコンパイル処理のために汎用のコンパイラを利用することができる。
【0046】
図1には、第1の実施例を適用する実行プログラムのコード・イメージを概念的に示している。
【0047】
同図に示すように、実行プログラムは、複数のセクションから構成されるが、本発明を実現するためには、少なくとも、実行コードを含む実行コード・セクションを含んでいる。
【0048】
また、本実施例の実行プログラムは、実行ファイル情報と、データ・セクションも備えている。
【0049】
実行ファイル情報は、該実行プログラムに関するファイル情報の集まりを格納したセクションであり、プログラムの先頭に配置されている。この実行ファイル情報の中には、実行プログラムの先頭がロードされるべきアドレス(すなわちコンパイル時に前提としたベース・アドレス)が含まれる。図1の例では、ベース・アドレスが16進数表記で0x4000に割り当てられている。
【0050】
また、実行ファイル情報は、このプログラムに含まれる実行コード・セクションやデータ・セクションなどの各セクションに関する、記録されているファイル内の位置、大きさ、メモリに割り付ける時のベース・アドレスからのオフセット、書き込み可能であるか実行可能であるかなどの属性などの情報も保持している。
【0051】
データ・セクションは、静的に記憶領域が確保されているデータを記憶するための領域である。
【0052】
実行コード・セクションのコードの中には、実行プログラム内における他の情報の場所を参照するための情報が相対アドレス情報として含まれている。図1の例では、ベース・アドレスからの相対アドレスが0x14Cの命令(すなわち、ベース・アドレスが0x4000であれば、0x414C番地にロードされる命令)にデータ・セクションの絶対アドレス0x44A8のデータを読み込む命令が存在しているが、これはロード命令の存在するアドレス0x414Cと参照先メモリのアドレス0x44Aとの差分0x44A−0x414C=0x35Cを相対アドレス情報として含んでいる。0x414C番地には、命令の種別であるロードを意味するオペコードが置かれ、0x414D番地以降にこの相対アドレス情報が配置されている。
【0053】
このように相対アドレス情報で表現されているプログラムは、プログラム全体が異なるアドレスにロードされても、例えば、図1に示すような実行プログラムの場合、ベース・アドレスが0x4000ではなく0x5000であっても、参照元と参照先の相対位置は不変なので、そのままプログラムを実行することが可能である。したがって、オペレーティング・システムは、他のプログラムが既に利用しているなど、何らかの都合でベース・アドレス0x4000が使用できない場合は、他のアドレス領域、例えば0x5000などを割り当てても、そのままプログラム・コードをロードして実行することができる。
【0054】
しかし、コードの一部分のみを別のアドレスに割り当てた場合には、そのコード部分に含まれる相対アドレス情報を修正しなければ、コードを正常に実行することができない。例えば、符号化されたコード領域を復号するための領域として、プログラム・コード領域とは異なるデータ・メモリ領域を割り当てた場合などである。
【0055】
本発明ではこれを解決することで、部分的に符号化されたプログラム・コードを正常に実行する技術を提供することができる。以下、本実施例について詳細に説明する。
【0056】
図2には、本発明である実行プログラムを作成するための処理手順を、フローチャートの形式で図解している。以下、各ステップについて説明する。
【0057】
まず、実行コード・セクションに置かれるコードの作成すなわちコーディングを行う(ステップ100)。実行コード中には、符号化対象コードと、符号化された符号化対象コードを復元するための復号実施コードと、符号化対象コードの再配置を実行するための再配置実施コードが含まれる。再配置実施コードには、再配置情報を記憶するための領域が含まれる。
【0058】
復号実施コードと再配置実施コードを関数という形で作成してもよい。また、これらの関数を、予め作成しておいたライブラリという形式で提供することも可能である。但し、復号実施コードを提供する関数(仮に「復号関数」と呼ぶ)は、復号を実施する範囲(すなわち符号化対象コードの範囲)に関する情報を関数呼び出しのときに受け取るようにする必要がある。また、再配置実施コードを提供する関数(仮に「再配置関数」と呼ぶ)は、符号化対象コードを復号化した後に再配置を実施するときに、符号化対象コードについての再配置情報を参照する必要がある。このため、再配置情報を、その情報へのポインタを渡すなどの方法で、関数の呼び出し時に指定しておかなければならない。
【0059】
符号化対象コードは、サイズ削減の目的(前述)により、後に圧縮などの符号化処理を施すことが予定されているコード部分である。本発明を実現する上で、符号化を施すべき符号化対象コードの範囲を決定する方法は特に限定されない。但し、本実施例では、符号化対象コードを実行コード・セクションの最後に置くようにしている。セクションの最後に置く理由は、実行ファイルを小さなサイズにするためである。実行コードをファイル上に記録するときには、圧縮によってコードを小さくした分だけコードをつめて書き込む。圧縮によって空いた空間をセクションの境界に配置することによって、セクション単位でつめることができる。すなわち、セクションの途中でつめる場合に比べて、プログラムの書き替えが最小限に済む。
【0060】
ソース・ファイル上で行った関数定義の順序関係を実行コード上でも維持するタイプのコンパイラでは、符号化対象コードを持つ関数の定義をソース・ファイルの末尾で行うことで、符号化対象コードを実行コード・セクションの最後に置くことができる。これ以外のタイプのコンパイラに関しては、コードの順序関係を変更するような最適化処理を抑止するように設定しなければならないであろう。
【0061】
また、実行プログラムをロード後初めて符号化対象コードを実行する前には、復号関数と再配置関数を実行するようにする。この具体的な方法としては、復号が既に実施されたか否かを示す復号実施フラグを実行プログラム中に用意しておくことが挙げられる。符号化対象コードが実行される前に、この復号実施フラグを参照して、未だ復号されていない場合にのみ、復号関数と再配置関数を呼び出すようにする。復号実施フラグの初期状態は、復号されていないことを示す状態にすべきである。
【0062】
上記のようにしてプログラムが作成できたら(ステップ100)、次いで、実行可能なコードにコンパイルする(ステップ200)。コンパイル処理は、汎用のコンパイラをそのまま利用することができる。コンパイル処理は従来技術でよいので、本明細書ではこれ以上説明しない。最後に、再配置情報の生成と符号化処理を行う(ステップ300)。
【0063】
図3には、図2のステップ300において実行される処理手順の詳細をフローチャートの形式で示している。以下、各ステップについて詳解する。
【0064】
まず、符号化対象コードの範囲を取得する(ステップ301)。第1の実施例では、符号化対象コードは実行コード・セクションの末尾になる(上述)。
【0065】
次に、符号化対象コードの範囲内の命令に対する再配置情報を生成する。この具体的な方法は、符号化対象コードの先頭から命令コードを1つずつ読み出してその種別を判定し(ステップ302)、その命令コードが、符号化対象コード範囲外に対する相対アドレス情報を含むかどうかを判定する(ステップ303)。そのような相対アドレス情報を含む場合には、その相対アドレス情報についての再配置情報を生成して、予め確保されているデータ・セクション内の再配置情報の記憶領域に格納する(ステップ304)。言い換えれば、相対アドレス情報を含むが、その参照先が符号化対象コード範囲内である場合には、再配置情報は生成されない。
【0066】
再配置情報は、相対アドレス情報を含むアドレス位置の符号化対象コードの先頭からのオフセットで良い。例えば、符号化対象コードが0x4140から始まっており、相対アドレス情報が0x414Dに含まれる場合は、そのオフセットである0x000Dが再配置情報となる。そして、全ての符号化対象コードの命令コードについて上記と同様の処理を繰り返し行う(ステップ305)。
【0067】
全ての符号化対象コードの命令コードについてステップ304における再配置情報の生成処理が終了したら、符号化対象コードを圧縮符号化する(ステップ306)。
【0068】
圧縮符号化を完了した時点では、コードが圧縮された分だけ領域に空きができるため、ファイルに記録するときにはサイズが小さくなるように、実行コード・セクション以降のセクションを、空きができた領域の大きさだけ前につめて記録する(ステップ307)。
【0069】
ステップ307によって、セクションが保持される場所がずれるため、実行ファイル情報の一部として記録されている実行ファイル内のセクション開始位置を、前につめた新しい値に書き換えて(ステップ308)、本処理ルーチン全体を終了する。
【0070】
図3で示した処理手順に従うことによって、本実施例に係る実行プログラム・・ファイルが好適に作成される。図4には、作成された実行プログラム・ファイルの構成を模式的に図解しているが、該ファイルは、実行コード・セクションと、データ・セクションとを含んでいる。
【0071】
データ・セクションには、前述の処理によって生成された、符号化対象コードに対する再配置情報が保管されている。
【0072】
また、実行コード・セクションには、圧縮符号化された符号化対象コードと、復号実施コードを含む復号関数と、再配置実施コードを含む再配置関数とが含まれており、符号化対象コードは当該コード・セクションの末尾に配置されている。実行プログラムは、符号化対象コードを実行する前に復号関数と再配置関数を実行するように構成されている。
【0073】
また、本実施例のデータ・セクション内には、符号化対象コードが既に復号されているか否かを示す復号実施フラグが用意されている。
【0074】
本実施例では、ステップ302からステップ305において、符号化対象コードの命令を逐一解析して、相対アドレスを含むかどうかを判定していた。但し、高級言語からマシン・コードに変換する通常のコンパイラでは、リンカと呼ばれる処理モジュールがこのアドレス情報の解決を行うように構成されており、リンカ・モジュールへ渡される中間ファイルには、この解決すべきアドレス情報を含むのが一般的である。そこで、符号化対象コードの命令を逐一解析する代わりに、この中間ファイルを解析して、再配置情報を生成するように構成しても良い。
【0075】
さらに、本実施例では、汎用のコンパイラの後処理として、再配置情報の修正と符号化対象コードの圧縮を行う実施例を示した。しかし、コンパイラに同様の機能を組み込み、コンパイル作業と同時に本実施例と同様の構成のプログラムを生成することも可能である。この場合には、コンパイル作業で再配置情報を作成する時に、符号化対象コードに含まれるか判定することで、最終的な再配置情報を直接作成できるので、上記の本実施例に比べて処理効率が向上するという利点を持つ。
【0076】
次いで、上述のようにして作成された実行プログラムを実行するときの処理手順について説明する。
【0077】
プログラムのローダは、実行プログラムをロードするとき、実行プログラムをロードすべきメモリ空間を確保し、該空間にプログラムをロードして実行を開始する。
【0078】
符号化対象コードを実行するときには、その前に、復号実施フラグを参照して、符号化対象コードが既に復号されているかどうかを判定する。未だ復号されていない場合には、復号関数と再配置関数が呼び出されて、符号化対象コードに対して適用される。復号関数では、まず復号する範囲を取得して、復号結果を格納可能なメモリ領域を確保し、該メモリ領域に符号化対象コードを復号する。さらに、復号化された符号化対象コードに対して、再配置関数が再配置情報を参照しながら再配置処理を行う。再配置処理は、具体的には以下のように行われる。
【0079】
(1)復号結果が格納されたメモリ領域の先頭アドレスと、符号化コードが格納されている領域の先頭アドレスの差分を計算し、その差分を再配置オフセットとする。
【0080】
(2)すべての再配置情報に対して以下の処理を行う。再配置情報に格納されているオフセットに、復号結果が格納されたメモリ領域の先頭アドレスを足し、そのアドレスに格納されている相対アドレス情報に再配置オフセットを足して、格納しなおす。再配置処理が終わったら、復号化フラグを復号されている状態に変更する。これらの処理後に、復号化された符号化対象コードを実行する。
【0081】
符号化対象コードが2回目以降に呼び出される場合は、復号されているか示す復号実施フラグを参照することによって、既に復号されていることを容易に判定することができる。このため、復号関数と再配置関数を実行せずに復号化された符号化対象コードをそのまま実行する。これ以降は、通常のプログラムの実行と同様にしてプログラムの実行は進む。
【0082】
以上の説明で、本実施例に係る実行プログラムの実行を、通常のプログラムの実行メカニズムに従って進めることが可能であることを、充分理解できるであろう。
【0083】
《第2の実施例》
上述した第1の実施例は実行プログラム・コードの一部を圧縮する場合に本発明を適用したものである。これに対し、第2の実施例は、実行プログラムを暗号化する場合に本発明を適用する実施例である。
【0084】
本実施例における実行プログラムを作成する処理手順も図2と同様である。すなわち、プログラムの中で暗号化を施すコードを考慮してプログラミングを行う(ステップ100)。
【0085】
プログラミング時に行う作業の1つとして、暗号化を施すコードである符号化対象コードを決定する。実行コードの一部を暗号化する目的は、コードに含まれるセキュリティ情報を保護することにある。符号化対象コードの復号を行う復号実行コードと、符号化対象コードの再配置を実行する再配置実行コードを実行コード・セクションに挿入しておくことで、実行プログラム・コードは、符号化対象コードの実行前に、復号化処理及び復号化された部分の再配置処理を行うように構成される。
【0086】
符号化対象コードに対して再配置処理を施すためには、符号化対象コードに対する再配置情報を参照する必要がある。再配置情報を確保する1つの方法は、第1の実施例で述べたように、データ・セクションに予め領域を確保しておくことである。また、その他の方法は、メモリにロードされる他のセクション(例えば実行コード・セクションや他の目的のセクション)に、再配置情報を確保するようにしても良い。
【0087】
上記のようにしてプログラムが出来上がったら、通常のコンパイラを用いて実行可能なコード体系にコンパイルする(ステップ200)。そして、コンパイルされたプログラムに対して、再配置情報生成と符号化の処理を行う(ステップ300)。
【0088】
ステップ300において行われる再配置情報の生成処理は、第1の実施例と同様に、図3で示したフローチャートに従って実現することができる。
【0089】
まず、符号化対象コードの範囲を取得する(ステップ301)。
【0090】
次に、符号化対象コードの範囲内の命令に対する再配置情報を生成する。この具体的な方法は、符号化対象コードの先頭から命令コードを1つずつ読み出してその種別を判定し(ステップ302)、その命令コードが、符号化対象コード範囲外に対する相対アドレス情報を含むかどうか判定して(ステップ303)、相対アドレス情報を含む場合には、その相対アドレス情報についての再配置情報を生成して、予め確保されているデータ・セクション内の再配置情報の記憶領域に格納する(ステップ304)。
【0091】
再配置情報は、相対アドレス情報を含むアドレス位置の符号化対象コードの先頭からのオフセットで良い。例えば、符号化対象コードが0x4140から始まっており、相対アドレス情報が0x414Dに含まれる場合は、そのオフセットである0x000Dが再配置情報となる。そして、全ての符号化対象コードの命令コードについて上記と同様の処理を繰り返し行う(ステップ305)。
【0092】
全ての符号化対象コードの命令コードについてステップ304における再配置情報の生成処理が終了したら、符号化対象コードを暗号化する(ステップ306)。但し、コードを圧縮する第1の実施例とは相違し、暗号化によってコードのサイズは小さくならないので、ステップ307及び308は実行しない。
【0093】
図5には、ステップ300において行われる再配置情報生成処理が異なる処理をした場合に生成された実行プログラムのファイルの構成を模式的に図解している。
【0094】
この例では、符号化対象コードに対する再配置情報を記述した再配置情報を格納する領域として、データ・セクション内ではなく、専用に設けた再配置情報セクションの中に確保するようになっている例である。したがって、該実行ファイルは、実行ファイル情報と、実行コード・セクションと、データ・セクションと、符号化対象コードに対する再配置情報を記述した再配置情報セクションとで構成されることになる。
【0095】
実行コード・セクションには、暗号化された符号化対象コード、符号化対象コードを実行する前に復号化するコードを格納するメモリ領域を確保して暗号化コードを復号する復号実施コード、及び、復号された符号化対象コードに対して再配置を行う再配置実施コードが含まれている。また、符号化対象コードに関する再配置情報は、データ・セクション内に確保された領域、若しくは再配置情報セクションに格納される。
【0096】
次に、本実施例に係る実行プログラムを実行する様子について説明する。
【0097】
プログラムのローダは、実行プログラムをロードするためのメモリ領域を確保し、該領域にプログラムをロードする。
【0098】
プログラムがロードされた後に、プログラムは実行に移る。符号化対象コードの部分を実行する前に、復号実行コードを適用することで復号コードを格納するためのメモリ領域を確保し、その領域に符号化対象コードを復号して、さらにその後に、復号した符号化対象コードに関する再配置情報を参照して、復号した符号化対象コードについての再配置処理を行う。
【0099】
また、復号したコードを実行し、実行後にコードを破棄し、確保したメモリ領域を解放するように構成してもよい。その場合には、実行コード中に復号されたコードが格納されたメモリ領域をクリアして解放するための破棄実行コードを設ける必要がある。復号されたコードを破棄することにより、コードのセキュリティをより強力に保護することができる。
【0100】
以上の処理手順に従えば、通常のプログラム実行メカニズムの上で、本実施例に係る実行プログラムの実行を進めることが可能である、ということを充分理解できるであろう。
【0101】
図6には、第1又は第2の実施例に係る実行プログラムを好適に生成することができる実行プログラム生成装置100の構成を模式的に示している。
【0102】
同図に示すように、実行プログラム生成装置100は、コンパイラ11と、符号化対象コード検出手段12と、符号化処理手段13と、復号処理付与手段14と、再配置処理付与手段15とで構成される。実行プログラム生成装置100の実体は、同様の機能を実現するソフトウェア・プログラムをインストールした汎用コンピュータ・システムである。
【0103】
コンパイラ11は、コーディングされた高級言語形式のソース・プログラム・コードをオブジェクト・プログラム・コードに変換するためのものである。既に述べたように、コンパイラ11は現在普及している汎用タイプのコンパイラでもよい。
【0104】
符号化対象コード検出手段12は、コーディングされたプログラム・コード中で、符号化(すなわち圧縮又は暗号化)すべき範囲を指定するための手段である。指定方法は任意である。
【0105】
符号化処理手段13は、符号化対象コード検出手段12によって指定された符号化対象範囲のコードを符号化するためのものである。本発明を実現する上で、符号化処理手段13において採用される符号化方式、すなわち圧縮若しくは暗号化する方式自体は問わない。
【0106】
復号処理付与手段14は、符号化された符号化対象コードを、その実行前に復号化するための復号処理手段を実行プログラム中に与えるための手段である。ここで言う復号処理とは、上記実施例の復号実施コードや復号関数のことであり、符号化対象コードの実行時に復号化コードを格納するためのメモリ領域を確保してから、該書く蒸した領域に符号化コードを伸長若しくは復号化する。復号実施コードは、符号化対象コードと同様に、実行コード・セクション内に挿入される。
【0107】
再配置処理付与手段15とは、復号化された符号化対象コードに関する相対アドレス情報を再配置するための再配置処理手段を実行プログラム中に与えるための手段である。ここで言う再配置処理とは、上記実施例の再配置実施コードや再配置関数のことである。再配置処理は、符号化対象コードの実行時において、復号実施コードを適用して復号化した後に、復号化された符号化対象コードに対して適用される。
【0108】
本実施例では、汎用のコンパイラの後処理として、再配置情報の修正と符号化対象コードの圧縮又は暗号化を行うようになっている。しかし、コンパイラに同様の機能を組み込み、コンパイル作業と同時に上記の実施例と同様の構成及び作用を持つプログラムを生成することも可能である。この場合には、コンパイル作業でアドレス情報を解決するときに、符号化対象コードに含まれるか否かを判定することで再配置情報を直接作成できるので、上記の実施例よりも更に処理効率が向上するであろう。
【0109】
《第3の実施例》
次に第3の実施例について説明する。この実施例は、上述した第1および第2の実施例に係る再配置情報を用いず、実行プログラムの実行時に再配置が必要かどうかを判定し、再配置を実施するものである。第1および第2の実施例に比べると、本実施例では実行プログラムの実行効率は低下するが、実行プログラム生成装置の構成を単純化することが可能となる。ここでは、第2の実施例と同様にプログラム・コードの一部を暗号化する場合を例に挙げて説明する。
【0110】
本実施例における実行プログラムを作成する処理手順も図2と同様である。すなわち、プログラムの中で暗号化を施すコードを考慮してプログラミングを行う(ステップ100)。
【0111】
第2の実施例と同様に、プログラミング時の作業として、暗号化を施すコードである符号化対象コードを決定する。さらに、符号化対象コードの復号を行う復号実施コードと、符号化対象コードの再配置を実行する再配置実施コードを実行コード・セクションに挿入しておくことで、実行プログラム・コードは、符号化対象コードを実行する前に、復号化処理及び復号化された部分の再配置処理を行うように構成される。
【0112】
ここで、符号化対象コードに対して再配置処理を施す処理が第2の実施例とは異なる。すなわち、第2の実施例では符号化対象コードに対する再配置情報を参照する必要があったが、本実施例では、再配置処理を実施する際に再配置が必要かどうかの判定を行うように構成されている。したがって、再配置情報を格納する領域を予め確保する必要がない。
【0113】
上記のようにしてプログラムが出来上がったら、第2の実施例と同様に、通常のコンパイラを用いて実行可能なコード体系にコンパイルする(ステップ200)。
【0114】
その後、コンパイルされたプログラムに対して、再配置情報の生成と符号化の処理を行う(ステップ300)。但し、本実施例では、ステップ300では符号化対象コードを暗号化する処理のみを実施する。
【0115】
ステップ300において行われる処理は、図7にフローチャートで示すように非常に単純化される。すなわち、符号化範囲を取得して(ステップ331)、符号化対象コードを圧縮すればよい(ステップ332)。
【0116】
図8には、上述のステップ300によって生成された実行プログラムのファイルの構成を模式的に図解している。該実行プログラム・ファイルは、実行ファイル情報と、実行コード・セクションと、データ・セクションとで構成される。
【0117】
実行コード・セクションには、暗号化された符号化対象コードと、符号化対象コードを実行する前に復号化するコードを格納するメモリ領域を確保して暗号化コードを復号する復号実施コードと、復号された符号化対象コードに対して再配置を行う再配置実施コードとが含まれている。さらに、復号された実行コードを破棄する破棄実行コードも含まれている。
【0118】
次に、本実施例に係る実行プログラムを実行する様子について説明する。
【0119】
プログラムのローダは、実行プログラムをロードするためのメモリ領域を確保し、該領域にプログラムをロードする。プログラムがロードされた後に、プログラムは実行に移る。
【0120】
符号化対象コードでない場合は通常に実行される。そして、符号化対象コードの部分を実行する場合には、実行コード内に含まれた復号実施コード、再配置実施コード、破棄実行コードが実行されることで、符号化対象コードが実行される。その処理手順を図9のフローチャートに従って説明する。
【0121】
まず、復号実行コードを適用することで復号コードを格納するためのメモリ領域を確保する(ステップ401)。
【0122】
次いで、その領域に符号化対象コードを復号する(ステップ402)。さらにその後、再配置実行コードによって、復号した符号化対象コード(すなわち復号コード)に関する再配置処理を行う(ステップ403〜406)。
【0123】
まず、復号コードの命令を1つだけ取得し(ステップ403)、そのコードが符号化コード外に対する相対アドレス情報を含んでいるかどうかを判定する(ステップ404)。符号化コード外の相対アドレス情報を含んでいる場合には、相対アドレス情報の修正(再配置処理)を実施する(ステップ405)。この処理をすべての復号されたコードに対して実施する(ステップ406)。
【0124】
以上の処理が済んだら、復号コードを実行し(ステップ407)、実行を終えたら、復号コードおよび復号コードを格納したメモリ領域を破棄(あるいは解放)する(ステップ408)。
【0125】
なお、ステップ405における再配置処理をより詳しく述べると、以下のようになる。
【0126】
予め復号結果が格納されたメモリ領域の先頭アドレスと、符号化コードが格納されている領域の先頭アドレスの差分を計算し、その差分を再配置オフセットとして保持しておく(ステップ401で実施)。ステップ405では、処理している命令の相対アドレス情報に、前記再配置オフセットを足して格納しなおすという処理を実施する。
【0127】
以上説明したような処理手順に従えば、通常のプログラム実行メカニズムの上で、本実施例に係る実行プログラムの実行を進めることが可能である、ということを充分理解できるであろう。
【0128】
[追補]
以上、特定の実施例を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施例の修正や代用を成し得ることは自明である。
【0129】
本実施例では、プログラム・コード領域の書き換えを禁止しているタイプのオペレーティング・システム上で、符号化されたコード領域を実行時に復号化する前提で説明をしてきたが、当然ながら本発明はプログラム・コード領域の書き換えを許可しているタイプのオペレーティング・システム上でも実現可能である。その場合には、データ領域内でプログラム・コードを復号して実行するので、解析や改竄によるプログラムの不正利用に対してより好適に防止するという効果を奏する。
【0130】
要するに、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本発明の要旨を判断するためには、冒頭に記載した特許請求の範囲の欄を参酌すべきである。
【0131】
【発明の効果】
以上詳記したように、本発明によれば、プログラム・コードの書き換えを許さないタイプのオペレーティング・システム上で、符号化したコード部分を含み且つ実行の必要があるまで復号化しないように構成された実行プログラムを生成することができる、優れた実行プログラム再配置技術を提供することができる。
【0132】
また、本発明によれば、符号化したコード部分を含み且つ実行の必要があるまで復号化しないように構成された実行プログラムを、プログラム・コードの書き換えを許さないタイプのオペレーティング・システム上で、プログラムの起動後に符号化コード部を復号して正常に実行することができるプログラムを提供することができる。
【0133】
また、本発明によれば、符号化したコード部分を含み且つ実行の必要があるまで復号化しないように構成されたプログラムを、汎用コンパイラを用いても生成することができる、優れた実行プログラム再配置技術を提供することができる。
【図面の簡単な説明】
【図1】実行ファイルのメモリ・イメージを概念的に示した図である。
【図2】実行プログラムを作成するためのフローチャートである。
【図3】第1の実施例における再配置情報生成と符号化のための処理手順を図解したフローチャートである。
【図4】第1の実施例における実行ファイルの構成を模式的に示した図である。
【図5】第2の実施例における実行ファイルの構成を模式的に示した図である。
【図6】本発明を実現可能な実行プログラム生成装置の概念図である。
【図7】第3の実施例における再配置情報生成と符号化のための処理手順を図解したフローチャートである。
【図8】第3の実施例によって生成された実行プログラムのファイルの構成を模式的に示した図である。
【図9】第2の実施例における実行プログラムを実行する処理手順を示したフローチャートである。
【符号の説明】
11…コンパイラ
12…符号化対象コード検出手段
13…符号化処理手段
14…復号処理付与手段
15…再配置処理付与手段
100…実行プログラム生成装置
Claims (19)
- コンピュータを用いて構築される実行プログラム生成システムにおいて、実行コードを含む実行コード・セクションを含み、実行コードの少なくとも一部に符号化を予定された符号化対象コードを含むタイプの実行プログラムを生成する方法であって、
前記コンピュータが備える復号化実施コード部分付与手段が、符号化された符号化対象コードを復号化するためのメモリ領域を確保し、該確保したメモリ領域に符号化された符号化対象コードを復号化する復号化実施コード部分を実行プログラムに付与するステップと、
前記コンピュータが備える再配置実施コード部分付与手段が、符号化された符号化対象コードを復号化するための前記メモリ領域のアドレス情報に基づいて、符号化対象コードの範囲内の命令に含まれる符号化対象コード範囲外に対する相対アドレス情報についての再配置処理を行う再配置実施コード部分を実行プログラムに付与するステップと、
前記コンピュータが備える符号化手段が、実行プログラムに含まれる符号化対象コードを符号化するステップと、
を具備することを特徴とする実行プログラムの生成方法。 - コンピュータを用いて構築される実行プログラム生成システムにおいて、実行コードを含む実行コード・セクションと、静的に記憶領域が確保されているデータを記憶するためデータ・セクションを含み、実行コードの少なくとも一部に符号化を予定された符号化対象コードを含むタイプの実行プログラムを生成する方法であって、
前記コンピュータが備える復号化実施コード部分付与手段が、符号化された符号化対象コードを復号化するためのメモリ領域を確保し、該確保したメモリ領域に符号化された符号化対象コードを復号化する復号化実施コード部分を実行プログラムに付与するステップと、
前記コンピュータが備える再配置情報生成手段が、符号化対象コードの範囲内の命令に含まれる符号化対象コード範囲外に対する相対アドレス情報についての再配置情報を生成して、前記データ・セクション内に予め確保されている再配置情報の記憶領域に格納するステップと、
前記コンピュータが備える再配置実施コード部分付与手段が、前記再配置情報生成手段によって生成された再配置情報と、符号化された符号化対象コードを復号化するための前記メモリ領域のアドレス情報に基づいて、符号化対象コードの範囲内に含まれる再配置対象の相対アドレス情報についての再配置処理を行う再配置実施コード部分を実行プログラムに付与するステップと、
前記コンピュータが備える符号化手段が、実行プログラムに含まれる符号化対象コードを符号化するステップと、
を具備することを特徴とする実行プログラムの生成方法。 - 前記符号化は圧縮処理であり、復号化は圧縮されたデータの伸長処理であることを特徴とする請求項1に記載の実行プログラムの生成方法。
- 前記符号化は暗号化処理であり、復号化は暗号化データの復号処理であることを特徴とする請求項1に記載の実行プログラムの生成方法。
- 前記符号化は圧縮処理であり、
前記コンピュータが備える符号化手段が実行プログラムに含まれる符号化対象コードを符号化した際に符号化対象コードの圧縮により空きができた領域の分だけ、実行コード・セクション以降のセクションの領域を前につめるステップと、
をさらに備える、
ことを特徴とする請求項1又は2のいずれかに記載の実行プログラムの生成方法。 - 前記復号実施コード部分と前記再配置実施コード部分は、実行プログラムをメモリにロードした後符号化対象コードを最初に実行するときに、符号化対象コードに適用される、
ことを特徴とする請求項1に記載の実行プログラムの生成方法。 - 実行コードを含む実行コード・セクションを含み、実行コードの少なくとも一部に符号化を予定された符号化対象コードを含むタイプの実行プログラムを生成する装置であって、
(a)前記実行プログラムのコード中で、符号化すべき範囲を特定するための符号化対象コード検出手段と、
(b)前記符号化対象コード検出手段によって特定された符号化対象範囲のコードを符号化するための符号化処理手段と、
(c)符号化された符号化対象コードを復号化するためのメモリ領域を確保し、該確保したメモリ領域に符号化された符号化対象コードを復号化する復号実施コード部分を実行プログラムに付与するための復号処理付与手段と、
(d)符号化された符号化対象コードを復号化するための前記メモリ領域のアドレス情報に基づいて、符号化対象コードの範囲内の命令に含まれる符号化対象コード範囲外に対する相対アドレス情報を再配置するための再配置実施コード部分を実行プログラムに付与するための再配置処理付与手段と、
を具備することを特徴とする実行プログラムの生成装置。 - 実行コードを含む実行コード・セクションと、静的に記憶領域が確保されているデータを記憶するためデータ・セクションを含み、実行コードの少なくとも一部に符号化を予定された符号化対象コードを含むタイプの実行プログラムを生成する装置であって、
(a)前記実行プログラムのコード中で、符号化すべき範囲を特定するための符号化対象コード検出手段と、
(b)前記符号化対象コード検出手段によって特定された符号化対象範囲のコードを符号化するための符号化処理手段と、
(c)符号化された符号化対象コードを復号化するためのメモリ領域を確保し、該確保したメモリ領域に符号化された符号化対象コードを復号化する復号処理実施コード部分を実行プログラムに付与するための復号処理付与手段と、
(d)符号化対象コードの範囲内の命令に含まれる符号化対象コード範囲外に対する相対アドレス情報についての再配置情報を生成して、前記データ・セクション内に予め確保されている再配置情報の記憶領域に格納する再配置情報生成手段と、
(e)符号化された符号化対象コードを復号化するための前記メモリ領域のアドレス情報に基づいて、符号化対象コードの範囲内の命令に含まれる符号化対象コード範囲外に対する相対アドレス情報を再配置するための再配置実施コード部分を実行プログラムに付与するための再配置処理付与手段と、
を具備することを特徴とする実行プログラムの生成装置。 - 前記符号化は圧縮処理であり、復号化は圧縮されたデータの伸長処理である、
ことを特徴とする請求項7又は8のいずれかに記載の実行プログラムの生成装置。 - 前記符号化は暗号化処理であり、復号化は暗号化データの復号処理である、
ことを特徴とする請求項7又は8のいずれかに記載の実行プログラムの生成装置。 - 前記復号化処理手段と前記再配置処理手段は、実行プログラムをメモリにロードした後符号化対象コードを最初に実行するときに、符号化対象コードに適用される、
ことを特徴とする請求項7又は8のいずれかに記載の実行プログラムの生成装置。 - 実行コードを含む実行コード・セクションを含み、実行コードの少なくとも一部に符号化された符号化対象コードを含むタイプの実行プログラムを実行する方法であって、
(a)前記コンピュータが備えるメモリ割り付け手段が、実行プログラムをメモリ空間上に割り付けるステップと、
(b)前記コンピュータが備えるプログラム実行手段が、メモリ・ロードされた実行プログラムを実行するステップと、
(c)前記コンピュータが備える復号化手段が、符号化対象コードを実行する前に、符号化された符号化対象コードを符号化するメモリ空間を確保し、該確保したメモリ空間に符号化された符号化対象コードを復号化するステップと、
(d)前記コンピュータが備える再配置処理手段が、符号化された符号化対象コードを復号化するための前記メモリ領域のアドレス情報に基づいて、符号化対象コードの範囲内の命令に含まれる符号化対象コード範囲外に対する相対アドレス情報についての再配置処理を行うステップと、
(e)前記コンピュータが備える符号化対象コード実行手段が、復号化されるとともに再配置処理された符号化対象コードを実行するステップと、
を具備することを特徴とする実行プログラムの実行方法。 - 実行コードを含む実行コード・セクションと、静的に記憶領域が確保されているデータを記憶するためデータ・セクションを含み、実行コードの少なくとも一部に符号化された符号化対象コードを含むタイプの実行プログラムを実行する方法であって、前記プログラム・コードのデータ・セクション内には符号化対象コードの範囲内の命令に含まれる符号化対象コード範囲外に対する相対アドレス情報についての再配置情報が格納されており、
(a)前記コンピュータが備えるメモリ割り付け手段が、実行プログラムをメモリ空間上に割り付けるステップと、
(b)前記コンピュータが備えるプログラム実行手段が、メモリ・ロードされた実行プログラムを実行するステップと、
(c)前記コンピュータが備える復号化手段が、符号化対象コードを実行する前に、符号化された符号化対象コードを符号化するメモリ空間を確保し、該確保したメモリ空間に符号化された符号化対象コードを復号化するステップと、
(d)前記コンピュータが備える再配置処理手段が、前記データ・セクションに格納されている再配置情報と、符号化された符号化対象コードを復号化するための前記メモリ領域のアドレス情報に基づいて、符号化対象コードの範囲内に含まれる再配置対象の相対アドレス情報についての再配置処理を行うステップと、
(e)前記コンピュータが備える符号化対象コード実行手段が、復号化されるとともに再配置処理された符号化対象コードを実行するステップと、
を具備することを特徴とする実行プログラムの実行方法。 - 復号化された符号化対象コードを実行する前記ステップ(e)の終了後に、さらに、
(f)前記コンピュータが備える手段が、復号化された符号化対象コードを含む予め確保されたメモリ空間を破棄もしくは解放するステップ
を具備することを特徴とする請求項12又は13のいずれかに記載の実行プログラムの実行方法。 - 前記符号化は圧縮処理であり、復号化は圧縮されたデータの伸長処理であることを特徴とする請求項12乃至14のいずれかに記載の実行プログラムの実行方法。
- 前記符号化は暗号化処理であり、復号化は暗号化データの復号処理であることを特徴とする請求項12乃至14のいずれかに記載の実行プログラムの実行方法。
- 実行プログラムは、符号化対象コードをメモリ・ロードした後既に呼び出されたことがあるか否かを示す復号実施フラグを含み、
前記復号実施フラグの設定に応じて前記(c)復号化するステップと前記(d)再配置処理するステップを実行することを特徴とする請求項12乃至14のいずれかに記載の実行プログラムの実行方法。 - コンピュータ上で実行可能な実行プログラムをコンピュータ可読形式で格納したコンピュータ可読プログラム記憶媒体であって、
前記実行プログラムは、実行コードを含む実行コード・セクションを含み、実行コードの少なくとも一部に符号化を予定された符号化対象コードであり、
前記実行コード・セクションには、
前記コンピュータに対し、符号化された符号化対象コードを復号化するためのメモリ領域を確保し、該確保したメモリ領域に符号化された符号化対象コードを復号化するための処理を実行させる復号化実施コード部分と、
前記コンピュータに対し、符号化された符号化対象コードを復号化するための前記メモリ領域のアドレス情報に基づいて、符号化対象コードの範囲内の命令に含まれる符号化対象コード範囲外に対する相対アドレス情報についての再配置処理を実行させる再配置実施コード部分と、
が付与されていることを特徴とするコンピュータ可読プログラム記憶媒体。 - コンピュータ上で実行可能な実行プログラムをコンピュータ可読形式で格納したコンピュータ可読プログラム記憶媒体であって、
前記実行プログラムは、実行コードを含む実行コード・セクションと、静的に記憶領域が確保されているデータを記憶するためデータ・セクションを含み、実行コードの少なくとも一部に符号化を予定された符号化対象コードであり、
前記データ・セクション内には、符号化対象コードの範囲内の命令に含まれる符号化対象コード範囲外に対する相対アドレス情報についての再配置情報が格納されており、
前記実行コード・セクションには、
前記コンピュータに対し、符号化された符号化対象コードを復号化するためのメモリ領域を確保し、該確保したメモリ領域に符号化された符号化対象コードを復号化するための処理を実行させる復号化実施コード部分と、
前記コンピュータに対し、前記データ・セクションに格納されている再配置情報と、符号化された符号化対象コードを復号化するための前記メモリ領域のアドレス情報に基づいて、符号化対象コードの範囲内に含まれる再配置対象の相対アドレス情報についての再配置処理を実行させる再配置実施コード部分と、
が付与されていることを特徴とするコンピュータ可読プログラム記憶媒体。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP36204499A JP4042280B2 (ja) | 1999-12-21 | 1999-12-21 | 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体 |
| US09/655,064 US6715142B1 (en) | 1999-12-21 | 2000-09-05 | Execution program generation method, execution program generation apparatus, execution program execution method, and computer-readable storage medium |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP36204499A JP4042280B2 (ja) | 1999-12-21 | 1999-12-21 | 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2001175466A JP2001175466A (ja) | 2001-06-29 |
| JP4042280B2 true JP4042280B2 (ja) | 2008-02-06 |
Family
ID=18475727
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP36204499A Expired - Fee Related JP4042280B2 (ja) | 1999-12-21 | 1999-12-21 | 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US6715142B1 (ja) |
| JP (1) | JP4042280B2 (ja) |
Families Citing this family (28)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| GB0029115D0 (en) * | 2000-11-29 | 2001-01-10 | Sgs Thomson Microelectronics | Assembling an object code module |
| US20020138748A1 (en) * | 2001-03-21 | 2002-09-26 | Hung Andy C. | Code checksums for relocatable code |
| JP2007524875A (ja) * | 2003-01-10 | 2007-08-30 | ネクサウェブ テクノロジーズ インコーポレイテッド | ネットワーク・ベースの処理のためのシステムおよび方法 |
| TW200428171A (en) * | 2003-06-13 | 2004-12-16 | Delta Electronics Inc | Method for controlling single step of the program in programmable logic controller |
| JP4502359B2 (ja) * | 2003-08-22 | 2010-07-14 | 株式会社ハイパーテック | 暗号化プログラム復号方法及び暗号化プログラム復号プログラム |
| JP4517636B2 (ja) * | 2003-12-05 | 2010-08-04 | 富士ゼロックス株式会社 | 実行プログラム作成方法、関数プログラム、及び関数プログラム実行方法 |
| JP2007233426A (ja) * | 2004-04-05 | 2007-09-13 | Matsushita Electric Ind Co Ltd | アプリケーション実行装置 |
| US7853742B2 (en) | 2004-04-26 | 2010-12-14 | Intel Corporation | System and method to conditionally shrink an executable module |
| JP2005332221A (ja) * | 2004-05-20 | 2005-12-02 | Renesas Technology Corp | 記憶装置 |
| US7644409B2 (en) * | 2004-06-04 | 2010-01-05 | Sun Microsystems, Inc. | Techniques for accessing a shared resource using an improved synchronization mechanism |
| WO2007063433A2 (en) * | 2005-10-17 | 2007-06-07 | Nxp B.V. | Program executable image encryption |
| JP4770425B2 (ja) * | 2005-11-24 | 2011-09-14 | 富士ゼロックス株式会社 | 保護済み実行プログラムの作成のためのプログラム、方法及び装置 |
| US8041958B2 (en) * | 2006-02-14 | 2011-10-18 | Lenovo (Singapore) Pte. Ltd. | Method for preventing malicious software from execution within a computer system |
| 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 | レノボ・シンガポール・プライベート・リミテッド | コンピューター・システム内で悪意あるソフトウェアの実行を防止するための方法 |
| US20080162522A1 (en) * | 2006-12-29 | 2008-07-03 | Guei-Yuan Lueh | Methods and apparatuses for compaction and/or decompaction |
| CN101290571B (zh) * | 2007-04-16 | 2011-01-12 | 阮建辉 | 一种生成可被动态装载执行的文件的方法 |
| JP4937200B2 (ja) * | 2008-06-26 | 2012-05-23 | 株式会社エヌ・ティ・ティ・ドコモ | イメージ検査装置、os装置及びイメージ検査方法 |
| JP2010217975A (ja) * | 2009-03-13 | 2010-09-30 | Nec System Technologies Ltd | 情報処理装置、アプリケーションプログラム、及びアプリケーションプログラムの実行方法 |
| JP5387089B2 (ja) * | 2009-03-27 | 2014-01-15 | 富士ゼロックス株式会社 | プログラム及びプログラム実行装置 |
| EP2362314A1 (en) * | 2010-02-18 | 2011-08-31 | Thomson Licensing | Method and apparatus for verifying the integrity of software code during execution and apparatus for generating such software code |
| JP4897066B2 (ja) * | 2010-03-29 | 2012-03-14 | 株式会社ハイパーテック | 暗号化プログラム復号方法及び暗号化プログラム復号プログラム |
| JP2012208655A (ja) * | 2011-03-29 | 2012-10-25 | Kddi Corp | 自己書き換え処理装置、自己書き換え処理方法、およびプログラム |
| JP5996777B2 (ja) * | 2013-03-19 | 2016-09-21 | 株式会社東芝 | コード処理装置およびプログラム |
| JP2016028334A (ja) * | 2015-09-25 | 2016-02-25 | 株式会社Dnpハイパーテック | モジュールの暗号化/復号化プログラム |
| CN105677415B (zh) * | 2016-01-06 | 2020-07-17 | 网易(杭州)网络有限公司 | 热更新方法及装置 |
| US10452414B2 (en) * | 2016-06-30 | 2019-10-22 | Microsoft Technology Licensing, Llc | Assistive technology notifications for relevant metadata changes in a document |
| WO2020196959A1 (ko) * | 2019-03-28 | 2020-10-01 | 라인플러스 주식회사 | 힙 메모리를 이용하여 실행 가능 파일을 보호하는 방법 및 시스템 |
Family Cites Families (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4281215A (en) * | 1978-05-03 | 1981-07-28 | Atalla Technovations | Method and apparatus for securing data transmissions |
| US5867603A (en) * | 1995-07-10 | 1999-02-02 | Iterated Systems, Inc. | Method for transmitting fractal transform data to support different compressor/decompressor designs |
| US6009192A (en) * | 1996-12-19 | 1999-12-28 | Xerox Corporation | Color correction of a compressed image |
| US6505295B1 (en) * | 1997-02-17 | 2003-01-07 | Hitachi, Ltd. | Data processor |
| JPH1185526A (ja) * | 1997-09-12 | 1999-03-30 | Hitachi Ltd | プログラムロード方法 |
| US6199126B1 (en) * | 1997-09-23 | 2001-03-06 | International Business Machines Corporation | Processor transparent on-the-fly instruction stream decompression |
| EP0964370B1 (en) * | 1998-06-05 | 2003-08-20 | International Business Machines Corporation | Method and device for loading instruction codes to a memory and linking said instruction codes |
| US6473840B2 (en) * | 1998-06-19 | 2002-10-29 | International Business Machines Corporation | Data processing system having a network and method for managing memory by storing discardable pages in a local paging device |
| US6199203B1 (en) * | 1998-07-21 | 2001-03-06 | Hewlett-Packard Company | Memory management techniques for on-line replaceable software |
| US6295647B1 (en) * | 1998-10-08 | 2001-09-25 | Philips Electronics North America Corp. | Context life time management of a user interface in a digital TV broadcast |
| US6446258B1 (en) * | 1998-11-03 | 2002-09-03 | Intle Corporation | Interactive instruction scheduling and block ordering |
-
1999
- 1999-12-21 JP JP36204499A patent/JP4042280B2/ja not_active Expired - Fee Related
-
2000
- 2000-09-05 US US09/655,064 patent/US6715142B1/en not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| JP2001175466A (ja) | 2001-06-29 |
| US6715142B1 (en) | 2004-03-30 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP4042280B2 (ja) | 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体 | |
| KR101288700B1 (ko) | 멀티 오퍼레이팅 시스템(os) 기동 장치, 컴퓨터 판독 가능한 기록 매체 및 멀티 os 기동 방법 | |
| JP7716526B2 (ja) | 階層セキュリティを備えたフラッシュ変換層 | |
| CN109598107B (zh) | 一种基于应用安装包文件的代码转换方法及装置 | |
| CN107291485B (zh) | 动态链接库的加固方法、运行方法、加固装置和安全系统 | |
| CN100419626C (zh) | 执行以面向对象语言制作的应用程序的执行装置 | |
| JP2005135265A (ja) | 情報処理装置 | |
| US20070005625A1 (en) | Storage architecture for embedded systems | |
| JP2004303114A (ja) | インタープリタおよびネイティブコード実行方法 | |
| JP4850830B2 (ja) | コンピュータシステム及びプログラム生成装置 | |
| CN108664796A (zh) | 一种so文件保护方法及装置 | |
| JP3033562B2 (ja) | 再配置可能な実行プログラムの生成方法及び実行プログラム生成装置 | |
| JP5952218B2 (ja) | 情報処理装置および情報処理方法 | |
| JP5387089B2 (ja) | プログラム及びプログラム実行装置 | |
| JP5374751B2 (ja) | メモリ管理方法 | |
| JP4727366B2 (ja) | 情報処理装置、情報処理システム、プログラムおよび記録媒体 | |
| KR101110293B1 (ko) | 파일 저장 장치의 파티션 액세스 제어 방법 및 제어 장치, 그 기록매체 | |
| US12399961B2 (en) | Program protection apparatus, program protection method, and program protection program | |
| JP2008040853A (ja) | アプリケーション実行方法およびアプリケーション実行装置 | |
| JP4504756B2 (ja) | Java(登録商標名)実行環境におけるメモリ管理方法及びメモリ管理プログラム | |
| JP2007122391A (ja) | 暗号化プログラムを復号して実行する情報処理装置及びメモリ管理方法 | |
| JP5090279B2 (ja) | プログラム変換システム | |
| JP2007172526A (ja) | 情報処理システム、情報処理方法 | |
| Morris et al. | Privacy protected ELF for private computing on public platforms | |
| WO2011096073A1 (ja) | メモリ管理方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040217 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070605 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070806 |
|
| 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: 20071023 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071105 |
|
| 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: 20101122 Year of fee payment: 3 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111122 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111122 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121122 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121122 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131122 Year of fee payment: 6 |
|
| LAPS | Cancellation because of no payment of annual fees |