KR101753811B1 - 동적 할당 메모리를 이용하는 애플리케이션 코드 자가 변환 장치 및 이를 이용한 애플리케이션 코드 자가 변환 방법 - Google Patents

동적 할당 메모리를 이용하는 애플리케이션 코드 자가 변환 장치 및 이를 이용한 애플리케이션 코드 자가 변환 방법 Download PDF

Info

Publication number
KR101753811B1
KR101753811B1 KR1020160170150A KR20160170150A KR101753811B1 KR 101753811 B1 KR101753811 B1 KR 101753811B1 KR 1020160170150 A KR1020160170150 A KR 1020160170150A KR 20160170150 A KR20160170150 A KR 20160170150A KR 101753811 B1 KR101753811 B1 KR 101753811B1
Authority
KR
South Korea
Prior art keywords
code
important
dynamic memory
important code
converter
Prior art date
Application number
KR1020160170150A
Other languages
English (en)
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 KR1020160170150A priority Critical patent/KR101753811B1/ko
Application granted granted Critical
Publication of KR101753811B1 publication Critical patent/KR101753811B1/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/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services

Landscapes

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

Abstract

애플리케이션 코드 자가 변환 장치는 코드 분리 변환기, 중요코드 변환기, 자가 변환 생성부 및 자가 변환 파일 변환기를 포함한다. 상기 코드 분리 변환기는 애플리케이션 코드를 중요코드 및 상기 중요코드 이외의 일반코드로 분리하고, 상기 중요코드를 네이티브 코드(Native code) 형식으로 변환한다. 상기 중요코드 변환기는 상기 중요코드 내의 상대주소 호출부를 찾아 상기 상대주소를 호출하지 않고 절대주소를 호출하도록 변환한다. 상기 자가 변환 생성부는 동적 메모리를 할당 및 해제하기 위한 코드 및 암호화된 중요코드를 복호화하여 상기 동적 메모리에 복호화된 중요코드를 쓰기 위한 코드를 생성한다. 상기 자가 변환 파일 변환기는 상기 중요코드 내의 암호화 대상 코드를 찾아 상기 암호화 대상 코드를 암호화한다.

Description

동적 할당 메모리를 이용하는 애플리케이션 코드 자가 변환 장치 및 이를 이용한 애플리케이션 코드 자가 변환 방법 {APPLICATION CODE SELF MODIFICATION APPARATUS USING DYNAMICALLY ALLOCATED MEMORY AND METHOD FOR SELF MODIFICATION OF APPLICATION CODE USING THE APPLICATION CODE SELF MODIFICATION APPARATUS}
본 발명은 동적 할당 메모리를 이용하는 애플리케이션 코드 자가 변환 장치 및 이를 이용한 애플리케이션 코드 자가 변환 방법에 관한 것으로, 보다 구체적으로 역공학 저항성을 향상시킨 동적 할당 메모리를 이용하는 애플리케이션 코드 자가 변환 장치 및 이를 이용한 애플리케이션 코드 자가 변환 방법에 관한 것이다.
종래에는 애플리케이션을 보호하기 위하여 역공학 저항성이 낮은 관리되는 코드(Managed Code)에서 중요코드 부분을 CPU 명령어 집합인 네이티브 코드(Native Code)로 변경하여 상대적으로 역공학 저항성을 높이고 있다.
또한, 네이티브 코드로 변환된 중요코드와 이를 호출하는 호출부의 제어 흐름을 분석하기 힘들게 하기 위해서 자가 변환 기반의 동적 벡터를 통해 코드 흐름 추적을 방지하고 역공학 분석에 대한 저항성을 향상시켰다.
종래의 자가 변환 과정은 로딩 시점에 한번만 복호화 실행코드가 실행되어 암호화되어 있는 네이티브 실행코드 섹션 전체를 메모리에 복호화해서 실행하는 방식으로 정적 분석 저항성만 증가하게 된다.
또한, 일반적인 실행코드 섹션은 메모리에 읽기와 실행 권한을 가지고 있지만, 기존 자가 변환 과정은 실행코드 섹션에 있는 메모리에 복호화를 한다. 따라서, 같은 메모리 상에 강제로 쓰기 권한을 추가하여 실행을 해야 한다. 그리고 새로운 섹션을 추가하여 복호화 실행코드가 추가되기 때문에 쉽게 자가 변환이 적용된 실행파일로 인지되기 쉽다.
애플리케이션 코드가 메모리에 로딩된 후에는 중요코드가 지속적으로 메모리에 노출되어 있어 메모리 구조를 확인하면 쉽게 복호화된 중요코드를 얻을 수 있게 되기 때문에 동적 분석 저항성이 낮아지게 된다.
본 발명은 종래 애플리케이션 코드 자가 변환 장치 및 이를 이용한 애플리케이션 코드 자가 변환 방법이 가지는 문제점들을 해결하기 위한 것으로, 본 발명이 이루고자 하는 목적은 중요코드가 실행될 시마다 암호화 되어 있는 중요코드를 복호화하여 동적 메모리에 적재하며, 상기 중요코드가 실행된 후에는 상기 동적 메모리를 해제함으로써, 코드 노출 시간을 최소화하여 역공학 저항성을 향상시킨 애플리케이션 코드 자가 변환 장치를 제공하는 것이다.
본 발명이 이루고자 하는 다른 목적은 상기 애플리케이션 코드 자가 변환 장치를 이용하는 애플리케이션 코드 자가 변환 방법을 제공하는 것이다.
상기한 본 발명의 목적을 실현하기 위한 일 실시예에 따른 애플리케이션 코드 자가 변환 장치는 코드 분리 변환기, 중요코드 변환기, 자가 변환 생성부 및 자가 변환 파일 변환기를 포함한다. 상기 코드 분리 변환기는 애플리케이션 코드를 중요코드 및 상기 중요코드 이외의 일반코드로 분리하고, 상기 중요코드를 네이티브 코드(Native code) 형식으로 변환한다. 상기 중요코드 변환기는 상기 중요코드 내의 상대주소 호출부를 찾아 상기 상대주소를 호출하지 않고 절대주소를 호출하도록 변환한다. 상기 자가 변환 생성부는 동적 메모리를 할당 및 해제하기 위한 코드 및 암호화된 중요코드를 복호화하여 상기 동적 메모리에 복호화된 중요코드를 쓰기 위한 코드를 생성한다. 상기 자가 변환 파일 변환기는 상기 중요코드 내의 암호화 대상 코드를 찾아 상기 암호화 대상 코드를 암호화한다.
본 발명의 일 실시예에 있어서, 상기 코드 분리 변환기는 상기 애플리케이션 코드를 상기 중요코드 및 상기 일반코드로 분리하는 중요코드 분리기, 상기 중요코드를 호출하기 위한 중요코드 호출기를 생성하는 중요코드 호출기 생성부 및 상기 중요코드를 상기 네이티브 코드로 형식으로 변환하는 네이티브 변환기를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 중요코드 변환기는 상기 중요코드 내의 상기 상대주소 호출부를 찾아 상기 상대주소 호출부가 상기 상대주소를 호출하지 않고 동적 위치 검색기를 호출하도록 상기 중요코드를 변환하는 중요코드 상대주소 변환기 및 상기 상대주소에 대응하는 상기 절대주소를 찾는 상기 동적 위치 검색기를 생성하는 동적 위치 검색기 생성부를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 중요코드 상대주소 변환기는 상기 상대주소를 호출하지 않고 상기 동적 위치 검색기를 호출하도록 하는 동적 위치 검색기 호출기 및 상기 중요코드가 상기 동적 위치 검색기로부터 받은 상기 절대주소를 호출하도록 하는 절대주소 코드 호출기를 생성할 수 있다.
본 발명의 일 실시예에 있어서, 상기 자가 변환 생성부는 상기 암호화된 중요코드의 위치와 크기를 분석하는 중요코드 분석기를 생성하는 중요코드 분석기 생성부, 상기 복호화된 중요코드를 쓰기 위한 상기 동적 메모리를 할당 및 해제하고, 상기 복호화된 중요코드를 상기 동적 메모리에 쓸 때 상기 동적 메모리의 권한을 쓰기 권한으로 변경하며, 상기 복호화된 중요코드가 실행될 때 상기 동적 메모리의 상기 권한을 읽기 및 실행 권한으로 변경하는 동적 메모리 할당 및 해제기를 생성하는 동적 메모리 할당 및 해제기 생성부 및 상기 중요코드 분석기를 통해 얻은 상기 암호화된 중요코드의 상기 위치와 상기 크기를 이용해 상기 암호화된 중요코드를 복호화하고, 상기 복호화된 중요코드를 상기 동적 메모리에 쓰는 중요코드 복호화기를 생성하는 중요코드 복호화기 생성부를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 자가 변환 파일 변환기는 상기 중요코드 내의 상기 암호화 대상 코드의 위치 및 크기를 분석하는 실행 파일 문장 분석기 및 상기 실행 파일 문장 분석기를 통해 얻은 상기 암호화 대상 코드의 상기 위치 및 상기 크기를 기초로 상기 암호화 대상 코드를 암호화하는 실행파일 중요코드 암호화기를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 일반코드 및 상기 중요코드 호출기는 애플리케이션의 관리되는 코드(Managed code) 영역에 배치될 수 있다. 상기 암호화된 중요코드, 상기 중요코드 분석기, 상기 중요코드 복호화기, 상기 동적 메모리 할당 및 해제기 및 상기 동적 위치 검색기는 상기 애플리케이션의 네이티브 코드 영역에 배치될 수 있다.
본 발명의 일 실시예에 있어서, 상기 중요코드의 호출 시점에서, 상기 중요코드 분석기는 상기 암호화된 중요코드의 상기 위치와 상기 크기를 분석할 수 있다.
본 발명의 일 실시예에 있어서, 상기 동적 메모리의 할당 시점에서, 상기 동적 메모리 할당 및 해제기는 상기 동적 메모리를 할당하고, 상기 중요코드 복호화기는 상기 중요코드 분석기로부터 얻은 상기 암호화된 중요코드의 상기 위치와 상기 크기를 기초로 상기 암호화된 중요코드를 복호화하며, 상기 동적 메모리 할당 및 해제기는 상기 동적 메모리의 상기 권한을 상기 쓰기 권한으로 변경하고, 상기 중요코드 복호화기는 상기 복호화된 중요코드를 상기 동적 메모리에 쓸 수 있다.
본 발명의 일 실시예에 있어서, 상기 복호화된 중요코드의 실행 시점에서, 상기 동적 메모리 할당 및 해제기는 상기 동적 메모리의 상기 권한을 상기 읽기 및 실행 권한으로 변경하고, 상기 동적 메모리 영역에서 상기 복호화된 중요코드가 실행될 수 있다.
본 발명의 일 실시예에 있어서, 상기 동적 메모리의 해제 시점에서, 상기 동적 메모리 할당 및 해제기는 상기 동적 메모리를 해제시켜 상기 복호화된 중요코드를 제거할 수 있다.
본 발명의 일 실시예에 있어서, 상기 코드 분리 변환기는 제1 코드 형식의 상기 일반코드 및 상기 중요코드를 포함하는 상기 제1 코드를 입력 받아 제2 코드 형식의 상기 중요코드를 포함하는 제2 코드를 생성할 수 있다. 상기 중요코드 변환기는 상기 제2 코드 형식의 상기 제2 코드를 입력 받아 상기 제2 코드 형식을 갖고 상기 제2 코드의 상기 상대주소 호출부가 절대주소를 호출하도록 변환된 제3 코드를 생성할 수 있다. 상기 자가 변환 생성부는 상기 제2 코드 형식의 상기 제3 코드를 입력 받아 상기 제2 코드 형식을 갖고 상기 제3 코드에 상기 동적 메모리에 상기 복호화된 중요코드를 쓰기 위한 자가 변환 코드가 추가된 제4 코드를 생성할 수 있다. 상기 자가 변환 파일 변환기는 상기 제2 코드 형식의 상기 제4 코드를 컴파일하여 생성한 제3 코드 형식의 제5 코드를 입력 받아 상기 제3 코드 형식을 갖고 상기 중요코드가 암호화된 제6 코드를 생성할 수 있다.
본 발명의 일 실시예에 있어서, 상기 제1 코드 형식은 관리되는 코드(Managed code) 형식일 수 있다. 상기 제2 코드 형식은 상기 네이티브 코드 형식일 수 있다. 상기 제3 코드 형식은 공유 객체 코드(Shared object code) 형식일 수 있다.
상기한 본 발명의 다른 목적을 실현하기 위한 일 실시예에 따른 애플리케이션 코드 자가 변환 방법은 코드 분리 변환기를 이용하여, 애플리케이션 코드를 중요코드 및 상기 중요코드 이외의 일반코드로 분리하고, 상기 중요코드를 네이티브 코드(Native code) 형식으로 변환하는 단계, 중요코드 변환기를 이용하여, 상기 중요코드 내의 상대주소 호출부를 찾아 상기 상대주소를 호출하지 않고 절대주소를 호출하도록 변환하는 단계, 자가 변환 생성부를 이용하여, 동적 메모리를 할당 및 해제하기 위한 코드 및 암호화된 중요코드를 복호화하여 상기 동적 메모리에 복호화된 중요코드를 쓰기 위한 코드를 생성하는 단계 및 자가 변환 파일 변환기를 이용하여, 상기 중요코드 내의 암호화 대상 코드를 찾아 상기 암호화 대상 코드를 암호화하는 단계를 포함한다.
본 발명의 일 실시예에 있어서, 상기 코드 분리 변환기는 상기 애플리케이션 코드를 상기 중요코드 및 상기 일반코드로 분리하는 중요코드 분리기, 상기 중요코드를 호출하기 위한 중요코드 호출기를 생성하는 중요코드 호출기 생성부 및 상기 중요코드를 상기 네이티브 코드로 형식으로 변환하는 네이티브 변환기를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 중요코드 변환기는 상기 중요코드 내의 상기 상대주소 호출부를 찾아 상기 상대주소 호출부가 상기 상대주소를 호출하지 않고 동적 위치 검색기를 호출하도록 상기 중요코드를 변환하는 중요코드 상대주소 변환기 및 상기 상대주소에 대응하는 상기 절대주소를 찾는 상기 동적 위치 검색기를 생성하는 동적 위치 검색기 생성부를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 자가 변환 생성부는 상기 암호화된 중요코드의 위치와 크기를 분석하는 중요코드 분석기를 생성하는 중요코드 분석기 생성부, 상기 복호화된 중요코드를 쓰기 위한 상기 동적 메모리를 할당 및 해제하고, 상기 복호화된 중요코드를 상기 동적 메모리에 쓸 때 상기 동적 메모리의 권한을 쓰기 권한으로 변경하며, 상기 복호화된 중요코드가 실행될 때 상기 동적 메모리의 상기 권한을 읽기 및 실행 권한으로 변경하는 동적 메모리 할당 및 해제기를 생성하는 동적 메모리 할당 및 해제기 생성부 및 상기 중요코드 분석기를 통해 얻은 상기 암호화된 중요코드의 상기 위치와 상기 크기를 이용해 상기 암호화된 중요코드를 복호화하고, 상기 복호화된 중요코드를 상기 동적 메모리에 쓰는 중요코드 복호화기를 생성하는 중요코드 복호화기 생성부를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 자가 변환 파일 변환기는 상기 중요코드 내의 상기 암호화 대상 코드의 위치 및 크기를 분석하는 실행 파일 문장 분석기 및 상기 실행 파일 문장 분석기를 통해 얻은 상기 암호화 대상 코드의 상기 위치 및 상기 크기를 기초로 상기 암호화 대상 코드를 암호화하는 실행파일 중요코드 암호화기를 포함할 수 있다.
본 발명에 따른 애플리케이션 코드 자가 변환 장치 및 이를 이용하는 애플리케이션 코드 자가 변환 방법은 중요코드가 실행될 시마다 암호화 되어 있는 중요코드를 복호화하여 동적 메모리에 적재하며, 상기 중요코드가 실행된 후에는 상기 동적 메모리를 해제함으로써, 코드 노출 시간을 최소화하여 동적 분석 저항성이 증가될 수 있다.
또한, 동적 할당 메모리를 이용한 자가 변환은 실행 파일 상에 강제로 쓰기 권한을 수정할 필요가 없고 일반적인 실행 코드 섹션에 복호화 실행 코드가 같이 존재하기 때문에 정적 분석 저항성이 증가될 수 있다.
도 1은 본 발명의 일 실시예에 따른 애플리케이션 코드 자가 변환 장치를 나타내는 블록도이다.
도 2는 도 1의 애플리케이션 코드 자가 변환 장치의 코드 변환 과정을 나타내는 개념도이다.
도 3은 도 1의 애플리케이션 코드 자가 변환 장치를 이용한 중요코드 호출 시점의 메모리 구조를 나타내는 개념도이다.
도 4는 도 1의 애플리케이션 코드 자가 변환 장치를 이용한 동적 메모리 할당 시점의 메모리 구조를 나타내는 개념도이다.
도 5는 도 1의 애플리케이션 코드 자가 변환 장치를 이용한 복호화된 중요코드 실행 시점의 메모리 구조를 나타내는 개념도이다.
도 6은 도 1의 애플리케이션 코드 자가 변환 장치를 이용한 중요코드 해제 시점의 메모리 구조를 나타내는 개념도이다.
도 7은 도 1의 애플리케이션 코드 자가 변환 장치를 이용한 중요코드 실행 시에 상대주소를 참조하는 흐름을 나타내는 개념도이다.
본문에 개시되어 있는 본 발명의 실시예들에 대해서, 특정한 구조적 내지 기능적 설명들은 단지 본 발명의 실시예를 설명하기 위한 목적으로 예시된 것으로, 본 발명의 실시예들은 다양한 형태로 실시될 수 있으며 본문에 설명된 실시예들에 한정되는 것으로 해석되어서는 아니 된다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는바, 특정 실시예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
제1, 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로 사용될 수 있다. 예를 들어, 본 발명의 권리 범위로부터 이탈되지 않은 채 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성요소들 간의 관계를 설명하는 다른 표현들, 즉 "~사이에"와 "바로 ~사이에" 또는 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 설시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미이다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미인 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
한편, 어떤 실시예가 달리 구현 가능한 경우에 특정 블록 내에 명기된 기능 또는 동작이 순서도에 명기된 순서와 다르게 일어날 수도 있다. 예를 들어, 연속하는 두 블록이 실제로는 실질적으로 동시에 수행될 수도 있고, 관련된 기능 또는 동작에 따라서는 상기 블록들이 거꾸로 수행될 수도 있다.
이하, 첨부한 도면들을 참조하여, 본 발명의 바람직한 실시예를 보다 상세하게 설명하고자 한다. 도면상의 동일한 구성요소에 대해서는 동일한 참조부호를 사용하고 동일한 구성요소에 대해서 중복된 설명은 생략한다.
도 1은 본 발명의 일 실시예에 따른 애플리케이션 코드 자가 변환 장치를 나타내는 블록도이다.
상기 애플리케이션 코드 자가 변환 장치는 코드 분리 변환기(100), 중요코드 변환기(200), 자가 변환 생성부(300) 및 자가 변환 파일 변환기(400)를 포함한다.
상기 코드 분리 변환기(100)는 애플리케이션 코드(CD1)를 중요코드(30) 및 상기 중요코드(30) 이외의 일반코드(10)로 분리하고, 상기 중요코드(30)를 네이티브 코드(Native code) 형식으로 변환한다.
상기 코드 분리 변환기(100)는 중요코드 분리기(110), 중요코드 호출기 생성부(120) 및 네이티브 변환기(130)를 포함한다.
상기 중요코드 분리기(110)는 상기 애플리케이션 코드(CD1)를 상기 중요코드(30) 및 상기 일반코드(10)로 분리한다. 예를 들어, 상기 중요코드(30)는 애플리케이션의 해킹 공격 또는 애플리케이션의 위변조 공격으로부터 보호될 필요가 있는 코드를 의미할 수 있다. 상기 일반코드(10)는 상기 애플리케이션의 제1 영역(A1)에 배치될 수 있다. 상기 제1 영역(A1)은 관리되는 코드(Managed Code) 영역일 수 있다.
상기 애플리케이션 코드(CD1)는 제1 코드 형식을 가질 수 있다. 예를 들어, 상기 제1 코드 형식은 관리되는 코드(Managed Code) 형식일 수 있다. 예를 들어, 상기 제1 코드 형식은 바이트 코드(Byte Code) 형식일 수 있다. 상기 애플리케이션 코드(CD1)는 자바 코드(JAVA)일 수 있다. 예를 들어, 상기 애플리케이션 코드(CD1)는 달빅 실행 코드(Dalvik Executable, .dex)일 수 있다.
상기 중요코드 호출기 생성부(120)는 상기 중요코드(30)를 호출하기 위한 중요코드 호출기(20)를 생성한다. 예를 들어, 상기 중요코드 호출기(20)는 상기 중요코드(30)의 시그니쳐를 이용하여 상기 중요코드(30)를 호출할 수 있다. 예를 들어, 상기 중요코드(30)의 시그니쳐는 함수의 파라미터 정보일 수 있다.
상기 중요코드 호출기 생성부(120)에 의해 생성된 상기 중요코드 호출기(20)는 상기 제1 영역(A1)에 배치된다. 상기 중요코드 호출기(20)는 상기 중요코드(30)의 시그니쳐를 이용하여 메모리에 적재되는 중요코드(30)를 호출하게 된다.
상기 네이티브 변환기(130)는 상기 중요코드(30)를 상기 네이티브 코드로 형식으로 변환한다. 상기 네이티브 변환기(130)는 상기 네이티브 코드로 형식으로 변환된 상기 중요코드(30)를 상기 중요코드 변환기(200)에 출력한다.
상기 중요코드 변환기(200)는 상기 중요코드(30) 내의 상대주소 호출부를 찾아 상기 상대주소를 호출하지 않고 절대주소를 호출하도록 변환한다. 본 실시예에서, 상기 중요코드(30)는 실행파일 메모리가 아닌 동적 할당 메모리에서 실행된다. 상기 중요코드(30)의 상대주소는 상기 실행파일 메모리를 의미하므로, 상기 동적 할당 메모리에서 실행되는 상기 중요코드(30)가 상기 상대주소를 호출하게 되면 부적절한 코드나 데이터가 호출되게 된다.
따라서, 상기 중요코드 변환기(200)는 상기 중요코드(30) 내의 상대주소 호출부가 상기 상대주소가 아닌 절대주소를 호출하도록 상기 중요코드(30)를 변환한다.
상기 중요코드 변환기(200)는 중요코드 상대주소 변환기(210) 및 동적 위치 검색기 생성부(22)를 포함한다.
상기 중요코드 상대주소 변환기(210)는 상기 중요코드 내의 상기 상대주소 호출부를 찾아 상기 상대주소 호출부가 상기 상대주소를 호출하지 않고 동적 위치 검색기를 호출하도록 상기 중요코드를 변환한다.
상기 동적 위치 검색기 생성부(220)는 상기 상대주소에 대응하는 상기 절대주소를 찾는 상기 동적 위치 검색기를 생성한다.
상기 자가 변환 생성부(300)는 상기 동적 메모리를 할당 및 해제하기 위한 코드 및 암호화된 중요코드(35)를 복호화하여 상기 동적 메모리에 복호화된 중요코드를 쓰기 위한 코드를 생성한다.
상기 자가 변환 생성부(300)는 중요코드 분석기 생성부(310), 동적 메모리 할당 및 해제기 생성부(320) 및 중요코드 복호화기 생성부(330)를 포함한다.
상기 중요코드 분석기 생성부(310)는 상기 암호화된 중요코드(35)의 위치와 크기를 분석하는 중요코드 분석기(40)를 생성한다.
상기 동적 메모리 할당 및 해제기 생성부(320)는 상기 복호화된 중요코드를 쓰기 위한 상기 동적 메모리를 할당 및 해제하는 동적 메모리 할당 및 해제기(60)를 생성한다.
상기 동적 메모리 할당 및 해제기(60)는 상기 복호화된 중요코드를 상기 동적 메모리에 쓸 때 상기 동적 메모리의 권한을 쓰기 권한(_w_)으로 변경할 수 있다. 또한, 상기 동적 메모리 할당 및 해제기(60)는 상기 복호화된 중요코드가 실행될 때 상기 동적 메모리의 상기 권한을 읽기 및 실행 권한(r_x)으로 변경할 수 있다.
상기 중요코드 복호화기 생성부(330)는 상기 중요코드 분석기(40)를 통해 얻은 상기 암호화된 중요코드(35)의 상기 위치와 상기 크기를 이용해 상기 암호화된 중요코드(35)를 복호화하고, 상기 복호화된 중요코드를 상기 동적 메모리에 쓰는 중요코드 복호화기(50)를 생성한다.
상기 자가 변환 파일 변환기(400)는 상기 중요코드(30) 내의 암호화 대상 코드를 찾아 상기 암호화 대상 코드를 암호화한다.
상기 자가 변환 파일 변환기(400)는 실행 파일 문장 분석기(410) 및 실행파일 중요코드 암호화기(420)를 포함한다.
상기 실행 파일 문장 분석기(410)는 상기 중요코드(30) 내의 상기 암호화 대상 코드의 위치 및 크기를 분석한다.
상기 실행파일 중요코드 암호화기(420)는 상기 실행 파일 문장 분석기(410)를 통해 얻은 상기 암호화 대상 코드의 상기 위치 및 상기 크기를 기초로 상기 암호화 대상 코드를 암호화한다.
상기 일반코드(10) 및 상기 중요코드 호출기(20)는 상기 애플리케이션의 관리되는 코드(Managed code) 영역(A1)에 배치될 수 있다.
상기 암호화된 중요코드(35), 상기 중요코드 분석기(40), 상기 중요코드 복호화기(50), 상기 동적 메모리 할당 및 해제기(60) 및 상기 동적 위치 검색기(70)는 상기 애플리케이션의 네이티브 코드 영역(A2)에 배치될 수 있다.
상기 애플리케이션 자가 변환 장치를 이용한 자가 변환 방법의 흐름을 정리하면 아래와 같다.
1) 상기 중요코드 분리기(110)는 상기 애플리케이션 코드(CD1)를 입력 받는다.
2) 상기 중요코드 분리기(110)는 상기 애플리케이션 코드(CD1)를 중요코드(30) 및 일반코드(10)로 분리한다.
3) 상기 중요코드 호출기 생성부(120)는 상기 일반코드(10)에 상기 중요코드 호출기(20)가 포함되도록 상기 중요코드 호출기(20)를 생성한다. 상기 애플리케이션 실행 시 상기 중요코드 호출기(20)는 상기 중요코드(30)를 네이티브 코드 호출 방식으로 호출한다.
4) 상기 네이티브 변환기(130)는 상기 중요코드(30)를 상기 네이티브 코드 형식으로 변환한다.
5) 상기 중요코드 상대주소 변환기(210)는 상기 네이티브 코드 형식으로 변환된 상기 중요코드(30)에서 상대주소 호출부를 찾아 그 위치에 필요한 동적 위치 검색기 호출부 및 절대주소 코드 호출부로 변환한다.
6) 상기 동적 위치 검색기 생성부(220)는 상기 중요코드 상대주소 변환기(210)에서 검색된 모든 상대주소 호출부에 대응하는 절대주소를 찾아주는 상기 동적 위치 검색기(70)를 실행한다.
7) 상기 중요코드 분석기 생성부(310)는 실행파일을 분석하여 암호화된 중요코드(35)의 위치와 크기를 분석하는 중요코드 분석기(40)를 상기 네이티브 코드 영역(A2)에 생성한다.
8) 상기 동적 메모리 할당 및 해제기 생성부(320)는 상기 복호화된 중요코드를 쓸 수 있는 상기 동적 메모리를 할당 및 해제하는 상기 동적 메모리 할당 및 해제기(60)를 상기 네이티브 코드 영역(A2)에 생성한다.
9) 상기 중요코드 복호화기 생성부(330)는 상기 중요코드 분석기(40)를 통해 찾아진 상기 중요코드의 위치와 크기를 통해 암호화된 중요코드를 찾아 복호화하고 복호화된 중요코드를 상기 동적 메모리에 쓰는 상기 중요코드 복호화기(50)를 상기 네이티브 코드 영역(A2)에 생성한다.
10) 상기 실행파일 문장 분석기(410)는 상기 중요코드가 암호화되지 않은 상기 실행파일을 분석하여 상기 암호화 대상이 되는 중요코드의 위치와 크기를 찾는다.
11) 상기 실행파일 중요코드 암호화기(420)는 상기 실행파일 문장 분석기(410)를 통해 찾아낸 암호화 대상이 되는 상기 중요코드를 암호화한다.
도 2는 도 1의 애플리케이션 코드 자가 변환 장치의 코드 변환 과정을 나타내는 개념도이다.
도 1 및 도 2를 참조하면, 상기 코드 분리 변환기(100)는 제1 코드 형식(예를 들어, .java 파일)의 상기 일반코드(10) 및 상기 중요코드(30)를 포함하는 제1 코드(CD1)를 입력 받아 제2 코드 형식(예를 들어, .cpp 파일)의 상기 중요코드(30)를 포함하는 제2 코드(CD2)를 생성할 수 있다.
상기 중요코드 변환기(200)는 상기 제2 코드 형식의 상기 제2 코드(CD2)를 입력 받아 상기 제2 코드 형식을 갖고 상기 제2 코드(CD2)의 상기 상대주소 호출부가 절대주소를 호출하도록 변환된 제3 코드(CD3)를 생성할 수 있다.
상기 자가 변환 생성부(300)는 상기 제2 코드 형식의 상기 제3 코드(CD3)를 입력 받아 상기 제2 코드 형식을 갖고 상기 제3 코드(CD3)에 상기 동적 메모리에 상기 복호화된 중요코드를 쓰기 위한 자가 변환 코드가 추가된 제4 코드(CD4)를 생성할 수 있다.
컴파일러는 상기 제2 코드 형식의 상기 제4 코드(CD4)를 컴파일하여 제3 코드 형식(예를 들어, .so 파일)의 제5 코드(CD5)를 생성할 수 있다.
상기 자가 변환 파일 변환기(400)는 상기 제3 코드 형식의 상기 제5 코드(CD5)를 입력 받아 상기 제3 코드 형식을 갖고 상기 중요코드가 암호화된 제6 코드(CD6)를 생성할 수 있다.
상기 암호화된 제6 코드(CD6)는 상기 동적 메모리 상에 복호화되어 실행되고, 상기 동적 메모리의 해제 시에 상기 동적 메모리와 함께 제거된다.
상기 제1 코드 형식은 관리되는 코드(Managed code) 형식일 수 있다. 예를 들어, 상기 제1 코드 형식은 .java 또는 .dex 파일일 수 있다. 상기 제2 코드 형식은 상기 네이티브 코드 형식일 수 있다. 예를 들어, 상기 제2 코드 형식은 .cpp 파일일 수 있다. 상기 제3 코드 형식은 공유 객체 코드(Shared object code) 형식일 수 있다. 예를 들어, 상기 제3 코드 형식은 .so 파일일 수 있다.
도 3은 도 1의 애플리케이션 코드 자가 변환 장치를 이용한 중요코드 호출 시점의 메모리 구조를 나타내는 개념도이다. 도 4는 도 1의 애플리케이션 코드 자가 변환 장치를 이용한 동적 메모리 할당 시점의 메모리 구조를 나타내는 개념도이다. 도 5는 도 1의 애플리케이션 코드 자가 변환 장치를 이용한 복호화된 중요코드 실행 시점의 메모리 구조를 나타내는 개념도이다. 도 6은 도 1의 애플리케이션 코드 자가 변환 장치를 이용한 중요코드 해제 시점의 메모리 구조를 나타내는 개념도이다.
도 1 내지 도 6을 참조하면, 상기 중요코드(30)의 호출 시점에서, 상기 중요코드 분석기(40)는 상기 암호화된 중요코드의 상기 위치와 상기 크기를 분석할 수 있다.
상기 동적 메모리의 할당 시점에서, 상기 동적 메모리 할당 및 해제기(60)는 상기 동적 메모리를 할당할 수 있다. 상기 중요코드 복호화기(50)는 상기 중요코드 분석기(40)로부터 얻은 상기 암호화된 중요코드(35)의 상기 위치와 상기 크기를 기초로 상기 암호화된 중요코드(35)를 복호화할 수 있다. 상기 동적 메모리 할당 및 해제기(60)는 상기 동적 메모리의 상기 권한을 상기 쓰기 권한(_w_)으로 변경하고, 상기 중요코드 복호화기(50)는 상기 복호화된 중요코드(35A)를 상기 동적 메모리에 쓸 수 있다.
상기 복호화된 중요코드(35A)의 실행 시점에서, 상기 동적 메모리 할당 및 해제기(60)는 상기 동적 메모리의 상기 권한을 상기 읽기 및 실행 권한(r_x)으로 변경하고, 상기 동적 메모리 영역에서 상기 복호화된 중요코드(35A)가 실행될 수 있다.
상기 동적 메모리의 해제 시점에서, 상기 동적 메모리 할당 및 해제기(60)는 상기 동적 메모리를 해제시켜 상기 복호화된 중요코드(35A)를 상기 동적 메모리 상에서 제거할 수 있다.
도 7은 도 1의 애플리케이션 코드 자가 변환 장치를 이용한 중요코드 실행 시에 상대주소를 참조하는 흐름을 나타내는 개념도이다.
도 1 및 도 7을 참조하면, 상기 동적 위치 검색기 호출기(241)를 통해 동적 위치 검색기(70)를 실행한다.
상기 동적 위치 검색기(70)는 실행파일 메모리 내에 존재하기 때문에 상대주소를 통해 원하는 절대주소를 구할 수 있다. 예를 들어, 상기 동적 위치 검색기(70)는 상기 상대주소에 메모리 위치를 합산하여 상기 절대주소를 구할 수 있다.
상기 동적 위치 검색기(70)는 원하는 상대주소에 대응하는 변환된 절대주소를 중요코드(30)의 함수에 전달한다.
상기 중요 코드(30)의 함수는 전달된 절대주소를 절대 주소 코드 호출기(242)에 입력하여 상대주소 참조 명령어를 실행할 수 있다.
본 실시예에 따르면, 중요코드(30)가 실행될 시마다 암호화 되어 있는 중요코드(35)를 복호화하여 동적 메모리에 적재하며, 상기 중요코드가 실행된 후에는 상기 동적 메모리를 해제함으로써, 코드 노출 시간을 최소화하여 동적 분석 저항성이 증가될 수 있다.
또한, 동적 할당 메모리를 이용한 자가 변환은 실행 파일 상에 강제로 쓰기 권한을 수정할 필요가 없고 일반적인 실행 코드 섹션에 복호화 실행 코드가 같이 존재하기 때문에 정적 분석 저항성이 증가될 수 있다.
본 발명은 애플리케이션 코드의 난독화, 자가 변환, 은닉 등을 수행하는 임의의 전자 장치에 적용될 수 있다. 상기 전자 장치는 휴대 전화, 스마트 폰, 노트북 컴퓨터, 태블릿 컴퓨터, 디지털 방송 단말, PDA, PMP, 네비게이션 장치 디지털 카메라, 캠코더, 디지털 TV, 셋-탑 박스, 음악 재생기, 휴대용 게임 콘솔, 스마트 카드, 프린터 등을 포함할 수 있다.
상기에서는 본 발명의 바람직한 실시예를 참조하여 설명하였지만, 해당 기술분야의 숙련된 당업자는 하기의 특허청구범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 것이다.
10: 일반코드 20: 중요코드 호출기
30: 중요코드 35: 암호화된 중요코드
35A: 복호화된 중요코드 40: 중요코드 분석기
50: 중요코드 복호화기 60: 동적 메모리 할당 및 해제기
70: 동적 위치 검색기 100: 코드 분리 변환기
110: 중요코드 분리기 120: 중요코드 호출기 생성부
130: 네이티브 변환기 200: 중요코드 변환기
210: 중요코드 상대주소 변환기 220: 동적 위치 검색기 생성부
300: 자가 변환 생성부 310: 중요코드 분석기 생성부
320: 동적 메모리 할당 및 해제기 생성부
330: 중요코드 복호화기 생성부 400: 자가 변환 파일 변환기
410: 실행파일 문장 분석기
420: 실행파일 중요코드 암호화기

Claims (18)

  1. 애플리케이션 코드를 중요코드 및 상기 중요코드 이외의 일반코드로 분리하고, 상기 중요코드를 네이티브 코드(Native code) 형식으로 변환하는 코드 분리 변환기;
    상기 중요코드 내의 상대주소 호출부를 찾아 상기 상대주소를 호출하지 않고 절대주소를 호출하도록 변환하는 중요코드 변환기;
    동적 메모리를 할당 및 해제하기 위한 코드 및 암호화된 중요코드를 복호화하여 상기 동적 메모리에 복호화된 중요코드를 쓰기 위한 코드를 생성하는 자가 변환 생성부; 및
    상기 중요코드 내의 암호화 대상 코드를 찾아 상기 암호화 대상 코드를 암호화하는 자가 변환 파일 변환기를 포함하고,
    상기 자가 변환 생성부는
    상기 암호화된 중요코드의 위치와 크기를 분석하는 중요코드 분석기를 생성하는 중요코드 분석기 생성부;
    상기 복호화된 중요코드를 쓰기 위한 상기 동적 메모리를 할당 및 해제하고, 상기 복호화된 중요코드를 상기 동적 메모리에 쓸 때 상기 동적 메모리의 권한을 쓰기 권한으로 변경하며, 상기 복호화된 중요코드가 실행될 때 상기 동적 메모리의 상기 권한을 읽기 및 실행 권한으로 변경하는 동적 메모리 할당 및 해제기를 생성하는 동적 메모리 할당 및 해제기 생성부; 및
    상기 중요코드 분석기를 통해 얻은 상기 암호화된 중요코드의 상기 위치와 상기 크기를 이용해 상기 암호화된 중요코드를 복호화하고, 상기 복호화된 중요코드를 상기 동적 메모리에 쓰는 중요코드 복호화기를 생성하는 중요코드 복호화기 생성부를 포함하는 것을 특징으로 하는 애플리케이션 코드 자가 변환 장치.
  2. 제1항에 있어서, 상기 코드 분리 변환기는
    상기 애플리케이션 코드를 상기 중요코드 및 상기 일반코드로 분리하는 중요코드 분리기;
    상기 중요코드를 호출하기 위한 중요코드 호출기를 생성하는 중요코드 호출기 생성부; 및
    상기 중요코드를 상기 네이티브 코드 형식으로 변환하는 네이티브 변환기를 포함하는 것을 특징으로 하는 애플리케이션 코드 자가 변환 장치.
  3. 제2항에 있어서, 상기 중요코드 변환기는
    상기 중요코드 내의 상기 상대주소 호출부를 찾아 상기 상대주소 호출부가 상기 상대주소를 호출하지 않고 동적 위치 검색기를 호출하도록 상기 중요코드를 변환하는 중요코드 상대주소 변환기; 및
    상기 상대주소에 대응하는 상기 절대주소를 찾는 상기 동적 위치 검색기를 생성하는 동적 위치 검색기 생성부를 포함하는 것을 특징으로 하는 애플리케이션 코드 자가 변환 장치.
  4. 제3항에 있어서, 상기 중요코드 상대주소 변환기는
    상기 상대주소를 호출하지 않고 상기 동적 위치 검색기를 호출하도록 하는 동적 위치 검색기 호출기; 및
    상기 중요코드가 상기 동적 위치 검색기로부터 받은 상기 절대주소를 호출하도록 하는 절대주소 코드 호출기를 생성하는 것을 특징으로 하는 애플리케이션 코드 자가 변환 장치.
  5. 삭제
  6. 제4항에 있어서, 상기 자가 변환 파일 변환기는
    상기 중요코드 내의 상기 암호화 대상 코드의 위치 및 크기를 분석하는 실행 파일 문장 분석기; 및
    상기 실행 파일 문장 분석기를 통해 얻은 상기 암호화 대상 코드의 상기 위치 및 상기 크기를 기초로 상기 암호화 대상 코드를 암호화하는 실행파일 중요코드 암호화기를 포함하는 것을 특징으로 하는 애플리케이션 코드 자가 변환 장치.
  7. 제6항에 있어서, 상기 일반코드 및 상기 중요코드 호출기는 애플리케이션의 관리되는 코드(Managed code) 영역에 배치되고,
    상기 암호화된 중요코드, 상기 중요코드 분석기, 상기 중요코드 복호화기, 상기 동적 메모리 할당 및 해제기 및 상기 동적 위치 검색기는 상기 애플리케이션의 네이티브 코드 영역에 배치되는 것을 특징으로 하는 애플리케이션 코드 자가 변환 장치.
  8. 제6항에 있어서, 상기 중요코드의 호출 시점에서,
    상기 중요코드 분석기는 상기 암호화된 중요코드의 상기 위치와 상기 크기를 분석하는 것을 특징으로 하는 애플리케이션 코드 자가 변환 장치.
  9. 제8항에 있어서, 상기 동적 메모리의 할당 시점에서,
    상기 동적 메모리 할당 및 해제기는 상기 동적 메모리를 할당하고,
    상기 중요코드 복호화기는 상기 중요코드 분석기로부터 얻은 상기 암호화된 중요코드의 상기 위치와 상기 크기를 기초로 상기 암호화된 중요코드를 복호화하며,
    상기 동적 메모리 할당 및 해제기는 상기 동적 메모리의 상기 권한을 상기 쓰기 권한으로 변경하고,
    상기 중요코드 복호화기는 상기 복호화된 중요코드를 상기 동적 메모리에 쓰는 것을 특징으로 하는 애플리케이션 코드 자가 변환 장치.
  10. 제9항에 있어서, 상기 복호화된 중요코드의 실행 시점에서,
    상기 동적 메모리 할당 및 해제기는 상기 동적 메모리의 상기 권한을 상기 읽기 및 실행 권한으로 변경하고,
    동적 메모리 영역에서 상기 복호화된 중요코드가 실행되는 것을 특징으로 하는 애플리케이션 코드 자가 변환 장치.
  11. 제10항에 있어서, 상기 동적 메모리의 해제 시점에서,
    상기 동적 메모리 할당 및 해제기는 상기 동적 메모리를 해제시켜 상기 복호화된 중요코드를 제거하는 것을 특징으로 하는 애플리케이션 코드 자가 변환 장치.
  12. 애플리케이션 코드를 중요코드 및 상기 중요코드 이외의 일반코드로 분리하고, 상기 중요코드를 네이티브 코드(Native code) 형식으로 변환하는 코드 분리 변환기;
    상기 중요코드 내의 상대주소 호출부를 찾아 상기 상대주소를 호출하지 않고 절대주소를 호출하도록 변환하는 중요코드 변환기;
    동적 메모리를 할당 및 해제하기 위한 코드 및 암호화된 중요코드를 복호화하여 상기 동적 메모리에 복호화된 중요코드를 쓰기 위한 코드를 생성하는 자가 변환 생성부; 및
    상기 중요코드 내의 암호화 대상 코드를 찾아 상기 암호화 대상 코드를 암호화하는 자가 변환 파일 변환기를 포함하고,
    상기 코드 분리 변환기는 제1 코드 형식의 상기 일반코드 및 상기 중요코드를 포함하는 제1 코드를 입력 받아 제2 코드 형식의 상기 중요코드를 포함하는 제2 코드를 생성하고,
    상기 중요코드 변환기는 상기 제2 코드 형식의 상기 제2 코드를 입력 받아 상기 제2 코드 형식을 갖고 상기 제2 코드의 상기 상대주소 호출부가 절대주소를 호출하도록 변환된 제3 코드를 생성하고,
    상기 자가 변환 생성부는 상기 제2 코드 형식의 상기 제3 코드를 입력 받아 상기 제2 코드 형식을 갖고 상기 제3 코드에 상기 동적 메모리에 상기 복호화된 중요코드를 쓰기 위한 자가 변환 코드가 추가된 제4 코드를 생성하고,
    상기 자가 변환 파일 변환기는 상기 제2 코드 형식의 상기 제4 코드를 컴파일하여 생성한 제3 코드 형식의 제5 코드를 입력 받아 상기 제3 코드 형식을 갖고 상기 중요코드가 암호화된 제6 코드를 생성하는 것을 특징으로 하는 애플리케이션 코드 자가 변환 장치.
  13. 제12항에 있어서, 상기 제1 코드 형식은 관리되는 코드(Managed code) 형식이고,
    상기 제2 코드 형식은 상기 네이티브 코드 형식이며,
    상기 제3 코드 형식은 공유 객체 코드(Shared object code) 형식인 것을 특징으로 하는 애플리케이션 코드 자가 변환 장치.
  14. 코드 분리 변환기를 이용하여, 애플리케이션 코드를 중요코드 및 상기 중요코드 이외의 일반코드로 분리하고, 상기 중요코드를 네이티브 코드(Native code) 형식으로 변환하는 단계;
    중요코드 변환기를 이용하여, 상기 중요코드 내의 상대주소 호출부를 찾아 상기 상대주소를 호출하지 않고 절대주소를 호출하도록 변환하는 단계;
    자가 변환 생성부를 이용하여, 동적 메모리를 할당 및 해제하기 위한 코드 및 암호화된 중요코드를 복호화하여 상기 동적 메모리에 복호화된 중요코드를 쓰기 위한 코드를 생성하는 단계; 및
    자가 변환 파일 변환기를 이용하여, 상기 중요코드 내의 암호화 대상 코드를 찾아 상기 암호화 대상 코드를 암호화하는 단계를 포함하고,
    상기 자가 변환 생성부는
    상기 암호화된 중요코드의 위치와 크기를 분석하는 중요코드 분석기를 생성하는 중요코드 분석기 생성부;
    상기 복호화된 중요코드를 쓰기 위한 상기 동적 메모리를 할당 및 해제하고, 상기 복호화된 중요코드를 상기 동적 메모리에 쓸 때 상기 동적 메모리의 권한을 쓰기 권한으로 변경하며, 상기 복호화된 중요코드가 실행될 때 상기 동적 메모리의 상기 권한을 읽기 및 실행 권한으로 변경하는 동적 메모리 할당 및 해제기를 생성하는 동적 메모리 할당 및 해제기 생성부; 및
    상기 중요코드 분석기를 통해 얻은 상기 암호화된 중요코드의 상기 위치와 상기 크기를 이용해 상기 암호화된 중요코드를 복호화하고, 상기 복호화된 중요코드를 상기 동적 메모리에 쓰는 중요코드 복호화기를 생성하는 중요코드 복호화기 생성부를 포함하는 것을 특징으로 하는 애플리케이션 코드 자가 변환 방법.
  15. 제14항에 있어서, 상기 코드 분리 변환기는
    상기 애플리케이션 코드를 상기 중요코드 및 상기 일반코드로 분리하는 중요코드 분리기;
    상기 중요코드를 호출하기 위한 중요코드 호출기를 생성하는 중요코드 호출기 생성부; 및
    상기 중요코드를 상기 네이티브 코드 형식으로 변환하는 네이티브 변환기를 포함하는 것을 특징으로 하는 애플리케이션 코드 자가 변환 방법.
  16. 제15항에 있어서, 상기 중요코드 변환기는
    상기 중요코드 내의 상기 상대주소 호출부를 찾아 상기 상대주소 호출부가 상기 상대주소를 호출하지 않고 동적 위치 검색기를 호출하도록 상기 중요코드를 변환하는 중요코드 상대주소 변환기; 및
    상기 상대주소에 대응하는 상기 절대주소를 찾는 상기 동적 위치 검색기를 생성하는 동적 위치 검색기 생성부를 포함하는 것을 특징으로 하는 애플리케이션 코드 자가 변환 방법.
  17. 삭제
  18. 제14항에 있어서, 상기 자가 변환 파일 변환기는
    상기 중요코드 내의 상기 암호화 대상 코드의 위치 및 크기를 분석하는 실행 파일 문장 분석기; 및
    상기 실행 파일 문장 분석기를 통해 얻은 상기 암호화 대상 코드의 상기 위치 및 상기 크기를 기초로 상기 암호화 대상 코드를 암호화하는 실행파일 중요코드 암호화기를 포함하는 것을 특징으로 하는 애플리케이션 코드 자가 변환 방법.
KR1020160170150A 2016-12-14 2016-12-14 동적 할당 메모리를 이용하는 애플리케이션 코드 자가 변환 장치 및 이를 이용한 애플리케이션 코드 자가 변환 방법 KR101753811B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020160170150A KR101753811B1 (ko) 2016-12-14 2016-12-14 동적 할당 메모리를 이용하는 애플리케이션 코드 자가 변환 장치 및 이를 이용한 애플리케이션 코드 자가 변환 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020160170150A KR101753811B1 (ko) 2016-12-14 2016-12-14 동적 할당 메모리를 이용하는 애플리케이션 코드 자가 변환 장치 및 이를 이용한 애플리케이션 코드 자가 변환 방법

Publications (1)

Publication Number Publication Date
KR101753811B1 true KR101753811B1 (ko) 2017-07-19

Family

ID=59427551

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160170150A KR101753811B1 (ko) 2016-12-14 2016-12-14 동적 할당 메모리를 이용하는 애플리케이션 코드 자가 변환 장치 및 이를 이용한 애플리케이션 코드 자가 변환 방법

Country Status (1)

Country Link
KR (1) KR101753811B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020196959A1 (ko) * 2019-03-28 2020-10-01 라인플러스 주식회사 힙 메모리를 이용하여 실행 가능 파일을 보호하는 방법 및 시스템

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101328012B1 (ko) 2013-08-12 2013-11-13 숭실대학교산학협력단 애플리케이션 코드 난독화 장치 및 그 방법
KR101490047B1 (ko) * 2013-09-27 2015-02-04 숭실대학교산학협력단 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법
KR101619458B1 (ko) 2016-03-02 2016-05-10 (주)케이사인 애플리케이션 코드 난독화 장치 및 이를 이용한 애플리케이션 코드 난독화 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101328012B1 (ko) 2013-08-12 2013-11-13 숭실대학교산학협력단 애플리케이션 코드 난독화 장치 및 그 방법
KR101490047B1 (ko) * 2013-09-27 2015-02-04 숭실대학교산학협력단 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법
KR101619458B1 (ko) 2016-03-02 2016-05-10 (주)케이사인 애플리케이션 코드 난독화 장치 및 이를 이용한 애플리케이션 코드 난독화 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020196959A1 (ko) * 2019-03-28 2020-10-01 라인플러스 주식회사 힙 메모리를 이용하여 실행 가능 파일을 보호하는 방법 및 시스템

Similar Documents

Publication Publication Date Title
US10853270B2 (en) Cryptographic pointer address encoding
US9535942B2 (en) Apparatus and method for managing APK file in an android platform
US9443064B2 (en) Protecting method and system of java source code
EP2897073A1 (en) Device for obfuscating application code and method for same
WO2015058620A1 (en) Method and apparatus for generating installation package corresponding to an application and executing application
KR101623096B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
EP3126973A1 (en) Method, apparatus, and computer-readable medium for obfuscating execution of application on virtual machine
CN107122634B (zh) 软件安装包的加固保护方法及装置
CN105022936A (zh) 一种类class文件加密解密方法和装置
CN104680039A (zh) 一种应用程序安装包的数据保护方法及装置
CN109598107B (zh) 一种基于应用安装包文件的代码转换方法及装置
CN111738900A (zh) 图像的隐私保护方法、装置及设备
CN109871704A (zh) 基于Hook的Android资源文件防护方法、设备和存储介质
CN109614772B (zh) 基于应用安装包文件的代码转换方法及装置
CN112714117A (zh) 业务处理方法、装置、设备及系统
KR101688814B1 (ko) 주 기억 장치 내부의 코드 수정을 통한 애플리케이션 코드 은닉 장치 및 이를 이용한 애플리케이션 코드 은닉 방법
CN109840400B (zh) 提供安全性的设备和方法以及针对通用中间语言执行安全性的设备和方法
CN108133147B (zh) 可执行代码的保护方法、设备及可读存储介质
CN110619224B (zh) 一种数据处理方法和相关装置
KR101753811B1 (ko) 동적 할당 메모리를 이용하는 애플리케이션 코드 자가 변환 장치 및 이를 이용한 애플리케이션 코드 자가 변환 방법
CN104504310A (zh) 基于壳技术的软件保护方法和装置
KR101548211B1 (ko) 역공학을 방지하기 위한 암호화 방법
JP4628073B2 (ja) アクセス制御装置及びアクセス制御方法
CN110618967B (zh) 应用程序运行方法、安装包生成方法、装置、设备及介质
CN111460464B (zh) 数据加解密方法、装置、电子设备及计算机存储介质

Legal Events

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