JP5627444B2 - ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム - Google Patents

ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム Download PDF

Info

Publication number
JP5627444B2
JP5627444B2 JP2010287563A JP2010287563A JP5627444B2 JP 5627444 B2 JP5627444 B2 JP 5627444B2 JP 2010287563 A JP2010287563 A JP 2010287563A JP 2010287563 A JP2010287563 A JP 2010287563A JP 5627444 B2 JP5627444 B2 JP 5627444B2
Authority
JP
Japan
Prior art keywords
variables
encoding
software
arbitrary
encoded
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
JP2010287563A
Other languages
English (en)
Other versions
JP2012133736A (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.)
KDDI Corp
Original Assignee
KDDI 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 KDDI Corp filed Critical KDDI Corp
Priority to JP2010287563A priority Critical patent/JP5627444B2/ja
Publication of JP2012133736A publication Critical patent/JP2012133736A/ja
Application granted granted Critical
Publication of JP5627444B2 publication Critical patent/JP5627444B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、オブジェクト指向言語で記述されたソフトウェアにおいて、バイト長の異なる複数の変数を同時に符号化してソフトウェアを難読化するソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラムに関する。
一般に、ソフトウェアには、価値のあるアルゴリズムおよびコンテンツの暗号鍵など、利用者に対して秘密にすべき情報が含まれる場合がある。このような情報が外部に露呈すると、サービスの継続に大きな影響を及ぼす可能性が高い。そのため、例えば、著作権管理プログラムに含まれる鍵等は、保護すべきデータであり、こうした鍵の生成や廃棄などの鍵管理処理は、保護すべき処理内容である。
一方で、ソフトウェアを解析するための技術(RE:Reverse Engineering)が数多く開発されている。このため、これらの技術によりソフトウェアが解析されると、不正者が秘密情報を入手するという脅威が考えられる。この脅威に対し、ソフトウェアの仕様を保ったまま、ソフトウェアの解析を困難にする難読化という技術がある。
例えば、ソフトウェアに含まれるデータを符号化することにより、ソフトウェアの解析を困難にする方式として、元のプログラムで用いられている変数の個数、ならびに当該変数間の参照・代入関係を秘匿し、かつ、秘密鍵の候補数を多くして耐性の高いプログラムの難読化を実現する技術が知られている(例えば、特許文献1参照。)。
また、C言語の共用体を利用して、ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割し、分割された変数を含むソフトウェアを変換することにより、ソフトウェアに含まれるバイト長の異なる複数の変数を同時に符号化してソフトウェアの解析を困難にすることも考えられる。
特開2006−079347号公報
しかしながら、特許文献1に記載の技術では、符号化の対象が同じバイト長の変数のみに制約されてしまう。そのため、例えば、バイト長が異なる整数型変数と倍精度浮動小数型変数を同時に符号化することは不可能であるという問題があった。
また、上記のように、C言語については、C言語の共用体を利用することにより、バイト長が異なる整数型変数と倍精度浮動小数型変数を同時に符号化することも可能であると考えられるが、オブジェクト指向言語では、共用体を利用することができないため、上記の技術では、オブジェクト指向言語で記述されたソフトウェアについて、バイト長が異なる整数型変数と倍精度浮動小数型変数を同時に符号化することは不可能であるという問題があった。
そこで、本発明は、上述の課題に鑑みてなされたものであり、オブジェクト指向言語で記述されたソフトウェアにおいて、バイト長の異なる複数の変数を同時に符号化してソフトウェアを難読化するソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラムを提供することを目的とする。
本発明は、上記の課題を解決するために以下の事項を提案している。なお、理解を容易にするために、本発明の実施形態に対応する符号を付して説明するが、これに限定されるものではない。
(1)本発明は、オブジェクト指向言語で記述されたソフトウェア内の複数の変数を符号化してソフトウェアを難読化するソフトウェアの難読化装置であって、データ変換用クラスを定義するデータ変換用クラス定義手段(例えば、図1のクラス定義部110に相当)と、前記ソフトウェアから前記符号化の対象となる任意型の変数をn個(n;正の整数)選択する選択手段(例えば、図1の選択部120に相当)と、前記選択されたn個の任意型の変数をそれぞれ固定長のデータに分割する分割手段(例えば、図1の分割部130に相当)と、m個(m;正の整数)の符号化式を定義する符号化式定義手段(例えば、図1の符号化式定義部140に相当)と、n個の独立な符号化式からn個の復号式およびm−nの非自明な関係式を導出する導出手段(例えば、図1の式導出部150に相当)と、前記符号化式および復号式を用いて、前記ソフトウェア内の変数を符号化変数に置換する置換手段(例えば、図1の置換部160に相当)と、該符号化変数に初期値を与え、連続する代入命令をマージするマージ手段(例えば、図1のマージ部170に相当)と、を備えたことを特徴とするソフトウェアの難読化装置を提案している。
この発明によれば、データ変換用クラス定義手段は、データ変換用クラスを定義する。選択手段は、ソフトウェアから符号化の対象となる任意型の変数をn個(n;正の整数)選択する。分割手段は、選択されたn個の任意型の変数をそれぞれ固定長のデータに分割する。符号化式定義手段は、m個(m;正の整数)の符号化式を定義する。導出手段は、n個の独立な符号化式からn個の復号式およびm−nの非自明な関係式を導出する。置換手段は、符号化式および復号式を用いて、ソフトウェア内の変数を符号化変数に置換する。マージ手段は、符号化変数に初期値を与え、連続する代入命令をマージする。したがって、本発明においては、データ変換クラスを用いて、バイト長が異なる複数の変数を任意長のデータに分割して、これらを個別に符号化できるため、オブジェクト指向言語で記述されたソフトウェアにおいて、バイト長が異なる複数の変数を同時に符号化して、ソフトウェアの難読化を行うことができる。
(2)本発明は、(1)のソフトウェアの難読化装置について、前記符号化変数に対する復号処理において、命令列を変更することを特徴とするソフトウェアの難読化装置を提案している。
この発明によれば、符号化変数に対する復号処理において、命令列を変更する。これにより、処理の正しさを保証し、かつ不正な第三者による処理の解析を防止することができる。
(3)本発明は、(1)のソフトウェアの難読化装置について、前記置換手段が、前記符号化変数にm−nの非自明な関係式を満たす任意の初期値を与えることを特徴とするソフトウェアの難読化装置を提案している。
この発明によれば、置換手段が、符号化変数にm−nの非自明な関係式を満たす任意の初期値を与える。これにより、不正な第三者によるソフトウェアの解析を困難にすることができる。
(4)本発明は、(1)のソフトウェアの難読化装置について、前記符号化式定義手段が、m×nの行列(但し、mは、m≧nの正の整数)およびm次元の任意のベクトルを生成する生成手段を備え、前記生成した行列およびベクトルを変換鍵として前記n個の変数を線形変換して同時にm個の整数を符号化する符号化式を定義することを特徴とするソフトウェアの難読化装置を提案している。
この発明によれば、生成手段が、m×nの行列(但し、mは、m≧nの正の整数)およびm次元の任意のベクトルを生成し、生成した行列およびベクトルを変換鍵としてn個の変数を線形変換して同時にm個の整数を符号化する符号化式を定義する。したがって、ソフトウェア中のn個の変数を線形変換により同時にm個の整数に符号化するため、ソフトウェア中で用いられている変数の個数を秘匿すると同時に、変数間の参照および代入関係も秘匿することができる。また、変換鍵として行列およびベクトルを用いるため鍵の候補数を多くすることができる。このことにより、耐性の高いソフトウェアの難読化を実現することができる。
(5)本発明は、(1)のソフトウェアの難読化装置について、前記任意型の変数が、整数型変数および倍精度浮動小数型変数であることを特徴とするソフトウェアの難読化装置を提案している。
この発明によれば、任意型の変数が、整数型変数および倍精度浮動小数型変数である。つまり、本発明により、オブジェクト指向言語で記述されたソフトウェア内に、代表的なバイト長4バイトの整数型変数とバイト長8バイトの倍精度浮動小数型変数が含まれていても、これらの変数を同時に符号化することができる。
(6)本発明は、(1)のソフトウェアの難読化装置について、前記オブジェクト指向言語がjava言語であることを特徴とするソフトウェアの難読化装置を提案している。
この発明によれば、オブジェクト指向言語がjava言語である。したがって、最も代表的なjava言語で記述されたソフトウェアにおいても、本発明を適用することができる。
(7)本発明は、オブジェクト指向言語で記述されたソフトウェア内の複数の変数を符号化してソフトウェアを難読化するソフトウェアの難読化方法であって、データ変換用クラスを定義する第1のステップ(例えば、図2のステップS101に相当)と、前記ソフトウェアから前記符号化の対象となる任意型の変数をn個(n;正の整数)選択する第2のステップ(例えば、図2のステップS102に相当)と、前記選択されたn個の任意型の変数をそれぞれ固定長のデータに分割する第3のステップ(例えば、図2のステップS103に相当)と、m個(m;正の整数)の符号化式を定義する第4のステップ(例えば、図2のステップS104に相当)と、n個の独立な符号化式からn個の復号式およびm−nの非自明な関係式を導出する第5のステップ(例えば、図2のステップS105に相当)と、前記符号化式および復号式を用いて、前記ソフトウェア内の変数を符号化変数に置換する第6のステップ(例えば、図2のステップS106に相当)と、該符号化変数に初期値を与え、連続する代入命令をマージする第7のステップ(例えば、図2のステップS107に相当)と、を備えたことを特徴とするソフトウェアの難読化方法を提案している。
この発明によれば、データ変換用クラスを定義し、ソフトウェアから符号化の対象となる任意型の変数をn個(n;正の整数)選択する。次に、選択されたn個の任意型の変数をそれぞれ固定長のデータに分割し、m個(m;正の整数)の符号化式を定義して、n個の独立な符号化式からn個の復号式およびm−nの非自明な関係式を導出する。そして、符号化式および復号式を用いて、ソフトウェア内の変数を符号化変数に置換し、符号化変数に初期値を与え、連続する代入命令をマージする。したがって、本発明においては、データ変換クラスを用いて、バイト長が異なる複数の変数を任意長のデータに分割して、これらを個別に符号化できるため、オブジェクト指向言語で記述されたソフトウェアにおいて、バイト長が異なる複数の変数を同時に符号化して、ソフトウェアの難読化を行うことができる。
(8)本発明は、(7)のソフトウェアの難読化方法について、前記第4のステップが、m×nの行列(但し、mは、m≧nの正の整数)およびm次元の任意のベクトルを生成する第8のステップ(例えば、図3のステップS1401に相当)と、前記生成した行列およびベクトルを変換鍵として前記n個の変数を線形変換して同時にm個の整数を符号化する符号化式を定義する第9のステップ(例えば、図3のステップS1402に相当)とを備えたことを特徴とするソフトウェアの難読化方法を提案している。
この発明によれば、第4のステップにおいて、m×nの行列(但し、mは、m≧nの正の整数)およびm次元の任意のベクトルを生成し、生成した行列およびベクトルを変換鍵としてn個の変数を線形変換して同時にm個の整数を符号化する符号化式を定義する。したがって、ソフトウェア中のn個の変数を線形変換により同時にm個の整数に符号化するため、ソフトウェア中で用いられている変数の個数を秘匿すると同時に、変数間の参照および代入関係も秘匿することができる。また、変換鍵として行列およびベクトルを用いるため鍵の候補数を多くすることができる。このことにより、耐性の高いソフトウェアの難読化を実現することができる。
(9)本発明は、オブジェクト指向言語で記述されたソフトウェア内の複数の変数を符号化してソフトウェアを難読化するソフトウェアの難読化方法をコンピュータに実行させるためのプログラムであって、データ変換用クラスを定義する第1のステップ(例えば、図2のステップS101に相当)と、前記ソフトウェアから前記符号化の対象となる任意型の変数をn個(n;正の整数)選択する第2のステップ(例えば、図2のステップS102に相当)と、前記選択されたn個の任意型の変数をそれぞれ固定長のデータに分割する第3のステップ(例えば、図2のステップS103に相当)と、m個(m;正の整数)の符号化式を定義する第4のステップ(例えば、図2のステップS104に相当)と、n個の独立な符号化式からn個の復号式およびm−nの非自明な関係式を導出する第5のステップ(例えば、図2のステップS105に相当)と、前記符号化式および復号式を用いて、前記ソフトウェア内の変数を符号化変数に置換する第6のステップ(例えば、図2のステップS106に相当)と、該符号化変数に初期値を与え、連続する代入命令をマージする第7のステップ(例えば、図2のステップS107に相当)と、をコンピュータに実行させるためのプログラムを提案している。
この発明によれば、データ変換用クラスを定義し、ソフトウェアから符号化の対象となる任意型の変数をn個(n;正の整数)選択する。次に、選択されたn個の任意型の変数をそれぞれ固定長のデータに分割し、m個(m;正の整数)の符号化式を定義して、n個の独立な符号化式からn個の復号式およびm−nの非自明な関係式を導出する。そして、符号化式および復号式を用いて、ソフトウェア内の変数を符号化変数に置換し、符号化変数に初期値を与え、連続する代入命令をマージする。したがって、本発明においては、データ変換クラスを用いて、バイト長が異なる複数の変数を任意長のデータに分割して、これらを個別に符号化できるため、オブジェクト指向言語で記述されたソフトウェアにおいて、バイト長が異なる複数の変数を同時に符号化して、ソフトウェアの難読化を行うことができる。
(10)本発明は、(9)のプログラムについて、前記第4のステップが、m×nの行列(但し、mは、m≧nの正の整数)およびm次元の任意のベクトルを生成する第8のステップ(例えば、図3のステップS1401に相当)と、前記生成した行列およびベクトルを変換鍵として前記n個の変数を線形変換して同時にm個の整数を符号化する符号化式を定義する第9のステップ(例えば、図3のステップS1402に相当)とをコンピュータに実行させるためのプログラムを提案している。
この発明によれば、第4のステップにおいて、m×nの行列(但し、mは、m≧nの正の整数)およびm次元の任意のベクトルを生成し、生成した行列およびベクトルを変換鍵としてn個の変数を線形変換して同時にm個の整数を符号化する符号化式を定義する。したがって、ソフトウェア中のn個の変数を線形変換により同時にm個の整数に符号化するため、ソフトウェア中で用いられている変数の個数を秘匿すると同時に、変数間の参照および代入関係も秘匿することができる。また、変換鍵として行列およびベクトルを用いるため鍵の候補数を多くすることができる。このことにより、耐性の高いソフトウェアの難読化を実現することができる。
本発明によれば、オブジェクト指向言語で記述されたソフトウェアにおいて、任意のデータ長の変数、すなわち、すべての型の変数を符号化することができるという効果がある。また、本発明により、セマンティクスが異なる複数のデータをまとめて変換することにより、従来よりも安全性が向上するという効果がある。さらに、オブジェクト指向言語で記述されたソフトウェア内の各変数の初期値を任意の値で設定できるため、さらに、安全性が向上するという効果がある。
本発明の実施形態に係るソフトウェアの難読化装置の構成を示す図である。 本発明の実施形態に係るソフトウェアの難読化装置の処理を示す図である。 本発明の実施形態に係るソフトウェアの難読化装置の難読化の処理を示す図である。 本発明の実施例に係るデータ変換用クラスを定義するソースコードを例示する図である。 本発明の実施例に係る変換前のソースコードを例示する図である。 本発明の実施例に係る変換後のソースコードを例示する図である。
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
<実施形態>
以下、図1から図3を用いて、本発明の実施形態について説明する。
<ソフトウェアの難読化装置の構成>
本実施形態に係るソフトウェアの難読化装置は、図1に示すように、クラス定義部110と、選択部120と、分割部130と、符号化式定義部140と、式導出部150と、置換部160と、マージ部170とから構成されている。
クラス定義部110は、データ変換用クラスを定義する。選択部120は、ソフトウェアから符号化の対象となる任意型の変数をn個(n;正の整数)選択する。分割部130は、選択されたn個の任意型の変数をそれぞれ固定長のデータに分割する。
符号化式定義部140は、m個(m;正の整数)の符号化式を定義する。式導出部150は、n個の独立な符号化式からn個の復号式およびm−nの非自明な関係式を導出する。置換部160は、符号化式および復号式を用いて、ソフトウェア内の変数を符号化変数に置換する。マージ部170は、符号化変数に初期値を与え、連続する代入命令をマージする。
<ソフトウェアの難読化装置の処理>
図2および図3を用いて、ソフトウェアの難読化装置の処理について説明する。なお、本実施形態においては、java言語により記述されたソースコードを難読化する場合を例にとって説明する。また、以下では、double型の変数long_datとint型の変数とを同時に符号化する例について説明するが、これに限らず、その他のバイト長の変数も同様に、int型のデータに分割して符号化することができる。
対象のjava言語により記述されたソースコードにデータ変換用クラスの定義を追加する。また、このクラスのクラス変数を定義する。次に、対象のjava言語により記述されたソースコードにint型変数iHおよびiLの定義を追加する。これらの変数は、それぞれ変数long_datの上位4バイトおよび下位4バイトを格納するために用いる。さらに、long_datに対する代入命令long_dat=valを下記、数1の代入命令に置換する。ここで、先に宣言したクラス変数をdiとする。
Figure 0005627444
ソースコードの中から、難読化の対象として符号化を施すn個(nは整数数)の変数を任意に選択する。この操作で選ばれたn個の変数x1,x2…,xn,とする(ステップS102)。
次に、ステップS102において、選択されたn個の任意型の変数をそれぞれ固定長のデータに分割する(ステップS103)。さらに、m個(m;正の整数)の符号化式を定義する(ステップS104)。具体的には、図3に示すように、m×n型行列A、m次元ベクトルcを任意に生成し、これらを秘密鍵とする(ステップS1041)。但し、mは、m≧nなる正整数である。さらに、生成した行列Aおよびベクトルcを用いて以下の変換式数2を定義する。
Figure 0005627444
ここで、X1,X2,…,Xmは、難読化後のソフトウェアで用いられる符号化されたm個の変数である。
上記した変換式をn個の変数x1,x2,…,xnに関するm本の連立方程式と見なし、それぞれの変数について解く。その結果、それぞれの変数x1,x2,…,xnに関して以下の数3で示す復号式が成立する(ステップS1402)。
Figure 0005627444
なお、変数log_datに対する復号処理は、以下の数4に示す命令列を用いる。
Figure 0005627444
ただし、数4において、d_iHおよびd_iLは、それぞれint型変数iHおよびiLに対する復号式である。
また、上記の符号化処理の過程においては、符号化変数に対して、初期値を設定する必要がある。本実施形態においては、符号化処理の過程で得られるm−n個の非自明な関係式を満たす任意の値を符号化変数の初期値として設定することができる。これにより、攻撃者の解析コストが増大するという利点がある。
数3に示す復号式および数4に示す命令列によって、元のソースコード中のそれぞれの変数x1,x2,…,xnの値を復号化された変数X1,X2,…Xmを用いて表すことが可能になる。また、この手順では、m本の連立方程式から、n個の変数x1,x2…xnの値を求める。このため、符号化された変数X1,X2,…Xmの間には、m−n個の自明でない以下の関係式数5が成り立つことになる(ステップS105)。
Figure 0005627444
この自明でない関係式を用いることにより、上記の復号式における各変数X1,X2,…,Xmの係数を可変とすることができる。
次に、ソースコード中で用いられている変数x1,x2,…,xnを以下の規則に従い、符号化された変数X1,X2,…Xmで置き換える(ステップS106)。
(a)変数xiへの代入命令への置き換え
ソースコード中の変数xiに対する代入命令xi←uを、以下の演算式数6で示されるように、変数X1,X2,…XMに対する代入命令に置き換える。
Figure 0005627444
この代入命令が実行されると、符号化されたm個全ての変換X1,X2,…Xmが、同時に変更される。
(b)参照されている変数xjの置き換え
プログラム中で参照されている変数xjを、数3で示す復号式xj(X1,X2,…Xm)を用いて、変数X1,X2,…Xmの式に置き換える。
後処理として、符号化された変数X1,X2,…,Xmへの初期値を与える。また、連続する変数X1,X2,…Xmへの代入命令のマージを行う(ステップS107)。
(a)符号化された変数への初期値代入
上記で示したステップS106の(a)、(b)の処理により、ソースコード中の変数x1,x2,…,xnは全てX1,X2,…,Xmで置き換えられる。これらの変数の初期値は、自明でない関係式f1,f2,…fm−nを満たす任意の整数とする。
(b)連続する代入命令のマージ
ステップS106の(b)の処理により生成された、符号化された変数X1,X2,…Xmへの代入命令の中で、連続するものをマージする。
最後に、ソフトウェアの解析が十分に困難であると判定されれば、難読化処理を終了する。さらなる難読化が必要であると判定されれば、ステップS103からステップS107までの処理を繰り返す。
したがって、本実施形態によれば、オブジェクト指向言語で記述されたソフトウェアにおいて、任意のデータ長の変数、すなわち、すべての型の変数を符号化することができる。また、本実施形態により、セマンティクスが異なる複数のデータをまとめて変換することにより、従来よりも安全性が向上する。さらに、オブジェクト指向言語で記述されたソフトウェア内の各変数の初期値を任意の値で設定できるため、さらに、安全性が向上する。
<実施例>
本実施例においては、区分求積により、関数fの区間[a、b]における定積分を求める関数の変換例を示す。ここで、int型変数cntとdouble型変数sumを符号化の対象変数とする。
また、図4は、データ変換用クラスを定義するソースコードを示しているが、この変換に用いたルールは、数7である。
Figure 0005627444
図5は、変換前のソースコードを示し、図6は、上記実施形態に示した処理を上記変換ルールにより変換したソースコードを示している。
なお、ソフトウェアの難読化装置の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをソフトウェアの難読化装置に読み込ませ、実行することによって本発明のソフトウェアの難読化装置を実現することができる。ここでいうコンピュータシステムとは、OSや周辺装置等のハードウェアを含む。
また、「コンピュータシステム」は、WWW(World Wide Web)システムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
110;クラス定義部
120;選択部
130;分割部
140;符号化式定義部
150;式導出部
160;置換部
170;マージ部

Claims (9)

  1. オブジェクト指向言語で記述されたソフトウェア内の複数の変数を符号化してソフトウェアを難読化するソフトウェアの難読化装置であって、
    データ変換用クラスを定義するデータ変換用クラス定義手段と、
    前記ソフトウェアから前記符号化の対象となる任意型の変数をn個(n;正の整数、x1、x2、・・・、xn)選択する選択手段と、
    前記選択されたn個の任意型の変数をそれぞれm個(mは、m≧nの正の整数)の固定長のデータに分割する分割手段と、
    前記選択されたn個の変数(x1、x2、・・・、xn)を前記分割したm個の固定長のデータに対応したm個の符号化された変数(X1、X2、・・・、Xm)に変換するための符号化式を定義する符号化式定義手段と、
    前記定義したm個の符号化式をm個の方程式からなる連立方程式とみなし、この連立方程式を前記選択したn個の任意型の変数それぞれについて解くことにより前記選択したn個の任意型の変数に対応した独立な符号化式を導出し、前記選択されたn個の任意型の変数(x1、x2、・・・、xn)を前記m個の符号化された変数(X1、X2、・・・、Xm)を用いて表すことにより、前記m個の符号化された変数(X1、X2、・・・、Xm)の間で成り立つm−nの非自明な関係式を導出する導出手段と、
    前記符号化式および復号式を用いて、前記ソフトウェアから符号化の対象とするために選択したn個の任意型の変数を符号化変数に置換する置換手段と、
    該符号化変数に初期値を与え、連続する代入命令をマージするマージ手段と、
    を備えたことを特徴とするソフトウェアの難読化装置。
  2. 前記符号化変数に対する復号処理において、命令列を変更することを特徴とする請求項1に記載のソフトウェアの難読化装置。
  3. 前記符号化式定義手段が、前記mとnとを用いて、
    m×nの行列(但し、mは、m≧nの正の整数)およびm次元の任意のベクトルを生成する生成手段を備え、
    前記生成した行列およびベクトルを変換鍵として前記n個の変数を線形変換して同時にm個の整数を符号化する符号化式を定義することを特徴とする請求項1に記載のソフトウェアの難読化装置。
  4. 前記任意型の変数が、整数型変数および倍精度浮動小数型変数であることを特徴とする請求項1に記載のソフトウェアの難読化装置。
  5. 前記オブジェクト指向言語がjava言語であることを特徴とする請求項1に記載のソフトウェアの難読化装置。
  6. オブジェクト指向言語で記述されたソフトウェア内の複数の変数を符号化してソフトウェアを難読化するソフトウェアの難読化方法であって、
    データ変換用クラスを定義する第1のステップと、
    前記ソフトウェアから前記符号化の対象となる任意型の変数をn個(n;正の整数、x1、x2、・・・、xn)選択する第2のステップと、
    前記選択されたn個の任意型の変数をそれぞれm個(mは、m≧nの正の整数)の固定長のデータに分割する第3のステップと、
    前記選択されたn個の変数(x1、x2、・・・、xn)を前記分割したm個の固定長のデータに対応したm個の符号化された変数(X1、X2、・・・、Xm)に変換するための符号化式を定義する第4のステップと、
    前記定義したm個の符号化式をm個の方程式からなる連立方程式とみなし、この連立方程式を前記選択したn個の任意型の変数それぞれについて解くことにより前記選択したn個の任意型の変数に対応した独立な符号化式を導出し、前記選択されたn個の任意型の変数(x1、x2、・・・、xn)を前記m個の符号化された変数(X1、X2、・・・、Xm)を用いて表すことにより、前記m個の符号化された変数(X1、X2、・・・、Xm)の間で成り立つm−nの非自明な関係式を導出する第5のステップと、
    前記符号化式および復号式を用いて、前記ソフトウェアから符号化の対象とするために選択したn個の任意型の変数を符号化変数に置換する第6のステップと、
    該符号化変数に初期値を与え、連続する代入命令をマージする第7のステップと、
    を備えたことを特徴とするソフトウェアの難読化方法。
  7. 前記第4のステップが、前記mとnとを用いて、
    m×nの行列(但し、mは、m≧nの正の整数)およびm次元の任意のベクトルを生成する第8のステップと、
    前記生成した行列およびベクトルを変換鍵として前記n個の変数を線形変換して同時にm個の整数を符号化する符号化式を定義する第9のステップとを備えたことを特徴とする請求項6に記載のソフトウェアの難読化方法。
  8. オブジェクト指向言語で記述されたソフトウェア内の複数の変数を符号化してソフトウェアを難読化するソフトウェアの難読化方法をコンピュータに実行させるためのプログラムであって、
    データ変換用クラスを定義する第1のステップと、
    前記ソフトウェアから前記符号化の対象となる任意型の変数をn個(n;正の整数、x1、x2、・・・、xn)選択する第2のステップと、
    前記選択されたn個の任意型の変数をそれぞれm個(mは、m≧nの正の整数)の固定長のデータに分割する第3のステップと、
    前記選択されたn個の変数(x1、x2、・・・、xn)を前記分割したm個の固定長のデータに対応したm個の符号化された変数(X1、X2、・・・、Xm)に変換するための符号化式を定義する第4のステップと、
    前記定義したm個の符号化式をm個の方程式からなる連立方程式とみなし、この連立方程式を前記選択したn個の任意型の変数それぞれについて解くことにより前記選択したn個の任意型の変数に対応した独立な符号化式を導出し、前記選択されたn個の任意型の変数(x1、x2、・・・、xn)を前記m個の符号化された変数(X1、X2、・・・、Xm)を用いて表すことにより、前記m個の符号化された変数(X1、X2、・・・、Xm)の間で成り立つm−nの非自明な関係式を導出する第5のステップと、
    前記符号化式および復号式を用いて、前記ソフトウェアから符号化の対象とするために選択したn個の任意型の変数を符号化変数に置換する第6のステップと、
    該符号化変数に初期値を与え、連続する代入命令をマージする第7のステップと、
    をコンピュータに実行させるためのプログラム。
  9. 前記第4のステップが、前記mとnとを用いて、
    m×nの行列(但し、mは、m≧nの正の整数)およびm次元の任意のベクトルを生成する第8のステップと、
    前記生成した行列およびベクトルを変換鍵として前記n個の変数を線形変換して同時にm個の整数を符号化する符号化式を定義する第9のステップとをコンピュータに実行させるための請求項8に記載のプログラム。
JP2010287563A 2010-12-24 2010-12-24 ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム Active JP5627444B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010287563A JP5627444B2 (ja) 2010-12-24 2010-12-24 ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010287563A JP5627444B2 (ja) 2010-12-24 2010-12-24 ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2012133736A JP2012133736A (ja) 2012-07-12
JP5627444B2 true JP5627444B2 (ja) 2014-11-19

Family

ID=46649228

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010287563A Active JP5627444B2 (ja) 2010-12-24 2010-12-24 ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム

Country Status (1)

Country Link
JP (1) JP5627444B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6203028B2 (ja) * 2013-12-13 2017-09-27 Kddi株式会社 疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1260055A (zh) * 1997-06-09 2000-07-12 联信公司 用于提高软件安全性的模糊技术
JP2002118550A (ja) * 2000-10-06 2002-04-19 Masao Kasai コンピューターを利用した本人確認システム
JP4667800B2 (ja) * 2004-09-09 2011-04-13 Kddi株式会社 符号化方法およびそのプログラム
JP4669934B2 (ja) * 2005-06-10 2011-04-13 国立大学法人 奈良先端科学技術大学院大学 プログラム変換装置、実行支援装置、それらの方法およびそれらのコンピュータ・プログラム
JP2007086845A (ja) * 2005-09-20 2007-04-05 Kddi Corp クライアントサーバシステムおよび同システムにおけるサーバサイドプログラムの実現方法ならびにそのサーバ装置、サーバサイドプログラム
JP2008040853A (ja) * 2006-08-08 2008-02-21 Matsushita Electric Ind Co Ltd アプリケーション実行方法およびアプリケーション実行装置
JP2011209801A (ja) * 2010-03-29 2011-10-20 Kddi Corp ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム

Also Published As

Publication number Publication date
JP2012133736A (ja) 2012-07-12

Similar Documents

Publication Publication Date Title
JP6257754B2 (ja) データの保護
KR102000861B1 (ko) 스트리밍 미디어 및 다른 데이터 흐름들의 보호를 위한 난독화
KR102033196B1 (ko) 암호화 장치, 복호화 장치, 암호화 방법, 복호화 방법, 및 프로그램
JP6135804B1 (ja) 情報処理装置、情報処理方法及びプログラム
JP4667800B2 (ja) 符号化方法およびそのプログラム
JP5627444B2 (ja) ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム
WO2015166701A1 (ja) 暗号化方法、プログラム、および、システム
JP4917860B2 (ja) プログラム難読化方法およびプログラム
JP4675642B2 (ja) プログラム難読化装置およびその方法ならびにプログラム
Kapusta et al. Circular AON: A very fast scheme to protect encrypted data against key exposure
CN108809619B (zh) 用于完全同态加密的精度控制及累计误差消除方法
JP5149061B2 (ja) プログラム難読化装置、プログラム難読化方法およびプログラム
JP2011209801A (ja) ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム
JP2007079916A (ja) 符号化方法およびそのプログラム
JP2012234248A (ja) ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム
JP2017055269A (ja) 情報処理装置及び情報処理システム
JP4837506B2 (ja) プログラム難読化方法およびプログラム
JP5277825B2 (ja) プログラム難読化装置及び難読化プログラム
JP2012032900A (ja) ソフトウェアの不正配布検出装置、ソフトウェアの不正配布検出方法およびプログラム
CN113572593B (zh) 复杂格式参数传递方法及装置
JP2007086845A (ja) クライアントサーバシステムおよび同システムにおけるサーバサイドプログラムの実現方法ならびにそのサーバ装置、サーバサイドプログラム
JP6212377B2 (ja) 演算装置、演算方法およびコンピュータプログラム
JP2012043322A (ja) ソフトウェアの不正流用検出装置、ソフトウェアの不正流用検出方法およびプログラム
JP5378055B2 (ja) プログラム難読化装置、プログラム難読化方法およびプログラム
JP5149062B2 (ja) プログラム難読化装置、プログラム難読化方法およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130829

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140424

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140603

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140804

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140930

R150 Certificate of patent or registration of utility model

Ref document number: 5627444

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150