JP3377087B2 - ソフトウェア・コンポーネントを処理および配布するための方法および装置 - Google Patents

ソフトウェア・コンポーネントを処理および配布するための方法および装置

Info

Publication number
JP3377087B2
JP3377087B2 JP28614699A JP28614699A JP3377087B2 JP 3377087 B2 JP3377087 B2 JP 3377087B2 JP 28614699 A JP28614699 A JP 28614699A JP 28614699 A JP28614699 A JP 28614699A JP 3377087 B2 JP3377087 B2 JP 3377087B2
Authority
JP
Japan
Prior art keywords
compiled
jit
encrypted
pseudo
java class
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
JP28614699A
Other languages
English (en)
Other versions
JP2000132388A (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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2000132388A publication Critical patent/JP2000132388A/ja
Application granted granted Critical
Publication of JP3377087B2 publication Critical patent/JP3377087B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6209Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/007Encryption, En-/decode, En-/decipher, En-/decypher, Scramble, (De-)compress
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2107File encryption

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Storage Device Security (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、Javaメソッド
の暗号化に関し、具体的には、配布されたJavaプロ
グラムの実際の実装を隠し、その使用法を制限するため
の手段としての暗号化の使用に関する。
【0002】
【従来の技術】Java言語の長所の1つが、バイト・
コードの高水準な性質であり、これによって、簡単に理
解できプラットフォーム独立なプログラミング言語が可
能になる。高水準バイト・コードの短所は、理解しやす
いソース・コードに変換できることである。たとえば、
バイト・コードは、再コンパイル時に可読なラベルと変
数名を保持している。ソフトウェア開発者は、簡単にJ
avaクラスをリバース・エンジニアリングすることが
できるので、Javaアプリケーションの開発を思いと
どまる。Javaアプリケーションの多くの所有権情報
を、リバース・エンジニアリングを介して暴露すること
ができる。
【0003】リバース・エンジニアリングの問題に対す
る解決策は、送信された形のクラスを隠すために暗号化
を使用して、Javaプログラムを少なくとも通常のネ
イティブ・オブジェクト・コードと同等に安全にするこ
とである。しかし、アプリケーションは、使用する前に
復号化されなければならず、これによって、アプリケー
ションを使用できるユーザが、復号化の方法を知ってい
るユーザに制限される。
【0004】もう1つの解決策は、出荷の前にアプリケ
ーションを暗号化し、暗号化されたアプリケーションを
出荷し、計算機に導入する前に復号化することである。
この解決策は、ホスト計算機にアプリケーションを統合
するための独自の導入プログラムを有する独立型アプリ
ケーションの場合に機能する。しかし、インターネット
上のアプレットは、JVMによって直接にダウンロード
され、アプレットを復号化することのできる前処理を有
しない。JVMは、サン・マイクロシステムズ社によっ
て定義されたものであり、アプレットのダウンロードを
制御する。暗号化されたアプレットを扱うためにJVM
を変更する予定は現在のところ存在せず、一方的にJV
Mを変更すると、その特定のJVMが非標準になるはず
である。特定の種類の復号化のためにこのように普及し
た標準コンポーネントを変更することには困難が伴うの
で、このアプローチは不適切である。
【0005】Java仮想マシン(JVM)は、Jav
aプログラミング言語の主要コンポーネントである。こ
れは、オペレーティング・システムとプラットフォーム
にとって独特であり、Javaアプリケーションからの
Javaバイト・コード命令を解釈し、組込みルーチン
とオペレーティング・システム・ルーチンを使用してJ
avaバイト・コード命令を処理する。JVMによるバ
イト・コードの解釈の短所の1つが、同一のバイト・コ
ードが何回も解釈される可能性があることである。これ
は、Java解釈の処理が、コンパイルされたコード
(たとえばC++のオブジェクト・コード・プログラ
ム)よりかなり遅い理由の1つである。
【0006】Javaバイト・コードを、解釈するので
はなくコンパイルすると、プラットフォーム依存コード
が直接に実行されるようになるので、実行の速度が高ま
る。プラットフォーム固有コードは、ジャスト・イン・
タイム(JIT)によって記憶され、バイト・コードが
解釈され使用されていた時に必ず使用される。JIT
は、しばしばVMS内に含まれるプラットフォーム固有
のソフトウェア・コンパイラである。JITは、Jav
aバイト・コードをその場でネイティブ機械命令にコン
パイルし、これによって、解釈の必要を減らす。
【0007】しかし、JITコンパイルは実行に時間が
かかるので、バイト・コードが1回だけ使用される場合
には、まずコンパイルすることは誤った最適化になる可
能性がある。この場合、実際に単純な解釈の方がよいは
ずである。バイト・コードの使用状況を監視し、最もよ
く使用されるバイト・コードだけをコンパイルすること
によって、速度の向上を達成できる。このアプローチ
は、JVMの将来のリリースで実装される予定である。
開発者は、Javaバイト・コードのうちでコンパイル
によって利益を得る部分を事前にコンパイルすることも
できる。複数の計算機のためのプラットフォーム依存コ
ードを、プラットフォーム独立コードと共に含め、その
結果、Javaアプリケーションが、選択されたプラッ
トフォームに対して最適化され、選択されなかったプラ
ットフォームでも動作する(しかし、最適化はされな
い)ようにすることができる。明らかに、これはすべて
のプラットフォームの利益にならず、Javaの主要な
長所が削られるが、よく使用されるプラットフォームで
はかなりの利益が得られる。
【0008】Javaアプリケーションは、多数のJa
vaクラス・ファイル(ClassFile)から構成される。
各クラス・ファイルは、Javaオブジェクト指向クラ
スを表し、JVMでクラス・オブジェクトを構築するの
に必要なデータを含むフィールドが含まれる。このフィ
ールドには、クラスのプロパティを格納するフィール
ド、クラスの実行のためのクラス・メソッドおよび、ク
ラスをリンクするためにJVMによって使用される属性
が含まれる。クラス・ファイルは、JVMのクラス・ロ
ーダ(ClassLoader)によって取り出され、その結果、
構文を検証でき、JVMにリンクでき、参照を解決でき
るようになる。属性の中には、「コンパイル済みメソッ
ド」属性があり、これは、そのクラス・ファイルに特定
のメソッドのためのプラットフォーム依存機械コードが
含まれることを示す。そのクラス・ファイルに、そのメ
ソッドのJavaバイト・コードも含めることができ
る。
【0009】JVMは、クラス・ファイルを取り出す時
に、属性を読み取るが、あるメソッドにコンパイル済み
メソッド・コードが付加されていることが示されない場
合には、そのメソッドのバイト・コードがJVMメソッ
ド区域メモリに置かれる。メソッドにコンパイル済みコ
ードが付加されていることが示される場合には、JVM
は、コンパイル済みコードの責任をJITコンパイラに
渡す。これは、実行メモリへのコンパイル済みコードの
格納を処理するものがJITだからであり、コンパイル
済みコードの処理は、事前にコンパイルされたコードと
JITがコンパイルしたコードの両方について一貫して
いなければならないからである。
【0010】
【課題を解決するための手段】本発明の1態様によれ
ば、請求項1に記載の方法が提供される。
【0011】ソフトウェアにおける発想をより安全にす
ることによって、会社が本格的なJavaアプリケーシ
ョンを開発する可能性が高まる。既存のJIT機構を使
用することによって、このような保護は、クライアント
側の特殊化されたJVM技術に依存せず、アプリケーシ
ョン・ベンダは、適当なJIT実装を供給しなければな
らない。これによって、本発明の実施例を既存のJVM
に組み込むことが可能になる。セキュリティのレベル
は、オープンであり、ハードコーディングされた鍵か
ら、復号化処理中に配布される1回限りの鍵を使用する
オン・ザ・フライ暗号化までの範囲にわたる。後者の場
合、配布されるクラスは、それがダウンロードされた場
合に限って復号化できる。以下に、本発明の構成を明ら
かにする。 (1) Javaクラス・ファイルを処理するための方
法であって、前記Javaクラス・ファイルをサーバか
ら取り出すステップと、コンパイル済み部分があるか否
か、前記Javaクラス・ファイルを検査するステップ
と、コンパイル済み部分が検出されたとき、擬似JIT
に制御を渡すステップと、前記擬似JITによって、前
記コンパイル済み部分が暗号化されているかを検査する
ステップと、前記コンパイル済み部分が暗号化されてい
るとき、前記擬似JITによって、前記部分を復号化す
るステップと、前記コンパイル済み部分が暗号化されて
いないとき、前記擬似JITによって、真のJITに制
御を渡すステップと、を含む、前記方法。 (2) Java仮想マシンによって、前記Javaク
ラス・ファイルが前記サーバから取り出されかつコンパ
イル済み部分があるか否か、前記Javaクラス・ファ
イルが検査されるところの(1)に記載の方法。 (3) Javaクラス・ファイルを配布する方法であ
って、前記Javaクラス・ファイルのメソッドの少な
くとも一部分を暗号化するステップと、前記Javaク
ラス・ファイルの暗号化された部分のそれぞれについ
て、「コンパイル済み」属性と「暗号化済み」属性とを
セットするステップと、クライアントによってアクセス
できるサーバ上に前記Javaクラス・ファイルを格納
するステップと、前記Javaクラス・ファイルをサー
バから取り出すステップと、コンパイル済み部分がある
か否か、前記Javaクラス・ファイルを検査するステ
ップと、コンパイル済み部分が検出されたとき、擬似J
ITに制御を渡すステップと、前記擬似JITによっ
て、前記コンパイル済み部分が暗号化されているかを検
査するステップと、前記コンパイル済み部分が暗号化さ
れているとき、前記擬似JITによって、前記部分を復
号化するステップと、前記コンパイル済み部分が暗号化
されていないとき、前記擬似JITによって、真のJI
Tに制御を渡すステップと、を含む方法により処理され
る、前記方法。 (4) Javaクラス・ファイルを処理するための装
置であって、前記Javaクラス・ファイルをサーバか
ら取り出す手段と、コンパイル済み部分があるか否か、
前記Javaクラス・ファイルを検査する手段と、コン
パイル済み部分が検出されたとき、擬似JITに制御を
渡す手段と、前記擬似JITによって、前記コンパイル
済み部分が暗号化されているかを検査する手段と、前記
コンパイル済み部分が暗号化されているとき、前記擬似
JITによって、前記部分を復号化する手段と、前記コ
ンパイル済み部分が暗号化されていないとき、前記擬似
JITによって、真のJITに制御を渡す手段と、を含
む、前記装置。 (5) 前記Javaクラス・ファイルを前記サーバか
ら取り出す手段かつコンパイル済み部分があるか否か、
前記Javaクラス・ファイルを検査する手段が、Ja
va仮想マシンの一部である、(4)に記載の方法。 (6) Javaクラス・ファイルを配布するための装
置であって、前記Javaクラス・ファイルのメソッド
の少なくとも一部分を暗号化する手段と、前記Java
クラス・ファイルの暗号化された部分のそれぞれについ
て、「コンパイル済み」属性と「暗号化済み」属性とを
セットする手段と、クライアントによってアクセスでき
るサーバ上に前記Javaクラス・ファイルを格納する
手段と、前記Javaクラス・ファイルをサーバから取
り出す手段と、コンパイル済み部分があるか否か、前記
Javaクラス・ファイルを検査する手段と、コンパイ
ル済み部分が検出されたとき、擬似JITに制御を渡す
手段と、前記擬似JITによって、前記コンパイル済み
部分が暗号化されているかを検査する手段と、前記コン
パイル済み部分が暗号化されているとき、前記擬似JI
Tによって、前記部分を復号化する手段と、前記コンパ
イル済み部分が暗号化されていないとき、前記擬似JI
Tによって、真のJITに制御を渡す手段と、を含む装
置により処理される、前記装置。 (7) コンピュータ上で実行されたときに、クライア
ント上でJavaクラス・ファイルを処理するためのデ
ータ処理方法を実行するプログラムを記録したコンピュ
ータ読み取り可能な記録媒体であって、前記Javaク
ラス・ファイルをサーバから取り出す段階と、コンパイ
ル済み部分があるか否か、前記Javaクラス・ファイ
ルを検査する段階と、コンパイル済み部分が検出された
とき、擬似JITに制御を渡す段階と、前記擬似JIT
によって、前記コンパイル済み部分が暗号化されている
かを検査する段階と、前記コンパイル済み部分が暗号化
されているとき、前記擬似JITによって、前記部分を
復号化する段階と、及び前記コンパイル済み部分が暗号
化されていないとき、前記擬似JITによって、真のJ
ITに制御を渡す段階と、を含むプログラムを記録した
コンピュータ読み取り可能な記録媒体。 (8) コンピュータ上で実行されたときに、Java
クラス・ファイルを配布するためのデータ処理方法を実
行するプログラムを記録したコンピュータ読み取り可能
な記録媒体であって、前記Javaクラス・ファイルの
メソッドの少なくとも一部分を暗号化する段階と、前記
Javaクラス・ファイルの暗号化された部分のそれぞ
れについて、「コンパイル済み」属性と「暗号化済み」
属性とをセットする段階と、クライアントによってアク
セスできるサーバ上に前記Javaクラス・ファイルを
格納する段階と、前記Javaクラス・ファイルをサー
バから取り出す段階と、コンパイル済み部分があるか否
か、前記Javaクラス・ファイルを検査する段階と、
コンパイル済み部分が検出されたとき、擬似JITに制
御を渡す段階と、前記擬似JITによって、前記コンパ
イル済み部分が暗号化されているかを検査する段階と、
前記コンパイル済み部分が暗号化されているとき、前記
擬似JITによって、前記部分を復号化する段階と、
前記コンパイル済み部分が暗号化されていないとき、
前記擬似JITによって、真のJITに制御を渡す段階
と、を含むプログラムを記録したコンピュータ読み取り
可能な記録媒体
【0012】
【発明の実施の形態】Java環境10は、図1に示す
ような、電源を投入され、動作している計算システム1
2に常駐する。計算システムには、たとえば、Pentium
IIベースのマイクロプロセッサ16、ランダム・アクセ
ス・メモリ18およびMicrosoft Windows NTであるオペ
レーティング・システム20を有するコンピュータ・プ
ラットフォーム14が含まれる。コンピュータ・プラッ
トフォーム14には、コンピュータ周辺機器すなわち、
キーボード22、マウス24、ビデオ表示装置(VD
U)26および、ハード・ドライブなどの記憶システム
28が接続される。コンピュータ・プラットフォーム1
4は、ネットワーク・アダプタ(図示せず)を介してネ
ットワーク30にも接続され、このネットワークを介し
てインターネット・ゲートウェイ経由でインターネット
に接続される。電源を投入された時に、コンピュータ・
システムは、まずオペレーティング・システム20を記
憶システム28からメモリ18にロードする。オペレー
ティング・システム20は、通常は、Java環境1
0、Netscape Navigatorなどのブラウザ・ソフトウェア
32および他のソフトウェア・アプリケーションの記憶
システム28からのローディングを制御する。オペレー
ティング・システム20は、通常、計算システム12の
メモリ割振りを制御し、メモリ18内に、Javaアプ
リケーション34と、Javaアプレット36を埋め込
まれたウェブ・ページとを格納するための空間を作る。
Javaアプリケーション34は、記憶システム28か
らロードするか、ワールド・ワイド・ウェブに接続され
たブラウザ・ソフトウェア32を使用してインターネッ
トからダウンロードすることができる。ブラウザ・ソフ
トウェア32は、Javaアプレットを埋め込まれたウ
ェブ・ページをダウンロードすることもできる。この実
施例のJava環境10の主要なコンポーネントは、J
ava仮想マシン(JVM)38、ジャスト・イン・タ
イムJavaコンパイラ(JIT)40および擬似ジャ
スト・イン・タイム・コンパイラ(JIT)42であ
る。JVM38とJIT40は、Java開発者キット
(JDK)の一部であり、それぞれ異なる会社によって
書かれていてもよい。たとえば、サン・マイクロシステ
ムズ社のウィンドウズ版JDK1.1には、サン・マイ
クロシステムズ社のJVMとシマンテック社のJITが
含まれる。この実施例では、同一の供給者が、Java
環境にJITと擬似JITを供給すると規定している。
【0013】図2では、Javaソース・コード44
(図3)を処理して、JVM38(図1)での実行のた
めのJavaオブジェクトを生成するフローが示されて
いる。図3でのJavaコードの表現は、図2のステッ
プの一部と対応する。Javaコンパイラ(Java
c)46は、エディタを使用して開発者によって書かれ
たJavaソース・コード44を取り出し、すべてのプ
ラットフォームで走行するJVMによって認識される計
算機独立のバイト・コードに変換する(ステップ1)。
このバイト・コードは、オブジェクト指向クラスのコレ
クションであり、各クラスは、クラス・ファイル48
(図3)に格納されている。図3のクラス・ファイル4
8は、その中にカプセル化された3つのメソッドM1、
M2およびM3のバイト・コードを示している。ポスト
Javaコンパイル処理(ステップ2A)が、ポストJ
avacコンパイル・コンポーネント50Aによってク
ラス・ファイル48に適用され、これによって、いくつ
かの(開発者が選択した)メソッドがコンパイルされ、
クラス・ファイルの「コンパイル済みメソッド」属性が
セットされる。ポストJavac処理の後に、クラス・
ファイル48は、変更済みクラス・ファイル52にな
る。コンパイル済みメソッドは、図3では、変更済みク
ラス・ファイル52のメソッドM1によって表される。
この実施例では、ポストJavac暗号化処理(ステッ
プ2B)が、ポストJavac暗号化コンポーネント5
0Bによってクラス・ファイル48に適用されて、いく
つかのメソッド、この例ではメソッドM2が、暗号化さ
れる。「コンパイル済みメソッド」属性がセットされ
る。また、新たに定義された属性(これはJava言語
仕様で許容される)である「暗号化済みメソッド」もセ
ットされるが、これは、図3ではメソッドM2によって
表される。メソッドM3は、ポストJavac処理を受
けず、図3に示されているようにピュアJavaバイト
・コードのままになる。変更済みクラス・ファイル52
は、他のクラス・ファイルと共に、Javaアプリケー
ションまたはJavaアプレットの一部として記憶され
る。Javaアプリケーションは、サーバ上または接続
されたクライアントのハード・ドライブ上に置くことが
でき、変更済みクラス・ファイルは、そのアプリケーシ
ョンがサーバまたはハード・ドライブからロードされる
時に、コンピュータ・システムに転送される。Java
アプレットは、ウェブ・ページの一部であり、変更済み
クラス・ファイル52は、ブラウザ・ソフトウェア32
によってウェブ・ページがダウンロードされる時に、計
算システム12に転送される。
【0014】JVM38には、サーバまたは記憶装置か
ら変更済みクラス・ファイル52を取り出し、JVM3
8との統合に備えてキャッシュ記憶する(ステップ3)
JVMクラス・ローダ54(図3)が含まれる。JVM
クラス・ローダ54は、Java言語仕様に対して構文
を検査することによってバイト・コードを検証し(ステ
ップ4)、バイト・コード内でエラーが見つかった場合
には、エラーを返し、ローディングを停止する。次に、
JVMクラス・ローダ54は、変更済みクラス・ファイ
ル52からクラス・オブジェクトを準備し(ステップ
5)、これによって、クラス・オブジェクトがJVMに
統合化され、JavaアプリケーションまたはJava
アプレットの一部としてそのクラス・オブジェクトを実
行できるようになる。この準備または統合化は、リンク
とも呼ばれ、これには、特に、JVMヒープ内でのクラ
ス・オブジェクト変数用のメモリ空間の作成と、メソッ
ド区域メモリ56内でのメソッド・バイト・コードM2
およびM3の配置と、コンパイル済みメソッドの扱いが
含まれる。コンパイル済みメソッドと暗号化済みメソッ
ドに使用されるクラス・オブジェクト準備処理のうち、
本発明の実施例の一部である部分を図4に示す。クラス
・オブジェクトの準備の後に、JVMクラス・ローダ
は、クラス・オブジェクト内のシンボルを解決する(ス
テップ6)が、これには、参照されている他のクラス・
ファイルの取出しが含まれる。この時点で、クラス・オ
ブジェクトは、解釈の準備ができている。クラス・ロー
ダによって実行される最後のステップ(図2のステップ
4、5および6)は、使用されるJVMの種類に大いに
依存するので、図示の順序で実行する必要はない。
【0015】「コンパイル済みメソッド」に関するクラ
ス・オブジェクトの準備を、図4に示す。クラス・ロー
ダは、JVM内での統合のために変更済みクラス・ファ
イル52からのメソッドを準備する(ステップ10
0)。まず、メソッド区域メモリ56内にメソッド・テ
ーブル58が作成される(ステップ102)。このテー
ブルは、JVM内でメソッドを参照するのに使用され
る。このテーブルの3つのフィールドすなわち、メソッ
ド名、メソッド・ポインタおよびメソッドのコンパイル
済みコード・リンク・ベクトルを説明する。メソッド名
は、メソッドを表すシンボルの組であり、この例の3つ
のメソッド名は、M1、M2およびM3である。メソッ
ド名は、メソッドのバイト・コードのポインタまたはコ
ンパイル済みのプラットフォーム固有コードのリンク・
ベクトルをテーブル索引するために、テーブルへのイン
デックスとして使用される。ポインタには、そのメソッ
ドのバイト・コードが常駐するメモリ・アドレスが含ま
れる。リンク・ベクトルには、コンパイル済みのプラッ
トフォーム依存コードが常駐する実行可能メモリ内のメ
モリ・アドレスが含まれ、この形では、リンク・ベクト
ルは、実際にはポインタでもある。JVMは、クラス・
ファイル内の各メソッドを調べる(ステップ104)。
メソッドごとに、JVM38は、「コンパイル済みメソ
ッド」属性がセットされているかどうかを調べる(ステ
ップ106A)。そうである場合には、JVM38は、
JIT40に通常の形で制御を渡すが、この実施例で
は、通常はJIT40を指す「コンパイル済みメソッ
ド」ポインタが、擬似JIT42を指しており、制御は
擬似JIT42に渡される。「コンパイル済みメソッ
ド」属性がセットされていない場合には、JVMは、処
理を継続し、制御を放棄せず、変更済みクラス・ファイ
ル52からバイト・コードのメソッド(この例ではM
3)を取り出し(ステップ110A)、これをJVMメ
ソッド区域メモリ56に格納する(ステップ112
A)。その後、メソッド・テーブル58内のポインタ
に、メモリ内のメソッドM3のアドレスをセットする
(ステップ114A)。クラス・ファイルの次のメソッ
ドを処理する場合は、ステップ116からステップ10
6Aに戻り、次のメソッドの「コンパイル済みメソッ
ド」属性を検査する。他のメソッドが残っていない場合
には、JVMは、通常のクラス・オブジェクトの準備を
継続する。
【0016】ステップ106Aで「コンパイル済みメソ
ッド」属性がセットされている場合、制御は擬似JIT
42に渡される。擬似JIT42は、クラス・ファイル
で暗号化済み属性がセットされているかどうかを検査し
(ステップ106B)、それがセットされていない場合
には、JIT40に制御が渡され、「普通の」コンパイ
ル済みメソッドの処理が継続されるが(ステップ106
C)、それがセットされている場合には、暗号化済みメ
ソッド(図2のステップ2BでポストJavac暗号化
処理によって暗号化された)が取り出される(ステップ
110B)。この例では、取り出される暗号化済みのメ
ソッドは、M2である。擬似JITは、復号化アルゴリ
ズムを適用し、そのメソッドを復号化し、その後、復号
化されたメソッドをJVMのメソッド区域メモリに格納
する(ステップ112B)。メソッド・テーブルのポイ
ンタを、メソッド・メモリ区域内のメソッドの位置を用
いて更新し(ステップ114B)、制御をJVMに返し
て、クラス・ファイルの次のメソッドを処理するか、ク
ラス・オブジェクトの準備に戻る(ステップ116)。
【0017】ステップ106Bで暗号化済み属性がセッ
トされていない場合、制御はJIT40に渡される。コ
ンパイル済みメソッドの普通のJIT処理が実行される
(ステップ106C)が、これには、コンパイル済みメ
ソッドの取り出し(ステップ110C)、実行可能メモ
リへのコンパイル済みメソッドの格納(ステップ112
C)、および、メソッド・テーブル内のリンク・ベクト
ルのセット(ステップ114C)が含まれる。制御がJ
VMに返されて、クラス・ファイルの次のメソッドが処
理されるか、クラス・オブジェクトの準備に戻る(ステ
ップ116)。
【0018】要約すると、サーバからのクラス・ファイ
ル・コンポーネントの取出しと、クラス・ファイル内の
フラグまたは属性によって示されるコンパイル済み部分
に関するコンポーネントの検査とを含む、クライアント
側でクラス・ファイル・コンポーネントを処理する方法
を説明した。コンパイル済み部分が検出された場合に
は、さらにクラス・ファイルを検査して、その部分が暗
号化されているかどうかを調べる。これは、やはりフラ
グまたは属性によって示される。その部分が暗号化され
ている場合には、復号化する。本発明のもう1つの態様
は、ソフトウェア・コンポーネントの少なくとも一部を
暗号化するステップと、そのコンポーネントの暗号化さ
れた部分のそれぞれについて「コンパイル済み」属性と
「暗号化済み」属性をセットするステップとを含む、ソ
フトウェア・コンポーネントを配布する方法である。こ
のコンポーネントは、クライアントがアクセスできるサ
ーバに格納される。
【0019】JavaおよびJavaに基づくマーク
は、米サン・マイクロシステムズ社の商標または登録商
標である。MicrosoftおよびWindowsは、米マイクロソフ
ト社の商標または登録商標である。NetscapeおよびNets
cape Navigatorは、米ネットスケープ・コミュニケーシ
ョンズ社の商標である。
【0020】まとめとして、本発明の構成に関して以下
の事項を開示する。
【0021】(101)ソフトウェア・コンポーネント
をサーバから取り出すステップと、コンパイル済み部分
に関して前記ソフトウェア・コンポーネントを検査する
ステップと、コンパイル済み部分が検出された場合に、
前記部分が暗号化されているかどうかを検査するステッ
プと、暗号化されている場合に、前記部分を復号化する
ステップとを含む、ソフトウェア・コンポーネントを処
理する方法。 (102)前記ソフトウェア・コンポーネントが、Ja
vaクラスファイルである、上記(101)に記載の方
法。 (103)前記ソフトウェア・コンポーネントが、Ja
va仮想マシンによって取り出され、コンパイル済み部
分について検査される、上記(102)に記載の方法。 (104)コンパイル済み部分が検出された場合に、前
記Java仮想マシンが、擬似JITコードに制御を渡
す、上記(103)に記載の方法。 (105)前記部分が、前記擬似JITによって、暗号
化について検査され、必要な場合に復号化される、上記
104)に記載の方法。 (106)前記部分が暗号化されておらず、コンパイル
されている場合に、前記擬似JITが、実際のJITに
制御を渡す、上記(105)に記載の方法。 (107)ソフトウェア・コンポーネントの少なくとも
一部を暗号化するステップと、前記ソフトウェア・コン
ポーネントの暗号化された部分のそれぞれについて、
「コンパイル済み」属性と「暗号化済み」属性とをセッ
トするステップと、前記ソフトウェア・コンポーネント
を、クライアントによってアクセスできるサーバに格納
するステップとを含む、ソフトウェア・コンポーネント
を配布する方法。 (108)前記ソフトウェア・コンポーネントが、オブ
ジェクト指向クラスを表し、前記オブジェクト指向クラ
スのメソッドのうちの1つまたは複数が暗号化される、
上記(107)に記載の方法。 (109)前記ソフトウェア・コンポーネントが、Ja
vaクラス・ファイルである、上記(107)に記載の
方法。 (110)サーバからソフトウェア・コンポーネントを
取り出すための手段と、コンパイル済み部分について前
記ソフトウェア・コンポーネントを検査するための手段
と、コンパイル済み部分が検出された場合に、前記部分
が暗号化されているかどうかを検査するための手段と、
暗号化されている場合に、前記部分を復号化するための
手段とを含む、ソフトウェア・コンポーネントを処理す
るための装置。 (111)前記ソフトウェア・コンポーネントが、Ja
vaクラス・ファイルである、上記(110)に記載の
装置。 (112)前記取り出すための手段と、前記検査するた
めの手段とが、Java仮想マシンの一部である、上記
110)または(111)に記載の装置。 (113)ソフトウェア・コンポーネントの少なくとも
一部を暗号化するための手段と、前記ソフトウェア・コ
ンポーネントの暗号化された部分のそれぞれについて、
「コンパイル済み」属性と「暗号化済み」属性とをセッ
トするための手段と、クライアントによってアクセスで
きるサーバに、前記ソフトウェア・コンポーネントを格
納するための手段とを含む、ソフトウェア・コンポーネ
ントを配布するための装置。 (114)前記ソフトウェア・コンポーネントが、オブ
ジェクト指向クラスを表し、前記オブジェクト指向クラ
スのメソッドのうちの1つまたは複数が暗号化される、
上記(113)に記載の装置。 (115)前記ソフトウェア・コンポーネントが、Ja
vaクラス・ファイルである、上記(113)に記載の
装置。 (116)サーバからソフトウェア・コンポーネントを
取り出すステップと、コンパイル済み部分について前記
ソフトウェア・コンポーネントを検査するステップと、
コンパイル済み部分が検出された場合に、前記部分が暗
号化されているかどうかを検査するステップと、暗号化
されている場合に、前記部分を復号化するステップとを
含む、コンピュータ上で実行された時に前記ソフトウェ
ア・コンポーネントを処理するデータ処理方法を実行す
るための、コンピュータ可読記憶媒体に格納されたコン
ピュータ・プログラム製品。 (117)ソフトウェア・コンポーネントの少なくとも
一部を暗号化するステップと、前記ソフトウェア・コン
ポーネントの暗号化された部分のそれぞれについて、
「コンパイル済み」属性と「暗号化済み」属性とをセッ
トするステップと、クライアントによってアクセスする
ことができるサーバに、前記ソフトウェア・コンポーネ
ントを格納するステップとを含む、コンピュータ上で実
行された時に前記ソフトウェア・コンポーネントを配布
するデータ処理方法を実行するための、コンピュータ可
読記憶媒体に格納されたコンピュータ・プログラム製
品。
【図面の簡単な説明】
【図1】Java環境を含むコンピュータ・システムの
概略図である。
【図2】JVMでの実行のためにJavaソース・コー
ドをJavaオブジェクトにする処理ステップの流れ図
である。
【図3】JVMにリンクされるJavaオブジェクトへ
のJavaソース・コードの変換の概略図である。
【図4】JVMクラス・ローダによるリンク中のJav
aクラス・ファイルの処理の流れ図である。
【符号の説明】
38 Java仮想マシン(JVM) 40 JITコンパイラ 42 擬似JITコンパイラ 44 Javaソース・コード 46 Javaコンパイラ(Javac) 48 クラス・ファイル 50A ポストJavacコンパイル・コンポーネント 50B ポストJavac暗号化コンポーネント 52 変更済みクラス・ファイル 54 JVMクラス・ローダ 56 メソッド区域メモリ 58 メソッド・テーブル
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特開 平9−288575(JP,A) 特開 平10−301772(JP,A) 特開 平10−301773(JP,A) 国際公開97/27537(WO,A1) (58)調査した分野(Int.Cl.7,DB名) G06F 1/00 G06F 9/44 G06F 9/445 G06F 9/455

Claims (8)

    (57)【特許請求の範囲】
  1. 【請求項1】Javaクラス・ファイルを処理するため
    の方法であって、 前記Javaクラス・ファイル をサーバから取り出すス
    テップと、 コンパイル済み部分があるか否か、前記Javaクラス
    ・ファイルを検査するステップと、コンパイル済み部分が検出されたとき、擬似JITに制
    御を渡すステップと、 前記擬似JITによって、 前記コンパイル済み部分が暗
    号化されているかを検査するステップと、 前記コンパイル済み部分が暗号化されているとき、前記
    擬似JITによって、前記部分を復号化するステップ
    と、前記コンパイル済み部分が暗号化されていないとき、前
    記擬似JITによって、真のJITに制御を渡すステッ
    プと、 を含む、前記方法。
  2. 【請求項2】Java仮想マシンによって、前記Jav
    aクラス・ファイルが前記サーバから取り出されかつ
    ンパイル済み部分があるか否か、前記Javaクラス・
    ファイルが検査されるところの請求項に記載の方法。
  3. 【請求項3】Javaクラス・ファイルを配布する方法
    であって、 前記Javaクラス・ファイルのメソッド の少なくとも
    一部を暗号化するステップと、前記Javaクラス・ファイル の暗号化された部分のそ
    れぞれについて、「コンパイル済み」属性と「暗号化済
    み」属性とをセットするステップと、 クライアントによってアクセスできるサーバ上に前記
    avaクラス・ファイルを格納するステップと、 を含み、それによって、Javaクラス・ファイルが、 前記Javaクラス・ファイルをサーバから取り出すス
    テップと、 コンパイル済み部分があるか否か、前記Javaクラス
    ・ファイルを検査するステップと、 コンパイル済み部分が検出されたとき、擬似JITに制
    御を渡すステップと、 前記擬似JITによって、前記コンパイル済み部分が暗
    号化されているかを検査するステップと、 前記コンパイル済み部分が暗号化されているとき、前記
    擬似JITによって、前記部分を復号化するステップ
    と、 前記コンパイル済み部分が暗号化されていないとき、前
    記擬似JITによって、真のJITに制御を渡すステッ
    プと、 を含む方法により処理される、 前記 方法。
  4. 【請求項4】Javaクラス・ファイルを処理するため
    の装置であって、 前記Javaクラス・ファイル をサーバから取り出す手
    段と、 コンパイル済み部分があるか否か、前記Javaクラス
    ・ファイルを検査する手段と、 コンパイル済み部分が検出されたとき、擬似JITに制
    御を渡す手段と、 前記擬似JITによって、前記コンパイル済み部分が暗
    号化されているかを検査する手段と、 前記コンパイル済み部分が暗号化されているとき、前記
    擬似JITによって、前記部分を復号化する手段と、 前記コンパイル済み部分が暗号化されていないとき、前
    記擬似JITによって、真のJITに制御を渡す手段
    と、 を含む、前記装置。
  5. 【請求項5】前記Javaクラス・ファイルを前記サー
    バから取り出す手段かつコンパイル済み部分があるか否
    か、前記Javaクラス・ファイルを検査する手段が、
    Java仮想マシンの一部である、請求項に記載の方
    法。
  6. 【請求項6】Javaクラス・ファイルを配布するため
    の装置であって、 前記Javaクラス・ファイルのメソッド の少なくとも
    一部を暗号化する手段と、前記Javaクラス・ファイル の暗号化された部分のそ
    れぞれについて、「コンパイル済み」属性と「暗号化済
    み」属性とをセットする手段と、 クライアントによってアクセスできるサーバ上に前記
    avaクラス・ファイルを格納する手段と、 を含み、それによって、Javaクラス・ファイルが、 前記Javaクラス・ファイルをサーバから取り出す手
    段と、 コンパイル済み部分があるか否か、前記Javaクラス
    ・ファイルを検査する手段と、 コンパイル済み部分が検出されたとき、擬似JITに制
    御を渡す手段と、 前記擬似JITによって、前記コンパイル済み部分が暗
    号化されているかを検査する手段と、 前記コンパイル済み部分が暗号化されているとき、前記
    擬似JITによって、前記部分を復号化する手段と、 前記コンパイル済み部分が暗号化されていないとき、前
    記擬似JITによって、真のJITに制御を渡す手段
    と、 を含む装置により処理される、 前記 装置。
  7. 【請求項7】コンピュータ上で実行されたときに、クラ
    イアント上でJavaクラス・ファイルを処理するため
    のデータ処理方法を実行するプログラムを記録したコン
    ピュータ読み取り可能な記録媒体であって、 前記Javaクラス・ファイルをサーバから取り出す
    と、 コンパイル済み部分があるか否か、前記Javaクラス
    ・ファイルを検査する段階と、 コンパイル済み部分が検出されたとき、擬似JITに制
    御を渡す段階と、 前記擬似JITによって、前記コンパイル済み部分が暗
    号化されているかを検査する段階と、 前記コンパイル済み部分が暗号化されているとき、前記
    擬似JITによって、前記部分を復号化する段階と、
    前記コンパイル済み部分が暗号化されていないとき、
    前記擬似JITによって、真のJITに制御を渡す段階
    と、 を含むプログラムを記録したコンピュータ読み取り可能
    な記録媒体
  8. 【請求項8】コンピュータ上で実行されたときに、Ja
    vaクラス・ファイルを配布するためのデータ処理方法
    を実行するプログラムを記録したコンピュータ読み取り
    可能な記録媒体であって、 前記Javaクラス・ファイルのメソッドの少なくとも
    一部分を暗号化する段階と、 前記Javaクラス・ファイルの暗号化された部分のそ
    れぞれについて、「コンパイル済み」属性と「暗号化済
    み」属性とをセットする段階と、 クライアントによってアクセスできるサーバ上に前記J
    avaクラス・ファイルを格納する段階と、 前記Javaクラス・ファイルをサーバから取り出す
    と、 コンパイル済み部分があるか否か、前記Javaクラス
    ・ファイルを検査する段階と、 コンパイル済み部分が検出されたとき、擬似JITに制
    御を渡す段階と、 前記擬似JITによって、前記コンパイル済み部分が暗
    号化されているかを検査する段階と、 前記コンパイル済み部分が暗号化されているとき、前記
    擬似JITによって、前記部分を復号化する段階と、
    前記コンパイル済み部分が暗号化されていないとき、
    前記擬似JITによって、真のJITに制御を渡す段階
    と、 を含むプログラムを記録したコンピュータ読み取り可能
    な記録媒体
JP28614699A 1998-10-19 1999-10-07 ソフトウェア・コンポーネントを処理および配布するための方法および装置 Expired - Fee Related JP3377087B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB9822834A GB2343022B (en) 1998-10-19 1998-10-19 Encrypting of java methods
GB9822834.9 1998-10-19

Publications (2)

Publication Number Publication Date
JP2000132388A JP2000132388A (ja) 2000-05-12
JP3377087B2 true JP3377087B2 (ja) 2003-02-17

Family

ID=10840865

Family Applications (1)

Application Number Title Priority Date Filing Date
JP28614699A Expired - Fee Related JP3377087B2 (ja) 1998-10-19 1999-10-07 ソフトウェア・コンポーネントを処理および配布するための方法および装置

Country Status (2)

Country Link
JP (1) JP3377087B2 (ja)
GB (1) GB2343022B (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE19932769A1 (de) * 1999-07-14 2001-03-08 Roellgen Bernd Während der Laufzeit veränderbare kryptographische Methode
GB0017478D0 (en) * 2000-07-18 2000-08-30 Bit Arts Ltd Computer software installation
JP2002132364A (ja) * 2000-10-19 2002-05-10 Yutaka Iizuka プログラムを内部解析から保護する方法、コンピュータ読み取り可能な記録媒体及びプログラムの配布方法
US6931634B2 (en) * 2000-12-21 2005-08-16 Silicon Metrics Corporation Encrypted compiler
DE10105053A1 (de) * 2001-02-05 2002-08-29 Hmd Software Ag Verfahren und Einrichtung zum Übertragen von Programmcodes im Internet
GB2374165A (en) * 2001-04-02 2002-10-09 Global Knowledge Network Secure distribution of electronic media
GB0310142D0 (en) * 2003-05-02 2003-06-04 Bitarts Ltd Delivering a software component
AT501255A1 (de) * 2003-06-06 2006-07-15 Siemens Ag Oesterreich Lizenz-abhängige ausführung von programmdateien
DE10336083A1 (de) * 2003-08-06 2005-03-17 Siemens Ag Verfahren zur Sicherung von Computerprogrammen gegen unbefugte Mehrfachnutzung
JP2006053406A (ja) * 2004-08-13 2006-02-23 Fujitsu Ltd オブジェクトファイル配信方法、オブジェクトファイル配信システム、および電子機器
JP4727366B2 (ja) * 2005-09-28 2011-07-20 株式会社デジタル 情報処理装置、情報処理システム、プログラムおよび記録媒体
KR100765772B1 (ko) 2005-11-04 2007-10-15 삼성전자주식회사 자바 애플리케이션의 인증을 위한 클래스 라이브러리풋프린트 파일 및 이를 이용한 인증 방법
JP2007172526A (ja) * 2005-12-26 2007-07-05 Nippon Computer Co Ltd 情報処理システム、情報処理方法
US20070240194A1 (en) * 2006-03-28 2007-10-11 Hargrave Bentley J Scoped permissions for software application deployment

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5708709A (en) * 1995-12-08 1998-01-13 Sun Microsystems, Inc. System and method for managing try-and-buy usage of application programs
US5925123A (en) * 1996-01-24 1999-07-20 Sun Microsystems, Inc. Processor for executing instruction sets received from a network or from a local memory
JPH10301772A (ja) * 1997-04-30 1998-11-13 Sony Corp 情報処理装置および情報処理方法、並びに記録媒体
JPH10301773A (ja) * 1997-04-30 1998-11-13 Sony Corp 情報処理装置および情報処理方法、並びに記録媒体
GB2349250A (en) * 1998-02-13 2000-10-25 Nat Computer Board Method for protecting bytecode

Also Published As

Publication number Publication date
JP2000132388A (ja) 2000-05-12
GB9822834D0 (en) 1998-12-16
GB2343022B (en) 2003-01-08
GB2343022A (en) 2000-04-26

Similar Documents

Publication Publication Date Title
Dahm Byte code engineering
Chan et al. Advanced obfuscation techniques for Java bytecode
US6260187B1 (en) System for modifying object oriented code
JP4528517B2 (ja) 信頼されないプログラムを実行するための方法
US5978579A (en) Architecture for customizable component system
US6093215A (en) Method and apparatus for building templates in a component system
US6195794B1 (en) Method and apparatus for distributing templates in a component system
Horstmann et al. Core Java: Advanced Features
CN108932406B (zh) 虚拟化软件保护方法和装置
US5978585A (en) Development system with improved methods for recompiling dependent code modules
Adl-Tabatabai et al. Efficient and language-independent mobile programs
Keller et al. Binary component adaptation
US6182279B1 (en) Method and apparatus for storing templates in a component system
Thorn Programming languages for mobile code
JP3377087B2 (ja) ソフトウェア・コンポーネントを処理および配布するための方法および装置
US8321861B2 (en) Non-native program execution across multiple execution environments
US6637025B1 (en) Dynamic selection/definition of which class/methods should or should not be jit'ed using information stored in a jar file
CN107924326B (zh) 对经更新的类型的迁移方法进行覆盖
US7707631B2 (en) Device and method for processing a program code
BRPI0614089A2 (pt) método para evitar engenharia reversa de software, modificação não autorizada e interceptação de dados de tempo de execução
Hwang et al. DisIRer: Converting a retargetable compiler into a multiplatform binary translator
CN110597496B (zh) 应用程序的字节码文件获取方法及装置
US6976249B1 (en) Method for embedding object codes in source codes
US20220147376A1 (en) Selective substitution of legacy load module programs with classes for execution in a java virtual machine
Cabral et al. Rail: code instrumentation for. net

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees