JP2008090668A - Program obfuscation method and program - Google Patents

Program obfuscation method and program Download PDF

Info

Publication number
JP2008090668A
JP2008090668A JP2006271852A JP2006271852A JP2008090668A JP 2008090668 A JP2008090668 A JP 2008090668A JP 2006271852 A JP2006271852 A JP 2006271852A JP 2006271852 A JP2006271852 A JP 2006271852A JP 2008090668 A JP2008090668 A JP 2008090668A
Authority
JP
Japan
Prior art keywords
program
control variable
control
blocks
conditional
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.)
Granted
Application number
JP2006271852A
Other languages
Japanese (ja)
Other versions
JP4917860B2 (en
Inventor
Kazuhide Fukushima
和英 福島
Shinsaku Kiyomoto
晋作 清本
Toshiaki Tanaka
俊昭 田中
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 JP2006271852A priority Critical patent/JP4917860B2/en
Publication of JP2008090668A publication Critical patent/JP2008090668A/en
Application granted granted Critical
Publication of JP4917860B2 publication Critical patent/JP4917860B2/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

<P>PROBLEM TO BE SOLVED: To provide a program obfuscation method of a wide application scope, which is not limited to integers, and which makes analysis of conditional branching difficult, and to provide a program. <P>SOLUTION: A control variable is set for segmenting sequential instructions contained in a source code into blocks and controlling the execution sequence of the segmented blocks. A value of the control variable is assigned to each of the segmented blocks, and the segmented blocks are arranged in parallel with the use of a switch sentence or an if sentence. The processing of changing the value of the control variable to the value of the control variable assigned to the block to be executed next is added to the end of the respective segmented blocks, and the control variable is encoded. A conditional expression in which the determination is always true, or a conditional expression in which the determination is always false is created in a mode similar to the general conditional branching as a dummy conditional branch. <P>COPYRIGHT: (C)2008,JPO&INPIT

Description

本発明は、プログラムに含まれるアルゴリズムの解析を困難にするためのプログラム難読化方法およびプログラムに関する。   The present invention relates to a program obfuscation method and a program for making it difficult to analyze an algorithm included in the program.

一般に、ソフトウェアには、価値のあるアルゴリズムおよびコンテンツの暗号鍵等、利用者に対して秘密にすべき情報が含まれる場合がある。一方で、ソフトウェアを解析するための技術(RE:Reverse Engineering)も数多く開発されているのが現状である。このため、これらの技術によりソフトウェアが解析されると、不正な者に秘密情報が入手されるという脅威が考えられる。   In general, software may include information that should be kept secret from users, such as valuable algorithms and content encryption keys. On the other hand, many technologies (RE: Reverse Engineering) for analyzing software have been developed. For this reason, when software is analyzed by these techniques, there is a threat that secret information is obtained by unauthorized persons.

こうした脅威に対し、ソフトウェアの仕様を保ったまま、ソフトウェアの解析を困難にする難読化という技術がある。例えば、変数の符号化によるソフトウェアの難読化として、ソースコード中の変数を線形変換により符号化する方法が提案されている(例えば、非特許文献1参照。)。この方法では、単一の変数xを線形変換により、変数X(=ax+b)を符号化することで、ソフトウェアの解析を難しくすることを意図するものであり、ここでは、線形変換の際に用いる整数a,bが秘密鍵となる。また、この方法では、ソースコード中の変数の値や演算を隠蔽することを目的としている。   For such threats, there is a technique called obfuscation that makes software analysis difficult while maintaining software specifications. For example, as a software obfuscation by encoding a variable, a method of encoding a variable in a source code by linear transformation has been proposed (see, for example, Non-Patent Document 1). This method is intended to make software analysis difficult by encoding a variable X (= ax + b) by linear transformation of a single variable x, and is used here for linear transformation. The integers a and b are secret keys. In addition, this method aims at hiding the values and operations of variables in the source code.

また、元のプログラムで用いられている変数の個数、ならびに当該変数間の参照・代入関係を秘匿し、かつ、秘密鍵の候補数を多くして耐性の高いプログラムの難読化を実現する技術も開示されている(例えば、特許文献1参照。)。更に、非特許文献2には、解析困難な条件分岐を構成する方法が開示されている。また、非特許文献2には、条件式の特殊性に着目し、パターンマッチングによって、Opaque Predicateを検出するという試みについても開示されている。
佐藤他、信学技報、Vol.IT‐2002−49,pp.13−18,Mar.2002“データの符号化と演算子の変換によるプログラムの難読化手法” Genevieve Arboit、“A Method for Watermarking Java Program Via Opaque Predicates、”Proc.of International Conference on Electronic Commerce Research(ICECR−5)、2002年 特開2006−79347号公報
There is also a technology to conceal the number of variables used in the original program and the reference / substitution relationship between the variables, and to increase the number of secret key candidates to obfuscate highly resistant programs. (For example, refer to Patent Document 1). Furthermore, Non-Patent Document 2 discloses a method for configuring conditional branches that are difficult to analyze. Non-Patent Document 2 also discloses an attempt to detect Opaque Predicate by pattern matching, focusing on the special characteristics of conditional expressions.
Sato et al., IEICE Technical Report, Vol. IT-2002-49, pp. 13-18, Mar. 2002 "Program obfuscation technique by data encoding and operator conversion" Genevieve Arboit, “A Method for Watermarking Java Program Via Opaque Predicates,” Proc. of International Conference on Electronic Commerce Research (ICER-5), 2002 JP 2006-79347 A

しかしながら、上記の非特許文献1に開示された技術によれば、ソースコード中の変数の値や演算を秘匿することはできても、難読化前のソースコードで用いられている変数の個数、ならびに変数間における参照・代入の関係を秘匿することは不可能であった。また、秘密鍵の候補数は少なく、秘密鍵の全数探索による攻撃についても脆弱であると考えられる。   However, according to the technique disclosed in Non-Patent Document 1 above, the number of variables used in the source code before obfuscation can be concealed, even though the values and operations of the variables in the source code can be concealed. In addition, it was impossible to conceal the relationship of reference and substitution between variables. In addition, the number of secret key candidates is small, and it is considered vulnerable to attacks by searching for all secret keys.

また、上記の特許文献1に開示された技術においては、プログラムに含まれる整数値を符号化の対象としているため、算術演算をほとんど含まないプログラムや実数型のみの変数のみが使われているプログラムに対しては、効果が小さいという問題がある。   Further, in the technique disclosed in Patent Document 1, since an integer value included in a program is a target for encoding, a program that hardly includes arithmetic operations or a program that uses only real type variables. There is a problem that the effect is small.

更に、非特許文献2に開示された方式は、整数論に基づいて、常に真、または、常に偽となる条件文を作成しているため、こうした条件分岐を自動的に生成することは困難であり、また、生成された条件分岐が不自然な形態をなしているという問題がある。   Furthermore, since the method disclosed in Non-Patent Document 2 creates a conditional statement that is always true or always false based on number theory, it is difficult to automatically generate such a conditional branch. There is also a problem that the generated conditional branch has an unnatural form.

更に、非特許文献2には、常に真となる条件文として、1)7y−1≠x、2)3|(x−x)、3)Σ(1+3+・・・+2x−1)=x、4)2|x∨8|(x−1)、5)2|round(x/2)(ただし、round(x)はxを超えない最大の整数)の5つの条件文が例示されているが、これらの条件文が常に真となることは、以下のように証明することができる。 Furthermore, in Non-Patent Document 2, as conditional statements that are always true, 1) 7y 2 −1 ≠ x 2 , 2) 3 | (x 3 −x), 3) Σ (1 + 3 +... + 2x−1) = x 2, 4) 2 | x∨8 | (x 2 -1), 5) 2 | round (x 2/2) ( where five conditions of round english (us) (x) the maximum integer not exceeding x) Although sentences are illustrated, it can be proved that these conditional sentences are always true as follows.

すなわち、上記の「7y−1≠x」については、背理法により、7y2−1=x2となるような、x,yが存在すると仮定し、xが偶数のとき、x2は偶数となるため、7y2は奇数となり、結局、yは奇数でなければならない。ここで、x=2m、y=2n−1と表すと(ここで、m,nは整数)、上式は、28n2−28n+6=4m2となる。しかしながら、右辺は4で割り切れるのに対し、左辺は4で割り切れない。よって不適となる。一方で、xが奇数のとき、x2も奇数となる。したがって、7y2は偶数となり、結局、y2も偶数でなければならない。ここで、x=2k−1、y=2lと表すと(ここで、k、lは整数)、上式は、28l2−1=4k2−4k+1となる。ゆえに、28l2−2=4k2−4kとなる。しかしながら、この場合も、右辺は4で割り切れるのに対し、左辺は4で割り切れない。よって不適となる。以上の考察により、すべての整数x、yに対し、7y2−1≠x2となることから、上記の「7y−1≠x」なる条件文は、常に真となることが証明できる。 That is, for the above “7y 2 −1 ≠ x 2 ”, it is assumed that x and y exist such that 7y 2 −1 = x 2 according to the absurd method, and when x is an even number, x 2 is an even number. because it becomes, 7y 2 will be an odd number, after all, y must be odd. Here, when x = 2m and y = 2n−1 are expressed (where m and n are integers), the above equation becomes 28n 2 −28n + 6 = 4m 2 . However, the right side is divisible by 4, while the left side is not divisible by 4. Therefore, it becomes unsuitable. On the other hand, when x is an odd number, x 2 is also an odd number. Therefore, 7y 2 becomes even, eventually, y 2 must also be an even number. Here, when x = 2k−1 and y = 2l (where k and l are integers), the above equation becomes 28l 2 −1 = 4k 2 -4k + 1. Therefore, 28l 2 −2 = 4k 2 −4k. However, in this case as well, the right side is divisible by 4, while the left side is not divisible by 4. Therefore, it becomes unsuitable. From the above consideration, for all integers x and y, 7y 2 −1 ≠ x 2 , so that the conditional statement “7y 2 −1 ≠ x 2 ” can always be proved to be true. .

次に、上記の「3|(x−x)」については、x3−x=(x−1)x(x+1)であるので、連続する3つの整数の積は3で割り切れる。したがって、「3|(x−x)」なる条件文は、常に真となることが証明できる。また、上記の「Σ(1+3+・・・+2x−1)=x」については、(与式)= Σk=1 x(2k−1)=2x(x+1)/2−x=x2+x−x=x2となるため、与えられた等式は常に成立する。したがって、「Σ(1+3+・・・+2x−1)=x」なる条件文は、常に真となることが証明できる。 Next, since “3 | (x 3 −x)” is x 3 −x = (x−1) x (x + 1), the product of three consecutive integers is divisible by 3. Therefore, it can be proved that the conditional statement “3 | (x 3 −x)” is always true. In addition, for the above-mentioned “Σ (1 + 3 +... + 2x−1) = x 2 ”, (given expression) = Σ k = 1 x (2k−1) = 2x (x + 1) / 2−x = x 2 + x since the -x = x 2, given equation always holds. Therefore, it can be proved that the conditional statement “Σ (1 + 3 +... + 2x−1) = x 2 ” is always true.

また、上記の「2|x∨8|(x−1)」については、xが偶数のとき、x∨8も偶数となることから、2|x∨8。一方、xが奇数のとき、x2も奇数であることから、2|(x2−1)。したがって、すべてのxに対し、2|x∨8|(x2−1)が成り立つことから、「2|x∨8|(x−1)」なる条件文は、常に真となることが証明できる。更に、上記の「2|round(x/2)」については、xが偶数のとき、x=2mと表すと(mは整数)、round(x2/2)=2m2となり、与式が成立する。一方で、xが奇数のとき、x=2n−1と表すと(nは整数)、round(x2/2)=4n2−4nとなり、与式が成立する。したがって、「2|round(x/2)」なる条件文は、常に真となることが証明できる。 Further, regarding the above “2 | x∨8 | (x 2 −1)”, when x is an even number, x∨8 also becomes an even number, so 2 | x∨8. On the other hand, when x is an odd number, x 2 is also an odd number, so 2 | (x 2 −1). Therefore, since 2 | x∨8 | (x 2 −1) holds for all x, the conditional statement “2 | x∨8 | (x 2 −1)” is always true. I can prove it. Furthermore, the | About "2 round (x 2/2)" when x is an even number, expressed as x = 2m (m is an integer), round (x 2/2 ) = 2m 2 , and the Azukashiki Is established. On the other hand, when x is an odd number, expressed as x = 2n-1 (n is an integer), round (x 2/2 ) = 4n 2 -4n next, is given equation is established. Therefore, | conditional statement to be "2 round (x 2/2)" can always proved to be true.

このように、非特許文献2に記載された条件文は、不正な攻撃者が、その条件文が常に真であるのか、あるいは、常に偽であるのかを数論により証明することができるという問題がある。   As described above, the conditional statement described in Non-Patent Document 2 is a problem that an unauthorized attacker can prove by numerical theory whether the conditional statement is always true or always false. There is.

そこで、本発明は、上述の課題に鑑みてなされたものであり、整数値に限らず、その適用範囲が広く、かつ、条件分岐の解析が困難なプログラム難読化方法およびプログラムを提供することを目的とする。   Therefore, the present invention has been made in view of the above-described problems, and provides a program obfuscation method and a program that are not limited to integer values but have a wide application range and that are difficult to analyze conditional branches. Objective.

本発明は、上記の課題を解決するために以下の事項を提案している。   The present invention proposes the following items in order to solve the above problems.

(1)本発明は、プログラムに含まれるアルゴリズムの解析を困難にするためのプログラム難読化方法であって、プログラムの制御構造を平滑化し、該プログラムの実行順序を管理する制御変数を設定する第1のステップと、前記制御変数を符号化する第2のステップと、非自明な関係式を用いて、架空の条件分岐を生成する第3のステップと、を備えたことを特徴とするプログラム難読化方法を提案している。   (1) The present invention is a program obfuscation method for making it difficult to analyze an algorithm included in a program, wherein a control variable for smoothing the control structure of the program and managing the execution order of the program is set. A program obfuscation comprising: a first step; a second step for encoding the control variable; and a third step for generating a fictitious conditional branch using a non-trivial relational expression. We propose a method to make it.

この発明によれば、プログラムの制御構造を平滑化し、プログラムの実行順序を管理する制御変数を設定して、制御変数を符号化する。そして、非自明な関係式を用いて、架空の条件分岐を生成する。したがって、これにより、整数値に限らず、制御変数についても符号化の対象とすることができる。また、不正な攻撃者にとって、条件分岐の解析が困難なプログラムを生成することができる。   According to the present invention, the control structure of the program is smoothed, the control variable for managing the execution order of the program is set, and the control variable is encoded. Then, a fictitious conditional branch is generated using a non-trivial relational expression. Therefore, not only integer values but also control variables can be encoded. Further, it is possible to generate a program that is difficult for an unauthorized attacker to analyze conditional branches.

(2)本発明は、(1)のプログラム難読化方法について、前記第1のステップが、ソースコードに含まれる連続した命令を、ブロック単位に切り出すステップと、該切り出したブロックの実行順序を制御するための制御変数を設定するステップと、前記切り出したブロックのそれぞれに、制御変数がとるべき値を割当てるステップと、switch文またはif文を用いて、前記切り出したブロックを並列に並べるステップと、前記制御変数の値を次に実行されるブロックに割当てられた制御変数値に書き換える処理をそれぞれ切り出したブロックの最後に付加するステップと、を備えたことを特徴とするプログラム難読化方法を提案している。   (2) The present invention relates to the program obfuscation method of (1), wherein the first step is a step of cutting out consecutive instructions included in the source code in units of blocks, and the execution order of the cut out blocks is controlled. A step of setting a control variable for performing, a step of assigning a value to be taken by the control variable to each of the cut-out blocks, a step of arranging the cut-out blocks in parallel using a switch statement or an if statement, Proposing a program obfuscation method comprising: adding a process of rewriting the value of the control variable to a control variable value assigned to a block to be executed next, at the end of each cut block. ing.

この発明によれば、プログラムの制御構造を平滑化し、プログラムの実行順序を管理する制御変数を設定する方法として、ソースコードに含まれる連続した命令を、ブロック単位に切り出し、切り出したブロックの実行順序を制御するための制御変数を設定する。そして、切り出したブロックのそれぞれに、制御変数がとるべき値を割当て、switch文またはif文を用いて、切り出したブロックを並列に並べ、制御変数の値を次に実行されるブロックに割当てられた制御変数値に書き換える処理をそれぞれ切り出したブロックの最後に付加する。   According to the present invention, as a method for setting a control variable for smoothing the control structure of a program and managing the execution order of the program, continuous instructions included in the source code are cut out in block units, and the execution order of the cut out blocks Set control variables to control Then, a value to be taken by the control variable is assigned to each of the cut out blocks, and the cut out blocks are arranged in parallel using a switch statement or an if statement, and the value of the control variable is assigned to the block to be executed next. The process of rewriting to the control variable value is added to the end of each extracted block.

(3)本発明は、(1)または(2)のプログラム難読化方法について、前記第2のステップが、符号化を施すn個(但し、nは正整数)の制御変数を任意に選択するステップと、m×nの行列(但し、mは、m≧nの正整数)およびm次元の任意のベクトルを生成するステップと、前記生成した行列およびベクトルを変換鍵として前記n個の制御変数を線形変換して同時にm個の制御変数を符号化するステップと、を備えたことを特徴とするプログラム難読化方法を提案している。   (3) In the present invention, in the program obfuscation method of (1) or (2), the second step arbitrarily selects n control variables (where n is a positive integer) to be encoded. A step of generating an m × n matrix (where m is a positive integer satisfying m ≧ n) and an arbitrary vector of m dimensions, and the n control variables using the generated matrix and vector as a conversion key A program obfuscation method is provided, comprising the step of linearly transforming and simultaneously encoding m control variables.

この発明によれば、符号化を施すn個(但し、nは正整数)の変数を任意に選択し、m×nの行列(但し、mは、m≧nの正整数)およびm次元の任意のベクトルを生成する。そして、生成した行列およびベクトルを変換鍵としてn個の変数を線形変換して同時にm個の制御変数を符号化する。   According to the present invention, n variables (where n is a positive integer) to be encoded are arbitrarily selected, an m × n matrix (where m is a positive integer satisfying m ≧ n), and an m-dimensional variable. Generate an arbitrary vector. Then, using the generated matrix and vector as a conversion key, n variables are linearly converted and m control variables are encoded simultaneously.

したがって、プログラム中のn個の制御変数を線形変換により同時にm個の制御変数に符号化するため、プログラム中で用いられている制御変数の個数を秘匿すると同時に、制御変数間の参照および代入関係も秘匿することができる。また、変換鍵として行列およびベクトルを用いるため鍵の候補数を多くすることができる。このことにより、耐性の高いソフトウェアの難読化を実現することができる。   Therefore, since n control variables in the program are simultaneously encoded into m control variables by linear transformation, the number of control variables used in the program is concealed, and at the same time, the reference and substitution relationship between the control variables Can also be concealed. In addition, since the matrix and the vector are used as the conversion key, the number of key candidates can be increased. Thereby, obfuscation of highly resistant software can be realized.

(4)本発明は、(1)から(3)のプログラム難読化方法について、前記第3のステップが、架空の条件分岐として一般的な条件分岐と類似の形態で、常に真と判定される条件式あるいは、常に偽と判定される条件式を生成することを特徴とするプログラム難読化方法を提案している。   (4) According to the present invention, in the program obfuscation method of (1) to (3), the third step is always determined to be true in a form similar to a general conditional branch as a fictitious conditional branch. It proposes a program obfuscation method characterized by generating a conditional expression or a conditional expression that is always determined to be false.

この発明によれば、第3のステップが、架空の条件分岐として一般的な条件分岐と類似の形態で、常に真と判定される条件式あるいは、常に偽と判定される条件式を生成する。したがって、架空の条件分岐が、一般的な条件分岐と類似の形態、すなわち、特殊な演算を用いない形態となっているため、他の条件分岐と比較しても、不正な攻撃者に対して不自然に写ることがない。また、特殊な演算を用いない形態となっているため、ツールを用いて、自動的に条件分岐を生成することができる。   According to the present invention, the third step generates a conditional expression that is always determined to be true or a conditional expression that is always determined to be false in a form similar to a general conditional branch as an imaginary conditional branch. Therefore, the fictitious conditional branch has a form similar to that of a general conditional branch, that is, a form that does not use a special operation. It does not appear unnatural. In addition, since a special operation is not used, a conditional branch can be automatically generated using a tool.

(5)本発明は、プログラムに含まれるアルゴリズムの解析を困難にするためのプログラム難読化方法をコンピュータに実行させるためのプログラムであって、プログラムの制御構造を平滑化し、該プログラムの実行順序を管理する制御変数を設定する第1のステップと、前記制御変数を符号化する第2のステップと、非自明な関係式を用いて、架空の条件分岐を生成する第3のステップと、を備えたことを特徴とするプログラムを提案している。   (5) The present invention is a program for causing a computer to execute a program obfuscation method for making it difficult to analyze an algorithm included in the program, smoothing the control structure of the program, and changing the execution order of the program A first step of setting a control variable to be managed; a second step of encoding the control variable; and a third step of generating a fictitious conditional branch using a non-trivial relational expression. We are proposing a program characterized by that.

この発明によれば、プログラムの制御構造を平滑化し、プログラムの実行順序を管理する制御変数を設定して、制御変数を符号化する。したがって、これにより、整数値に限らず、制御変数についても符号化の対象とすることができ、こうした処理をプログラムにより自動的に実行することができる。また、不正な攻撃者にとって、条件分岐の解析が困難なプログラムを生成することができる。   According to the present invention, the control structure of the program is smoothed, the control variable for managing the execution order of the program is set, and the control variable is encoded. Therefore, not only an integer value but also a control variable can be a target of encoding, and such processing can be automatically executed by a program. Further, it is possible to generate a program that is difficult for an unauthorized attacker to analyze conditional branches.

(6)本発明は、(5)のプログラムについて、前記第1のステップが、ソースコードに含まれる連続した命令を、ブロック単位に切り出すステップと、該切り出したブロックの実行順序を制御するための制御変数を設定するステップと、前記切り出したブロックのそれぞれに、制御変数がとるべき値を割当てるステップと、switch文またはif文を用いて、前記切り出したブロックを並列に並べるステップと、前記制御変数の値を次に実行されるブロックに割当てられた制御変数値に書き換える処理をそれぞれ切り出したブロックの最後に付加するステップと、を備えたことを特徴とするプログラムを提案している。   (6) In the present invention, for the program of (5), the first step is a step of cutting out consecutive instructions included in the source code in units of blocks, and for controlling the execution order of the cut out blocks A step of setting a control variable, a step of assigning a value to be taken by the control variable to each of the cut-out blocks, a step of arranging the cut-out blocks in parallel using a switch statement or an if statement, and the control variable And a step of adding a process of rewriting the value to the control variable value assigned to the block to be executed next to the end of each extracted block.

この発明によれば、プログラムの制御構造を平滑化し、プログラムの実行順序を管理する制御変数を設定する方法として、ソースコードに含まれる連続した命令を、ブロック単位に切り出し、切り出したブロックの実行順序を制御するための制御変数を設定する。そして、切り出したブロックのそれぞれに、制御変数がとるべき値を割当て、switch文またはif文を用いて、切り出したブロックを並列に並べ、制御変数の値を次に実行されるブロックに割当てられた制御変数値に書き換える処理をそれぞれ切り出したブロックの最後に付加する。   According to the present invention, as a method for setting a control variable for smoothing the control structure of a program and managing the execution order of the program, continuous instructions included in the source code are cut out in block units, and the execution order of the cut out blocks Set control variables to control Then, a value to be taken by the control variable is assigned to each of the cut out blocks, and the cut out blocks are arranged in parallel using a switch statement or an if statement, and the value of the control variable is assigned to the block to be executed next. The process of rewriting to the control variable value is added to the end of each extracted block.

(7)本発明は、(5)または(6)のプログラムについて、前記第2のステップが、符号化を施すn個(但し、nは正整数)の制御変数を任意に選択するステップと、m×nの行列(但し、mは、m≧nの正整数)およびm次元の任意のベクトルを生成するステップと、前記生成した行列およびベクトルを変換鍵として前記n個の制御変数を線形変換して同時にm個の制御変数を符号化するステップと、を備えたことを特徴とするプログラムを提案している。   (7) In the present invention, in the program of (5) or (6), the second step arbitrarily selects n (n is a positive integer) control variables to be encoded; An m × n matrix (where m is a positive integer satisfying m ≧ n) and an arbitrary vector of m dimensions, and the n control variables are linearly converted using the generated matrix and vector as a conversion key. And a step of encoding m control variables at the same time.

この発明によれば、符号化を施すn個(但し、nは正整数)の変数を任意に選択し、m×nの行列(但し、mは、m≧nの正整数)およびm次元の任意のベクトルを生成する。そして、生成した行列およびベクトルを変換鍵としてn個の変数を線形変換して同時にm個の制御変数を符号化する。   According to the present invention, n variables (where n is a positive integer) to be encoded are arbitrarily selected, an m × n matrix (where m is a positive integer satisfying m ≧ n), and an m-dimensional variable. Generate an arbitrary vector. Then, using the generated matrix and vector as a conversion key, n variables are linearly converted and m control variables are encoded simultaneously.

したがって、プログラム中のn個の制御変数を線形変換により同時にm個の制御変数に符号化するため、プログラム中で用いられている制御変数の個数を秘匿すると同時に、制御変数間の参照および代入関係も秘匿することができ、こうした処理をプログラムにより自動的に実行することができる。また、変換鍵として行列およびベクトルを用いるため鍵の候補数を多くすることができる。このことにより、耐性の高いソフトウェアの難読化を実現することができる。   Therefore, since n control variables in the program are simultaneously encoded into m control variables by linear transformation, the number of control variables used in the program is concealed, and at the same time, the reference and substitution relationship between the control variables Can be concealed, and such processing can be automatically executed by a program. In addition, since the matrix and the vector are used as the conversion key, the number of key candidates can be increased. Thereby, obfuscation of highly resistant software can be realized.

(8)本発明は、(5)から(7)のプログラムについて、前記第3のステップが、架空の条件分岐として一般的な条件分岐と類似の形態で、常に真と判定される条件式あるいは、常に偽と判定される条件式を生成することを特徴とするプログラムを提案している。   (8) According to the present invention, in the program of (5) to (7), the third step is a conditional expression that is always determined to be true in a form similar to a general conditional branch as an imaginary conditional branch or Has proposed a program characterized by generating a conditional expression that is always determined to be false.

この発明によれば、第3のステップが、架空の条件分岐として一般的な条件分岐と類似の形態で、常に真と判定される条件式あるいは、常に偽と判定される条件式を生成する。したがって、架空の条件分岐が、一般的な条件分岐と類似の形態、すなわち、特殊な演算を用いない形態となっているため、他の条件分岐と比較しても、不正な攻撃者に対して不自然に写ることがない。また、特殊な演算を用いない形態となっているため、ツールを用いて、自動的に条件分岐を生成することができる。   According to the present invention, the third step generates a conditional expression that is always determined to be true or a conditional expression that is always determined to be false in a form similar to a general conditional branch as an imaginary conditional branch. Therefore, the fictitious conditional branch has a form similar to that of a general conditional branch, that is, a form that does not use a special operation. It does not appear unnatural. In addition, since a special operation is not used, a conditional branch can be automatically generated using a tool.

本発明によれば、プログラムに制御変数を導入して、その変数を符号化の対象とすることから、直接符号化できる変数を含まないプログラムに対しても、耐性の高いソフトウェアの難読化を実現することができるという効果がある。   According to the present invention, since a control variable is introduced into a program and the variable is a target for encoding, obfuscation of highly resistant software is realized even for a program that does not include a variable that can be directly encoded. There is an effect that can be done.

また、本発明によれば、架空の条件分岐に特殊な演算を利用しないため、他の条件分岐と比較しても、不正な攻撃者に対して不自然に写ることがないという効果がある。また、本発明によれば、特殊な演算を用いない形態となっているため、ツールを用いて、自動的に条件分岐を生成することができるという効果がある。   In addition, according to the present invention, since a special operation is not used for a fictitious conditional branch, there is an effect that it is not unnaturally captured by an unauthorized attacker even when compared with other conditional branches. Further, according to the present invention, since a special operation is not used, a conditional branch can be automatically generated using a tool.

また、本発明によれば、数論を用いた構成方法とは異なり、条件文の判定部分のみで、その真偽を判定することが不可能であるといった効果がある。   In addition, according to the present invention, unlike the configuration method using number theory, there is an effect that it is impossible to determine the authenticity only by the determination part of the conditional statement.

更に、本発明の技術を用いることにより、各種サービスにおけるセキュリティを向上させることができる。具体的には、Java(登録商標)やBrew(登録商標)等のソフトウェアに関する著作権を保護するとともに、不正にプログラムの解析を試みる不正な者への情報漏えいを的確に防止できるという効果がある。   Furthermore, security in various services can be improved by using the technology of the present invention. Specifically, it protects copyrights related to software such as Java (registered trademark) and Brew (registered trademark), and can effectively prevent information leakage to unauthorized persons who attempt to analyze programs illegally. .

以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
Hereinafter, embodiments of the present invention will be described in detail with reference to the drawings.
Note that the constituent elements in the present embodiment can be appropriately replaced with existing constituent elements and the like, and various variations including combinations with other existing constituent elements are possible. Therefore, the description of the present embodiment does not limit the contents of the invention described in the claims.

<処理フロー>
まず、図1および図3から図7を用いて、本発明の実施形態に係るプログラム難読化方法の一般的な処理について説明する。
<Processing flow>
First, a general process of the program obfuscation method according to the embodiment of the present invention will be described with reference to FIGS. 1 and 3 to 7.

まず、図3に示すように、ソースコード(プログラム)に含まれる連続する命令を、ブロック(図中、B1;、B2;、B3;)として切り出す(ステップS101)。次に、ブロックの実行順番を制御するための制御変数(図4に示す「int c」)を宣言する(ステップS102)。   First, as shown in FIG. 3, continuous instructions included in the source code (program) are cut out as blocks (B1 ;, B2 ;, B3; in the figure) (step S101). Next, a control variable (“int c” shown in FIG. 4) for controlling the execution order of the blocks is declared (step S102).

更に、各ブロック(図3のB1;、B2;、B3;)に、制御変数がとるべき値(図5に示すB1;に対しては「5」、B2;に対しては「9」、B3;に対しては「4」)を割り当てる(ステップS103)。   Further, in each block (B1; B2; B3; in FIG. 3), a value to be taken by the control variable (“5” for B1; shown in FIG. 5; “9” for B2; (3) is assigned to B3; (step S103).

次に、図6に示すように、switch文またはif文を用いて、各ブロックを並列に並べる(ステップS104)。なお、条件分岐命令の判定文では、制御変数の値と、ステップS103において各ブロックに割り当てられた値が等しいかどうかが判定され、制御変数の値と等しい値が割り当てられたブロックの先頭に制御が移る。   Next, as shown in FIG. 6, the blocks are arranged in parallel using a switch statement or an if statement (step S104). In the decision statement of the conditional branch instruction, it is determined whether the value of the control variable is equal to the value assigned to each block in step S103, and control is performed at the head of the block to which the value equal to the value of the control variable is assigned. Move.

更に、図7に示すように、制御変数の値を次に実行されるブロックに割り当てられた値に書き換える処理(図7に示す、ブロックB1;におけるc=9、ブロックB2;におけるc=4)を各ブロックの最後に追加する(ステップS105)。そして、制御変数を符号化する処理を行う(ステップS106)。なお、ここで、符号化された制御変数が、非自明な関係を満たすように、符号化後の制御変数の個数を符号化前の制御変数の個数よりも多くする必要がある。   Further, as shown in FIG. 7, the process of rewriting the value of the control variable to the value assigned to the block to be executed next (c = 9 in block B1; shown in FIG. 7, c = 4 in block B2;). Is added to the end of each block (step S105). And the process which encodes a control variable is performed (step S106). Here, the number of control variables after encoding needs to be larger than the number of control variables before encoding so that the encoded control variables satisfy a non-trivial relationship.

更に、非自明な関係式を用いて、架空の条件分岐を作成する(ステップS107)。ここで、非自明な関係式を用いた架空の条件分岐とは、例えば、符号化された制御変数がxx、yy、zzであり、非自明な関係式がxx^yy^zz=0であるときに、式if(xx^yy^zz==0)のように、常に真と判定される条件文、または、式if(xx^yy^zz==5)のように、常に偽となる条件文である。   Further, a fictitious conditional branch is created using a non-trivial relational expression (step S107). Here, the fictitious conditional branch using the non-trivial relational expression is, for example, that the encoded control variables are xx, yy, zz, and the non-trivial relational expression is xx ^ yy ^ zz = 0. Sometimes a conditional statement that is always determined to be true as in the expression if (xx ^ yy ^ zz == 0) or always false as in the expression if (xx ^ yy ^ zz == 5) It is a conditional statement.

<制御変数の符号化処理>
次に、図2を用いて、制御変数の符号化処理について説明する。
<Control variable encoding process>
Next, control variable encoding processing will be described with reference to FIG.

まず、プログラムの中から、難読化の対象として符号化を施すn個(nは整数数)の制御変数を任意に選択する。この操作で選ばれたn個の制御変数をx1,x2・・・,xnとする。(ステップS201)。   First, n control variables (n is an integer number) to be encoded are arbitrarily selected as obfuscation targets from the program. Let n control variables selected by this operation be x1, x2,..., Xn. (Step S201).

次に、m×n型行列A、m次元ベクトルcを任意に生成し、これらを秘密鍵とする(ステップS202)。但し、mは、m≧nなる正整数である。   Next, an m × n matrix A and an m-dimensional vector c are arbitrarily generated and set as secret keys (step S202). However, m is a positive integer such that m ≧ n.

更に、生成した行列Aおよびベクトルcを用いて以下の変換式(1)を定義する(ステップS203)。 Furthermore, the following conversion equation (1) is defined using the generated matrix A and vector c (step S203).

Figure 2008090668
Figure 2008090668

ここで、X1,X2,・・・,Xmは、難読化後のソフトウェアで用いられる符号化されたm個の制御変数である。   Here, X1, X2,..., Xm are encoded m control variables used in the obfuscated software.

上記した変換式をn個の制御変数x1,x2,・・・,xnに関するm本の連立方程式と見なし、それぞれの制御変数について上記連立方程式を解く。その結果、それぞれの制御変数x1,x2,・・・,xnに関して以下の(2)で示す復号式が成立する(ステップS204)。   The above conversion equations are regarded as m simultaneous equations for n control variables x1, x2,..., Xn, and the simultaneous equations are solved for each control variable. As a result, the decoding equation shown in the following (2) is established for each control variable x1, x2,..., Xn (step S204).

Figure 2008090668
Figure 2008090668

この復号式により、元のプログラム中のそれぞれの制御変数x1,x2,・・・,xnの値を復号化された制御変数X1,X2,・・・Xmを用いて表すことが可能になる。
この手順では、m本の連立方程式から、n個の制御変数x1,x2・・・xnの値を求める。このため、符号化された制御変数X1,X2,・・・Xmの間には、m−n個の自明でない以下の関係式(3)が成り立つことになる。
With this decryption formula, the values of the respective control variables x1, x2,..., Xn in the original program can be expressed using the decrypted control variables X1, X2,.
In this procedure, the values of n control variables x1, x2,... Xn are obtained from m simultaneous equations. Therefore, mn non-obvious relational expressions (3) are established between the encoded control variables X1, X2,... Xm.

Figure 2008090668
Figure 2008090668

この自明でない関係式を用いることにより、上記の復号式における各制御変数X1,X2,・・・,Xmの係数を可変とすることができる。   By using this non-obvious relational expression, the coefficients of the control variables X1, X2,..., Xm in the above decoding formula can be made variable.

次に、プログラム中で用いられている制御変数x1,x2,・・・,xnを以下の規則に従い、符号化された制御変数X1,X2,・・・Xmで置き換える(ステップS205)。具体的には、アルゴリズム中の制御変数xiに対する代入命令xi←uを、以下の演算式(4)で示されるように、制御変数X1,X2,・・・XMに対する代入命令に置き換える。   Next, the control variables x1, x2,..., Xn used in the program are replaced with encoded control variables X1, X2,... Xm according to the following rules (step S205). Specifically, the assignment instruction xi ← u for the control variable xi in the algorithm is replaced with an assignment instruction for the control variables X1, X2,... XM as shown by the following arithmetic expression (4).

Figure 2008090668
Figure 2008090668

この代入命令が実行されると、符号化されたm個全ての制御変数X1,X2,・・・Xmが、同時に変更される。つまり、プログラム中で参照されている制御変数xjを、ステップS204の処理で求めた復号式xj(X1,X2,・・・Xm)を用いて、制御変数X1,X2,・・・Xmの式に置き換える。   When this assignment instruction is executed, all the encoded m control variables X1, X2,... Xm are changed simultaneously. That is, the control variable xj referred to in the program is expressed by the control variables X1, X2,... Xm using the decryption formula xj (X1, X2,... Xm) obtained in step S204. Replace with

後処理として、符号化された制御変数X1,X2,・・・,Xmへの初期値を与える。また、連続する制御変数X1,X2,・・・Xmへの代入命令のマージを行う(ステップS206)。   As post-processing, initial values for the encoded control variables X1, X2,. Further, the assignment instruction to the continuous control variables X1, X2,... Xm is merged (step S206).

具体的には、上記したステップS205の処理により、プログラム中の制御変数x1,x2,・・・,xnは、全てX1,X2,・・・,Xmで置き換えられる。これらの制御変数の初期値は、自明でない関係式f1,f2,・・・fm‐nを満たす任意の整数とする。   Specifically, the control variables x1, x2,..., Xn in the program are all replaced with X1, X2,. The initial values of these control variables are arbitrary integers that satisfy non-trivial relational expressions f1, f2,... Fm-n.

また、ステップS205の処理により生成された、符号化された制御変数X1,X2,・・・Xmへの代入命令の中で、連続するものをマージする。   In addition, the consecutive assignment instructions into the encoded control variables X1, X2,... Xm generated by the processing in step S205 are merged.

プログラムの解析が十分に困難であると判定されれば、難読化処理を終了する(ステップS207の「YES」)。一方、さらなる難読化が必要であると判定されれば(ステップS207の「NO」)、ステップS201からステップS206までの処理を繰り返し実行する。   If it is determined that the program analysis is sufficiently difficult, the obfuscation process is terminated (“YES” in step S207). On the other hand, if it is determined that further obfuscation is necessary (“NO” in step S207), the processing from step S201 to step S206 is repeatedly executed.

<具体的なプログラムを例示した処理の流れ>
以下、具体的なプログラムを例示し、本実施形態に係るプログラム難読化方法の処理の流れについて、図8から図15を用いて説明する。なお、図8は、本実施形態に係るプログラム難読化方法により処理を行う元のソースコードを示している。
<Flow of processing exemplifying specific program>
Hereinafter, a specific program will be exemplified, and the processing flow of the program obfuscation method according to the present embodiment will be described with reference to FIGS. 8 to 15. FIG. 8 shows the original source code that is processed by the program obfuscation method according to the present embodiment.

まず、図8に示す処理前のソースコードについて、連続する命令を図9に示すように、「/*ブロック1*/」、「/*ブロック2*/」、「/*ブロック3*/」として分割する処理を行う。   First, with respect to the source code before processing shown in FIG. 8, as shown in FIG. 9, consecutive instructions are “/ * block 1 * /”, “/ * block 2 * /”, “/ * block 3 * /”. The process of dividing as follows.

次に、図10に示すように、「int c1、c2;」という制御変数の宣言を追加する処理を行う。更に、図11に示すように、「/*ブロック1*/」には、「/*c1=5;c2=3*/」、「/*ブロック2*/」には、「/*c1=9;c2=2*/」、「/*ブロック3*/」には、「/*c1=4;c2=6*/」という各ブロックにおいて、制御変数が取るべき値を割り付ける。そして、図12に示すように、if文を用いて、各ブロックを並列に並べることにより、制御構造を平坦化したソースコードを作成する。   Next, as shown in FIG. 10, a process of adding a control variable declaration “int c1, c2;” is performed. Further, as shown in FIG. 11, “/ * block 1 * /” includes “/ * c1 = 5; c2 = 3 * /”, and “/ * block 2 * /” includes “/ * c1 = 9; c2 = 2 * / ”and“ / * block 3 * / ”are assigned values to be taken by the control variables in the respective blocks“ / * c1 = 4; c2 = 6 * / ”. Then, as shown in FIG. 12, by using the “if” statement, the blocks are arranged in parallel to create a source code in which the control structure is flattened.

そして、図13に示すように、各ブロックの末尾に、「c1=c2=3;」および「c1+=2;」、「c1=c1+c2+1;」および「c2++;」、「c1==c2;」および「c2==9;」、「c1=c2++;」および「c2――;」という制御変数の値を次に実行されるブロックに割当てられた値に書き換える処理を追加したソースコードを作成する。そして、上記の符号化処理(図2参照)を行うことにより、図14に示す制御変数c1、c2をd1、d2、d3に符号化したソースコードが得られる。   Then, as shown in FIG. 13, at the end of each block, “c1 = c2 = 3;” and “c1 + = 2;”, “c1 = c1 + c2 + 1;” and “c2 +++;”, “c1 == c2;” And source code to which processing for rewriting the values of the control variables “c2 == 9;”, “c1 = c2 +++;” and “c2—;” into values assigned to the next block to be executed is created. . Then, by performing the above encoding process (see FIG. 2), a source code in which the control variables c1 and c2 shown in FIG. 14 are encoded into d1, d2, and d3 is obtained.

更に、これに、自明でない関係式「d1^d2^d3=0」等を用いて、条件分岐を変換することにより、図15に示すソースコードが得られる。   Further, by converting a conditional branch using a non-trivial relational expression “d1 ^ d2 ^ d3 = 0” or the like, the source code shown in FIG. 15 is obtained.

以上、説明したように、本実施形態によれば、プログラムの制御構造を平滑化し、プログラムの実行順序を管理する制御変数を設定して、制御変数を符号化する。したがって、これにより、整数値に限らず、制御変数についても符号化の対象とすることができる。また、非自明な関係式を用いて架空の条件分岐を付加することによって、不正な攻撃者にとって、条件分岐の解析が困難なプログラムを生成することができる。   As described above, according to the present embodiment, the control variable of the program is smoothed, the control variable for managing the execution order of the program is set, and the control variable is encoded. Therefore, not only integer values but also control variables can be encoded. Also, by adding a fictitious conditional branch using a non-trivial relational expression, it is possible to generate a program that is difficult for an unauthorized attacker to analyze the conditional branch.

なお、説明した本実施形態は、演算装置もしくはコンピュータにより実現されるものであり、特に、コンピュータにおいては、上述のステップS101からステップS106で実行される処理およびその手順をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをコンピュータに読み込ませ、実行することによって本発明のプログラム難読化方法を実現することができる。ここでいうコンピュータとは、OSや周辺装置等のハードウェアを含む。   The described embodiment is realized by an arithmetic device or a computer. In particular, in a computer, the processing executed in steps S101 to S106 and the procedure thereof are stored in a computer-readable recording medium. The program obfuscation method of the present invention can be realized by recording, reading the program recorded on the recording medium into a computer, and executing the program. Here, the computer includes hardware such as an OS and peripheral devices.

また、「コンピュータ」は、WWW(World Wide Web)システムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。また、「コンピュータ読み取り可能な記録媒体」フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。更に、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のシステムやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。   Further, the “computer” includes a homepage providing environment (or display environment) if a WWW (World Wide Web) system is used. Also, “computer-readable recording medium” refers to a portable medium such as a flexible disk, a magneto-optical disk, a ROM, a CD-ROM, or a storage device such as a hard disk built in a computer system. Furthermore, the program is held for a certain period of time, such as a volatile memory (RAM) in a computer system that becomes a system or a client when the program is transmitted via a network such as the Internet or a communication line such as a telephone line. Including things.

また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。   The program may be transmitted from a computer system storing the program in a storage device or the like to another computer system via a transmission medium or by a transmission wave in the transmission medium. Here, the “transmission medium” for transmitting the program refers to a medium having a function of transmitting information, such as a network (communication network) such as the Internet or a communication line (communication line) such as a telephone line.

また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。更に、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。   The program may be for realizing a part of the functions described above. Furthermore, what can implement | achieve the function mentioned above in combination with the program already recorded on the computer system, and what is called a difference file (difference program) may be sufficient.

以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。   The embodiment of the present invention has been described in detail with reference to the drawings. However, the specific configuration is not limited to this embodiment, and includes a design and the like within a scope not departing from the gist of the present invention.

本実施形態に係る処理フローである。It is a processing flow concerning this embodiment. 本実施形態に係る制御変数の符号化処理を示すフローである。It is a flow which shows the encoding process of the control variable which concerns on this embodiment. ソースコードに含まれる連続する命令をブロックとして切り出す処理の概念図である。It is a conceptual diagram of the process which cuts out the continuous instruction contained in a source code as a block. ソースコードの実行順序を制御するための制御変数を宣言する処理の概念図である。It is a conceptual diagram of the process which declares the control variable for controlling the execution order of a source code. 各ブロックに制御変数として取るべき値を割当てる処理の概念図である。It is a conceptual diagram of the process which assigns the value which should be taken as a control variable to each block. switch文またはif文を用いて、各ブロックを並列に並べる処理の概念図である。It is a conceptual diagram of the process which arranges each block in parallel using a switch sentence or an if sentence. 制御変数の値を次に実行されるブロックに割当てられた値に書き換える処理を各ブロックの最後に追加する処理の概念図である。It is a conceptual diagram of the process which adds the process which rewrites the value of a control variable to the value allocated to the block performed next at the end of each block. 本実施形態に係る処理を行う前のソースコードを示す図である。It is a figure which shows the source code before performing the process which concerns on this embodiment. 連続する命令をブロック1、2、3に分割したソースコードを示す図である。It is a figure which shows the source code which divided | segmented the continuous instruction into blocks 1, 2, and 3. FIG. 制御変数の宣言を追加したソースコードを示す図である。It is a figure which shows the source code which added the declaration of the control variable. 各ブロックに制御変数の取るべき値を割当てたソースコードを示す図である。It is a figure which shows the source code which assigned the value which should take a control variable to each block. 制御構造を平坦化したソースコードを示す図である。It is a figure which shows the source code which planarized the control structure. 制御変数の値を次に実行されるブロックに割当てられた値に書き換える処理を各ブロックの末尾に追加したソースコードを示す図である。It is a figure which shows the source code which added the process which rewrites the value of a control variable to the value allocated to the block performed next at the end of each block. 制御変数を符号化したソースコードを示す図である。It is a figure which shows the source code which encoded the control variable. 自明でない関係式「d1^d2^d3=0」を用いて、条件分岐を変換したソースコードを示す図である。It is a figure which shows the source code which converted the conditional branch using the relational expression "d1 ^ d2 ^ d3 = 0" which is not obvious.

Claims (8)

プログラムに含まれるアルゴリズムの解析を困難にするためのプログラム難読化方法であって、
プログラムの制御構造を平滑化し、該プログラムの実行順序を管理する制御変数を設定する第1のステップと、
前記制御変数を符号化する第2のステップと、
非自明な関係式を用いて、架空の条件分岐を生成する第3のステップと、
を備えたことを特徴とするプログラム難読化方法。
A program obfuscation method for making it difficult to analyze an algorithm included in a program,
A first step of smoothing a control structure of the program and setting a control variable for managing the execution order of the program;
A second step of encoding the control variable;
A third step of generating a fictitious conditional branch using a non-trivial relational expression;
A program obfuscation method characterized by comprising:
前記第1のステップが、ソースコードに含まれる連続した命令を、ブロック単位に切り出すステップと、
該切り出したブロックの実行順序を制御するための制御変数を設定するステップと、
前記切り出したブロックのそれぞれに、制御変数がとるべき値を割当てるステップと、
switch文またはif文を用いて、前記切り出したブロックを並列に並べるステップと、
前記制御変数の値を次に実行されるブロックに割当てられた制御変数値に書き換える処理をそれぞれ切り出したブロックの最後に付加するステップと、
を備えたことを特徴とする請求項1に記載のプログラム難読化方法。
Cutting the continuous instructions included in the source code into blocks, wherein the first step is;
Setting a control variable for controlling the execution order of the extracted blocks;
Assigning a value to be taken by the control variable to each of the extracted blocks;
arranging the cut-out blocks in parallel using a switch statement or an if statement;
Adding a process of rewriting the value of the control variable to a control variable value assigned to a block to be executed next, at the end of each cut block;
The program obfuscation method according to claim 1, further comprising:
前記第2のステップが、符号化を施すn個(但し、nは正整数)の制御変数を任意に選択するステップと、
m×nの行列(但し、mは、m≧nの正整数)およびm次元の任意のベクトルを生成するステップと、
前記生成した行列およびベクトルを変換鍵として前記n個の制御変数を線形変換して同時にm個の制御変数を符号化するステップと、
を備えたことを特徴とする請求項1または請求項2に記載のプログラム難読化方法。
The second step arbitrarily selecting n (n is a positive integer) control variables to be encoded; and
generating an m × n matrix (where m is a positive integer of m ≧ n) and an arbitrary vector of m dimensions;
Linearly transforming the n control variables using the generated matrix and vector as a conversion key and simultaneously encoding m control variables;
The program obfuscation method according to claim 1 or 2, further comprising:
前記第3のステップが、架空の条件分岐として一般的な条件分岐と類似の形態で、常に真と判定される条件式あるいは、常に偽と判定される条件式を生成することを特徴とする請求項1から請求項3のいずれかに記載のプログラム難読化方法。   The third step generates a conditional expression that is always determined to be true or a conditional expression that is always determined to be false in a form similar to a general conditional branch as a fictitious conditional branch. The program obfuscation method according to any one of claims 1 to 3. プログラムに含まれるアルゴリズムの解析を困難にするためのプログラム難読化方法をコンピュータに実行させるためのプログラムであって、
プログラムの制御構造を平滑化し、該プログラムの実行順序を管理する制御変数を設定する第1のステップと、
前記制御変数を符号化する第2のステップと、
非自明な関係式を用いて、架空の条件分岐を生成する第3のステップと、
を備えたことを特徴とするプログラム。
A program for causing a computer to execute a program obfuscation method for making it difficult to analyze an algorithm included in the program,
A first step of smoothing a control structure of the program and setting a control variable for managing the execution order of the program;
A second step of encoding the control variable;
A third step of generating a fictitious conditional branch using a non-trivial relational expression;
A program characterized by comprising:
前記第1のステップが、ソースコードに含まれる連続した命令を、ブロック単位に切り出すステップと、
該切り出したブロックの実行順序を制御するための制御変数を宣言するステップと、
前記切り出したブロックのそれぞれに、制御変数がとるべき値を割当てるステップと、
switch文またはif文を用いて、前記切り出したブロックを並列に並べるステップと、
前記制御変数の値を次に実行されるブロックに割当てられた制御変数値に書き換える処理をそれぞれ切り出したブロックの最後に付加するステップと、
を備えたことを特徴とする請求項5に記載のプログラム。
Cutting the continuous instructions included in the source code into blocks, wherein the first step is;
Declaring a control variable for controlling the execution order of the extracted blocks;
Assigning a value to be taken by the control variable to each of the extracted blocks;
arranging the cut-out blocks in parallel using a switch statement or an if statement;
Adding a process of rewriting the value of the control variable to a control variable value assigned to a block to be executed next, at the end of each cut block;
The program according to claim 5, comprising:
前記第2のステップが、符号化を施すn個(但し、nは正整数)の制御変数を任意に選択する第ステップと、
m×nの行列(但し、mは、m≧nの正整数)およびm次元の任意のベクトルを生成するステップと、
前記生成した行列およびベクトルを変換鍵として前記n個の制御変数を線形変換して同時にm個の制御変数を符号化するステップと、
を備えたことを特徴とする請求項5または請求項6に記載のプログラム。
The second step arbitrarily selects n control variables (where n is a positive integer) to be encoded;
generating an m × n matrix (where m is a positive integer of m ≧ n) and an arbitrary vector of m dimensions;
Linearly transforming the n control variables using the generated matrix and vector as a conversion key and simultaneously encoding m control variables;
The program according to claim 5 or 6, further comprising:
前記第3のステップが、架空の条件分岐として一般的な条件分岐と類似の形態で、常に真と判定される条件式あるいは、常に偽と判定される条件式を生成することを特徴とする請求項5から請求項7のいずれかに記載のプログラム。   The third step generates a conditional expression that is always determined to be true or a conditional expression that is always determined to be false in a form similar to a general conditional branch as a fictitious conditional branch. Item 8. The program according to any one of items 5 to 7.
JP2006271852A 2006-10-03 2006-10-03 Program obfuscation method and program Active JP4917860B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006271852A JP4917860B2 (en) 2006-10-03 2006-10-03 Program obfuscation method and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006271852A JP4917860B2 (en) 2006-10-03 2006-10-03 Program obfuscation method and program

Publications (2)

Publication Number Publication Date
JP2008090668A true JP2008090668A (en) 2008-04-17
JP4917860B2 JP4917860B2 (en) 2012-04-18

Family

ID=39374731

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006271852A Active JP4917860B2 (en) 2006-10-03 2006-10-03 Program obfuscation method and program

Country Status (1)

Country Link
JP (1) JP4917860B2 (en)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009230717A (en) * 2008-03-25 2009-10-08 Panasonic Corp Processing apparatus, obfuscation device, program, and integrated circuit
JP2011150560A (en) * 2010-01-22 2011-08-04 Kddi Corp System and method for protecting software, software conversion method and program
KR20170108111A (en) * 2015-01-27 2017-09-26 애리스 인터프라이지즈, 인크. Obfuscation for protection of streaming media and other data flows

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002514333A (en) * 1997-06-09 2002-05-14 インタートラスト テクノロジーズ コーポレイション Confusing technology to enhance software security
JP2002333992A (en) * 2001-05-09 2002-11-22 Denso Corp Execution order inspecting device and its program
JP2003337629A (en) * 2002-05-18 2003-11-28 Mitsuko Miyaji Program obfuscation method and device
JP2004185064A (en) * 2002-11-29 2004-07-02 Matsushita Electric Ind Co Ltd Device and method for making program difficult to read
JP2005085188A (en) * 2003-09-11 2005-03-31 Fujitsu Ltd Program protection method, program protection program, and program protection device
JP2006079347A (en) * 2004-09-09 2006-03-23 Kddi Corp Coding method and program therefor

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002514333A (en) * 1997-06-09 2002-05-14 インタートラスト テクノロジーズ コーポレイション Confusing technology to enhance software security
JP2002333992A (en) * 2001-05-09 2002-11-22 Denso Corp Execution order inspecting device and its program
JP2003337629A (en) * 2002-05-18 2003-11-28 Mitsuko Miyaji Program obfuscation method and device
JP2004185064A (en) * 2002-11-29 2004-07-02 Matsushita Electric Ind Co Ltd Device and method for making program difficult to read
JP2005085188A (en) * 2003-09-11 2005-03-31 Fujitsu Ltd Program protection method, program protection program, and program protection device
JP2006079347A (en) * 2004-09-09 2006-03-23 Kddi Corp Coding method and program therefor

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009230717A (en) * 2008-03-25 2009-10-08 Panasonic Corp Processing apparatus, obfuscation device, program, and integrated circuit
JP2011150560A (en) * 2010-01-22 2011-08-04 Kddi Corp System and method for protecting software, software conversion method and program
KR20170108111A (en) * 2015-01-27 2017-09-26 애리스 인터프라이지즈, 인크. Obfuscation for protection of streaming media and other data flows
KR102000861B1 (en) 2015-01-27 2019-07-16 애리스 엔터프라이지즈 엘엘씨 Obfuscation for protection of streaming media and other data flows

Also Published As

Publication number Publication date
JP4917860B2 (en) 2012-04-18

Similar Documents

Publication Publication Date Title
Arif et al. A novel chaotic permutation-substitution image encryption scheme based on logistic map and random substitution
CN105453481B (en) Calculating equipment including table network
Wu et al. AEA-NCS: An audio encryption algorithm based on a nested chaotic system
KR102000861B1 (en) Obfuscation for protection of streaming media and other data flows
Kiya et al. Image and model transformation with secret key for vision transformer
Navale et al. A multi-analysis on privacy preservation of association rules using hybridized approach
JP4917860B2 (en) Program obfuscation method and program
US10331896B2 (en) Method of protecting secret data when used in a cryptographic algorithm
JP4667800B2 (en) Encoding method and program thereof
Sharma et al. Text security using 2d cellular automata rules
JP4837506B2 (en) Program obfuscation method and program
Wang et al. Color image ROI encryption algorithm based on a novel 4D hyperchaotic system
Zhu et al. Obfuscate arrays by homomorphic functions
JP2007079916A (en) Encoding method and its program
Carpentieri et al. Data hiding using compressed archives
JP5149061B2 (en) Program obfuscation apparatus, program obfuscation method, and program
Saračević et al. A steganography method based on decomposition of the Catalan numbers
Zhu et al. H Function based Tamper-proofing Software Watermarking Scheme.
JP5627444B2 (en) Software obfuscation device, software obfuscation method and program
JP2007086845A (en) Client server system, method for providing server side program for the system, its server device, and server side program
KR101625018B1 (en) Data encryption apparatus and method, computing device and communication device employing the same
JP5149062B2 (en) Program obfuscation apparatus, program obfuscation method, and program
Rafat et al. IST: Improved steganography for HTML
JP5378055B2 (en) Program obfuscation apparatus, program obfuscation method, and program
JP2012234248A (en) Software obfuscation device, software obfuscation method, and program

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090708

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111011

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111018

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111216

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

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

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150203

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4917860

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150