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

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

Info

Publication number
JP4669934B2
JP4669934B2 JP2005171372A JP2005171372A JP4669934B2 JP 4669934 B2 JP4669934 B2 JP 4669934B2 JP 2005171372 A JP2005171372 A JP 2005171372A JP 2005171372 A JP2005171372 A JP 2005171372A JP 4669934 B2 JP4669934 B2 JP 4669934B2
Authority
JP
Japan
Prior art keywords
program
field
description
main body
changing
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
JP2005171372A
Other languages
English (en)
Other versions
JP2006344160A (ja
Inventor
春昭 玉田
暁人 門田
匡秀 中村
健一 松本
Original Assignee
国立大学法人 奈良先端科学技術大学院大学
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 国立大学法人 奈良先端科学技術大学院大学 filed Critical 国立大学法人 奈良先端科学技術大学院大学
Priority to JP2005171372A priority Critical patent/JP4669934B2/ja
Priority to US11/921,908 priority patent/US20090235088A1/en
Priority to PCT/JP2006/311504 priority patent/WO2006132311A1/ja
Publication of JP2006344160A publication Critical patent/JP2006344160A/ja
Application granted granted Critical
Publication of JP4669934B2 publication Critical patent/JP4669934B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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

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)

Description

本発明は、ソフトウェアプロテクション技術に関し、特に、与えられたプログラムをより解析の困難なプログラムに変換するプログラム変換装置、変換されたプログラムの実行を支援する実行支援装置、それらの方法およびそれらのコンピュータ・プログラムに関する。
近年、ソフトウェアプロテクションに関する研究が盛んに行なわれている。このソフトウェアプロテクションとは、ソフトウェアの改ざん、解析、コピー、再利用(盗用)などの攻撃からソフトウェアシステムを保護する技術の総称であり、難読化、暗号化、多様化、電子透かし、バースマークなどの要素技術がある。
これらのソフトウェアプロテクション技術の中で、攻撃のしにくさという観点から、追加のプロテクション機構を持たず、プログラム自身を解析しにくくする方式であるプログラムの難読化が特に注目されている。
難読化とは、与えられたプログラムをより複雑なプログラムに変換する技術であり、レイアウト難読化、データ難読化、制御フロー難読化などがある。難読化されたプログラムは、難読化前のプログラムと同一の機能を持つが、理解や解析がより困難となっている。これに関連する技術として、以下に示すような特許文献1〜3と、非特許文献1〜2とがある。
特開2005−49925号公報 特開2004−192068号公報 米国特許第6,102,966号 Toshio Ogiso and Yusuke Sakabe and Masakazu Soushi and Mitsuko Miyaji, "Software obfuscation on a theoretical basis and its implementation," IEICE Transactions on Fundamentals, Vol.E86-A, No.1, pp 176-186 Jan 2003. Yusuke Sakabe and Masakazu Soshi and Atsuko Miyaji, "Java(登録商標) Obfuscation with a Theoretical Basis for Building Secure Mobile Agents," Lecture Notes in Computer Science, Vol. 2828, pp. 89-103, 2003.
近年作成されるプログラムは、関数やプロシージャ、メソッドといった単位に処理内容が分けられることが多い。特に、オブジェクト指向言語で書かれたプログラムは、メソッドとフィールドとを持つクラスという単位にプログラムが分割され、多くのクラスがまとまり、協調することで一つのアプリケーションが構成される。
このようなオブジェクト指向言語で書かれたプログラムを理解するには各クラスの役割、各クラス間の関係を把握することが必要となる。その理解のためには、クラスの各メソッドでどのような処理が行なわれているのかを知る必要がある。オブジェクト指向言語で書かれたプログラムではライブラリメソッドを含む様々なクラスのメソッドを呼出すことで処理が進むため、呼出されるメソッドをわからなくすることで、クラスの役割や各クラス間の関係の理解を妨げることが可能である。
非特許文献1は、メソッドの呼出し処理を隠蔽する技術であるが、呼出される可能性のあるメソッド群の名前を隠蔽することができない。非特許文献2は、クラスのメソッドにオーバロードの関係を持たせることにより、呼出されるメソッドを隠蔽する技術であるが、ライブラリメソッドの呼出しに対してはこの処理を行なうことができない。また、いずれも呼出されるメソッドの引数の型および返り値の型も隠蔽することができない。当該引数等の型に関する情報から、呼出そうとするメソッドを類推することが可能であるため、これら型を隠蔽しないと、難読化の程度を高めることができない。しかし、単に型を変更するのみでは、難読化後のプログラムの実行に支障をきたすため、型の変更または削除は困難であった。
したがって、上述した特許文献1〜3または非特許文献1〜2の技術を用いたとしても、メソッドの呼出しの隠蔽、モジュールの名前の隠蔽および、呼出されるモジュールの引数の型および返り値の型の隠蔽のすべてを同時に行なうことはできず、プログラムの難読化の程度を一定以上に高めることは不可能であった。
本発明は、上記問題点を解決するためになされたものであり、第1の目的は、メソッド呼出し処理を隠蔽して、プログラムを解析困難なプログラムに変換するプログラム変換装置、その方法およびそのコンピュータ・プログラムを提供することである。
第2の目的は、プログラム変換装置などによって解析困難に変換された後の本体プログラムの実行を支援することが可能な実行支援装置、その方法およびそのコンピュータ・プログラムを提供することである。
本発明のある局面に従えば、本体プログラムを難読化するプログラム変換装置であって、本体プログラムのメソッドの呼出しの記述を動的呼出しの記述に変更するための呼出変更手段と、呼出変更手段によって変更された後の動的呼出しを指定する文字列を暗号化して本体プログラムを変更するための暗号化手段とを含む。
好ましくは、プログラム変換装置はさらに、フィールドを参照する記述またはフィールドに値を代入する記述を、それぞれフィールドを動的に参照する記述またはフィールドに値を動的に代入する記述に変更するためのフィールド変更手段と、フィールド変更手段によって変更された後の記述に含まれるフィールドの名称を暗号化して本体プログラムを変更するための暗号化手段とを含む。
さらに好ましくは、呼出変更手段は、動的呼出しの記述を別のクラスのメソッドを経由して呼出すように変更し、フィールド変更手段は、フィールドを動的に参照する記述またはフィールドに値を動的に代入する記述を別のクラスのメソッドを経由して行なうように変更する。
さらに好ましくは、プログラム変換装置は、本体プログラムに含まれる変数の型を削除するための変数型変更手段を含む。
さらに好ましくは、プログラム変換装置はさらに、暗号化手段によって暗号化される前の文字列を別のクラスに保存するための文字列保存手段を含む。
本発明の別の局面に従えば、難読化された本体プログラムの実行を支援する実行支援装置であって、難読化された本体プログラムからのメソッドの動的呼出しに応じて、呼出しに含まれる暗号化後の値から文字列を復号するための復号手段と、復号手段によって復号された文字列を用いてメソッドを実行するための実行手段とを含む。
好ましくは、実行支援装置はさらに、難読化された本体プログラムからのフィールドの動的参照またはフィールドへの動的代入の要求に応じて、フィールドの名称を復号するための復号手段と、復号手段によって復号された名称を用いてフィールドの参照またはフィールドへの代入を行なうためのフィールドアクセス手段とを含む。
本発明のさらに別の局面に従えば、コンピュータに本体プログラムを難読化させるプログラム変換方法であって、本体プログラムに記述されたメソッドの呼出しを動的呼出しに変更するステップと、変更された後の動的呼出しを指定する文字列を暗号化して本体プログラムを変更するステップとを含む。
本発明のさらに別の局面に従えば、コンピュータに難読化された本体プログラムの実行を支援させる実行支援方法であって、難読化された本体プログラムからのメソッドの動的呼出しに応じて、呼出しに含まれる暗号化後の値から文字列を復号するステップと、復号された文字列を用いてメソッドを実行するステップとを含む。
本発明のさらに別の局面に従えば、本体プログラムを難読化するプログラム変換方法をコンピュータに実行させるためのコンピュータ・プログラムであって、プログラム変換方法は、本体プログラムに記述されたメソッドの呼出しを動的呼出しに変更するステップと、変更された後の動的呼出しを指定する文字列を暗号化して本体プログラムを変更するステップとを含む。
本発明のさらに別の局面に従えば、難読化された本体プログラムの実行を支援する実行支援方法をコンピュータに実行させるためのコンピュータ・プログラムであって、実行支援方法は、難読化された本体プログラムからのメソッドの呼出しに応じて、呼出しに含まれる暗号化後の値から文字列を復号するステップと、復号された文字列を用いてメソッドを実行するステップとを含む。
本発明のある局面によれば、本体プログラム中のメソッド呼出しを動的に行なうように変更した後、動的呼出しで指定されるメソッドの名前を暗号化するため、どのメソッドの呼出しであるのかを隠蔽することができ、プログラムの理解を困難にすることが可能となる。
また、本体プログラム中のフィールドの参照/代入の記述を別のクラスのメソッド経由で行なうように変更した後、フィールドの名称を暗号化して扱うため、どのフィールドの参照または代入であるのかを隠蔽することができ、プログラムの理解を困難にすることが可能となる。
また、変数型変更手段が、本体プログラムに含まれる変数の型を変更するので、引数や返り値の型などのプログラム中に現れる全ての変数の型情報を隠蔽することができ、プログラムの理解をさらに困難にすることが可能となる。
また、呼出し変更手段およびフィールド変更手段が、動的に行なうように変更された呼出し、またはフィールドの参照もしくはフィールドへの代入の記述を別のクラスのメソッドを経由して実行するように変更するので、この別のクラスに、難読化された本体プログラムの実行を支援させることが可能となる。
本発明の別の局面によれば、復号手段が、難読化された本体プログラムからのメソッドの呼出しに応じて、呼出しに含まれる暗号化後の値から文字列を復号し、実行手段が復号された文字列を用いてメソッドを実行するので、プログラム変換装置などによって難読化された後の本体プログラムの実行を支援することが可能となる。
また、復号手段が、難読化された本体プログラムからのフィールドの参照またはフィールドへの代入の要求に応じて、フィールドの名称を復号し、フィールドアクセス手段が復号された名称を用いてフィールドの参照またはフィールドの代入を行なうので、プログラム変換装置などによって変換された後の本体プログラムの実行の際の支援がさらに容易となる。
本発明の実施の形態におけるプログラム変換装置は、Java(登録商標)などのオブジェクト指向言語で記述されたプログラムのメソッドの呼出しおよびフィールドの参照/代入の隠蔽、変数の型を変更するように、元のプログラムを動的呼び出しを利用したプログラムに変換する。そして、実行支援装置がこの変換されたプログラムの呼出しなどを解釈し、メソッドの実行などを行なう。なお、この実行支援装置は、動的呼出しなど、本体プログラムの実行を支援するクラスとして提供され、以下DynamicCallerクラスとも呼ぶ。さらに、プログラム変換装置中で、呼出しなどが経由するように変更される別のクラスのメソッドが実行支援装置の役割を果たす実施形態も可能である。
図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−ROM8等の記録媒体によって供給される。プログラム変換プログラムおよび実行支援プログラムがコンピュータ本体1によって実行されることによって、プログラム変換装置および実行支援装置全体の制御が行なわれる。また、プログラム変換プログラムおよび実行支援プログラムは他のコンピュータより通信回線を経由し、コンピュータ本体1に供給されてもよい。
図1に示すコンピュータ本体1は、CPU(Central Processing Unit)10と、ROM(Read Only Memory)11と、RAM(Random Access Memory)12と、ハードディスク13とを含む。CPU10は、ディスプレイ装置2、FDドライブ3、キーボード5、マウス6、CD−ROM装置7、ネットワーク通信装置9、ROM11、RAM12またはハードディスク13との間でデータを入出力しながら処理を行う。FD4またはCD−ROM8に記録されたプログラム変換プログラムおよび実行支援プログラムは、CPU10によりFDドライブ3またはCD−ROM装置7を介してハードディスク13に格納される。CPU10は、ハードディスク13から適宜プログラム変換プログラムおよび実行支援プログラムをRAM12にロードして実行することによって、プログラム変換装置および実行支援装置全体の制御が行なわれる。
図2は、本発明の実施の形態におけるプログラム変換装置の機能的構成を示すブロック図である。このプログラム変換装置21は、本体プログラム23に記述されたアクセス制限を変更するアクセス制限変更部31と、本体プログラム23中に存在するメソッドをDynamicCallerクラス22経由で呼出すように変更するメソッド呼出変更部32と、本体プログラム23中に存在するフィールドの値を参照/代入する記述(get/set)をDynamicCallerクラス22経由で行なうように変更するフィールド参照/代入変更部33と、本体プログラム23中に存在するフィールド、ローカル変数の型をObjectクラスに変更する変数型変更部34と、クラス名、メソッド名およびフィールド名などの文字列を暗号化し、暗号化後の名称に変更する暗号化部35とを含む。
オブジェクト指向言語のクラスのメンバ(フィールド、メソッド)には、アクセス修飾子が存在する。このアクセス修飾子は、フィールドやメソッドに対して、どのような範囲からアクセス可能であるかを定義するものであり、public、protected、privateが存在する。アクセス制限変更部31は、クラスのメンバのアクセス修飾子を全てpublicにする。これにより、メソッドが全てDynamicCallerクラス経由で呼出されるようになるため、DynamicCallerクラスはどのようなクラスのメンバにもアクセスできるようになる。
一般に、オブジェクト指向言語で記述されたプログラムにおいては、クラスをインスタンス化してオブジェクトを作成し、そのオブジェクトに対してメッセージを送ることで動作する。クラスの定義は、メタクラスを用いることによってプログラムの実行中に動的に変更することが可能である。本発明の実施の形態においては、このような動的呼出しを利用する。
たとえば、Java(登録商標)言語であれば、java(登録商標).lang.Classクラスがメタクラスに相当し、ClassクラスのインスタンスはClassクラスのforName staticメソッドにクラス名を示す文字列を与えることで取得することができる。そして、得られたClassクラスのインスタンスに対してnewInstanceメソッドを実行することによって、対応するクラスのオブジェクトを生成することができる。さらに、Classクラスのインスタンスからjava(登録商標).lang.reflect.Methodオブジェクトを得ることにより、実行するメソッドを与えられた文字列から決定することができる。これにより、メソッドの動的呼出しが実現される。
メソッド呼出し部32は、このようなメタクラスを用いることにより、オブジェクトの生成からメソッドの実行までを文字列を与えることで行なうように本体プログラム23を変更する。
また、本発明の実施の形態においては、オブジェクト指向の重要な特徴の1つである多態性を用いてプログラムの解析をより困難にする。多態性とは、同じメッセージに対して、異なるクラスのオブジェクトは異なる動作をすることをいう。すなわち、同じ型の変数に異なるクラスのオブジェクトが入っている場合でも、変数に入っているオブジェクトによって動作が変わり、実行結果が異なる場合がある。
本実施の形態においては、オブジェクトからメタクラスを取得し、そのメタクラスからメソッドやフィールドの定義を得て、それらに対して処理を行なう。したがって、型情報が隠蔽されていても、その変数に入っているオブジェクトがプログラム変換前(難読化前)と同じであれば、本体プログラムの動作に影響を与えない。そこで、変数型変更部34が、クラスのメンバの型をクラス階層のルートクラスに変更することにより、本体プログラムの型情報が削除され、プログラムの解析をより困難にさせることができる。
暗号化部35は、メソッド呼出変更部32およびフィールド参照/代入変更部33によって変更されたクラス名、メソッド名などの文字列を暗号化し、暗号化後の名称に変更する。なお、暗号化部35はメソッド呼出変更部32によって変更されたメソッド名を暗号化する第1暗号化部と、フィールド参照/代入変更部33によって変更されたフィールド名称を暗号化する第2暗号化部とに分けてもよい。なお、本実施の形態においては、暗号化の方法として共通鍵暗号を用いているが、対称鍵暗号、またはハッシュ関数を用いても実現可能である。共通鍵方式および対称鍵方式を用いた場合には、プログラム変換装置または実行支援装置に復号鍵を保存することが必要である。ハッシュ関数を用いた場合には、ハッシュ化前の文字列を保持するテーブルを実行支援装置22に保存することにより、ハッシュ化前の文字列の復号を可能とせしめる必要がある。
図3は、本発明の実施の形態におけるプログラム変換装置21の処理手順を説明するためのフローチャートである。プログラム変換装置21の処理手順を、図3に示すフローチャートおよび図4〜図7に示すプログラム変換例を参照しながら説明する。
まず、アクセス制限変更部31は、本体プログラム23を取得し(S11)、全てのメソッド、フィールドのアクセス制限をpublicに変更する(S12)。なお、図4〜図7に示す変換前の本体プログラム100は、アクセス制限がpublicに変更された後のプログラムを示している。
次に、メソッド呼出変更部32は、全てのメソッド呼出しをDynamicCallerクラス22経由の呼出しに変更する(S13)。なお、本発明の実施の形態においては、動的呼出しを別のクラスのメソッド、つまりDynamicCallerクラスを経由せずに実行することもできる。その場合、DynamicCallerが行なう処理機能を本体プログラムに持たせる必要がある。
図4は、変換前の本体プログラム100とメソッド呼出しを変更した後の本体プログラム200とを示す図である。このプログラムはHelloWorldクラスを定義して実行するものであり、メソッド呼出変更部32によって変換前の本体プログラム100の記述101および102のそれぞれが、変更後の本体プログラム200の記述201および202に変更されている。記述201に示すように、新たなオブジェクトとして“Hello World”が変数oa1に代入され、DynamicCallerクラス経由でjava(登録商標).io.PrintStreamクラスのprintlnメソッドが呼出されるように変更される。このjava(登録商標).io.PrintStreamは、上述したメタクラスを用いてメソッドの実行を行うときに指定される文字列である。この文字列を用いて動的呼出しが行なわれる。
また、記述202に示すように、DynamicCallerクラス22経由でnewInstanceメソッドを実行することにより、HelloWorldクラスのインスタンスが生成され、生成されたインスタンスが変数o1に代入される。そして、DynamicCallerクラス22経由でHelloWorldクラスのhelloメソッドが呼出される。このとき、メソッドを呼出すためのインスタンスが変数o1である。
次に、フィールド参照/代入変更部33は、本体プログラム23中に存在するフィールドの値の参照/代入(get/set)を全てDynamicCaller22経由で行なうように変更する(S14)。
図5は、変換前のプログラム100とフィールドの値の参照/代入を変更した後の本体プログラム300とを示す図である。フィールド参照/代入変更部33によって、図4に示す記述201の最後の行が、図5に示す記述301および302に変更されている。図5の記述302に示すように、図4の記述201の最後の行のSystem.outが変数o1に置換される。また、図5の記述301が追加され、DynamicCallerクラス22経由でjava(登録商標).lang.Systemクラスのoutフィールドの値が参照されて変数o1に代入される。
次に、変数型変更部34は、全てのフィールド、ローカル変数の型をクラス階層のルートクラスであるObjectクラスに変更する(S15)。
図6は、変換前の本体プログラム100と変数の型がObjectクラスに変更された後の本体プログラム400とを示す図である。変数型変更部34によって、図5に示す記述301と図4に示す記述202の最初の行とが、それぞれ図6に示す記述401および402に変更されている。図6の記述401に示すように、変数の型がPrintStreamである変数o1の型が、Objectクラスに変更されている。また、図6の記述402に示すように、変数の型がHelloWorldである変数o1の型が、Objectクラスに変更されている。
次に、暗号化部35は、クラス名、メソッド名などを暗号化し、本体プログラム23内の名称を暗号化後の名称に変更する(S16)。
図7は、変換前の本体プログラム100と暗号化された名称に変更された後の本体プログラム500とを示す図である。図7に示すように、暗号化部35によってクラス名、フィールド名およびメソッド名が暗号化されて、記述501〜503のように変更される。図7の記述501はクラス名java(登録商標).lang.Systemおよびフィールド名outが変更されたものであり、記述502はクラス名java(登録商標).io.PrintStreamおよびメソッド名printlnが変更されたものであり、記述503はクラス名HelloWorldおよびメソッド名helloが変更されたものである。
次に、暗号部35は、図7に示すような変換後の本体プログラム24を出力して(S17)、処理を終了する。
図8は、本発明の実施の形態における実行支援装置22の機能的構成を示すブロック図である。この実行支援装置22は、プログラム変換装置21によって変換された後の本体プログラム24が実行されるときに、変換後本体プログラム24からの呼出しに応じて動作するものであり、インスタンス生成部41と、メソッド実行部42と、フィールド参照部43と、フィールド代入部44と、復号部45とを含む。なお、インスタンス生成部41、メソッド実行部42、フィールド参照部43およびフィールド代入部44は、それぞれメソッドとして提供される。復号部には、あらかじめ、暗号化部で用いた暗号鍵に対応する復号鍵を格納する。なお、ハッシュ関数を用いて暗号化した場合には、プログラム変換装置における暗号化時に復号部にハッシュ前の名称(文字列)を保存する必要がある。実行支援装置のインスタンス生成部41、メソッド実行部42、フィールド参照部43およびフィールド代入部44はいずれもDynamicCallerクラス22内に包含することができる。
インスタンス生成部41は、変換後本体プログラム24からの要求に応じて、メタクラスから対象クラスのインスタンスを生成する。すなわち、インスタンス生成部41は、変換後本体プログラム24からの要求に含まれる暗号化された値を抽出し、復号部45は当該値を復号して暗号化前の名称を得る。そして、インスタンス生成部41は、暗号化前の名称に基づいてインスタンスを生成し、生成したインスタンスを変換後本体プログラム24に返す。
メソッド実行部42は、変換後本体プログラム24からの呼出しに応じて、メタクラスを参照し、対象クラスの指定されたメソッドを実行する。すなわち、メソッド実行部42は、変換後本体プログラム24からの呼出しに含まれる暗号化された値を抽出し、復号部45により復号して暗号化前の名称を得る。そして、メソッド実行部42は、暗号化前の名称に基づいてメソッドを実行し、実行されたメソッドの返り値を変換後本体プログラム24に返す。
フィールド参照部43は、変換後本体プログラム24からの要求に応じて、メタクラスを参照し、対象クラスの指定されたフィールドを参照する。すなわち、フィールド参照部43は、変換後本体プログラム24からの要求に含まれる暗号化された値を抽出し、復号部45により復号して暗号化前の名称を得る。そして、フィールド参照部43は、暗号化前の名称に基づいて標準ライブラリに格納されるフィールドの値を参照し、このフィールドの値を変換後本体プログラム24に返す。
フィールド代入部44は、変換後本体プログラム24からの要求に応じて、メタクラスを参照し、対象クラスの指定されたフィールドに値を代入する。すなわち、フィールド代入部44は、変換後本体プログラム24からの要求に含まれる暗号化された値を抽出し、復号部45により復号して暗号化前の名称を得る。そして、フィールド代入部44は、暗号化前の名称に基づいて標準ライブラリなどに格納されるフィールドに値を代入する。なお、このフィールド代入部44は、変換後本体プログラム24に何も返さない。
以上説明したように、本実施の形態におけるプログラム変換装置によれば、全てのクラスのメソッド呼出しを動的呼出しに変換し、動的呼出しに用いる文字列を暗号化するようにしたので、本体プログラム内部に存在するメソッド呼出しを隠蔽することができ、プログラムの理解を困難にすることが可能となった。
また、フィールドの値を参照/代入する際に用いるフィールド名を暗号化するようにしたので、フィールドへのアクセスを隠蔽することができ、プログラムの理解をより困難にすることが可能となった。
また、変数の型(引数の型、返り値の型)を全てクラス階層のルートクラスに変更するようにしたので、変数の型を隠蔽することができ、プログラムの理解をより困難にすることが可能となった。
本実施の形態における実行支援装置によれば、復号部45によって暗号化された名称の元の名称を得て、得られた元の名称を用いてインスタンスの生成、メソッドの実行、フィールドの参照およびフィールドの代入を行なうようにしたので、プログラム変換装置によって変換された後の本体プログラム24の実行を支援することが可能となった。
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
本発明の実施の形態におけるプログラム変換装置および実行支援装置の構成例を示すブロック図である。 本発明の実施の形態におけるプログラム変換装置の機能的構成を示すブロック図である。 本発明の実施の形態におけるプログラム変換装置21の処理手順を説明するためのフローチャートである。 変換前の本体プログラム100とメソッド呼出しを変更した後の本体プログラム200とを示す図である。 変換前のプログラム100とフィールドの値の参照/代入を変更した後の本体プログラム300とを示す図である。 変換前の本体プログラム100と変数の型がobjectクラスに変更された後の本体プログラム400とを示す図である。 変換前の本体プログラム100と暗号化された名称に変更された後の本体プログラム500とを示す図である。 本発明の実施の形態における実行支援装置22の機能的構成を示すブロック図である。
符号の説明
1 コンピュータ本体、2 ディスプレイ装置、3 FDドライブ、4 FD、5 キーボード、6 マウス、7 CD−ROM装置、8 CD−ROM、9 ネットワーク通信装置、10 CPU、11 ROM、12 RAM、13 ハードディスク、21 プログラム変換装置、22 実行支援装置、23 本体プログラム、24 変換後本体プログラム、31 アクセス制限変更部、32 メソッド呼出変更部、33 フィールド参照/代入変更部、34 変数型変更部、35 暗号化部、36 文字列保存部、41 インスタンス生成部、42 メソッド実行部、43 フィールド参照部、44 フィールド代入部、45 復号部。

Claims (18)

  1. 本体プログラムを難読化するプログラム変換装置であって、
    前記本体プログラムのメソッドの呼出しの記述を動的呼出しの記述に変更するための呼出変更手段と、
    前記呼出変更手段によって変更された後の動的呼出しを指定する文字列を暗号化して前記本体プログラムを変更するための暗号化手段とを含む、プログラム変換装置。
  2. 前記プログラム変換装置が、フィールドを参照する記述またはフィールドに値を代入する記述を、それぞれフィールドを動的に参照する記述またはフィールドに値を動的に代入する記述に変更するためのフィールド変更手段と、
    前記フィールド変更手段によって変更された後の記述に含まれるフィールドの名称を暗号化して前記本体プログラムを変更するための暗号化手段とを含む、請求項1記載のプログラム変換装置。
  3. 前記呼出変更手段は、前記動的呼出しの記述を別のクラスのメソッドを経由して呼出すように変更し、
    前記フィールド変更手段は、フィールドを動的に参照する記述またはフィールドに値を動的に代入する記述を前記別のクラスのメソッドを経由して行なうように変更する、請求項2記載のプログラム変換装置。
  4. 前記プログラム変換装置はさらに、前記本体プログラムに含まれる変数の型を変更するための変数型変更手段を含む、請求項1〜3のいずれかに記載のプログラム変換装置。
  5. 難読化された本体プログラムの実行を支援する実行支援装置であって、
    前記難読化された本体プログラムからのメソッドの動的呼出しに応じて、暗号化後の値から文字列を復号するための復号手段と、
    前記復号手段によって復号された文字列を用いてメソッドを実行するための実行手段とを含む、実行支援装置。
  6. 前記実行支援装置が、前記難読化された本体プログラムからのフィールドの動的参照またはフィールドへの動的代入の要求に応じて、前記フィールドの名称を復号するための復号手段と、
    前記復号手段によって復号された名称を用いてフィールドの動的参照またはフィールドの動的代入を行なうためのフィールドアクセス手段とを含む、請求項5記載の実行支援装置。
  7. コンピュータに本体プログラムを難読化させるプログラム変換方法であって、
    前記本体プログラムのメソッドの呼出しの記述を動的呼出しの記述に変更するステップと、
    前記変更された後の動的呼出しを指定する文字列を暗号化して前記本体プログラムを変更するステップとを含む、プログラム変換方法。
  8. 前記プログラム変換方法が、フィールドを参照する記述またはフィールドに値を代入する記述を、それぞれフィールドを動的に参照する記述またはフィールドに値を動的に代入する記述に変更するステップと、
    前記変更された後の記述に含まれるフィールドの名称を暗号化して前記本体プログラムを変更するステップとを含む、請求項7記載のプログラム変換方法。
  9. 前記プログラム変換方法が、動的呼出しの記述を別のクラスのメソッドを経由して呼出すように変更するステップと、
    フィールドを動的に参照する記述またはフィールドに値を動的に代入する記述を前記別のクラスのメソッドを経由して行なうように変更するステップとを含む、請求項8記載のプログラム変換方法。
  10. 前記プログラム変換方法はさらに、前記本体プログラムに含まれる変数の型を変更するステップを含む、請求項7〜9のいずれかに記載のプログラム変換方法。
  11. コンピュータに難読化された本体プログラムの実行を支援させる実行支援方法であって、
    前記難読化された本体プログラムからのメソッドの動的呼出しに応じて、前記呼出しに含まれる暗号化後の値から文字列を復号するステップと、
    前記復号された文字列を用いてメソッドを実行するステップとを含む、実行支援方法。
  12. 前記実行支援方法が、前記難読化された本体プログラムからのフィールドの動的参照またはフィールドへの動的代入の要求に応じて、前記フィールドの名称を復号するステップと、
    前記復号された名称を用いてフィールドの動的参照またはフィールドの動的代入を行なうステップとを含む、請求項11記載の実行支援方法。
  13. 本体プログラムを難読化するプログラム変換方法をコンピュータに実行させるためのコンピュータ・プログラムであって、
    前記プログラム変換方法は、前記本体プログラムのメソッドの呼出しの記述を動的呼出しの記述に変更するステップと、
    前記変更された後の動的呼出しを指定する文字列を暗号化して前記本体プログラムを変更するステップとを含む、コンピュータ・プログラム。
  14. 前記コンピュータ・プログラムが、フィールドを参照する記述またはフィールドに値を代入する記述を、それぞれフィールドを動的に参照する記述またはフィールドに値を動的に代入する記述に変更するステップと、
    前記変更された後の記述に含まれるフィールドの名称を暗号化して前記本体プログラムを変更するステップとを含む、請求項13記載のコンピュータ・プログラム。
  15. 前記コンピュータ・プログラムが、前記動的呼出しの記述を別のクラスのメソッドを経由して呼出すように変更するステップと、
    フィールドを動的に参照する記述またはフィールドに値を動的に代入する記述を前記別のクラスのメソッドを経由して行なうように変更するステップとを含む、請求項14記載のコンピュータ・プログラム。
  16. 前記プログラム変換方法はさらに、前記本体プログラムに含まれる変数の型を変更するステップを含む、請求項13〜15のいずれかに記載のコンピュータ・プログラム。
  17. 難読化された本体プログラムの実行を支援する実行支援方法をコンピュータに実行させるためのコンピュータ・プログラムであって、
    前記実行支援方法は、前記難読化された本体プログラムからのメソッドの動的呼出しに応じて、前記呼出しに含まれる暗号化後の値から文字列を復号するステップと、
    前記復号された文字列を用いてメソッドを実行するステップとを含む、コンピュータ・プログラム。
  18. 前記コンピュータ・プログラムが、前記難読化された本体プログラムからのフィールドの動的参照またはフィールドへの動的代入の要求に応じて、前記フィールドの名称を復号するステップと、
    前記復号された名称を用いてフィールドの動的参照またはフィールドの動的代入を行なうステップとを含む、請求項17記載のコンピュータ・プログラム。
JP2005171372A 2005-06-10 2005-06-10 プログラム変換装置、実行支援装置、それらの方法およびそれらのコンピュータ・プログラム Expired - Fee Related JP4669934B2 (ja)

Priority Applications (3)

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

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
JP2006344160A JP2006344160A (ja) 2006-12-21
JP4669934B2 true JP4669934B2 (ja) 2011-04-13

Family

ID=37498507

Family Applications (1)

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

Country Status (3)

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

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2949583B1 (fr) * 2009-09-01 2012-02-24 Thales Sa Procede de production d'une image destinee a un systeme d'exploitation dite image os et dispositif correspondant
EP2402880A1 (en) * 2010-07-01 2012-01-04 Aladdin Europe GmbH Method and device for selectively protecting one of a plurality of methods of a class of an application written in an object-orientated language
JP5627444B2 (ja) * 2010-12-24 2014-11-19 Kddi株式会社 ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム
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
WO1999001815A1 (en) * 1997-06-09 1999-01-14 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

Also Published As

Publication number Publication date
JP2006344160A (ja) 2006-12-21
WO2006132311A1 (ja) 2006-12-14
US20090235088A1 (en) 2009-09-17

Similar Documents

Publication Publication Date Title
JP5996810B2 (ja) 自己書換え基盤のアプリケーションコード難読化装置及びその方法
JP4770425B2 (ja) 保護済み実行プログラムの作成のためのプログラム、方法及び装置
RU2620712C2 (ru) Устройство виртуальной машины, имеющее управляемую ключом обфускацию, и способ
JP5337411B2 (ja) 情報秘匿化方法および情報秘匿化装置
JP4850830B2 (ja) コンピュータシステム及びプログラム生成装置
CN106295255A (zh) 应用程序的加固方法和装置
CN105825143A (zh) 一种应用程序写入和读取数据的方法及装置
JP4669934B2 (ja) プログラム変換装置、実行支援装置、それらの方法およびそれらのコンピュータ・プログラム
US10867017B2 (en) Apparatus and method of providing security and apparatus and method of executing security for common intermediate language
CN108133147B (zh) 可执行代码的保护方法、设备及可读存储介质
CN112966227A (zh) 代码加密解密方法和装置、存储介质
CN106203141A (zh) 一种应用的数据处理方法和装置
JP2006216002A (ja) Urlセキュリティーシステム
US9268713B2 (en) Methods, systems and apparatus for managing data entries on a database
JP2007156861A (ja) 機密情報保護装置及び機密情報保護方法並びにプログラム
CN107871066A (zh) 基于安卓系统的代码编译方法及装置
US20050125352A1 (en) Method for lifetime tracking of intellectual property
JP2001356952A (ja) データ暗号化方法及びシステム
US20090150682A1 (en) Third Party Secured Storage for Web Services and Web Applications
JP3970856B2 (ja) プログラム難読化装置、プログラム配布システム、コンピュータプログラム
JP2007172526A (ja) 情報処理システム、情報処理方法
Arora et al. SecureCEdit: An approach for secure cloud-based document editing
CN113360859B (zh) 基于Python解释器的加密文件安全控制方法和装置
d’Amore et al. Source Code Anti-Plagiarism: AC# Implementation Using the Routing Approach
JP6752347B1 (ja) 情報処理装置、コンピュータプログラム及び情報処理方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070329

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080528

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100914

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

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

R150 Certificate of patent or registration of utility model

Ref document number: 4669934

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

Year of fee payment: 3

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

LAPS Cancellation because of no payment of annual fees