KR20150145629A - 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법 - Google Patents

바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법 Download PDF

Info

Publication number
KR20150145629A
KR20150145629A KR1020140075968A KR20140075968A KR20150145629A KR 20150145629 A KR20150145629 A KR 20150145629A KR 1020140075968 A KR1020140075968 A KR 1020140075968A KR 20140075968 A KR20140075968 A KR 20140075968A KR 20150145629 A KR20150145629 A KR 20150145629A
Authority
KR
South Korea
Prior art keywords
code
garbage
binary file
chain
area
Prior art date
Application number
KR1020140075968A
Other languages
English (en)
Other versions
KR101641769B1 (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 KR1020140075968A priority Critical patent/KR101641769B1/ko
Publication of KR20150145629A publication Critical patent/KR20150145629A/ko
Application granted granted Critical
Publication of KR101641769B1 publication Critical patent/KR101641769B1/ko

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

Landscapes

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

Abstract

본 발명의 일 양태에 의하면, 대상 바이너리 파일에 보호 코드 영역을 부가하여 상기 보호 대상 바이너리 파일을 보호하는 바이너리 파일의 보호방법이 제공된다. 상기 바이너리 파일의 보호방법은, 상기 대상 바이너리 파일을 획득하는 단계; 제1 가비지 코드 및 제2 가비지 코드를 생성하는 단계; 상기 제1 가비지 코드를 적어도 제1 가비지 코드 체인 및 제2 가비지 코드 체인을 포함하는 복수의 조각 가비지 코드들로 분할하는 단계; 상기 제2 가비지 코드를 적어도 제3 가비지 코드 체인 및 제4 가비지 코드 체인을 포함하는 복수의 가비지 코드 체인들로 분할하는 단계; 상기 제1 가비지 코드 체인 내지 상기 제4 가비지 코드 체인을 상기 보호 코드 영역의 제1 영역에 배치하는 단계; 가비지 코드 호출을 위한 호출 코드를 상기 보호 코드 영역의 제2 영역에 배치하는 단계; 및 상기 보호 코드 영역을 상기 대상 바이너리 파일에 부가하여 보호된 바이너리 파일을 생성하는 단계를 포함할 수 있다.

Description

바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법{PROTECTING METHOD OF BINARY FILE AND EXECUTING METHOD OF PROTECTED BINARY FILE}
본 발명은, 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법에 관한 것이다. 보다 구체적으로, 본 발명은, 바이너리 파일에 대한 역공학(reverse engineering)을 통해 바이너리 파일의 소스의 내용을 분석함으로써 프로그램에 대한 저작권이 침해당할 수 있는 상황으로부터 바이너리 파일을 보호하기 위한 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법에 관한 것이다.
바이너리 파일형태의 프로그램 실행 파일을 보호하기 위하여, 암호화, 난독화 등의 방법 등이 널리 연구되고 실제 프로그램에 적용되고 있다.
이러한 바이너리 파일을 역공학(reverse engineering)을 통해 분석하여, 소스 코드에 대한 정보를 부당한 방법으로 알아내기 위하여, 바이너리 파일의 실행 시, 바이너리 파일 내에서의 실행 시작 시점인 엔트리 포인트(Entry Point)를 알아내고, 엔트리 포인트로부터 대상 바이너리 파일을 분석함으로써, 역공학이 시작된다. 즉, 바이너리 파일의 엔트리 포인트를 찾아내는 것이 바이너리 파일의 역공학의 시발점이 되는 것이 일반적이다.
이러한 역공학으로부터 바이너리 파일을 보호하기 위하여 엔트리 포인트를 찾기 어렵게 만드는 방법이 널리 적용되고 있으나, 실제로 바이너리 파일을 보호하는 데에 어려움이 있는 것이 현 실정이다.
본 발명이 해결하고자 하는 과제는, 바이너리 파일을 역공학으로부터 효과적으로 보호할 수 있는 바이너리 파일의 보호 방법을 제공하는 것에 있다.
본 발명의 해결하고자 하는 또 다른 과제는, 바이너리 파일을 역공학으로부터 효과적으로 보호하기 위하여 보호된 바이너리 파일을 실행하는 방법을 제공하는 것에 있다.
본 발명의 일 양태에 의하면, 대상 바이너리 파일에 보호 코드 영역을 부가하여 상기 보호 대상 바이너리 파일을 보호하는 바이너리 파일의 보호방법이 제공된다. 상기 바이너리 파일의 보호방법은, 상기 대상 바이너리 파일을 획득하는 단계; 제1 가비지 코드 및 제2 가비지 코드를 생성하는 단계; 상기 제1 가비지 코드를 적어도 제1 가비지 코드 체인 및 제2 가비지 코드 체인을 포함하는 복수의 조각 가비지 코드들로 분할하는 단계; 상기 제2 가비지 코드를 적어도 제3 가비지 코드 체인 및 제4 가비지 코드 체인을 포함하는 복수의 가비지 코드 체인들로 분할하는 단계; 상기 제1 가비지 코드 체인 내지 상기 제4 가비지 코드 체인을 상기 보호 코드 영역의 제1 영역에 배치하는 단계; 가비지 코드 호출을 위한 호출 코드를 상기 보호 코드 영역의 제2 영역에 배치하는 단계; 및 상기 보호 코드 영역을 상기 대상 바이너리 파일에 부가하여 보호된 바이너리 파일을 생성하는 단계를 포함할 수 있다.
상기 보호된 바이너리 파일의 엔트리 포인트는 상기 호출 코드의 시작 주소로 설정될 수 있다.
상기 보호된 바이너리 파일의 엔트리 포인트는 상기 제1 가비지 코드의 시작 주소로 설정될 수 있다.
상기 제1 가비지 코드 및 상기 제2 가비지 코드의 길이는 랜덤하게 생성될 수 있다.
상기 제1 가비지 코드 체인에는 상기 제1 가비지 코드 체인이 배치된 위치와 상기 제2 가비지 코드체인이 배치된 위치에 대한 오프셋 정보(offset information)를 포함될 수 있다.
상기 제1 가비지 코드의 연산 결과는 0이며, 상기 제1 가비지 코드 체인의 연산결과는 0이 아니고, 상기 제2 가비지 코드 체인의 연산결과는 0이 아니도록 상기 제1 가비지 코드가 적어도 상기 제1 가비지 코드 체인 및 상기 제2 가비지 코드 체인을 포함하는 복수의 가비지 코드 체인들로 분할될 수 있다.
상기 제2 가비지 코드의 연산 결과는 0이며, 상기 제3 가비지 코드 체인의 연산결과는 0이 아니고, 상기 제4 가비지 코드 체인의 연산결과는 0이 아니도록 상기 제2 가비지 코드가 적어도 상기 제3 가비지 코드 체인 및 상기 제4 가비지 코드 체인을 포함하는 복수의 가비지 코드 체인들로 분할될 수 있다.
상기 호출 코드는, 상기 제1 가비지 코드 및 상기 제2 가비지 코드 중 하나의 코드를 호출하기 위한 난수 발생 모듈을 포함할 수 있다.
상기 바이너리 파일의 보호방법은, 상기 보호 코드 영역에 대한 정상 실행 여부를 판단하기 위한 판단 코드를 상기 보호 코드 영역의 제3 영역에 배치하는 단계;를 더 포함할 수 있다.하는
상기 판단 코드는, 상기 보호 코드 영역이 정상적으로 실행되었다고 판단되면, 상기 대상 바이너리 파일의 실행을 위한 오리지널 엔트리 포인트(Original Entry Point)를 제공하기 위한 코드를 포함할 수 있다.
상기 바이너리 파일의 보호방법은, 적어도 상기 제1 가비지 코드 체인의 주소 및 상기 제3 가비지 코드 체인의 주소를 포함하는 정보를 상기 보호 코드 영역의 제4 영역에 배치하는 단계;를 더 포함할 수 있다.
상기 바이너리 파일의 보호방법은, 상기 대상 바이너리 파일을 암호화하는 단계;를 더 포함할 수 있다. 이 때, 상기 암호화된 대상 바이너리 파일을 해독하기 위한 해독정보를 상기 보호 코드 영역의 제5 영역에 배치하는 단계가 더 포함될 수 있다.
본 발명의 다른 양태에 의하면, 대상 바이너리 파일에 보호 코드영역을 부가하여 보호된 바이너리 파일의 실행 방법이 제공된다. 상기 보호된 바이너리 파일의 실행 방법은, 상기 보호 코드 영역에 배치된 복수의 가비지 코드들 중 하나의 가비지 코드를 호출하기 위한 호출 코드를 실행하는 단계; 상기 호출 코드의 실행에 의해 호출되는 가비지 코드를 실행하는 단계; 상기 호출된 가비지 코드의 실행 결과를 확인하는 단계; 및 상기 확인 결과에 따라 상기 가비지 코드의 실행 결과가 미리 정해진 연산 결과값이 아닌 경우, 상기 보호된 바이너리 파일의 실행 루틴을 종료시키는 단계;를 포함할 수 있다.
상기 확인 결과에 따라, 상기 가비지 코드의 실행 결과가 미리 정해진 연산 결과값인 경우, 상기 대상 바이너리 파일의 특정 포인트가 호출될 수 있다.
상기 복수의 가비지 코드들 각각은 복수의 가비지 코드 체인들로 분할되어 있을 수 있다.
상기 가비지 코드를 실행하는 단계는, 상기 호출되는 가비지 코드의 첫번째 가비지 코드 체인을 실행하는 단계; 상기 첫번째 가비지 코드 체인과 상기 호출되는 가비지 코드의 두번째 가비지 코드 체인의 오프셋 정보(offset information)를 획득하는 단계; 및 상기 획득된 오프셋 정보에 따라 상기 두번째 가비지 코드 체인을 실행하는 단계;를 포함할 수 있다.하는
상기 호출 코드는, 난수 발생 모듈을 포함할 수 있다.
상기 호출 코드를 실행하는 단계는, 상기 난수 발생 모듈에 의해 생성되는 임의의 난수에 대응되는 하나의 가비지 코드를 선택하는 단계;를 포함할 수 있다.
상기 대상 바이너리 파일은 암호화되어 있을 수 있다.
상기 보호된 바이너리 파일의 실행 방법은, 상기 확인 결과에 따라 상기 가비지 코드의 실행결과가 미리 정해진 기준에 부합하는 경우, 상기 암호화된 대상 바이너리 파일을 복호화하는 단계;를 더 포함할 수 있다.
또한 본 발명의 또 다른 양태에 의하면, 전술한 방법들을 실행하기 위한 프로그램이 기록된 기록매체가 제공된다.
본 발명에 의하면 다음과 같은 효과가 발생한다.
첫째, 본 발명에 의하여 생성된 보호된 바이너리 코드의 특정 포인트를 적절하게 보호할 수 있다.
둘째, 역공학에 의한 대상 바이너리 파일에 대한 분석을 어렵게 만들 수 있음으로써, 보호하고자 하는 대상 바이너리 파일에 대한 보호를 강화할 수 있다.
셋째, 본 발명에 의하여 보안 코드 영역(100)의 다양한 코드들이 실행됨에 있어서, 한정된 영역 내에서 이론적으로 무한대의 실행 루틴 순서가 생성될 수 있다.
넷째, 보안 코드 영역 내의 임의의 포인트를 찍어서 역공학을 하려고 시도하는 경우에도, 본 발명에 의하면, 실행 루틴을 종료할 수 있도록 하였기 때문에 보안 코드 영역에 대한 역공학 분석은 매우 힘들어지게 된다.
도 1은 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법에 의해 생성되는 보호된 바이너리 파일의 구조를 도시하는 도면이다.
도 2는, 본 발명의 몇몇 실시예들에 따라 부가되는 보호 코드 영역의 구조를 도시하고 있는 도면이다.
도 3은, 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법을 설명하기 위한 흐름도이다.
도 4는, 본 발명의 몇몇 실시예들에 따르는 가비지 코드 및 가비지 코드의 체인화를 설명하기 위한 도면이다.
도 5 및 도 6은 본 발명의 몇몇 실시예들에 따라 가비지 코드를 보호 코드 영역에 배치하는 방법을 설명하기 위한 도면들이다.
도 7은, 본 발명의 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법을 설명하기 위한 흐름도이다.
도 8 및 도 9는, 본 발명의 몇몇 실시예들에 따르는 가비지 코드들의 실행 순서를 설명하기 위한 도면들이다.
도 10은, 본 발명의 다른 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법을 설명하기 위한 흐름도이다.
도 11은, 본 발명의 또 다른 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법을 설명하기 위한 흐름도이다.
도 12는, 본 발명의 또 다른 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법을 설명하기 위한 흐름도이다.
도 13은, 본 발명의 또 다른 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법을 설명하기 위한 흐름도이다.
본 발명의 상술한 목적, 특징들 및 장점은 첨부된 도면과 관련된 다음의 상세한 설명을 통해 보다 분명해질 것이다. 다만, 본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예들을 가질 수 있는 바, 이하에서는 특정 실시예들을 도면에 예시하고 이를 상세히 설명하고자 한다.
도면들에 있어서, 층 및 영역들의 두께는 명확성을 기하기 위하여 과장되어진 것이며, 또한, 구성요소(element) 또는 층이 다른 구성요소 또는 층의 "위(on)" 또는 "상(on)"으로 지칭되는 것은 다른 구성요소 또는 층의 바로 위 뿐만 아니라 중간에 다른 층 또는 다른 구성요소를 개재한 경우를 모두 포함한다. 명세서 전체에 걸쳐서 동일한 참조번호들은 원칙적으로 동일한 구성요소들을 나타낸다.
또한, 본 발명과 관련된 공지 기능 혹은 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다. 또한, 본 명세서의 설명 과정에서 이용되는 숫자(예를 들어, 제1, 제2 등)는 하나의 구성요소를 다른 구성요소와 구분하기 위한 식별기호에 불과하다.
이하, 본 발명과 관련된 전자기기에 대하여 도면을 참조하여 보다 상세하게 설명한다. 이하의 설명에서 사용되는 구성요소에 대한 접미사 "모듈" 및 "부"는 명세서 작성의 용이함만이 고려되어 부여되거나 혼용되는 것으로서, 그 자체로 서로 구별되는 의미 또는 역할을 갖는 것은 아니다.
본 명세서에서 설명되는 전자기기는 휴대폰, 스마트 폰(smart phone), 노트북 컴퓨터(laptop computer), 디지털방송용 단말기, PDA(Personal Digital Assistants), PMP(Portable Multimedia Player), 네비게이션 등과 같은 이동 단말기를 포함할 수 있을 뿐만 아니라, 디지털 TV, 데스크탑 컴퓨터 등과 같은 고정 단말기도 포함할 수 있다.
1. 보호된 바이너리 파일의 구조
먼저, 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법에 대해서 설명하기로 한다.
도 1은 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법에 의해 생성되는 보호된 바이너리 파일의 구조를 도시하는 도면이다.
도 1을 참조하면, 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법에 의하면, 보호하고자 하는 대상 바이너리 파일(10)에 대상 바이너리 파일(10)을 보호하기 위한 보호 코드들이 포함되어 있는 보호 코드 영역(100)을 부가하여 보호된 바이너리 파일(P10)을 생성한다.
본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법에 의하면, 대상 바이너리 파일(10)의 특정한 실행 포인트를 의도적으로 숨길 수 있게 된다. 이는, 상기 대상 바이너리 파일(10)의 특정한 실행 포인트(Specific Execution Point, SEP)가 실행되어야 할 때, 상기 특정한 실행 포인트 대신 상기 보호 코드 영역(100) 내의 특정한 포인트(EEP)에 대응되는 코드가 실행됨으로써 상기 특정한 실행 포인트를 숨길 수 있게 된다. 이를 위하여, 본 발명의 몇몇 실시예들에 의해 생성된 보호된 바이너리 파일(P10)의 실행 시, 상기 대상 바이너리 파일(10) 내의 특정한 실행 포인트(OEP) 대신 상기 보호 코드 영역(100) 내의 특정한 포인트(EEP)가 실행될 수 있도록 하는 코드가 상기 보호된 바이너리 파일(P10)에 부가될 수 있다.
예를 들어, 바이너리 파일 형태의 실행 파일은 시작점(엔트리 포인트, Entry Point)가 존재하는 데, 본 발명의 몇몇 실시예들에 의하면 상기 시작점은 의도적으로 숨겨질 수 있으며, 상기 보호된 바이너리 파일이 실행되는 경우, 상기 시작점 대신 상기 보호 코드 영역(100) 내의 다른 포인트(EEP)가 실행될 수 있다.
본 발명의 몇몇 실시예들에 따르면, 상기 대상 바이너리 파일(10)의 특정한 실행 포인트(SEP) 대신 실행되는 상기 보호 코드 영역(100) 내의 상기 특정한 포인트(EEP)에 대응되는 코드들이 상기 보호 코드 영역(100)에 포함되어 있는 다양한 코드들에 의해 정의되는 루틴에 따라서 실행되고 난 후, 상기 보호 코드 영역(100)에 포함된 다양한 코드들이 미리 정해진 기준에 따라 부합되도록 실행되고 나면, 상기 대상 바이너리 파일(10)의 상기 특정한 실행 포인트(SEP)로 점프하여 상기 특정한 실행 포인트(SEP)의 실행 코드가 실행될 수 있다.
즉, 상기 바이너리 파일(10)의 상기 특정 실행 포인트(SEP)를 시작점이라고 가정할 때, 본 발명의 보호방법에 적용되기 전의 바이너리 파일(10)의 경우, 상기 바이너리 파일(10)의 실행 시에, 바로 상기 시작점(SEP)에 대응되는 코드가 실행될 것이나, 본 발명의 보호방법에 의해 보호된 바이너리 파일(P10)이 실행되는 경우, 상기 보호 코드 영역(100) 내의 상기 특정한 포인트(EEP)에 대응되는 코드가 실행되고, 상기 특정한 포인트(EEP)에 대응되는 코드를 포함한 상기 보호 코드 영역(100)에 포함되어 있는 다양한 코드들에 의해 정의되는 루틴들이 정해진 기준에 부합하도록 실행되고 난 후에, 상기 바이너리 파일(10)의 시작점(SEP)로 점프하여 상기 바이너리 파일(10)에 포함된 본래의 코드들이 실행될 수 있다.
보다 더 구체적으로 설명하면, 도 1의 (b)에 도시된 바와 같이, 대상 바이너리 파일(10)에 포함되어 있는 코드들의 일부가 실행되고 있다가(①), 특정 실행 포인트(SEP)에 도달하게 되면, 이하에서 설명하는 다양한 실시예들에 따라서, 보호 코드 영역(100) 내의 특정한 포인트(EEP)로 점프하게 되며(②), 보호 코드 영역(100) 내의 다양한 코드들이 실행되고 난 후에(③), 다시 상기 특정 실행 포인트(SEP)로 점프하여(④), 상기 특정 실행 포인트(SEP)에 이어서 실행되어어야 하는 상기 대상 바이너리 파일(10) 내의 다른 코드들이 실행될 수 있다(⑤).
다른 일 예로, 도 1의 (d)에 도시된 바와 같이, 본 발명의 일 실시예에 따라 생성된 보호된 바이너리 파일(P10)의 특정한 포인트(EEP)에서 코드가 실행될 수 있으며(①), 이어서 보호 코드 영역(100) 내의 다양한 코드들이 실행되며(②), 상기 다양한 코드들이 모두 실행되고 난 후에, 대상 바이너리 파일(10) 내의 특정 실행 포인트(SEP)로 점프한 후(③), 상기 특정 실행 포인트(SEP)에 이어서 실행되어어야 하는 상기 대상 바이너리 파일(10) 내의 다른 코드들이 실행될 수 있다(④).
이에 따라, 보호되지 않은 상기 바이너리 파일(10)을 실행하는 경우, 상기 바이너리 파일(10)을 실행 명령이 입력되는 시점(명령 시점)으로부터 상기 시작점(SEP)에 대응되는 코드가 실행되기 시작하는 시점(엔트리 포인트 실행 시점)까지 소요되는 시간이 제1 시간이라고 하면, 본 발명의 몇몇 실시예들에 의해 보호된 바이너리 파일(P10)을 실행하는 경우, 명령 시점으로부터 상기 시작점(SEP)에 대응되는 코드가 실행되기 시작하는 시점까지 소요되는 시간(제2 시간)은 상기 제1 시간 보다 더 길 수 있다.
한편, 상기 제2 시간과 상기 제1 시간 사이의 차는 상기 보호된 바이너리 파일(P10)을 실행할 때마다 랜덤하게 달라질 수 있다. 상기 제2 시간과 상기 제1 시간 사이의 차이가 보호된 바이너리 파일(P10)의 실행 시마다 랜덤하게 달라지는 이유에 대해서는, 나중에 구체적으로 설명하는 본 발명의 몇몇 실시예들에 따르는 보호된 바이너리 파일의 실행 방법에 대한 설명에 의해 명확하게 이해될 수 있을 것이다.
이하에서는, 설명의 편의를 위하여, 본래의 대상 바이너리 파일의 시작점은 '오리지널 엔트리 포인트(Original Entry Point)'라고 부르고, 이와 구별되게, 보호 코드 영역(100) 내에 존재하는 상기 특정 포인트(EEP)는, '실행 엔트리 포인트(Executing Entry Point)'라고 부르기로 한다.
또한, 이하에서는, 설명의 편의를 위하여, 본 발명의 일 실시예에 따라 숨겨지는 상기 대상 바이너리 파일(10)의 특정한 실행 포인트(SEP)를 시작점인 경우를 예로 들어 설명할 것이다. 상기 숨겨지는 특정한 실행 포인트(SEP)는 반드시 시작점일 필요는 없으며, 특별히 보호하고자 하는 코드들이 실행되는 다른 포인트들이 상기 특정한 실행 포인트(SEP)가 될 수도 있음을 명확히 밝혀둔다.
도 2는, 본 발명의 몇몇 실시예들에 따라 부가되는 보호 코드 영역의 구조를 도시하고 있는 도면이다.
도 2를 참조하면, 본 발명에 의한 보호 코드 영역(100)은, 가비지 코드 영역(Garbage code region, 110), 호출 코드 영역(calling code region, 120), 판단 코드 영역(determination code region, 130), 주소 DB 영역(address database region, 140) 및 복호화 정보 영역(decrypting information region, 150)을 포함할 수 있다.
상기 가비지 코드 영역(110)은, 이하에서 자세히 설명할 복수의 가비지 코드들(GC)이 배치되는 영역이다. 상기 가비지 코드들(GC)의 적어도 일부는 체인화되어 상기 가비지 코드 영역(110) 내에 배치될 수 있다. 가비지 코드들(GC)의 기능 및 구조, 그리고 가비지 코드들(GC)의 체인화에 대해서는 나중에 자세히 설명하기로 한다.
상기 호출 코드 영역(120)은, 상기 가비지 코드 영역(110)에 포함되어 있는 복수의 가비지 코드들(GC) 중 하나를 랜덤하게 호출하기 위한 호출 코드(CC)를 포함하고 있는 영역이다. 상기 호출 코드(CC)는, 난수 발생 모듈을 포함하고 있을 수 있으며, 상기 호출 코드(CC)는, 상기 난수 발생 모듈에 따라 발생되는 난수를 확인하고, 확인된 난수에 대응되는 하나의 가비지 코드(GC)를 호출할 수 있다.
상기 호출 코드 영역(120)은, 상기 보호 코드 영역(100)에 포함된 다양한 코드들이 수행됨에 따라서, 반복적으로 수행될 수 있으며, 상기 호출 코드 영역(120)이 수행될 때마다 호출되는 가비지 코드들(GC)은 언제나 랜덤하게 호출될 수 있기 때문에, 상기 호출 코드 영역(120)에 의해 한번 호출되었던 가비지 코드(GC)가 상기 보호 코드 영역(100)에 포함된 코드들에 의해 정의된 루틴을 빠져나가기 전에 다시 호출될 수 있다.
상기 판단 코드 영역(130)은, 상기 보호 코드 영역(100)에 포함되어 있는 다양한 코드들이 정상적으로 실행되었는지 여부를 판단하기 위한 판단 코드(DC)를 포함하고 있는 영역이다.
예를 들어, 상기 판단 코드 영역(130)에 포함된 상기 판단 코드(DC)가 호출되면, 상기 판단 코드(DC)가 호출되기 이전에 상기 다양한 코드들의 실행 결과가 미리 정해진 기준에 부합하는지 여부에 대해서 판단할 수 있다. 상기 미리 정해진 기준은 매우 다양할 수 있으며, 상기 미리 정해진 기준의 몇몇에 대해서 나중에 구체적으로 설명하기로 한다.
한편, 상기 실행 결과가 상기 미리 정해진 기준에 부합하는 경우, 상기 보호 코드 영역(100)에 포함되어 있는 다양한 코드들에 의해 규정되는 루틴은 종료될 수 있으며, 이에 따라, 상기 대상 바이너리 파일(10)의 오리지널 엔트리 포인트(OEP)로 점프하여 상기 오리지널 엔트리 포인트(OEP)에 대응되는 코드가 실행될 수 있다.
반면, 상기 실행 결과가 상기 미리 정해진 기준에 부합하지 않는 경우, 상기 루틴이 종료되지 않을 수 있으며, 가비지 코드(GC) 및/또는 상기 호출 코드(CC)들이 다시 호출되고 실행될 수 있다.
상기 판단 코드(DC)는 가비지 코드의 실행 결과 값을 확인하기 위한 제1 판단 코드(DC1)를 포함할 수 있다.
상기 판단 코드(DC)는 상기 가비지 코드의 실행 회수를 결정하기 위한 난수 발생 모듈을 포함할 수 있다.
상기 판단 코드(DC)는 상기 가비지 코드의 실행 회수가 결정된 횟수만큼 판단하기 위한 제2 판단 코드(DC2)를 포함할 수 있다.
상기 판단 코드(DC)는 상기 호출되어 실행된 가비지 코드가 루틴 종료 가비지 코드(REGC)인지 여부를 판단하기 위한 제2 판단 코드(DC2)를 포함할 수 있다.
상기 판단 코드(DC)는 상기 호출되어 실행된 가비지 코드가 보안 모듈 가비지 코드(SMGC)인지 여부를 판단하기 위한 제3 판단 코드(DC3)를 포함할 수 있다.
상기 주소 DB 영역(address database region, 140)은, 상기 보호 코드 영역(100)에 포함되어 있는 다양한 코드들을 실행하기 위한 각 종 주소들을 포함하고 있는 영역이다.
상기 주소 DB 영역(140)은, 상기 호출 코드(CC)의 시작 주소를 포함하고 있을 수 있다.
상기 주소 DB 영역(140)은, 상기 판단 코드(DC)의 시작 주소를 포함하고 있을 수 있다.
상기 주소 DB 영역(140)은, 상기 가비지 코드들(GC)의 시작 주소(Starting Address)를 포함하고 있을 수 있다.
만약, 상기 가비지 코드들(GC)이 체인화되어 있는 경우, 상기 주소 DB 영역(140)은, 상기 가비지 코드 체인들(GCC)의 시작 주소를 포함하고 있을 수 있다.
만약, 상기 가비지 코드들(GC)이 체인화되어 있는 경우, 상기 주소 DB 영역(140)은, 하나의 가비지 코드(GC)를 구성하는 복수의 가비지 코드 체인들(GCC) 중 가장 선행하는 가비지 코드 체인의 시작 주소만 포함할 수 있고, 나머지 후행하는 가비지 코드체인들의 시작 주소는 포함하고 있지 않을 수 있다. 이에 대해서는, 나중에 보다 더 자세히 설명한다.
복호화 정보 영역(150)은, 상기 대상 바이너리 파일(10)이 암호화되어 있는 경우, 상기 대상 바이너리 파일(10)을 복호화 하는 데 필요한 정보들을 포함하고 있다.
예를 들어, 상기 복호화 정보 영역(150)에는, 상기 암호화된 바이너리 파일(10)을 복호화 하기 위한 복호키(decryption key)를 포함하고 있을 수 있다.
다른 예를 들어, 상기 복호화 정보 영역(150)에는, 상기 암호화된 바이너리 파일(10)을 복호화 하기 위한 복호 코드(decryption code, DEC)를 포함하고 있을 수 있다.
복호화 정보 영역(150)은, 상기 대상 바이너리 파일(10)을 암호화하여 보다 더 대상 바이너리 파일(10)의 보호 수준을 높이고자 할 때만 선택적으로 포함될 수 있는 영역으로, 반드시 복호화 정보 영역(150)이 본 발명의 보호 코드 영역(100)에 포함되어야 하는 것은 아님을 밝혀둔다.
한편, 도면에 도시되지는 않았지만, 상기 보호 코드 영역(100)에는, 전술한 코드들 이외의 상기 보호 코드 영역(100)에 포함된 다양한 코드들을 실행하는 데 필요한 다른 코드들이 포함될 수 있다. 예를 들어, 상기 보호 코드 영역(100)에 포함되어 있는 다양한 코드들을, 이하에서 설명한 본 발명의 다양한 실시예들에 따라 실행하기 전에, 실행 환경에 관련된 정보를 백업하기 위한 코드들(이하, 실행 준비 코드(EPC))이 상기 보호 코드 영역(100)에 포함될 수 있다. 예를 들어, 도 1의 (b)에 도시된 바와 같이, 대상 바이너리 파일(10)의 특정 실행 포인트(SEP)에 도달하게 되면, 상기 특정 실행 포인트(SEP)에 대한 정보 및 그에 따른 다른 실행 환경들을 백업할 필요가 있는데, 전술한 실행 준비 코드(EPC)는 이와 같은 기능을 수행하는 코드이다. 만약, 상기 보호 코드 영역(100)에 전술한 바와 같은 실행 준비 코드(EPC)가 포함되어 있다면, 상기 실행 준비 코드는 상기 보호 코드 영역(100)에 포함되어 있는 다른 코드들에 대하여 가장 우선적으로 실행되어야 할 것이다.
다만, 상기 실행 준비 코드(EPC)는 본 발명의 핵심에는 크게 영향을 미치지 않는 것으로써, 이하에서는 설명의 편의를 위하여, 상기 실행 준비 코드(EPC)에 대한 자세한 설명은 생략하기로 한다.
그러나, 이하에서 설명하는 다양한 실시예에 따른 제어방법들에 있어서, 상기 실행 준비 코드(EPC)가 상기 보호 코드 영역(100)에 포함되어 있는 경우, 각 단계들의 실행 이전에 상기 실행 준비 코드(EPC)가 먼저 실행되는 것을 배제하는 것은 아님을 명확히 밝혀둔다.
또한, 도면에 도시되지는 않았지만, 상기 보호 코드 영역(100)에는, 전술한 코드들 이외의 상기 보호 코드 영역(100)에 포함된 다양한 코드들을 실행하는 데 필요한 또 다른 코드들이 포함될 수 있다. 예를 들어, 상기 보호 코드 영역(100)에 포함되어 있는 다양한 코드들을 실행한 후, 보호 코드 영역(100)이 실행되기 이전의 실행 환경을 복구하기 위한 코드들(이하, 복구 코드(RC)) 이 상기 보호 코드 영역(100)에 포함될 수 있다. 만약, 상기 보호 코드 영역(100)에 전술한 바와 같은 실행 준비 코드(EPC)가 포함되어 있다면, 상기 실행 준비 코드(EPC)에 의해 보호 코드 영역(100)의 다양한 코드들이 실행되기 이전의 실행 환경에 관련된 정보들이 백업될 수 있는데, 상기 다양한 코드들이 실행되고 난 후, 상기 복구 코드(RC)에 의해 보호 코드 영역(100)의 다양한 코드들이 실행되기 이전의 상태로 다시 복구될 수 있을 것이다.
그러나, 이하에서 설명하는 다양한 실시예에 따른 제어방법들에 있어서, 상기 복구 코드(RC)가 상기 보호 코드 영역(100)에 포함되어 있는 경우, 각 실시예들의 마지막 단계를 모두 실행한 후에 상기 복구 코드(RC)가 실행될 수 있음을 명확히 밝혀둔다.
다만, 상기 복구 코드(EPC)는 본 발명의 핵심에는 크게 영향을 미치지 않는 것으로써, 이하에서는 설명의 편의를 위하여, 상기 복구 코드(RC)에 대한 자세한 설명은 생략하기로 한다.
2. 바이너리 파일의 보호방법(보호된 바이너리 파일의 생성방법)
이하에서는, 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법에 대해서 설명한다.
도 3은, 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법을 설명하기 위한 흐름도이다.
도 3을 참조하면, 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법은, 상기 대상 바이너리 파일을 획득하는 단계(S100), 복수의 가비지 코드를 생성하는 단계(S200), 상기 가비지 코드를 보호 코드 영역의 제1 영역에 배치하는 단계(S300), 상기 배치된 가비지 코드 호출을 위한 호출 코드를 상기 보호 코드 영역의 제2 영역에 배치하는 단계(S400) 및 상기 보호 코드 영역을 상기 대상 바이너리 파일에 부가하여 보호된 바이너리 파일을 생성하는 단계(S500)를 포함할 수 있다.
이하에서, 각 단계에 대해 구체적으로 설명한다.
이하의 설명에서는, 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법이 전자기기에 의해 수행되는 것을 예로 들어 설명한다. 상기 전자기기는, 데스크탑, 랩탑, 태블릿PC, 스마트폰, PDA(Personal Digital Assistant), 웹 서버 등과 같은 전자기기를 포함할 수 있다. 한편, 본 상기 전자기기는 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법은 그 방법을 수행하기 위한 프로그램을 기록하고 있는 메모리를 구비할 수 있으며, 상기 프로그램의 동작에 따라 상기 전자기기의 각 구성요소들을 적절히 제어하기 위한 제어부를 구비함으로써, 이하에서 설명하는 방법들을 수행할 수 있다.
전자기기는, 상기 대상 바이너리 파일을 획득할 수 있다(S100).
예를 들어, 전자기기는 보호하고자 하는 대상 바이너리 파일(10)을 사용자로부터 선택 받기 위한 사용자 인터페이스를 제공할 수 있으며, 사용자는 제공되는 사용자 인터페이스를 통하여, 대상 바이너리 파일(10)에 대한 선택 입력을 할 수 있다.
다른 예를 들어, 전자기기는 보호하고자 하는 대상 바이너리 파일(10)을 상기 전자기기에 설치되어 있는 운영체제(Operating System, OS)로부터 획득할 수 있다. 즉, 전자기기의 운영체제의 선택에 따라 상기 대상 바이너리 파일(10)이 선택될 수 있으며, 선택된 대상 바이너리 파일(10)을 보호된 바이너리 파일(P10)로 변환하여 줄 것을 상기 운영체제가 요청함에 따라, 상기 대상 바이너리 파일(10)을 획득할 수 있다.
또 다른 예를 들어, 전자기기는 보호하고자 하는 대상 바이너리 파일(10)을 상기 전자기기에 설치되어 있는 다른 어플리케이션(application) 즉, 다른 프로그램으로부터 획득할 수 있다.
전자기기는, 상기 대상 바이너리 파일(10)을 획득한 후, 복수의 가비지 코드를 생성할 수 있다(S200).
가비지 코드는, 가비지 코드를 실행한 결과값이 미리 정해진 연산 결과값이 나오는 코드를 의미한다. 미리 정해진 연산 결과값이 '0'으로 결정되어 있는 경우, 상기 가비지 코드는, 가비지 코드를 실행한 결과값이 '0'이 나오는 코드를 의미한다. 예를 들어, 상기 미리 정해진 연산 결과값이 '0'으로 결정되어 있는 경우, 코드에 의해 실행되는 연산들이 '1+2-3+4-1-2-1'과 같은 때, 상기 연산의 결과의 값은 '0'가 되는데, 이와 같은 코드를 가비지 코드라고 한다. 다른 예를 들어, 상기 미리 정해진 연산 결과값이 '50'으로 결정되어 있는 경우, 코드에 의해 실행되는 값이 '50'이 되는 때, 이와 같은 코드를 가비지 코드라고 할 수 있다.
상기 전자기기는, 상기 복수의 가비지 코드들 각각을 생성함에 있어서, 가비지 코드들의 길이를 랜덤하게 결정할 수 있다. 예를 들어, 하나의 가비지 코드의 길이는 랜덤하게 10으로 결정이 될 수 있으며, 다른 하나의 가비지 코드의 길이는 랜덤하게 20으로 결정될 수 있다.
상기 전자기기는, 상기 복수의 가비지 코드들 각각을 생성함에 있어서, 가비지 코드들 각각에 포함되는 연산내용들을 무작위로 결정할 수 있다. 예를 들어, 연산 결과가 미리 정해진 연산 결과값이 되기만 한다면, 가비지 코드들에 포함되는 코드 내용은 어떠한 방식으로 결정되어도 무방하다.
한편, 상기 전자기기는, 가비지 코드를 생성한 후, 상기 생성된 가비지 코드들의 적어도 일부를 체인화할 수 있다.
가비지 코드들의 체인화라함은, 하나의 가비지 코드를 복수의 가비지 코드 체인으로 분할하는 것을 의미한다.
이 때, 가비지 코드가 분할되어 생성된 각각의 코드 조각들을 가비지 코드 체인이라고 부르기로 한다.
상기 가비지 코드 체인은, 가비지 코드 체인을 실행하였을 때 실행 결과값이 미리 정해진 연산 결과값이 될 필요는 없다. 그러나, 하나의 가비지 코드를 구성하는 모든 가비지 코드 체인들이 순차적으로 실행되면, 그 실행결과값은 미리 정해진 연산 결과값이 되어야 할 것이다.
도 4는, 본 발명의 몇몇 실시예들에 따르는 가비지 코드 및 가비지 코드의 체인화를 설명하기 위한 도면이다.
도 4를 참조하면, 제1 가비지 코드(GC1) 내지 제N 가비지 코드(GCN)이 도시되어 있고, 각각의 가비지 코드들(GC1, GC2, GC3, GCN)이 체인화된 것이 도시되어 있다.
특히, 제1 가비지 코드(GC1)는, 1-1 가비지 코드 체인(GCC11) 내지 1-4 가비지 코드 체인(GCC14)들로 분할(체인화)되어 있는 것이 예시적으로 도시되어 있으며, 제2 가비지 코드(GC2)는, 2-1 가비지 코드 체인(GCC21) 내지 2-3 가비지 코드체인(GCC23)들로, 제3 가비지 코드(GC3)는, 3-1 가비지 코드 체인(GCC31) 내지 3-3 가비지 코드 체인(GCC33)들로 체인화되어 있는 것들이 예시적으로 도시되어 있다. 다만, 모든 생성된 가비지 코드들이 체인화될 필요는 없는데, 제N 가비지 코드(GCN)는 체인화되지 않은 것이 도 3에 예시적으로 도시되어 있다. 이 때, 설명의 편의 상, 제N 가비지 코드(GCN)는 N-1 가비지 코드 체인(GCN1)이라고 부를 수도 있다.
가비지 코드(GC)를 체인화함에 있어서, 하나의 가바지 코드를 몇 개의 가비지 코드 체인들(GCC)로 체인화할지는 랜덤하게 결정될 수 있다. 즉, 하나의 가비지 코드(GC)는 4개의 가비지 코드 체인들(GCC)로 체인화될 수도 있고, 다른 하나의 가비지 코드(GC)는 3개의 가비지 코드 체인들(GCC)로 체인화될 수도 있다.
가비지 코드 체인들(GCC)의 길이는 다양한 방식으로 결정될 수 있다.
예를 들어, 제1 가비지 코드(GC1)를 체인화 함에 있어서, 상기 제1 가비지 코드(GC1)를 4개의 가비지 코드 체인들(GCC)로 체인화한다고 가정할 때, 제1 가비지 코드(GC1)를 4등분하여 각각의 가비지 코드 체인들(GCC)을 생성할 수도 있으며, 다른 예를 들어, 도 4의 (b)에 도시된 바와 같이 가비지 코드체인들(GCC)의 길이는 랜덤하게 결정될 수도 있다.
이어서, 전자기기는, 상기 가비지 코드를 보호 코드 영역의 제1 영역(예를 들어, 가비지 코드 영역(110))에 배치할 수 있다(S300).
도 5 및 도 6은 본 발명의 몇몇 실시예들에 따라 가비지 코드를 보호 코드 영역에 배치하는 방법을 설명하기 위한 도면들이다.
도 5를 참조하면, 전자기기는 생성된 복수의 가비지 코드를 배치하기 위한 배치순서를 결정할 수 있다. 상기 가비지 코드들(GC)의 배치 순서는 랜덤하게 결정될 수 있다.
예를 들어, 도 5의 (a)에 도시된 바와 같이 가비지 코드를 배치하기 위한 배치 순서가 결정될 수 있다.
만약 도 5의 (a)에 도시된 바와 같이 가비지 코드의 배치순서가 결정된다면, 전자기기는 결정된 배치 순서에 따라 가비지 코드들을 보호 코드 영역(100)의 가비지 코드 영역(110) 내에 배치할 수 있다.
한편, 도 5의 (b)에는 배치되는 가비지 코드들 사이에 소정의 간격 없이 배치되어 있는 것이 예시적으로 도시되어 있으나, 도 5의 (c)에 도시된 바와 같이, 전자기기는 가비지 코드들 사이에 소정의 간격이 존재하도록 상기 가비지 코드들을 배치할 수도 있다.
한편, 전자기기는, 전술한 바와 같이, 생성된 가비지 코드들이 체인화된 경우, 상기 가비지 코드 체인들(GCC)의 배치순서를 결정할 수 있다. 상기 가비지 코드 체인들(GCC)의 배치 순서는 랜덤하게 결정될 수 있다.
예를 들어, 도 6의 (a)에 도시된 바와 같이 가비지 코드체인들 각각을 배치하기 위한 배치 순서가 결정될 수 있다.
만약 도 6의 (a)에 도시된 바와 같이 가비지 코드 체인들의 배치순서가 결정된다면, 전자기기는 결정된 배치순서에 따라 가비지 코드 체인들을 보호 코드 영역(100)의 가비지 코드 영역(110) 내에 배치할 수 있다.
이 때, 하나의 가비지 코드를 구성하는 적어도 하나 이상의 가비지 코드 체인들은 함께 배치되는 것이 아니라 서로 떨어져 있는 상태로 배치될 수 있다. 예를 들어, 도 6의 (b)에 도시된 바와 같이, 제1 가비지 코드(GC1)를 구성하고 있는 1-1 가비지 코드 체인(GCC11) 내지 1-4 가비지 코드 체인(GCC14)은 함께 붙어 있도록 배치되지 않고, 서로 떨어져서 배치될 수 있다.
또한, 하나의 가비지 코드를 구성하는 적어도 하나 이상의 가비지 코드 체인들은 분할된 순서에 따라 배치되는 것이 아니라 분할 순서와 무관하게 배치될 수 있다. 예를 들어, 도 6의 (b)에 도시된 바와 같이, 제3 가비지 코드(GC3)를 구성하고 있는 3-1 가비지 코드 체인(GCC31) 내지 3-3 가비지 코드 체인(GCC33)의 경우, 그 배치 순서에 있어서, 가장 선행하는 3-1 가비지 코드 체인(GCC31)이 후행하는 두번째 3-2 가비지 코드 체인(GCC32) 보다 더 뒤에 배치될 수 있다.
한편, 도 6의 (b)에는 배치되는 가비지 코드 체인들 사이에 소정의 간격 없이 배치되어 있는 것이 예시적으로 도시되어 있으나, 도 6의 (c)에 도시된 바와 같이, 전자기기는 가비지 코드 체인들 사이에 소정의 간격이 존재하도록 상기 가비지 코드 체인들을 배치할 수도 있다.
전술한 바와 같이, 가비지 코드들(GC)을 가비지 코드 영역(110) 내에 배치를 완료하고 나면, 전자기기는 배치된 가비지 코드들(GC) 각각의 시작 주소(이하, 가비지 어드레스)를 상기 보호 코드 영역(100) 내의 제4 영역(예를 들어, 주소 DB 영역(140))에 기록할 수 있다.
또는, 전자기기는 배치된 가비지 코드 체인들(GCC)의 시작 주소 중 적어도 일부(이하, 가비지 체인 어드레스)를 상기 주소 DB 영역(140)에 기록할 수 있다.
특히, 전자기기는 각각의 가비지 코드(GC)를 구성하는 가비지 코드 체인들(GCC) 중 가장 선행하는 가비지 코드 체인의 시작 주소만을 기록하고, 나머지 후행하는 가비지 코드 체인들의 주소는 기록하지 않을 수 있다. 예를 들어, 제1 가비지 코드(GC1)를 구성하는 1-1 가비지 코드 체인(GCC11) 내지 1-4 가비지 코드 체인(GCC14) 중 1-1 가비지 코드 체인(GCC11)의 주소만 상기 주소 DB 영역(140)에 기록될 수 있으며, 1-2 가비지 코드 체인(GCC12) 내지 1-4 가비지 코드 체인(GCC14)의 주소는 기록되지 않을 수 있다.
한편, 전자기기는, 상기 가비지 코드(GC) 및/또는 상기 가비지 코드 체인(GCC)에 해당하는 가비지 코드(GC) 및/또는 가비지 코드 체인(GCC)의 실행 후에 호출하고자 하는 다른 코드들에 대한 오프셋을 기록할 수 있다.
예를 들어, 만약 가장 선행하는 가비지 코드 체인의 주소만을 상기 주소 DB 영역(140)에 기록하는 경우, 하나의 온전한 가비지 코드(GC)를 순차적으로 실행하기 위하여, 상기 가비지 코드 체인들(GCC) 각각에는 후행하는 가비지 코드 체인들에 대한 오프셋(offset)이 부가될 수 있다.
다른 예를 들어, 가비지 코드들(GC) 각각에 대한 가장 후행하는 가비지 코드 체인에는, 해당 가비지 코드를 실행한 후 실행하고자 하는 다른 코드에 대한 오프셋이 부가될 수 있다. 예를 들어, 가비지 코드(GC)가 모두 실행된 후에 상기 판단 코드(DC)를 실행하고자 하면, 해당 가비지 코드(GC)의 가장 후행하는 가비지 코드 체인에는 상기 판단 코드(DC)에 대한 오프셋이 부가될 수 있으며, 가비지 코드(GC)가 모두 실행된 후에 상기 호출 코드(CC)를 실행하고자 하면, 해당 가비지 코드(GC)의 가장 후행하는 가비지 코드 체인에는 상기 호출 코드(CC)에 대한 오프셋이 부가될 수 있을 것이다.
상기 오프셋은 해당 가비지 코드(GC) 및/또는 해당 가비지 코드 체인(GCC)과 호출하고자 하는 다른 코드들 사이의 벡터값을 의미한다.
상기 오프셋을 결정하는 기준점은 상기 선행하는 가비지 코드의 가장 마지막 주소와 상기 후행하는 가비지 코드(또는 다른 코드)의 가장 첫 주소가 될 수 있다.
예를 들어, 1-1 가비지 코드 체인(GCC11)과 1-1 가비지 코드 체인(GCC11)의 후행하는 가비지 코드 체인인 1-2 가비지 코드 체인(GCC12) 사이의 오프셋값은 상기 1-1가비지 코드 체인(GCC11)의 가장 마지막 주소와 상기 1-2 가비지 코드 체인(GCC12)의 가장 첫 주소 사이의 차이로 결정될 수 있다.
또는, 상기 오프셋을 결정하는 기준점은 상기 선행하는 가비지 코드의 가장 첫 주소와 상기 후행하는 가비지 코드(또는 다른 코드)의 가장 첫 주소가 될 수 있다.
예를 들어, 2-2 가비지 코드 체인(CC22)과 2-2 가비지 코드 체인(GCC22)의 후행하는 가비지 코드 체인인 2-3 가비지 코드 체인(GCC23) 사이의 오프셋값은 상기 2-2가비지 코드 체인(GCC22)의 가장 첫 주소와 상기 2-3 가비지 코드 체인(GCC23)의 가장 첫 주소 사이의 차이로 결정될 수 있다.
상기 오프셋은 정수로 표현될 수 있으며, 상기 오프셋이 0 보다 큰 정수인 경우, 상기 후행하는 가비지 코드 체인이 상기 선행하는 가비지 코드 체인보다, 상기 가비지 코드 영역(110) 내에서, 더 뒤에 배치되어 있음을 의미하는 것일 수 있으며, 상기 오프셋이 0 보다 작은 정수인 경우, 상기 후행하는 가비지 코드 체인이 상기 선행하는 가비지 코드 체인보다, 상기 가비지 코드 영역(110) 내에서, 더 앞에 배치되어 있음을 의미하는 것일 수 있다.
예를 들어, 도 6을 참조하면, 1-1 가비지 코드 체인(GCC11)에 부가되는 오프셋은, 후행하는 1-2 가비지 코드 체인(GCC12)가 선행하는 1-1가비지 코드 체인(GCC11) 보다 더 뒤에 배치되어 있으므로 0 보다 큰 정수일 수 있으나, 3-1 가비지 코드 체인(GCC31)에 부가되는 오프셋은, 후행하는 3-2 가비지 코드 체인(GCC32)가 선행하는 3-1 가비지 코드 체인(GCC31) 보다 더 앞에 배치되어 있으므로 0 보다 작은 정수일 수 있다.
전자기기는, 상기 배치된 가비지 코드 호출을 위한 호출 코드를 상기 보호 코드 영역의 제2 영역(예를 들어, 호출 코드 영역(120))에 배치할 수 있다(S400).
한편, 도면에 도시하지는 않았지만, 전자기기는, 상기 보호 코드 영역(100)에 포함되어 있는 다양한 코드들이 정상적으로 실행되었는지 여부를 판단하기 위한 판단 코드(DC)를 상기 보호 코드 영역(100)의 제3 영역(예를 들어, 판단 코드 영역(130))에 배치할 수 있다.
나아가, 만약 대상 바이너리 파일(10)을 암호화하여 보호 정도를 더 높이기고자 하는 경우, 상기 대상 바이너리 파일(10)은 암호화될 수 있으며, 전자기기는 상기 암호화된 대상 바이너리 파일(10)을 복호화하기 위한 복호 정보를 상기 보호 코드 영역(100) 내의 제5 영역(예를 들어, 복호화 정보 영역(150))에 배치시킬 수 있다.
전자기기는, 상기 보호 코드 영역(100)을 상기 대상 바이너리 파일(10)에 부가하여 보호된 바이너리 파일(P10)을 생성할 수 있다(S500).
한편, 전자기기는, 상기 보호 코드 영역(100)에 배치된 전술한 다양한 코드들 중 하나를 선택하고, 선택된 코드들을 상기 보호된 바이너리 파일(P10)의 특정한 포인트(EEP)로 지정할 수 있다. 예를 들어, 보호된 바이너리 파일(P10)을 이용하여 보호하고자 하는 대상 바이너리 파일(10)의 상기 특정 실행 포인트(SEP)가 오리지널 엔트리 포인트(OEP)인 경우, 상기 보호된 바이너리 파일(P10)의 실행 포인트(EP)가 상기 다양한 코드들 중 하나로 지정될 수 있다.
상기 특정한 포인트(EEP)로 지정되는 이하에서 설명하는 다양한 실시예들의 경우에 따라 조금씩 달라질 수 있다. 다만, 이하의 실시예에서 자세히 설명하지 않더라도, 만약 상기 보호 코드 영역(100) 내에 전술한 실행 준비 코드(EPC)가 포함되어 있는 경우라면, 실제로 상기 특정한 포인트(EEP)는 상기 실행 준비 코드(EPC)로 지정될 수 있으며, 실행 준비 코드(EPC) 이후에 실행되는 코드들이 이하에서 설명하는 실시예들의 각각의 코드들이 될 수 있을 것이다. 즉, 이하에서, 가비지 코드(GC)가 특정한 포인트(EEP)로 지정되는 것을 예로 들어 설명하는 경우라 하여도, 실제 가비지 코드(GC)가 아닌 상기 실행 준비 코드(EPC)가 특정한 포인트(EEP)로 지정되어 있으며, 상기 실행 준비 코드(EPC)의 실행 후에 상기 가비지 코드(GC)가 호출되어 실행될 수 있는 것이다. 다른 의미로, 이하에서 설명하는 다양한 예들에 있어서, 특정한 포인트(EEP)로 지정된 다양한 코드들이 호출/실행되기 이전에, 보호 코드 영역(100) 내에 전술항 실행 준비 코드(EPC)가 포함되어 있는 경우라면, 상기 다양한 코드들이 호출/실행되기 이전에 우선적으로 상기 실행 준비 코드(EPC)가 호출/실행될 수 있다.
이상, 본 발명의 몇몇 실시예들에 따르는, 바이너리 파일의 보호방법, 즉 바이너리 파일의 보호를 위하여 다양한 코드들을 포함하는 보호 코드 영역을 생성하고 생성된 보호 코드 영역을 상기 대상 바이너리 파일에 부가하여 보호된 바이너리 파일을 생성하는 방법에 대하여 설명하였다.
이하에서는, 본 발명의 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법에 대하여 설명하기로 한다. 이하에서, 설명하는 보호된 바이너리 파일의 실행방법에 대한 설명을 통하여, 전술한 보호 코드 영역 내의 다양한 코드들의 기능과 역할이 보다 더 명확해질 것이다.
3. 보호된 바이너리 파일의 실행방법
(1) 제1 실시예
도 7은, 본 발명의 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법을 설명하기 위한 흐름도이다.
도 7을 참조하면, 본 발명의 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법은, 상기 보호 코드 영역에 배치된 복수의 가비지 코드들 중 하나의 가비지 코드를 호출하기 위한 호출 코드를 실행하는 단계(S1000), 상기 호출 코드의 실행에 의해 호출되는 가비지 코드를 실행하는 단계(S1100), 상기 호출된 가비지 코드의 실행 결과를 확인하는 단계(S1200) 및 상기 확인 결과에 따라 상기 가비지 코드의 실행 결과가 미리 정해진 연산 결과값이 아닌 경우, 상기 보호된 바이너리 파일의 실행 루틴을 종료시키는 단계(S1300)를 포함할 수 있다.
이하, 각 단계에 대해서 보다 자세히 설명하기로 한다.
이하의 설명에서 '보호된 바이너리 코드'라 함은, 전술한 본 발명의 바이너리 파일의 보호방법에 의해 생성된 보호된 바이너리 코드를 의미한다.
한편, 이하의 설명에서는, 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법이 전자기기에 의해 수행되는 것을 예로 들어 설명한다. 상기 전자기기는, 데스크탑, 랩탑, 태블릿PC, 스마트폰, PDA(Personal Digital Assistant) 등과 같은 전자기기를 포함할 수 있다. 한편, 본 상기 전자기기는 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법은 그 방법을 수행하기 위한 프로그램을 기록하고 있는 메모리를 구비할 수 있으며, 상기 프로그램의 동작에 따라 상기 전자기기의 각 구성요소들을 적절히 제어하기 위한 제어부를 구비함으로써, 이하에서 설명하는 방법들을 수행할 수 있다. 또한, 보호된 바이너리 파일의 실행방법을 수행하는 전자기기는, 전술한 바이너리 파일의 보호방법을 수행하는 전자기기와 다른 전자기기일 수 있다. 즉, 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법과 본 발명의 다른 몇몇 실시예들에 따르는 보호된 바이너리 파일의 보호방법은 서로 다른 전자기기에서 수행될 수 있는 것이며, 동일한 전자기기에서 수행되어어야 하는 것은 아니다.
나아가, 이하에서 설명하는 보호된 바이너리 코드의 실행방법은, 상기 보호된 바이너리 코드에 부가되어 있는 보호 코드 영역(100)에 기록되어 있는 다양한 코드들의 조합에 의해 수행될 수 있다. 이 때, 상기 보호 코드 영역(100)에 기록되어 있는 다양한 코드들은 전술한 가비지 코드(GC), 호출 코드(CC), 판단 코드(DC) 등을 포함할 수 있으며, 이 외에도 이하에서 설명하는 실행 방법에 따른 루틴을 실행시키기 위한 다른 코드들도 포함하고 있을 수 있다.
전자기기는, 상기 보호 코드 영역(100)에 배치된 복수의 가비지 코드들(GC) 중 하나의 가비지 코드를 호출하기 위한 호출 코드(CC)를 실행할 수 있다(S1000).
단계 S1000은, 상기 보호된 바이너리 파일(P10)의 실행에 따라 가장 먼저 수행되는 단계일 수 있다. 즉, 상기 보호된 바이너리 파일(P10)의 생성 시에, 상기 바이너리 파일(10)의 오리지널 엔트리 포인트(OEP)를 의도적으로 숨기기 위하여, 상기 오리지널 엔트리 포인트(OEP) 대신 실행되는 실행 엔트리 포인트(EEP)가 호출 코드(CC)의 시작주소로 설정된 경우에, 상기 단계 S1000은 상기 보호된 바이너리 파일(P10)의 실행에 따라 가장 먼저 수행될 수 있다.
또는, 단계 S1000은, 상기 보호된 바이너리 파일(P10)의 상기 보호 코드 영역(100) 내에 있는 다른 코드들의 실행에 따라 상기 호출 코드(CC)가 호출될 때 수행될 수 있다. 예를 들어, 상기 보호된 바이너리 파일(P10)의 생성 시에, 상기 바이너리 파일(10)의 오리지널 엔트리 포인트(OEP)를 의도적으로 숨기기 위하여, 상기 오리지널 엔트리 포인트(OEP) 대신 실행되는 실행 에트리 포인트(EEP)가 상기 보호 코드 영역(100) 내의 하나의 가비지 코드(GC)이고, 상기 가비지 코드(GC)의 마지막에 부가된 오프셋에 의해 상기 호출 코드(CC)가 호출될 수 있는데, 이러한 경우 상기 단계 S1000은, 상기 가비지 코드(GC)에 부가된 오프셋에 의해 호출된 때 수행될 수 있다. 다른 예를 들어, 상기 호출 코드(CC)는 상기 판단 코드(DC)의 판단 결과, 미리 정해진 조건에 부합하지 않는다고 판단되는 경우에 호출될 수도 있다.
즉, 상기 단계 S1000이 언제 수행되는지 여부는 명확하게는 상기 보호된 바이너리 파일의 생성 시에 상기 보호 코드 영역에 포함되어 있는 다양한 코드들의 생성방법에 따라 달라질 수 있음을 명확히 밝혀둔다.
전자기기는, 상기 단계 S1000의 수행을 위하여, 상기 호출 코드(CC)에 포함되어 있는 난수 발생 모듈을 실행할 수 있다.
전자기기는, 상기 호출 코드의 실행에 의해 호출되는 가비지 코드를 실행할 수 있다(S1100).
전자기기는, 미리 정해진 조건에 따라, 상기 주소 DB 영역(140)에 저장되어 있는 복수의 가비지 어드레스들 및/또는 가비지 체인 어드레스들 중, 상기 난수 발생 모듈에 의해 발생된 난수에 의해 결정되는 하나의 가비지 어드레스 및/또는 가비지 체인 어드레스를 결정할 수 있다.
예를 들어, 발생된 난수가 3인 경우, 상기 주소 DB 영역(140)에 저장되어 있는 복수의 어드레스들 중, 세 번째 주소를 선택할 수 있다.
다른 예를 들어, 발생된 난수가 A이고, 상기 주소 DB 영역(140)에 저장되어 있는 복수의 어드레스들의 개수가 N개인 경우, A를 N으로 나누었을 때의 나머지인 R을 산출하고, 저장되어 있는 복수의 어드레스들 중 R번째에 해당하는 주소를 선택할 수 있다.
또 다른 예를 들어, 전자기기는 복수의 난수를 발생시키고, 복수의 난수를 소정의 조합에 의해 하나의 값을 결정한 후, 상기 결정된 값에 대응되는 하나의 가비지 어드레스 및/또는 가비지 체인 어드레스가 결정될 수 있다.
전자기기는 상기 호출 코드(CC)의 실행에 따라 결정되는 하나의 가비지 주소 및/또는 가비지 체인 어드레스에 대응되는 가비지 코드(GC) 및/또는 가비지 코드 체인(GCC)을 실행할 수 있다.
이어서, 전자기기는, 상기 호출된 가비지 코드의 실행 결과를 확인할 수 있다(S1200).
상기 단계 S1200은, 상기 판단 코드(DC)의 호출에 따라 수행될 수 있다.
상기 판단 코드(DC)는, 상기 결정된 가비지 코드(GC)가 실행된 후에 호출될 수 있다. 상기 판단 코드(DC)는 상기 결정된 가비지 코드(GC)에 부가된 오프셋에 의해 호출될 수 있다. 또는, 상기 보호 코드 영역(100)에 포함되어 있는 다른 코드들에 의해서 상기 결정된 가비지 코드(GC)의 실행이 완료되었다고 판단하는 경우, 상기 다른 코드들의 호출에 따라 상기 판단 코드(DC)가 호출될 수도 있을 것이다.
가비지 코드(GC)가 복수의 가비지 코드 체인들(GCC)로 체인화 되어 있는 경우, 상기 판단 코드(DC)는, 상기 결정된 가비지 코드 체인(GCC)의 실행에 따라 후행 가비지 코드들이 호출되고, 이러한 일련의 과정을 따라 가장 후행하는 가비지 코드 체인에 부가된 오프셋에 의해 호출될 수 있다.
상기 판단 코드(DC)가 호출되면, 상기 판단 코드(DC)의 실행에 따라 상기 전자기기는, 상기 가비지 코드의 실행 결과를 확인할 수 있다. 즉, 상기 판단 코드(DC)에 포함되어 있는 여러 코드들 중 가비지 코드의 실행 결과 값을 확인하기 위한 제1 판단 코드(DC1)의 실행에 따라, 상기 가비지 코드의 실행 결과를 확인할 수 있다.
보다 구체적으로, 상기 가비지 코드의 실행 결과 값이 미리 정해진 연산 결과값인지 아닌지 여부를 전자기기는 판단할 수 있다. 이 때, 만약 상기 가비지 코드가 정상적으로 실행되었다면, 미리 정해진 연산 결과값이 나와야 하는 데, 가비지 코드가 정상적으로 실행되지 않았다면, 미리 정해진 연산 결과값이 나오지 않을 것이다.
가비지 코드가 정상적으로 실행되었다는 것은, 본 발명의 몇몇 실시예에 따르는, 보안 코드 영역(100)에 포함되어 있는 다양한 코드들의 실행에 따라 가비지 코드가 실행되는 경우를 의미하는 것으로, 특히, 가비지 코드의 처음부터 마지막까지 정상적으로 실행이 된 경우를 의미한다.
이러한 가비지 코드의 정상 실행 여부를 판단하는 이유는 다음과 같다.
바이너리 코드의 내용을, 역공학을 통해, 소스코드의 내용을 파악하고자 할 때, 역공학자들은 바이너리 코드 내의 임의의 포인트를 시작점으로 하여 해당 코드를 순차적으로 실행하여감으로써, 해당 코드에 의해 실행되는 결과들이 무엇인지를 확인하는 방법을 많이 사용한다. 만약 본 발명의 몇몇 실시예들에 의해 생성된 보호된 바이너리 파일을 역공학자들이 해석하기 위하여, 상기 보호된 바이너리 파일(P10)의 임의의 포인트에서부터 코드를 실행시키게 되는 경우, 해당 시작포인트가 가비지 코드의 첫 주소가 아니고, 가비지 코드의 중간 부분에서부터 실행을 시키게 되는 경우, 가비지 코드는 처음부터 마지막까지 정상적으로 실행되지 못하며, 이에 따라 역공학자의 역공학 의도에 의해 실행된 가비지 코드의 결과값은 미리 정해진 연산 결과값이 아닌 값을 가지게 된다.
따라서, 본 발명에 의한 판단 코드(DC)를 통하여, 가비지 코드의 실행 결과값을 판단함에 따라, 전술한 바와 같은, 정상적인 코드의 실행에 따라 가비지 코드가 실행된 경우인지 아니면, 역공학의 목적을 가지고 가비지 코드가 실행된 경우인지를 판단할 수 있게 된다.
이와 같은 목적을 달성하기 위하여, 바람직하게, 상기 가비지 코드가 체인화되어 있는 경우, 가비지 코드의 최선행 가비지 코드 체인이 제일 먼저 호출될 수 있도록 상기 호출 코드(CC)가 구현되는 것이 좋으며, 아울러, 상기 최선행 가비지 코드 체인의 오프셋은 바로 다음 가비지 코츠 체인을 지시하고 있는 것이 좋다. 즉, 가비지 코드가 체인화 되어 있는 경우, 하나의 온전한 가비지 코드를 실행시키기 위하여, 상기 체인화된 가비지 코드 체인들(GCC) 각각에 부여되는 오프셋이 결정되는 것이 바람직하다.
예를 들어, 도 8을 참조하면, 호출 코드(CC)에 의해서 제1 가비지 코드(GC1)의 가장 선행하는 가비지 코드 체인인 1-1 가비지 코드 체인(GCC11)이 호출되면, 순차적으로 후행하는 1-2 가비지 코드 체인(GCC12), 1-3 가비지 코드 체인(GCC13) 및 1-4 가비지 코드 체인(GCC14)이 호출/실행된 후, 상기 판단 코드(DC)가 호출되어, 상기 제1 가비지 코드(GC1)의 실행 결과값이 확인될 수 있다.
다른 예를 들어, 도 9를 참조하면, 호출 코드(CC)에 의해서 제2 가비지 코드(GC2)의 가장 선행하는 가비지 코드 체인인 2-1 가비지 코드 체인(GCC21)이 호출되면, 순차적으로 후행하는 2-2 가비지 코드 체인(GCC22) 및 2-3 가비지 코드 체인(GCC23)이 호출/실행된 후, 상기 판단 코드(DC)가 호출되어, 상기 제2 가비지 코드(GC2)의 실행 결과값이 확인될 수 있다.
이와 같이, 가비지 코드들(GC)을 체인화 하여, 상기 가비지 코드 영역(110) 내에 배치하게 되면, 실행 코드들이 오프셋 값에 의하여 점프하게 되며, 이러한 점프를 하게 되는 패턴도, 호출된 가비지 코드가 어떤 가비지 코드인지, 호출된 가비지 코드의 각 체인들이 어떠한 형태로 배치되었는지 여부 등에 따라서 늘 달라지게 된다.
이와 같이, 본 발명에 의한 보호된 바이너리 파일(P10)을 실행시키게 되는 경우, 상기 바이너리 파일(P10)의 코드 실행 패턴이, 가비지 코드들의 배치, 가비지 코드들의 체인화 등을 통해서, 보호된 바이너리 파일(P10)의 실행 시 마다 랜덤하게 달라질 수 있으며, 그 랜덤하게 달라지는 패턴 또한 매우 파악하기 어렵기 때문에, 역공학에 의해 상기 바이너리 파일의 소스 코드를 파악하는 것을 매우 어렵게 만들 수 있게 된다.
이어서, 전자기기는, 상기 확인 결과에 따라 상기 가비지 코드의 실행 결과가 미리 정해진 기준에 부합하지 않는 경우, 상기 대상 바이너리 파일의 실행 루틴을 종료할 수 있다(S1300). 즉, 상기 가비지 코드의 실행 결과가 미리 정해진 연산 결과값인 경우, 상기 대상 바이너리 파일의 실행 루틴은 종료된다.
즉, 만약에, 정상적으로 가비지 코드가 실행되어 가비지 코드의 처음부터 마지막까지 완전하게 실행된 것이 아니라고 판단되는 경우에, 전자기기는 상기 보호된 바이너리 파일(P10)의 실행 루틴을 종료하고, 상기 보호된 바이너리 파일(P10)이 더 이상 실행되지 못하도록 할 수 있다. 이로써, 상기 보호된 바이너리 파일(P10)에 대한 역공학적 접근도 차단할 수 있게 된다.
이로써, 상기 보호된 바이너리 파일(P10)에 대한 외부의 인위적인 혹은 불법적인 접근으로부터 상기 보호된 바이너리 파일(P10)을 안전하게 보호할 수 있게 된다.
반면, 전자기기는, 상기 확인 결과에 따라 상기 가비지 코드의 실행 결과가 미리 정해진 기준에 부합하는 경우, 상기 대상 바이너리 파일(10)의 상기 특정 포인트(SEP)를 호출할 수 있다(S1400). 즉, 상기 대상 바이너리 파일(10)의 숨기고자 하였던 특정 포인트가 오리지널 엔트리 포인트(OEP)였던 경우, 상기 대상 바이너리 파일(10)의 엔트리 포인트를 호출하고, 상기 대상 바이너리 파일(10)의 본래 코드에 따른 실행 코드들이 실행될 수 있도록 한다.
(2) 제2 실시예
도 10은, 본 발명의 다른 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법을 설명하기 위한 흐름도이다.
도 10을 참조하면, 본 발명의 다른 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법은, 상기 보호 코드 영역에 배치된 복수의 가비지 코드들 중 하나의 가비지 코드를 호출하기 위한 호출 코드를 실행하는 단계(S2000), 상기 호출 코드의 실행에 의해 호출되는 가비지 코드를 실행하는 단계(S2100), 상기 가비지 코드의 실행 횟수를 확인하는 단계(S2200) 및 상기 확인된 실행 횟수가 미리 정해진 기준에 부합하는 경우, 상기 대상 바이너리 파일의 특정 포인트를 호출하는 단계(S2300)를 포함할 수 있다. 한편, 상기 보호된 바이너리 파일의 실행방법은, 상기 확인된 실행 횟수가 미리 정해진 기준에 부합하지 않는 경우, 상기 가비지 코드의 실행 횟수를 변경하는 단계(S2400)를 포함할 수 있다. 이 때, 상기 실행 횟수를 변경한 후, 단계 S2000 내지 단계 S2200가 다시 반복하여 실행된다.
이 때, 상기 단계 S2000 및 단계 S2100은 각각 단계 S1000 및 단계 S1100과 동일하거나 유사하므로 이하에서 자세한 설명을 생략하기로 한다.
전자기기는, 상기 가비지 코드의 실행 횟수를 확인할 수 있다(S2200).
전자기기는 단계 S2200을 수행하기 위하여, 상기 가비지 코드의 실행 횟수를 카운팅하여 메모리 및/또는 상기 보호 코드 영역(100)의 소정의 영역 내에 상기 카운팅 정보를 유지하고 있을 수 있다.
이에 따라, 전자기기는, 상기 가비지 코드의 실행 횟수가 미리 정해진 기준에 부합하는지 확인할 수 있다.
이 때, 미리 정해진 기준이라 함은, 상기 가비지 코드가 실행되어야 하는 횟수(X)일 수 있다.
상기 가비지 코드가 실행되어야 하는 횟수(X)는, 전술한 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법에 의해 상기 보호 코드 영역(100)이 생성될 때 결정되어 있는 횟수일 수 있다. 예를 들어, 상기 미리 정해진 실행 횟수(X)가 5로 결정되어 있을 수 있으며, 이와 같은 경우, 단계 S2200에서는 상기 가비지 코드의 실행 횟수가 5에 도달하였는지를 판단할 수 있다.
이와 달리, 상기 가비지 코드가 실행되어야 하는 횟수(X)는, 상기 판단 코드(DC)에 포함되어 있는 가비지 코드의 실행 회수를 결정하기 위한 난수 발생 모듈에 의해 생성된 난수에 의해 결정되는 횟수일 수도 있다. 예를 들어, 전자기기는 단계 S2200이 처음 호출되는 경우(예를 들어, 카운팅 정보가 0인 경우), 상기 보호 코드(DC)에 포함되어 있는 난수 발생 모듈을 실행하여 임의의 난수를 생성할 수 있으며, 이 때 생성된 난수를 상기 가비지 코드가 실행되어야 하는 횟수(X)로 결정할 수 있다. 즉, 난수 발생 모듈의 실행에 따라 가비지 코드가 실행되어야 하는 횟수(X)가 결정되는 경우, 상기 가비지 코드가 실행되어야 하는 횟수(X)는 상기 보호된 바이너리 코드(P10)의 실행 시 마다 서로 다르게 결정될 수 있으므로, 상기 대상 바이너리 파일(10)의 보안 정도가 더 높아질 수 있게 된다.
이어서, 전자기기는, 상기 확인된 실행 횟수가 미리 정해진 기준에 부합하는 경우, 상기 대상 바이너리 파일의 특정 포인트를 호출할 수 있다(S2300). 예를 들어, 상기 확인된 실행 횟수가 상기 미리 정해진 가비지 코드의 실행 횟수와 동일하거나 혹은 그 이상인 경우, 상기 전자기기는 상기 대상 바이너리 파일의 특정 포인트(SEP)를 호출할 수 있다(S2300).
즉, 전술한 단계 S1400과 유사하게, 상기 대상 바이너리 파일(10)의 숨기고자 하였던 특정 포인트(SEP)가 오리지널 엔트리 포인트(OEP)였던 경우, 상기 대상 바이너리 파일(10)의 엔트리 포인트를 호출하고, 상기 대상 바이너리 파일(10)의 본래 코드에 따른 실행 코드들이 실행될 수 있도록 한다.
한편, 전자기기는, 상기 확인된 실행 횟수가 미리 정해진 기준에 부합하지 않는 경우, 상기 가비지 코드의 실행 횟수를 변경할 수 있다(S2400). 즉, 상기 가비지 코드가 상기 미리 정해진 횟수(X)만큼 실행되지 않은 경우, 전자기기는, 상기 가비지 코드의 실행 횟수에 대한 카운팅 정보를 변경할 수 있다. 이어서, 전자기기는, 전술한 단계 S2000 내지 단계 S2200를 다시 반복하여 실행할 수 있다.
이로써, 전술한 본 발명의 몇몇 실시예들에 따르는 가비지 코드(GC)를 한번만 실행하는 것이 아니라, 가비지 코드(GC)가 미리 정해져 있는 횟수만큼 실행되도록 함으로써, 상기 대상 바이너리 파일(10)에 대한 보안 정도가 더욱 높아질 수 있다. 즉, 전술한 보호된 바이너리 파일의 실행방법에 대한 제1 실시예의 설명에서, 본원 발명의 가비지 코드(GC)의 랜덤 호출에 의한 구성으로써, 대상 바이너리 파일(10)의 특정 포인트(예를 들어, 엔트리 포인트)를 호출하기 전까지 랜덤하게 보안 코드 영역(100) 내의 코드를 호출하게 되는 일련의 과정을 진행하도록 하여 상기 대상 바이너리 파일(10)의 특정 포인트를 외부에서 찾아내기 어렵도록 하는 효과가 발생함은 이미 설명한 바 있는데, 보호된 바이너리 파일의 실행방법에 대한 제2 실시예에 의하면, 상기 대상 바이너리 파일(10)의 특정 포인트(SEP)를 호출하기 위하여, 복수의 가비지 코드를 실행한 후에 상기 특정 포인트(SEP)를 호출할 수 있도록 구성함으로써, 보다 더 랜덤하게 보호 코드 영역(100) 내의 코드들이 실행될 수 있게 됨으로써, 외부에서 상기 대상 바이너리 파일(10)의 특정 포인트를 찾아내는 것을 보다 더 어렵게 만들 수 있게 된다. 이에 더하여, 상기 가비지 코드가 실행되어야 하는 횟수(X)를 랜덤하게 결정하게 되면, 상기 보호된 바이너리 파일(P10)가 실행될 때마다 상기 가비지 코드가 실행되어야 하는 횟수(X)가 변경되게 되므로 상기 보호 코드 영역(100)의 실행 패턴을 분석하기 어렵게 되며, 이에 따라 자연스럽게 상기 특정 포인트(SEP)를 찾아내는 것이 더욱 어려워 지게 된다.
한편, 전술한 단계 S2200과 함께, 보호된 바이너리 파일의 실행 방법의 제1 실시예에서 설명한 단계 S1200이 함께 조합되어 실행될 수 있을 것이며, 이와 같은 경우, 외부에서의 의도적인 역공학에 의한 접근이 발생할 경우, 보호된 바이너리 파일(P10)의 실행 루틴이 강제로 종료될 수 있기 때문에, 상기 대상 바이너리 파일(10)에 대한 보안 정도는 보다 더 높아질 수 있을 것이다.
(2) 제3 실시예
도 11은, 본 발명의 또 다른 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법을 설명하기 위한 흐름도이다.
도 11을 참조하면, 본 발명의 또 다른 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법은, 상기 보호 코드 영역에 배치된 복수의 가비지 코드들 중 하나의 가비지 코드를 호출하기 위한 호출 코드를 실행하는 단계(S3000), 상기 호출 코드의 실행에 의해 호출되는 가비지 코드를 실행하는 단계(S3100)를 포함하며, 호출되어 실행된 상기 가비지 코드가 루틴 종료 가비지 코드가 아닌 경우, 상기 단계 S3000 및 단계 S3100를 다시 반복하여 실행하는 것을 특징으로 할 수 있다.
이 때, 상기 단계 S3000 및 단계 S3100은 각각 단계 S1000 및 단계 S1100과 동일하거나 유사하므로 이하에서 자세한 설명을 생략하기로 한다.
전자기기는, 호출되어 실행된 가비지 코드가 루틴 종료 가비지 코드(routine exit garbage code, REGC)인지 여부를 확인할 수 있다(S3200).
이를 위하여, 상기 호출되어 실행된 가비지 코드가 루틴 종료 가비지 코드(routine exit garbage code, REGC)인지 여부를 판단하기 위한 코드(예를 들어, 전술한 제2 판단 코드(DC2))가 상기 판단 코드(DC)에 포함되어 있을 수 있으며, 상기 가비지 코드가 실행되고 나면, 상기 판단 코드(DC)가 호출되어 단계 S3200을 수행할 수 있다.
이를 위하여, 상기 루틴 종료 가비지 코드(REGC)를 식별하기 위한 식별 정보가 상기 루틴 종료 가비지 코드(REGC)에 부가될 수 있으며, 상기 판단 코드(DC)는 실행된 가비지 코드(GC)의 식별정보를 확인함으로써, 실행된 가비지 코드(GC)가 상기 루틴 종료 가비지 코드(REGC)인지 여부를 판단할 수 있다.
이 때, 상기 실행된 가비지 코드(GC)가 루틴 종료 가비지 코드(REGC)인 것으로 확인되면, 전자기기는, 상기 대상 바이너리 파일(10)의 숨기고자 하였던 특정 포인트(SEP)가 오리지널 엔트리 포인트(OEP)였던 경우, 상기 대상 바이너리 파일(10)의 엔트리 포인트를 호출하고, 상기 대상 바이너리 파일(10)의 본래 코드에 따른 실행 코드들이 실행될 수 있도록 한다.
반면, 상기 실행된 가비지 코드(GC)가 루틴 종료 가비지 코드(REGC)가 아닌 것으로 확인되면, 전자기기는, 상기 단계 S3000 내지 단계 S3200을 반복적으로 수행할 수 있다.
한편, 상기 제3 실시예가 동작되기 위하여, 실행된 가비지 코드(GC)가 루틴 종료 가비지 코드(REGC)인지 여부를 판단하기 위한 별도의 판단 코드(DC2)가 상기 보호 코드 영역(100)에 구비되어 있을 필요는 없다. 예를 들어, 상기 별도의 판단 코드(DC2)를 구비하는 대신, 상기 가비지 코드(GC) 및/또는 상기 가비지 코드 체인(GCC)에 부가될 수 있는, 오프셋 정보를 적절히 조절함으로써, 전술한 제3 실시예와 같이 동작할 수 있다. 이에 대해서 이하에서 설명한다.
전술한 본 발명의 몇몇 실시예들에 따르는 대상 바이너리 파일의 보호방법에 의하면, 가비지 코드(GC) 및/또는 가비지 코드 체인(GCC)을 생성하여 상기 보호 코드 영역(100) 내의 가비지 코드 영역(110)에 배치시킬 수 있음을 설명하였으며, 이 때, 상기 가비지 코드(GC) 및/또는 가비지 코드 체인(GCC)에는 이어서 실행할 코드에 대한 오프셋 정보가 부가될 수 있음은 설명한 바 있다.
본 발명에 의해 상기 보호 코드 영역(100)을 생성함에 있어서, 생성된 복수의 가비지 코드들(GC) 중 적어도 하나의 가비지 코드(GC)는 루틴 종료 가비지 코드(routine exit garbage code, REGC)로 설정하고 상기 루틴 종료 가비지 코드(REGC)에는, 루틴을 종료시키기 위한 코드에 대한 오프셋 정보가 부가되거나 혹은 상기 대상 바이너리 파일(10)의 특정 포인트(SEP)를 호출하기 위한 코드에 대한 오프셋 정보가 부가될 수 있다. 만약, 가비지 코드(GC)가 체인화되어 있는 경우, 상기 루틴 종료 가비지 코드(REGC)를 구성하고 있는 가장 후행하는 가비지 코드 체인에 루틴을 종료시키기 위한 코드에 대한 오프셋 정보가 부가되거나 혹은 상기 대상 바이너리 파일(10)의 특정 포인트(SEP)를 호출하기 위한 코드에 대한 오프셋 정보가 부가될 수 있다. 이와 함께, 상기 루틴 종료 가비지 코드(REGC) 이외의 나머지 가비지 코드들(GC) 및/또는 상기 나머지 가비지 코드들을 구성하는 가장 후행하는 가비지 코드 체인에는 상기 호출 코드(CC)에 대한 오프셋 정보가 부가될 수 있다.
상기 가비지 코드(GC) 및/또는 상기 가비지 코드 체인(GCC)에 부가되는 오프셋 정보가 전술한 바와 같이 부가되는 경우, 전자기기는, 다음과 같이 동작하게 된다.
단계 S3000에 의해 호출되는 가비지 코드가 상기 루틴 종료 가비지 코드(REGC)가 아닌 경우에는, 상기 호출된 가비지 코드가 실행된 후, 다시 상기 호출 코드(CC)가 호출되며, 이와 같은 단계들이 반복적으로 수행되게 된다. 이와 같이 가비지 코드(GC) 호출/실행을 위한 루틴은 지속적으로 반복되게 되며, 루틴의 동작 중 상기 루틴 종료 가비지 코드(REGC)가 호출되게 되면, 상기 루틴 종료 가비지 코드(REGC)의 실행 후, 상기 루틴 종료 가비지 코드(REGC)에 부가되어 있는 오프셋 정보에 의해, 상기 루틴 종료를 위한 코드 및/또는 상기 대상 바이너이 파일(10)의 특정 포인트(SEP)가 호출됨으로써, 상기 루틴의 종료와 함께 대상 바이너리 파일(10)의 본래의 코드들이 실행될 수 있게 된다.
본 발명의 보호된 바이너리 파일의 실행방법의 제3 실시예에 의하는 경우, 만약 생성되어 있는 가비지 코드들(GC)의 개수가 100개이며, 이 중 상기 루틴 종료 가비지 코드(REGC)가 1개로 설정되어 있는 경우, 상기 호출 코드(CC)에 의해 상기 루틴 종료 가비지 코드(REGC)가 호출되는 확률은 1%가 된다. 즉, 전술한 제2 실시예에서처럼, 미리 정해진 횟수만큼 상기 가비지 코드의 실행 횟수를 제어하는 것이 아니라, 전술한 제3 실시예에 의하면, 확률적인 방법을 통해 상기 가비지 코드의 실행 횟수를 랜덤하게 제어할 수 있게 되는 효과가 발생하며, 제2 실시예와 마찬가지로 대상 바이너리 파일(P10)에 대한 보안 효과가 높아지는 효과가 발생한다.
한편, 제2 실시예에서 설명한 바와 같이, 제3 실시예와 제1 실시예(즉, 예를 들어, 제1 실시예의 단계 S1200 및 이를 위해 필요한 다른 동작들)가 함께 조합되어 실행될 수 있을 것이며 이와 같은 경우, 외부에서의 의도적인 역공학에 의한 접근이 발생할 경우, 보호된 바이너리 파일(P10)의 실행 루틴이 강제로 종료될 수 있기 때문에, 상기 대상 바이너리 파일(10)에 대한 보안 정도는 보다 더 높아질 수 있을 것이다.
(2) 제4 실시예
도 12는, 본 발명의 또 다른 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법을 설명하기 위한 흐름도이다.
도 12를 참조하면, 본 발명의 또 다른 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법은, 상기 보호 코드 영역에 배치된 복수의 가비지 코드들 중 하나의 가비지 코드를 호출하기 위한 호출 코드를 실행하는 단계(S4000), 상기 호출 코드의 실행에 의해 호출되는 가비지 코드를 실행하는 단계(S4100)를 포함하며, 호출되어 실행된 상기 가비지 코드가 보안 모듈 가비지 코드가 아닌 경우, 상기 단계 S4000 및 단계 S4100를 다시 반복하여 실행하는 것을 특징으로 할 수 있다.
이 때, 상기 단계 S4000 및 단계 S4100은 각각 단계 S1000 및 단계 S1100과 동일하거나 유사하므로 이하에서 자세한 설명을 생략하기로 한다.
이하에서, 보안 모듈이라 함은, 상기 대상 바이너리 파일(10)에 대한 외부의 인위적인 및/또는 불법적인 접근을 차단하기 위한 코드들을 포함하고 있는 것으로써, 본 발명에 의한 바이너리 파일의 보호방법과 함께 대상 바이너리 파일을 보호할 수 있는 어떠한 모듈이라도 무방하다.
전자기기는, 호출되어 실행된 가비지 코드가 보안 모듈 가비지 코드(security module garbage code, SMGC)인지 여부를 확인할 수 있다(S4200).
이를 위하여, 상기 호출되어 실행된 가비지 코드가 보안 모듈 가비지 코드(SMGC)인지 여부를 판단하기 위한 코드(예를 들어, 전술한 제3 판단 코드(DC3))가 상기 판단 코드(DC)에 포함되어 있을 수 있으며, 상기 가비지 코드가 실행되고 나면, 상기 판단 코드(DC)가 호출되어 단계 S4200을 수행할 수 있다.
이를 위하여, 상기 보안 모듈 가비지 코드(SMGC)를 식별하기 위한 식별 정보가 상기 보안 모듈 가비지 코드(SMGC)에 부가될 수 있으며, 상기 판단 코드(DC)는 실행된 가비지 코드(GC)의 식별정보를 확인함으로써, 실행된 가비지 코드(GC)가 상기 보안 모듈 가비지 코드(SMGC)인지 여부를 판단할 수 있다.
이 때, 상기 실행된 가비지 코드(GC)가 보안 모듈 가비지 코드(SMGC)인 것으로 확인되면, 전자기기는, 상기 보안 코드 영역(100) 내에 존재하거나 혹은, 상기 전자기기에 설치되어 있는 소정의 보안 모듈을 호출/실행할 수 있다(S4300).
이어서, 전자기기는, 상기 보안 모듈을 호출/실행한 후, 상기 대상 바이너리 파일(10)의 숨기고자 하였던 특정 포인트(SEP)가 오리지널 엔트리 포인트(OEP)였던 경우, 상기 대상 바이너리 파일(10)의 엔트리 포인트를 호출하고(S4400), 상기 대상 바이너리 파일(10)의 본래 코드에 따른 실행 코드들이 실행될 수 있도록 한다.
반면, 상기 실행된 가비지 코드(GC)가 루틴 종료 가비지 코드(REGC)가 아닌 것으로 확인되면, 전자기기는, 상기 단계 S4000 내지 단계 S4200을 반복적으로 수행할 수 있다.
한편, 상기 제4 실시예가 동작되기 위하여, 실행된 가비지 코드(GC)가 보안 모듈 가비지 코드(SMGC)인지 여부를 판단하기 위한 별도의 판단 코드(DC3)가 상기 보호 코드 영역(100)에 구비되어 있을 필요는 없다. 예를 들어, 상기 별도의 판단 코드(DC3)를 구비하는 대신, 상기 가비지 코드(GC) 및/또는 상기 가비지 코드 체인(GCC)에 부가될 수 있는, 오프셋 정보를 적절히 조절함으로써, 전술한 제4 실시예와 같이 동작할 수 있다. 이에 대해서 이하에서 설명한다.
본 발명에 의해 상기 보호 코드 영역(100)을 생성함에 있어서, 생성된 복수의 가비지 코드들(GC) 중 적어도 하나의 가비지 코드(GC)는 보안 모듈 가비지 코드(SMGC)로 설정하고 상기 보안 모듈 가비지 코드(SMGC)에는, 보안 모듈을 호출하기 위한 코드에 대한 오프셋 정보가 부가되거나 혹은 상기 보안 모듈 코드에 대한 오프셋 정보가 부가될 수 있다. 만약, 가비지 코드(GC)가 체인화되어 있는 경우, 상기 보안 모듈 가비지 코드(SMGC)를 구성하고 있는 가장 후행하는 가비지 코드 체인에 보안 모듈을 호출하기 위한 코드에 대한 오프셋 정보가 부가되거나 혹은 상기 보안 모듈 코드에 대한 오프셋 정보가 부가될 수 있다. 이와 함께, 상기 보안 모듈 가비지 코드(SMGC) 이외의 나머지 가비지 코드들(GC) 및/또는 상기 나머지 가비지 코드들을 구성하는 가장 후행하는 가비지 코드 체인에는 상기 호출 코드(CC)에 대한 오프셋 정보가 부가될 수 있다.
상기 가비지 코드(GC) 및/또는 상기 가비지 코드 체인(GCC)에 부가되는 오프셋 정보가 전술한 바와 같이 부가되는 경우, 전자기기는, 다음과 같이 동작하게 된다.
단계 S4000에 의해 호출되는 가비지 코드가 상기 보안 모듈 가비지 코드(SMGC)가 아닌 경우에는, 상기 호출된 가비지 코드가 실행된 후, 다시 상기 호출 코드(CC)가 호출되며, 이와 같은 단계들이 반복적으로 수행되게 된다. 이와 같이 가비지 코드(GC) 호출/실행을 위한 루틴은 지속적으로 반복되게 되며, 루틴의 동작 중 상기 보안 모듈 가비지 코드(SMGC)가 호출되게 되면, 상기 보안 모듈 가비지 코드(SMGC)의 실행 후, 상기 보안 모듈 가비지 코드(SMGC)에 부가되어 있는 오프셋 정보에 의해, 상기 보안 모듈의 호출을 위한 코드 및/또는 상기 보안 모듈의 코드가 호출됨으로써, 상기 루틴의 종료와 함께 보안 모듈이 실행될 수 있다. 이어서, 보안 모듈의 실행 후, 보안 모듈 코드 등에 부가되어 있는 오프셋 정보를 적절히 조절함으로써, 상기 대상 바이너이 파일(10)의 특정 포인트(SEP)가 호출되어 대상 바이너리 파일(10)의 본래의 코드들이 실행될 수 있게 된다.
본 발명의 보호된 바이너리 파일의 실행방법의 제4 실시예에 의하는 경우, 상기 제3 실시예와 유사하게 확률적인 방법을 통해 상기 가비지 코드의 실행 횟수를 랜덤하게 제어할 수 있게 되는 효과가 발생하며, 제3 실시예의해 발생할 수 있는 효과에 더하여, 상기 보안 모듈의 실행에 따라 본 발명에 의해 보호하고자 하는 대상 바이너리 파일(P10)에 대한 대한 보안 효과가 보다 더 높아지는 효과가 발생한다.
한편, 제4 실시예의 경우에도, 제2 실시예 및 제3 실시예에서 설명한 바와 마찬가지로, 제1 실시예(즉, 예를 들어, 제1 실시예의 단계 S1200 및 이를 위해 필요한 다른 동작들)가 함께 조합되어 실행될 수 있을 것이며 이와 같은 경우, 외부에서의 의도적인 역공학에 의한 접근이 발생할 경우, 보호된 바이너리 파일(P10)의 실행 루틴이 강제로 종료될 수 있기 때문에, 상기 대상 바이너리 파일(10)에 대한 보안 정도는 보다 더 높아질 수 있을 것이다.
(2) 제5 실시예
도 13은, 본 발명의 또 다른 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법을 설명하기 위한 흐름도이다.
도 13을 참조하면, 본 발명의 또 다른 몇몇 실시예들에 따르는, 보호된 바이너리 파일의 실행방법은, 상기 보호 코드 영역에 배치된 복수의 가비지 코드들 중 하나의 가비지 코드를 호출하기 위한 호출 코드를 실행하는 단계(S5000), 상기 호출 코드의 실행에 의해 호출되는 가비지 코드를 실행하는 단계(S5100)를 포함할 수 있다.
이 때, 호출되어 실행된 상기 가비지 코드가 보안 모듈 가비지 코드가 아닌 경우, 상기 단계 S5000 및 단계 S5100를 다시 반복하여 실행할 수 있다.
반면, 호출되어 실행된 가비지 코드가 보안 모듈 가비지 코드인 경우, 보안 모듈을 실행하는 단계(S5300) 및 보안 모듈의 실행 횟수가 미리 정해진 실행 횟수만큼 실행되었는지 확인하는 단계(S5400)가 수행될 수 있다.
이 때, 상기 보안 모듈의 실행 횟수가 미리 정해진 실행횟수만큼 실행되지 않은 경우, 상기 보안 모듈의 실행 횟수에 대한 카운팅 정보가 변경되는 단계(S5600)가 수행된 후, 상기 단계 S5000 내지 단계 S5300이 반복적으로 수행될 수 있다.
반면, 상기 보안 모듈의 실행 횟수가 미리 정해진 실행횟수만큼 실행된 경우, 전자기기는, 전술한 단계 S1400과 유사하게, 상기 대상 바이너리 파일(10)의 숨기고자 하였던 특정 포인트(SEP)가 오리지널 엔트리 포인트(OEP)였던 경우, 상기 대상 바이너리 파일(10)의 엔트리 포인트를 호출하고, 상기 대상 바이너리 파일(10)의 본래 코드에 따른 실행 코드들이 실행될 수 있도록 한다.
이하에서, 각 단계에 대해서 구체적으로 설명한다. 다만, 상기 단계 S5000 내지 단계 S5300은 각각 단계 S4000 내지 단계 S4300과 동일하거나 유사하므로 이하에서 자세한 설명을 생략하기로 한다.
단계 S5300이 수행되고 나면, 전자기기는, 상기 보안 모듈의 실행 횟수를 확인할 수 있다(S5400).
전자기기는 단계 S5400을 수행하기 위하여, 상기 보안 모듈의 실행 횟수를 카운팅하여 메모리 및/또는 상기 보호 코드 영역(100)의 소정의 영역 내에 상기 카운팅 정보를 유지하고 있을 수 있다.
이에 따라, 전자기기는, 상기 보안 모듈의 실행 횟수가 미리 정해진 기준에 부합하는지 확인할 수 있다.
이 때, 미리 정해진 기준이라 함은, 상기 보안 모듈이 실행되어야 하는 횟수(Y)일 수 있다.
상기 보안 모듈이 실행되어야 하는 횟수(Y)는, 전술한 본 발명의 몇몇 실시예들에 따르는 바이너리 파일의 보호방법에 의해 상기 보호 코드 영역(100)이 생성될 때 결정되어 있는 횟수일 수 있다. 예를 들어, 상기 미리 정해진 실행 횟수(Y)가 3으로 결정되어 있을 수 있으며, 이와 같은 경우, 단계 S5400에서는 상기 보안 모듈의 실행 횟수가 3에 도달하였는지를 판단할 수 있다. 상기 보안 모듈의 실행 횟수는 상기 보호 코드 영역(100)에 포함되어 있거나 혹은 상기 전자기기에 설치되어 있는 보안 모듈의 종류에 의해 결정될 수 있다. 즉, 만약 전술한 바와 같이 보호된 바이너리 코드(P10)의 생성 시에, 대상 바이너리 파일(10)를 보호하기 위한 다른 보호 묘듈들의 종류 및 개수 등이 결정될 수 있으며, 이에 따라 상기 보안 보듈이 실행되어야 하는 횟수(Y)가 결정될 수 있을 것이다.
이어서, 전자기기는, 상기 확인된 실행 횟수가 미리 정해진 기준에 부합하는 경우, 상기 대상 바이너리 파일의 특정 포인트를 호출할 수 있다(S5500). 예를 들어, 상기 확인된 실행 횟수가 상기 미리 정해진 보안 모듈의 실행 횟수와 동일하거나 혹은 그 이상인 경우, 상기 전자기기는 상기 대상 바이너리 파일의 특정 포인트(SEP)를 호출할 수 있다(S5500).
즉, 상기 대상 바이너리 파일(10)의 숨기고자 하였던 특정 포인트(SEP)가 오리지널 엔트리 포인트(OEP)였던 경우, 상기 대상 바이너리 파일(10)의 엔트리 포인트를 호출하고, 상기 대상 바이너리 파일(10)의 본래 코드에 따른 실행 코드들이 실행될 수 있도록 한다.
한편, 전자기기는, 상기 확인된 실행 횟수가 미리 정해진 기준에 부합하지 않는 경우, 상기 보안 모듈의 실행 횟수를 변경할 수 있다(S5600). 즉, 상기 보안 모듈이 상기 미리 정해진 횟수(Y)만큼 실행되지 않은 경우, 전자기기는, 상기 보안 모듈의 실행 횟수에 대한 카운팅 정보를 변경할 수 있다. 이어서, 전자기기는, 전술한 단계 S5000 내지 단계 S5400를 다시 반복하여 실행할 수 있다.
이로써, 본 발명의 보호된 바이너리 파일의 실행방법의 제5 실시예에 의하는 경우, 상기 제4 실시예에 의해 발생할 수 있는 효과에 더하여, 복수의 보안 모듈이 실행될 수 있도록 함에 따라 보호하고자 하는 대상 바이너리 파일(P10)에 대한 대한 보안 효과가 보다 더 높아지는 효과가 발생한다.
한편, 제5 실시예의 경우에도, 제2 실시예 내지 제4 실시예에서 설명한 바와 마찬가지로, 제1 실시예(즉, 예를 들어, 제1 실시예의 단계 S1200 및 이를 위해 필요한 다른 동작들)가 함께 조합되어 실행될 수 있을 것이며 이와 같은 경우, 외부에서의 의도적인 역공학에 의한 접근이 발생할 경우, 보호된 바이너리 파일(P10)의 실행 루틴이 강제로 종료될 수 있기 때문에, 상기 대상 바이너리 파일(10)에 대한 보안 정도는 보다 더 높아질 수 있을 것이다.
이상, 본 발명의 보호된 바이너리 파일(P10)를 실행방법에 대한 다양한 실시예들에 대해서 설명하였다.
전술한 실시예들에서 자세히 설명하지는 않았으나, 상기 대상 바이너리 파일(10)을 암호화하여 상기 보호된 바이너리 파일(P10)이 생성된 경우에는, 각 실시예들에 있어서, 대상 바이너리 파일(10)의 특정 포인트(SEP)를 호출하기 전에, 상기 보안 코드 영역(100) 내의 상기 복호화 정보 영역(150)에 포함되어 있는 복호화 정보에 기초하여 상기 암호화된 대상 바이너리 파일(10)을 복호화하는 단계가 먼저 수행될 수 있을 것이다.
설명한 바와 같이, 본 발명에 의하여 생성된 보호된 바이너리 코드(P10)의 경우, 대상 바이너리 파일(10)의 특정 포인트(SEP, 예를 들어, 엔트리 포인트)를 실행하고자 할 때, 상기 보호된 바이너리 코드(P10)에 포함되어 있는 다양한 코드들을 정상적으로 실행한 후에 상기 특정 포인트(SEP)가 실행될 수 있게 된다.
이에 따라, 역공학에 의한 대상 바이너리 파일(10)에 대한 분석을 어렵게 만들 수 있음으로써, 상기 대상 바이너리 파일(10)에 대한 보호를 강화할 수 있다.
아울러, 본 발명에 의하여 보안 코드 영역(100)의 다양한 코드들이 실행됨에 있어서, 가비지 코드(GC), 가비지 코드 체인(GCC), 호출 코드(CC), 판단 코드(DC), 코드들에 부가될 수 있는 오프셋 정보들 등을 적절히 조합함으로써, 한정된 영역(즉, 보안 코드 영역(100)) 내에서 이론적으로 무한대의 실행 루틴 순서가 생성될 수 있다. 즉, 상기 보호된 바이너리 코드(P10)의 제1 회 실행 시 보안 코드 영역(100) 내의 제1 주소의 코드, 제2 주소의 코드, 제3 주소의 코드 및 제N 주소의 코드들의 실행 루틴 순서대로 코드들이 실행되었다면, 제2 회 실행 시 보안 코드 영역(100) 내의 실행 루틴 순서는 제2 주소의 코드, 제N주소의 코드, 제 N-1 주소의 코드 및 제3 주소의 코드의 순서가 될 수 있다. 이에 따라, 보안 코드 영역(100) 내의 코드 실행 패턴이 이론적으로 무규칙에 가깝도록 보일 수 있으며, 따라서 역공학에 의해 상기 보안 코드 영역(100)이 분석될 수 있는 가능성이 매우 희박해진다. 이로써, 보호 대상 바이너리 파일(10)를 확실하게 보호할 수 있게 된다.
다양한 코드들의 실행 순서만이 아니라, 특정한 코드는 상기 보호된 바이너리 파일(P10)의 1회째 실행 시부터 N회째 실행 시까지는 언제나 실행되었었으나, N+1회 째 실행에서는 실행되지 않을 수 있다. 즉, 실행 루틴에 따라 실행되어야 하는 것으로 결정되는 가비지 코드(GC) 및/또는 가비지 코드 체인들(GCC)은 호출 코드(CC)의 실행에 따라 랜덤하게 결정될 수 있으며, 특정한 조건이 만족되면 복수의 가비지 코드들(GC) 및/또는 복수의 가비지 코드 체인들(GCC) 중 실행되지 않고도 보안 코드 영역(100)에 대한 실행 루틴이 종료될 수 있기 때문에, 보안 코드 영역(100) 내의 코드 실행 패턴이 이론적으로 무규칙에 가깝도록 보일 수 있으며, 따라서 역공학에 의해 상기 보안 코드 영역(100)이 분석될 수 있는 가능성이 매우 희박해진다. 이로써, 보호 대상 바이너리 파일(10)를 확실하게 보호할 수 있게 된다.
아울러, 보안 코드 영역(100) 내의 임의의 포인트를 찍어서 역공학을 하려고 시도하는 경우에도, 본 발명에 의하면, 가비지 코드(GC)에 대한 실행 결과가 미리 정해진 연산 결과값이 되었는지를 판단하며, 미리 정해진 연산 결과값의 결과가 나오지 않는 경우에는, 실행 루틴을 종료할 수 있도록 하였기 때문에, 정확한 가비지 코드(GC)의 시작 포인트부터 실행시키도록 시도하지 않았다면 보안 코드 영역(100)에 대한 역공학 분석은 매우 힘들어지게 된다.
상술한 본 발명에 따른 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법에 있어서, 각 실시예를 구성하는 단계는 필수적인 것은 아니며, 따라서 각 실시예는 상술한 단계를 선택적으로 포함할 수 있다. 또 각 실시예를 구성하는 각 단계는 반드시 설명된 순서에 따라 수행되어야 하는 것은 아니며, 나중에 설명된 단계가 먼저 설명된 단계보다 먼저 수행될 수도 있다.
또한 본 발명에 따른 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법은, 이를 수행하는 코드 또는 프로그램의 형태로 구현될 수 있으며, 이러한 코드 또는 프로그램은 컴퓨터 판독 가능 기록매체에 저장될 수 있다.
이상에서 설명한 본 발명은, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 있어 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 여러 가지 치환, 변형 및 변경이 가능하므로 상술한 실시예 및 첨부된 도면에 의해 한정되는 것이 아니다. 또한 본 문서에서 설명된 실시예들은 한정되게 적용될 수 있는 것이 아니라, 다양한 변형이 이루어질 수 있도록 각 실시예들의 전부 또는 일부가 선택적으로 조합되어 구성될 수도 있다. 나아가, 각 실시예를 구성하는 단계들은 다른 실시예를 구성하는 단계들과 개별적으로 또는 조합되어 이용될 수 있다.
10: 대상 바이너리 파일
P10: 보호된 대상 바이너리 파일
100: 보호 코드 영역
110: 가비지 코드 영역
120: 호출 코드 영역
130: 판단 코드 영역
140: 주소 DB 영역
150: 복호화 정보 영역
GC: 가비지 코드
GCC: 가비지 코드 체인
CC: 호출 코드
DC: 판단 코드

Claims (22)

  1. 대상 바이너리 파일에 보호 코드 영역을 부가하여 상기 보호 대상 바이너리 파일을 보호하는 바이너리 파일의 보호방법에 있어서,
    상기 대상 바이너리 파일을 획득하는 단계;
    제1 가비지 코드 및 제2 가비지 코드를 생성하는 단계;
    상기 제1 가비지 코드를 적어도 제1 가비지 코드 체인 및 제2 가비지 코드 체인을 포함하는 복수의 조각 가비지 코드들로 분할하는 단계;
    상기 제2 가비지 코드를 적어도 제3 가비지 코드 체인 및 제4 가비지 코드 체인을 포함하는 복수의 가비지 코드 체인들로 분할하는 단계;
    상기 제1 가비지 코드 체인 내지 상기 제4 가비지 코드 체인을 상기 보호 코드 영역의 제1 영역에 배치하는 단계;
    가비지 코드 호출을 위한 호출 코드를 상기 보호 코드 영역의 제2 영역에 배치하는 단계; 및
    상기 보호 코드 영역을 상기 대상 바이너리 파일에 부가하여 보호된 바이너리 파일을 생성하는 단계;
    를 포함하는 바이너리 파일의 보호방법.
  2. 제 1 항에 있어서,
    상기 보호된 바이너리 파일의 엔트리 포인트는 상기 호출 코드의 시작 주소로 설정되는 것을 특징으로 하는
    바이너리 파일의 보호방법.
  3. 제 1 항에 있어서,
    상기 보호된 바이너리 파일의 엔트리 포인트는 상기 제1 가비지 코드의 시작 주소로 설정되는 것을 특징으로 하는
    바이너리 파일의 보호방법.
  4. 제 1 항에 있어서,
    상기 제1 가비지 코드 및 상기 제2 가비지 코드의 길이는 랜덤하게 생성되는 것을 특징으로 하는
    바이너리 파일의 보호방법.
  5. 제 1 항에 있어서,
    상기 제1 가비지 코드 체인에는 상기 제1 가비지 코드 체인이 배치된 위치와 상기 제2 가비지 코드체인이 배치된 위치에 대한 오프셋 정보(offset information)를 포함되어 있는 것을 특징으로 하는
    바이너리 파일의 보호방법.
  6. 제 1 항에 있어서,
    상기 제1 가비지 코드의 연산 결과는 0이며,
    상기 제1 가비지 코드 체인의 연산결과는 0이 아니고, 상기 제2 가비지 코드 체인의 연산결과는 0이 아니도록 상기 제1 가비지 코드가 적어도 상기 제1 가비지 코드 체인 및 상기 제2 가비지 코드 체인을 포함하는 복수의 가비지 코드 체인들로 분할되는 것을 특징으로 하는
    바이너리 파일의 보호방법.
  7. 제 1 항에 있어서,
    상기 제2 가비지 코드의 연산 결과는 0이며,
    상기 제3 가비지 코드 체인의 연산결과는 0이 아니고, 상기 제4 가비지 코드 체인의 연산결과는 0이 아니도록 상기 제2 가비지 코드가 적어도 상기 제3 가비지 코드 체인 및 상기 제4 가비지 코드 체인을 포함하는 복수의 가비지 코드 체인들로 분할되는 것을 특징으로 하는
    바이너리 파일의 보호방법.
  8. 제 1 항에 있어서,
    상기 호출 코드는, 상기 제1 가비지 코드 및 상기 제2 가비지 코드 중 하나의 코드를 호출하기 위한 난수 발생 모듈을 포함하는 것을 특징으로 하는
    바이너리 파일의 보호방법.
  9. 제 1 항에 있어서,
    상기 보호 코드 영역에 대한 정상 실행 여부를 판단하기 위한 판단 코드를 상기 보호 코드 영역의 제3 영역에 배치하는 단계;를 더 포함하는
    바이너리 파일의 보호방법.
  10. 제 9 항에 있어서,
    상기 판단 코드는, 상기 보호 코드 영역이 정상적으로 실행되었다고 판단되면, 상기 대상 바이너리 파일의 실행을 위한 오리지널 엔트리 포인트(Original Entry Point)를 제공하기 위한 코드를 포함하고 있는 것을 특징으로 하는
    바이너리 파일의 보호방법.
  11. 제 1 항에 있어서,
    적어도 상기 제1 가비지 코드 체인의 주소 및 상기 제3 가비지 코드 체인의 주소를 포함하는 정보를 상기 보호 코드 영역의 제4 영역에 배치하는 단계;를 더 포함하는
    바이너리 파일의 보호방법.
  12. 제 1 항에 있어서,
    상기 대상 바이너리 파일을 암호화하는 단계;를 더 포함하는
    바이너리 파일의 보호방법.
  13. 제 12 항에 있어서,
    상기 암호화된 대상 바이너리 파일을 해독하기 위한 해독정보를 상기 보호 코드 영역의 제5 영역에 배치하는 단계;를 더 포함하는
    바이너리 파일의 보호방법.
  14. 대상 바이너리 파일에 보호 코드영역을 부가하여 보호된 바이너리 파일의 실행 방법에 있어서,
    상기 보호 코드 영역에 배치된 복수의 가비지 코드들 중 하나의 가비지 코드를 호출하기 위한 호출 코드를 실행하는 단계;
    상기 호출 코드의 실행에 의해 호출되는 가비지 코드를 실행하는 단계;
    상기 호출된 가비지 코드의 실행 결과를 확인하는 단계; 및
    상기 확인 결과에 따라 상기 가비지 코드의 실행 결과가 미리 정해진 연산 결과값이 아닌 경우, 상기 보호된 바이너리 파일의 실행 루틴을 종료시키는 단계;
    를 포함하는 보호된 바이너리 파일의 실행 방법.
  15. 제 14 항에 있어서,
    상기 확인 결과에 따라, 상기 가비지 코드의 실행 결과가 상기 미리 정해진 연산 결과값인 경우, 상기 대상 바이너리 파일의 특정 포인트를 호출하는 것을 특징으로 하는
    보호된 바이너리 파일의 실행 방법.
  16. 제 14 항에 있어서,
    상기 복수의 가비지 코드들 각각은 복수의 가비지 코드 체인들로 분할되어 있는 것을 특징으로 하는
    보호된 바이너리 파일의 실행방법.
  17. 제 16 항에 있어서, 상기 가비지 코드를 실행하는 단계는,
    상기 호출되는 가비지 코드의 첫번째 가비지 코드 체인을 실행하는 단계;
    상기 첫번째 가비지 코드 체인과 상기 호출되는 가비지 코드의 두번째 가비지 코드 체인의 오프셋 정보(offset information)를 획득하는 단계; 및
    상기 획득된 오프셋 정보에 따라 상기 두번째 가비지 코드 체인을 실행하는 단계;를 포함하는
    보호된 바이너리 파일의 실행방법.
  18. 제 14 항에 있어서,
    상기 호출 코드는, 난수 발생 모듈을 포함하는 것을 특징으로 하는
    보호된 바이너리 파일의 실행방법.
  19. 제 18 항에 있어서, 상기 호출 코드를 실행하는 단계는,
    상기 난수 발생 모듈에 의해 생성되는 임의의 난수에 대응되는 하나의 가비지 코드를 선택하는 단계;를 포함하는
    보호된 바이너리 파일의 실행 방법.
  20. 제 14 항에 있어서,
    상기 대상 바이너리 파일은 암호화되어 있는 것을 특징으로 하는
    보호된 바이너리 파일의 실행 방법.
  21. 제 20 항에 있어서,
    상기 확인 결과에 따라 상기 가비지 코드의 실행결과가 미리 정해진 기준에 부합하는 경우, 상기 암호화된 대상 바이너리 파일을 복호화하는 단계;를 더 포함하는
    보호된 바이너리 파일의 실행 방법.
  22. 제 1 항 내지 제 21 항 중 어느 하나의 방법을 실행하기 위한 프로그램을 기록한 기록매체.
KR1020140075968A 2014-06-20 2014-06-20 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법 KR101641769B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020140075968A KR101641769B1 (ko) 2014-06-20 2014-06-20 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140075968A KR101641769B1 (ko) 2014-06-20 2014-06-20 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법

Publications (2)

Publication Number Publication Date
KR20150145629A true KR20150145629A (ko) 2015-12-30
KR101641769B1 KR101641769B1 (ko) 2016-07-29

Family

ID=55087992

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140075968A KR101641769B1 (ko) 2014-06-20 2014-06-20 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법

Country Status (1)

Country Link
KR (1) KR101641769B1 (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003337629A (ja) * 2002-05-18 2003-11-28 Mitsuko Miyaji プログラム難読化方法及び装置
JP2009086746A (ja) * 2007-09-27 2009-04-23 Fuji Xerox Co Ltd 情報処理装置及び情報処理プログラム
JP2010244213A (ja) * 2009-04-02 2010-10-28 Fuji Electric Systems Co Ltd プログラマブルコントローラ、プログラム実行監視方法及びプログラム
KR20120017532A (ko) * 2010-08-19 2012-02-29 주식회사 잉카인터넷 응용프로그램과 부가응용프로그램의 결합 방법 및 실행 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003337629A (ja) * 2002-05-18 2003-11-28 Mitsuko Miyaji プログラム難読化方法及び装置
JP2009086746A (ja) * 2007-09-27 2009-04-23 Fuji Xerox Co Ltd 情報処理装置及び情報処理プログラム
JP2010244213A (ja) * 2009-04-02 2010-10-28 Fuji Electric Systems Co Ltd プログラマブルコントローラ、プログラム実行監視方法及びプログラム
KR20120017532A (ko) * 2010-08-19 2012-02-29 주식회사 잉카인터넷 응용프로그램과 부가응용프로그램의 결합 방법 및 실행 방법

Also Published As

Publication number Publication date
KR101641769B1 (ko) 2016-07-29

Similar Documents

Publication Publication Date Title
US8166471B2 (en) Implementing portable content protection to secure secrets
US7366914B2 (en) Source code transformation based on program operators
US20170116410A1 (en) Software protection
KR101503785B1 (ko) 동적 라이브러리를 보호하는 방법 및 장치
JP7154365B2 (ja) ソフトウェアコードをセキュアにするための方法
US20140189366A1 (en) Obfuscating Transformations on Data Array Content and Addresses
CA3023939C (en) Method and apparatus for dynamic executable verification
CN102722672B (zh) 一种检测运行环境真实性的方法及装置
KR101861341B1 (ko) 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법
CN102760219A (zh) 一种Android平台软件保护系统、方法及设备
CN103413073A (zh) 一种保护java可执行程序的方法及设备
EP2362314A1 (en) Method and apparatus for verifying the integrity of software code during execution and apparatus for generating such software code
US11354410B2 (en) Protecting an item of software
US20200380150A1 (en) Method of encoding and decoding memory data for software security, recording medium and apparatus for performing the method
CN105718765A (zh) 一种利用有限自动机实现代码混淆的方法
CN105701368A (zh) 通过根据校验和计算目标地址的代码完整性保护
CN110245464B (zh) 保护文件的方法和装置
CN108733990B (zh) 一种基于区块链的文件保护方法及终端设备
CN104871165A (zh) 固件实现的软件许可
KR101641769B1 (ko) 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법
US10867032B2 (en) Generating and executing protected items of software
WO2019106655A1 (en) System and method for code protection against cyber threat
EP2940918A1 (en) Interface compatible approach for gluing white-box implementation to surrounding program

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right