WO2006132311A1 - プログラム変換装置、実行支援装置、それらの方法およびそれらのコンピュータ・プログラム - Google Patents

プログラム変換装置、実行支援装置、それらの方法およびそれらのコンピュータ・プログラム Download PDF

Info

Publication number
WO2006132311A1
WO2006132311A1 PCT/JP2006/311504 JP2006311504W WO2006132311A1 WO 2006132311 A1 WO2006132311 A1 WO 2006132311A1 JP 2006311504 W JP2006311504 W JP 2006311504W WO 2006132311 A1 WO2006132311 A1 WO 2006132311A1
Authority
WO
WIPO (PCT)
Prior art keywords
program
field
call
unit
main body
Prior art date
Application number
PCT/JP2006/311504
Other languages
English (en)
French (fr)
Inventor
Haruaki Tamada
Akito Monden
Masahide Nakamura
Kenichi Matsumoto
Original Assignee
National University Corporation NARA Institute of Science and Technology
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 National University Corporation NARA Institute of Science and Technology filed Critical National University Corporation NARA Institute of Science and Technology
Priority to US11/921,908 priority Critical patent/US20090235088A1/en
Publication of WO2006132311A1 publication Critical patent/WO2006132311A1/ja

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/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

Definitions

  • the program conversion apparatus further includes a description that assigns a value to a description or field that refers to a field, and a description that dynamically assigns a value to a field or a field that dynamically references a field, respectively.
  • FIG. 4 is a diagram showing a main program 100 before conversion and a main program 200 after a method call is changed.
  • the encryption key part 35 encrypts the character string such as the class name and the method name changed by the method call change part 32 and the field reference Z substitution change part 33, and converts it into an encrypted name. change.
  • the encryption key part 35 encrypts the first encryption part for encrypting the method name changed by the method call changing part 32 and the field name changed by the field reference Z substitution changing part 33. It may be divided into the second cipher part.
  • this embodiment can also be realized by using a force symmetric key cryptography using a common key cryptography or a hash function as a ciphering method. When the common key method and the symmetric key method are used, it is necessary to store the decryption key in the program conversion device or the execution support device. When the hash function is used, it is necessary to enable decoding of the character string before hashing by storing the table holding the character string before hashing in the execution support device 22.
  • FIG. 6 is a diagram showing the main program 100 before conversion and the main program 400 after the variable type is changed to the Object class.
  • the variable type changing unit 34 has changed the description 301 and the first line and the power of the description 202 shown in FIG. 5 to the descriptions 401 and 402 shown in FIG. 6, respectively.
  • the type of the variable ol whose variable type is PrintStream is changed to the Object class.
  • the variable type is changed to the object class of the variable ol whose type is HelloWorld!
  • the instance generation unit 41 generates an instance of the target class from the metaclass force in response to a request from the converted main program 24. That is, the instance generation unit 41 extracts the encrypted value included in the request from the converted main program 24, and the decryption unit 45 decrypts the value to obtain the name before encryption. Then, the instance generation unit 41 generates an instance based on the name before encryption, and returns the generated instance to the converted main body program 24.
  • the field substitution unit 44 extracts the encrypted value included in the request from the post-conversion main body program 24 and decrypts it with the decryption unit 45 to obtain the name before encryption. Then, the field substitution unit 44 substitutes a value into a field stored in a standard library or the like based on the name before the encryption key. The field assigning unit 44 does not return anything to the main program 24 after conversion.

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

 メソッド呼出変更部(32)は、本体プログラム(23)に記述されたメソッドの呼出しを動的呼出しに変更し、実行支援装置経由の呼出しに変更する。暗号化部(35)は、メソッド呼出変更部(32)によって変更された後の動的呼出しを指定する文字列を暗号化して本体プログラム(23)を変更する。したがって、メソッドの呼出しを隠蔽することができ、プログラムの理解を困難にすることが可能となる。

Description

明 細 書
プログラム変換装置、実行支援装置、それらの方法およびそれらのコンビ ユータ.プログラム
技術分野
[0001] 本発明は、ソフトゥヱァプロテクション技術に関し、特に、与えられたプログラムをより 解析の困難なプログラムに変換するプログラム変換装置、変換されたプログラムの実 行を支援する実行支援装置、それらの方法およびそれらのコンピュータ 'プロク ム に関する。
背景技術
[0002] 近年、ソフトウェアプロテクションに関する研究が盛んに行なわれている。このソフト ウェアプロテクションとは、ソフトウェアの改ざん、解析、コピー、再利用(盗用)などの 攻撃からソフトウェアシステムを保護する技術の総称であり、難読化、暗号化、多様化 、電子透かし、バースマークなどの要素技術がある。
[0003] これらのソフトウェアプロテクション技術の中で、攻撃のしにくさという観点から、追加 のプロテクション機構を持たず、プログラム自身を解析しにくくする方式であるプログ ラムの難読化が特に注目されてレ、る。
[0004] 難読化とは、与えられたプログラムをより複雑なプログラムに変換する技術であり、レ ィアウト難読化、データ難読化、制御フロー難読化などがある。難読化されたプロダラ ムは、難読化前のプログラムと同一の機能を持つ力 理解や解析がより困難となって いる。これに関連する技術として、以下に示すような特開 2005— 49925号公報(特 許文献 1)、特開 2004— 192068号公報(特許文献 2)、米国特許第 6, 102, 966号 (特許文献 3)と、 Toshio Ogiso and Yusuke Sakabe and asakazu Soshi and Atsuko iyaji, "Software obfuscation on a theoretical basis and its impleme ntation , IEICE Transactions on Fundamentals, Vol.E8b-A, No.l, ppl76- 186,
Jan 2003. (非特許文献 1)、 Yusuke Sakabe and Masakazu Soshi and Atsuko Miyaji, "Java ( 録商標) Obftiscation with a Theoretical Basis for Building S ecure Mobile Agents", Lecture Notes in Computer Science, Vol.2828, pp89
訂正された用紙 (細 -103, 2003. (非特許文献 2)とがある。
特許文献 1 :特開 2005— 49925号公報
特許文献 2:特開 2004— 192068号公報
特許文献 3 :米国特許第 6, 102, 966号
非特許文献 1 : Toshio Ogiso and Yusuke Sakabe and Masakazu Soshi and At suko Miyaji, "Software obiuscation on a theoretical basis and its implementa tion, IEICE Transactions on Fundamentals, Vol.E86 - A, No.l, ppl76 - 186, J an 2003.
非特許文献 2 : Yusuke Sakabe and Masakazu Soshi and At suko Miyaji, "Java ( 登録商標) Obiuscation with a Theoretical Basis for Building Secure Mobile Agents", Lecture Notes in Computer Science, Vol.2828, pp89 - 103, 2003. 発明の開示
発明が解決しょうとする課題
[0005] 攻撃者がプログラムを解析、改ざん、または盗用する際の典型的な行為は、プログ ラムに含まれる名前 (変数名、関数名、クラス名、メソッド名など)を探し、それらを頼り にプログラムの理解を行なうことである。この行為を妨げるためには、プログラム中に 現われる名前を、別の非常にわ力りづらい名前に置換することで、難読化を実現する ことが必要となる。
[0006] しかし、プログラムが利用するシステム API (Application Program Interface)やライ ブラリ関数、ライブラリクラス、ライブラリメソッドなどのシステム定義の名前を静的に別 の名前に置換することはできない。システム定義の名前は、多くの計算機環境で汎 用的に用いることができるように、固定した (変更できなレ、)名前がつけられてレ、るた めである。
[0007] 非特許文献 1は、メソッドの呼出し処理を隠蔽する技術である力 S、呼出される可能性 のあるメソッド群の名前を隠蔽することができなレ、。非特許文献 2は、クラスのメソッド にオーバロードの関係を持たせることにより、呼出されるメソッドを隠蔽する技術であ る力 ライブラリメソッドの呼出しに対してはこの処理を行なうことができず、隠蔽するこ とができない。また、いずれも呼出されるメソッドの引数の型および返り値の型も隠蔽
訂正された用紙 (規則 91) することができない。当該引数等の型に関する情報から、呼出そうとするメソッドを類 推することが可能であるため、これら型を隠蔽しないと、難読ィ匕の程度を高めることが できない。しかし、単に型を変更するのみでは、難読ィ匕後のプログラムの実行に支障 をきたすため、型の変更または削除は困難であった。
[0008] したがって、上述した特許文献 1〜3または非特許文献 1〜2の技術を用いたとして も、任意のメソッドの呼出しを隠蔽すること、任意のモジュールの名前を隠蔽すること 、および、呼出されるモジュールの引数の型および返り値の型の隠蔽のすべてを同 時に行なうことはできず、プログラムの難読ィ匕の程度を一定以上に高めることは不可 能であった。
[0009] 本発明は、上記問題点を解決するためになされたものであり、第 1の目的は、クラス の名前、メソッドの名前、および、フィールド (変数)の名前を予め暗号ィ匕するとともに 、呼び出されるメソッドの型、および、引数の型を変換することにより、プログラムに含 まれるシステム定義の処理を隠蔽し、プログラムを解析困難なプログラムに自動的に 変換するプログラム変換装置、その方法およびそのコンピュータ 'プログラムを提供す ることである。
[0010] 第 2の目的は、プログラム変換装置などによって解析困難に変換された後の本体プ ログラムの実行を支援するため、暗号ィ匕された名前を復号し、動的にメソッドの呼び 出し、および、フィールドの値の参照 Z代入を行なうことが可能な実行支援装置、そ の方法およびそのコンピュータ 'プログラムを提供することである。
課題を解決するための手段
[0011] 本発明のある局面に従えば、本体プログラムを難読ィ匕するプログラム変換装置であ つて、本体プログラムのメソッドの呼出しの記述を動的呼出しの記述に変更する呼出 変更部と、呼出変更部によって変更された後の動的呼出しを指定する文字列を暗号 化して本体プログラムを変更する暗号ィ匕部とを含む。
[0012] 好ましくは、プログラム変換装置はさらに、フィールドを参照する記述またはフィール ドに値を代入する記述を、それぞれフィールドを動的に参照する記述またはフィール ドに値を動的に代入する記述に変更するフィールド変更部と、フィールド変更部によ つて変更された後の記述に含まれるフィールドの名称を暗号ィ匕して本体プログラムを 変更する暗号化部とを含む。
[0013] さらに好ましくは、呼出変更部は、動的呼出しの記述を別のクラスのメソッドを経由し て呼出すように変更し、フィールド変更部は、フィールドを動的に参照する記述また はフィールドに値を動的に代入する記述を別のクラスのメソッドを経由して行なうよう に変更する。
[0014] さらに好ましくは、プログラム変換装置は、本体プログラムに含まれる変数の型を削 除する変数型変更部を含む。
[0015] さらに好ましくは、プログラム変換装置はさらに、暗号ィ匕部によって暗号ィ匕された文 字列を復号するための鍵を別のクラスに保存する鍵保存部を含む。
[0016] 本発明の別の局面に従えば、難読化された本体プログラムの実行を支援する実行 支援装置であって、難読ィ匕された本体プログラムからのメソッドの動的呼出しに応じ て、呼出しに含まれる暗号ィ匕後の値力 文字列を復号する復号部と、復号部によつ て復号された文字列を用いてメソッドを実行する実行部とを含む。
[0017] 好ましくは、実行支援装置はさらに、難読ィ匕された本体プログラムからのフィールド の動的参照またはフィールドへの動的代入の要求に応じて、フィールドの名称を復 号する復号部と、復号部によって復号された名称を用いてフィールドの参照またはフ ィールドへの代入を行なうフィールドアクセス部とを含む。
[0018] 本発明のさらに別の局面に従えば、コンピュータに本体プログラムを難読化させる プログラム変換方法であって、本体プログラムに記述されたメソッドの呼出しを動的呼 出しに変更するステップと、変更された後の動的呼出しを指定する文字列を暗号ィ匕し て本体プログラムを変更するステップとを含む。
[0019] 本発明のさらに別の局面に従えば、コンピュータに難読ィ匕された本体プログラムの 実行を支援させる実行支援方法であって、難読化された本体プログラム力ものメソッ ドの動的呼出しに応じて、呼出しに含まれる暗号ィ匕後の値力 文字列を復号するス テツプと、復号された文字列を用いてメソッドを実行するステップとを含む。
[0020] 本発明のさらに別の局面に従えば、本体プログラムを難読ィ匕するプログラム変換方 法をコンピュータに実行させるためのコンピュータ 'プログラムであって、プログラム変 換方法は、本体プログラムに記述されたメソッドの呼出しを動的呼出しに変更するス テツプと、変更された後の動的呼出しを指定する文字列を暗号ィ匕して本体プログラム を変更するステップとを含む。
[0021] 本発明のさらに別の局面に従えば、難読化された本体プログラムの実行を支援す る実行支援方法をコンピュータに実行させるためのコンピュータ ·プログラムであつて 、実行支援方法は、難読ィ匕された本体プログラム力 のメソッドの呼出しに応じて、呼 出しに含まれる暗号ィ匕後の値力 文字列を復号するステップと、復号された文字列を 用いてメソッドを実行するステップとを含む。
発明の効果
[0022] 本発明のある局面によれば、本体プログラム中のメソッド呼出しを動的に行なうよう に変更した後、動的呼出しで指定されるメソッドの名前を暗号ィ匕するため、どのメソッ ドの呼出しであるのかを隠蔽することができ、プログラムの理解を困難にすることが可 能となる。
[0023] また、本体プログラム中のフィールドの参照 Z代入の記述を別のクラスのメソッド経 由で行なうように変更した後、フィールドの名称を暗号ィ匕して扱うため、どのフィール ドの参照または代入であるのかを隠蔽することができ、プログラムの理解を困難にす ることが可能となる。
[0024] また、変数型変更部が、本体プログラムに含まれる変数の型を変更するので、引数 や返り値の型などのプログラム中に現れる全ての変数の型情報を隠蔽することができ 、プログラムの理解をさらに困難にすることが可能となる。
[0025] また、呼出し変更部およびフィールド変更部が、動的に行なうように変更された呼出 し、またはフィールドの参照もしくはフィールドへの代入の記述を別のクラスのメソッド を経由して実行するように変更するので、この別のクラスに、難読化された本体プログ ラムの実行を支援させることが可能となる。
[0026] 本発明の別の局面によれば、復号部が、難読ィ匕された本体プログラム力 のメソッ ドの呼出しに応じて、呼出しに含まれる暗号ィ匕後の値力 文字列を復号し、実行部が 復号された文字列を用いてメソッドを実行するので、プログラム変換装置などによって 難読化された後の本体プログラムの実行を支援することが可能となる。
[0027] また、復号部が、難読ィ匕された本体プログラムからのフィールドの参照またはフィー ルドへの代入の要求に応じて、フィールドの名称を復号し、フィールドアクセス部が復 号された名称を用いてフィールドの参照またはフィールドの代入を行なうので、プログ ラム変換装置などによって変換された後の本体プログラムの実行の際の支援がさらに 容易となる。
図面の簡単な説明
[0028] [図 1]本発明の実施の形態におけるプログラム変換装置および実行支援装置の構成 例を示すブロック図である。
[図 2]本発明の実施の形態におけるプログラム変換装置の機能的構成を示すブロッ ク図である。
[図 3]本発明の実施の形態におけるプログラム変換装置 21の処理手順を説明するた めのフローチャートである。
[図 4]変換前の本体プログラム 100とメソッド呼出しを変更した後の本体プログラム 20 0とを示す図である。
[図 5]変換前のプログラム 100とフィールドの値の参照 Z代入を変更した後の本体プ ログラム 300とを示す図である。
[図 6]変換前の本体プログラム 100と変数の型力 Objectクラスに変更された後の本体 プログラム 400とを示す図である。
[図 7]変換前の本体プログラム 100と暗号ィ匕された名称に変更された後の本体プログ ラム 500とを示す図である。
[図 8]本発明の実施の形態における実行支援装置 22の機能的構成を示すブロック 図である。
符号の説明
[0029] 1 コンピュータ本体、 2 ディスプレイ装置、 3 FDドライブ、 4 FD、 5 キーボード 、 6 マウス、 7 CD— ROM装置、 8 CD-ROM, 9 ネットワーク通信装置、 10 C PU、 11 ROM, 12 RAM, 13 ハードディスク、 21 プログラム変換装置、 22 実 行支援装置、 23 本体プログラム、 24 変換後本体プログラム、 31 アクセス制限変 更部、 32 メソッド呼出変更部、 33 フィールド参照 Z代入変更部、 34 変数型変更 部、 35 暗号化部、 36 文字列保存部、 41 インスタンス生成部、 42 メソッド実行 部、 43 フィールド参照部、 44 フィールド代入部、 45 復号部。
発明を実施するための最良の形態
[0030] 本発明の実施の形態におけるプログラム変換装置は、 Java (登録商標)などのォブ ジェタト指向言語で記述されたプログラムのメソッドの呼出しおよびフィールドの参照
Z代入の隠蔽、変数の型を変更するように、元のプログラムを動的呼び出しを利用し たプログラムに変換する。そして、実行支援装置がこの変換されたプログラムの呼出 しなどを解釈し、メソッドの実行などを行なう。なお、この実行支援装置は、動的呼出 しなど、本体プログラムの実行を支援するクラスとして提供され、以下 DynamicCallerク ラスとも呼ぶ。さらに、プログラム変換装置中で、呼出しなどが経由するように変更さ れる別のクラスのメソッドが実行支援装置の役割を果たす実施形態も可能である。
[0031] 図 1は、本発明の実施の形態におけるプログラム変換装置および実行支援装置の 構成例を示すブロック図である。プログラム変換装置および実行支援装置は、コンビ ユータ本体 1、ディスプレイ装置 2、 FD (Flexible Disk) 4が装着される FDドライブ 3、 キーボード 5、マウス 6、 CD— ROM (Compact Disc-Read Only Memory) 8が装着 される CD— ROM装置 7、およびネットワークに接続されるネットワーク通信装置 9を 含む。プログラム変換プログラムおよび実行支援プログラムは、 FD4または CD—RO M8等の記録媒体によって供給される。プログラム変換プログラムおよび実行支援プ ログラムがコンピュータ本体 1によって実行されることによって、プログラム変換装置お よび実行支援装置全体の制御が行なわれる。また、プログラム変換プログラムおよび 実行支援プログラムは他のコンピュータょり通信回線を経由し、コンピュータ本体 1に 供給されてもよい。
[0032] 図 1に示すコンピュータ本体 1は、 CPU (Central Processing Unit) 10と、 ROM (R ead Only Memory) 11と、 RAM (Random Access Memory) 12と、ノヽードティスク 1 3とを含む。 CPU10は、ディスプレイ装置 2、 FDドライブ 3、キーボード 5、マウス 6、 C D— ROM装置 7、ネットワーク通信装置 9、 ROMl l、 RAM 12またはハードディスク 13との間でデータを入出力しながら処理を行う。 FD4または CD— ROM8に記録さ れたプログラム変換プログラムおよび実行支援プログラムは、 CPU10により FDドライ ブ 3または CD— ROM装置 7を介してハードディスク 13に格納される。 CPU10は、 ハードディスク 13から適宜プログラム変換プログラムおよび実行支援プログラムを RA M12にロードして実行することによって、プログラム変換装置および実行支援装置全 体の制御が行なわれる。
[0033] 図 2は、本発明の実施の形態におけるプログラム変換装置の機能的構成を示すブ ロック図である。このプログラム変換装置 21は、本体プログラム 23に記述されたァク セス制限を変更するアクセス制限変更部 31と、本体プログラム 23中に存在するメソッ ドを DynamicCallerクラス 22経由で呼出すように変更するメソッド呼出変更部 32と、本 体プログラム 23中に存在するフィールドの値を参照 Z代入する記述(get/set)を Dyn amicCallerクラス 22経由で行なうように変更するフィールド参照 Z代入変更部 33と、 本体プログラム 23中に存在するフィールド、ローカル変数の型を Objectクラスに変更 する変数型変更部 34と、クラス名、メソッド名およびフィールド名などの文字列を暗号 化し、暗号ィ匕後の名称に変更する暗号ィ匕部 35とを含む。
[0034] オブジェクト指向言語のクラスのメンバ(フィールド、メソッド)には、アクセス修飾子 が存在する。このアクセス修飾子は、フィールドやメソッドに対して、どのような範囲か らアクセス可能であるかを定義するものであり、 public, protected, privateが存在する 。アクセス制限変更部 31は、クラスのメンバのアクセス修飾子を全て publicにする。こ れにより、メソッドが全て DynamicCallerクラス経由で呼出されるようになるため、 Dynam icCallerクラスはどのようなクラスのメンバにもアクセスできるようになる。
[0035] 一般に、オブジェクト指向言語で記述されたプログラムにお 、ては、クラスをインスタ ンス化してオブジェクトを作成し、そのオブジェクトに対してメッセージを送ることで動 作する。クラスの定義は、メタクラスを用いることによってプログラムの実行中に動的に 変更することが可能である。本発明の実施の形態においては、このような動的呼出し を利用する。
[0036] たとえば、 Java (登録商標)言語であれば、 java (登録商標) .lang.Classクラスカ^タク ラスに相当し、 Classクラスのインスタンスは Classクラスの forName staticメソッド〖こクラ ス名を示す文字列を与えることで取得することができる。そして、得られた Classクラス のインスタンスに対して newlnstanceメソッドを実行することによって、対応するクラスの オブジェクトを生成することができる。さらに、 Classクラスのインスタンスから java (登録 商標) .lang.reflect.Methodオブジェクトを得ることにより、実行するメソッドを与えられた 文字列から決定することができる。これにより、メソッドの動的呼出しが実現される。
[0037] メソッド呼出し部 32は、このようなメタクラスを用いることにより、オブジェクトの生成か らメソッドの実行までを文字列を与えることで行なうように本体プログラム 23を変更す る。
[0038] また、本発明の実施の形態においては、オブジェクト指向の重要な特徴の 1つであ る多態性を用いてプログラムの解析をより困難にする。多態性とは、同じメッセージに 対して、異なるクラスのオブジェクトは異なる動作をすることをいう。すなわち、同じ型 の変数に異なるクラスのオブジェクトが入っている場合でも、変数に入っているォブジ ェクトによって動作が変わり、実行結果が異なる場合がある。
[0039] 本実施の形態にぉ 、ては、オブジェクトからメタクラスを取得し、そのメタクラスからメ ソッドやフィールドの定義を得て、それらに対して処理を行なう。したがって、型情報 が隠蔽されていても、その変数に入っているオブジェクトがプログラム変換前 (難読ィ匕 前)と同じであれば、本体プログラムの動作に影響を与えない。そこで、変数型変更 部 34力 クラスのメンバの型をクラス階層のルートクラスに変更することにより、本体プ ログラムの型情報が削除され、プログラムの解析をより困難にさせることができる。
[0040] 暗号ィ匕部 35は、メソッド呼出変更部 32およびフィールド参照 Z代入変更部 33によ つて変更されたクラス名、メソッド名などの文字列を暗号ィ匕し、暗号化後の名称に変 更する。なお、暗号ィ匕部 35はメソッド呼出変更部 32によって変更されたメソッド名を 暗号化する第 1暗号化部と、フィールド参照 Z代入変更部 33によって変更されたフィ 一ルド名称を暗号ィ匕する第 2暗号ィ匕部とに分けてもよい。なお、本実施の形態にお いては、暗号ィ匕の方法として共通鍵暗号を用いている力 対称鍵暗号、またはハツシ ュ関数を用いても実現可能である。共通鍵方式および対称鍵方式を用いた場合には 、プログラム変換装置または実行支援装置に復号鍵を保存することが必要である。ハ ッシュ関数を用いた場合には、ノ、ッシュ化前の文字列を保持するテーブルを実行支 援装置 22に保存することにより、ハッシュ化前の文字列の復号を可能とせしめる必要 がある。
[0041] 図 3は、本発明の実施の形態におけるプログラム変換装置 21の処理手順を説明す るためのフローチャートである。プログラム変換装置 21の処理手順を、図 3に示すフ ローチャートおよび図 4〜図 7に示すプログラム変換例を参照しながら説明する。
[0042] まず、アクセス制限変更部 31は、本体プログラム 23を取得し(S 11)、全てのメソッド 、フィールドのアクセス制限を publicに変更する(S 12)。なお、図 4〜図 7に示す変換 前の本体プログラム 100は、アクセス制限が publicに変更された後のプログラムを示し ている。
[0043] 次に、メソッド呼出変更部 32は、全てのメソッド呼出しを DynamicCallerクラス 22経由 の呼出しに変更する(S13)。なお、本発明の実施の形態においては、動的呼出しを 別のクラスのメソッド、つまり DynamicCallerクラスを経由せずに実行することもできる。 その場合、 DynamicCallerが行なう処理機能を本体プログラムに持たせる必要がある
[0044] 図 4は、変換前の本体プログラム 100とメソッド呼出しを変更した後の本体プロダラ ム 200とを示す図である。このプログラムは HelloWorldクラスを定義して実行するもの であり、メソッド呼出変更部 32によって変換前の本体プログラム 100の記述 101およ び 102のそれぞれ力 変更後の本体プログラム 200の記述 201および 202に変更さ れている。記述 201に示すように、新たなオブジェクトとして" Hello World"が変数 oa 1に代入され、 DynamicCallerクラス経由で java (登録商標). io.PrintStreamクラスの prin tinメソッドが呼出されるように変更される。この java (登録商標). io.PrintStreamは、上 述したメタクラスを用いてメソッドの実行を行うときに指定される文字列である。この文 字列を用いて動的呼出しが行なわれる。
[0045] また、記述 202に示すように、 DynamicCallerクラス 22経由で newlnstanceメソッドを 実行することにより、 HelloWorldクラスのインスタンスが生成され、生成されたインスタ ンスが変数 olに代入される。そして、 DynamicCallerクラス 22経由で HelloWorldクラス の helloメソッドが呼出される。このとき、メソッドを呼出すためのインスタンスが変数 ol である。
[0046] 次に、フィールド参照 Z代入変更部 33は、本体プログラム 23中に存在するフィー ルドの値の参照 Z代入(get/set)を全て DynamicCaller22経由で行なうように変更す る(S14)。 [0047] 図 5は、変換前のプログラム 100とフィールドの値の参照 Z代入を変更した後の本 体プログラム 300とを示す図である。フィールド参照 Z代入変更部 33によって、図 4 に示す記述 201の最後の行が、図 5に示す記述 301および 302に変更されている。 図 5の記述 302に示すように、図 4の記述 201の最後の行の System.outが変数 olに 置換される。また、図 5の記述 301力追カロされ、 DynamicCallerクラス 22経由で java ( 登録商標) .lang.Systemクラスの outフィールドの値が参照されて変数 olに代入される
[0048] 次に、変数型変更部 34は、全てのフィールド、ローカル変数の型をクラス階層のル 一トクラスである Objectクラスに変更する(S15)。
[0049] 図 6は、変換前の本体プログラム 100と変数の型が Objectクラスに変更された後の 本体プログラム 400とを示す図である。変数型変更部 34によって、図 5に示す記述 3 01と図 4に示す記述 202の最初の行と力 それぞれ図 6に示す記述 401および 402 に変更されている。図 6の記述 401に示すように、変数の型が PrintStreamである変数 olの型が、 Objectクラスに変更されている。また、図 6の記述 402に示すように、変数 の型が HelloWorldである変数 olの型力 Objectクラスに変更されて!、る。
[0050] 次に、暗号化部 35は、クラス名、メソッド名などを暗号化し、本体プログラム 23内の 名称を暗号化後の名称に変更する (S16)。
[0051] 図 7は、変換前の本体プログラム 100と暗号ィ匕された名称に変更された後の本体プ ログラム 500とを示す図である。図 7に示すように、暗号ィ匕部 35によってクラス名、フィ 一ルド名およびメソッド名が暗号ィ匕されて、記述 501〜503のように変更される。図 7 の記述 501はクラス名 java (登録商標) .lang.Systemおよびフィールド名 outが変更され たものであり、記述 502はクラス名 java (登録商標) .io.PrintStreamおよびメソッド名 pri ntlnが変更されたものであり、記述 503はクラス名 HelloWorldおよびメソッド名 helloが 変更されたものである。
[0052] 次に、暗号部 35は、図 7に示すような変換後の本体プログラム 24を出力して(S 17) 、処理を終了する。
[0053] 図 8は、本発明の実施の形態における実行支援装置 22の機能的構成を示すプロ ック図である。この実行支援装置 22は、プログラム変換装置 21によって変換された後 の本体プログラム 24が実行されるときに、変換後本体プログラム 24からの呼出しに応 じて動作するものであり、インスタンス生成部 41と、メソッド実行部 42と、フィールド参 照部 43と、フィールド代入部 44と、復号部 45とを含む。なお、インスタンス生成部 41 、メソッド実行部 42、フィールド参照部 43およびフィールド代入部 44は、それぞれメ ソッドとして提供される。復号部には、あら力じめ、暗号化部で用いた暗号鍵に対応 する復号鍵を格納する。なお、ノ、ッシュ関数を用いて暗号ィ匕した場合には、プロダラ ム変換装置における暗号化時に復号部にハッシュ前の名称 (文字列)を保存する必 要がある。実行支援装置のインスタンス生成部 41、メソッド実行部 42、フィールド参 照部 43およびフィールド代入部 44はいずれも DynamicCallerクラス 22内に包含する ことができる。
[0054] インスタンス生成部 41は、変換後本体プログラム 24からの要求に応じて、メタクラス 力 ら対象クラスのインスタンスを生成する。すなわち、インスタンス生成部 41は、変換 後本体プログラム 24からの要求に含まれる暗号ィ匕された値を抽出し、復号部 45は当 該値を復号して暗号ィ匕前の名称を得る。そして、インスタンス生成部 41は、暗号化前 の名称に基づ ヽてインスタンスを生成し、生成したインスタンスを変換後本体プロダラ ム 24に返す。
[0055] メソッド実行部 42は、変換後本体プログラム 24からの呼出しに応じて、メタクラスを 参照し、対象クラスの指定されたメソッドを実行する。すなわち、メソッド実行部 42は、 変換後本体プログラム 24からの呼出しに含まれる暗号ィ匕された値を抽出し、復号部 45により復号して暗号ィ匕前の名称を得る。そして、メソッド実行部 42は、暗号化前の 名称に基づ 、てメソッドを実行し、実行されたメソッドの返り値を変換後本体プロダラ ム 24に返す。
[0056] フィールド参照部 43は、変換後本体プログラム 24からの要求に応じて、メタクラスを 参照し、対象クラスの指定されたフィールドを参照する。すなわち、フィールド参照部 43は、変換後本体プログラム 24からの要求に含まれる暗号ィ匕された値を抽出し、復 号部 45により復号して暗号ィ匕前の名称を得る。そして、フィールド参照部 43は、暗号 化前の名称に基づ 、て標準ライブラリに格納されるフィールドの値を参照し、このフィ 一ルドの値を変換後本体プログラム 24に返す。 [0057] フィールド代入部 44は、変換後本体プログラム 24からの要求に応じて、メタクラスを 参照し、対象クラスの指定されたフィールドに値を代入する。すなわち、フィールド代 入部 44は、変換後本体プログラム 24からの要求に含まれる暗号ィ匕された値を抽出し 、復号部 45により復号して暗号ィ匕前の名称を得る。そして、フィールド代入部 44は、 暗号ィ匕前の名称に基づいて標準ライブラリなどに格納されるフィールドに値を代入す る。なお、このフィールド代入部 44は、変換後本体プログラム 24に何も返さない。
[0058] 以上説明したように、本実施の形態におけるプログラム変換装置によれば、全ての クラスのメソッド呼出しを動的呼出しに変換し、動的呼出しに用いる文字列を暗号ィ匕 するようにしたので、本体プログラム内部に存在するメソッド呼出しを隠蔽することが でき、プログラムの理解を困難にすることが可能となった。
[0059] また、フィールドの値を参照 Z代入する際に用いるフィールド名を暗号ィ匕するように したので、フィールドへのアクセスを隠蔽することができ、プログラムの理解をより困難 にすることが可能となった。
[0060] また、変数の型(引数の型、返り値の型)を全てクラス階層のルートクラスに変更する ようにしたので、変数の型を隠蔽することができ、プログラムの理解をより困難にするこ とが可能となった。
[0061] 本実施の形態における実行支援装置によれば、復号部 45によって暗号ィ匕された 名称の元の名称を得て、得られた元の名称を用いてインスタンスの生成、メソッドの 実行、フィールドの参照およびフィールドの代入を行なうようにしたので、プログラム変 換装置によって変換された後の本体プログラム 24の実行を支援することが可能とな つた o
[0062] 今回開示された実施の形態は、すべての点で例示であって制限的なものではな!/ヽ と考えられるべきである。本発明の範囲は上記した説明ではなくて請求の範囲によつ て示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれること が意図される。

Claims

請求の範囲
[1] 本体プログラム(23)を難読ィ匕するプログラム変換装置であって、
前記本体プログラム(23)のメソッドの呼出しの記述を動的呼出しの記述に変更す る呼出変更部(32)と、
前記呼出変更部(32)によって変更された後の動的呼出しを指定する文字列を暗 号ィ匕して前記本体プログラム(23)を変更する暗号化部(35)とを含む、プログラム変 換装置。
[2] 前記プログラム変換装置が、フィールドを参照する記述またはフィールドに値を代 入する記述を、それぞれフィールドを動的に参照する記述またはフィールドに値を動 的に代入する記述に変更するフィールド変更部(33)と、
前記フィールド変更部(33)によって変更された後の記述に含まれるフィールドの名 称を暗号化して前記本体プログラムを変更する暗号化部(35)とを含む、請求項 1記 載のプログラム変換装置。
[3] 前記呼出変更部(32)は、前記動的呼出しの記述を別のクラスのメソッドを経由して 呼出すように変更し、
前記フィールド変更部(33)は、フィールドを動的に参照する記述またはフィールド に値を動的に代入する記述を前記別のクラスのメソッドを経由して行なうように変更す る、請求項 2記載のプログラム変換装置。
[4] 前記プログラム変換装置はさらに、前記本体プログラム(23)に含まれる変数の型を 変更する変数型変更部(34)を含む、請求項 1〜3のいずれかに記載のプログラム変 換装置。
[5] 難読化された本体プログラム (24)の実行を支援する実行支援装置であって、 前記難読化された本体プログラム(24)からのメソッドの動的呼出しに応じて、暗号 化後の値力 文字列を復号する復号部 (45)と、
前記復号部 (45)によって復号された文字列を用いてメソッドを実行する実行部 (4 2)とを含む、実行支援装置。
[6] 前記実行支援装置が、前記難読化された本体プログラム(24)からのフィールドの 動的参照またはフィールドへの動的代入の要求に応じて、前記フィールドの名称を 復号する復号部 (45)と、
前記復号部によって復号された名称を用いてフィールドの動的参照またはフィール ドの動的代入を行なうフィールドアクセス部 (43, 44)とを含む、請求項 5記載の実行 支援装置。
[7] コンピュータに本体プログラム(23)を難読ィ匕させるプログラム変換方法であって、 前記本体プログラム(23)のメソッドの呼出しの記述を動的呼出しの記述に変更す るステップと、
前記変更された後の動的呼出しを指定する文字列を暗号化して前記本体プロダラ ム(23)を変更するステップとを含む、プログラム変換方法。
[8] コンピュータに難読化された本体プログラム(24)の実行を支援させる実行支援方 法であって、
前記難読化された本体プログラム(24)からのメソッドの動的呼出しに応じて、前記 呼出しに含まれる暗号ィ匕後の値力 文字列を復号するステップと、
前記復号された文字列を用いてメソッドを実行するステップとを含む、実行支援方 法。
[9] 本体プログラム(23)を難読ィ匕するプログラム変換方法をコンピュータに実行させる ためのコンピュータ.プログラムであって、
前記プログラム変換方法は、前記本体プログラム(23)のメソッドの呼出しの記述を 動的呼出しの記述に変更するステップと、
前記変更された後の動的呼出しを指定する文字列を暗号化して前記本体プロダラ ム(23)を変更するステップとを含む、コンピュータ 'プログラム。
[10] 難読化された本体プログラム (24)の実行を支援する実行支援方法をコンピュータ に実行させるためのコンピュータ 'プログラムであって、
前記実行支援方法は、前記難読化された本体プログラム(24)力ゝらのメソッドの動的 呼出しに応じて、前記呼出しに含まれる暗号ィ匕後の値力 文字列を復号するステツ プと、
前記復号された文字列を用いてメソッドを実行するステップとを含む、コンピュータ · プログラム。
PCT/JP2006/311504 2005-06-10 2006-06-08 プログラム変換装置、実行支援装置、それらの方法およびそれらのコンピュータ・プログラム WO2006132311A1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US11/921,908 US20090235088A1 (en) 2005-06-10 2006-06-08 Program conversion device, execution support device, and method and computer program for the same

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2005-171372 2005-06-10
JP2005171372A JP4669934B2 (ja) 2005-06-10 2005-06-10 プログラム変換装置、実行支援装置、それらの方法およびそれらのコンピュータ・プログラム

Publications (1)

Publication Number Publication Date
WO2006132311A1 true WO2006132311A1 (ja) 2006-12-14

Family

ID=37498507

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2006/311504 WO2006132311A1 (ja) 2005-06-10 2006-06-08 プログラム変換装置、実行支援装置、それらの方法およびそれらのコンピュータ・プログラム

Country Status (3)

Country Link
US (1) US20090235088A1 (ja)
JP (1) JP4669934B2 (ja)
WO (1) WO2006132311A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2949583A1 (fr) * 2009-09-01 2011-03-04 Thales Sa Procede de production d'une image destinee a un systeme d'exploitation dite image os et dispositif correspondant
JP2012022677A (ja) * 2010-07-01 2012-02-02 Aladdin Europe Gmbh オブジェクト指向言語で記述されたアプリケーションのクラスの複数のメソッドのうち1つを選択的にプロテクトするメソッド又はデバイス
JP2012133736A (ja) * 2010-12-24 2012-07-12 Kddi Corp ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101845155B1 (ko) * 2016-06-30 2018-04-03 라인 가부시키가이샤 어플리케이션 패키지를 제공하는 방법 및 시스템, 그리고 어플리케이션을 실행하는 방법 및 시스템

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4306289A (en) * 1980-02-04 1981-12-15 Western Electric Company, Inc. Digital computer having code conversion apparatus for an encrypted program
US4847902A (en) * 1984-02-10 1989-07-11 Prime Computer, Inc. Digital computer system for executing encrypted programs
JPH08305558A (ja) * 1995-04-27 1996-11-22 Casio Comput Co Ltd 暗号化プログラム演算装置
US6006328A (en) * 1995-07-14 1999-12-21 Christopher N. Drake Computer software authentication, protection, and security system
AU7957998A (en) * 1997-06-09 1999-01-25 Intertrust, Incorporated Obfuscation techniques for enhancing software security
US6102966A (en) * 1998-03-20 2000-08-15 Preemptive Solutions, Inc. Method for renaming identifiers of a computer program
US7263722B1 (en) * 1999-05-12 2007-08-28 Fraunhofer Crcg, Inc. Obfuscation of executable code
US7296163B2 (en) * 2000-02-08 2007-11-13 The Trustees Of Dartmouth College System and methods for encrypted execution of computer programs
JP3555858B2 (ja) * 2000-03-23 2004-08-18 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの編集方法、シングルパッケージ化システム、プログラム開発システム、プログラムの身元情報付加システム及び記憶媒体
US7383443B2 (en) * 2002-06-27 2008-06-03 Microsoft Corporation System and method for obfuscating code using instruction replacement scheme
US7150003B2 (en) * 2002-11-25 2006-12-12 Matsushita Electric Industrial Co., Ltd. Class coalescence for obfuscation of object-oriented software
US7587616B2 (en) * 2005-02-25 2009-09-08 Microsoft Corporation System and method of iterative code obfuscation

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
LINN ET AL.: "Obfuscation of Executable Code to Improve Resistance to Static Disassembly", THE UNIVERSITY OF ARIZONA, 2003, XP003006997, Retrieved from the Internet <URL:http://www.cs.arizona.edu/solar/papers/CCS2003.pdf> *
MONDEN A.: "Software Protection no Gijutsu Doko (first part) - Software Tantai deno Tamper-resistant-ka Gijutsu -", JOHO SHORI, INFORMATION PROCESSING SOCIETY OF JAPAN, vol. 46, no. 4, 15 April 2005 (2005-04-15), pages 431 - 437, XP003006996 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2949583A1 (fr) * 2009-09-01 2011-03-04 Thales Sa Procede de production d'une image destinee a un systeme d'exploitation dite image os et dispositif correspondant
JP2012022677A (ja) * 2010-07-01 2012-02-02 Aladdin Europe Gmbh オブジェクト指向言語で記述されたアプリケーションのクラスの複数のメソッドのうち1つを選択的にプロテクトするメソッド又はデバイス
JP2012133736A (ja) * 2010-12-24 2012-07-12 Kddi Corp ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム

Also Published As

Publication number Publication date
JP2006344160A (ja) 2006-12-21
JP4669934B2 (ja) 2011-04-13
US20090235088A1 (en) 2009-09-17

Similar Documents

Publication Publication Date Title
US20240126930A1 (en) Secure Collaboration Between Processors And Processing Accelerators In Enclaves
JP4074057B2 (ja) 耐タンパプロセッサにおける暗号化データ領域のプロセス間共有方法
RU2439669C2 (ru) Способ предотвращения обратного инжиниринга программного обеспечения, неавторизованной модификации и перехвата данных во время выполнения
CN101491000B (zh) 用于混淆密码函数的方法和系统
JP5337411B2 (ja) 情報秘匿化方法および情報秘匿化装置
JP4770425B2 (ja) 保護済み実行プログラムの作成のためのプログラム、方法及び装置
US7181603B2 (en) Method of secure function loading
US8958546B2 (en) Steganographic messaging system using code invariants
JP2010170570A (ja) 対称鍵暗号化に基づくデータの保存および検索
JPWO2006129641A1 (ja) コンピュータシステム及びプログラム生成装置
CN108133147B (zh) 可执行代码的保护方法、设备及可读存储介质
JP2009075720A (ja) 情報処理装置及び情報処理プログラム
JP2014207717A (ja) 指数難読化
CN106415491A (zh) 一种应用保护方法、服务器以及终端
CN112966227A (zh) 代码加密解密方法和装置、存储介质
JP7331714B2 (ja) 情報処理装置、情報処理方法及びプログラム
WO2006132311A1 (ja) プログラム変換装置、実行支援装置、それらの方法およびそれらのコンピュータ・プログラム
CN107871066A (zh) 基于安卓系统的代码编译方法及装置
US20080175391A1 (en) Apparatus and method for cryptographic protection of directories and files
JP2006216002A (ja) Urlセキュリティーシステム
JP5282879B2 (ja) プライバシ情報保護システムとその方法
JP2007172526A (ja) 情報処理システム、情報処理方法
CN110737910A (zh) 一种Android log解密管理方法、装置、设备和介质
JP5574550B2 (ja) 情報秘匿化方法および情報秘匿化装置
JP2005266887A (ja) プログラム難読化装置、プログラム配布システム、コンピュータプログラム

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application
WWE Wipo information: entry into national phase

Ref document number: 11921908

Country of ref document: US

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 06757172

Country of ref document: EP

Kind code of ref document: A1