[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

KR101628923B1 - Code transformation method and code transformation apparatus - Google Patents

Code transformation method and code transformation apparatus Download PDF

Info

Publication number
KR101628923B1
KR101628923B1 KR1020140188492A KR20140188492A KR101628923B1 KR 101628923 B1 KR101628923 B1 KR 101628923B1 KR 1020140188492 A KR1020140188492 A KR 1020140188492A KR 20140188492 A KR20140188492 A KR 20140188492A KR 101628923 B1 KR101628923 B1 KR 101628923B1
Authority
KR
South Korea
Prior art keywords
function
flattening
code conversion
software
integrity
Prior art date
Application number
KR1020140188492A
Other languages
Korean (ko)
Inventor
박문찬
이동훈
석재혁
이세영
Original Assignee
고려대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 고려대학교 산학협력단 filed Critical 고려대학교 산학협력단
Priority to KR1020140188492A priority Critical patent/KR101628923B1/en
Priority to PCT/KR2015/009483 priority patent/WO2016104918A1/en
Application granted granted Critical
Publication of KR101628923B1 publication Critical patent/KR101628923B1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code

Landscapes

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

Abstract

The present invention relates to a code conversion method comprising: (b) a protection function selection step of selecting a function to be protected, i.e., the step of selecting a flattening function which is a target whose control flow is flattened, and an integrity function which is a target whose integrity needs to be ensured; and (c) a label generation step of generating labels to be used for flattening of the flattening function, i.e., the step of generating branch functions to be used for respective blocks in the flattening function by using the integrity function, and also relates to a code conversion apparatus. Using the present invention, software having tamper-resistance and a tamper-detection function can be generated by utilizing an intermediate representation.

Description

코드 변환 방법 및 코드 변환 장치{CODE TRANSFORMATION METHOD AND CODE TRANSFORMATION APPARATUS}{CODE TRANSFORMATION METHOD AND CODE TRANSFORMATION APPARATUS}

본 발명은 코드 변환 방법 및 코드 변환 장치에 관한 것으로서, 구체적으로는 중간 언어를 이용하여 변조 저항성 및 변조 탐지 기능을 갖는 소프트웨어를 생성하기 위한 코드 변환 방법 및 코드 변환 장치에 관한 것이다. The present invention relates to a code conversion method and a code conversion apparatus, and more particularly, to a code conversion method and a code conversion apparatus for generating software having a modulation resistance and a modulation detection function using an intermediate language.

소프트웨어 보호 분야는 악의적인 목적의 소프트웨어 분석(예를 들어 소프트웨어 중요 로직 탈취)이나 소프트웨어 변조(예를 들어 소프트웨어 라이센스 체크 루틴 우회) 등으로부터 소프트웨어를 보호하는 방법을 연구하는 분야이다. 그 중에서 소프트웨어 변조 탐지(tamper-detection)는 소프트웨어가 변조되었을 때 변조를 탐지하여 대응하는 방법에 관한 것이고, 변조 저항성(tamper-resistance)을 갖는 소프트웨어는 소프트웨어의 변조를 어렵게 하여 선제적으로 변조를 차단하는 방법에 관한 것이다. The area of software protection is the study of how to protect software from malicious software analysis (for example, software critical logic hijacking) or software tampering (for example, bypassing software license check routines). Among them, tamper-detection is about detecting and responding to the modulation when the software is modulated, and software with tamper-resistance makes it difficult to modulate the software, .

소프트웨어 보호 기법은 그 기반에 따라 분류될 수 있다. 하드웨어 기반의 보호 기법은 외부에서 접근할 수 없는 하드웨어의 안정성에 기반하여 소프트웨어를 보호하는 기법이다. 소프트웨어 기반의 보호 기법은 하드웨어의 도움 없이 소프트웨어 자체적으로 분석이나 변조 등에 대응하는 기법이다. 하드웨어 기반의 보호 기법이 일반적으로 더 안전하다고 알려져 있지만 추가적인 하드웨어가 필요하여 추가 비용이 발생하고 하드웨어의 장착에 의존하여 여러 소프트웨어 환경에서의 유연한 적용이 어려운 점이 있다. 이와 같이, 소프트웨어 기반의 보호 기법이 하드웨어 기반의 보호 기법에 비해서 다양한 장점이 존재한다. Software protection techniques can be categorized according to their bases. Hardware-based protection is a technique for protecting software based on the stability of hardware that can not be accessed from the outside. Software-based protection techniques are techniques that respond to software analysis or modulation without hardware assistance. Although hardware-based protection schemes are generally known to be more secure, they require additional hardware, which adds to the cost, and is dependent on the hardware installed, making it difficult to adapt to multiple software environments. Thus, software-based protection schemes have a variety of advantages over hardware-based protection schemes.

소프트웨어 기반의 보호 기법은 소프트웨어에 변조 저항성 및/또는 탐지 기능을 추가하기 위해 코드 변환 기법을 이용한다. 코드 변환은 소스코드(예를 들어 C, Fortran 등) 레벨에서 이루어지거나 바이너리 코드(예를 들어 기계어) 레벨에서 이루어진다. 하지만 소스코드 레벨 및 바이너리 레벨의 코드 변환 기법 각각은 다양한 한계점을 가지고 있다. Software-based protection schemes use transcoding techniques to add modulation resistance and / or detection capabilities to software. Code conversion occurs at the level of the source code (for example, C, Fortran, etc.) or at the level of binary code (for example, machine language). However, each of the source code level and binary level code conversion techniques has various limitations.

소스코드 레벨의 코드 변환 기법은 소스코드 레벨에서 코드 변환이 이루어지기에 컴파일 과정에서의 최적화로 코드 변환 효과를 보존하기 힘든 한계가 존재한다. 바이너리 레벨의 코드 변환 기법은 기계어 해석과 기계어 자체의 수정이 어려워 코드 변환 자체가 어렵고 이에 따라 소프트웨어의 정상적인 기능을 유지하면서 저항성 및 탐지 기능을 추가하는 것이 용이치 않다. 또한 소스코드 레벨의 변환 기법은 소스코드를 작성한 언어(예를 들어 C, Fortran 등)에 의존적이고 바이너리 레벨의 코드 변환 기법은 기계어(예를 들어 x86, ARM 등)에 의존적이기에 각 언어나 기계어마다 동일한 코드 변환 기법을 적용하는 것이 용이치 않다. There is a limitation in preserving the effect of code conversion due to optimization in the compilation process because the source code level code conversion technique is performed at the source code level. The binary-level code conversion technique is difficult to modify the machine language itself and the machine language itself, so it is difficult to add the resistance and detection functions while maintaining the normal function of the software. Also, source code level conversion techniques are dependent on the source language (eg C, Fortran, etc.) and binary level code conversion techniques are dependent on machine language (eg x86, ARM, etc.) It is not practical to apply the same code conversion technique.

따라서, 소프트웨어 기반의 보호 기법을 적용하여 비용 감소 및 유연성을 제공하면서 소프트웨어 기반의 보호 기법의 기존에 알려져 있는 여러 문제점을 해소할 수 있도록 하는 코드 변환 방법 및 코드 변환 장치가 필요하다. Therefore, there is a need for a code conversion method and a code conversion device that can solve various known problems of software-based protection techniques while providing cost reduction and flexibility by applying software-based protection techniques.

본 발명은 상술한 문제점을 해결하기 위해서 안출한 것으로서, 소스코드의 언어 및 기계어의 언어 유형에 상관없이 소프트웨어 기반으로 본래 기능에 영향을 미치지 않고 용이하게 변조 탐지 및 변조 저항의 기능을 추가할 수 있는, 코드 변환 방법 및 코드 변환 장치를 제공하는 데 그 목적이 있다. The present invention has been made in order to solve the above-mentioned problems, and it is an object of the present invention to provide an apparatus and a method for adding a function of a modulation detection and a modulation resistance without affecting a function originally based on software regardless of a language of a source code and a language type of a machine language , A code conversion method, and a code conversion device.

상기와 같은 목적을 달성하기 위한 코드 변환 방법은 (b) 보호될 함수를 선택하는 단계로서, 제어 흐름을 평탄화할 대상인 평탄화 함수 및 무결성이 보장되어야 할 대상인 무결성 함수를 선택하는, 보호 함수 선택 단계 및 (c) 평탄화 함수에 대한 평탄화에 이용될 레이블들을 생성하는 단계로서, 무결성 함수를 이용하여 평탄화 함수 내의 블록들 각각에서 이용될 분기 함수 각각을 생성하는, 레이블 생성 단계를 포함한다. According to another aspect of the present invention, there is provided a code conversion method for selecting a function to be protected, the method comprising the steps of: selecting a planarization function to be flattened by a control flow and an integrity function, (c) generating labels to be used for planarization for the flattening function, wherein the integrity function is used to generate each of the branching functions to be used in each of the blocks in the flattening function.

또한 상기와 같은 목적을 달성하기 위한 코드 변환 장치는 보호될 함수를 선택하는 선택부로서, 제어 흐름을 평탄화할 대상인 평탄화 함수 및 무결성이 보장되어야 할 대상인 무결성 함수를 선택하는, 선택부 및 평탄화 함수에 대한 평탄화에 이용될 레이블들을 생성하는 레이블 생성부로서, 무결성 함수를 이용하여 평탄화 함수 내의 블록들 각각에서 이용될 분기 함수 각각을 생성하는, 레이블 생성부를 포함한다. In order to achieve the above object, a code conversion apparatus includes a selecting unit for selecting a function to be protected, a selecting unit for selecting a smoothing function to be smoothed and a smoothing function, And a label generation unit for generating labels to be used in each of the blocks in the flattening function by using an integrity function.

상기와 같은 본 발명에 따른 코드 변환 방법 및 코드 변환 장치는 소스코드의 언어 및 기계어의 언어 유형에 상관없이 소프트웨어 기반으로 본래 기능에 영향을 미치지 않고 용이하게 변조 탐지 및 변조 저항의 기능을 추가할 수 있는 효과가 있다. The code conversion method and the code conversion device according to the present invention can easily add the functions of the modulation detection and modulation resistance without affecting the original function of the software based on the language of the source code and the language type of the machine language There is an effect.

도 1은 코드 변환 장치의 예시적인 하드웨어 블록도를 도시한 도면이다.
도 2는 코드 변환을 위한 예시적인 제어 흐름을 도시한 도면이다.
도 3은 코드 변환 장치의 예시적인 기능 블록도를 도시한 도면이다.
도 4는 평탄화 대상인 예시적인 평탄화 함수에 대한 CFG를 나타내는 도면이다.
도 5는 도 4의 CFG에 대한 평탄화 처리 적용후의 평탄화된 CFG를 나타낸다.
1 is a diagram showing an exemplary hardware block diagram of a code conversion apparatus.
2 is a diagram illustrating an exemplary control flow for code conversion.
3 is a diagram showing an exemplary functional block diagram of a code conversion apparatus.
4 is a diagram showing a CFG for an exemplary planarization function to be planarized.
5 shows a planarized CFG after the application of the planarization treatment to the CFG of FIG.

상술한 목적, 특징 및 장점은 첨부된 도면을 참조하여 상세하게 후술 되어 있는 상세한 설명을 통하여 더욱 명확해 질 것이며, 그에 따라 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 본 발명의 기술적 사상을 용이하게 실시할 수 있을 것이다. 또한, 본 발명을 설명함에 있어서 본 발명과 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에 그 상세한 설명을 생략하기로 한다. 이하, 첨부된 도면을 참조하여 본 발명에 따른 바람직한 실시 예를 상세히 설명하기로 한다.
The above and other objects, features and advantages of the present invention will become more apparent from the following detailed description of the present invention when taken in conjunction with the accompanying drawings, in which: It can be easily carried out. In the following description, well-known functions or constructions are not described in detail since they would obscure the invention in unnecessary detail. Hereinafter, preferred embodiments of the present invention will be described in detail with reference to the accompanying drawings.

도 1은 코드 변환 장치(100)의 예시적인 하드웨어 블록도를 도시한 도면이다. 1 is a diagram showing an exemplary hardware block diagram of the code conversion apparatus 100. As shown in FIG.

도 1에 따르면 코드 변환 장치(100)는 입력 인터페이스(101), 출력 인터페이스(103), 메모리(105), 저장 매체(107), 시스템 버스/제어 버스(111) 및 프로세서(113)를 포함하고 통신 인터페이스(109)를 더 포함할 수 있다. 특정 하드웨어 블록은 코드 변환 장치(100)의 용도나 변형예에 따라 생략될 수 있다. 코드 변환 장치(100)는 변조 저항성 및/또는 변조 탐지를 가능하도록 소스코드(소프트웨어)를 변환하는 장치이다. 코드 변환 장치(100)는 예를 들어 프로그래머 또는 프로그램의 배포자에 의해서 이용되는 개인용 컴퓨터이거나 노트북이거나 프로그램의 변환 기능을 인터넷망을 통해서 제공가능한 서버 등일 수 있다. 1, the code conversion apparatus 100 includes an input interface 101, an output interface 103, a memory 105, a storage medium 107, a system bus / control bus 111 and a processor 113 And may further include a communication interface 109. The specific hardware block may be omitted depending on the use or modification of the code conversion apparatus 100. The transcoder 100 is a device that converts source code (software) to enable modulation resistance and / or modulation detection. The code conversion device 100 may be, for example, a personal computer used by a programmer or a distributor of a program, a notebook computer, or a server that can provide a conversion function of a program through the Internet.

코드 변환 장치(100)의 각 하드웨어 블록들을 간단히 살펴보면, 입력 인터페이스(101)는 사용자 입력을 수신하기 위한 인터페이스이다. 입력 인터페이스(101)는 마우스, 키보드 및/또는 터치 패널 등을 구비하고 코드 변환을 수행하고자 하는 사용자 입력을 수신한다. 수신된 입력은 시스템 버스/제어 버스(111)를 통해 입력 데이터로 프로세서(113)에 전달된다. Each hardware block of the code conversion apparatus 100 will be briefly described. The input interface 101 is an interface for receiving user input. The input interface 101 includes a mouse, a keyboard and / or a touch panel, and receives a user input for performing code conversion. The received input is passed to the processor 113 as input data via the system bus / control bus 111.

출력 인터페이스(103)는 LCD 모듈, LED 모듈 및/또는 스피커 등을 구비하여 코드 변환 장치(100)에서 수행된 결과나 중간 결과를 출력하기 위한 인터페이스이다. 출력 인터페이스(103)는 예를 들어 코드 변환된 소프트웨어에 대한 결과를 알 수 있도록 한다. The output interface 103 includes an LCD module, an LED module, and / or a speaker, and is an interface for outputting a result or an intermediate result performed by the code conversion device 100. The output interface 103 enables to know the result for the code-converted software, for example.

메모리(105)는 휘발성 메모리를 포함한다. 메모리(105)는 각종 데이터와 프로그램을 임시로 저장할 수 있다. 예를 들어, 메모리(105)는 프로세서(113)에서 수행되는 코드 변환 프로그램이나 코드 변환 프로그램의 입력인 소프트웨어(또는 소스코드, 이하에서는 '소프트웨어'와 '소스코드'란 용어를 혼용해서 사용함.)를 임시로 저장한다.The memory 105 includes a volatile memory. The memory 105 may temporarily store various data and programs. For example, the memory 105 stores a code conversion program executed by the processor 113 or a software (or a source code, hereinafter, the terms "software" and "source code" are used in combination) As shown in FIG.

저장 매체(107)는 적어도 프로세서(113)에서 수행되는 코드 변환 프로그램과 코드 변환 프로그램의 입력 대상인 소프트웨어들을 저장한다. 소프트웨어는 소스코드 레벨로 구성된다. 예를 들어 소프트웨어는 C, C++, 포트란(Fortran), Java 등과 같은 프로그래밍 언어로 작성된다. The storage medium 107 stores at least a code conversion program to be executed by the processor 113 and software which is an input target of the code conversion program. The software consists of source code levels. For example, the software is written in a programming language such as C, C ++, Fortran, or Java.

코드 변환 프로그램은 입력 소프트웨어를 중간 언어(Intermediate Representation, 이하 'IR'이라고도 지칭함.)로 변환하여 중간 언어 상에서 입력 소프트웨어가 변조 저항성 및/또는 변조 탐지성을 가지도록 변환한다. 지정된 기계어로 변환된 소프트웨어는 출력 인터페이스(103)로 출력되거나 저장 매체(107)에 저장되거나 통신 인터페이스(109)를 통해 출력될 수 있다. The transcoding program converts the input software into an Intermediate Representation (IR) to convert the input software to modulation resistance and / or modulation detection on the intermediate language. The software converted into the designated machine language can be output to the output interface 103, stored in the storage medium 107, or output via the communication interface 109.

프로세서(113)는 명령어(instruction)을 실행할 수 있는 하나 이상의 실행 유닛(execution unit)을 포함하여 저장 매체(107)에 저장된 프로그램의 코드를 실행한다. 프로세서(113)는 소위 CPU, MPU 등으로 지칭될 수 있다. The processor 113 includes one or more execution units capable of executing instructions to execute the code of a program stored in the storage medium 107. [ The processor 113 may be referred to as a so-called CPU, MPU, or the like.

특히, 프로세서(113)는 저장 매체(107)에 저장된 코드 변환 프로그램을 메모리(105) 등에 로딩하고 코드 변환 프로그램을 수행하여 입력 소프트웨어를 변조 저항성 및/또는 변조 탐지성을 가지도록 변환한다. 프로세서(113)는 바람직하게는 입력 소프트웨어를 중간 언어로 변환하고 중간 언어로 변환된 입력 소프트웨어에 대해서 변조 저항성 및/또는 변조 탐지성을 가지도록 하는 코드를 추가하거나 입력 소프트웨어를 지정된 기계어로 변환한다. In particular, the processor 113 loads the code conversion program stored in the storage medium 107 into the memory 105 or the like, and performs a code conversion program to convert the input software into modulation resistance and / or modulation detection. Processor 113 preferably adds code that translates the input software into an intermediate language and has modulation resistance and / or modulation detectability for input software that has been translated into an intermediate language or translates the input software into a designated machine language.

프로세서(113), 특히 코드 변환 프로그램,에 대해서는 도 2 및 도 3을 통해서 상세히 살펴보도록 한다. The processor 113, particularly a code conversion program, will be described in detail with reference to FIG. 2 and FIG.

시스템 버스/제어 버스(111)는 하드웨어 블록들 사이의 각종 아날로그/디지털의 데이터를 송수신할 수 있는 버스이다. 시스템 버스/제어 버스(111)는 병렬 버스이거나 시리얼 버스이거나 특정 하드웨어 블록을 위한 전용 버스일 수 있다. 시스템 버스/제어 버스(111)는 버스의 타입에 따라 아날로그나 디지털의 데이터를 송수신할 수 있다. The system bus / control bus 111 is a bus capable of transmitting / receiving various analog / digital data between hardware blocks. The system bus / control bus 111 may be a parallel bus, a serial bus, or a dedicated bus for a specific hardware block. The system bus / control bus 111 can transmit and receive analog or digital data depending on the type of the bus.

더 포함가능한 통신 인터페이스(109)는 인터넷망에 연결되어 네트워크 패킷을 송수신하기 위한 인터페이스이다. 통신 인터페이스(109)는 예를 들어 와이파이나 유선 랜에 연결되기 위한 파이(PHY) 칩 등을 포함한다.
The communication interface 109, which can be further included, is an interface for connecting and receiving network packets connected to the Internet network. The communication interface 109 includes, for example, a PHY chip or the like for connecting to a wired or wired LAN.

도 2는 코드 변환을 위한 예시적인 제어 흐름을 도시한 도면이다. 도 2의 코드 변환 제어 흐름은 예를 들어 도 1의 코드 변환 장치(100)의 하드웨어 블록도 상에서 수행된다. 도 2의 코드 변환 제어 흐름은 코드 변환 장치(100)의 프로세서(113)에 의해서 수행되고 바람직하게는 코드 변환 프로그램에 의한 프로세서(113)의 명령어 수행으로 이루어진다.2 is a diagram illustrating an exemplary control flow for code conversion. The code conversion control flow of FIG. 2 is performed, for example, on a hardware block diagram of the code conversion apparatus 100 of FIG. The code conversion control flow of FIG. 2 is performed by the processor 113 of the code conversion apparatus 100 and preferably by executing instructions of the processor 113 by a code conversion program.

도 2의 코드 변환 제어 흐름은 코드 변환 장치(100)의 프로세서(113)가 저장 매체(107)에 저장된 코드 변환 프로그램을 수행 시작함에 따라 시작(S100)하고 코드 변환 프로그램이 수행 종료됨에 따라 종료(S200)한다. 2 starts as the processor 113 of the code conversion apparatus 100 starts executing the code conversion program stored in the storage medium 107 (S100) and terminates the process S200).

먼저 코드 변환 장치(100)(프로세서(113))는 입력 인터페이스(101)(또는 통신 인터페이스(109))를 통해 사용자가 변환할 소프트웨어에 대한 선택을 수신(S101)한다. 소프트웨어에 대한 선택 수신으로 코드 변환 장치(100)는 저장 매체(107)에서 저장된 또는 통신 인터페이스(109)를 통해 수신된 소프트웨어를 메모리(105) 등에 로딩한다. First, the code conversion device 100 (the processor 113) receives (S101) a selection of software to be converted by the user through the input interface 101 (or the communication interface 109). Upon receiving the selection for the software, the code conversion apparatus 100 loads the software stored in the storage medium 107 or received via the communication interface 109 into the memory 105 or the like.

이후, 코드 변환 장치(100)는 로딩된 소스코드 레벨의 소프트웨어를 중간 언어의 표현으로 변환(S103)한다. 중간 언어는 예를 들어 알려져 있는 LLVM(Low Level Virtual Machine) 컴파일러 플랫폼에서 이용되는 명령어일 수 있다. LLVM의 중간 언어는 소스 레벨의 언어의 종류에 상관없는 독립적인 언어이고 또한 기계어에 의존되지 않는 언어이다. LLVM의 중간 언어는 기계어에 독립적인 레이블(Label)을 지원하고 레이블을 통해 다양한 수행 경로를 표현할 수 있다. Then, the code conversion apparatus 100 converts the software of the loaded source code level into the representation of the intermediate language (S103). The intermediate language may be, for example, a command used in a known Low Level Virtual Machine (LLVM) compiler platform. The intermediate language of LLVM is an independent language that is independent of the language of the source level and is also a machine language independent language. The intermediate language of LLVM supports machine-independent labels and can represent various execution paths through labels.

또한, 중간 언어로 변환된 소프트웨어에 기초한 데이터는 코드 변환 장치(100)에 의해서 출력 인터페이스(103)로 출력될 수 있다. 예를 들어 코드 변환 장치(100)는 변환된 소프트웨어에 포함된 함수 리스트를 출력 인터페이스(103)를 통해 출력한다. In addition, data based on the software converted into the intermediate language can be output to the output interface 103 by the code conversion device 100. For example, the code conversion apparatus 100 outputs the function list included in the converted software through the output interface 103. [

사용자는 출력된 함수 리스트에서 보호될 필요가 있는 함수의 선택을 나타내는 입력을 입력 인터페이스(101)를 통해 제공하고 코드 변환 장치(100)는 선택 입력의 수신에 따라 입력에 대응하는 보호될 함수를 선택(S105)한다. The user provides an input indicating the selection of a function that needs to be protected in the output function list through the input interface 101 and the code conversion apparatus 100 selects the function to be protected corresponding to the input upon receiving the selection input (S105).

코드 변환 장치(100)는 보호될 필요가 있는 함수의 선택으로 특정 유형의 함수를 함수 리스트에서 선택한다. 구체적으로 코드 변환 장치(100)는 코드 분석을 어렵게 하기 위해 제어 흐름을 평탄화(flattening)할 대상인 함수(이하 '평탄화 함수' 또는 'FF'(Flattening Function)라고도 함)를 선택하고 무결성(Integrity)이 보장되어야 하는 대상인 함수(이하 '무결성 함수' 또는 'IF'(Integrity Function)라고도 함)를 선택한다. 나아가 코드 변환 장치(100)는 암호화되어야 하는 대상인 함수(이하 '암호화 함수' 또는 EF(Encryption Function)라고도 함)를 선택한다. 하나 이상의 함수의 선택은 사용자 입력에 의해서 결정될 수 있다. 각 유형의 함수는 하나 이상일 수 있다. 또한 평탄화 함수는 무결성 함수 및 암호화 함수에 먼저 수행되어야 하는 함수로서 코드 변환 장치(100)가 설정하거나 출력 인터페이스(103)를 통해 가이드한다. The transcoder 100 selects a particular type of function from the function list as a function selection that needs to be protected. Specifically, the code conversion apparatus 100 selects a function (hereinafter also referred to as a 'flattening function' or a 'flattening function') to which the control flow is to be flattened in order to make code analysis difficult, (Hereinafter also referred to as an 'integrity function' or 'IF' (Integrity Function)) to be guaranteed. Further, the code conversion apparatus 100 selects a function to be encrypted (hereinafter also referred to as an 'encryption function' or an EF (Encryption Function)). The selection of one or more functions may be determined by user input. There can be more than one function of each type. The flattening function is set by the code conversion apparatus 100 or guided through the output interface 103 as a function to be performed first in the integrity function and the encryption function.

평탄화 함수는 함수의 제어 흐름(Control Flow)을 평탄화하여 분석을 난해화 하기 위한 대상 함수로서 평탄화 함수에 대한 평탄화 작업 과정에서 무결성 함수의 무결성 확인 및 암호화 함수를 암호화할 동적 키 생성을 위한 각종 정보(데이터)가 생성된다. 무결성 함수는 무결성이 보장되어야 하는 대상 함수로서 반드시 숨길 필요는 없으나 변조가 되면 안되는 함수를 나타낸다. 예를 들어 무결성 함수는 안티디버깅 루틴(Routine)이나 라이센스 체크 루틴 등일 수 있다. 암호화 함수는 암호화로 보호되어야 하는 함수로서 분석 자체를 막도록 숨겨져야 하는 함수가 지정될 수 있다. 예를 들어 암호화 함수는 소프트웨어의 중요 로직을 포함하여 외부로 노출되면 치명적인 함수 등일 수 있다. The smoothing function is a target function for smoothing the analysis by flattening the control flow of the function. In the smoothing process of the smoothing function, various information for the integrity check of the integrity function and the dynamic key generation for encrypting the encryption function Data) is generated. An integrity function is a target function whose integrity must be guaranteed. It represents a function that is not necessarily hidden, but should not be modulated. For example, an integrity function may be an anti-debug routine or a license check routine. A cryptographic function is a function that must be protected by encryption, and a function that should be hidden to prevent analysis itself can be specified. For example, an encryption function can be a fatal function, etc., when exposed to the outside, including critical software logic.

본 발명에서 주목해야 하는 점은, 평탄화 함수에 대한 각종 평탄화 처리 과정에서 무결성 함수에 대한 무결성 확인이 가능하도록 하고 나아가 동적 키 생성이 가능하도록 한다. 이와 관련해서는 이하에서 상세히 살펴보도록 한다. It should be noted in the present invention that the integrity check of the integrity function can be performed in the various smoothing processes of the smoothing function and further the dynamic key generation is enabled. This will be discussed in detail below.

이후, 단계 S105에서 선택된 평탄화 함수에 대한 평탄화에 이용될 각종 레이블을 생성(S107)한다. Then, in step S105, various labels to be used for flattening the selected flatness function are generated (S107).

레이블의 생성을 위해, 코드 변환 장치(100)는 선택된 평탄화 함수를 CFG(Control Flow Graph)로 변환하고 CFG의 변환에 따라 평탄화 함수를 평탄화 가능한 블록들로 분류한다. 도 4는 특정 평탄화 함수에 대한 CFG를 나타내고 도 5는 본 발명에 따른 평탄화 적용후의 CFG(도 4의 BB0는 도 5의 BBa에 대응하고 다른 블록 역시 동일한 대응 관계를 가짐.)를 나타낸다. 도 4에서 알 수 있는 바와 같이, CFG 내의 각 블록들은 수행시에 블록내의 코드가 다른 블록들로 분기(branch)하지 않도록 구성되고 각 블록의 모든 코드가 수행 완료된 후에 다른 블록으로 분기된다.In order to generate the label, the code conversion apparatus 100 converts the selected flattening function into CFG (Control Flow Graph) and classifies the flattening function into flattenable blocks according to the CFG conversion. Fig. 4 shows the CFG for the specific flattening function, and Fig. 5 shows the CFG (BB0 in Fig. 4 corresponds to BBa in Fig. 5 and the other blocks have the same correspondence relationship) after the flattening application according to the present invention. As can be seen in FIG. 4, each block in the CFG is configured so that the code in the block does not branch to other blocks at execution time, and branches to another block after all the code of each block is completed.

도 4 및 도 5를 참조해서, 본 발명에 따른 레이블의 생성 과정을 살펴보면, 코드 변환 장치(100)는 먼저 평탄화 함수의 CFG 내의 각 블록에 대한 레이블(

Figure 112014125796065-pat00001
, 도 5의 예에서 i는 a ~ f임)을 생성하고 각 블록에 대한 분기 함수(
Figure 112014125796065-pat00002
) 및 스위치문에서 이용될 함수(
Figure 112014125796065-pat00003
)를 생성한다. Referring to FIGS. 4 and 5, a process of generating a label according to the present invention will be described. First, the code conversion apparatus 100 reads out a label for each block in the CFG of the flattening function
Figure 112014125796065-pat00001
, I in the example of FIG. 5 is a to f) and generates a branch function (
Figure 112014125796065-pat00002
) And the function to be used in the switch statement (
Figure 112014125796065-pat00003
).

블록의 레이블은 대응하는 블록의 수행 시작 위치를 나타내며 레이블은 변수로 표현될 수 있다. 각 블록에 대응하는 분기 함수는 서로 상이하도록 구성된다.The label of the block indicates the execution start position of the corresponding block, and the label can be represented by a variable. The branch functions corresponding to the respective blocks are configured to be different from each other.

각 블록의 분기 함수

Figure 112014125796065-pat00004
는, 블록의 수행 완료후의 분기 조건에 따라 예를 들어 분기가 없는 경우(즉, 하나의 후속하는 블록만이 수행되는 경우) "
Figure 112014125796065-pat00005
+ mask +
Figure 112014125796065-pat00006
"로 표현되고, 분기가 존재하는 경우 "
Figure 112014125796065-pat00007
+ mask+
Figure 112014125796065-pat00008
"로 표현된다.
Figure 112014125796065-pat00009
는 해쉬(Hash) 함수로서 각 블록에 맵핑된 무결성 함수를 입력 인자로 한다. 여기서
Figure 112014125796065-pat00010
는 각 블록에 맵핑된 IF(무결성 함수)의 해쉬값을 나타내는 데, 레이블 생성 과정에서 코드 변환 장치(100)는 각 블록마다 어떠한 IF의 무결성을 체크할 것인지를 결정한다. 예를 들어 코드 변환 장치(100)는 랜덤하게 평탄화 함수의 각 블록들을 특정 하나의 IF에 맵핑한다. 여기서,
Figure 112014125796065-pat00011
는 변환된 소프트웨어 상에서 블록 i가 시작하는 시작 위치(분기 위치)를 나타내는 임의의 지시자를 나타낸다.
Figure 112014125796065-pat00012
는 숫자의 조합, 문자의 조합 또는 숫자와 문자의 조합으로 구성되고 변수로 표현될 수도 있다. Branch function of each block
Figure 112014125796065-pat00004
For example, when there is no branch (that is, only one subsequent block is performed) according to the branch condition after completion of execution of the block,
Figure 112014125796065-pat00005
+ mask +
Figure 112014125796065-pat00006
Quot ;, and when a branch is present,
Figure 112014125796065-pat00007
+ mask +
Figure 112014125796065-pat00008
"
Figure 112014125796065-pat00009
As an input argument, an integrity function mapped to each block as a hash function. here
Figure 112014125796065-pat00010
Represents a hash value of an IF (integrity function) mapped to each block. In the process of generating a label, the code conversion apparatus 100 determines which IF integrity is checked for each block. For example, the code conversion device 100 randomly maps each block of the smoothing function to a specific one IF. here,
Figure 112014125796065-pat00011
Represents an arbitrary indicator indicating the start position (branch position) at which the block i starts on the converted software.
Figure 112014125796065-pat00012
May be a combination of numbers, a combination of letters, or a combination of numbers and letters and may be represented by variables.

mask는 입력 소프트웨어의 본래 기능에 따라 다음에 실행될 블록을 보정하기 위한 값이다. 분기 함수

Figure 112014125796065-pat00013
는 이하에서 살펴볼 바와 같이 하드코딩되지 않고 분기 함수
Figure 112014125796065-pat00014
자체(즉 각 블록의 분기 함수의 계산을 위한 코드)가 대응하는 블록과 함께 코드 블록으로 변환된 소프트웨어에 내장되도록 구성된다. 이에 따라 분기 함수
Figure 112014125796065-pat00015
는 변환된 소프트웨어의 실제 실행시에 레이블 값(
Figure 112014125796065-pat00016
)을 산출하기에 정적 분석 방법에 안전하다.
Figure 112014125796065-pat00017
는 i 블록의 조건을 나타내어 하나 이상의 각 조건에 따른 참(1) 또는 거짓(0)에 따라 특정 레이블로 분기할 수 있도록 한다. 함수 F()는 특정 레이블(
Figure 112014125796065-pat00018
)을 생성하기 위한 함수로서 F()는 분기 함수의 출력을 입력 인자로 하는 해쉬 함수로 표현될 수 있다. 함수 F()를 통해 다음번에 수행되어야 하는 정확한 블록 위치를 스위치문이 선택할 수 있다. mask is a value for correcting a block to be executed next according to the original function of the input software. Branch function
Figure 112014125796065-pat00013
Is not hard-coded as described below,
Figure 112014125796065-pat00014
(I.e., the code for calculating the branch function of each block) is embedded in the software converted into the code block together with the corresponding block. Therefore,
Figure 112014125796065-pat00015
Is the label value (< RTI ID = 0.0 >
Figure 112014125796065-pat00016
) Is safe for static analysis.
Figure 112014125796065-pat00017
Indicates the condition of i block so that it can branch to a specific label according to true (1) or false (0) according to one or more conditions. The function F ()
Figure 112014125796065-pat00018
), F () can be expressed by a hash function with the output of the branch function as an input factor. Through the function F (), the switch statement can select the exact block location to be performed next.

여기서, 본 발명에 따른 분기 함수는 무결성 함수에 대한 해쉬 함수 적용으로 구성된다. 따라서, 만일 무결성 함수가 변조되는 경우에 무결성 함수에 대한 해쉬 함수의 적용으로 산출되는 해쉬값 또한 달라진다. 이는

Figure 112014125796065-pat00019
의 값이 달라지고 각 블록의 실행이 정상적으로 동작하지 않게 된다. 만일 무결성 함수의 변조에 따른 변화를 탐지 가능하다면 변조에 대응할 수 있다. 본 발명에서는 무결성 함수에 대한 평탄화 함수의 분기에서 이용되는 해쉬값으로 변조를 판별할 수 있다. 이에 대해서는 이하에서 좀 더 살펴보도록 한다. Here, the branch function according to the present invention is configured by applying a hash function to an integrity function. Thus, if the integrity function is modulated, the hash value produced by applying the hash function to the integrity function is also different. this is
Figure 112014125796065-pat00019
And the execution of each block does not operate normally. If it can detect changes due to modulation of the integrity function, it can respond to modulation. In the present invention, the modulation can be determined by the hash value used in the branching of the smoothing function for the integrity function. This will be discussed in more detail below.

이후 코드 변환 장치(100)는 암호화 함수에 대한 암호화를 위해 동적 키를 생성(S109)한다. 본 발명에 의해 생성된 동적 키는 변환된 소프트웨어 어디에도 저장되지 않는다. 만일 변환된 소프트웨어 내에 동적 키가 저장되는 경우 이 동적 키를 외부에 의해서 찾게 된다면 암호화는 그 의미가 상실된다. Then, the code conversion apparatus 100 generates a dynamic key for encryption for the encryption function (S109). The dynamic key generated by the present invention is not stored anywhere in the translated software. If the dynamic key is stored in the translated software, the encryption will be lost if the dynamic key is found by the external.

대신에, 본 발명은 레이블 생성 단계(S107)에서 생성된 레이블을 이용하여 동적 키를 생성한다. 구체적으로 살펴보면, 평탄화 함수의 각 블록(i)은 (

Figure 112014125796065-pat00020
,
Figure 112014125796065-pat00021
)의 쌍을 가진다. 따라서 평탄화 함수의 모든 블록들 각각은 모두 (
Figure 112014125796065-pat00022
,
Figure 112014125796065-pat00023
)를 가지고 i를 인덱스로 하는 이 순서쌍들을 이용하여 동적 키를 코드 변환 장치(100)가 생성한다. Instead, the present invention generates a dynamic key using the label generated in the label generation step (S107). Specifically, each block (i) of the smoothing function has
Figure 112014125796065-pat00020
,
Figure 112014125796065-pat00021
). ≪ / RTI > Thus, each block of the smoothing function has all (
Figure 112014125796065-pat00022
,
Figure 112014125796065-pat00023
), And the dynamic key is generated by the code conversion apparatus 100 using these ordered pairs having i as an index.

Figure 112014125796065-pat00024
(또는
Figure 112014125796065-pat00025
)는 대응하는 블록이 실행되는 경우에 분기 함수 B()에 의해서 동적으로 생성되는 값인데, 평탄화 함수의 특정 블록이 소프트웨어의 조건에 따라 실행될 수도 있고 실행되지 않을 수도 있다. 항상 동일한 동적 키를 변환된 소프트웨어로부터 도출해 낼 수 있어야 정상적으로 암호화된 암호화 함수를 복호화할 수 있고 이에 대한 대응 방안이 요구된다.
Figure 112014125796065-pat00024
(or
Figure 112014125796065-pat00025
Is a value generated dynamically by the branch function B () when the corresponding block is executed, but a specific block of the flattening function may or may not be executed in accordance with the condition of the software. It is necessary to be able to derive the same dynamic key from the converted software all the time so that the normally encrypted function can be decrypted and a corresponding countermeasure is required.

본 발명은 알려져 있는 Shamir의 비밀 분할(Secret Sharing) 기법((t,n)-threshold secret sharing)을 이용하여 이 문제를 해결한다. 이 비밀 분할 기법은 n 개의 분할(sharing) 중에서 t 개 이상의 분할이 모이면 비밀을 복원해낼 수 있는 기법이다. The present invention solves this problem using the known Shamir secret sharing technique ((t, n) -threshold secret sharing). This secret sharing scheme is a technique that can recover secrets when more than t partitions among n shares are collected.

비밀 분할 기법의 적용으로 동적 키 복원이 가능하도록, 코드 변환 장치(100)는 평탄화 함수의 CFG를 통해서 모든 블록들의 개수(n개, 도 4의 예에서 6)를 도출하고 CFG를 통해 최단 실행 경로의 길이(t)(도 4의 예에서 4)를 도출한다. 길이(t)는 최단 실행 경로상의 블록들의 개수를 나타낸다. 이러한 n과 t의 도출은 코드 변환 장치(100)에 의해서 용이하게 수행될 수 있다. 코드 변환 장치(100)는 도출된 n과 t를 이용하여 비밀인 동적 키를 생성한다. In order to enable dynamic key recovery by applying the secret division technique, the code conversion apparatus 100 derives the number of all blocks (n, 6 in the example of FIG. 4) through the CFG of the smoothing function, (4 in the example of FIG. 4). The length t represents the number of blocks on the shortest execution path. The derivation of n and t can be easily performed by the code conversion apparatus 100. [ The code conversion apparatus 100 generates a secret dynamic key using the derived n and t.

코드 변환 장치(100)는 평탄화 함수를 생성된 레이블을 이용하여 평탄화(S111)한다. 도 5는 도 4의 CFG에 대해서 평탄화가 이루어진 후의 CFG를 나타낸다. 도 4 및 도 5를 통해서 알 수 있는 바와 같이, 원래 수행 경로 상의 각 블록간 수행 의존 순서는 스위치문을 통해 평탄화된다. 각 블록(도 5의 BBa, BBb 등 참조)들은 대응하는 분기 함수(도 5의 Ba(), Bb() 등 참조)와 함께 하나의 코드 블록을 구성한다. 분기 함수는 하드코딩되지 않고 본 발명에 따라 함수로서 대응하는 블록에 결합된다. 따라서 변환된 소프트웨어가 실행되고 평탄화 함수의 특정 블록이 수행되면 이 특정 블록의 수행 완료후에는 대응하는 분기 함수가 바로 수행된다. 분기 함수는 분기할 레이블을 동적으로 계산한다. 이에 따라 평탄화 함수의 정적 분석이 불가능하다. The code conversion apparatus 100 flattens the flattening function using the generated label (S111). 5 shows the CFG after the CFG of FIG. 4 is planarized. As can be seen from FIGS. 4 and 5, the order of dependency between blocks on the original execution path is flattened through the switch door. Each block (see BBa, BBb, etc. in Fig. 5) constitutes one code block together with the corresponding branch function (see Ba (), Bb (), etc. in Fig. 5). The branch function is not hard-coded and is coupled to the corresponding block as a function in accordance with the present invention. Therefore, when the converted software is executed and a specific block of the flattening function is performed, the corresponding branching function is performed immediately after completing the execution of the specific block. The branch function dynamically calculates the label to branch. Therefore, static analysis of the flattening function is impossible.

평탄화에 의한 평탄화된 코드는 디폴트 레이블(

Figure 112014125796065-pat00026
)을 포함한다. 특정 블록의 분기 함수는 특정 무결성 함수에 대한 지정된 함수(예를 들어 해쉬 함수)의 적용으로 분기 레이블(또는 분기값)이 생성된다. 따라서 무결성 함수가 변조되게 되면 분기 함수에 의해서 산출되는 분기 레이블 또한 달라지게 된다. 본 발명에서는 디폴트 레이블(매칭되는 레이블이 존재하지 않는 경우에 이용되는 레이블)을 이용하여 무결성 함수의 변조를 탐지할 수 있다. 디폴트 레이블의 블록(
Figure 112014125796065-pat00027
)은 변조 대응 루틴(예를 들어, 프로그램 종료, 변조 탐지 출력, 지정된 서버로의 변조 탐지 출력 등)을 포함하여 소프트웨어의 변조 탐지 결과를 출력할 수 있다. Flattened flattened code has a default label (
Figure 112014125796065-pat00026
). A branching function of a particular block generates a branching label (or branching value) by applying a specified function (e.g. a hash function) to a specific integrity function. Therefore, if the integrity function is modulated, the branch label calculated by the branch function also changes. In the present invention, modulation of an integrity function can be detected using a default label (a label used when no matching label exists). Block of default label (
Figure 112014125796065-pat00027
May output the modulation detection results of the software, including modulation-related routines (e.g., program termination, modulation detection output, modulation detection output to designated server, etc.).

동적 키의 생성 이후에, 코드 변환 장치(100)는 암호화 함수를 생성된 동적 키로 암호화(S113)한다. 본 발명에 따른 동적 키는 변환되는 소프트웨어에 내장되지 않는다. 대신에, 평탄화된 함수의 코드 수행 시에 평탄화된 함수는 최소한 최단 실행 경로를 통해 t(최단 실행 경로 길이)개의 블록과 분기 함수를 수행하고 이에 따라 이 t 개의 분기 함수들을 이용하여 동적 키를 변환된 소프트웨어가 복원가능하다. After generation of the dynamic key, the code conversion apparatus 100 encrypts the encryption function with the generated dynamic key (S113). The dynamic key according to the present invention is not embedded in the software to be converted. Instead, the flattened function at the time of code execution of the flattened function performs t (shortest execution path length) blocks and branch functions through at least the shortest execution path, and thus transforms the dynamic key using these t branch functions Software can be restored.

이후 코드 변환 장치(100)는 필요시 최적화 과정을 진행하고 사용자에 의해서 지정된 기계어를 위한 컴파일 및 링크 과정을 통해 기계어로 변환(S115)한다. 그리고 코드 변환 장치(100)는 변환된 기계어, 즉 변조 저항성 및 탐지 기능을 갖는 변환된 소프트웨어,를 저장 매체(107)에 저장(S117)하거나 통신 인터페이스(109)를 통해 출력한다. Thereafter, the code conversion apparatus 100 proceeds with the optimization process if necessary, and converts it into a machine language (S115) through a compiling and linking process for the machine language designated by the user. Then, the code conversion apparatus 100 stores the converted machine language, that is, the converted software having the modulation resistance and the detection function, in the storage medium 107 (S117) or outputs it via the communication interface 109. [

도 2의 코드 변환 방법은 매체에 저장될 수 있는 컴퓨터 프로그램으로 구성될 수 있다. 이 컴퓨터 프로그램은 USB, CD, DVD, 스마트 카드나 이동형 하드 디스크, 내장형 하드 디스크 등에 저장된다. 컴퓨터 프로그램은 도 1의 하드웨어 블록(들), 특히 프로세서(113),상에서 수행된다. The code conversion method of Fig. 2 can be configured with a computer program that can be stored in the medium. This computer program is stored on USB, CD, DVD, smart card, removable hard disk, built-in hard disk and so on. The computer program is executed on the hardware block (s), particularly the processor 113, of Fig.

도 3은 코드 변환 장치(100)의 예시적인 기능 블록도를 도시한 도면이다. 3 is a diagram showing an exemplary functional block diagram of the code conversion apparatus 100. As shown in FIG.

도 3에 따르면 코드 변환 장치(100)는 중간 언어 변환부(151), 모듈 로더부(153), 선택부(155), 레이블 생성부(157), 동적 키 생성부(159), 평탄화부(161), 암호화부(163), 최적화부(165) 및 기계어 변환부(167)를 포함한다. 도 3의 기능 블록도의 일부 기능 블록은 설계 변형에 따라 생략될 수 있다. 도 3의 기능 블록들은 도 1의 하드웨어 블록도상에서 수행되며 바람직하게는 프로세서(113)에 의해서 수행되는 코드 변환 프로그램에 의해서 구성된다. 코드 변환 프로그램은 각종 저장 매체(107)에 저장되어 배포될 수 있고 도 1의 하드웨어 블록도 상의 프로세서(113)에 의해서 수행된다. 3, the code conversion apparatus 100 includes an intermediate language conversion unit 151, a module loader unit 153, a selection unit 155, a label generation unit 157, a dynamic key generation unit 159, 161, an encrypting unit 163, an optimizing unit 165, and a machine language converting unit 167. Some functional blocks of the functional block diagram of Fig. 3 may be omitted in accordance with the design variant. The functional blocks of FIG. 3 are implemented on a hardware block diagram of FIG. 1 and preferably by a code conversion program performed by the processor 113. The code conversion program can be stored and distributed in various storage media 107 and is executed by the processor 113 on the hardware block diagram of Fig.

도 3의 기능 블록도에 대한 설명은 도 2의 설명을 고려하여 도 2와의 차이점을 중심으로 설명하며 생략된 설명은 대응하는 도 2의 설명으로 대체된다. The description of the functional block diagram of FIG. 3 will be centered on the difference from FIG. 2 in consideration of the description of FIG. 2, and the omitted description will be replaced with the corresponding description of FIG.

도 3의 기능 블록도는 하나의 소프트웨어 개발 플랫폼을 구성할 수 있다. 예를 들어 도 3의 기능 블록도는 LLVM(Low Level Virtual Machine) 컴파일 플랫폼 내에서 구성되어 소스 레벨의 소프트웨어를 특정 바이너리 레벨의 기계어로 변환한다. 기존 알려진 LLVM 플랫폼은 중간 언어 변환부(151), 모듈 로더부(153), 최적화부(165) 및 기계어 변환부(167)로 구성되고 알려진 이 LLVM 플랫폼은 소프트웨어를 중간 레벨의 중간 언어로 변환하고 이후 기계어로 변환한다. The functional block diagram of FIG. 3 may constitute one software development platform. For example, the functional block diagram of FIG. 3 is configured within the LLVM (Low Level Virtual Machine) compilation platform to translate the source level software into machine language at a particular binary level. The known LLVM platform includes an intermediate language conversion unit 151, a module loader unit 153, an optimization unit 165 and a machine language conversion unit 167. This LLVM platform converts the software into an intermediate level intermediate language After that, it converts to machine language.

도 3의 각 기능 블록들을 간단히 살펴보면, 중간 언어 변환부(151)는 사용자에 의해 선택된 입력 소프트웨어를 중간 언어의 표현으로 변환한다. 변환된 중간 언어의 표현으로 된 소프트웨어를 중간 언어 변환부(151)가 출력한다. 출력된 중간 언어의 소프트웨어는 이후 모듈 로더부(153) 등에 전달된다. 3, the intermediate language conversion unit 151 converts the input software selected by the user into a representation of the intermediate language. The intermediate language conversion unit 151 outputs the software having the converted intermediate language representation. The output intermediate language software is then transmitted to the module loader unit 153 and the like.

모듈 로더부(153)는 본 발명에 따라 소프트웨어 변환에 이용될 각종 프로그램 모듈을 로딩한다. 예를 들어 모듈 로더부(153)는 암호화 모듈, 해쉬 함수 모듈, 비밀 분할 모듈을 로딩한다. 이러한 암호화 모듈, 해쉬 함수 모듈 및 비밀 분할 모듈 등은 소프트웨어의 변환시에 변환된 소프트웨어에 포함된다. 이후 변환된 소프트웨어가 수행되는 경우 이러한 모듈도 또한 필요시 수행되어 소프트웨어 원래의 기능을 수행 가능하도록 한다. 바람직하게는 모듈 로더부(153)는 이러한 모듈들을 중간 언어의 표현으로된 소프트웨어에 링크한다. 로딩되는 모듈들 또한 중간 언어의 표현으로 구성되어 있다. The module loader unit 153 loads various program modules to be used for software conversion according to the present invention. For example, the module loader unit 153 loads the encryption module, the hash function module, and the secret division module. Such an encryption module, a hash function module, and a secret sharing module are included in the converted software at the time of software conversion. If the converted software is subsequently executed, such a module is also executed if necessary so that the original function of the software can be performed. Preferably, the module loader section 153 links these modules to software in the representation of the intermediate language. The loaded modules are also made up of intermediate language expressions.

선택부(155)는 보호될 함수를 선택한다. 선택부(155)는 적어도 제어 흐름을 평탄화할 대상인 하나 이상의 평탄화 함수, 무결성이 보장되어야 할 하나 이상의 무결성 함수를 선택한다. 또한, 선택부(155)는 암호화될 대상인 하나 이상의 암호화 함수를 선택한다. 평탄화 함수는 특정 하나 이상의 무결성 함수 및 특정 하나 이상의 암호화 함수에 선행하는 함수일 수 있다. The selection unit 155 selects a function to be protected. The selection unit 155 selects at least one leveling function, at least one integrity function, to which the control flow should be leveled, and at least one integrity function whose integrity is to be guaranteed. In addition, the selection unit 155 selects one or more encryption functions to be encrypted. The smoothing function may be a function that precedes the specific one or more integrity functions and the specific one or more encryption functions.

레이블 생성부(157)는 평탄화 함수에 대한 평탄화에서 이용될 레이블들을 생성한다. 레이블 생성부(157)는 평탄화 함수에 대한 CFG를 생성하고 CFG 내의 각 블록들에서 이용될 분기 함수 각각을 생성한다. 특정 블록을 위한 특정 분기 함수는 맵핑된 무결성 함수를 인자로 하는 지정된 함수를 포함한다. 이 지정된 함수는 예를 들어 해쉬 함수일 수 있다. The label generation unit 157 generates labels to be used in the planarization for the smoothing function. The label generation unit 157 generates a CFG for the flatness function and generates branch functions to be used in each block in the CFG. A particular branch function for a particular block contains a specified function that takes a mapped integrity function as an argument. This specified function can be a hash function, for example.

동적 키 생성부(159)는 암호화 함수를 암호화할 동적 키를 분기 함수들을 이용하여 생성한다. 동적 키는 평탄화 함수의 최단 실행 경로의 길이 및 총 블록 개수를 활용하는 비밀 분할 기법을 이용하여 생성된다. 동적 키는 변환된 소프트웨어 상에서 평탄화 함수의 최단 실행 경로의 길이(개수)의 분기 함수들을 이용하여 복원가능하다. The dynamic key generation unit 159 generates a dynamic key for encrypting the encryption function using branch functions. The dynamic key is generated using a secret partitioning technique that utilizes the length of the shortest execution path and the total number of blocks of the smoothing function. The dynamic key can be restored by using the branch functions of the length (number) of the shortest execution path of the flattening function on the converted software.

평탄화부(161)는 선택된 평탄화 함수를 평탄화한다. 평탄화부(161)는 평탄화 함수의 블록들 각각을 대응하는 분기 함수 각각과 함께 하나의 코드 블록을 구성한다. 이에 따라 평탄화된 함수의 코드는 블록의 실행 후에 분기 함수가 동적으로 실행되고 분기 함수는 동적인 실행으로 이후 분기할 레이블을 동적으로 계산한다. The planarizing unit 161 flattens the selected flattening function. The flattening unit 161 constitutes one block of the block of the flattening function together with each corresponding branching function. Thus, the flattened function code dynamically calculates the branching function dynamically after the execution of the block, and the branching function dynamically calculates the branch to be branched later in the dynamic execution.

평탄화부(161)에서 생성되는 평탄화 함수의 코드는 디폴트 레이블을 포함하고 디폴트 레이블은 소프트웨어의 변조를 탐지할 수 있도록 구성된다. The code of the smoothing function generated by the flattening unit 161 includes a default label and the default label is configured to detect the modulation of the software.

암호화부(163)는 동적 키 생성부(159)에서 생성된 동적 키로 암호화 함수를 암호화한다. The encryption unit 163 encrypts the encryption function using the dynamic key generated by the dynamic key generation unit 159. [

최적화부(165)는 각 블록들을 통해 생성되거나 변환된 중간 언어의 소프트웨어를 최적화한다. 여기서의 최적화는 적어도 본 발명에 따른 코드 변환 기법의 적용 후에도 코드 변환 결과는 유지되도록 구성된다. The optimizer 165 optimizes the intermediate language software generated or transformed through each of the blocks. Here, the optimization is configured so that the code conversion result is maintained even after applying the code conversion technique according to the present invention.

기계어 변환부(167)는 지정 또는 선택된 기계어로의 컴파일과 라이브리 등을 이용한 링크 과정을 수행한다. 기계어 변환부(167)에 의한 중간 언어의 소프트웨어를 기계어로 변환함으로써 변조 저항성 및 탐지 기능을 갖는 변환된 소프트웨어를 생성한다. The machine language conversion unit 167 performs a link process using compilation and library to a designated or selected machine language. And converts the intermediate language software to machine language by the machine language conversion unit 167 to generate converted software having modulation resistance and detection function.

변환된 소프트웨어는 저장 매체(107)에 저장되거나 통신 인터페이스(109)를 통해 출력될 수 있다.
The converted software can be stored in the storage medium 107 or output via the communication interface 109. [

이상에서 설명한 본 발명은, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 있어 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 여러 가지 치환, 변형 및 변경이 가능하므로 전술한 실시 예 및 첨부된 도면에 의해 한정되는 것이 아니다. It will be apparent to those skilled in the art that various modifications and variations can be made in the present invention without departing from the spirit or scope of the invention. The present invention is not limited to the drawings.

100 : 코드 변환 장치
101 : 입력 인터페이스 103 : 출력 인터페이스
105 : 메모리 107 : 저장 매체
109 : 통신 인터페이스 111 : 시스템 버스/제어 버스
113 : 프로세서
151 : 중간 언어 변환부 153 : 모듈 로더부
155 : 선택부 157 : 레이블 생성부
159 : 동적 키 생성부 161 : 평탄화부
163 : 암호화부 165 : 최적화부
167 : 기계어 변환부
100: Code conversion device
101: input interface 103: output interface
105: memory 107: storage medium
109: Communication interface 111: System bus / control bus
113: Processor
151: intermediate language conversion unit 153: module loader unit
155: selection unit 157: label generation unit
159: Dynamic key generation unit 161:
163: Encryption unit 165: Optimization unit
167:

Claims (11)

(a) 입력 소프트웨어를 중간 언어로 변환하는 단계;
(b) 보호될 함수를 선택하는 단계로서, 제어 흐름을 평탄화할 대상인 평탄화 함수 및 무결성이 보장되어야 할 대상인 무결성 함수를 선택하는, 보호 함수 선택 단계; 및
(c) 상기 평탄화 함수에 대한 평탄화에 이용될 레이블들을 생성하는 단계로서, 상기 무결성 함수를 이용하여 상기 평탄화 함수 내의 블록들 각각에서 이용될 분기 함수 각각을 생성하는, 레이블 생성 단계를 포함하는,
코드 변환 방법.
(a) converting the input software into an intermediate language;
(b) selecting a function to be protected, the method comprising the steps of: selecting a planarization function as an object to be flattened by a control flow and an integrity function to be an object of integrity; And
(c) generating labels to be used for planarization for the flattening function, wherein the integrity function is used to generate each of the branching functions to be used in each of the blocks in the flattening function,
Code conversion method.
제1항에서 있어서,
상기 (b) 및 (c)는 상기 중간 언어로 변환된 소프트웨어에 대해서 수행하며,
상기 분기 함수 각각은 블록에 맵핑된 무결성 함수를 인자로 하는 지정된 함수를 포함하는,
코드 변환 방법.
The method of claim 1,
(B) and (c) are performed on the software converted into the intermediate language,
Wherein each of the branch functions includes a specified function that takes an integrity function mapped to a block as a factor.
Code conversion method.
제1항에 있어서,
상기 단계 (b)는 암호화될 대상인 암호화 함수를 더 선택하고,
상기 코드 변환 방법은 (d) 상기 암호화 함수를 암호화할 동적 키를 분기 함수들을 이용하여 생성하는 단계; 및 (f) 상기 동적 키를 이용하여 상기 암호화 함수를 암호화하는 단계;를 더 포함하며,
상기 동적 키는 상기 평탄화 함수의 최단 실행 경로의 블록들 개수의 분기 함수들을 이용하여 복원가능한,
코드 변환 방법.
The method according to claim 1,
The step (b) further selects an encryption function to be encrypted,
The code conversion method includes: (d) generating a dynamic key for encrypting the encryption function using branch functions; And (f) encrypting the encryption function using the dynamic key,
Wherein the dynamic key is restored using branch functions of the number of blocks of the shortest execution path of the flattening function,
Code conversion method.
제1항에 있어서,
(e) 상기 평탄화 함수를 평탄화하는 단계로서, 상기 블록들 각각은 대응하는 상기 분기 함수 각각과 하나의 코드 블록을 구성하는, 평탄화 단계;를 더 포함하며,
상기 분기 함수는 실행시에 분기할 레이블을 동적으로 계산하는,
코드 변환 방법.
The method according to claim 1,
(e) flattening the flattening function, wherein each of the blocks comprises a corresponding one of the branching functions and one code block,
The branching function dynamically calculates a label to be branched at the time of execution,
Code conversion method.
제4항에 있어서,
상기 단계 (e)의 평탄화 함수의 코드는 디폴트 레이블를 포함하고,
상기 디폴트 레이블은 소프트웨어의 변조를 탐지할 수 있도록 구성되는,
코드 변환 방법.
5. The method of claim 4,
Wherein the code of the flattening function of step (e) comprises a default label,
Wherein the default label is configured to detect tampering of the software,
Code conversion method.
하드웨어에 결합되어 제1항의 코드 변환 방법의 각 단계를 실행시키기 위해 컴퓨터 판독가능한 기록매체에 저장된 컴퓨터 프로그램. A computer program stored on a computer readable recording medium coupled to the hardware for executing the steps of the method of claim 1. 보호될 함수를 선택하는 선택부로서, 제어 흐름을 평탄화할 대상인 평탄화 함수 및 무결성이 보장되어야 할 대상인 무결성 함수를 선택하는, 선택부;
상기 평탄화 함수에 대한 평탄화에 이용될 레이블들을 생성하는 레이블 생성부로서, 상기 무결성 함수를 이용하여 상기 평탄화 함수 내의 블록들 각각에서 이용될 분기 함수 각각을 생성하는, 레이블 생성부; 및
입력 소프트웨어를 중간 언어로 변환하고 변환된 중간 언어의 소프트웨어를 상기 선택부로 출력하는 중간 언어 변환부를 포함하는,
코드 변환 장치.
A selection unit for selecting a function to be protected, the selection unit selecting a smoothing function as an object to be flattened by the control flow and an integrity function to be an object of integrity;
A label generating unit for generating labels to be used for flattening the flattening function, the label generating unit generating each branching function to be used in each of the blocks in the flattening function using the integrity function; And
And an intermediate language conversion unit for converting the input software into an intermediate language and outputting the converted intermediate language software to the selection unit.
Code conversion device.
제7항에 있어서,
상기 분기 함수 각각은 블록에 맵핑된 무결성 함수를 인자로 하는 지정된 함수를 포함하는,
코드 변환 장치.
8. The method of claim 7,
Wherein each of the branch functions includes a specified function that takes an integrity function mapped to a block as a factor.
Code conversion device.
제7항에 있어서,
상기 선택부는 암호화될 대상인 암호화 함수를 더 선택하고,
상기 코드 변환 장치는 상기 암호화 함수를 암호화할 동적 키를 분기 함수들을 이용하여 생성하는 동적 키 생성부; 및 상기 동적 키를 이용하여 상기 암호화 함수를 암호화하는 암호화부;를 더 포함하며,
상기 동적 키는 상기 평탄화 함수의 최단 실행 경로의 블록들 개수의 분기 함수들을 이용하여 복원가능한,
코드 변환 장치.
8. The method of claim 7,
The selection unit further selects an encryption function to be encrypted,
Wherein the code conversion apparatus comprises: a dynamic key generation unit for generating a dynamic key for encrypting the encryption function using branch functions; And an encryption unit encrypting the encryption function using the dynamic key,
Wherein the dynamic key is restored using branch functions of the number of blocks of the shortest execution path of the flattening function,
Code conversion device.
제7항에 있어서,
블록들 각각과 대응하는 분기 함수 각각이 하나의 코드 블록으로 구성되도록 상기 평탄화 함수를 평탄화하는 평탄화부;를 더 포함하며,
상기 분기 함수는 실행시에 분기할 레이블을 동적으로 계산하는,
코드 변환 장치.
8. The method of claim 7,
And a flattening unit for flattening the flattening function so that each branching function and each corresponding branching function are constituted by one code block,
The branching function dynamically calculates a label to be branched at the time of execution,
Code conversion device.
제10항에 있어서,
상기 평탄화부에서 생성되는 평탄화 함수의 코드는 디폴트 레이블를 포함하고,
상기 디폴트 레이블은 소프트웨어의 변조를 탐지할 수 있도록 구성되는,
코드 변환 장치.
11. The method of claim 10,
Wherein the code of the flattening function generated by the flattening unit includes a default label,
Wherein the default label is configured to detect tampering of the software,
Code conversion device.
KR1020140188492A 2014-12-24 2014-12-24 Code transformation method and code transformation apparatus KR101628923B1 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020140188492A KR101628923B1 (en) 2014-12-24 2014-12-24 Code transformation method and code transformation apparatus
PCT/KR2015/009483 WO2016104918A1 (en) 2014-12-24 2015-09-09 Code conversion method and code conversion device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140188492A KR101628923B1 (en) 2014-12-24 2014-12-24 Code transformation method and code transformation apparatus

Publications (1)

Publication Number Publication Date
KR101628923B1 true KR101628923B1 (en) 2016-06-22

Family

ID=56150904

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140188492A KR101628923B1 (en) 2014-12-24 2014-12-24 Code transformation method and code transformation apparatus

Country Status (2)

Country Link
KR (1) KR101628923B1 (en)
WO (1) WO2016104918A1 (en)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113031930B (en) * 2019-12-24 2022-07-05 武汉斗鱼鱼乐网络科技有限公司 Source code confusion generation method and device for control flow flattening

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101269089B1 (en) * 2011-08-19 2013-05-29 고려대학교 산학협력단 Software modulation prevention method using own encryption
KR20130085535A (en) * 2011-12-16 2013-07-30 주식회사 케이티 Apparatus for protecting forgery/alteration of application and verification apparatus
KR20130116408A (en) * 2012-03-12 2013-10-24 삼성전자주식회사 Method and apparatus for detecting leak of information resources data
KR101350390B1 (en) * 2013-08-14 2014-01-16 숭실대학교산학협력단 A apparatus for code obfuscation and method thereof

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101269089B1 (en) * 2011-08-19 2013-05-29 고려대학교 산학협력단 Software modulation prevention method using own encryption
KR20130085535A (en) * 2011-12-16 2013-07-30 주식회사 케이티 Apparatus for protecting forgery/alteration of application and verification apparatus
KR20130116408A (en) * 2012-03-12 2013-10-24 삼성전자주식회사 Method and apparatus for detecting leak of information resources data
KR101350390B1 (en) * 2013-08-14 2014-01-16 숭실대학교산학협력단 A apparatus for code obfuscation and method thereof

Also Published As

Publication number Publication date
WO2016104918A1 (en) 2016-06-30

Similar Documents

Publication Publication Date Title
CN108664773B (en) Method and device for protecting Java source code
EP2962193B1 (en) Compiler based obfuscation
CN102598017B (en) Improve the system and method for its tamper-proof capabilities of Java bytecode
KR101490047B1 (en) Apparatus for tamper protection of application code based on self modification and method thereof
US20160203087A1 (en) Method for providing security for common intermediate language-based program
RU2620712C2 (en) Virtual machine device with driven key obfuscation and method
US20150095656A1 (en) Apparatus for code obfuscation and method thereof
KR101687439B1 (en) A processor-implemented method for ensuring software integrity
EP3126973A1 (en) Method, apparatus, and computer-readable medium for obfuscating execution of application on virtual machine
EP3188063A1 (en) A build system
US10795990B2 (en) Secure code optimization method and system
CN107346401A (en) Information Guarantee System for safely configuration processor
CN105074712A (en) Code processing device and program
US20110271350A1 (en) method for protecting software
CN109885990B (en) Script management method
KR20200136142A (en) Method of encoding and decoding memory data for software security, readable medium and apparatus for performing the method
CN109885991A (en) Encryption method based on mobile application data fluid, electronic equipment and medium
KR101628923B1 (en) Code transformation method and code transformation apparatus
KR20150069844A (en) Method of Obfuscating Files Based on Advanced RISC Machine Processor
CN108021790B (en) File protection method and device, computing equipment and computer storage medium
JP4727366B2 (en) Information processing apparatus, information processing system, program, and recording medium
KR102317471B1 (en) Electronic apparatus for determining whether program comprises malicious code and method for controlling thereof
CN111291333A (en) Java application program encryption method and device
CN116226881A (en) Source code encryption method based on compiling language
EP2947590B1 (en) Program code obfuscation based upon recently executed program code

Legal Events

Date Code Title Description
GRNT Written decision to grant
R401 Registration of restoration