JP2003337629A - Program obfuscation method and device - Google Patents

Program obfuscation method and device

Info

Publication number
JP2003337629A
JP2003337629A JP2002183644A JP2002183644A JP2003337629A JP 2003337629 A JP2003337629 A JP 2003337629A JP 2002183644 A JP2002183644 A JP 2002183644A JP 2002183644 A JP2002183644 A JP 2002183644A JP 2003337629 A JP2003337629 A JP 2003337629A
Authority
JP
Japan
Prior art keywords
function
program
pointer
obfuscation
variable
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.)
Pending
Application number
JP2002183644A
Other languages
Japanese (ja)
Inventor
Mitsuko Miyaji
充子 宮地
Masakazu Soshi
正和 双紙
Toshio Ogiso
俊夫 小木曾
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.)
Individual
Original Assignee
Individual
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 Individual filed Critical Individual
Priority to JP2002183644A priority Critical patent/JP2003337629A/en
Publication of JP2003337629A publication Critical patent/JP2003337629A/en
Pending legal-status Critical Current

Links

Abstract

<P>PROBLEM TO BE SOLVED: To provide an obfuscation method, which obfuscate a program in a low price so as to complicate functional analysis, when the program has confidential data or confidential algorithm, and to obfuscate the program and to prevent unauthorized access to the program by means of the obfuscation method and device which are certified that the obfuscated program is difficult to be analyzed in some configurations. <P>SOLUTION: A plurality of pointer variables to function are newly installed so as not to change the specifications of the program for a source code of the program, a plurality of statements, which assigns the address of the function in one of the function pointer variables, are inserted, and the calling of the function in the program is converted so that the function is called, in response to a value of the function pointer variable. <P>COPYRIGHT: (C)2004,JPO

Description

【発明の詳細な説明】Detailed Description of the Invention

【0001】[0001]

【発明が属する技術分野】本発明は、機密データや機密
アルゴリズム等を持つプログラムにおいて、前記データ
や前記アルゴリズム等への不正アクセスを防ぐ必要があ
る場合に、前記プログラムに対して、その解析が困難に
なるよう変換する難読化方法及び装置に関するものであ
る。
BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention makes it difficult to analyze a program having confidential data, a confidential algorithm, etc. when it is necessary to prevent unauthorized access to the data, the algorithm, etc. The present invention relates to an obfuscation method and device for converting to.

【0002】[0002]

【従来の技術】近年のコンピュータネットワークの発展
により、プログラムの流通形態が変化している。従来
は、プログラムの流通はバイナリ形式で行うことが一般
的であったが、フリーソフトウェア等に見られるよう
に、ソースコード形式もしくはそれに近い形式でのプロ
グラムの流通が増大している。特に、近年、次世代のコ
ンピューティング基盤として注目を浴びているモバイル
エージェントシステムでは、機種依存性の問題から、モ
バイルエージェントはソースコードもしくはソースコー
ドに近い形で実現され、端末間を移動することが一般的
となっている。
2. Description of the Related Art With the recent development of computer networks, the distribution of programs has changed. In the past, distribution of programs was generally done in binary format, but as seen in free software and the like, distribution of programs in source code format or formats close to that is increasing. In particular, in the mobile agent system, which has been attracting attention as a next-generation computing platform in recent years, due to the problem of model dependence, the mobile agent is realized in a source code or a form close to the source code and can move between terminals. It is commonplace.

【0003】このような状況下では、悪意のある第三者
によって機密データや機密アルゴリズムを持つプログラ
ムが解析され、前記データが盗用されたり、前記アルゴ
リズムの知的財産権が侵害されたりする危険性が存在す
る。そこで、プログラムをこのような不正アクセスから
保護する方法が必要であると考えられる。
Under such circumstances, a malicious third party may analyze a program having confidential data or a confidential algorithm, and the data may be stolen or the intellectual property right of the algorithm may be infringed. Exists. Therefore, it is considered necessary to have a method for protecting the program from such unauthorized access.

【0004】前記保護方法としては、単純にプログラム
を暗号化するだけでは不十分であると考えられる。なぜ
ならば、暗号化されたプログラムは、流通の過程での解
析は非常に困難であるものの、そのままでは計算機は解
釈実行することができないことから、実行時にプログラ
ムを必ず復号化する必要があるため、復号後のプログラ
ムの保護が難しいからである。
It is considered that simply encrypting the program is not sufficient as the protection method. Because the encrypted program is very difficult to analyze in the process of distribution, but the computer cannot interpret and execute it as it is, so it is necessary to decrypt the program at the time of execution. This is because it is difficult to protect the program after decryption.

【0005】そこで、前記保護方法として、特開平8−
95777号公報「ソフトウェア利用制御装置」に示さ
れているように、特殊なハードウェアを利用し、様々な
デジタルコンテンツをネットワーク上で流通させ、かつ
課金が可能であるようなシステム(「超流通」として知
られる)が提案されている。さらに、特殊なハードウェ
アを利用しない方法として、難読化によって、プログラ
ムに対して外部からの観測や不当な改変が困難な性質
(耐タンパ性)を持たせる方法が提案されている。難読
化とは、例えば、門田、高田、鳥居、らによる論文「ル
ープを含むプログラムを難読化する方法の提案」電子情
報通信学会論文誌Vol.J80−D−INo.7、に
述べられているように、プログラムの仕様を保ちながら
その解析を困難にするように前記プログラムを変換する
方法のことである。特に、難読化に関しては、Wan
g、Hill、Knight、Davidson、ら
が、その研究「Software tamper re
sistance: Obstructing sta
tic analysis of programs」
Technical Report CS−2000−
12、University of Virgini
a、において、プログラムにおけるポインタ変数の解析
が困難なことに着目し、難読化されたプログラムの解析
の困難さを定量的に示すことができる難読化方法を提案
している。このWangらの提案方法は、関数内のみを
難読化の対象とし、難読化されたプログラムに対する関
数内解析の困難さのみ示されている。
Therefore, as the protection method, Japanese Patent Laid-Open No. 8-
As disclosed in Japanese Patent Publication No. 95777 “Software Usage Control Device”, a system that uses special hardware to distribute various digital contents on a network and enables charging (“super distribution”) (Known as) is proposed. Furthermore, as a method that does not use special hardware, a method has been proposed in which obfuscation makes a program have a property (tamper resistance) that is difficult to observe or tamper with from the outside. Obfuscation is referred to, for example, by Kadota, Takada, Torii, et al., "Proposal of Method for Obfuscating Program Including Loop", IEICE Transactions Vol. J80-D-INo. As described in No. 7, it is a method of converting the program so as to make the analysis difficult while keeping the specifications of the program. Especially regarding obfuscation, Wan
g, Hill, Knight, Davidson, et al., in their study "Software sampler re.
science: Obstructing station
tic analysis of programs ”
Technical Report CS-2000-
12, University of Virgini
In (a), focusing on the difficulty of analyzing pointer variables in a program, we propose an obfuscation method that can quantitatively show the difficulty of analysis of an obfuscated program. The method proposed by Wang et al. Targets only the inside of the function for obfuscation, and shows only the difficulty of the in-function analysis for the obfuscated program.

【0006】[0006]

【発明が解決しようとする課題】しかしながら、超流通
による解決方法では、コストが大きくなるという問題点
が存在する。また、難読化による方法は、門田らの方法
を始めとして従来の多くの方法においては、難読化され
たプログラムの解析の困難さが定量的に示されておら
ず、その効果が明らかではないという問題点がある。一
方で、Wangらが提案した難読化方法は、難読化され
たプログラムに対する関数内解析の困難さは示されてい
るものの、関数間の呼び出し関係を対象としておらず、
難読化されたプログラムに対する関数間解析の困難さは
示されていないという問題点が存在する。すなわち、W
angらの方法は局所的な難読化方法であり、プログラ
ムを全体として見た場合、Wangらの方法の有効性は
明らかではないと考えられる。
However, in the solution method by super distribution, there is a problem that the cost increases. In addition, with regard to the obfuscation method, in many conventional methods such as Kadota's method, the difficulty of analysis of the obfuscated program is not quantitatively shown, and the effect is not clear. There is a problem. On the other hand, the obfuscation method proposed by Wang et al., Although showing the difficulty of the in-function analysis for the obfuscated program, does not target the call relationship between functions,
There is a problem that the difficulty of inter-function analysis for obfuscated programs is not shown. That is, W
The method of ang et al. is a local obfuscation method, and it is considered that the effectiveness of the method of Wang et al. is not clear when the program is viewed as a whole.

【0007】本発明は、前記課題の少なくとも一つを解
決するためになされたもので、機密データや機密アルゴ
リズム等をもつプログラムへの不正アクセスを防ぐため
に、前記プログラムに対して、安価な構成で、関数間解
析を困難にするように難読化する方法であって、構成に
よっては難読化された前記プログラムの解析の困難さが
証明されているような方法及び装置を提供することにあ
る。
The present invention has been made to solve at least one of the above-mentioned problems, and in order to prevent unauthorized access to a program having confidential data, a confidential algorithm, etc., it is possible to use an inexpensive configuration for the program. It is an object of the present invention to provide a method and an apparatus that obfuscate the inter-function analysis so that it is difficult to analyze the obfuscated program depending on the configuration.

【0008】[0008]

【課題を解決するための手段】本発明に関わる難読化方
法は、関数の記述が可能なプログラミング言語によって
記述されたプログラムのソースコードに対して、前記プ
ログラムの仕様を変更しないように変換する方法であっ
て、関数へのポインタ変数を新たに複数個導入し、前記
関数ポインタ変数のいずれかに関数のアドレスを代入す
る命令文を複数個挿入し、前記プログラムにおける関数
の呼出しを、前記関数を直接呼出すのではなく、前記関
数ポインタ変数の値に応じて関数を呼出すように変換す
ることを特徴とする。
An obfuscation method according to the present invention is a method for converting a source code of a program written in a programming language capable of describing functions so as not to change the specifications of the program. In this case, a plurality of pointer variables to a function are newly introduced, a plurality of statement statements for substituting the address of the function into any of the function pointer variables are inserted, and the function is called in the program by calling the function. It is characterized in that the function is converted so as to be called according to the value of the function pointer variable instead of being called directly.

【0009】本発明に関わる難読化方法は、与えられた
プログラムのソースコードに対して、関数へのポインタ
変数と、関数へのポインタの配列変数と、を新たに複数
個導入し、前記複数個の関数ポインタ変数のいずれかあ
るいは前記複数個の関数ポインタ配列の要素のいずれか
に、前記複数個の関数ポインタ変数のいずれかあるいは
前記複数個の関数ポインタ配列の要素のいずれかあるい
は関数のアドレスを代入し、前記関数ポインタ変数ある
いは前記関数ポインタ配列の要素により関数を呼び出す
ように変換することを特徴とする。
In the obfuscation method according to the present invention, a plurality of pointer variables to functions and array variables of pointers to functions are newly introduced into the source code of a given program. To any one of the function pointer variables or any of the plurality of function pointer array elements, any of the plurality of function pointer variables, any of the plurality of function pointer array elements, or the function address. It is characterized in that it is substituted and converted to call a function by the function pointer variable or the element of the function pointer array.

【0010】本発明に関わる難読化方法は、与えられた
プログラムのソースコードに対して、複数個の関数への
ポインタ変数と、ダミー関数Fと、を新たに導入し、前
記関数Fの内部において、前記プログラムにおける複数
個の関数呼び出しを前記関数ポインタ変数を介して実行
できるようにし、前記プログラムにおける前記関数呼び
出しのそれぞれを関数Fを呼出すように変換することを
特徴とする。
In the obfuscation method according to the present invention, pointer variables to a plurality of functions and a dummy function F are newly introduced into the source code of a given program, and inside the function F, , A plurality of function calls in the program can be executed via the function pointer variable, and each of the function calls in the program is converted to call a function F.

【0011】本発明に関わる難読化方法は、与えられた
プログラムのソースコードに対して、ある値を返す関数
へのポインタ変数と、ある値を返す関数へのポインタの
配列変数と、を新たに複数個導入し、前記複数個の関数
ポインタ変数のいずれかあるいは前記複数個の関数ポイ
ンタ配列の要素のいずれかに、前記複数個の関数ポイン
タ変数のいずれかあるいは前記複数個の関数ポインタ配
列の要素のいずれかあるいは関数のアドレスを代入し、
前記関数ポインタ変数あるいは前記関数ポインタ配列の
要素により関数を呼び出すように変換する方法であっ
て、その解析の困難さが証明されていることを特徴とす
る。
In the obfuscation method according to the present invention, a pointer variable to a function that returns a certain value and an array variable of a pointer to a function that returns a certain value are newly added to the source code of a given program. Introducing a plurality of elements, any of the plurality of function pointer variables or any of the plurality of function pointer array elements, any of the plurality of function pointer variables or the plurality of function pointer array elements , Or the address of the function,
A method for converting a function to be called by the function pointer variable or an element of the function pointer array, characterized in that the difficulty of the analysis is proved.

【0012】本発明に関わる難読化装置は、関数の記述
が可能なプログラミング言語によって記述されたプログ
ラムのソースコードを入力する入力手段と、難読化に関
する処理全体の制御を行う制御手段と、前記プログラム
のソースコードを解析して難読化の対象となる領域を決
定する手段と、難読化に利用される関数ポインタ変数や
関数ポインタの配列変数やダミー関数等を導入して前記
関数ポインタ変数や前記関数ポインタの配列変数や前記
ダミー関数等を利用して関数を呼出すように変換する難
読化手段と、前記プログラムを難読化して得られたプロ
グラムのソースコードあるいは実行形式プログラムを出
力する手段と、を備えることを特徴とする。
The obfuscation apparatus according to the present invention includes an input means for inputting a source code of a program described in a programming language capable of describing a function, a control means for controlling the entire obfuscation process, and the program. Means for deciding the area to be obfuscated by analyzing the source code of and the function pointer variable used for obfuscation, array variable of function pointer, dummy function, etc. An obfuscation unit for converting a function to be called using an array variable of the pointer or the dummy function, and a unit for outputting a source code or an executable program of the program obtained by obfuscating the program are provided. It is characterized by

【0013】本発明に関わる難読化処理用記録媒体は、
プログラムのソースコードを難読化するプログラムを記
録した記録媒体であって、前記プログラムのソースコー
ドを解析して難読化の対象となる領域を決定する第1の
処理と、難読化に利用される関数ポインタ変数や関数ポ
インタの配列変数やダミー関数等を導入して前記関数ポ
インタ変数や前記関数ポインタの配列変数や前記ダミー
関数等を利用して関数を呼出すように変換する第2の処
理と、前記プログラムを難読化して得られたプログラム
のソースコードあるいは実行形式プログラムを出力する
第3の処理と、を含むコンピュータが実行可能な難読化
プログラムが記録されていることを特徴とする。
The obfuscation processing recording medium according to the present invention is
A recording medium in which a program for obfuscating the source code of the program is recorded, the first processing of analyzing the source code of the program to determine an area to be obfuscated, and a function used for obfuscation A second process of introducing a pointer variable, an array variable of a function pointer, a dummy function or the like and converting the function pointer variable, the array variable of the function pointer or the dummy function to call a function, A computer-executable obfuscated program including a third process for outputting a source code or an executable program of the program obtained by obfuscating the program is recorded.

【0014】[0014]

【発明の実施の形態】以下、図面を参照しながら本発明
の全体構成及び、以下の4つの実施形態 (1)関数ポインタによる難読化実施形態、(2)関数
ポインタ及び関数ポインタの配列による難読化実施形
態、(3)関数ポインタ及び関数呼び出しをまとめたダ
ミー関数による難読化実施形態、(4)値を返す関数へ
のポインタ及び値を返す関数へのポインタの配列による
難読化実施形態で、その解析の困難さが証明されている
もの、の概略を説明し、その後、それぞれの詳細を説明
する。
BEST MODE FOR CARRYING OUT THE INVENTION Hereinafter, referring to the drawings, the overall configuration of the present invention and the following four embodiments (1) Obfuscated embodiment by a function pointer, (2) Obfuscated by an array of function pointers and function pointers An obfuscated embodiment using a dummy function that summarizes a function pointer and a function call, and (4) an obfuscated embodiment using a pointer to a function that returns a value and an array of pointers to a function that returns a value. An outline of what has been proved to be difficult to analyze will be described, and then details of each will be described.

【0015】図1に、本発明を適用した難読化装置の全
体構成を難読化装置110として示す。
FIG. 1 shows the entire structure of an obfuscation device to which the present invention is applied as an obfuscation device 110.

【0016】難読化装置110は、入力部111と、中
央処理部112と、出力部113と、難読化領域決定部
114と、難読化処理部115と、から構成されてい
る。
The obfuscation device 110 comprises an input unit 111, a central processing unit 112, an output unit 113, an obfuscation region determination unit 114, and an obfuscation processing unit 115.

【0017】入力部111は、難読化したいプログラム
のソースコードを入力するためのものである。中央処理
部112は、難読化する対象を決定する処理や、変数や
ダミー関数の導入処理や、難読化処理などを制御する。
出力部113は、難読化されたソースコードや実行形式
プログラムを出力するためのものである。難読化領域決
定部114は、ソースコードを解析した後、ソースコー
ドにおける難読化する部分を決定する。難読化処理部1
15は、難読化に利用される関数ポインタ変数や関数ポ
インタの配列変数やダミー関数等を新たに導入し、それ
らを利用してプログラムのソースコードを難読化する。
The input unit 111 is for inputting a source code of a program to be obfuscated. The central processing unit 112 controls a process of determining a target to be obfuscated, a process of introducing a variable or a dummy function, a process of obfuscation, and the like.
The output unit 113 is for outputting an obfuscated source code or an executable program. After analyzing the source code, the obfuscation region determination unit 114 determines the obfuscation portion in the source code. Obfuscation processing unit 1
Reference numeral 15 newly introduces a function pointer variable used for obfuscation, an array variable of a function pointer, a dummy function, and the like, and uses them to obfuscate the source code of the program.

【0018】上述した難読化装置110は、以下の2つ
の処理を特徴として持つ。
The above-described obfuscation device 110 is characterized by the following two processes.

【0019】(1)難読化領域決定処理 (2)難読化処理 難読化対象決定処理は、中央処理部112から与えられ
たプログラムのソースコードを解析し、難読化する対象
部分を決定する。難読化処理は、難読化の処理に用いら
れる関数ポインタ変数や関数ポインタの配列変数やダミ
ー関数等を導入し、それらを利用してプログラムのソー
スコードを難読化する。以下、これら2つの処理につい
て詳しく説明する。
(1) Obfuscation area determination process (2) Obfuscation process In the obfuscation target determination process, the source code of the program given from the central processing unit 112 is analyzed and the obfuscation target part is determined. The obfuscation process introduces a function pointer variable, an array variable of a function pointer, a dummy function, etc. used in the obfuscation process, and uses them to obfuscate the source code of the program. Hereinafter, these two processes will be described in detail.

【0020】最初に、図2の難読化領域決定フロー図を
用いて、難読化領域決定部114が行う処理について説
明する。まずはじめに、難読化したいプログラムのソー
スコードを、入力部111から入力する(ステップ2
1)。中央処理部112は、このソースコードを難読化
領域決定部114に送る。難読化領域決定部114は、
送られてきたソースコードを解析する(ステップ2
2)。このとき、一般的には、難読化領域決定部114
は、フローグラフ等を作成し、それを用いて、関数呼び
出しを含めた実行順序の解析、関数内や関数間の変数の
利用状況やデータの流れ、等の解析を行う。難読化領域
決定部114は、ステップ22の処理によって得られた
情報を利用して、難読化する対象部分を決定する(ステ
ップ23)。難読化領域決定部114は、難読化領域を
決定すると、プログラムの解析情報を含む難読化領域情
報を中央処理部112へ送る。中央処理部112は、送
られてきたプログラム解析情報を含む難読化領域情報を
難読化処理部115に送り(ステップ24)、難読化領
域決定処理は終了する。
First, the processing performed by the obfuscation area determination unit 114 will be described with reference to the obfuscation area determination flow chart of FIG. First, the source code of the program to be obfuscated is input from the input unit 111 (step 2
1). The central processing unit 112 sends this source code to the obfuscation region determination unit 114. The obfuscation area determination unit 114
Analyze the source code sent (Step 2
2). At this time, in general, the obfuscation area determination unit 114
Creates a flow graph, etc., and uses it to analyze the execution order including function calls, the usage of variables within and between functions, and the data flow. The obfuscation area determination unit 114 determines the target portion to be obfuscated using the information obtained by the process of step 22 (step 23). When the obfuscation area determination unit 114 determines the obfuscation area, it sends obfuscation area information including analysis information of the program to the central processing unit 112. The central processing unit 112 sends the obfuscated region information including the transmitted program analysis information to the obfuscation processing unit 115 (step 24), and the obfuscation region determination process ends.

【0021】次に、難読化処理について、図3の難読化
処理フロー図を用いて説明する。難読化処理部115
は、中央処理部112から送られてきた、プログラム解
析情報を含む難読化領域情報を入力する(ステップ3
1)。この情報を参照しながら、難読化処理部115
が、与えられたプログラムのソースコードを難読化す
る。このとき、難読化処理部115は、プログラムの仕
様を変更しないように、複数個の関数ポインタ変数や関
数ポインタの配列変数やダミー関数等を新たに導入する
(ステップ32)。その処理後、難読化処理部115
は、前記関数ポインタ変数や前記関数ポインタの配列変
数や前記ダミー関数等を利用して複数の関数の中から関
数を選んで呼び出すような命令文の列を作成する(ステ
ップ33)。難読化処理部115は、難読化領域決定部
114によって決定された難読化領域の一部の関数呼び
出しに関する命令文を取り除き、プログラムの仕様が変
更されないように、ステップ33によって作成された命
令文の列を挿入する(ステップ34)。ここで挿入され
る命令文の列は、プログラムの仕様が変更されなけれ
ば、必ずしも連続して挿入しなくてもよい。その後、ス
テップ35において、さらに難読化処理が必要であれ
ば、ステップ32からの処理を繰り返す。もし必要なけ
れば、難読化処理を終了する。
Next, the obfuscation process will be described with reference to the obfuscation process flow chart of FIG. Obfuscation processing unit 115
Inputs obfuscated area information including program analysis information sent from the central processing unit 112 (step 3).
1). While referring to this information, the obfuscation processing unit 115
Obfuscates the source code of the given program. At this time, the obfuscation processing unit 115 newly introduces a plurality of function pointer variables, array variables of function pointers, dummy functions, etc. so as not to change the specifications of the program (step 32). After that processing, the obfuscation processing unit 115
Uses the function pointer variable, the array variable of the function pointer, the dummy function, or the like to create a sequence of command statements for selecting and calling a function from a plurality of functions (step 33). The obfuscation processing unit 115 removes the command statement relating to a part of the function call of the obfuscation area determined by the obfuscation area determination unit 114, so that the specification of the program is not changed so that the specification of the program is not changed. Insert a row (step 34). The sequence of instruction statements inserted here does not necessarily have to be inserted continuously unless the program specifications are changed. Then, if further obfuscation processing is required in step 35, the processing from step 32 is repeated. If not necessary, the obfuscation process ends.

【0022】以上の全体構成のもとで、本発明は、与え
られたプログラムのソースコードを難読化する。ここ
で、難読化装置110においては、入力部111と、中
央処理部112と、出力部113と、は実施形態によら
ず共通であるが、難読化領域決定部114と、難読化処
理部115と、は実施形態により内容が異なることがあ
る。上述したように、これらの実施形態は、関数ポイン
タによる難読化実施形態、関数ポインタ及び関数ポイン
タの配列による難読化実施形態、関数ポインタ及び関数
呼び出しをまとめたダミー関数による難読化実施形態、
値を返す関数へのポインタ及び値を返す関数へのポイン
タの配列による難読化実施形態でその解析の困難さが証
明されているもの、である。以下で、これらのそれぞれ
について詳しく説明する。
Based on the above overall structure, the present invention obfuscates the source code of a given program. Here, in the obfuscation device 110, the input unit 111, the central processing unit 112, and the output unit 113 are common regardless of the embodiment, but the obfuscation region determination unit 114 and the obfuscation processing unit 115 are common. The contents of and may differ depending on the embodiment. As described above, these embodiments are the obfuscation embodiment by the function pointer, the obfuscation embodiment by the function pointer and the array of the function pointer, the obfuscation embodiment by the dummy function that summarizes the function pointer and the function call,
An obfuscated embodiment of a pointer to a function that returns a value and an array of pointers to a function that returns a value proves difficult to parse. Each of these will be described in detail below.

【0023】まず始めに、説明を分かりやすくするため
に、関数ポインタによる難読化実施形態、関数ポインタ
及び関数ポインタの配列による難読化実施形態、関数ポ
インタ及び関数呼び出しをまとめたダミー関数による難
読化実施形態、の3つの実施形態における、元となるプ
ログラムのソースコードを共通のものであるものと仮定
し、その一実施例を図4に示す。図4は、ステップ23
における、難読化領域決定処理の説明図である。
First, in order to make the explanation easy to understand, an obfuscation implementation using a function pointer, an obfuscation implementation using a function pointer and an array of function pointers, and an obfuscation implementation using a dummy function that summarizes function pointers and function calls FIG. 4 shows an example of the source code of the original program in the three embodiments, assuming that the source code is common. FIG. 4 shows step 23
5 is an explanatory diagram of obfuscation area determination processing in FIG.

【0024】本発明は、関数を直接呼び出すのではな
く、関数ポインタ変数等の値に応じて複数個の関数から
一つの関数を呼び出すように変換する難読化方法を特徴
としているため、関数を直接呼び出す命令文あるいは関
数を(変数の値に依存するなどして)間接的に呼び出す
命令文等が難読化の対象となる。図4においては、難読
化領域として、関数呼び出しである命令文41と命令文
42とが選ばれている。
The present invention is characterized by an obfuscation method in which a function is not directly called but is converted from a plurality of functions to call one function according to the value of a function pointer variable or the like. The obfuscation target is the imperative statement or the like that indirectly calls the imperative statement or function to be called (for example, depending on the value of a variable). In FIG. 4, the imperative sentence 41 and the imperative sentence 42 which are function calls are selected as the obfuscation area.

【0025】ここから、各実施形態の詳細の説明を始め
る。始めに、関数ポインタによる難読化実施形態を、図
5に従い、順を追って説明する。
From here, the detailed description of each embodiment will be started. First, an obfuscation embodiment using a function pointer will be described step by step according to FIG.

【0026】図5は、関数ポインタによる難読化実施形
態の図面である。図5においては、図4に示されたプロ
グラムのソースコードが、関数ポインタを利用すること
によって難読化されている。図5においては、図4と同
一の部分については同一符号を付している。前述したよ
うに、難読化領域決定部114によって、命令文41お
よび42が難読化領域として決定されており、プログラ
ム解析情報を含む難読化領域の情報が、中央処理部11
2から難読化処理部115に送られてきている。
FIG. 5 is a diagram of an obfuscated embodiment with a function pointer. In FIG. 5, the source code of the program shown in FIG. 4 is obfuscated by using a function pointer. 5, the same parts as those in FIG. 4 are designated by the same reference numerals. As described above, the obfuscation area determination unit 114 determines the command statements 41 and 42 as the obfuscation area, and the obfuscation area information including the program analysis information is stored in the central processing unit 11.
2 has been sent to the obfuscation processing unit 115.

【0027】ステップ32では、与えられたプログラム
の仕様を変更しないように、命令文(変数宣言文)51
によって整数変数iが導入されており、かつ、命令文5
2において関数へのポインタ変数fが導入されている。
このとき、呼び出す関数を決定する際に用いられる変数
の数が多いほど、呼び出される関数を決定することを困
難にできるため、ステップ32において導入される、関
数へのポインタ変数等の数は多いことが望ましい。
At step 32, an instruction statement (variable declaration statement) 51 is provided so as not to change the specifications of the given program.
Has introduced the integer variable i, and the statement 5
In 2 a pointer variable f to a function is introduced.
At this time, the greater the number of variables used in determining the function to be called, the more difficult it is to determine the function to be called. Therefore, the number of pointer variables to the function and the like introduced in step 32 is large. Is desirable.

【0028】ステップ33においては、難読化処理部1
15は、プログラムの仕様を変更しないように、変数の
値に依存して異なる関数を呼び出すような命令文の列を
作成する。この実施例の一つは、命令文53および命令
文56である。命令文53は、式「i*(i+1)%2
==0」を条件式として持ち、この条件式が成立する場
合には、関数ポインタfに関数のアドレスfunc1を
代入し(命令文54)、その条件式が成立しない場合に
は、関数ポインタfに関数のアドレスfunc2を代入
する(命令文55)ようなif文である。また、命令文
56は、関数ポインタfに格納されているアドレスを持
つ関数を呼び出して実行する命令文である。
In step 33, the obfuscation processing unit 1
Reference numeral 15 creates a sequence of command statements that call different functions depending on the values of variables so as not to change the specifications of the program. One of the examples is a statement 53 and a statement 56. The imperative sentence 53 is the expression “i * (i + 1)% 2
== 0 "as a conditional expression, and when this conditional expression is satisfied, the address func1 of the function is assigned to the function pointer f (statement 54), and when that conditional expression is not satisfied, the function pointer f Is an if statement such that the function address func2 is substituted for (instruction statement 55). The command statement 56 is a command statement that calls and executes a function having the address stored in the function pointer f.

【0029】次に、ステップ34において、難読化領域
として決定された部分のうち任意に命令文41を選び、
前記命令文の列(命令文53および56)を置き換え
る。命令文53および命令文56は、プログラムの仕様
を変更しないのであれば、連続して挿入する必要はな
い。
Next, in step 34, the command sentence 41 is arbitrarily selected from the portion determined as the obfuscation area,
The sequence of command statements (command statements 53 and 56) is replaced. The command statement 53 and the command statement 56 need not be continuously inserted unless the program specifications are changed.

【0030】ここで、命令文53のif文の条件式の左
辺の計算式「i*(i+1)%2」はiの如何なる(整
数)値においても恒等的に0となるので、常に命令文5
4が実行されることになり、プログラムの仕様は変更さ
れないことがいえる。さらに、通常if文における条件
式を計算することは困難であるため、その分岐先を決定
することは困難である。より一般的に言えば、条件分岐
があるときプログラムにおける命令文の実行順序を決定
する問題は決定不能であることが知られている。この点
は、例えば、Landiによる「Undecidabi
lity ofStatic Analysis」、
ACM Letters on Programmin
g Languages and Systems、V
ol.1、No.4、1992、などの論文で言及され
ている。
Here, since the calculation expression "i * (i + 1)% 2" on the left side of the conditional expression of the if statement of the imperative statement 53 is equal to 0 at any (integer) value of i, the instruction is always executed. Sentence 5
Therefore, it can be said that the specifications of the program are not changed. Furthermore, since it is usually difficult to calculate the conditional expression in the if statement, it is difficult to determine the branch destination. More generally, it is known that the problem of determining the order of execution of imperative statements in a program is undecidable when there is a conditional branch. This point is described, for example, in “Undecidabi” by Landi.
"lity of Static Analysis",
ACM Letters on Programming
g Languages and Systems, V
ol. 1, No. 4, 1992, etc.

【0031】上述の理由により、通常は命令文53を実
行後にfの値を決定することは困難となり、その結果命
令文56においてfによってどの関数が呼び出されるか
を決定することが困難となる。したがって、本発明の実
施により、関数間の解析を困難にする難読化がなされて
いるといえる。
For the above reason, it is usually difficult to determine the value of f after executing the statement 53, and as a result, it becomes difficult to determine which function is called by f in the statement 56. Therefore, it can be said that the implementation of the present invention makes obfuscation that makes analysis between functions difficult.

【0032】次に、関数ポインタ及び関数ポインタの配
列による難読化実施形態を、図6に従い、順を追って説
明する。
Next, an obfuscation embodiment using a function pointer and an array of function pointers will be described step by step with reference to FIG.

【0033】図6は、関数ポインタ及び関数ポインタの
配列による難読化実施形態の図面である。図6において
は、図6に示されたプログラムのソースコードを、関数
ポインタ及び関数ポインタの配列を利用することによっ
て難読化している。図6においては、図4と同一の部分
については同一符号を付して、左端に配置している。前
述したように、難読化領域決定部114によって、命令
文41および42が難読化領域として決定されており、
プログラム解析情報を含む難読化領域の情報が、中央処
理部112から難読化処理部115に送られてきてい
る。
FIG. 6 is a diagram of an obfuscated embodiment of a function pointer and an array of function pointers. In FIG. 6, the source code of the program shown in FIG. 6 is obfuscated by using a function pointer and an array of function pointers. In FIG. 6, the same parts as those in FIG. 4 are designated by the same reference numerals and arranged at the left end. As described above, the obfuscation area determination unit 114 determines the command statements 41 and 42 as the obfuscation area,
Information on the obfuscation region including the program analysis information is sent from the central processing unit 112 to the obfuscation processing unit 115.

【0034】図6における難読化実施例においては、難
読化処理部115は、難読化領域決定部114によって
選ばれた命令文のうち、命令文41をまず関数ポインタ
を用いて難読化し、さらに、関数ポインタの配列を用い
て難読化している。図6における実施例では、上述の処
理のうち、関数ポインタを用いて難読化する処理は関数
ポインタによる難読化実施例と同一であり、図6の中央
に配置されている図によって示されている。図6の中央
の図は、図5と同一の部分については同一符号を付して
いる。この段階で、難読化処理はステップ35が実行さ
れる。
In the obfuscation embodiment in FIG. 6, the obfuscation processing unit 115 first obfuscates the imperative sentence 41 among the imperative sentences selected by the obfuscation area determination unit 114 using a function pointer, and further, Obfuscated using an array of function pointers. In the embodiment in FIG. 6, among the above-described processing, the obfuscation processing using the function pointer is the same as the obfuscation embodiment using the function pointer, and is shown by the diagram arranged in the center of FIG. . In the central view of FIG. 6, the same parts as those in FIG. 5 are designated by the same reference numerals. At this stage, step 35 of the obfuscation process is executed.

【0035】次に、ステップ35からステップ32に処
理が移り、関数ポインタの配列を利用して、命令文41
に相当する部分の難読化が行われる。このために、まず
始めにステップ32により、命令文61において新たに
整数変数jが導入され、さらに、命令文62において関
数ポインタの配列Aを導入している。その後、関数ポイ
ンタfへの代入を関数ポインタ配列Aを介して行うよう
に変換する。このため、ステップ33により、命令文5
3のif文に対応するif文であって、命令文54にお
ける関数ポインタfへの代入を、命令文64においてま
ず関数ポインタの配列の一要素A[33]に代入するも
のとし、また、命令文55における関数ポインタfへの
代入を、命令文65においてまず関数ポインタの配列の
一要素A[71]に代入するものとするような、命令文
63のif文を作成している。さらに、二つ目のif文
として、その条件式が「(j−1)*j%2==0」で
あるような命令文66を作成し、その命令文67におい
て、関数ポインタの配列の一要素A[33]を関数ポイ
ンタfに代入するものとし、命令文68において、関数
ポインタの配列の一要素A[71]を関数ポインタfに
代入するものとするようなif文を作成している。次
に、ステップ34において、上述のように作成した文お
よび、関数ポインタfに格納されているアドレスを持つ
関数を呼び出して実行する命令文69とを、命令文41
に相当する部分に置き換えている。これらの置き換えの
際に挿入される命令文は、プログラムの仕様を変えない
ものであれば、連続して挿入する必要はない。
Next, the process moves from step 35 to step 32, and the command statement 41 is used by using the array of function pointers.
The obfuscation of the part corresponding to is performed. For this purpose, first, at step 32, a new integer variable j is introduced in the statement 61, and further, an array A of function pointers is introduced in the statement 62. After that, the function pointer f is converted so as to be assigned via the function pointer array A. Therefore, in step 33, the statement 5
In the if statement corresponding to the if statement of No. 3, the assignment to the function pointer f in the instruction statement 54 is first assigned to one element A [33] of the array of the function pointers in the instruction statement 64. The if statement of the imperative statement 63 is created so that the substitution to the function pointer f in the statement 55 is first substituted into the element A [71] of the function pointer array in the imperative statement 65. Furthermore, as a second if statement, an instruction statement 66 whose conditional expression is “(j−1) * j% 2 == 0” is created, and in the instruction statement 67, an array of function pointer arrays Create an if statement such that one element A [33] is assigned to the function pointer f, and in the statement 68, one element A [71] of the array of function pointers is assigned to the function pointer f. There is. Next, in step 34, the statement created as described above and the statement 69 that calls and executes the function having the address stored in the function pointer f
Is replaced with the part corresponding to. It is not necessary to continuously insert the command statements inserted during these replacements as long as they do not change the program specifications.

【0036】関数ポインタの配列の要素A[33]およ
びA[71]における添字33および71については、
プログラムの仕様を変えないものであれば、任意に選ん
でよい。その際、難読化の効果を高めるため、複雑な計
算式などを利用して計算することも考えられる。
Regarding the subscripts 33 and 71 in the elements A [33] and A [71] of the array of function pointers,
Any program may be selected as long as it does not change the specifications of the program. At that time, in order to enhance the effect of obfuscation, it is possible to use a complicated formula or the like for calculation.

【0037】このとき、命令文66のif文の条件式の
左辺「(j−1)*j%2」はjの如何なる(整数)値
においても恒等的に0となるので、常に命令文67が実
行されることになり、プログラムの仕様は変更されな
い。さらに、Aho、Sethi、Ullman、らに
よる「Compilers: Principles、
Techniques and Tools」、Add
ison−Wesley、1986、などの文献に示さ
れているように、一般的に言って配列の要素の計算は困
難であることが知られており、また上述したようにif
文における実行の流れを計算することが困難であること
がいえるため、通常は命令文63および66の二つのi
f文の実行後にfの値を決定することは困難となり、そ
の結果命令文69においてfによってどの関数が呼び出
されるかを決定することがより困難となり、関数間の解
析を困難にする難読化がなされているといえる。
At this time, since "(j-1) * j% 2" on the left side of the conditional expression of the if statement of the imperative statement 66 is equal to 0 at any (integer) value of j, it is always the imperative statement. 67 will be executed, and the specifications of the program will not be changed. In addition, "Compilers: Principles, by Aho, Sethi, Ullman, et al.
"Techniques and Tools", Add
It is known that it is generally difficult to calculate the elements of an array, as shown in a document such as ison-Wesley, 1986, and as described above, if
Since it can be said that it is difficult to calculate the flow of execution in a statement, normally two i
It becomes difficult to determine the value of f after execution of the f statement, and as a result, it becomes more difficult to determine which function is called by f in the imperative statement 69, and obfuscation that makes analysis between functions difficult. It can be said that it is done.

【0038】なお、今まで述べてきた関数ポインタ及び
関数ポインタの配列による難読化実施形態においては、
関数ポインタによる難読化を実施した後に関数ポインタ
の配列による難読化を行うといった順で行う必要はな
く、逆に関数ポインタの配列に関数のアドレスを代入し
て行う難読化を実施した後、関数のアドレスを関数ポイ
ンタによって難読化するといった順で行ってもよい。も
ちろん、前記の二つの難読化を同時に実施してもよい。
In the obfuscation embodiment using the function pointer and the array of function pointers described above,
It is not necessary to perform the obfuscation with the function pointer array after performing the obfuscation with the function pointer, and reversely, after performing the obfuscation with the address of the function assigned to the function pointer array, The address may be obfuscated with a function pointer. Of course, the above two obfuscations may be performed simultaneously.

【0039】次に、関数ポインタ及び関数呼び出しをま
とめたダミー関数による難読化実施形態を、図7に従
い、順を追って説明する。
Next, an obfuscation embodiment using a dummy function that summarizes the function pointer and the function call will be described step by step with reference to FIG.

【0040】図7は、関数ポインタ及び関数呼び出しを
まとめたダミー関数による難読化実施形態の図面であ
る。図7においては、図4に示されたプログラムのソー
スコードを、関数ポインタ及び関数呼び出しをまとめた
ダミー関数を利用することで難読化している。図7にお
いては、図4と同一の部分については同一符号を付し
て、左端に配置している。前述したように、難読化領域
決定部114によって、命令文41および42が難読化
領域として決定されており、プログラム解析情報を含む
難読化領域の情報が、中央処理部112から難読化処理
部115に送られてきている。
FIG. 7 is a diagram of an obfuscated embodiment with a dummy function that summarizes function pointers and function calls. In FIG. 7, the source code of the program shown in FIG. 4 is obfuscated by using a dummy function that combines a function pointer and a function call. In FIG. 7, the same parts as those in FIG. 4 are designated by the same reference numerals and arranged at the left end. As described above, the obfuscation area determination unit 114 determines the command statements 41 and 42 as the obfuscation area, and the obfuscation area information including the program analysis information is transferred from the central processing unit 112 to the obfuscation processing unit 115. Have been sent to.

【0041】図7における難読化実施例においては、難
読化処理部115は、難読化領域決定部114によって
選ばれた命令文41および42を関数ポインタを用いて
難読化し、さらに、関数呼び出しをまとめたダミー関数
を利用することで難読化している。このために、まずス
テップ32により、命令文701において新たに整数変
数iを導入し、命令文702において関数へのポインタ
fを導入している。その後、関数呼び出しをまとめたダ
ミー関数を利用して難読化するために、ステップ33に
より、命令文703(関数宣言文)においてダミー関数
Fを導入している。関数Fの内部において、難読化領域
決定部114によって選択された命令文41および42
の関数呼び出しをまとめて呼び出すことができるように
するために、命令文704のif文において、変数iの
値に応じて、iが0のときは命令文705において関数
のアドレスfunc1をfに代入し、iが1のときは命
令文706において関数のアドレスfunc2をfに代
入するものを作成する。命令文707は、関数ポインタ
fに格納されているアドレスをもつ関数を呼び出すため
のものである。
In the obfuscation embodiment in FIG. 7, the obfuscation processing unit 115 obfuscates the command statements 41 and 42 selected by the obfuscation area determination unit 114 using a function pointer, and further summarizes the function calls. It is obfuscated by using a dummy function. For this purpose, first in step 32, a new integer variable i is introduced in the statement 701, and a pointer f to a function is introduced in the statement 702. After that, in order to obfuscate using a dummy function that summarizes the function calls, the dummy function F is introduced in the command statement 703 (function declaration statement) in step 33. Inside the function F, the statement sentences 41 and 42 selected by the obfuscation area determination unit 114.
In order to be able to collectively call the function calls of the above, in the if statement of the statement 704, depending on the value of the variable i, when i is 0, the function address func1 is assigned to f in the statement 705. However, when i is 1, a command statement 706 is created in which the function address func2 is assigned to f. The statement 707 is for calling a function having the address stored in the function pointer f.

【0042】さらに、変数iの値を適切なものにするた
めに、命令文708を作成し、その命令文708の以降
の部分に関数Fの呼び出しである命令文709を作成す
る。同様に、命令文710を作成し、その命令文710
の以降の部分に関数Fの呼び出しである命令文711を
作成する。命令文708の右辺の式「i*(i+1)%
2」においては、iが如何なる(整数)値を持とうと恒
等的に0となるため、命令文708の実行後にはiの値
は0となる。同様に、命令文710の右辺の式「(i−
1)*i%2+1」においては、iが如何なる(整数)
値を持とうと恒等的に1となるため、命令文710の実
行後にはiの値は1となる。以上より、元のプログラム
の仕様に変更がないことがいえる。
Further, in order to make the value of the variable i appropriate, a command statement 708 is created, and a command statement 709, which is a call to the function F, is created in the subsequent part of the command statement 708. Similarly, a command statement 710 is created and the command statement 710 is generated.
An instruction statement 711 that is a call to the function F is created in a portion subsequent to. Expression “i * (i + 1)% on the right side of the statement 708
In “2”, no matter what (integer) value i takes, the value i becomes 0 after execution of the statement 708. Similarly, the expression "(i-
1) * i% 2 + 1 ”, what is i (integer)?
The value of i becomes 1 after execution of the statement 710 because the value becomes equal to 1 when the value is taken. From the above, it can be said that there is no change in the specifications of the original program.

【0043】ステップ34において、前記作成された関
数Fおよび命令文708から711を、難読化領域決定
部114によって選択された命令文41および42に対
応して置き換える。これらの置き換えの際に挿入される
命令文は、プログラムの仕様を変えないものであれば、
連続して挿入する必要はない。
In step 34, the created function F and command statements 708 to 711 are replaced in correspondence with the command statements 41 and 42 selected by the obfuscation area determination unit 114. If the statement inserted during these replacements does not change the program specifications,
It is not necessary to insert continuously.

【0044】ここで、図7における難読化実施例の内容
について説明する。プログラムを実行する際には、関数
呼び出しから復帰したときは、プログラムの実行は呼び
出した命令文の次の命令文に移らなければならない。た
とえば、図7の命令文709において関数Fが呼び出さ
れ、その内部の命令文707において関数ポインタfが
func1のアドレスを持っておりfunc1が呼び出
されたとすると、プログラムの実行がfunc1から復
帰し、次に関数Fから復帰した直後に実行される命令文
は、命令文709の次の実行文でなければならない。同
様に、命令文711において関数Fが呼び出され、その
内部の命令文707において関数ポインタfがfunc
1のアドレスを持っておりfunc1が呼び出されたと
すると、プログラムの実行がfunc1から復帰し、次
に関数Fから復帰した直後に実行される命令文は、命令
文711の次の実行文でなければならない。これを関数
func1に注目して考えてみると、関数func1の
復帰後の実行は、func1の呼び出し位置によって復
帰されるべき点が変わってくるということになる。一般
的に言って、if文における分岐先を決める問題が難し
いのと同様の理由で、上述のような正しい呼び出し復帰
の実行順序を決定することは、困難であることがいえる
ため、図7による難読化実施例によって、関数間解析の
困難さが増したことがいえる。
Here, the contents of the obfuscated embodiment in FIG. 7 will be described. When executing a program, when returning from a function call, execution of the program must move to the next statement after the called statement. For example, if the function F is called in the statement 709 of FIG. 7, and the function pointer f has the address of func1 in the statement 707 inside it, and func1 is called, the execution of the program returns from func1, The statement executed immediately after returning from the function F must be the next statement after the statement 709. Similarly, the function F is called in the imperative sentence 711, and the function pointer f is set to func in the imperative sentence 707.
If it has an address of 1 and func1 is called, the execution statement of the program returns from func1, and the statement executed immediately after returning from the function F is not the execution statement next to the statement 711. I won't. Considering this with a focus on the function func1, it means that the point after the function func1 is executed after the return depends on the calling position of the func1. Generally speaking, for the same reason that the problem of deciding the branch destination in the if statement is difficult, it can be said that it is difficult to decide the execution order of the correct call return as described above. It can be said that the obfuscation example increases the difficulty of the inter-function analysis.

【0045】次に、値を返す関数へのポインタ及び値を
返す関数へのポインタの配列による難読化実施形態でそ
の解析の困難さが証明されているもの、を、図8に従っ
て説明する。
Next, the obfuscation of an obfuscated embodiment using an array of pointers to a function that returns a value and an array of pointers to a function that returns a value, the difficulty of which is proved, will be described with reference to FIG.

【0046】しかしながら、図8は、関数が値を返すも
のであるという点以外は、ほぼ図6と同様であるので、
説明は必要最小限にとどめる。
However, since FIG. 8 is almost the same as FIG. 6 except that the function returns a value,
Keep the explanation to a minimum.

【0047】図8の実施形態において、難読化の対象と
なるプログラムのソースコードは、図8の左端の図面に
与えられている。図6のプログラムとの違いは、図8で
は関数func1(命令文821によって宣言される)
および関数func2(命令文822によって宣言され
る)は、いずれも整数値を返す関数であり、命令文82
3において変数mにfunc1の返り値が代入され、命
令文824においてfunc2の返り値が変数nに代入
されているという点である。
In the embodiment of FIG. 8, the source code of the program to be obfuscated is given in the leftmost drawing of FIG. The difference from the program in FIG. 6 is that the function func1 in FIG. 8 (declared by the statement 821)
The function func2 (declared by the statement 822) is a function that returns an integer value, and the statement 82
3 is that the return value of func1 is assigned to the variable m in 3 and the return value of func2 is assigned to the variable n in the statement 824.

【0048】図8の実施形態においては、難読化領域決
定部114は命令文823および824を対象部分とし
て選択している。
In the embodiment of FIG. 8, the obfuscation area determination unit 114 selects the imperative sentences 823 and 824 as the target portions.

【0049】図8の実施形態においては、難読処理部1
15は関数ポインタを導入して難読化している。この処
理の実施形態は、図8の中心の図面に示されている。こ
の実施形態と、図6の実施形態との違いは、図8では命
令文832によって、(整数)値を返す関数へのポイン
タfが導入されているという点と、命令文836におい
て、fを介して呼ばれる関数の返り値がmに代入されて
いるという点である。
In the embodiment of FIG. 8, the obfuscation processing unit 1
Reference numeral 15 introduces a function pointer to obfuscate it. An embodiment of this process is shown in the central drawing of FIG. The difference between this embodiment and the embodiment of FIG. 6 is that in FIG. 8 a pointer f to a function that returns an (integer) value is introduced by the statement 832, and in the statement 836, f The point is that the return value of the function called via is assigned to m.

【0050】上記処理の後、図8の実施形態において
は、難読処理部115は(整数)値を返す関数へのポイ
ンタの配列を導入し、それを介して関数呼び出しを行う
ように難読化している。図6の実施例との違いは、図8
では命令文842によって、(整数)値を返す関数への
ポインタの配列Aが導入されているという点と、命令文
849において、fを介して呼ばれる関数の返り値がm
に代入されているという点である。
After the above processing, in the embodiment of FIG. 8, the obfuscation processing unit 115 introduces an array of pointers to functions that return an (integer) value, and obfuscates the function call through it. There is. The difference from the embodiment of FIG. 6 is that FIG.
Then, the statement 842 introduces an array A of pointers to functions that return (integer) values, and in the statement 849, the return value of the function called via f is m.
Is that it is assigned to.

【0051】図8の実施形態の特徴は、図6に述べたも
のと同様であるが、図8の特徴は、その解析の困難さが
証明できるということにある。より具体的には、値を返
す関数へのポインタに対して、関数ポインタの配列を利
用した代入があり、値を返す関数へのポインタによる関
数への呼び出しがあるようなプログラムにおいて、関数
ポインタの指し示すアドレスを決定する問題はNP困難
であることことが示される。以下にこの証明を示す。
The feature of the embodiment of FIG. 8 is the same as that described in FIG. 6, but the feature of FIG. 8 is that the difficulty of the analysis can be proved. More specifically, in a program in which there is an assignment using an array of function pointers for a pointer to a function that returns a value, and there is a call to a function by a pointer to a function that returns a value, It is shown that the problem of determining the address to point to is NP-hard. The proof is shown below.

【0052】証明任意の3−SAT問題が与えられたと
き、前記の問題はその3−SAT問題から多項式時間で
帰着可能であることを以下に示す。3−SAT問題はN
P完全であることが知られているため、これにより証明
されたことになる。以下に具体的に証明を述べる。この
証明では、すべての実行経路を実行可能であるとみなし
て解析が行われると仮定している。これは、解析に関し
て通常行われる仮定で、「meet over all
paths」仮定としばしば呼ばれる。命題変数v
(i=1,2,...,m)について、n個の節の論
理積の充足可能性を調べる3−SAT問題が与えられた
と仮定する。ここで、節とは、3つのリテラルli1
i2,li3 (i=1,...,n)の論理和であ
る。リテラルとは、あるk (1≦k≦m)について、
もしくはその論理否定¬vである。このような3
−SAT問題が与えられたとき、図9に示すような、関
数ポインタを含むプログラムを構成する。このプログラ
ムのサイズは、明らかに命題変数と論理式の多項式オー
ダで押さえられる。また、if文のすべての実行経路は
実行可能であると仮定するので、条件式を省略し「−」
と記述している。このプログラムにおいて、L1では、
関数ポインタcおよび元の3−SAT問題の命題変数v
に対応する関数ポインタv (i=1,
2,...,m)が宣言されている。同様に、命題変数
の論理否定に対応する、関数ポインタneg_v
が宣言される。さらに、lij (i=1,
2,...,n,j=1,2,3)は、i番目の節のj
番目のリテラルに対応するもので、あるk (1≦k≦
m)について、vもしくはneg_vである。そし
て、L2では関数false()および関数tru
e()のアドレスを、それぞれ関数ポインタの配列A
[0]およびA[1]に代入している。プログラム中の
L3における任意の実行経路は、3−SAT問題におけ
る真理値の割り当てに相当する。すなわち、もし3−S
AT問題に解が存在するならば、すべての節について少
なくとも一つはtrueとなるリテラルが存在し、プロ
グラムにおける対応する関数ポインタlij は関数t
rue()のアドレスを指し示す。したがって、対応す
る実行経路をたどると、L5において、関数ポインタc
は関数true()を指し示すことが分かる。また、3
−SAT問題に解が存在しないときは、3つのリテラル
すべてがfalseとなる節が少なくとも1つ存在す
る。そのとき、プログラムのL5において、関数ポイン
タcは関数false()を指し示し、true()を
指し示すような実行経路は存在しない。逆に、プログラ
ムのL5において関数ポインタcが関数true()を
指し示しでいるとき、与えられた3−SAT問題は実行
経路に対応する真理値の割り当てを持つ。すなわち、3
−SAT問題は解を持つ。(証明終わり)
Proof It is shown below that given an arbitrary 3-SAT problem, the problem can be reduced in polynomial time from the 3-SAT problem. 3-SAT problem is N
This proves that it is known to be P-complete. The proof will be specifically described below. This proof assumes that the analysis is performed assuming that all execution paths are feasible. This is an assumption that is usually made about parsing, "meet over all
Often called the "paths" assumption. Propositional variables v i
Suppose for (i = 1,2, ..., m) a 3-SAT problem is given which examines the satisfiability of the logical product of n clauses. Here, the clause means three literals l i1 ,
It is a logical sum of l i2 and l i3 (i = 1, ..., N). A literal is a certain k (1 ≦ k ≦ m),
v k or its logical negation ¬v k. Like this 3
When a SAT problem is given, construct a program including a function pointer as shown in FIG. The size of this program is obviously controlled by the polynomial order of propositional variables and formulas. Since it is assumed that all the execution paths of the if statement are executable, the conditional expression is omitted and "-" is omitted.
Is described. In this program, in L1,
Function pointer c and propositional variable v of the original 3-SAT problem
function pointer v i (i = 1 corresponding to the i,
2 ,. . . , M) is declared. Similarly, corresponding to the logical negation of propositional variable v i, a function pointer Neg_v i
Is declared. Furthermore, l ij (i = 1,
2 ,. . . , N, j = 1, 2, 3) is j of the i-th clause.
Corresponding to the th literal, k (1 ≤ k ≤
For m), v k or neg_v k . Then, in L2, the function false () and the function tru
The address of e () is the array A of function pointers.
Substituted in [0] and A [1]. An arbitrary execution path in L3 in the program corresponds to the truth value assignment in the 3-SAT problem. That is, if 3-S
If the AT problem has a solution, then for every clause there is at least one literal that is true, and the corresponding function pointer l ij in the program is the function t.
points to the address of rue (). Therefore, when the corresponding execution path is traced, at L5, the function pointer c
It can be seen that points to the function true (). Also, 3
-When there is no solution in the SAT problem, there is at least one clause in which all three literals are false. At that time, in L5 of the program, the function pointer c points to the function false (), and there is no execution path that points to true (). Conversely, when the function pointer c points to the function true () in L5 of the program, the given 3-SAT problem has a truth value assignment corresponding to the execution path. That is, 3
-The SAT problem has a solution. (End of proof)

【0053】上述したように、値を返す関数へのポイン
タ及び値を返す関数へのポインタの配列による難読化実
施形態では、その解析の困難さが証明されることが分か
る。より具体的には、関数ポインタの指し示すアドレス
を決定することが困難であることが証明された。これに
より、関数間解析などで関数ポインタを指し示すアドレ
スを決定しようとしたとき、正確に決定することは困難
になり、プログラムを難読化できることが分かる。
As described above, it can be seen that the obfuscation embodiment by the array of the pointer to the function returning the value and the array of the pointer to the function returning the value proves the difficulty of the analysis. More specifically, it has proven difficult to determine the address pointed to by the function pointer. As a result, it becomes difficult to accurately determine the address that points to the function pointer by inter-function analysis or the like, and the program can be obfuscated.

【0054】このように本実施形態によれば、元のプロ
グラムの仕様を変更することなしに、安価な構成で、呼
び出される関数の特定を困難することができ、結果とし
てプログラムの仕様やアルゴリズムの解析を困難にする
ことができる。また、構成によっては、解析の困難さを
証明することができることが本発明の大きな特徴であ
る。以上により、プログラムが機密データや機密アルゴ
リズムを持つとき、前記プログラムに対する不正アクセ
スを、安価な構成で防ぐことができるようになる。
As described above, according to the present embodiment, it is possible to make it difficult to specify the function to be called with an inexpensive configuration without changing the specifications of the original program. Analysis can be difficult. Further, it is a great feature of the present invention that the difficulty of analysis can be proved depending on the configuration. As described above, when a program has confidential data or a confidential algorithm, it is possible to prevent unauthorized access to the program with an inexpensive configuration.

【0055】[0055]

【発明の効果】以上述べたように本発明によれば、プロ
グラムが機密データや機密アルゴリズムを持つとき、前
記プログラムを、安価な構成で、関数間解析を困難にす
るように難読化する方法であって、構成によっては難読
化された前記プログラムの解析の困難さが証明されてい
るような難読化方法及び装置によって前記プログラムを
難読化し、前記プログラムへの不正アクセスを防ぐこと
ができるようになる。
As described above, according to the present invention, when a program has confidential data or a confidential algorithm, the program can be obfuscated with an inexpensive structure so as to make inter-function analysis difficult. Therefore, it becomes possible to obfuscate the program by an obfuscation method and device that prove the difficulty of analysis of the obfuscated program depending on the configuration and prevent unauthorized access to the program. .

【図面の簡単な説明】[Brief description of drawings]

【図1】本発明の実施形態を示す装置構成図である。FIG. 1 is a device configuration diagram showing an embodiment of the present invention.

【図2】難読化領域決定処理のフローチャートである。FIG. 2 is a flowchart of obfuscation area determination processing.

【図3】難読化処理のフローチャートである。FIG. 3 is a flowchart of obfuscation processing.

【図4】難読化領域決定処理の説明図である。FIG. 4 is an explanatory diagram of obfuscation area determination processing.

【図5】関数ポインタによる難読化実施形態の説明図で
ある。
FIG. 5 is an explanatory diagram of an obfuscation embodiment using a function pointer.

【図6】関数ポインタ及び関数ポインタの配列による難
読化実施形態の説明図である。
FIG. 6 is an illustration of an obfuscated embodiment with a function pointer and an array of function pointers.

【図7】関数ポインタ及び関数呼び出しをまとめたダミ
ー関数による難読化実施形態の説明図である。
FIG. 7 is an explanatory diagram of an obfuscation embodiment using a dummy function that summarizes a function pointer and a function call.

【図8】値を返す関数へのポインタ及び値を返す関数へ
のポインタの配列による難読化実施形態で、その解析の
困難さが証明されているものの説明図である。
FIG. 8 is an explanatory diagram of an obfuscated embodiment in which a pointer to a function that returns a value and an array of pointers to a function that returns a value proves difficulty in analysis.

【図9】関数ポインタのアドレスを決定する問題の証明
図である。
FIG. 9 is a proof diagram of the problem of determining the address of a function pointer.

【符号の説明】[Explanation of symbols]

110 難読化装置、111 入力部、112 中央処
理部、113 出力部、114 難読化領域決定部、1
15 難読化処理部。
110 obfuscation device, 111 input unit, 112 central processing unit, 113 output unit, 114 obfuscation region determination unit, 1
15 Obfuscation processing unit.

Claims (6)

【特許請求の範囲】[Claims] 【請求項1】 関数の記述が可能なプログラミング言語
によって記述されたプログラムのソースコードに対し
て、前記プログラムの仕様を変更しないように変換する
方法であって、関数へのポインタ変数を新たに複数個導
入し、前記関数ポインタ変数のいずれかに関数のアドレ
スを代入する命令文を複数個挿入し、前記プログラムに
おける関数の呼出しを、前記関数を直接呼出すのではな
く、前記関数ポインタ変数の値に応じて関数を呼出すよ
うに変換することを特徴とする難読化方法。
1. A method for converting a source code of a program written in a programming language capable of describing a function so as not to change the specifications of the program, wherein a plurality of pointer variables to the function are newly added. Introduce a plurality of instruction statements for substituting the address of the function into any of the function pointer variables, and call the function in the program to the value of the function pointer variable instead of directly calling the function. An obfuscation method characterized by converting to call a function accordingly.
【請求項2】 与えられたプログラムのソースコードに
対して、関数へのポインタ変数と、関数へのポインタの
配列変数と、を新たに複数個導入し、前記複数個の関数
ポインタ変数のいずれかあるいは前記複数個の関数ポイ
ンタ配列の要素のいずれかに、前記複数個の関数ポイン
タ変数のいずれかあるいは前記複数個の関数ポインタ配
列のいずれかあるいは関数のアドレスを代入し、前記関
数ポインタ変数あるいは前記関数ポインタ配列の要素に
より関数を呼び出すように変換することを特徴とする請
求項1記載の難読化方法。
2. A plurality of pointer variables to functions and array variables of pointers to functions are newly introduced to the source code of a given program, and any one of the plurality of function pointer variables is introduced. Alternatively, one of the plurality of function pointer arrays, any of the plurality of function pointer variables, or one of the plurality of function pointer arrays, or the address of a function is substituted, and the function pointer variable or the The obfuscation method according to claim 1, wherein conversion is performed so that a function is called by an element of a function pointer array.
【請求項3】 与えられたプログラムのソースコードに
対して、複数個の関数へのポインタ変数と、ダミー関数
Fと、を新たに導入し、前記関数Fの内部において、前
記プログラムにおける複数個の関数呼び出しを前記関数
ポインタ変数を介して実行できるようにし、前記プログ
ラムにおける前記関数呼び出しのそれぞれを関数Fを呼
出すように変換することを特徴とする請求項1記載の難
読化方法。
3. A pointer variable to a plurality of functions and a dummy function F are newly introduced to the source code of a given program, and a plurality of functions in the program are provided inside the function F. The obfuscation method according to claim 1, characterized in that a function call can be executed via the function pointer variable and each of the function calls in the program is converted to call a function F.
【請求項4】 与えられたプログラムのソースコードに
対して、ある値を返す関数へのポインタ変数と、ある値
を返す関数へのポインタの配列変数と、を新たに複数個
導入し、前記複数個の関数ポインタ変数のいずれかある
いは前記複数個の関数ポインタ配列の要素のいずれか
に、前記複数個の関数ポインタ変数のいずれかあるいは
前記複数個の関数ポインタ配列の要素のいずれかあるい
は関数のアドレスを代入し、前記関数ポインタ変数ある
いは前記関数ポインタ配列の要素により関数を呼び出す
ように変換する方法であって、その解析の困難さが証明
されていることを特徴とする請求項1あるいは2のいず
れかに記載の難読化方法。
4. A plurality of pointer variables to a function that returns a certain value and array variables of a pointer to a function that returns a certain value are newly introduced to the source code of a given program. Any of the function pointer variables or any of the plurality of function pointer array elements, any of the plurality of function pointer variables, any of the plurality of function pointer array elements, or the address of a function 3. A method of substituting a value into a function pointer variable or an element of the function pointer array and converting the function so that the function is called, and the difficulty of the analysis has been proved. Obfuscation method described in crab.
【請求項5】 関数の記述が可能なプログラミング言語
によって記述されたプログラムのソースコードを入力す
る入力手段と、難読化に関する処理全体の制御を行う制
御手段と、前記プログラムのソースコードを解析して難
読化の対象となる領域を決定する手段と、難読化に利用
される関数ポインタ変数や関数ポインタの配列変数やダ
ミー関数等を導入して前記関数ポインタ変数や前記関数
ポインタの配列変数や前記ダミー関数等を利用して関数
を呼出すように変換する難読化手段と、前記プログラム
を難読化して得られたプログラムのソースコードあるい
は実行形式プログラムを出力する手段と、を備えること
を特徴とする難読化装置。
5. An input means for inputting a source code of a program written in a programming language capable of describing a function, a control means for controlling the entire process relating to obfuscation, and analyzing the source code of the program. A means for determining an area to be obfuscated, and a function pointer variable used for obfuscation, an array variable of a function pointer, a dummy function, etc. are introduced to introduce the function pointer variable, the array variable of the function pointer, or the dummy. Obfuscation means for converting a function to be called by using a function or the like, and means for outputting a source code or an executable program of the program obtained by obfuscating the program apparatus.
【請求項6】 プログラムのソースコードを難読化する
プログラムを記録した記録媒体であって、前記プログラ
ムのソースコードを解析して難読化の対象となる領域を
決定する第1の処理と、難読化に利用される関数ポイン
タ変数や関数ポインタの配列変数やダミー関数等を導入
して前記関数ポインタ変数や前記関数ポインタの配列変
数や前記ダミー関数等を利用して関数を呼出すように変
換する第2の処理と、前記プログラムを難読化して得ら
れたプログラムのソースコードあるいは実行形式プログ
ラムを出力する第3の処理と、を含むコンピュータが実
行可能な難読化プログラムが記録されていることを特徴
とする難読化処理用記録媒体。
6. A recording medium in which a program for obfuscating the source code of the program is recorded, the first processing of analyzing the source code of the program to determine an area to be obfuscated, and the obfuscation. A function pointer variable, an array variable of a function pointer, a dummy function, etc. used for the above are introduced and conversion is performed so as to call a function using the function pointer variable, the array variable of the function pointer, the dummy function, etc. And a third process for outputting a source code or an executable program of the program obtained by obfuscating the program, and a computer-executable obfuscated program is recorded. Recording medium for obfuscation processing.
JP2002183644A 2002-05-18 2002-05-18 Program obfuscation method and device Pending JP2003337629A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002183644A JP2003337629A (en) 2002-05-18 2002-05-18 Program obfuscation method and device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002183644A JP2003337629A (en) 2002-05-18 2002-05-18 Program obfuscation method and device

Publications (1)

Publication Number Publication Date
JP2003337629A true JP2003337629A (en) 2003-11-28

Family

ID=29707204

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002183644A Pending JP2003337629A (en) 2002-05-18 2002-05-18 Program obfuscation method and device

Country Status (1)

Country Link
JP (1) JP2003337629A (en)

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006079347A (en) * 2004-09-09 2006-03-23 Kddi Corp Coding method and program therefor
JP2006235688A (en) * 2005-02-22 2006-09-07 Kddi Corp Program obfuscation device and method and program thereof
JP2008077400A (en) * 2006-09-21 2008-04-03 Kddi Corp Program-obfuscating method and program
JP2008090668A (en) * 2006-10-03 2008-04-17 Kddi Corp Program obfuscation method and program
JP2008523480A (en) * 2004-12-06 2008-07-03 ギーゼッケ ウント デフリエント ゲーエムベーハー Generate load format program code and provide executable program code
JP2008269398A (en) * 2007-04-23 2008-11-06 Fuji Xerox Co Ltd Program obfuscation device and program
JP2009146199A (en) * 2007-12-14 2009-07-02 Sony Corp Information processing device, disc, information processing method, and program
JP2010517119A (en) * 2007-01-18 2010-05-20 パナソニック株式会社 Obfuscation support device
JP2010262334A (en) * 2009-04-30 2010-11-18 Kddi Corp Device, and method for obfuscating program, and program
US7930743B2 (en) 2006-09-01 2011-04-19 Fuji Xerox Co., Ltd. Information processing system, information processing method, information processing program, computer readable medium and computer data signal
JP2011521366A (en) * 2008-05-23 2011-07-21 イルデト カナダ コーポレーション System and method for generating a white-box implementation of a software application
JP2012512443A (en) * 2008-08-21 2012-05-31 トムソン ライセンシング Method and apparatus for code obfuscation
KR101157996B1 (en) * 2010-07-12 2012-06-25 엔에이치엔(주) Method, system and computer readable recording medium for desultory change to protect source code of javascript
JP2012234248A (en) * 2011-04-28 2012-11-29 Kddi Corp Software obfuscation device, software obfuscation method, and program
US8327452B2 (en) 2009-02-20 2012-12-04 Fuji Xerox Co., Ltd. Program obfuscation apparatus, program obfuscation method and computer readable medium
JP2013507670A (en) * 2009-10-08 2013-03-04 イルデト カナダ コーポレーション System and method for aggressive automatic correction in a dynamic function call system
KR101429229B1 (en) * 2012-12-27 2014-08-12 한라대학교산학협력단 Method for Java Obfuscation Using Statements Merging
KR20150145629A (en) * 2014-06-20 2015-12-30 주식회사 큐브피아 Protecting method of binary file and executing method of protected binary file
KR20190080299A (en) * 2017-12-28 2019-07-08 현대자동차주식회사 Method of providing secure in-vehicle network communication and appratus for implementing the same

Cited By (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4667800B2 (en) * 2004-09-09 2011-04-13 Kddi株式会社 Encoding method and program thereof
JP2006079347A (en) * 2004-09-09 2006-03-23 Kddi Corp Coding method and program therefor
JP2013041598A (en) * 2004-12-06 2013-02-28 Giesecke & Devrient Gmbh Program code generation method, program development system, portable data carrier, and program
US8332834B2 (en) 2004-12-06 2012-12-11 Giesecke & Devrient Gmbh Generation of a program code in a load format and provision of an executable program code
JP2008523480A (en) * 2004-12-06 2008-07-03 ギーゼッケ ウント デフリエント ゲーエムベーハー Generate load format program code and provide executable program code
JP2006235688A (en) * 2005-02-22 2006-09-07 Kddi Corp Program obfuscation device and method and program thereof
JP4675642B2 (en) * 2005-02-22 2011-04-27 Kddi株式会社 Program obfuscation apparatus, method and program
EP2420950A1 (en) 2006-09-01 2012-02-22 Fuji Xerox Co., Ltd. Information processing system, information processing method, information processing program, computer readable medium and computer data signal
US7930743B2 (en) 2006-09-01 2011-04-19 Fuji Xerox Co., Ltd. Information processing system, information processing method, information processing program, computer readable medium and computer data signal
EP2420949A1 (en) 2006-09-01 2012-02-22 Fuji Xerox Co., Ltd. Information processing system, information processing method, information processing program, computer readable medium and computer data signal
JP2008077400A (en) * 2006-09-21 2008-04-03 Kddi Corp Program-obfuscating method and program
JP2008090668A (en) * 2006-10-03 2008-04-17 Kddi Corp Program obfuscation method and program
JP2010517119A (en) * 2007-01-18 2010-05-20 パナソニック株式会社 Obfuscation support device
US9589115B2 (en) 2007-01-18 2017-03-07 Panasonic Intellectual Property Management Co., Ltd. Obfuscation assisting apparatus
JP2008269398A (en) * 2007-04-23 2008-11-06 Fuji Xerox Co Ltd Program obfuscation device and program
JP2009146199A (en) * 2007-12-14 2009-07-02 Sony Corp Information processing device, disc, information processing method, and program
US8270275B2 (en) 2007-12-14 2012-09-18 Sony Corporation Information processing device, disc, information processing method, and program
JP2011521366A (en) * 2008-05-23 2011-07-21 イルデト カナダ コーポレーション System and method for generating a white-box implementation of a software application
JP2012512443A (en) * 2008-08-21 2012-05-31 トムソン ライセンシング Method and apparatus for code obfuscation
US8327452B2 (en) 2009-02-20 2012-12-04 Fuji Xerox Co., Ltd. Program obfuscation apparatus, program obfuscation method and computer readable medium
JP2010262334A (en) * 2009-04-30 2010-11-18 Kddi Corp Device, and method for obfuscating program, and program
JP2013507670A (en) * 2009-10-08 2013-03-04 イルデト カナダ コーポレーション System and method for aggressive automatic correction in a dynamic function call system
KR101157996B1 (en) * 2010-07-12 2012-06-25 엔에이치엔(주) Method, system and computer readable recording medium for desultory change to protect source code of javascript
JP2012234248A (en) * 2011-04-28 2012-11-29 Kddi Corp Software obfuscation device, software obfuscation method, and program
KR101429229B1 (en) * 2012-12-27 2014-08-12 한라대학교산학협력단 Method for Java Obfuscation Using Statements Merging
KR20150145629A (en) * 2014-06-20 2015-12-30 주식회사 큐브피아 Protecting method of binary file and executing method of protected binary file
KR101641769B1 (en) * 2014-06-20 2016-07-29 주식회사 큐브피아 Protecting method of binary file and executing method of protected binary file
KR20190080299A (en) * 2017-12-28 2019-07-08 현대자동차주식회사 Method of providing secure in-vehicle network communication and appratus for implementing the same
KR102569893B1 (en) * 2017-12-28 2023-08-23 현대자동차주식회사 Method of providing secure in-vehicle network communication and appratus for implementing the same

Similar Documents

Publication Publication Date Title
Barthe et al. Secure compilation of side-channel countermeasures: the case of cryptographic “constant-time”
US10838758B2 (en) System and method for self-protecting data
Almeida et al. Formal verification of side-channel countermeasures using self-composition
JP2003337629A (en) Program obfuscation method and device
Behera et al. Different obfuscation techniques for code protection
US7254586B2 (en) Secure and opaque type library providing secure data protection of variables
EP3201819B1 (en) Automated verification of a software system
Rubinov et al. Automated partitioning of android applications for trusted execution environments
US9336370B2 (en) Method and apparatus for dynamic obfuscation of static data
US8286251B2 (en) Obfuscating computer program code
Tiwari et al. Execution leases: A hardware-supported mechanism for enforcing strong non-interference
Songhori et al. ARM2GC: Succinct garbled processor for secure computation
JP2016525760A (en) Identify irrelevant code
Deng et al. Securing a compiler transformation
Drape Obfuscation of Abstract Data− Types
Shivakumar et al. Typing high-speed cryptography against spectre v1
Arasteh et al. Forensic memory analysis: From stack and code to execution history
Hamadouche et al. Virus in a smart card: Myth or reality?
JP2004192068A (en) Self-rewriting process addition program, self-rewriting process addition device and self-rewriting process addition method
Mantel et al. RiCaSi: rigorous cache side channel mitigation via selective circuit compilation
Lee et al. Classification and analysis of security techniques for the user terminal area in the internet banking service
Gonzalvez et al. A case against indirect jumps for secure programs
Sefton et al. GARUDA: Designing energy-efficient hardware monitors from high-level policies for secure information flow
CN113138797B (en) Intel SGX-oriented program automation transplanting system
Protsenko et al. Protecting android apps against reverse engineering by the use of the native code