説明

情報処理システム、情報処理方法

【課題】Javaバイトコード等の中間コードを実行する実行環境である仮想マシンを用いてプログラムを実行する場合において、中間コードを暗号化した状態でプログラムの実行を可能にするプログラム実行方法を実現する。
【解決手段】本発明のプログラム実行方法は、制御手段が、実行対象の中間コードを取得し、中間コードが暗号化されているか否かを判断するステップと、中間コードが暗号化されていないと判断されたとき、既定の中間コード解釈方式に従って中間コードを解釈実行するステップと、中間コードが暗号化されていると判断されたとき、中間コードの復号化処理をおこなった上で、既定の中間コード解釈方式に従って中間コードを解釈実行するステップと、を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムを実行するための情報処理システム及び情報処理方法に関し、特に、中間コードのプログラムを実行する情報処理技術に関する。
【背景技術】
【0002】
プログラムを実行する形態によって、プログラム言語は大きく以下の2つに分けられる。すなわち、実行するプラットフォーム(OS、環境、設定等)に対応したネイティブコードの状態で配布・実行する形態の言語と、プラットフォームに依存しない中間コードの状態で配布・実行する形態の言語である。
【0003】
前者の代表例はVBやC言語である。VB等のプログラム言語の場合、ソースコードをコンパイルすると、コンパイラ内部で使用される中間コードを経て、バイナリ形式のネイティブコード(オブジェクトコード)に変換される。最終的な配布物は、1ステップ単位のCPU命令を羅列したバイナリ(マシン語)であるため、ソースコードに復元することはほぼ不可能であり、ソースコード盗用のおそれは小さい。
【0004】
後者の代表例はJava(登録商標)である。Javaで記述されたソースコードは、コンパイル時にJavaバイトコードと呼ばれる中間コードに変換される。ソフトウェアは中間コードの状態で配布される。そして、実行時に、Java仮想マシンと呼ばれるソフトウェアによって、実行するプラットフォームに対応したネイティブコードに変換され、実行される。プラットフォーム間の違いはJava仮想マシンが吸収するため、仮想マシン上で動作するJavaプログラム(中間コード)は、プラットフォームの違いを意識しなくてもよいという特徴がある。
【0005】
しかし、Javaコンパイラで生成した中間コードはバイナリ形式であるが、OSに依存したマシン語のバイナリ(ネイティブコード)には変換されない。最終的な配布物である中間コードは、ソースコードとほぼ一対一のデータ構造であるため、逆コンパイルによって容易にソースコードを復元することができる。そのため、開発資産であるソースコードを盗用されるおそれがある。
【0006】
そこで、中間コードの逆コンパイルによるソースコードの流出を防止したい場合、ProGuard等の難読化ツールや、JLicenser等の暗号化ツールを使用する手法が知られている(非特許文献1,2)。難読化ツールとは、変数名や関数名をランダムな文字列に置き換えたり、実行されない不正な命令を混入したりすることによって、逆コンパイラをハングアップさせるものである。暗号化ツールとは、中間コードを暗号化した状態で配布することにより、逆コンパイルを不可能とするものである。
【非特許文献1】「ProGuard」、[online]、[平成17年12月26日検索]、インターネット<URL:http://proguard.sourceforge.net/>
【非特許文献2】「大金システム設計事務所」、[online]、[平成17年12月26日検索]、インターネット<URL:http://www.ogane.com/>
【発明の開示】
【発明が解決しようとする課題】
【0007】
しかし、難読化ツールは中間コードを読みづらくするものにすぎず、ロジック自体に変更はないため、中間コードを解析することは可能である。また、暗号化ツールを用いて中間コードを暗号化する場合であっても、プログラムの実行に必要な全ての中間コードをプログラム実行前に予め復号化しておく必要があるため、プログラムを実行している最中であれば、復号化された中間コードに対する逆コンパイルが可能であり、逆コンパイルを完全に防止することは困難であった。また、暗号化した中間コードを配布して、実行前に事前に復号化するため、システムの実行には専用の付属ソフトウェアが必要となる。
【0008】
本発明は、かかる実情に鑑み、Javaバイトコード等の中間コードを実行する実行環境である仮想マシンを用いてプログラムを実行する場合において、中間コードを暗号化した状態でプログラムの実行を可能にするプログラム実行方法を実現することを目的とするものである。
【課題を解決するための手段】
【0009】
上記課題を解決するため、本発明のプログラム実行方法は、制御手段において所定のプログラム言語で記述されたソースコードを変換した中間コードのプログラムを解釈実行するプログラム実行方法であって、制御手段が、実行対象の中間コードを取得し、中間コードが暗号化されているか否かを判断するステップと、中間コードが暗号化されていないと判断したとき、既定の中間コード解釈方式に従って中間コードを解釈実行するステップと、中間コードが暗号化されていると判断したとき、中間コードの復号化処理をおこなった上で、既定の中間コード解釈方式に従って中間コードを解釈実行するステップと、を備える。
【0010】
このとき、制御手段は、制御手段が直接読み書きする主記憶手段上で、復号化処理を行うものであると好ましい。
【0011】
また、制御手段は、取得した中間コードが暗号化されていることを示すデータが、当該中間コード内に含まれるか否かによって、中間コードが暗号化されているか否かを判断するものであると好ましい。
【0012】
さらに好適には、制御手段は、取得する中間コードの暗号化方式に応じて、復号化処理を行う際の復号化方式を切り替える。
【0013】
また、本発明のプログラム実行システムは、所定のプログラム言語で記述されたソースコードを変換した中間コードを取得する取得手段と、取得された中間コード内に、当該中間コードが暗号化されていることを示すデータが含まれるか否かを判断する暗号化判断手段と、暗号化判断手段によって中間コードが暗号化されていると判断されたとき、中間コードを主記憶装置上で復号化する復号化手段と、中間コード又は復号化された中間コードを解釈実行する処理手段と、を備える。なお、本発明において「システム」とは、実体的な装置及び仮想的な装置を含む。
【0014】
上記プログラム実行システムは、復号化手段の復号化方式を切り替える切替手段と、をさらに備えるものであると好ましい。好適には、切替手段は、復号化方式毎に個別に定められた復号化処理を実行するためのクラスをロードすることによって、復号化手段の復号化方式を切り替える。
【0015】
本発明のプログラムは、所定のプログラム言語で記述されたソースコードを変換した中間コードを解釈実行するための仮想マシン(仮想機械)を備えるコンピュータに、仮想マシンが取得する中間コードが暗号化されているか否かを検出するステップと、取得した中間コードが暗号化されていないと検出されたとき、取得した中間コードを仮想マシンに渡すステップと、取得した中間コードが暗号化されていると検出されたとき、取得した中間コードを復号化し、当該復号化されたものを仮想マシンに渡すステップと、を実行させる。
【0016】
また、本発明のプログラムは、本発明のプログラム実行方法の各ステップをコンピュータに実行させることを特徴とする。本発明のプログラムは、CD−ROM等の光学ディスク、磁気ディスク、半導体メモリなどの各種の記録媒体を通じて、又は通信ネットワークなどを介してダウンロードすることにより、コンピュータにインストール又はロードすることができる。
【0017】
なお、発明において、「手段」とは、単に物理的手段を意味するものではなく、その手段が有する機能をソフトウェアによって実現する場合も含む。また、1つの手段が有する機能が2つ以上の物理的手段により実現されても、2つ以上の手段の機能が1つの物理的手段により実現されてもよい。
【0018】
本発明では、特に指示しない限り、「中間コード」とは、特定のプラットフォーム(OS、環境、設定等)に依存しないバイナリ形式の実行用コードであり、仮想マシンによってネイティブコードに変換されてから実行されるものである。具体的には、例えば、Javaのコンパイラが生成する実行用コードであるJavaバイトコードが該当する。
【0019】
また、本発明において「仮想マシン」とは、中間コードをそのプラットフォームのネイティブコードに変換して実行するソフトウェアである。中間コードは、配布時にはプラットフォームから独立した独自の形式になっており、そのままでは実行することができない。そのため、そのプラットフォーム固有の形式(ネイティブコード)に変換するソフトウェアを用意して、変換しながら実行する。この変換と実行を行うものが仮想マシンである。具体的には、例えば、Javaバイトコードをそのプラットフォームのネイティブコードに変換して実行するJava仮想マシンが該当する。
【0020】
「プラットフォーム」とは、アプリケーションソフトを動作させる際の基盤となるOSの種類や環境、設定、ハードウェアの種類などのことである。「Java」とは、プログラミング言語である。
【発明の効果】
【0021】
本発明によれば、中間コードを暗号化した状態でプログラムを実行可能なプログラム実行方法を実現することができる。中間コードを暗号化した形で配布することができ、かつ、実行前に事前に復号化しなくてもよいので、逆コンパイルによるソースコードの流出を防ぐことができる。また、本発明に係るプログラム実行方法は、中間コードを実行する仮想マシン以外に特別なアプリケーションを必要としないので、従来の暗号化ツールに比べて汎用性が高い。さらに、プログラム実行中に復号化方式を適宜変えることができるので、中間コード毎に任意の暗号化を施すことが可能となる。従来の暗号化ツールでは、復号化に必要なライセンスキーが分かれば全ての中間コードを復号化可能であったが、本発明によれば、中間コード毎に異なる暗号化方式を採用することができるので、中間コードが復号化され、逆コンパイルによりソースコードが流出するリスクを、単一の暗号化方式を利用する場合以上に抑えることができるという効果がある。
【発明を実施するための最良の形態】
【0022】
以下、本発明の実施の形態について図面を参照して具体的に説明する。
【0023】
図1は本発明に係るプログラム実行方法を実装する処理装置10の構成を示す制御ブロック図の一例である。処理装置10は、プログラムの実行に関して処理装置10全体の処理及び動作を統括制御する制御手段12、制御手段12の作業領域として一時的に情報を記憶する主記憶手段14、制御手段12の処理及び動作に必要な各種情報を予め記憶する読出用記憶手段16、プログラムの実行に関して処理装置10の外部から各種情報を入出力(通信を含む)する入出力手段18を備える。主記憶手段14は、制御手段12によって直接読み書きされるものである。
【0024】
処理装置10の具体例として、専用又は汎用のコンピュータやマイクロコンピュータ等が挙げられる。例えば、汎用のパーソナルコンピュータは、制御手段12としてのCPU、主記憶手段14としてのRAM等の主記憶装置、読出用記憶手段16としてのROM、入出力手段18としての入出力(I/O)インタフェースを備え、これらがバスにより接続される。
【0025】
なお、処理装置10は、単一のコンピュータより構成されるものであっても、ネットワーク上に分散した複数のコンピュータより構成されるものであってもよい。制御手段12としてのCPUは、RAM等の主記憶手段14に記憶される所定のプログラム、ROM等の読出用記憶手段16に記憶される所定のプログラム、又は入出力手段18を介して外部(外部記憶装置、ネットワーク上のコンピュータ等)から読み出される所定のプログラムを実行することにより、各種機能実現手段として処理装置10を機能させる。
【0026】
図2は制御手段12及び主記憶手段14の主な機能構成を示す機能ブロック図の一例である。制御手段12は、中間コード処理手段20と、中間コード取得手段22と、暗号化判断手段24と、復号化手段26と、復号化方式切替手段28とを含んで構成され、仮想マシンとして機能する。主記憶手段14は、実行中間コード格納領域30と、復号化作業領域32とを含んで構成される。なお、中間コード処理手段20及び中間コード取得手段22は、仮想マシンが本来備える機能手段である。
【0027】
中間コード処理手段20は、中間コードをそのプラットフォームのネイティブコードに変換して実行する機能を備え、主記憶手段14の実行中間コード格納領域30に格納された中間コードを解釈し、当該中間コードに記述された所定の処理を実行する。
【0028】
中間コード取得手段22は、プログラムを実行する際に、中間コードを取得して主記憶手段14の実行中間コード格納領域30に格納する機能を備える。このとき、プログラムの実行に必要な個々の中間コードを、プログラム実行中に必要なものだけを順次読み込む。中間コードはメインプログラムに関するものと、プログラムの実行に必要な個々の機能がファイル単位に分割されたものがある。中間コード取得手段22は、ROM等の読出用記憶手段16に記憶された中間コードまたは処理装置10の外部に記憶された中間コードを必要に応じて順次取得する。処理装置10の外部から中間コードを取得する場合は、外部記憶装置またはネットワーク上のコンピュータ等から入出力手段18を介して取得する。
【0029】
暗号化判断手段24は、中間コード処理手段20が実行中間コード格納領域30に格納された中間コードを実行する際に、当該中間コードが暗号化されているか否かを判断する機能を備える。好ましくは、暗号化された中間コードの先頭に、当該中間コードが暗号化されたものであることを示す所定のタグ(識別子)を付与しておき、中間コード処理手段20が主記憶手段14の実行中間コード格納領域30に格納された中間コードを解釈実行する最初の段階で、当該実行しようとする中間コードの先頭に所定のタグが付加されているか否かを確認し、所定のタグが付加されているとき、当該中間コードは暗号化されていると判断し、所定のタグが付加されていないとき、当該中間コードは暗号化されていない通常の中間コードであると判断する。また、中間コード取得手段22が中間コードを取得した後、中間コード処理手段20が当該中間コードの解釈実行を始めるまでの間に、当該中間コードが暗号化されているか否かを暗号化判断手段24が判断するものであってもよい。
【0030】
復号化手段26は、暗号化判断手段24において、実行中間コード格納領域30に格納された中間コード(解釈実行しようとする中間コード)が暗号化されていると判断されたとき、当該暗号化された中間コード(以下、「暗号化中間コード」という)を、中間コード処理手段20が処理可能な通常の中間コードに所定の方式で復号化する機能を備える。好ましくは、復号化手段26は、主記憶手段14の復号化作業領域32を用いて中間コードの復号化処理を行い、実行中間コード格納領域30に格納されている暗号化中間コードを、復号化された通常形式の中間コードに置き換える。また、暗号化中間コードの復号化処理が完了した後、中間コード処理手段20が復号化作業領域32に格納された中間コードを解釈実行するように制御されてもよい。
【0031】
復号化方式切替手段28は、復号化手段26の復号化処理の方式を切り替える機能を備える。本発明では、中間コードの暗号化及び復号化を行う方式として、ビット反転方式、ビットシフト方式、公開鍵暗号方式、共通鍵暗号方式、その他任意の方式を適用可能である。そのため、復号化手段26は、暗号化中間コードの暗号化方式に応じた復号化処理を行う必要がある。そこで、実行しようとする暗号化中間コードの暗号化方式に応じて、復号化方式切替手段28は、復号化手段26の復号化方式を事前に切り替えることが好ましい。
【0032】
例えば、Javaの場合、復号化方式の切り替えは、Javaが標準的に備えるクラスローダを利用して実現することが好ましい。クラスローダとは、クラスをメモリ(主記憶手段14)にロード(load)するためのオブジェクトであり、プログラムの実行中に必要なクラス(モジュール)を動的にロード及び/又はリンクすることができる機能である。本発明においては、制御手段12を暗号化判断手段24及び復号化手段26として機能させるためのクラスを、各暗号化方式毎に予め用意しておく。そして、暗号化中間コードを取得する前に、当該暗号化方式に対応するクラスをクラスローダによりロードして、復号化方式(復号化手段26)を切り替える。
【0033】
実行中間コード格納領域30は、中間コード取得手段22により取得された中間コード及び暗号化中間コードを格納し、中間コード処理手段20が実行する中間コードを格納するための一時的な記憶領域である。実行中間コード格納領域30に格納された中間コードは、当該中間コードに基づいた処理の終了後、削除されることが好ましい。なお、実行中間コード格納領域30は、主記憶手段14上の物理的又は論理的に固定された特定領域を意味するものではなく、単に中間コード処理手段20が解釈実行しようとする中間コードが格納されている領域を指す。
【0034】
復号化作業領域32は、復号化手段26が暗号化中間コードの復号化処理を行うときに、処理途中のデータ等を一時的に格納するための作業領域である。なお、復号化作業領域32も、主記憶手段14上の物理的又は論理的に固定された特定領域を意味するものではない。
【0035】
次に、処理装置10により実現される、本発明に係るプログラム実行処理について説明する。まず、中間コードを暗号化中間コードに変換する処理について説明し、その後、暗号化中間コードによるプログラム実行処理について説明する。
【0036】
図3は、実行対象の中間コードを暗号化中間コードに変換する処理の手順を示すフローチャートである。具体的には、中間コードを読み込み、任意の暗号化処理を施したうえで暗号化された中間コードであることを表す情報を埋め込んで出力する処理を行う。ここでは、例えば、使用する暗号化手法として中間コードの情報をすべてビット単位で反転するという暗号化手法を用いるものとする。
【0037】
まず、暗号化すべき入力元の中間コードファイルをオープンし(S50)、続いて、暗号化結果となる出力先の中間コードファイルをオープンする(S52)。次に、中間コードが暗号化されていることを示す情報(以下、「暗号化タグ」という)を出力ファイルに書き込む(S54)。ここで、暗号化タグとは、暗号化中間コードの先頭に付加される情報であり、中間コードの先頭に暗号化タグが付加されている場合には、当該中間コードが暗号化されていることを意味するものである。どのような情報を暗号化タグとして用いるかは、少なくとも暗号化方式毎に予め設定される。
【0038】
次に、入力元ファイルの最後の中間コードまで処理を終えたかどうかを判定する(S56)。ファイルの最後ではないとき、中間コードの入力を行い(S58)、入力した中間コードのビットを反転し(S60)。出力先ファイルにビット反転した中間コードを書き込む(S62)。入力ファイルの最後までS56からS60の処理を繰り返し、ファイルの中間コード全体に対してビット反転を行う。S56でファイルの最後であると判定したとき、入力元の中間コードファイルをクローズする(S64)。そして、出力先の中間コードファイルをクローズする(S66)。こうして、中間コードが暗号化され、かつ、ファイルの先頭に暗号化タグが付与された、暗号化中間コードが生成される。
【0039】
図4は、暗号化中間コードを復号化し実行する処理の手順を示すフローチャートである。具体的には、入力された中間コードが暗号化中間コードであるかをチェックし、暗号化中間コードであれば復号化処理を実行する。ここでは、例えば、使用する暗号化手法として中間コードの情報をすべてビット単位で反転するという暗号化手法を用いるものとする。
【0040】
まず、仮想マシンによってメモリ(実行中間コード格納領域30)に読み込まれた実行対象の中間コードに対し、当該中間コードの先頭に所定の情報、すなわち暗号化タグ、が埋め込まれているかどうかを確認する(S70)。暗号化タグが埋め込まれている場合、当該中間コードは暗号化されていることになるので、復号化処理を行う。復号化処理はまず、復号化処理を行うための作業領域(復号化作業領域32)を初期化し(S72)、実行対象の中間コードの読み込み位置を暗号化タグのサイズ分だけ中間コードの最後方向にずらす(S74)。
【0041】
その後、最後の中間コードまで処理を終えたかどうかを判定する(S76)。中間コードの最後ではないとき、実行対象の中間コード(暗号化中間コード)の入力を行い(S78)、入力した中間コードのビットを反転し(S80)、復号化作業領域にビット反転した中間コードを書き込む(S82)。このように、入力ファイルの最後までS76〜S82の処理を繰り返し、ファイルの中間コード全体に対してビット反転を行なう。
【0042】
そして、実行対象の中間コードが最後であると判定したとき、メモリに格納された実行対象の中間コード(暗号化中間コード)を、復号化処理によって得られた中間コードと置き換える(S84)。仮想マシンによって読み込まれた実行対象の中間コードの先頭に暗号化タグを発見できない場合、当該中間コードは暗号化されていない通常の中間コードであると判断できるので、実行対象の中間コードに変更は加えない。こうして、暗号化されていなければ、そのまま中間コードを実行し、暗号化中間コードであれば復号化された通常の中間コードに変換した上で中間コードを実行する。
【0043】
ここで、暗号化中間コードの解釈実行をするとき、既定の解釈方式では実行できない暗号化された中間コードであれば復号化処理を施してから解釈実行する仮想マシンが考えられる。しかし、復号化可能な暗号化方式が一定で変更できない場合、ある暗号化中間コードの暗号が解読されると、他の全ての暗号化中間コードをも解読されてしまうおそれがある。そこで、好適には、任意の形式で暗号化された実行対象の中間コードの先頭に暗号化した中間コードであることを表す情報を埋め込み、該プログラムを実行する仮想マシンにおいて、中間コードの先頭を読み出し、暗号化された中間コードの場合は、該プログラム実行中に登録された任意の中間コード復号化方式を用いて暗号化中間コードの復号化を実行し、復号化された中間コードを既定の中間コード解釈方式で実行することが望ましい。
【0044】
図5及び図6は、仮想マシンがプログラムを実行する処理の手順を示すフローチャートである。
【0045】
図5は、仮想マシンがメインプログラムとなる中間コードを実行する処理の手順を示すフローチャートである。まず、中間コード取得手段22が、メインプログラムとなる中間コードをメモリ(実行中間コード格納領域30)上に読み込む(S90)。そして、読み込んだ中間コードを対象として図6の中間コード解釈処理を実行する(S92)。メインプログラムとなる中間コードの解釈処理が終了するとともに仮想マシンによるプログラムの実行も終了する。
【0046】
図6は、仮想マシンが中間コードを解釈し、実行する処理の手順を示すフローチャートである。まず、中間コード処理手段20は、中間コードの最後まで処理を終えたかどうかを判定する(S100)。中間コードの最後ではないとき、解釈中の中間コード命令が中間コード復号化処理の変更命令であるかどうかを判定する(S102)。例えば、所定の復号化方式に対応した復号化処理を行うためのクラスを読み込む必要があるかどうかにより、当該判定処理を実現できる。判定の結果、中間コードの復号化処理変更命令でないとき、解釈中の中間コード命令が外部中間コードの読み込み命令であるかどうかを判定する(S104)。外部中間コードの読み込み命令でないとき、メモリに格納されている中間コードに基づいて、中間コード処理手段20が既定の中間コード実行処理を行なう(S106)。
【0047】
S102において、解釈中の中間コード命令が中間コードの復号化処理変更命令であると判定されたとき、復号化方式切替手段28は、該仮想マシンが使用する中間コードの復号化方式を、当該変更命令により指定される復号化方式に変更する(S108)。例えば、ビット反転方式からビットシフト方式へ復号化方式を切り替える。この切替処理は、例えば、復号化方式毎に個別に定められた復号化処理を実行するためのクラスを予め用意しておき、取得する中間コードの暗号化方式に応じたクラスをロードすることによって、実現できる。
【0048】
S104において、外部中間コードの読み込み命令であると判定されたとき、当該読み込み命令で指定された中間コードを入出力手段18を介して外部から取得して、メモリ(実行中間コード格納領域30)上に読み込む(S110)。その後、当該外部中間コードが暗号化されているかどうか、すなわち暗号化タグが先頭に付加されているかどうかを暗号化判断手段24が判断する(S112)。暗号化タグが付加されているとき、当該外部中間コードは暗号化されているので、復号化手段26により復号化処理を実行する(S114)。当該復号化処理は図4に例示した処理を実行すればよい。こうして、仮想マシンは、取得した中間コードに対して、必要に応じて所定の復号化処理を行い、仮想マシンで解釈できる形式にした上で、中間コード処理手段20は中間コードを解釈し、実行する(S116)。このように、中間コードの最後までS100〜S106の処理を繰り返し、中間コード全体を解釈し、実行する。
【0049】
以上詳述したように、本発明によれば、暗号化された中間コードを含むプログラムを実行するにあたり、プログラムの実行に必要な全ての暗号化中間コードを事前に復号化することなくプログラム実行することができる。暗号化された中間コードは当該中間コードが読み出され実行されるときのみ復号化される。復号化された中間コードは、当該中間コードの実行時に主記憶手段に展開されるのみであり、実行前又は実行後にはメモリ等に展開されないので、第三者が復号化された中間コードを取得することが極めて困難となる。これにより、中間コードの逆コンパイルを防止することが可能となる。
【0050】
なお、各ステップは処理内容に矛盾を生じない範囲で任意に順番を変更して又は並列に実行することができる。
【0051】
なお、本発明は、上記した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において、他の様々な形で実施することができる。このため、上記実施形態はあらゆる点で単なる例示にすぎず、限定的に解釈されるものではない。
【0052】
例えば、本発明に係るプログラム実行方法は、Javaに限定されるものではない。本発明に係るプログラム実行方法は、中間コードを仮想マシンで読取実行するタイプのプログラム言語に対して適用可能である。
【図面の簡単な説明】
【0053】
【図1】本発明に係るプログラム実行方法を実装する処理装置10の構成を示す制御ブロック図の一例である。
【図2】処理装置10の主な機能構成を示す機能ブロック図の一例である。
【図3】中間コードを暗号化中間コードに変換する処理の手順を示すフローチャートである。
【図4】暗号化中間コードを復号化し実行する処理の手順を示すフローチャートである
【図5】仮想マシンがメインプログラムとなる中間コードを実行する処理の手順を示すフローチャートである。
【図6】仮想マシンが中間コードを解釈し、実行する処理の手順を示すフローチャートである。
【符号の説明】
【0054】
10 処理装置
12 制御手段
14 主記憶手段
16 読出用記憶手段
18 入出力手段


【特許請求の範囲】
【請求項1】
制御手段において所定のプログラム言語で記述されたソースコードを変換した中間コードのプログラムを解釈実行する方法であって、
前記制御手段が、実行対象の中間コードを取得し、前記中間コードが暗号化されているか否かを判断するステップと、
前記制御手段は、前記中間コードが暗号化されていないと判断したとき、既定の中間コード解釈方式に従って中間コードを解釈実行するステップと、
前記制御手段は、前記中間コードが暗号化されていると判断したとき、中間コードの復号化処理をおこなった上で、既定の中間コード解釈方式に従って中間コードを解釈実行するステップと、
を備えるプログラム実行方法。
【請求項2】
前記制御手段は、前記制御手段が直接読み書きする主記憶手段上で、前記復号化処理を行うことを特徴とする請求項1記載のプログラム実行方法。
【請求項3】
前記制御手段は、前記取得した中間コードが暗号化されていることを示すデータが、当該中間コード内に含まれるか否かによって、前記中間コードが暗号化されているか否かを判断することを特徴とする請求項1又は2記載のプログラム実行方法。
【請求項4】
前記制御手段は、前記取得する中間コードの暗号化方式に応じて、前記復号化処理を行う際の復号化方式を切り替えることを特徴とする請求項1乃至3のいずれかに記載のプログラム実行方法。
【請求項5】
所定のプログラム言語で記述されたソースコードを変換した中間コードを取得する取得手段と、
前記取得された中間コード内に、当該中間コードが暗号化されていることを示すデータが含まれるか否かを判断する暗号化判断手段と、
前記暗号化判断手段によって前記中間コードが暗号化されていると判断されたとき、前記中間コードを主記憶装置上で復号化する復号化手段と、
前記中間コード又は前記復号化された中間コードを解釈実行する処理手段と、
を備えるプログラム実行システム。
【請求項6】
前記復号化手段の復号化方式を切り替える切替手段と、
をさらに備える請求項5記載のプログラム実行システム。
【請求項7】
前記切替手段は、復号化方式毎に個別に定められた復号化処理を実行するためのクラスをロードすることによって、前記復号化手段の復号化方式を切り替えることを特徴とする請求項6に記載のプログラム実行システム。
【請求項8】
所定のプログラム言語で記述されたソースコードを変換した中間コードを解釈実行するための仮想マシンを備えるコンピュータに、
前記仮想マシンが取得する中間コードが暗号化されているか否かを検出するステップと、
前記取得した中間コードが暗号化されていないと検出されたとき、前記取得した中間コードを前記仮想マシンに渡すステップと、
前記取得した中間コードが暗号化されていると検出されたとき、前記取得した中間コードを復号化し、当該復号化されたものを前記仮想マシンに渡すステップと、
を実行させるためのプログラム。
【請求項9】
請求項1乃至4のいずれかに記載のプログラム実行方法をコンピュータに実行させるためのプログラム。
【請求項10】
請求項1乃至4のいずれかに記載のプログラム実行方法をコンピュータに実行させるためのプログラム又は請求項8に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2007−172526(P2007−172526A)
【公開日】平成19年7月5日(2007.7.5)
【国際特許分類】
【出願番号】特願2005−372736(P2005−372736)
【出願日】平成17年12月26日(2005.12.26)
【出願人】(500245972)日本コンピューター株式会社 (1)
【Fターム(参考)】