KR102430335B1 - 가상화 코드의 난독화를 강화하는 방법 및 그 장치 - Google Patents

가상화 코드의 난독화를 강화하는 방법 및 그 장치 Download PDF

Info

Publication number
KR102430335B1
KR102430335B1 KR1020200137065A KR20200137065A KR102430335B1 KR 102430335 B1 KR102430335 B1 KR 102430335B1 KR 1020200137065 A KR1020200137065 A KR 1020200137065A KR 20200137065 A KR20200137065 A KR 20200137065A KR 102430335 B1 KR102430335 B1 KR 102430335B1
Authority
KR
South Korea
Prior art keywords
code
virtualization
block
code block
obfuscation
Prior art date
Application number
KR1020200137065A
Other languages
English (en)
Other versions
KR20220052759A (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 KR1020200137065A priority Critical patent/KR102430335B1/ko
Publication of KR20220052759A publication Critical patent/KR20220052759A/ko
Application granted granted Critical
Publication of KR102430335B1 publication Critical patent/KR102430335B1/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
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2125Just-in-time application of countermeasures, e.g., on-the-fly decryption, just-in-time obfuscation or de-obfuscation

Landscapes

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

Abstract

본 발명은 가상화 코드의 난독화를 강화하는 방법으로서, 원본 소스 코드에서 가상화 난독화가 적용될 영역을 지정하는 단계; 영역에서 가상화 코드를 포함하는 가상화 구조를 생성하는 단계; 가상화 코드를 복수의 코드 블록으로 구성하는 단계; 복수의 코드 블록 중 제1 코드 블록으로부터 복수의 랜덤 키 중 제1 랜덤 키를 이용하여 새로운 코드 블록을 생성하는 단계; 및 새로운 코드 블록에 대응하는 디스패처를 생성하는 단계를 포함하고, 이를 위한 장치를 제공한다.

Description

가상화 코드의 난독화를 강화하는 방법 및 그 장치{Method For Enhancing Obfuscation Of Virtual Code And Apparatus Thereof}
본 발명은 가상화 코드의 난독화를 강화하는 방법 및 이를 위한 장치에 관한 발명이다. 구체적으로, 본 발명은 가상화 코드를 블록 단위로 나누어서 랜덤한 키를 기초로 하는 연산을 통해 새로운 가상화 코드를 생성하는 방법 및 이를 위한 장치에 관한 것이다.
난독화 기법이란 소프트웨어의 지식 재산권을 보호하기 위하여 프로그램의 기능성은 그대로 유지하면서 내부 코드를 분석하기 어렵게 만드는 기법을 의미한다. 난독화 기법은 구획 난독화(변수명/함수명 변경, 주석 제거 등), 데이터 난독화(변수값 변형, 자료구조 변형 등), 제어흐름 난독화(제어흐름 변형, 불필요한 코드 삽입 등) 및 방지 난독화(디버깅 탐지, 가상머신 탐지 등)의 4개 범주로 분류될 수 있다. 이러한 다양한 난독화 기법 중에서도 제어흐름 난독화 기술에 속하는 가상화 난독화 기술은 가장 보안성이 뛰어난 것으로 알려져 있다.
가상화 난독화 기술은 소프트웨어 내에 보호하고자 하는 코드를 가상화하고, 가상화 구조를 내장하여 일반적인 CPU에서는 실행할 수 없는 가상화 코드를 소프트웨어 내에서 실행할 수 있도록 하는 기술이다. 가상화 구조란 핸들러 코드, 디스패처 및 가상화 레지스터 등을 포함하며 이들 각각을 가상화 구조의 구성요소라고 칭한다. 가상화 구조는 보호하고자 하는 소프트웨어에 삽입된다. 핸들러 코드는 가상화 코드의 기능을 정의해 놓은 코드들이다. 디스패처는 메모리에서 가상화 코드를 패치(fetch) 및 디코딩하고, 또한 핸들러 코드로 점프하게 한다. 가상화 레지스터는 가상화 구조 내에서 일반적인 CPU의 레지스터 역할을 수행한다. 가상화 스택의 경우에는 스택 기반 가상화 난독화에서 사용되며, 레지스터 및 메모리에서 데이터를 직접 교환하지 않고 가상화 스택만을 이용하여 데이터를 사용하게 한다. 이처럼 가상화 난독화는 일반적인 CPU를 이용하는 것이 아닌, 삽입된 가상화 구조를 이용하여 가상화 코드를 실행시켜 프로그램을 작동함으로써, 코드에 대한 분석을 어렵게 만드는 기술이다.
일반적인 난독화 기술인 패킹 및 암호화를 적용한 코드나 데이터는 프로그램을 실행하는 경우 원래 형식으로 복원될 수 있다. 이 때문에 일반적인 난독화 기술이 적용된 코드나 데이터는 동적 분석을 통하여 복원될 수 있다. 한편, 가상화 난독화 기술은 가상화된 코드가 프로그램을 실행할 시에도 원래 코드로 복원되지 않기 때문에 동적 분석에 내성이 있다는 점에서 유리하다. 그러나, 최근에는 가상화 난독화 기법을 분석하기 위하여 동적 분석 도구를 사용하여 Trace 추적을 통해 코드를 분석하는 방법이 제시되고 있어, 동적 분석에 대한 내성을 보장하기 어려워졌다. 또한, 가상화 난독화 기술은 프로그램 내에 가상화 구조를 삽입하고 가상화 코드를 에뮬레이션 할 때, 디스패처와 핸들러 코드의 구현까지 요구되어, 성능의 저하가 발생하는 문제점이 있다. 이 때문에 가상화 난독화 기술에 추가적인 다른 보호 기술을 함께 적용하여 사용하는 것은 성능과 속도 면에서 더 어렵다. 그리고, 가상화 난독화 기술은 가상화 난독화 구조가 정적 상태에 있을 때에도 그 구조가 드러남으로써 코드에 대해 분석이 가능하다는 한계점을 가지고 있다.
본 실시 예가 해결하고자 하는 과제는, 소스 코드를 복수 개의 코드 블록으로 분할하여 가상화 난독화 된 새로운 코드 블록을 생성하고, 하나의 코드 블록만이 정적으로 노출되도록 하여, 기존 가상화 구조 대비 보호 강도가 강화된 가상화 구조 설계 방법 및 장치를 제공하는 데 있다.
본 실시 예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시 예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 실시 예에 따른 가상화 코드의 난독화를 강화하는 방법은, 원본 소스 코드에서 가상화 난독화가 적용될 영역을 지정하는 단계; 상기 영역에서 가상화 코드를 포함하는 가상화 구조를 생성하는 단계; 상기 가상화 코드를 복수의 코드 블록으로 구성하는 단계; 상기 복수의 코드 블록 중 제1 코드 블록으로부터 복수의 랜덤 키 중 제1 랜덤 키를 이용하여 새로운 코드 블록을 생성하는 단계; 및 상기 새로운 코드 블록에 대응하는 디스패처를 생성하는 단계를 포함할 수 있다.
일 실시 예에 따른 가상화 코드의 난독화를 강화하는 방법을 수행하는 장치는, 원본 소스 코드에 대한 정보를 수신하는 통신부; 및 상기 원본 소스 코드에 가상화 난독화를 수행하도록 구성되는 프로세서를 포함하고, 상기 프로세서는: 상기 원본 소스 코드에서 가상화 난독화가 적용될 영역을 지정하고, 상기 영역에서 가상화 코드를 포함하는 가상화 구조를 생성하고, 상기 가상화 코드를 복수의 코드 블록으로 구성하고, 상기 복수의 코드 블록 중 제1 코드 블록으로부터 복수의 랜덤 키 중 제1 랜덤 키를 이용하여 새로운 코드 블록을 생성하고, 상기 새로운 코드 블록에 대응하는 디스패처를 생성할 수 있다.
일 실시 예에 따른 가상화 코드의 난독화를 강화하는 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터 판독 가능한 비일시적 기록매체로서, 상기 가상화 코드의 난독화 강화 방법은: 원본 소스 코드에서 가상화 난독화가 적용될 영역을 지정하는 단계; 상기 영역에서 가상화 코드를 포함하는 가상화 구조를 생성하는 단계; 상기 가상화 코드를 복수의 코드 블록으로 구성하는 단계; 상기 복수의 코드 블록 중 제1 코드 블록으로부터 복수의 랜덤 키 중 제1 랜덤 키를 이용하여 새로운 코드 블록을 생성하는 단계; 및 상기 새로운 코드 블록에 대응하는 디스패처를 생성하는 단계를 포함할 수 있다.
본 개시에 따르면, 가상화 코드의 난독화를 강화하는 방법은 정적으로 노출되는 가상화 코드의 양이 전체 가상화 코드의 양의 1/N 가량에 해당하기 때문에 코드 전체에 대한 분석이 어려워져 보호가 강화될 수 있다. 이 때, N은 가상화 코드 전체에서의 가상화 코드 블록 개수이다.
또한, 본 개시의 가상화 코드의 난독화를 강화하는 방법은 각 가상화 코드 블록을 랜덤한 키로 생성하기 때문에 코드 블록 별로 대응 규칙이 모두 다르므로 분석가의 입장에서는 가상화 코드 블록을 모두 획득하더라도 대응 규칙을 별도로 분석해야하는 바, 코드 전체에 대한 분석이 어려워져 보호가 강화될 수 있다.
발명의 효과는 이상에서 언급한 효과로 제한되지 않으며, 언급되지 않은 또 다른 효과들은 청구범위의 기재로부터 당해 기술 분야의 통상의 기술자에게 명확하게 이해될 수 있을 것이다.
도 1은 일 실시 예에 따른 가상화 코드의 난독화를 강화하는 방법의 흐름도이다.
도 2는 가상화 난독화 기술을 적용하여 코드를 생성하는 실시 예를 나타낸 도면이다.
도 3은 가상화 코드에 암호화를 적용하는 실시 예를 나타낸 도면이다.
도 4는 일 실시 예에 따른 가상화 코드의 난독화를 강화하는 방법을 적용하는 실시 예를 나타낸 도면이다.
도 5는 일 실시 예에 따른 가상화 코드의 난독화를 강화하는 방법을 실행하기 위한 장치를 나타낸 구조도이다.
도 6은 일 실시 예에 따른 가상화 코드의 난독화를 강화하는 방법을 실행하기 위한 장치를 개략적으로 도시한 블록도이다.
실시 예들에서 사용되는 용어는 본 개시에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 본 개시에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 개시의 전반에 걸친 내용을 토대로 정의되어야 한다.
명세서 전체에서 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있음을 의미한다. 또한, 명세서에 기재된 "...부", "...모듈" 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어 또는 소프트웨어로 구현되거나 하드웨어와 소프트웨어의 결합으로 구현될 수 있다.
명세서 전체에서 기재된 "a, b, 및 c 중 적어도 하나"의 표현은, 'a 단독', 'b 단독', 'c 단독', 'a 및 b', 'a 및 c', 'b 및 c', 또는 'a, b, 및 c 모두'를 포괄할 수 있다.
이하에서 언급되는 "단말"은 네트워크를 통해 서버나 타 단말에 접속할 수 있는 컴퓨터나 휴대용 단말로 구현될 수 있다. 여기서, 컴퓨터는 예를 들어, 웹 브라우저(WEB Browser)가 탑재된 노트북, 데스크톱(desktop), 랩톱(laptop) 등을 포함하고, 휴대용 단말은 예를 들어, 휴대성과 이동성이 보장되는 무선 통신 장치로서, IMT(International Mobile Telecommunication), CDMA(Code Division Multiple Access), W-CDMA(W-Code Division Multiple Access), LTE(Long Term Evolution) 등의 통신 기반 단말, 스마트폰, 태블릿 PC 등과 같은 모든 종류의 핸드헬드(Handheld) 기반의 무선 통신 장치를 포함할 수 있다.
본 발명에서는 가상화 코드의 난독화를 강화하는 가상화 코드 폴딩(Virtual Code Folding) 기술을 통하여 가상화 구조를 추가적으로 보호할 수 있다. 기존의 가상화 난독화의 경우 성능 저하가 크기 때문에 추가적인 가상화 구조 보호 방안을 제시하는데 어려움이 있었다. 그러나 본 발명에서는 정적으로 노출되는 가상화 코드의 양을 효과적으로 줄이는 폴딩 기술을 통해 성능 저하가 매우 적은 추가 보호 방안을 제시할 수 있다. 그리고 이는 가상화 구조에 다양성(Diversification)을 부여하는 효과를 동반하기 때문에 공격자가 가상화 구조를 분석하여 핸들러 코드와 가상화 코드의 대응관계를 파악하는데 소요되는 시간이 크게 증가하게 된다.
아래에서는 첨부한 도면을 참고하여 본 개시의 실시 예에 대하여 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 개시는 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시 예에 한정되지 않는다. 이하에서는 도면을 참조하여 본 개시의 실시 예들을 상세히 설명한다.
도 1은 일 실시 예에 따른 가상화 코드의 난독화를 강화하는 방법의 흐름도이다.
먼저, S101에서 원본 소스 코드에서 가상화 난독화가 적용될 영역을 지정할 수 있다. 일 실시 예에 따르면, 사용자는 프로그램의 중요 코드(즉, 키 코드(KeyCode))에 마커(Marker)를 삽입하여 가상화 난독화가 적용될 영역을 지정할 수 있다. 본 발명의 가상화 코드의 난독화를 강화하는 방법은 이러한 마커가 삽입된 소스 코드로부터 가상화 난독화가 수행될 영역을 인식하는 단계를 포함할 수 있다.
S102에서 가상화 난독화가 적용될 영역에서 가상화 코드를 포함하는 가상화 구조를 생성할 수 있다. 가상화 구조는 가상화 코드 외에도 핸들러 코드, 디스패처 및 가상화 레지스터 등 일반적인 가상화 구성 요소를 더 포함할 수 있다.
S103에서 가상화 코드를 복수의 코드 블록으로 구성할 수 있다. 구체적으로, 가상화 코드를 제어흐름의 이동에 따라 나누어 복수의 베이직 블록으로 구성할 수 있다. 총 N개의 코드 블록으로 나누어질 수 있으며, 각 블록을 VCB1 내지 VCBN로 칭할 수 있다. 이 때 VCB는 Viritual Code Block의 약자이다. 가상화 코드를 제어흐름의 이동에 따라 복수의 코드 블록으로 구성하는 실시 예에 관해서는 도 2를 참조로 자세히 살펴보기로 한다.
S104에서 복수의 코드 블록 중 하나로부터 복수의 랜덤 키 중 하나를 이용하여 새로운 코드 블록을 생성할 수 있다. 이를 위하여 N개의 코드 블록에 대응될 수 있도록 랜덤한 키를 N-1개 생성할 수 있다. 이 때 N-1개의 랜덤 키를 K1 내지 KN-1로 지칭할 수 있다. 랜덤 키는 예를 들어 RAND 함수 등을 통해서 랜덤하게 생성될 수 있으며 길이(byte)의 수에 제한을 받지 않는다.
일 실시 예에 따르면 S104는 생성된 새로운 코드 블록에 대하여 복수의 랜덤 키를 이용하여 다음 코드 블록을 생성하는 단계를 반복하는 단계를 포함할 수 있다. 즉, 랜덤 키를 이용하여 생성된 코드 블록에 대하여 또 다른 랜덤 키를 사용하여 다음 코드 블록을 생성할 수 있고, N-1개의 랜덤 키를 모두 이용하여 초기 코드 블록을 포함하여 총 N개의 코드 블록이 되도록 난독화 된 코드 블록들을 생성할 수 있다. 이 때 복수의 랜덤 키는 서로 다르며, 각각의 코드 블록의 생성에 이용되는 랜덤 키 또한 서로 다르다. 이 때문에 각각의 코드 블록에 대응하는 디스패처와 매핑 룰 또한 서로 다르다.
일 실시 예에 따르면 S104에서 새로운 코드 블록을 생성하는 단계는, 이전의 코드 블록과 랜덤 키를 연산하여 새로운 코드 블록을 생성하는 단계를 포함할 수 있다. 이 때 랜덤 키를 이용한 연산은 XOR 연산일 수 있다. 또한, 생성된 새로운 코드 블록은 이전의 코드 블록 바로 다음의 코드 블록을 암호화한 블록에 대응될 수 있다. 가장 먼저 연산 대상이 되는 코드 블록은 초기 블록으로써 본 발명의 일 실시 예에 따른 난독화 강화가 적용되지 않은 코드 블록일 것이다.
S105에서 S104에서 생성된 새로운 코드 블록에 대응하는 디스패처를 생성할 수 있다. S104에서 초기 블록인 NVCB1(Newly generated Virtual Code Block)을 포함하여 새로운 코드 블록이 NVCBN까지 생성된 경우, 이의 대응규칙에 해당하는 디스패처를 추가 생성할 수 있다. 난독화 강화된 코드 블록이 N개임에 따라 디스패처 또는 매핑 룰 또한 N개 생성될 것이다. 각각의 난독화 강화된 코드 블록이 생성됨에 따라 대응되는 디스패처가 생성될 수 있고, 난독화 강화된 코드 블록이 전체 생성됨에 따라 각각의 코드 블록에 대한 디스패처가 생성될 수도 있다. 본 발명에서는 난독화 강화된 코드 블록에 대해 폴딩된(folded) 코드 블록이라고 지칭할 수 있으며, 가상화 코드의 난독화 강화에 대해 가상화 코드 폴딩(folding)이라고 지칭할 수 있다.
한편, 디스패처가 생성된 후, 본 발명의 가상화 코드의 난독화를 강화하는 방법은 언폴드(Unfold) 핸들러 코드를 생성하는 단계를 더 포함할 수 있다. 언폴드 핸들러 코드는 새로운 코드 블록이 생성될 때 다음 코드 블록을 연산하기 위하여 자동으로 실행되는 핸들러 코드이다.
또한, 일 실시 예에 따르면, 본 발명의 가상화 코드의 난독화를 강화하는 방법은 원본 소스 코드의 가상 영역에 암호화된 가상화 코드를 생성하는 단계를 더 포함할 수 있다. 즉, 가상화 구조의 구성요소를 모두 구성하였으면, 이를 프로그램 내부의 가상 머신(Virtual Machine) 영역(section)에 생성하여 가상화 코드 폴딩을 완료할 수 있다. 이 때 암호화된 가상화 코드는 하나의 코드 블록을 포함하고, 하나의 코드 블록은 NVCB1 내지 NVCBN 중 가장 긴 길이의 코드 블록일 수 있다. 이에 따라 하나의 코드 블록만이 정적으로 노출될 수 있고, 전체 소스 코드 대비 대략 1/N 길이(byte)의 코드만이 노출될 것이다.
도 2는 가상화 난독화 기술을 적용하여 코드를 생성하는 실시 예를 나타낸 도면이다.
도 2를 참조하면 원본 어셈블리(210)는 순서대로 어셈블리어 MOV, ADD, ADD, POP, SUB, DIV, JMP, MOV, MOV, SUB, POP, JMP, SUB, POP, ADD 및 RETN을 포함한다. MOV는 데이터를 복사하고, POP은 스택에 값을 넣는 데이터 전송 명령의 어셈블리어이다. ADD는 데이터 값을 더하여 저장하고, SUB은 데이터 값을 빼서 저장하고, DIV은 데이터 값을 나누어 저장하는 산술 연산 명령의 어셈블리어이다. JMP은 프로그램을 실행할 주소 또는 라벨로 이동하고, RETN은 함수에서 호출한 위치로 돌아가기 위한 제어 전송 명령의 어셈블리어이다.
이러한 원본 어셈블리(210)를 가상화 난독화 할 경우에 매핑 룰(mapping rule)(220)을 생성할 수 있다. 매핑 룰은 각각의 어셈블리에 매핑되는 가상화 코드를 나타낸 것으로서, 이들 가상화 코드는 16진수가 가질 수 있는 랜덤한 조합으로 생성될 수 있다. 도 2에서 매핑 룰(220)을 참조하면, 어셈블리어 MOV, ADD, SUB, POP, DIV, JMP, RETN은 차례대로 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09로 매핑될 수 있다. 이를 기초로 가상화 하면 가상화 코드(230)와 같이 생성된다. 원본 어셈블리(210)를 매핑 룰(220)에 기반하여 각각의 어셈블리어에 대응되는 가상화 코드로 나타낼 수 있다.
일 실시 예에 따르면, 가상화 코드를 복수의 코드 블록으로 구성하는 단계(S103)와 관련하여, 제어흐름을 이동시키는 명령문을 기준으로 코드 블록을 나눌 수 있다. 도 2를 참조하면, JMP와 RETN은 제어 전송 명령 종류로서 제어흐름을 이동시키는 어셈블리어이다. 이에 따라, JMP 또는 RETN을 기준으로 가상화 코드를 나누면, 매핑 룰(220)에 따라 0x06 또는 0x07를 기준으로 코드를 끊을 수 있다. 그 결과 가상화 코드를 제1 베이직 블록(231), 제2 베이직 블록(232) 및 제3 베이직 블록(233)으로 구성할 수 있다. 그리고, 이들 각각을 가상화 코드 블록인 VCB1, VCB2 및 VCB3으로 지칭할 수 있다. 이에 따라, VCB1은 7 바이트로 구성되고, VCB2는 5 바이트로, VCB3는 4 바이트로 구성될 수 있다.
한편, 가상화 코드가 암호화 되는 경우에는 암호화 된 가상화 코드가 복호화 되지 않는 이상 매핑 룰을 적용할 수 없다. 암호화 된 가상화 코드로는 매핑 룰에 따른 매핑 관계를 적용할 수 없기 때문이다. 구체적으로, 기본적인 코드 암호화의 경우 실행될 실행 코드를 암호화하여 이를 저장한다. 암호화 된 실행 코드는 해당 소프트웨어가 실행될 때 CPU에서 인출/해석/실행(Fetch/Decode/Execute)되는 경우 그 기능성이 유지되지 않기 때문에 복호화가 선행되어야 한다. 이에 따라, 분석자는 동적 분석 과정에서 복호화 되는 시점을 파악하여 원본 실행 코드를 획득할 수 있다. 가상화 코드도 마찬가지로, 가상 CPU(VCPU)에서 인출/해석/실행 될 가상화 코드를 미리 암호화한다. 따라서, 가상화 코드의 실행 시점에서 가상화 코드가 VCPU에서 해석될 수 있도록 복호화가 선행되어야 한다.
도 3은 가상화 코드에 암호화를 적용하는 실시 예를 나타낸 도면이다.
가상화 코드(310)에 대해 랜덤 키 K를 이용하여 연산하면 암호화 된 코드(320)가 도출된다. 랜덤 키는 예시적으로 0xDEADBEEF로 설정하였다. 랜덤 키를 1 바이트씩 끊어 가상화 코드(310)에 차례대로 XOR 연산을 수행하면 암호화 된 코드(320)가 도출될 수 있다. 이 때, 가상화 코드 0x01이 0xDF로 암호화 되는 바, 가상화 코드(310)에 대응되는 매핑 룰(330)은 암호화 된 코드(320)에 대응될 수 없다.
가상화 코드 폴딩의 경우, 다음에 실행될 가상화 코드 블록을 이전 가상화 코드 블록에 랜덤 키를 XOR하여 생성하는 방식으로 구성된다. 이를 연산 식으로 나타내면 다음과 같다.
Figure 112020111769900-pat00001
이전 가상화 코드 블록에 랜덤한 키를 XOR 연산하여 다음 가상화 코드 블록이 생성되기 때문에, 각 가상화 코드 블록은 핸들러 코드와의 대응 관계가 모두 다르다. 이 때문에 전체 가상화 코드 중 하나의 가상화 코드 블록만이 정적으로 노출될 수 있다.
도 4는 일 실시 예에 따른 가상화 코드의 난독화를 강화하는 방법을 적용하는 실시 예를 나타낸 도면이다. 도 4는 가상화 된 코드(410)에 대하여 가상화 코드 폴딩 기법을 적용하는 과정을 나타낸다. 가상화 코드(410)는 16 바이트의 가상화 된 코드 전체를 나타내고 있다.
먼저 제1 코드 블록(421)에 대해 랜덤 키 K1을 연산하여 새로운 제2 코드 블록(422)을 생성한다. 그리고 제2 코드 블록(422)에 랜덤 키 K2를 연산하여 제3 코드 블록(423)을 생성한다.
일 예시로, 가상화 코드 폴딩 과정에서 이용되는 랜덤 키를 예시적으로 0xDEAD와 0xBEEF로 설정한다. 도 2를 잠시 참조하면 가상화 코드(410)에 대해 코드 블록이 각각 7 바이트, 5 바이트, 4 바이트의 VCB1, VCB2 및 VCB3으로 구분될 수 있다. 이에 따라, 연산의 대상이 되는 초기 코드 블록인 제1 코드 블록(421)은 VCB1이다. 제1 코드 블록(421)은 아직 폴딩 기법이 적용되지 않아 난독화 되지 않은 상태이므로 가상화 코드(410)의 매핑 룰(431)이 적용될 수 있다. 한편, 제1 코드 블록(421)에서 어셈블리어 RETN은 존재하지 않으므로 가상화 코드는 0x00, 즉, 고려할 필요가 없는 값(Don't Care)일 것이다.
일 실시 예에 따르면, 제1 코드 블록(421)에 랜덤 키 K1 (0xDEAD)을 XOR 연산하면 제2 코드 블록(422)을 생성할 수 있다. 제2 코드 블록(422)은 새로운 코드 블록으로서 난독화가 적용된 코드이다. 또한, 제2 코드 블록(422)은 VCB1 다음의 코드 블록인 VCB2가 난독화 된 코드 블록으로, NVCB2로 표현될 수 있다. 제2 코드 블록(422)은 랜덤 키 K1의 연산으로 인하여 원본 가상화 코드의 매핑 룰(431)이 적용될 수 없다. 이에 따라 새로운 매핑 룰(432)을 생성하게 된다. 제2 코드 블록(422)에서 어셈블리어 ADD, DIV 및 RETN은 존재하지 않으므로 이에 대응되는 가상화 코드는 고려할 필요가 없을 것이다. 제2 코드 블록(422)은 5 바이트의 길이를 가지므로, 연산에 사용되었던 7 바이트에서 5 바이트 이외의 나머지 2바이트는 판독의 대상이 되지 않는다.
다음으로, 제2 코드 블록(422)에 랜덤 키 K2 (0xBEEF)를 XOR 연산하면 제3 코드 블록(423)을 생성할 수 있다. 제3 코드 블록(423)은 새로운 코드 블록으로서 난독화가 적용된 코드이다. 또한, 제3 코드 블록(423)은 VCB2 다음의 코드 블록인 VCB3가 난독화 된 코드 블록으로, NVCB3으로 표현될 수 있다. K1 와 K2는 상이하므로 제3 코드 블록(423)은 제2 코드 블록(422)에 대응되는 매핑 룰(432)이 적용될 수 없다. 이에 따라 새로운 매핑 룰(433)을 생성하게 된다. 제3 코드 블록(423)에서 어셈블리어 MOV, DIV 및 JMP가 존재하지 않으므로 이에 대응되는 가상화 코드는 고려할 필요가 없을 것이다. 제3 코드 블록(423)은 4 바이트의 길이를 가지므로, 연산에 사용되었던 5 바이트에서 4 바이트 이외의 나머지 1바이트는 판독의 대상이 되지 않는다.
각각의 가상화 코드에 대해 연산에 사용되는 랜덤 키가 상이한 바, 각각의 난독화 된 가상화 코드에 대한 대응 규칙이 상이하다. 이전의 가상 블록에 대한 매핑 룰을 다음의 가상 블록에 적용할 수 없는 바, 가상 블록의 개수만큼 매핑 룰과 디스패처가 필요하다. 예를 들어, 제1 가상화 코드 블록(421)에서는 0x01이라는 가상화 코드를 인출하여 이를 MOV로 해석하는데 반해, 제2 가상화 코드 블록(422)에서는 0xDF 또는 0xAF라는 가상화 코드를 인출하여 이를 MOV로 해석한다. 따라서, 분석가는 가상화 코드를 모두 획득하더라도 전체 코드로 복원하기 위해서는 코드 블록 별로 대응 규칙을 별도로 분석해야 하는 바, 가상화 구조를 보다 효율적으로 보호할 수 있다. 또한, 모든 가상화 코드 블록 중 가장 길이가 긴 블록만 노출이 될 수 있다. 도 4의 실시 예에서는 7 바이트의 길이를 가지는 제1 코드 블록(421)만이 프로그램 상에서 노출될 것이다. 이에 따라 전체 소스 코드 대비 대략 1/N 만큼의 코드만이 노출될 수 있다(이때, N은 코드 블록의 개수).
도 5는 일 실시 예에 따른 가상화 코드의 난독화를 강화하는 방법을 실행하기 위한 장치를 나타낸 구조도이다.
일 실시 예에 따른 장치(500)는 가상화 코드 분산기(Virtual Code Diversifier)(504), 디스패처 분산기(Dispatcher Diversifier)(505) 및 언폴드 핸들러 생성기(Unfold Handler Generator)(506)를 포함할 수 있다. 또한, 장치(500)는 원본 코드 추출기(Original Code Extractor)(501), 가상화 코드 변환기(Virtual Code Translator)(502), 디스패처 생성기(Dispatcher Generator)(503) 및 가상 머신 생성기(Virtual Machine Generator)(507)를 더 포함할 수 있다.
일 실시 예에 따른 장치(500)는 원본 코드인 키 코드로부터 원본 코드 추출기(501)를 이용하여 원본 소스 코드에서 가상화 난독화가 적용될 영역을 추출할 수 있다. 일 실시 예에 따르면, 사용자는 프로그램의 키 코드에 마커를 삽입하여 가상화 난독화가 적용될 영역을 지정할 수 있다. 장치(500)는 마커가 삽입된 소스 코드로부터 가상화 난독화가 수행될 영역을 인식할 수 있다.
가상화 코드 변환기(502)는 가상화 난독화가 적용될 영역에서 가상화 코드를 포함하는 가상화 구조를 생성할 수 있다. 이는 핸들러 코드, 디스패처 및 가상화 레지스터 등 일반적인 가상화 구성 요소를 프로그램에 생성하는 것을 포함할 수 있다. 이 때의 디스패처는 폴딩되기 이전의 가상화 코드를 기반으로 생성된 디스패처이다.
가상화 코드 분산기(504)는 가상화 코드를 블록 단위로 나눌 수 있다. 또한, 가상화 코드를 제어흐름의 이동에 따라 나누어 복수의 베이직 블록으로 구성할 수 있다. 총 N개의 코드 블록으로 나누어질 수 있으며, 각 블록을 VCB1 내지 VCBN로 지칭할 수 있다.
장치(500)는 디스패처 분산기(505)를 이용하여, N개의 코드 블록에 대응될 수 있도록 랜덤 키(key)를 N-1개 생성할 수 있다. 그리고, 복수의 코드 블록 중 하나로부터 복수의 랜덤 키 중 하나를 이용하여 새로운 코드 블록을 생성할 수 있다. 생성된 새로운 코드 블록에 대하여 복수의 랜덤 키를 이용하여 다음 코드 블록을 생성하는 단계를 반복할 수 있다. 즉, 랜덤 키를 이용하여 생성된 코드 블록에 대하여 또 다른 랜덤 키를 사용하여 다음 코드 블록을 생성할 수 있고, N-1개의 랜덤 키를 모두 이용하여 초기 코드 블록을 포함하여 총 N개의 코드 블록이 되도록 난독화 된 코드 블록들을 생성할 수 있다. 복수의 랜덤 키는 서로 다르며, 각각의 난독화 된 코드 블록의 생성에 이용되는 랜덤 키 또한 서로 다르다.
일 실시 예에 따르면, 새로운 코드 블록은 이전의 코드 블록과 랜덤 키를 연산하여 생성될 수 있다. 이 때 랜덤 키를 이용한 연산은 XOR 연산일 수 있다. 한편, 가장 먼저 연산 대상이 되는 코드 블록은 초기 블록으로써 본 발명의 일 실시 예에 따른 난독화 강화가 적용되지 않은 코드 블록일 것이다.
N-1번 연산하여 총 N개의 코드 블록이 구성되면, 장치(500)는 디스패처 분산기(505)를 이용하여 코드 블록들의 대응 규칙에 해당하는 디스패처들을 추가적으로 생성할 수 있다. 랜덤 키가 상이하므로 각각의 난독화 된 코드 블록에 대응하는 디스패처 또한 서로 다르다.
언폴드 핸들러 생성기(506)는 하나의 가상화 코드 블록이 모두 실행되는 경우 다음 가상화 코드 블록을 생성할 수 있도록 언폴드 핸들러 코드를 생성할 수 있다. 언폴드 핸들러 코드는 새로운 코드 블록이 생성될 때 다음 코드 블록을 연산하기 위하여 자동으로 실행되는 핸들러 코드이다. 일 실시 예에 따르면, 언폴드 코드는 다음 코드 블록의 연산에 필요한 랜덤 키를 선택하는 코드, XOR 연산을 수행하는 코드, 생성된 코드 블록의 길이(byte)를 선택하는 코드, 다음 코드 블록으로의 이동을 위한 주소를 계산하는 코드 및 생성된 코드 블록에 대응되는 디스패처로 점프하기 위한 코드 등을 포함할 수 있다.
가상 머신 생성기(507)는 원본 소스 코드의 가상 영역에 암호화된 가상화 코드를 생성할 수 있다. 즉, 가상 머신 생성기(507)는 가상화 구조에 해당되는 구성요소를 모두 구성하였으면 이를 프로그램 내부의 가상 머신 영역(VM Section)에 삽입할 수 있다. 이에 따라 원본 소스 코드에 정크 명령(junk instruction)을 삽입하고, 가상 머신 영역에 가상화 난독화 된 키 코드를 삽입할 수 있다. 가상화 구조에 해당되는 구성요소로는 폴딩 된 가상화 코드 블록, 언폴드 핸들러 코드, 디스패처, 가상화 레지스터 및 핸들러 코드가 포함되며, 폴딩된 가상화 코드 블록은 대략 1/N 바이트만큼 일 것이나, 디스패처는 N개일 것이다.
도 6은 일 실시 예에 따른 가상화 코드의 난독화를 강화하는 방법을 실행하기 위한 장치를 개략적으로 도시한 블록도이다. 일 실시 예에 따른 가상화 코드의 난독화를 강화하는 방법을 실행하기 위한 장치(600)는 통신부(610) 및 프로세서(620)를 포함할 수 있다.
통신부(610)는 원본 소스 코드에 관한 정보를 수신할 수 있다. 특히, 통신부(610)는 가상화 난독화가 적용될 영역에 마커가 삽입된 프로그램의 소스 코드를 수신할 수 있다.
프로세서(620)는 통신부(610)에서 수신한 원본 소스 코드에 가상화 난독화를 수행할 수 있다. 구체적으로, 프로세서(620)는 마커가 삽입된 소스 코드로부터 가상화 난독화가 수행될 영역을 인식할 수 있다. 그리고, 프로세서(620)는 가상화 난독화가 적용될 영역에서 가상화 코드를 포함하는 가상화 구조를 생성할 수 있다. 이 때의 가상화 구조는 가상화 코드 외에도 핸들러 코드, 디스패처 및 가상화 레지스터 등 일반적인 가상화 구성 요소를 더 포함할 수 있다.
일 실시 예에 따르면, 프로세서(620)는 가상화 코드를 복수의 코드 블록으로 구성할 수 있다. 프로세서(620)는 가상화 코드를 제어흐름의 이동에 따라 나누어 복수의 베이직 블록으로 구성할 수 있다. 그리고, 프로세서(620)는 복수의 코드 블록 중 하나로부터 복수의 랜덤 키 중 하나를 이용하여 새로운 코드 블록을 생성할 수 있다. 이를 위하여 N개의 코드 블록에 대응될 수 있도록 랜덤한 키를 N-1개 생성할 수 있다. 새로운 코드 블록을 생성하는 동작은 초기 코드 블록을 포함하여 총 N개의 코드 블록이 될 때까지 서로 다른 랜덤 키를 사용하여 반복될 수 있다. 이 때 복수의 랜덤 키는 서로 다르며, 각각의 코드 블록의 생성에 이용되는 랜덤 키 또한 서로 다르다. 이 때문에 각각의 코드 블록에 대응하는 디스패처와 매핑 룰 또한 서로 다르다. 따라서, 초기 가상화 코드 블록을 VCB1이라 한다면, 첫 연산의 대상이 된 블록은 난독화 되지 않으므로 VCB1은 NVCB1일 것이며, 이후의 생성된 N-1개의 새로운 가상화 코드 블록은 난독화 된 코드 블록으로 NVCB2 내지 NVCBN으로 지칭될 것이다.
일 실시 예에 따르면, 프로세서(620)는 새로운 코드 블록을 생성하기 위해 이전의 코드 블록과 랜덤 키를 연산할 수 있다. 이 때 랜덤 키를 이용한 연산은 XOR 연산일 수 있다. 그리고, 프로세서(620)는 생성된 새로운 코드 블록에 대응하는 디스패처를 생성할 수 있다. 즉, 초기 블록인 NVCB1을 포함하여 새로운 코드 블록이 NVCBN까지 생성된 경우, 프로세서(620)는 이의 대응 규칙에 해당하는 디스패처를 추가 생성할 수 있다. 난독화 강화된 코드 블록이 N개임에 따라 디스패처 또는 매핑 룰 또한 N개 생성될 것이다.
일 실시 예에 따르면, 프로세서(620)는 하나의 가상화 코드 블록이 모두 실행되는 경우 다음 가상화 코드 블록을 생성할 수 있도록 언폴드 핸들러 코드를 생성할 수 있다. 또한, 프로세서(620)는 원본 소스 코드의 가상 영역에 암호화 된 가상화 코드를 생성할 수도 있다. 프로세서(620)가 가상화 구조의 구성요소를 모두 구성하였으면, 이를 프로그램 내부의 가상 머신 영역에 생성하여 가상화 코드 폴딩을 완료할 수 있다. 이 때 암호화된 가상화 코드는 NVCB1 내지 NVCBN 중 가장 긴 길이의 코드 블록일 수 있다. 이에 따라 하나의 코드 블록만이 정적으로 노출될 수 있고, 전체 소스 코드 대비 대략 1/N 길이(byte)의 코드만이 노출될 수 있다.
일 실시 예에 따른 프로세서(620)는 도 5의 장치(500)의 동작을 수행할 수 있다.
가상화 코드의 난독화를 강화하는 방법을 실행하기 위한 장치(600)는 예시적인 것이며 통신부(610) 및 프로세서(620) 외에 다른 구성요소를 더 포함할 수 있다. 또한, 장치(600)는 구성요소를 통해 전술한 실시 예들을 실시할 수 있다.
전술한 실시 예들에 따른 장치는 프로세서, 프로그램 데이터를 저장하고 실행하는 메모리, 디스크 드라이브와 같은 영구 저장부(permanent storage), 외부 장치와 통신하는 통신 포트, 터치 패널, 키(key), 버튼 등과 같은 사용자 인터페이스 장치 등을 포함할 수 있다. 소프트웨어 모듈 또는 알고리즘으로 구현되는 방법들은 상기 프로세서상에서 실행 가능한 컴퓨터가 읽을 수 있는 코드들 또는 프로그램 명령들로서 컴퓨터가 읽을 수 있는 기록 매체 상에 저장될 수 있다. 여기서 컴퓨터가 읽을 수 있는 기록 매체로 마그네틱 저장 매체(예컨대, ROM(read-only memory), RAM(random-Access memory), 플로피 디스크, 하드 디스크 등) 및 광학적 판독 매체(예컨대, 시디롬(CD-ROM), 디브이디(DVD: Digital Versatile Disc)) 등이 있다. 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템들에 분산되어, 분산 방식으로 컴퓨터가 판독 가능한 코드가 저장되고 실행될 수 있다. 매체는 컴퓨터에 의해 판독가능하며, 메모리에 저장되고, 프로세서에서 실행될 수 있다.
본 실시 예는 기능적인 블록 구성들 및 다양한 처리 단계들로 나타내어질 수 있다. 이러한 기능 블록들은 특정 기능들을 실행하는 다양한 개수의 하드웨어 또는/및 소프트웨어 구성들로 구현될 수 있다. 예를 들어, 실시 예는 하나 이상의 마이크로프로세서들의 제어 또는 다른 제어 장치들에 의해서 다양한 기능들을 실행할 수 있는, 메모리, 프로세싱, 로직(logic), 룩 업 테이블(look-up table) 등과 같은 직접 회로 구성들을 채용할 수 있다. 구성 요소들이 소프트웨어 프로그래밍 또는 소프트웨어 요소들로 실행될 수 있는 것과 유사하게, 본 실시 예는 데이터 구조, 프로세스들, 루틴들 또는 다른 프로그래밍 구성들의 조합으로 구현되는 다양한 알고리즘을 포함하여, C, C++, 자바(Java), 어셈블러(assembler) 등과 같은 프로그래밍 또는 스크립팅 언어로 구현될 수 있다. 기능적인 측면들은 하나 이상의 프로세서들에서 실행되는 알고리즘으로 구현될 수 있다. 또한, 본 실시 예는 전자적인 환경 설정, 신호 처리, 및/또는 데이터 처리 등을 위하여 종래 기술을 채용할 수 있다. “매커니즘”, “요소”, “수단”, “구성”과 같은 용어는 넓게 사용될 수 있으며, 기계적이고 물리적인 구성들로서 한정되는 것은 아니다. 상기 용어는 프로세서 등과 연계하여 소프트웨어의 일련의 처리들(routines)의 의미를 포함할 수 있다.
전술한 실시 예들은 일 예시일 뿐 후술하는 청구항들의 범위 내에서 다른 실시 예들이 구현될 수 있다.

Claims (10)

  1. 가상화 코드의 난독화를 강화하는 방법에 있어서,
    원본 소스 코드에서 가상화 난독화가 적용될 영역을 지정하는 단계;
    상기 영역에서 가상화 코드를 포함하는 가상화 구조를 생성하는 단계;
    상기 가상화 코드를 복수의 코드 블록으로 구성하는 단계;
    상기 복수의 코드 블록 중 제1 코드 블록으로부터 복수의 랜덤 키 중 제1 랜덤 키를 이용하여 새로운 코드 블록을 생성하는 단계; 및
    상기 새로운 코드 블록에 대응하는 디스패처를 생성하는 단계를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 새로운 코드 블록에 대하여 상기 복수의 랜덤 키를 이용하여 다음 코드 블록을 생성하는 단계를 반복하는 단계를 더 포함하고,
    상기 복수의 랜덤 키는 상이하고, 각각의 코드 블록의 생성에 이용되는 랜덤 키는 상이한, 방법.
  3. 제2항에 있어서,
    상기 제1 코드 블록에 대응하는 디스패처 및 복수의 생성된 코드 블록에 각각 대응하는 디스패처는 상이한, 방법.
  4. 제2항에 있어서,
    상기 원본 소스 코드의 가상 영역에 암호화된 가상화 코드를 생성하는 단계를 더 포함하고,
    상기 암호화된 가상화 코드는 하나의 코드 블록을 포함하고, 상기 하나의 코드 블록은 상기 제1 코드 블록 및 복수의 생성된 코드 블록 중 가장 긴 길이의 코드 블록인, 방법.
  5. 제1항에 있어서,
    상기 새로운 코드 블록을 생성하는 단계는, 상기 제1 코드 블록과 상기 제1 랜덤 키를 XOR 연산하여 새로운 코드 블록을 생성하는 단계를 포함하고,
    상기 새로운 코드 블록은 상기 복수의 코드 블록 중 상기 제1 코드 블록의 다음 코드 블록을 암호화한 블록에 대응되는, 방법.
  6. 제1항에 있어서,
    언폴드(unfold) 핸들러 코드를 생성하는 단계를 더 포함하고,
    상기 언폴드 핸들러 코드는, 상기 새로운 코드 블록이 생성될 때 다음 코드 블록을 연산하기 위하여 자동으로 실행되는 소스 코드인, 방법.
  7. 제1항에 있어서,
    상기 가상화 구조는 핸들러 코드, 디스패처 및 가상화 레지스터를 더 포함하는, 방법.
  8. 제1항에 있어서,
    상기 가상화 코드를 복수의 코드 블록으로 구성하는 단계는,
    상기 가상화 코드를 제어흐름의 이동에 따라 나누어 블록으로 구성하는 단계를 포함하는, 방법.
  9. 가상화 코드의 난독화를 강화하는 방법을 수행하는 장치에 있어서,
    원본 소스 코드에 대한 정보를 수신하는 통신부; 및
    상기 원본 소스 코드에 가상화 난독화를 수행하도록 구성되는 프로세서를 포함하고,
    상기 프로세서는:
    상기 원본 소스 코드에서 가상화 난독화가 적용될 영역을 지정하고,
    상기 영역에서 가상화 코드를 포함하는 가상화 구조를 생성하고,
    상기 가상화 코드를 복수의 코드 블록으로 구성하고,
    상기 복수의 코드 블록 중 제1 코드 블록으로부터 복수의 랜덤 키 중 제1 랜덤 키를 이용하여 새로운 코드 블록을 생성하고,
    상기 새로운 코드 블록에 대응하는 디스패처를 생성하는, 장치.
  10. 가상화 코드의 난독화를 강화하는 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터 판독 가능한 비일시적 기록매체로서,
    상기 가상화 코드의 난독화 강화 방법은:
    원본 소스 코드에서 가상화 난독화가 적용될 영역을 지정하는 단계;
    상기 영역에서 가상화 코드를 포함하는 가상화 구조를 생성하는 단계;
    상기 가상화 코드를 복수의 코드 블록으로 구성하는 단계;
    상기 복수의 코드 블록 중 제1 코드 블록으로부터 복수의 랜덤 키 중 제1 랜덤 키를 이용하여 새로운 코드 블록을 생성하는 단계; 및
    상기 새로운 코드 블록에 대응하는 디스패처를 생성하는 단계를 포함하는, 컴퓨터 판독 가능한 비일시적 기록매체.
KR1020200137065A 2020-10-21 2020-10-21 가상화 코드의 난독화를 강화하는 방법 및 그 장치 KR102430335B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020200137065A KR102430335B1 (ko) 2020-10-21 2020-10-21 가상화 코드의 난독화를 강화하는 방법 및 그 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200137065A KR102430335B1 (ko) 2020-10-21 2020-10-21 가상화 코드의 난독화를 강화하는 방법 및 그 장치

Publications (2)

Publication Number Publication Date
KR20220052759A KR20220052759A (ko) 2022-04-28
KR102430335B1 true KR102430335B1 (ko) 2022-08-08

Family

ID=81447026

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200137065A KR102430335B1 (ko) 2020-10-21 2020-10-21 가상화 코드의 난독화를 강화하는 방법 및 그 장치

Country Status (1)

Country Link
KR (1) KR102430335B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102482880B1 (ko) * 2022-09-05 2022-12-29 한화시스템(주) 무기체계 임베디드 sw 보호를 위한 역공학 방지 시스템 및 그 방법

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101583306B1 (ko) * 2014-01-20 2016-01-07 고려대학교 산학협력단 가상화 난독화 기법이 적용된 실행 파일의 분석 방법 및 분석 장치

Also Published As

Publication number Publication date
KR20220052759A (ko) 2022-04-28

Similar Documents

Publication Publication Date Title
JP7101761B2 (ja) コール・パス依存認証
CN107346401B (zh) 用于安全地执行程序的信息保障系统
US8090959B2 (en) Method and apparatus for protecting .net programs
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
CN106203006A (zh) 基于dex与so文件动态执行的Android应用加固方法
TW201227394A (en) Security through opcode randomization
CN109684794B (zh) 一种代码保护虚拟机kvm系统实现方法、装置、计算机设备及存储介质
Shioji et al. Code shredding: byte-granular randomization of program layout for detecting code-reuse attacks
US10867017B2 (en) Apparatus and method of providing security and apparatus and method of executing security for common intermediate language
Kuang et al. Exploiting dynamic scheduling for VM-based code obfuscation
KR102430335B1 (ko) 가상화 코드의 난독화를 강화하는 방법 및 그 장치
Wang et al. Leveraging WebAssembly for numerical JavaScript code virtualization
Bresch et al. TrustFlow-X: A practical framework for fine-grained control-flow integrity in critical systems
Wang et al. NativeSpeaker: Identifying crypto misuses in Android native code libraries
Schilling et al. SecWalk: Protecting page table walks against fault attacks
Wichelmann et al. MAMBO–V: Dynamic Side-Channel Leakage Analysis on RISC–V
Lee et al. Ensuring secure application execution and platform-specific execution in embedded devices
Chang et al. Program differentiation
Lashermes et al. Hardware-assisted program execution integrity: Hapei
Forte Automatic Binary Analysis and Instrumentation of Embedded Firmware for a Control-Flow Integrity Solution
Sánchez Ballabriga Automation of white-box cryptography attacks in Android applications
de Clercq Hardware-supported software and control flow integrity
Středa Analysis of Virtual Machine based obfuscation
Monden et al. Obfuscated instructions for software protection
Liu et al. A Hooking Interpreter Based Method for Script Program Protection

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant