JP4727366B2 - 情報処理装置、情報処理システム、プログラムおよび記録媒体 - Google Patents

情報処理装置、情報処理システム、プログラムおよび記録媒体 Download PDF

Info

Publication number
JP4727366B2
JP4727366B2 JP2005282814A JP2005282814A JP4727366B2 JP 4727366 B2 JP4727366 B2 JP 4727366B2 JP 2005282814 A JP2005282814 A JP 2005282814A JP 2005282814 A JP2005282814 A JP 2005282814A JP 4727366 B2 JP4727366 B2 JP 4727366B2
Authority
JP
Japan
Prior art keywords
program
information processing
encrypted
area
processing apparatus
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.)
Active
Application number
JP2005282814A
Other languages
English (en)
Other versions
JP2007094728A (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.)
Schneider Electric Japan Holdings Ltd
Original Assignee
Digital Electronics 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 Digital Electronics Corp filed Critical Digital Electronics Corp
Priority to JP2005282814A priority Critical patent/JP4727366B2/ja
Publication of JP2007094728A publication Critical patent/JP2007094728A/ja
Application granted granted Critical
Publication of JP4727366B2 publication Critical patent/JP4727366B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Description

本発明は、中間言語のプログラムを複数の部分に分割して管理すると共に、必要であれば、その部分をメモリにロードし、その装置のプロセッサにネイティブな機械語に変換した後で実行する情報処理装置、情報処理システム、プログラムおよび記録媒体に関するものである。
従来から、多くのプラットフォームで動作させるために、例えば、Java(登録商標)言語の処理系のように、プログラム開発装置にて、ソースコードを中間言語のコードにコンパイルして配布すると共に、プログラム実行装置に設けられた仮想マシンが当該中間言語のコードをネイティブコードに変換して実行する構成が広く使用されている。
当該構成では、各プラットフォームにおいて仮想マシンが提供されていれば、ソースコードの変更も、ソースコードをコンパイルする処理を各プラットフォーム毎に行うことも不要になる。
より詳細には、仮に、ソースコードをコンパイルする処理を各プラットフォーム毎に行って、各プラットフォームにネイティブな機械語を生成すると共に、いずれのプラットフォーム上でも実行できるように、それらを全て含んだ状態で配布すると、プログラムサイズが大きくなってしまう。また、各プラットフォーム用のプログラムを別個に配布したとしても、プラットフォームの差異は、例えば、Windows(登録商標)でさえ、CPUのメーカの相違、OS(Operating System)のバージョンの相違、あるいは、それらの組み合わせによっても発生するため、これらの差異全てに対応するソースコードを用意したり、これら差異のあるプラットフォームの全てにおいて、プログラムをテストして、当該プログラムが正常に動作するか否かを確認したりしようとすると、非常に手間がかかってしまう。
これに対して、上記中間言語のコードを配布する構成では、上記のように、ソースコードを変更したり、テストも含め、ソースコードをコンパイルする処理を各プラットフォーム毎に行ったりすることも不要になり、プログラム開発時の手間を軽減できる。また、複数のプラットフォームで動作できるにも拘わらず、プログラムサイズが大きくなるという不具合も発生しない。
これらの結果、プログラム開発時の生産性を向上でき、プログラム開発時の手間を大幅に削減できると共に、短納期でのソフトウェア開発や、大規模なプログラム開発が可能になる。
ただし、上記中間言語は、複数種類のプロセッサのネイティブコードに変換しやすいようにするために、型の情報などを含んでいる。したがって、ネイティブコードのプログラムと比較すると、逆コンパイルすることにより、比較的容易にプログラムの内容を把握できる。この結果、第三者は、比較的容易に、プログラムの内容の把握およびプログラムの改竄を試みることができる。したがって、技術情報が流出したり、プログラムがクラックされる虞れがある。
これに対して、例えば、後述の特許文献1では、プログラムを暗号化する構成が記載されている。具体的には、イニシャルプログラムにより、パスワードが合致すると、情報処理装置からICカードへ暗号化された、暗/復号化処理プログラムが送信され、ICカードは、このプログラムを正当使用者の復号化鍵にて復号化して送り返す。情報処理装置は、このプログラムを作業メモリ領域に配置して起動し、データの暗/復号化処理を行う。このように、当該構成では、プログラムは、通常暗号化されているので、第三者による解析および改竄を防止できる。
特開平9−6232号公報(公開日:1997年1月10日)
しかしながら、上記各従来の構成を組み合わせて、プログラムのクラスファイルを暗号化して記憶しておくと共に、プログラム実行装置で全てのクラスファイルを復号化して、メモリにロードし、仮想マシンに実行させようとすると、復号に要する時間が長くなる。また、必ず、各クラスファイルが復号されるため、第三者に暗号化/復号化処理の手順を解析する手がかりを与えやすい。
本発明は、上記の問題点に鑑みてなされたものであり、その目的は、よりプログラムの内容を第三者が取得しにくく、より安全な情報処理装置を実現することにある。
本発明に係る情報処理装置は、上記課題を解決するために、中間言語のプログラムを複数の部分に分割して管理すると共に、プログラム実行時に各部分の要否を判定する判定手段と、上記判定手段によって必要と判断された部分を、上記プログラムの各部分を暗号化して記憶する記憶装置から読み出して復号する復号手段と、上記復号手段が復号した上記プログラムの部分をメモリにロードするプログラムローダと、当該ロードされたプログラムの部分を、その装置のプロセッサにネイティブな機械語に変換した後で実行するプログラム実行手段とを備えていることを特徴としている。
上記構成において、判定手段は、例えば、ソースコードをコンパイルするなどして生成された中間言語のプログラムを、例えば、クラスやモジュールあるいはアセンブリなど、複数の部分に分割して管理すると共に、プログラム実行時に、例えば、当該プログラムの部分を実行する可能性があるか否かなどを判定して、各部分の要否、すなわち、当該部分をメモリにロードする必要があるか否かを判定している。一例として、部分がクラスの場合では、例えば、判定手段は、そのクラスのインスタンスの生成が必要になったか否かなどによって、当該部分の要否を判定できる。
上記判定手段が、ある部分を必要と判断すると、復号手段は、上記プログラムの各部分を暗号化して記憶する記憶装置から読み出して復号し、プログラムローダは、復号された上記プログラムの部分をメモリにロードする。さらに、プログラム実行手段は、当該ロードされたプログラムの部分を、その装置のプロセッサにネイティブな機械語に変換した後で実行する。
当該構成では、記憶装置に格納されている状態では、プログラムの部分が暗号化されているので、第三者による当該プログラムの部分の内容解読を妨害できる。また、上記構成では、判定手段がプログラム実行時に各部分の要否を動的に判定すると共に、上記復号手段は、上記判定手段によって必要と判断された部分を復号する。したがって、暗号化されたプログラムを全て復号してメモリにロードする構成と比較して、各部分が復号される回数と、復号される部分の数との双方を低減できる。したがって、第三者によるプログラムの内容解析をさらに困難にすることができる。これらの結果、よりプログラムの内容を第三者が取得しにくく、より安全な情報処理装置を実現できる。
さらに、上記構成に加えて、上記復号手段は、上記情報処理装置にネイティブな機械語で記述されており、上記情報処理装置のプロセッサは、上記プログラム実行手段による、中間言語から機械語への変換処理を介することなく、上記復号手段の機械語を実行することによって、上記復号手段として動作してもよい。
当該構成では、上記復号手段が上記中間言語よりも内容を把握しにくい機械語で記述されている。したがって、第三者によるプログラムの内容解析をさらに困難にすることができ、情報処理装置の安全性をさらに向上できる。
さらに、上記構成に加えて、上記情報処理装置のメモリには、当該情報処理装置のオペレーティングシステム、デバイスドライバおよびデバイスの少なくとも一つからのみアクセス可能な特定領域と、上記オペレーティングシステム上で動作するアプリケーションプログラムからアクセス可能な通常領域とが設けられており、上記復号手段は、上記部分の変換により生成したネイティブな機械語のプログラムを、上記特定領域に設けられた領域を介して、上記プログラムローダへ与えてもよい。
当該構成に係る復号手段は、上記部分の変換により生成したネイティブな機械語のプログラムを、上記特定領域に設けられた領域を介して、上記プログラムローダへ与えるので、アプリケーションプログラムが当該領域を監視して復号後のプログラムの部分を取得することを防止できる。この結果、第三者によるプログラムの内容解析をさらに困難にすることができ、情報処理装置の安全性をさらに向上できる。
また、上記構成に加えて、上記情報処理装置のメモリの内容をダンプするダンププログラムが動作しているか否かを監視し、ダンププログラムの動作を検出すると、当該ダンププログラムおよび上記復号手段の少なくとも一方の動作を停止させる監視手段を備えていてもよい。
当該構成に係る監視手段は、上記情報処理装置のメモリの内容をダンプするダンププログラムが動作していることを検出すると、当該ダンププログラムおよび上記復号手段の少なくとも一方の動作を停止させる。したがって、ダンププログラムがメモリの内容をダンプして復号後のプログラムの部分を取得することを防止できる。この結果、第三者によるプログラムの内容解析をさらに困難にすることができ、情報処理装置の安全性をさらに向上できる。
さらに、上記構成に加えて、上記プログラムローダは、暗号化されていない中間言語のプログラムの部分もメモリにロード可能であり、暗号化されているか否かに拘わらず、上記記憶装置の記憶領域のうち、上記プログラムの各部分を格納する領域には、プログラムを格納するための第1領域と、当該プログラムに関連するデータを格納するための第2領域とが含まれており、暗号化されている場合は、上記第1領域には、ダミープログラムが格納され、上記暗号化されたプログラムの部分は、上記第2領域に格納されていると共に、上記復号手段は、暗号化されたプログラムの部分を、上記記憶装置の第2領域から読み出して復号してもよい。
当該構成では、暗号化されている場合も、暗号化されていない場合と同様、第1領域および第2領域を含む領域に、プログラムの部分が格納される。ただし、暗号化されている場合、本来は、プログラムが格納されるべき第1領域には、ダミープログラムが格納されており、復号手段は、第2領域から暗号化されたプログラムの部分を読み出す。
上記構成では、暗号化されている場合も暗号化されていない場合も、記憶装置にプログラムの部分を格納する際の形式は、互いに同じ形式(第1および第2領域を含む形式)であり、暗号化されている場合、第1領域には、ダミープログラムが格納されている。したがって、暗号化されていることを第三者が気付き難くすることができ、情報処理装置の安全性をさらに向上できる。
なお、暗号化されたプログラムの部分が第2領域に格納されており、復号手段が暗号化されたプログラムの部分を、上記記憶装置の第2領域から読み出して復号するものであれば、情報処理装置は、第2領域内に、さらに、第1および第2領域を含ませて、入れ子にしてもよい。
具体的には、0以上の任意の整数をi、上記暗号化されたプログラムの部分を、0次の上記暗号化されたプログラムの部分、i次の暗号化されたプログラムの部分をダミープログラムに関連する特定データとして当該ダミープログラムに付加する処理によって生成されるデータを、(i+1)次の暗号化されたプログラムの部分、(i+1)次の暗号化されたプログラムの部分から、上記特定データとしてのi次の暗号化されたプログラムの部分を抽出する処理を抽出処理、nを予め1以上に定められた整数とするとき、上記構成に加えて、上記第2領域には、暗号化されている場合、n次の暗号化されたプログラムの部分が記憶されており、上記復号手段は、上記第2の領域に格納されたデータに対して、n回、上記抽出処理を繰り返すことによって、上記暗号化されたプログラムの部分を読み出して復号してもよい。当該構成では、実際に使用するプログラムの部分を、より多くのダミープログラムによって隠蔽することができるので、情報処理装置の安全性をさらに向上できる。
また、本発明に係る情報処理装置は、上記構成のいずれかの情報処理装置により実行されるプログラムの部分を生成するための情報処理装置であって、中間言語のプログラムの部分を、上記復号手段が復号可能な形式で暗号化する暗号化手段を備えていることを特徴としている。また、本発明に係る情報処理システムは、上記復号する情報処理装置のいずれかと、中間言語のプログラムの部分を、上記情報処理装置の復号手段が復号可能な形式で暗号化する暗号化手段とを備えていることを特徴としている。
当該構成でも、上記暗号化手段によって暗号化されたプログラムの部分が必要と判断されると、当該暗号化されたプログラムの部分は、上記復号手段によって復号されて、プログラムローダによってロードされ、プログラム実行手段により実行される。したがって、上記情報処理装置と同様、よりプログラムの内容を第三者が取得しにくく、情報処理装置および情報処理システムの安全性を向上できる。
ところで、上記情報処理装置は、ハードウェアで実現してもよいし、プログラムをコンピュータに実行させることによって実現してもよい。具体的には、本発明に係るプログラムは、上記情報処理装置のいずれかの各手段として、コンピュータを動作させるプログラムであり、本発明に係る記録媒体には、当該プログラムが記録されている。
これらのプログラムがコンピュータによって実行されると、当該コンピュータは、上記情報処理装置として動作する。したがって、上記情報処理装置と同様に、よりプログラムの内容を第三者が取得しにくく、より安全な情報処理装置を実現できる。
本発明によれば、プログラム実行時にプログラムの各部分の要否が動的に判定され、必要と判断された部分が復号されるので、暗号化されたプログラムを全て復号してメモリにロードする構成と比較して、各部分が復号される回数と、復号される部分の数との双方を低減できる。したがって、第三者によるプログラムの内容解析をさらに困難にすることができる。これらの結果、よりプログラムの内容を第三者が取得しにくく、より安全な情報処理装置を実現できるという効果を奏する。
本発明の一実施形態について図1ないし図3に基づいて説明すると以下の通りである。すなわち、本実施形態に係るプログラミングシステム1は、図1に示すように、ソースコードを編集・作成すると共に、当該ソースコードをコンパイルして中間言語のコード(中間コード)を生成するプログラム開発装置(情報処理装置)2と、当該中間言語のコードを、その装置にネイティブな機械語に変換して実行するプログラム実行装置(情報処理装置)3とを備えている。
なお、プログラム実行装置3は、プログラム開発装置2の生成した中間コードを実行できれば、プログラム実行装置3と同じ装置であってもよいし、別の装置であってもよい。別の装置の場合、プログラム開発装置2が中間コードをプログラム実行装置3へ送信したり、プログラム開発装置2の生成した中間コードが格納された記録媒体をプログラム実行装置3が読み取るなどして、プログラム開発装置2の生成した中間コードがプログラム実行装置3に格納される。
ここで、上記中間言語は、後述するように、その処理系が動的にプログラムの各部分(例えば、クラス)をロードできるものであれば、種々の言語を採用できるが、以下では、一例として、マイクロソフト社が規定したMSIL(Microsoft(登録商標) Intermediate Language )の場合について説明し、そのコードをMSILコードと称する。
上記MSILは、CPUに依存しない一連の命令であって、効率的にネイティブ・コードに変換可能なように予め定められている。当該命令には、オブジェクトに対する読み込み、格納、初期化、および、呼び出し用の命令が含まれている。また、上記命令には、それ以外にも、算術演算および論理演算、制御フロー、DMA(Direct Memory Access)、例外処理、並びに、その他の操作のための命令も含まれている。
一方、上記プログラム開発装置2には、ソースコードを編集・作成する編集処理部11と、当該編集処理部11の生成したソースコードをコンパイルしてMSILコードを生成するコンパイラ12と、当該コンパイラ12の生成したMSILコードを記憶する記憶部13とが設けられている。
なお、これらの各部材11〜13、並びに、後述する各部材21〜51は、CPUが記憶装置に格納されたプログラムを実行し、図示しない入出力回路などの周辺回路を制御することによって実現される機能ブロックである。また、これらの部材のうち、記憶部13・および31は、ROMやRAMなどの記憶装置自体であってもよい。したがって、これらの手段を有するコンピュータが、上記プログラムを記録した記録媒体(例えば、CD−ROMなど)から読み取ったり、他のコンピュータと通信したりして、プログラムを取得し、当該プログラムを実行するだけで、本実施形態に係るプログラム開発装置2およびプログラム実行装置3を実現できる。
上記編集処理部11は、上記ソースコードを作成・編集可能であれば、テキストエディタであってもよいし、ソースコードの作成・編集やコンパイルなどを支援する機能を持った統合環境であってもよい。
また、上記コンパイラ12としては、MSILコードにコンパイルできるものであれば、例えば、C#、Managed C++、Visual Basic(登録商標).NET、、JScript(登録商標).NETなど、種々の言語のコンパイラを好適に使用できる。
これらの言語では、上記MSILコードを実行するランタイム処理部32(後述)がメモリーの取得・開放を管理しているため、プログラマがポインタを意識する必要がなくなっており、開発効率が向上されている。また、ランタイム処理部32がMSILコードからネイティブコードに変換する段階でセキュリティのチェックもできるため、プログラミングシステム1全体の安全性を向上できる。
さらに、上記コンパイラ12は、MSILコードを生成する際、それに関連するメタデータも生成している。当該メタデータは、上記プログラム実行装置3がMSILコードを実行する際に使用されるデータであって、例えば、コード内の型について、それぞれの型の定義、型のメンバのシグネチャ、コードが参照するメンバなどが含まれる。
上記コンパイラ12が記憶部13に中間コードとしてのMSILコードおよびメタデータを格納する際の形式は、上記プログラム実行装置3で実行可能な形式として予め定められている。本実施形態では、コンパイラ12は、MSILコードおよびメタデータを含む上記形式のデータシーケンス(バイトシーケンス)を、ファイルとして格納しており、当該ファイルには、MSILコードを格納する領域(コード領域)とメタデータを格納する領域(メタデータ領域)とが設けられている。なお、当該形式としては、例えば、COFF( Common Object File Format)形式のDLL(Dynamic Link Library)ファイルなどが挙げられる。また、本実施形態では、上記言語としてクラスを定義可能な言語が使用されており、以下では、上記ファイルのうち、クラスを定義したMSILコードが含まれているファイルをクラスファイルと称する。
さらに、本実施形態に係るプログラム開発装置2には、上記コンパイラ12が生成したデータシーケンスを暗号化する暗号化処理部(暗号化手段)21が設けられている。当該暗号化処理部21は、一例として、指定されたクラスファイル(クラスライブラリファイル)を暗号化して、元のクラスファイルを上書きするコマンドラインプログラムなどによって実現される。
本実施形態では、上記暗号化処理部21は、以下の2つの暗号化処理を組み合わせて暗号化している。第1の暗号化処理は、上記データシーケンスのうち、予め定められた部分について、データ順序変更および条件付きのビット反転を行う処理である。
一例として、本実施形態に係る暗号化処理部21は、上記部分のデータシーケンスを予め定められた単位(例えば、バイト毎)に分割し、分割されたデータの順序を逆順に並び替えている。より詳細には、上記部分のデータシーケンスは、最後のバイトが上記部分の最初のバイトになるように並び替えられる。また、本実施形態に係る暗号化処理部21は、予め定められた単位毎(例えば、バイト毎)に、その単位のデータシーケンスが、予め定められたデータシーケンス(例えば、00hおよびFFh)でなければ、その単位のデータシーケンスをビット反転している。さらに、本実施形態では、上記暗号化する部分として上記データシーケンスの中にプログラムに拘わらず一定または類似のデータシーケンスとなるように定められた箇所、あるいは、上記データシーケンスの中にプログラムに拘わらず一定または類似のデータシーケンスとなる可能性が高いと推定される箇所を除いた部分が選択されている。なお、当該箇所としては、例えば、先頭から119バイト(”…This Program is cannot be DOS MODE.”までの部分)などが挙げられる。
また、第2の暗号化処理は、上記第1の暗号化処理で生成されたデータシーケンスに、偽のソースコード(ダミーのソースコード)をコンパイルして生成されたデータシーケンス(偽のデータシーケンス)を組み合わせることによって、組み合わせ後のデータシーケンスが通常のクラスファイル内のデータシーケンスと同じ形式になり、しかも、当該データシーケンスを逆コンパイルすると、偽のソースコードが得られるように整形する処理である。なお、上記ダミーのソースコードは、難読化しておく方が望ましい。
本実施形態では、図2に示すように、上記偽のデータシーケンスとして、MSILコードC1およびメタデータM1aが用意されており、暗号化処理部21は、当該MSILコードC1を、クラスファイルのコード領域Cに格納し、上記第1の暗号化処理によって生成したデータシーケンスD1(メタデータM1b)および上記メタデータM1aを、メタデータM1として、当該クラスファイルのメタデータ領域Mに格納する。
これにより生成されたクラスファイル(暗号化されたクラスファイル)には、通常のクラスファイルと同様に、コード領域Cとメタデータ領域Mとが含まれている。したがって、形式上は、通常のクラスファイルと同一であり、第三者は、当該クラスファイルが暗号化されていると第三者に気付かれ難い。
ただし、当該クラスファイルのコード領域Cには、上記MSILコードC1が格納されている。したがって、このクラスファイルを通常のクラスファイルと同様に逆コンパイルしても、MSILコードC1の示す偽のソースコードが得られるだけである。この結果、本来のクラスファイルの内容、すなわち、暗号化前のMSILコードC0のソースコードを、第三者から隠蔽できる。
一方、図1に示すように、上記プログラム実行装置3は、上記クラスファイルが格納された記憶部(記憶装置)31と、当該記憶部31に格納されたクラスファイル内のMSILコードを実行するランタイム処理部32とを備えている。
上記構成では、ランタイム処理部32がMSILコードをプログラム実行装置3にネイティブな機械語のプログラムに変換して実行する。したがって、上述したように、ソースコードを変更したり、テストも含め、ソースコードをコンパイルする処理を各プラットフォーム毎に行ったりすることも不要になり、プログラム開発時の手間を軽減できる。また、複数のプラットフォームで動作できるにも拘わらず、プログラムサイズが大きくなるという不具合も発生しない。
これらの結果、プログラム開発時の生産性を向上でき、プログラム開発時の手間を大幅に削減できると共に、短納期でのソフトウェア開発や、大規模なプログラム開発が可能になる。
より詳細には、上記ランタイム処理部32には、MSILコードの実行に必要なクラスがある場合に、そのクラスを定義するMSILコードが含まれたデータシーケンスを、図示しないメモリにロードするクラスローダ(プログラムローダ)41と、必要に応じてメタデータを参照しながら、上記MSILコードをコンパイルして、プログラム実行装置3にネイティブな機械語のプログラム(ネイティブプログラム)を生成する実行装置側コンパイラ(プログラム実行手段)42と、当該ネイティブプログラムの実行を制御すると共に、クラスローダ41および実行装置側コンパイラ42を制御する制御部(判定手段)43とが設けられている。
本実施形態に係るランタイム処理部32は、あるプログラムを実行する際、実行される可能性のある全てのクラスのデータシーケンスをロードするのではなく、動的にクラスをロード可能であり、上記制御部43は、上記ネイティブプログラムの実行中に、あるクラスのインスタンスの生成が必要になった場合、当該クラスのデータシーケンスのロードを上記クラスローダ41へ指示できる。
さらに、本実施形態に係るクラスローダ41は、記憶部31に格納されたクラスファイルからだけではなく、指定されたメモリ領域からも上記データシーケンスをロードできるように構成されている。
また、本実施形態に係る実行装置側コンパイラ42は、JIT(Just-In-Time)でのコンパイルが可能である。具体的には、実行装置側コンパイラ42は、MSILコードの示すプログラムを実行する際、個々のMSILコードを1つずつに対して、「解釈、機械語への変換、その機械語の実行」という処理を繰り返すのではなく、実行前に、予め定めれた量(例えば、1メソッドなど)のMSILコードを機械語に変換して実行している。さらに、実行装置側コンパイラ42は、変換後の機械語を記憶しておき、各MSILコードの示すプログラムを実行する際、既に変換後の機械語が記憶されていれば、その機械語を実行できる。なお、変換の際、実行装置側コンパイラ42は、必要に応じて、MSILコードに関連するメタデータも参照している。
一例として、メソッド単位で変換する場合について、さらに詳細に説明すると、クラスローダ41は、例えば、メタデータから型を読み込んだ場合、上記制御部43として、当該型に対応するスタブを生成し、その型の各メソッドに結び付ける。さらに、上記制御部43としてのスタブは、メソッドが初めて呼び出されると、実行装置側コンパイラ42へJITコンパイルを指示し、実行装置側コンパイラ42は、そのメソッドのMSILコードをネイティブな機械語(ネイティブコード)に変換すると共に、そのネイティブコードを直接実行するように上記スタブを変更する。これにより、それ以降は、このJITコンパイル済みのメソッドが呼び出されると、上記生成済みのネイティブコードが直接実行され、JITコンパイルに必要な時間、および、コードの実行に必要な時間を短縮できる。
なお、本実施形態に係る実行装置側コンパイラ42は、上記JITコンパイル以外にも、インストール時コード生成が可能であり、JITコンパイル時よりも大きなコード単位を一度に変換すると共に、生成したネイティブコードを後からクラス(アセンブリ)が読み込まれて実行されるときに使用できるように保存できる。
さらに、本実施形態に係るプログラム実行装置3には、暗号化されたクラスファイルを復号する暗号解除部(復号手段;監視手段)51が設けられており、上記制御部43は、データシーケンスのロードが必要になったクラスファイルが暗号化されている場合、クラスローダ41によるデータシーケンスのロードの前に、上記暗号解除部51に復号を指示できる。また、本実施形態に係る制御部43は、暗号解除部51へ復号を指示する際、復号時、および、クラスローダ41呼び出し時に、メモリ領域として、OSのメモリ領域、あるいは、デバイスドライバのメモリ領域またはデバイス領域を使用するように指示する。
一例として、本実施形態に係る制御部43は、未だ読み込まれていないクラスを実行したいという処理に達したら、ランタイム処理部32のポインタ(アプリケーションドメインのポインタ)と読み出すべきクラスライブラリのファイルパスとを引数にして、上記暗号解除部51を呼び出すことによって、当該暗号解除部51に復号を指示できる。なお、ランタイム処理部32のポインタによって示される構造体には、クラスローダ41が読み込む対象とするデータシーケンスを格納されたメモリ領域を示すデータが含まれている。
一方、上記暗号解除部51は、プログラム実行装置3にネイティブな機械語からなるプログラムを、例えば、ファイルなどとして、記憶部31格納しておき、当該プログラムを上記CPUが実行することによって実現されており、上記暗号化処理部21が暗号化したクラスファイルを復号した後、復号されたデータシーケンスを、上記クラスローダ41へ与えることができる。
当該構成では、クラスファイルが暗号化されている場合であっても、クラスローダ41には、復号されたデータシーケンスが与えられるので、クラスローダ41は、暗号化されていないクラスファイル(通常のクラスファイル)のデータシーケンスをロードする際と同じ動作で、データシーケンスをロードできる。したがって、通常のクラスファイルをロードするために、ロード処理などの処理を、そのプログラム実行装置3の環境に最適化したクラスローダ41が既に存在していれば、暗号化されたクラスファイルのデータシーケンスをロードするためにも、そのクラスローダ41を使用できる。したがって、暗号化されたクラスファイルをロードするためのクラスローダ41を新たに作成するよりも、簡便かつ安全にプログラム実行装置3を実現できる。
暗号解除部51が暗号化したクラスファイルを復号してクラスローダ41へ与える処理について、さらに具体的に説明すると、暗号解除部51は、暗号化されたクラスファイル(図2参照)のメタデータ領域Mから、例えば、予め定められた部分以外のデータを読み出したり、予め定められた形式以外のメタデータを読み出したりして、上記メタデータM1a以外のデータシーケンス(D1)を読み出す。
さらに、暗号解除部51は、当該データシーケンスD1のうち、上記暗号化処理部21が暗号化すると予め定められた箇所のデータの順番を元に戻し、さらに、暗号化処理部21がビット反転すると定められた値のデータシーケンスをビット反転する。これにより、暗号解除部51は、暗号化前のデータシーケンスD0を復号できる。
一例として、本実施形態に係る暗号化処理部21は、上述したように、先頭から120バイト以降のデータシーケンスをバイト毎に分割し、逆順に並び替えると共に、当該分割されたデータが00hおよびFFh以外であれば、ビットを反転している。したがって、暗号解除部51は、先頭から120バイト以降のデータシーケンスをバイト毎に分割し、分割されたデータの順序を逆順に並び替えると共に、当該分割されたデータが00hおよびFFh以外であれば、ビットを反転している。
ここで、制御部43は、データシーケンスのロードが必要になったクラスファイルが暗号化されている場合、暗号解除部51を呼び出した後にクラスローダ41を呼び出してもよいが、本実施形態では、上記制御部43は、クラスローダ41を呼び出す代わりに、暗号解除部51を呼び出しており、暗号解除部51がクラスローダ41に復号したデータシーケンスD1を渡して、クラスローダ41に当該データシーケンスD1のロードを指示している。
より詳細には、暗号解除部51は、復号したデータシーケンスD1を、ランタイム処理部32のポインタによって特定されたメモリ領域に格納すると共に、当該メモリ領域からクラスファイルをロードするように、クラスローダ41に指示している。なお、暗号解除部51は、クラスローダ41へ指示する際、例えば、当該クラスローダ41をOLE(Object Linking and Embedding)として呼び出してもよい。具体的には、ランタイム処理部32は、アプリケーションドメインのインスタンスとして動作しており、暗号解除部51は、当該アプリケーションドメインのインスタンスのLoadメソッドに、例えば、復号化したデータシーケンスD1のバイナリデータへのポインタを渡すなどして、クラスローダ41へ復号化したデータシーケンスD1のバイナリデータを渡している。さらに、ランタイム処理部32は、クラスローダ41へ指示して、自らのアプリケーションドメイン内に、データシーケンスD1の示すクラスを取り込ませる。
また、制御部43は、クラスファイルが暗号化されているか否かを判定してもよいが、本実施形態では、制御部43がクラスファイルが暗号化されているか否かに拘わらず暗号解除部51に復号を指示しており、暗号解除部51が復号の要否(暗号化されているか否か)を判定している。なお、復号が不要と判断した場合、暗号解除部51は、例えば、クラスファイルから読み出したデータシーケンスをクラスローダ41へ与えるなどして、クラスファイルのコード領域C1に格納されたMSILコードのロードをクラスローダ41へ指示している。
このように、本実施形態では、より低級な言語(ネイティブな機械語)で記述された暗号解除部51が、クラスローダ41へ指示することによって、より高級な言語(中間言語;MSILコード)のプログラム(ランタイム処理部32により実行されるクラスファイルのコード)のプログラムのロード、あるいは、プログラムの実行などの機能を制御している。
これにより、上記暗号解除部51が、上記MSILコードよりも内容を把握しにくい機械語で記述されており、第三者によるプログラムの内容解析をさらに困難にすることができるにも拘わらず、クラスファイルの暗号化前のプログラムをより高級な言語(中間言語;MSILコード)で記述でき、プログラム開発時の生産性を向上できる。
さらに、本実施形態に係る暗号解除部51は、復号処理の際、メモリの内容をダンプするダンププログラムが動作しているか否かを監視し、ダンププログラムの動作を検出すると、動作を停止できる。
上記構成において、MSILコードのプログラムを実行する際の動作について説明すると以下の通りである。図3に示すS1において、プログラム実行装置3に設けられたランタイム処理部32の制御部43は、新たなクラスファイルのロードが必要であるか否かを監視している。
不要であると判断した場合(NOの場合)、制御部43は、S2〜S4において、プログラムを実行している。より詳細には、S2において、制御部43は、新たなJITコンパイルが必要であるか否かを判定し、必要であれば(YES の場合)、S3において、実行装置側コンパイラ42にJITコンパイルを指示して、MSILコードをネイティブな機械語の変換させた後、当該ネイティブコードを実行する。一方、JITコンパイルが不要であれば(上記S2にてNOの場合)、制御部43は、S3を経由せず、既に変換されているネイティブコードを実行する(上記S4)。なお、JITコンパイルの要否に拘わらず、上記S2〜S4の処理が終了すると、制御部43は、S1以降の処理を繰り返す。
一方、例えば、未だロードされていないクラスのインスタンス生成が必要になったと判断した場合など、未だロードされていないクラスのプログラムの実行が必要になったと判断すると(上記S1にてYES の場合)、制御部43は、S11において、暗号解除部51へ指示して、当該クラスのクラスファイルに格納されたデータシーケンスD1を復号させる。さらに、S12において、暗号解除部51は、上記データシーケンスD1を復号して生成したデータシーケンスD0を、クラスローダ41へ与える。さらに、クラスローダ41は、当該データシーケンスD0をメモリにロードする。その後は、S2以降の処理が行われ、データシーケンスD0に含まれるMSILコードは、JITコンパイルされた後、実行される。
なお、上記では、暗号化処理部21が、メタデータ領域に、暗号化されたデータシーケンスを格納する場合について説明したが、これに限るものではない。例えば、リソース領域(ハッシュ文字列、画像データ、CSV( Comma Separated Value)データなどを格納する領域)に、暗号化されたデータシーケンスを格納し、暗号解除部51が、当該リソース領域から、暗号化されたデータシーケンスを読み出してもよい。
いずれの場合であっても、記憶部13および記憶部31の記憶領域のうち、上記プログラムの各部分(クラスなど)を格納する領域には、プログラムを格納するための第1領域と、当該プログラムに関連するデータを格納するための第2領域とが含まれており、暗号化されている場合は、暗号化処理部21が、上記第1領域にダミープログラムを格納し、上記暗号化されたデータシーケンスを上記第2領域に格納すれば、同様の効果が得られる。
さらに、暗号化処理部21は、上記のように格納場所を変更する処理を複数回繰り返してもよい。例えば、リソース領域に格納される画像データが、JPEG(Joint Photographic Experts Group)ファイルの場合、暗号化処理部21は、予め定められた手順で、当該ファイルの形式を保ち、しかも、画像に見た目上は影響しないデータ、あるいは、画像に全く影響しないデータとして、上記暗号化されたデータシーケンスを含む画像ファイルを生成してもよい。この場合、暗号解除部51は、リソース領域の画像データから、予め定められた手順で、暗号化されたデータシーケンスを抽出できる。
より一般的に説明すると、暗号化処理部21および暗号解除部51は、以下のように動作してもよい。すなわち、0以上の任意の整数をi、上記暗号化されたデータシーケンスを、0次の上記暗号化されたデータシーケンス、i次のデータシーケンスをダミープログラムに関連する特定データ(例えば、メタデータやリソース領域のデータなど)として当該ダミープログラムに付加する処理によって生成されるデータを、(i+1)次の暗号化されたデータシーケンスとする。また、上記のようにして、i次のデータシーケンスから(i+1)次の暗号化されたデータシーケンスを生成する処理を、ステルス化処理とし、(i+1)次の暗号化されたデータシーケンスから、上記特定データとしてのi次の暗号化されたデータシーケンスを抽出する処理を抽出処理とする。
さらに、nを予め1以上に定められた整数とするとき、上記暗号化処理部21は、上記暗号化されたデータシーケンス(0次の暗号化されたデータシーケンス)に対して、n回ステルス化処理して、n次の暗号化されたデータシーケンスを生成し、上記第2領域に格納する。一方、暗号解除部51は、当該第2の領域に格納されたデータに対して、上記n回、上記抽出処理を繰り返すことによって、上記暗号化されたデータシーケンスを読み出して復号する。
当該構成では、第2領域内には、さらに、第1および第2領域が含まれており、入れ子構造が形成されている。したがって、実際に使用するMSILコードを、より多くのダミープログラムによって隠蔽することができる。この結果、プログラミングシステム1の安全性をさらに向上できる。
また、上記暗号化処理部21が第1および第2の暗号化方法を組み合わせて暗号化する場合について説明したが、これに限るものではなく、可逆の暗号化方法であれば、例えば、共通鍵暗号方式、公開鍵方式、あるいは、置換方式など、種々の暗号化方法(あるいは、それらの組み合わせ)を使用できる。より具体的には、例えば、RSA(Rivest Shamir Adleman )、3DES(Triple Data Encryption Standard )、楕円方式などの暗号化方式が挙げられる。
さらに、上記では、暗号化処理部21が暗号化した情報を復号するための情報を暗号解除部51が予め記憶している場合(実施形態では、復号アルゴリズムとして記憶)について説明したが、これに限るものではない。例えば、偽のソースコードを難読化しておき、その中の文字列などとして、あるいは、上記第2領域に格納するデータ(メタデータなど)などとして、復号するための情報(共通鍵暗号方式の場合は、共通鍵データ)を、クラスファイル内(データシーケンスD1中)に記憶していてもよい。
以上のように、本実施形態に係るプログラム実行装置3は、中間言語のプログラムを複数の部分(例えば、クラスやモジュールあるいはアセンブリなど)に分割して管理すると共に、プログラム実行時に各部分の要否を判定する制御部43と、上記制御部43によって必要と判断された部分を、上記プログラムの各部分を暗号化して記憶する記憶部31から読み出して復号する暗号解除部51と、上記暗号解除部51が復号した上記プログラムの部分をプログラム実行装置3のメモリにロードするクラスローダ41と、当該ロードされたプログラムの部分を、プログラム実行装置3のプロセッサ(CPUなど)にネイティブな機械語に変換した後で実行する実行装置側コンパイラ42とを備えている。
上記構成において、制御部43は、例えば、ソースコードをコンパイルするなどして生成された中間言語のプログラムを複数の部分に分割して管理すると共に、プログラム実行時に、例えば、当該プログラムの部分を実行する可能性があるか否かなどを判定して、各部分の要否(当該部分をメモリにロードする必要があるか否か)を判定している。
上記制御部43が、ある部分を必要と判断すると、暗号解除部51は、暗号化された上記プログラムの各部分を記憶部31から読み出して復号し、クラスローダ41は、復号された上記プログラムの部分をメモリにロードする。さらに、実行装置側コンパイラ42は、当該ロードされたプログラムの部分を、プログラム実行装置3のプロセッサにネイティブな機械語に変換した後で実行する。
当該構成では、記憶部31に格納されている状態(例えば、クラスファイルの状態)では、プログラムの部分が暗号化されているので、第三者による当該プログラムの部分の内容解読を妨害できる。また、上記構成では、制御部43がプログラム実行時に各部分の要否を動的に判定すると共に、上記暗号解除部51は、上記制御部43によって必要と判断された部分を復号する。したがって、暗号化されたプログラムを全て復号してメモリにロードする構成と比較して、各部分が復号される回数と、復号される部分の数との双方を低減できる。したがって、第三者によるプログラムの内容解析をさらに困難にすることができる。これらの結果、よりプログラムの内容を第三者が取得しにくく、より安全なプログラム実行装置3を実現できる。
さらに、上記構成に加えて、上記暗号解除部51は、上記プログラム実行装置3にネイティブな機械語で記述されており、上記プログラム実行装置3のプロセッサは、上記実行装置側コンパイラ42による、中間言語から機械語への変換処理を介することなく、上記暗号解除部51の機械語を実行することによって、上記暗号解除部51として動作してもよい。
当該構成では、上記暗号解除部51が上記中間言語よりも内容を把握しにくい機械語で記述されている。したがって、第三者によるプログラムの内容解析をさらに困難にすることができ、プログラム実行装置3の安全性をさらに向上できる。
さらに、上記構成に加えて、上記プログラム実行装置3のメモリには、当該プログラム実行装置3のオペレーティングシステム、デバイスドライバおよびデバイスの少なくとも一つからのみアクセス可能な特定領域(例えば、OSのメモリ領域、デバイスドライバのメモリ領域またはデバイス領域など)と、上記オペレーティングシステム上で動作するアプリケーションプログラムからアクセス可能な通常領域とが設けられており、上記暗号解除部51は、上記部分の変換により生成したネイティブな機械語のプログラムを、上記特定領域に設けられた領域を介して、上記クラスローダ41へ与えてもよい。
当該構成に係る暗号解除部51は、上記部分の変換により生成したネイティブな機械語のプログラムを、上記特定領域に設けられた領域を介して、上記クラスローダ41へ与えるので、アプリケーションプログラムが当該領域を監視して復号後のプログラムの部分を取得することを防止できる。この結果、第三者によるプログラムの内容解析をさらに困難にすることができ、プログラム実行装置3の安全性をさらに向上できる。なお、上記ネイティブな機械語の部分は、プラットフォームに依存するが、暗号解除部51を実現するためのプログラムの規模は、業務システムや開発アプリケーションなど、上記各クラスファイルによって実現されるプログラムの規模に比べて大幅に小さい。したがって、いずれのプラットフォーム上でも実行できるように、当該暗号解除部51を実現するためのプログラムを、各プラットフォーム毎のネイティブコードへコンパイルし、それらを全て含んだ状態で配布しても、プログラムサイズの増大を抑えることができる。
なお、上記では、暗号解除部51がダンププログラムの動作を検出すると、自らの動作を停止する構成について説明したが、これに限るものではなく、ダンププログラムへ停止信号を送るなどして、ダンププログラムを停止させてもよい。
すなわち、上記構成に加えて、暗号解除部51は、上記プログラム実行装置3のメモリの内容をダンプするダンププログラムが動作しているか否かを監視し、ダンププログラムの動作を検出すると、当該ダンププログラムおよび上記暗号解除部51の少なくとも一方の動作を停止させてもよい。
当該構成に係る暗号解除部51は、上記ダンププログラムが動作していることを検出すると、当該ダンププログラムおよび上記暗号解除部51の少なくとも一方の動作を停止させる。したがって、ダンププログラムがメモリの内容をダンプして復号後のプログラムの部分を取得することを防止できる。この結果、第三者によるプログラムの内容解析をさらに困難にすることができ、プログラム実行装置3の安全性をさらに向上できる。
さらに、上記構成に加えて、上記クラスローダ41は、暗号化されていない中間言語のプログラムの部分もメモリにロード可能であり、暗号化されているか否かに拘わらず、上記記憶部31の記憶領域のうち、上記プログラムの各部分を格納する領域(例えば、クラスファイルの記憶領域)には、プログラムを格納するための第1領域(コード領域)と、当該プログラムに関連するデータを格納するための第2領域(例えば、メタデータ領域やリソース領域など)とが含まれており、暗号化されている場合は、上記第1領域には、ダミープログラムが格納され、上記暗号化されたプログラムの部分は、上記第2領域に格納されていると共に、上記暗号解除部51は、暗号化されたプログラムの部分を、上記記憶部31の第2領域から読み出して復号してもよい。なお、上記では、当該ダミープログラムがMSILコードから構成されている場合を例にして説明したが、これに限るものではなく、ネイティブコードで記述されていてもよい。
当該構成では、暗号化されている場合も、暗号化されていない場合と同様、第1領域および第2領域を含む領域に、プログラムの部分が格納される。ただし、暗号化されている場合、本来は、プログラムが格納されるべき第1領域には、ダミープログラムが格納されており、暗号解除部51は、第2領域から暗号化されたプログラムの部分を読み出す。
上記構成では、暗号化されている場合も暗号化されていない場合も、記憶部31にプログラムの部分を格納する際の形式は、互いに同じ形式(第1および第2領域を含む形式;例えば、クラスファイルの形式など)であり、暗号化されている場合、第1領域には、ダミープログラムが格納されている。したがって、暗号化されていることを第三者が気付き難くすることができ、プログラム実行装置3の安全性をさらに向上できる。
また、以上のように、本実施形態に係るプログラム開発装置2は、上記構成のプログラム実行装置3により実行されるプログラムの部分を生成するための情報処理装置であって、中間言語のプログラムの部分を、上記プログラム実行装置3の暗号解除部51が復号可能な形式で暗号化する暗号化処理部21を備えている。また、本実施形態に係るプログラミングシステム1は、上記復号するプログラム実行装置3のいずれかと、中間言語のプログラムの部分を、上記プログラム実行装置3の暗号解除部51が復号可能な形式で暗号化する暗号化処理部21とを備えていることを特徴としている。
当該構成でも、上記暗号化処理部21によって暗号化されたプログラムの部分が必要と判断されると、当該暗号化されたプログラムの部分は、上記暗号解除部51によって復号されて、クラスローダ41によってロードされ、実行装置側コンパイラ42により実行される。したがって、上述したように、よりプログラムの内容を第三者が取得しにくく、プログラム開発装置2およびプログラム実行装置3を含むプログラミングシステム1の安全性を向上できる。
本発明によれば、プログラム実行時にプログラムの各部分の要否が動的に判定され、必要と判断された部分が復号されるので、よりプログラムの内容を第三者が取得しにくく、より安全な情報処理装置が実現されるので、制御システムにおいてデバイスの状態を表示すると共にデバイスへの指示を受け付ける制御用表示装置をはじめとして、種々のプログラム実行装置、並びに、そのプログラムを生成するプログラム実行装置として広く好適に使用できる。
本発明の実施形態を示すものであり、プログラミングシステムの要部構成を示すブロック図である。 上記プログラミングシステムに設けられたプログラム開発装置およびプログラム実行装置に格納される、暗号化されたデータシーケンスのデータ構造の例を示す図面である。 上記プログラム実行装置の動作を示すフローチャートである。
符号の説明
1 プログラミングシステム(情報処理システム)
2 プログラム開発装置(情報処理装置)
3 プログラム実行装置(情報処理装置)
21 暗号化処理部(暗号化手段)
31 記憶部(記憶装置)
41 クラスローダ(プログラムローダ)
42 実行装置側コンパイラ(プログラム実行手段)
43 制御部(判定手段)
51 暗号解除部(復号手段;監視手段)

Claims (8)

  1. 中間言語のプログラムを複数の部分に分割して管理すると共に、プログラム実行時に各部分の要否を判定する判定手段と、
    上記判定手段によって必要と判断された部分を、上記プログラムの各部分を暗号化して記憶する記憶装置から読み出して復号する復号手段と、
    上記復号手段が復号した上記プログラムの部分をメモリにロードするプログラムローダと、
    当該ロードされたプログラムの部分を、その装置のプロセッサにネイティブな機械語に変換した後で実行するプログラム実行手段とを備える情報処理装置であって、
    上記復号手段は、上記情報処理装置にネイティブな機械語で記述されており、
    上記情報処理装置のプロセッサは、上記プログラム実行手段による、中間言語から機械語への変換処理を介することなく、上記復号手段の機械語を実行することによって、上記復号手段として動作し、
    上記プログラムローダは、暗号化されていない中間言語のプログラムの部分もメモリにロード可能であり、
    暗号化されているか否かに拘わらず、上記記憶装置の記憶領域のうち、上記プログラムの各部分を格納する領域には、プログラムを格納するための第1領域と、当該プログラムに関連するデータを格納するための第2領域とが含まれており、
    暗号化されている場合は、上記第1領域には、ダミープログラムが格納され、上記暗号化されたプログラムの部分は、上記第2領域に格納されていると共に、
    上記復号手段は、暗号化されたプログラムの部分を、上記記憶装置の第2領域から読み出して復号することを特徴とする情報処理装置。
  2. 上記情報処理装置のメモリには、当該情報処理装置のオペレーティングシステム、デバイスドライバおよびデバイスの少なくとも一つからのみアクセス可能な特定領域と、上記オペレーティングシステム上で動作するアプリケーションプログラムからアクセス可能な通常領域とが設けられており、
    上記復号手段は、上記部分の変換により生成したネイティブな機械語のプログラムを、上記特定領域に設けられた領域を介して、上記プログラムローダへ与えることを特徴とする請求項1記載の情報処理装置。
  3. 上記情報処理装置のメモリの内容をダンプするダンププログラムが動作しているか否かを監視し、ダンププログラムの動作を検出すると、当該ダンププログラムおよび上記復号手段の少なくとも一方の動作を停止させる監視手段を備えていることを特徴とする請求項1または2記載の情報処理装置。
  4. 0以上の任意の整数をi、
    上記暗号化されたプログラムの部分を、0次の上記暗号化されたプログラムの部分、
    i次の暗号化されたプログラムの部分をダミープログラムに関連する特定データとして当該ダミープログラムに付加する処理によって生成されるデータを、(i+1)次の暗号化されたプログラムの部分、
    (i+1)次の暗号化されたプログラムの部分から、上記特定データとしてのi次の暗号化されたプログラムの部分を抽出する処理を抽出処理、
    nを予め1以上に定められた整数とするとき、
    上記第2領域には、暗号化されている場合、n次の暗号化されたプログラムの部分が記憶されており、
    上記復号手段は、上記第2領域に格納されたデータに対して、n回、上記抽出処理を繰り返すことによって、上記暗号化されたプログラムの部分を読み出して復号することを特徴とする請求項1、2または3記載の情報処理装置。
  5. 請求項1〜のいずれか1項に記載のプログラムの部分を生成するための情報処理装置であって、
    中間言語のプログラムの部分を、上記復号手段が復号可能な形式で暗号化する暗号化手段を備えていることを特徴とする情報処理装置。
  6. 請求項1〜のいずれか1項に記載のプログラムの部分を生成するための情報処理装置と、
    中間言語のプログラムの部分を、上記情報処理装置の復号手段が復号可能な形式で暗号化する暗号化手段とを備えていることを特徴とする情報処理システム。
  7. 請求項1〜のいずれか1項に記載の情報処理装置の各手段として、コンピュータを動作させるプログラム。
  8. 請求項記載のプログラムが記録されたコンピュータ読み取り可能な記録媒体。
JP2005282814A 2005-09-28 2005-09-28 情報処理装置、情報処理システム、プログラムおよび記録媒体 Active JP4727366B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005282814A JP4727366B2 (ja) 2005-09-28 2005-09-28 情報処理装置、情報処理システム、プログラムおよび記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005282814A JP4727366B2 (ja) 2005-09-28 2005-09-28 情報処理装置、情報処理システム、プログラムおよび記録媒体

Publications (2)

Publication Number Publication Date
JP2007094728A JP2007094728A (ja) 2007-04-12
JP4727366B2 true JP4727366B2 (ja) 2011-07-20

Family

ID=37980380

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005282814A Active JP4727366B2 (ja) 2005-09-28 2005-09-28 情報処理装置、情報処理システム、プログラムおよび記録媒体

Country Status (1)

Country Link
JP (1) JP4727366B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009134351A (ja) * 2007-11-28 2009-06-18 Aplix Corp プログラム導入方法、組み込みシステム、携帯端末およびプログラム
US9817680B1 (en) 2008-08-04 2017-11-14 Open Invention Network, Llc Application configuration tool
CN102360412B (zh) * 2011-09-26 2014-07-02 飞天诚信科技股份有限公司 Java源代码的保护方法和系统
KR101740133B1 (ko) * 2015-08-10 2017-05-26 라인 가부시키가이샤 어플리케이션의 코드를 보호하기 위한 시스템 및 방법
WO2017183087A1 (ja) * 2016-04-18 2017-10-26 三菱電機株式会社 復号装置、復号コンパイル方法及び復号コンパイルプログラム
KR102266342B1 (ko) * 2019-05-27 2021-06-16 고려대학교 산학협력단 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치
CN113489723B (zh) * 2021-07-05 2022-11-22 平安科技(深圳)有限公司 数据传输方法、系统、计算机设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000132388A (ja) * 1998-10-19 2000-05-12 Internatl Business Mach Corp <Ibm> ソフトウェア・コンポ―ネントを処理および配布するための方法および装置
JP2001318786A (ja) * 2000-05-10 2001-11-16 Nec Corp プログラム構築方法及びそのプログラムの実行方法
JP2005202845A (ja) * 2004-01-19 2005-07-28 Yaskawa Electric Corp スクリプト処理方法およびスクリプト処理計算機
JP2007233426A (ja) * 2004-04-05 2007-09-13 Matsushita Electric Ind Co Ltd アプリケーション実行装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000132388A (ja) * 1998-10-19 2000-05-12 Internatl Business Mach Corp <Ibm> ソフトウェア・コンポ―ネントを処理および配布するための方法および装置
JP2001318786A (ja) * 2000-05-10 2001-11-16 Nec Corp プログラム構築方法及びそのプログラムの実行方法
JP2005202845A (ja) * 2004-01-19 2005-07-28 Yaskawa Electric Corp スクリプト処理方法およびスクリプト処理計算機
JP2007233426A (ja) * 2004-04-05 2007-09-13 Matsushita Electric Ind Co Ltd アプリケーション実行装置

Also Published As

Publication number Publication date
JP2007094728A (ja) 2007-04-12

Similar Documents

Publication Publication Date Title
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
JP4727366B2 (ja) 情報処理装置、情報処理システム、プログラムおよび記録媒体
US8756434B2 (en) System and method for executing an encrypted binary from a memory pool
EP2962193B1 (en) Compiler based obfuscation
EP2553570B1 (en) Method for linking and loading to protect applications
US8881290B2 (en) Method and apparatus for computer code obfuscation and deobfuscation using boot installation
CN103413073B (zh) 一种保护java可执行程序的方法及设备
WO2015058620A1 (en) Method and apparatus for generating installation package corresponding to an application and executing application
US7707631B2 (en) Device and method for processing a program code
JP2001134337A (ja) 暗号解読コンパイラ
CN107430650B (zh) 保护计算机程序以抵御逆向工程
US7970133B2 (en) System and method for secure and flexible key schedule generation
JP6392446B2 (ja) クラウドベースのアプリケーションセキュリティサービスの提供方法及びシステム
Protsenko et al. Dynamic self-protection and tamperproofing for android apps using native code
CN111832014A (zh) 基于动态加载的Java SDK代码加解密方法及终端
CN107871066B (zh) 基于安卓系统的代码编译方法及装置
CN112434266A (zh) 一种shellcode控制流扁平化混淆方法
US8838996B2 (en) Non-transitory computer readable medium, program protection apparatus, and program protection method
KR102173151B1 (ko) 원본코드 자동추출장치 및 원본코드 자동추출방법
JP2003280755A (ja) 自己復元型プログラム、プログラム生成方法及び装置、情報処理装置並びにプログラム
JP2000132388A (ja) ソフトウェア・コンポ―ネントを処理および配布するための方法および装置
CN117313046A (zh) 一种代码加固方法、代码加载方法、设备及介质
CN109543433B (zh) 软件开发工具包加密方法、装置、计算机和存储介质
KR20180028666A (ko) 역공학 방지 방법 및 장치
US6931634B2 (en) Encrypted compiler

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071220

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101109

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101228

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110125

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110217

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20110328

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

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

R150 Certificate of patent or registration of utility model

Ref document number: 4727366

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

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250