KR102001046B1 - 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법 - Google Patents

공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법 Download PDF

Info

Publication number
KR102001046B1
KR102001046B1 KR1020170158127A KR20170158127A KR102001046B1 KR 102001046 B1 KR102001046 B1 KR 102001046B1 KR 1020170158127 A KR1020170158127 A KR 1020170158127A KR 20170158127 A KR20170158127 A KR 20170158127A KR 102001046 B1 KR102001046 B1 KR 102001046B1
Authority
KR
South Korea
Prior art keywords
intermediate language
language library
security
library
encryption algorithm
Prior art date
Application number
KR1020170158127A
Other languages
English (en)
Other versions
KR20190060179A (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 KR1020170158127A priority Critical patent/KR102001046B1/ko
Priority to CN201810956392.7A priority patent/CN109840400B/zh
Priority to US16/130,144 priority patent/US10867017B2/en
Priority to JP2018175877A priority patent/JP6698774B2/ja
Publication of KR20190060179A publication Critical patent/KR20190060179A/ko
Application granted granted Critical
Publication of KR102001046B1 publication Critical patent/KR102001046B1/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/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • 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/106Enforcing content protection by specific content processing
    • G06F21/1062Editing
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • 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/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0631Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
    • 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
    • H04L9/0894Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
    • 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/14Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using a plurality of keys or algorithms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry

Abstract

본 발명은 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법에 관한 것이다. 본 발명에 따른 복수의 파일들을 컴파일하여 생성된 중간 언어 라이브러리와 실행 엔진 라이브러리를 조합하여 생성된 실행 패키지가 저장되어 있는 보안 제공 장치는, 실행 패키지로부터 중간 언어 라이브러리를 추출하는 중간 언어 추출부와, 중간 언어 추출부에서 추출된 중간 언어 라이브러리에 대해 제1 암호화 알고리즘으로 암호화하고 그리고 암호화된 중간 언어 라이브러리에 대해 제2 암호화 알고리즘으로 암호화하여 보안 중간 언어 라이브러리를 제공하는 암호화부를 포함함으로써, 공통 중간 언어를 해킹으로부터 보호할 수 있다.

Description

공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법 {Apparatus and Method of Providing Security, and Apparatus and Method of Executing Security for Common Intermediate Language}
본 발명은 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법에 관한 것으로, 특히 스크립트 언어 등으로 작성된 프로그램의 공통 중간 언어에 대해 보안을 제공하기 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법에 관한 것이다.
애플리케이션은 동일한 일을 수행한다고 하더라도 하드웨어나 운영체제에 따라 동작 가능하도록 개별적으로 프로그램되어야 한다. 즉, PC, Mac, 웹 브라우저, 플래시, 안드로이드폰, 아이폰 등 다양한 환경에서 동일한 애플리케이션, 예컨대 동일한 게임 프로그램 등이 실행될 수 있지만, 게임 프로그램 등의 소스 코드는 플랫폼에 따라 개별적으로 개발되어야 한다. 이로 인해, 게임 프로그램의 개발·유지 보수 비용이 증가하게 되는데, 만약 하나의 소스 코드를 하드웨어나 운영체제와 무관하게 재사용할 수 있다면 이런 비용을 현저히 줄일 수 있을 것이다.
최근에는 스마트폰의 등장으로 프로그램 재사용의 필요가 더욱 높아졌고, 실제 대부분의 모바일 게임들은 이러한 특징을 반영한 게임 엔진과 같은 개발 도구에 의해 제작되고 있다. 대표적인 크로스 플랫폼 게임 엔진으로는 Unity, Havok Vision, COCOS2D 등이 있는데, 특히 유니티(Unity)는 게임 스크립트 작성용 언어로 C#, Javascript, Boo를 지원하는 크로스 플랫폼 게임 엔진이다.
그러나 C#와 같은 프로그램 언어로 작성된 프로그램은 컴파일되더라도 기계어로 바로 변환되는 것이 아니라 공통 중간 언어(Common Intermediate Language; CIL)라는 형태의 중간 언어의 바이너리로 변환되어 dll 등의 확장자를 가진 파일로 게임 패키지에 포함되며, 이러한 공통 중간 언어 코드를 실행하기 위해서는 닷넷 프레임워크(.NET Framework), 모노(mono), JVM 등의 공통 중간 언어를 기계어로 변환하고 실행하는 수단이 필요하다.
문제는 공통 중간 언어의 형식이 완전히 공개된 형식이고 공통 중간 언어를 원래의 스크립트 소스 코드로 완벽하게 복원하여 표시해주는 툴들이 제공되고 있기 때문에 리버스 엔지니어링을 통한 역분석을 통해 중요한 게임 로직의 소스를 그대로 들여다 볼 수 있음은 물론 심지어는 공격자가 원하는 대로 코드를 수정하여 dll을 재구성(rebuild)하여 크랙된 버전을 배포하는 일이 매우 용이하게 벌어질 수 있다는 것이다.
따라서 C# 등의 스크립트 작성 시 코드 난독화(obfuscation) 기법을 적용하여 메소드명이나 변수명을 바꿔주면 리버스 엔지니어링에 의한 프로그램 분석을 어느 정도 어렵게 할 수 있지만, 근본적으로 소스 코드가 모두 보이게 되는 취약점 자체를 방지할 수는 없다.
또한, 해킹 공격을 감지하는 로직을 안드로이드 NDK(Native Development Kit) 파일로 작성하여 이를 Java 단이나 C# 스크립트 단에서 호출하여 보호하는 방법도 일부 사용되고 있으나, Java 역시 C#과 마찬가지로 중간 언어로 변환하여 실행하는 언어이므로 쉽게 소스 코드 노출과 변조가 이루어질 수 있는 탓에 공격자가 매우 쉽게 보안 로직을 무력화할 수 있다.
상술한 문제점을 해결하기 위해, 본 발명은 중간 언어 라이브러리에 보안을 제공하여 공통 중간 언어를 해킹으로부터 보호하는 보안 제공 장치 및 방법을 제공하는 것을 목적으로 한다.
본 발명은 중간 언어 라이브러리에 보안을 실행하여 공통 중간 언어를 해킹으로부터 보호하는 보안 실행 장치 및 방법을 제공하는 것을 목적으로 한다.
상술한 목적을 달성하기 위해, 본 발명의 일실시예에 따른 복수의 파일들을 컴파일하여 생성된 중간 언어 라이브러리와 실행 엔진 라이브러리를 조합하여 생성된 실행 패키지가 저장되어 있는 보안 제공 장치는, 상기 실행 패키지로부터 상기 중간 언어 라이브러리를 추출하는 중간 언어 추출부와, 상기 중간 언어 추출부에서 추출된 중간 언어 라이브러리에 대해 제1 암호화 알고리즘으로 암호화하고 그리고 상기 암호화된 중간 언어 라이브러리에 대해 제2 암호화 알고리즘으로 암호화하여 보안 중간 언어 라이브러리를 제공하는 암호화부를 포함할 수 있다.
상기 보안 제공 장치는 상기 실행 패키지의 중간 언어 라이브러리를 상기 암호화부에서 암호화된 상기 보안 중간 언어 라이브러리로 대체하고, 그리고 상기 실행 패키지의 모노 파일을, 이미지 구조체 및 상기 암호화부에 대응하는 복호화부를 포함하는 보안 모노 파일로 대체하는 파일 대체부를 더 포함할 수 있다.
상기 보안 제공 장치는 상기 제1 암호화 알고리즘의 암호화 키 값을 제2 암호화 알고리즘으로 암호화하여 보안 파일을 생성하는 보안 파일 생성부를 더 포함할 수 있다.
상기 보안 제공 장치는 상기 실행 엔진 라이브러리와, 상기 파일 대체부에서 대체된 상기 보안 중간 언어 라이브러리와 상기 보안 모노 파일과, 및 상기 보안 파일 생성부에서 제공된 보안 파일을 조합하여 보안 실행 패키지를 생성하는 패키지 조합부를 더 포함할 수 있다.
상기 보안 모노 파일은 상기 보안 중간 언어 라이브러리를 실행할 때, 메인 메모리에 상기 보안 중간 언어 라이브러리를 하나의 이미지로 로딩하고, 실행 코드에 접근하기 위해 상기 이미지 구조체에 복호화된 중간 언어 라이브러리의 각 파트의 시작 주소를 저장할 수 있다.
상기 제1 암호화 알고리즘은 XOR 연산 알고리즘이고, 상기 제2 암호화 알고리즘은 AES(Advanced Encryption Standard) 알고리즘일 수 있다.
본 발명의 또 하나의 실시예에 따른 보안 실행 장치는, 중간 언어 라이브러리에 대해 제1 암호화 알고리즘으로 암호화하고 그리고 상기 암호화된 중간 언어 라이브러리에 대해 제2 암호화 알고리즘으로 암호화된 보안 중간 언어 라이브러리를, 실행 엔진 라이브러리에서의 동작에 따라 메인 메모리에 로딩하는 실행 엔진부와, 상기 메인 메모리에 보안 중간 언어 라이브러리가 로딩되면 상기 보안 중간 언어 라이브러리에 필요한 초기화 작업을 수행하고 보안 파일로부터 상기 제1 암호화 알고리즘과 관련된 제1 복호화 함수 인터페이스 및 상기 제2 암호화 알고리즘과 관련된 제2 복호화 함수 인터페이스를 가져오는 이미지 구조체와, 및 상기 이미지 구조체에서 가져온 제2 복호화 함수 인터페이스를 이용하여 암호화된 상기 보안 중간 라이브러리를 복호화하여 상기 암호화된 중간 언어 라이브러리를 상기 메인 메모리의 중간 언어 라이브러리 영역에 유지하는 복호화부를 포함하여 상술한 목적을 달성할 수 있다.
상기 복호화부는 상기 이미지 구조체에서 가져온 제1 복호화 함수 인터페이스를 이용하여 상기 암호화된 중간 언어 라이브러리의 헤더 관련 정보들을 원래의 중간 언어 라이브러리로 복호화하고, 상기 중간 언어 라이브러리의 헤더 관련 정보들 중 적어도 하나의 정보를 상기 중간 언어 라이브러리 영역 이외의 메모리 영역에 저장하고, 상기 중간 언어 라이브러리 영역 이외의 메모리 영역에 저장된 헤더 관련 정보의 위치를 이미지 구조체에 저장할 수 있다.
상기 복호화부는 상기 중간 언어 라이브러리 영역 이외의 메모리 영역에 헤더 관련 정보가 저장되면, 헤더 관련 정보가 저장되어 있는 상기 중간 언어 라이브러리 영역을 스크램블링하거나 의미 없는 값으로 채울 수 있다.
본 발명의 또 하나의 다른 실시예에 따른 보안 제공 방법은, 복수의 파일들을 컴파일하여 생성된 중간 언어 라이브러리와 실행 엔진 라이브러리를 조합하여 생성된 실행 패키지를 저장하는 단계와, 상기 실행 패키지로부터 상기 중간 언어 라이브러리를 추출하는 단계와, 상기 실행 패키지로부터 추출된 중간 언어 라이브러리에 대해 제1 암호화 알고리즘으로 암호화하는 단계와, 상기 암호화된 중간 언어 라이브러리에 대해 제2 암호화 알고리즘으로 암호화하여 보안 중간 언어 라이브러리를 생성하는 단계를 포함하여 상술한 목적을 달성할 수 있다.
본 발명의 또 하나의 다른 실시예에 따른 보안 실행 방법은, 중간 언어 라이브러리에 대해 제1 암호화 알고리즘으로 암호화하고 그리고 상기 암호화된 중간 언어 라이브러리에 대해 제2 암호화 알고리즘으로 암호화된 보안 중간 언어 라이브러리를, 실행 엔진 라이브러리에서의 동작에 따라 메인 메모리에 로딩하는 단계와, 상기 메인 메모리에 보안 중간 언어 라이브러리가 로딩되면 상기 보안 중간 언어 라이브러리에 필요한 초기화 작업을 수행하는 단계와, 보안 파일로부터 상기 제1 암호화 알고리즘과 관련된 제1 복호화 함수 인터페이스 및 상기 제2 암호화 알고리즘과 관련된 제2 복호화 함수 인터페이스를 가져오는 단계와, 및 상기 가져오는 단계에서 가져온 제2 복호화 함수 인터페이스를 이용하여 암호화된 상기 보안 중간 라이브러리를 복호화하여 상기 암호화된 중간 언어 라이브러리를 상기 메인 메모리의 중간 언어 라이브러리 영역에 유지하는 단계를 포함하여 상술한 목적을 달성할 수 있다.
상술한 구성에 의해, 본 발명은 중간 언어 라이브러리에 대한 정적 분석의 공격을 방어할 수 있다. 즉, DLL이 메인 메모리 상에서 복호화되어서 실행되기 때문에 정적 분석 공격에 대해 완벽하게 방어할 수 있다.
본 발명은 메인 메모리 상에서 보안 중간 언어 라이브러리가 AES 알고리즘으로 복호화되어도 전체적으로 XOR 연산이 되어 있기 때문에 중간 언어 라이브러리가 해킹으로부터 보호될 수 있다.
본 발명은 해커가 DLL 영역의 주소를 알아내더라도 헤더 관련 정보들이 메인 메모리 전체에 걸쳐서 분산되어 있고 그리고 DLL 영역 내의 헤더 관련 정보들은 스크램블링되어 있기 때문에, DLL 영역 내에서 DLL의 코드 정보를 매핑하는 정보들을 발견할 수 없다.
도 1은 본 발명의 일실시예에 따른 공통 중간 언어를 위한 보안 제공 시스템의 구성을 도시하는 도면이다.
도 2는 도 1의 프로그램 개발 장치에서의 통상의 유니티 패키지 생성 방법의 예를 도시하는 도면이다.
도 3은 도 2에 도시된 DLL의 구조를 도시하는 도면이다.
도 4는 본 발명에 따른 보안 모노 파일의 이미지 구조체의 예를 도시하는 도면이다.
도 5는 도 1의 보안 제공 장치의 블록도를 도시하는 도면이다.
도 6은 도 5의 보안 제공 장치에서 다시 조합된 보안 유니티 패키지를 도시하는 도면이다.
도 7은 도 1의 보안 실행 장치의 블록도를 도시하는 도면이다.
도 8은 본 발명의 실시예에 따른 보안 실행 프로그램이 메인 메모리 유닛에 로딩된 상태를 설명하는 도면이다.
도 9a 내지 도 9h는 도 8의 보안 실행 프로그램의 동작을 설명하기 위해 도시한 도면이다.
도 10은 본 발명의 일실시예에 따른 공통 중간 언어를 위한 보안 제공 방법의 흐름도를 도시하는 도면이다.
도 11은 본 발명의 다른 실시예에 따른 공통 중간 언어를 위한 보안 실행 방법의 흐름도를 도시하는 도면이다.
이하, 첨부된 도면을 참조하여 본 발명에 따른 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법의 바람직한 실시예를 설명한다. 참고로, 아래에서 본 발명을 설명함에 있어서, 본 발명의 구성요소를 지칭하는 용어들은 각각의 구성 요소들의 기능을 고려하여 명명된 것이므로, 본 발명의 기술적 구성요소를 한정하는 의미로 이해되어서는 안 될 것이다.
도 1은 본 발명의 일실시예에 따른 공통 중간 언어를 위한 보안 제공 시스템의 구성을 도시하는 도면이다.
도 1에 도시된 바와 같이, 본 발명에 따른 공통 중간 언어를 위한 보안 제공 시스템은 프로그램 개발 장치(110), 보안 제공 장치(120) 및 보안 실행 장치(130)를 포함한다. 여기서 프로그램 개발 장치(110), 보안 제공 장치(120) 및 보안 실행 장치(130)는 유무선 통신망을 통해 연결될 수 있다.
프로그램 개발 장치(110)는 개발자가 애플리케이션 프로그램을 개발하기 위한 장치이다. 실행 엔진, 예를 들어 유니티 엔진은 애플리케이션 프로그램이 개발되면 애플리케이션 소스 코드들을 컴파일하여 바이너리 코드를 생성하고, 생성된 바이너리 코드에 필수 리소스 라이브러리 등을 포함하여 실행 패키지, 예컨대 유니티 패키지를 생성한다.
보안 제공 장치(120)는 프로그램 개발 장치(110)에서 생성된 유니티 패키지에 대해 보안을 제공하기 위한 장치이다. 보안 제공 장치(120)는 프로그램 개발 장치(110)에서 생성된 유니티 패키지가 업로드되면, 공통 중간 언어 라이브러리, 예컨대 DLL을 추출하고 추출된 DLL을 이용하여 이중 암호화를 수행하고 그리고 모노 파일을 이중 암호화에 따른 수정된 보안 모노 파일로 대체한 후에 다시 보안 유니티 패키지를 생성한다.
보안 실행 장치(130)는 프로그램, 예를 들어 게임 프로그램이 실행되는 사용자 단말 장치이다. 보안 실행 장치(130)는 프로그램 개발 장치(110) 또는 보안 제공 장치(120)로부터 보안 유니티 패키지를 다운로드받아 게임 프로그램을 실행할 수 있다.
도 1에서는 프로그램 개발 장치(110)와 보안 제공 장치(120)가 각각 별도의 장치로 도시되어 있으나, 이는 예시로서 본 발명은 이에 한정되지 않는다.
도 2는 도 1의 프로그램 개발 장치에서의 통상의 유니티 패키지 생성 방법의 예를 도시하는 도면이고, 도 3은 도 2에 도시된 DLL의 구조를 도시하는 도면이다.
도 2에 도시된 바와 같이, 유니티 엔진은 스크립트 파일들, 예를 들어, GameScript1.cs, GameScript2.cs, GameScript3.cs, … GameScriptN.cs를 컴파일하여 공통 중간 언어의 Assembly-CSharp.dll 라이브러리를 생성한다. 그리고 유니티 엔진은 생성된 Assembly-CSharp.dll에 유니티 엔진 관련 리소스 라이브러리들, 예를 들어 Mono.Security.dll, UnityEngine.dll, mono.so 및 libunity.so 등을 포함하여 유니티 패키지를 생성한다.
도 3에 도시된 바와 같이, DLL의 구조는 PE 헤더(PE header), 섹션 테이블(section table), 텍스트 섹션(.text section), CLI 헤더(CLI header), BSJB(stream headers), 스트림 정보(#~stream) 및 스트링스 스트림(Strings stream)을 포함한다.
PE 헤더는 빌드 시간, 코드 크기 등의 DLL 정보를 포함하며, 본 발명과 관련해서는 텍스트 섹션 내의 CLI 헤더 위치를 파악할 수 있다. 섹션 테이블은 각 섹션의 위치 정보(RVA)를 계산할 수 있는 정보를 포함하며, 본 발명과 관련해서는 텍스트 섹션 위치를 파악할 수 있다. 텍스트 섹션은 DLL을 구성하는 실제 실행 코드들이 있는 영역으로, 실행 코드에 대한 정보를 파싱하기 위한 정보도 같이 가지고 있으며, 본 발명과 관련해서는 실제 실행 코드가 들어 있어서 이 텍스트 섹션을 통해 응용 프로그램의 동작이 결정된다.
CLI 헤더는 공통 중간 언어(CLI)로 구성된 코드에 접근하기 위해 필요한 정보들을 포함하며, 본 발명과 관련해서는 해당 정보로 BSJB 위치를 파악할 수 있다. BSJB는 #~stream 및 Strings stream의 위치 정보를 가지고 있어 본 발명과 관련해서는 #~stream의 위치를 파악할 수 있다. 스트림 정보는 모듈, 참조, 정의, 메소드 등 dll 내 클래스에 대한 정보를 포함하며, 특히, 메소드 정보는 텍스트 섹션에서 해당 이름의 함수의 실행 코드 위치를 포함하며, 본 발명과 관련해서는 각 함수의 실행 코드 위치를 파악할 수 있다. 스트링스 스트림은 클래스명, 함수명, 필드명 등 실제 함수 이름이나 초기화에 사용되는 값 등을 스트링 형태로 저장하며, 런타임 시에도 스트링 값들은 본 영역에서 참조되기도 한다.
도 4는 본 발명에 따른 보안 모노 파일의 이미지 구조체의 예를 도시하는 도면이다.
보안 모노 파일은 CLI 기반 C# 코드를 윈도우 환경이 아닌 운용 체제에서 실행할 수 있게 해주는 일종의 가상 머신이다. 도 4에 도시된 바와 같이, 보안 모노 파일은, DLL을 실행할 때, 메모리에 DLL 전체를 하나의 이미지로 로딩하고, 이를 토대로 코드 영역에 접근한다. 그리고 코드에 접근하기 위해 모노 파일 내 이미지 구조체(820)에 DLL의 각 파트들의 시작 메모리 주소를 저장해두고 DLL에 접근한다.
보안 모노 파일은 실제로 DLL이 암호화되어 있기 때문에 보안 적용을 위해서는 DLL을 오픈하여 실제 정보들에 접근하기 전에, 메모리 상에 로딩되어 있는 암호화된 DLL을 복호화하고 그리고 복호화된 값들에 따라 각 파트들의 시작 메모리 주소들을 이미지 구조체에 저장해 두어야 한다. DLL 전체를 한 번에 복호화해두면, 메모리 상에 복호화된 값들이 모두 로딩되므로 해커들이 DLL 로딩 중에 매직 키워드나 DOS 헤더 등을 이용하여 메모리 상에서 동적으로 원본 DLL를 추출할 수 있다. 이를 보호하기 위해서, 본 발명은 DLL를 이중으로 암호화를 수행하며, 로딩 시점에 필요한 부분들만 복호화하여 사용할 수 있는 것을 특징으로 한다.
도 5는 도 1의 보안 제공 장치의 블록도를 도시하는 도면이고, 도 6은 도 5의 보안 제공 장치에서 다시 조합된 보안 유니티 패키지를 도시하는 도면이다.
도 5에 도시된 바와 같이, 보안 제공 장치(120)는 공통 중간 언어 추출부(510), 암호화부(520), 보안 파일 생성부(530), 파일 대체부(540) 및 패키지 조합부(550)를 포함한다.
공통 중간 언어 추출부(510)는 프로그램 개발 장치(110)로부터 업로드된 유니티 패키지의 복수의 라이브러리들 및 파일들을 파싱하여 공통 중간 언어 라이브러리, 예를 들어 도 2에 도시된 Assembly-CSharp.dll를 추출한다.
암호화부(520)는 DLL, 예를 들어 도 2에 도시된 Assembly-CSharp.dll 전체에 대해 제1 암호화 알고리즘으로 암호화를 수행한다. 제1 암호화 알고리즘은 DLL 전체에 대해 예를 들어 XOR 키로 XOR 연산을 행할 수 있다. 이 경우, 제1 암호화 알고리즘은 블록 단위로 스크램블링하여 암호화할 수 있다.
암호화부(520)는 제1 암호화 알고리즘으로 암호화된 DLL 전체에 대해 제2 암호화 알고리즘으로 암호화를 수행하여 보안 중간 언어 라이브러리를 생성한다. 제2 암호화 알고리즘은 DES, AES, RSA 등과 같은 암호화 알고리즘들 중 적어도 하나를 포함할 수 있다. 여기서 제2 암호화 알고리즘으로는 암호화된 DLL 전체에 대해 암호화를 수행하는 AES(Advanced Encryption Standard) 알고리즘이 바람직하다.
보안 파일 생성부(530)는 제1 암호화 알고리즘의 제1 암호화 키 값을 암호화부(520)에서 제2 암호화 알고리즘으로 암호화하여 보안 파일, 예를 들어 도 6에 도시된 appsealing.so를 생성하고, 또한 생성된 보안 파일에 제1 암호화 알고리즘과 관련된 제1 복호화 함수 인터페이스 및 상기 제2 암호화 알고리즘과 관련된 제2 복호화 함수 인터페이스를 저장할 수 있다.
파일 대체부(540)는 유니티 패키지의 중간 언어 라이브러리를 암호화부(520)에서 생성된 보안 중간 언어 라이브러리, 예를 들어 보안 DLL로 대체하고, 또한 유니티 패키지의 모노 파일을, 도 8에 도시된 이미지 구조체(820)와 암호화부(520)에 대응하는 복호화부(830)를 포함하는 보안 모노 파일로 대체한다.
유니티 패키지 조합부(550)는 파일 대체부(540)에서 대체된 보안 중간 언어 라이브러리인 보안 DLL, 예를 들어 Assembly-SECSharp.dll, 그리고 보안 모노 파일, 예를 들어 secmono.so 및 보안 파일인 appsealing.so와 그리고 필수 리소스 라이브러리들을 포함하여 다시 유니티 패키지로 재조합한다.
도 7은 도 1의 보안 실행 장치의 블록도를 도시하는 도면이다.
도 7에 도시된 바와 같이, 보안 실행 장치(130)는 CPU(710), 메인 메모리 유닛(720), 디스플레이 유닛(730), 보조 기억 유닛(740), 입력 유닛(750) 및 네트워크 유닛(760)을 포함할 수 있다.
보조 메모리 유닛(740)에는 보안 제공 장치(120)로부터 네트워크 유닛(760)을 통해 다운로드된 보안 실행 패키지가 저장된다. 게임 프로그램의 보안 실행 패키지, 예를 들어 보안 유니티 패키지의 실행이 요청되면, CPU(710)는 보조 메모리 유닛(740)에 저장된 보안 유니티 패키지를 메인 메모리 유닛(720)에 로드한다. 한편, 게임 프로그램은 입력 유닛(750)이나 네트워크 유닛(760)을 통해 새로운 값을 입력받을 수도 있다.
본 발명의 실시예에 따른 보안 실행 장치(130)는 개인용 컴퓨터(PC: Personal Computer), 노트북 컴퓨터, 태블릿, 개인 휴대 단말기(PDA: Personal Digital Assistant), 게임 콘솔, 휴대형 멀티미디어 플레이어(PMP: Portable Multimedia Player), 플레이스테이션 포터블(PSP: PlayStation Portable), 무선 통신 단말기(Wireless Communication Terminal), 스마트폰(Smart Phone), TV, 미디어 플레이어 등과 같은 사용자 단말기일 수 있다.
도 8은 본 발명의 실시예에 따른 보안 실행 프로그램이 메인 메모리 유닛에 로딩된 상태를 설명하는 도면이다. 도 9a 내지 도 9h는 도 8의 보안 실행 프로그램의 동작을 설명하기 위해 도시한 도면이다.
도 8에 도시된 바와 같이, 보안 실행 프로그램은 실행 엔진부(810), 이미지 구조체(820) 및 복호화부(830)를 포함한다.
실행 엔진부(810)는 중간 언어 라이브러리, 예를 들어 DLL에 대해 제1 암호화 알고리즘으로 암호화하고 그리고 암호화된 중간 언어 라이브러리에 대해 제2 암호화 알고리즘으로 암호화된 보안 중간 언어 라이브러리, 예를 들어 보안 DLL를, 실행 엔진 라이브러리에서의 실행 엔진에 따라 메인 메모리 유닛(720)에 로딩한다.
이미지 구조체(820)는 메인 메모리 유닛(720)에 보안 중간 언어 라이브러리가 로딩되면 보안 중간 언어 라이브러리에 필요한 초기화 작업을 수행하고 보안 파일로부터 제1 암호화 알고리즘과 관련된 제1 복호화 함수 인터페이스 및 제2 암호화 알고리즘과 관련된 제2 복호화 함수 인터페이스를 가져온다.
복호화부(830)는 이미지 구조체(820)에서 가져온 제2 복호화 함수 인터페이스를 이용하여 암호화된 보안 중간 라이브러리를 복호화하여 암호화된 중간 언어 라이브러리를 메인 메모리 유닛(720)의 중간 언어 라이브러리 영역(840), 예를 들어 DLL 영역에 유지한다. 복호화부(830)는 이미지 구조체(820)에서 가져온 제1 복호화 함수 인터페이스를 이용하여 암호화된 중간 언어 라이브러리의 헤더 관련 정보들을 원래의 중간 언어 라이브러리로 복호화하고, 중간 언어 라이브러리의 헤더 관련 정보들 중 적어도 하나의 정보를 중간 언어 라이브러리 영역 이외의 메모리 영역(850)에 저장하고, 중간 언어 라이브러리 영역 이외의 메모리 영역(850)에 저장된 헤더 관련 정보의 위치를 이미지 구조체(820)에 저장한다. 복호화부(830)는 중간 언어 라이브러리 영역 이외의 메모리 영역(850)에 헤더 관련 정보가 저장되면, 헤더 관련 정보가 저장되어 있는 중간 언어 라이브러리 영역(840)을 스크램블링하거나 의미 없는 값으로 채운다.
이하에서는 도 9를 통해 보안 실행 프로그램의 동작을 더욱 상세하게 설명한다.
보안 실행 장치(130)에서 입력 유닛(750)을 통해 애플리케이션, 예컨대 게임 프로그램이 실행되면, CPU(710)는 게임 프로그램을 메인 메모리 유닛(720)으로 로딩한다. 메인 메모리 유닛(720)에 로딩된 게임 프로그램이 실행되면 실행 엔진부(810)에 따라 DLL, 예를 들어 Assembly-SECSharp.dll이 로딩된다.
DLL이 로딩되면, 이미지 구조체(820)는 기존 로직에서 DLL 이미지 복호화에 필요한 초기화 작업을 수행한다. 이미지 구조체(820)는 또한, 암호화부(520)의 제2 암호화 알고리즘과 관련된 제2 복호화 함수 인터페이스, 예를 들어 AES 복호화 함수 포인터를 가져오고, 그리고 제1 암호화 알고리즘과 관련된 제1 복호화 함수 인터페이스, 예를 들어 XOR 복호화 함수 포인터를 가져온다.
복호화부(830)는 MS-DOS 헤더의 특정 바이트에 DLL이 암호화되어 있다는 키워드가 존재하면 DLL 전체 영역을 제2 복호화 알고리즘을 이용하여 복호화한다. 암호화부에서 AES로 암호화되었다면 AES 복호화 알고리즘을 이용하여 보안 DLL로 복호화한다. 이 경우 메인 메모리 유닛의 DLL 영역의 DLL은 여전히 제1 암호화 알고리즘에 의해 암호화된 DLL이다(도 9a 참조).
복호화부(830)는 헤더 관련 정보들을 제2 복호화 알고리즘을 이용하여 원래대로 복호화한 후에 그 위치들을 이미지 구조체(820)에 저장하고 헤더 관련 정보 영역들은 스크램블링한다(도 9b 내지 도 9g 참조).
제2 복호화 알고리즘을 이용하여 헤더 관련 정보들의 복호화하는 과정을 좀 더 구체적으로 설명하면 다음과 같다.
복호화부(830)는 먼저, XOR된 Ms-dos 헤더를 XOR 연산하여 원래대로 복호화하고 이미지 구조체(820)에 PE 헤더의 위치를 저장하고, Ms-dos 헤더를 스크램블링한다(도 9b 참조).
복호화부(830)는 XOR된 PE 헤더를 XOR 연산하여 원래대로 복호화하고 이미지 구조체(820)에 텍스트 섹션 내 CLI 헤더 위치를 저장한다. 복호화부(830)는 또한, PE 헤더의 키워드를 삭제하여 메모리 상에서 키워드 검색으로 DLL 영역을 찾지 못하게 한다(도 9c 참조).
복호화부(830)는 XOR된 섹션 테이블을 XOR 연산하여 원래대로 복호화하고, 섹션 테이블을 참조하여 텍스트 섹션을 제외한 나머지 섹션 영역을 복호화하고, 복호화된 나머지 섹션 영역을 DLL 영역 이외의 메모리 영역에 저장한다. 복호화부(830)는 이미지 구조체(820)에 텍스트 섹션을 제외한 나머지 섹션 영역의 주소를 저장하고 DLL 영역 내의 관련 섹션을 스크램블링한다(도 9d 참조).
복호화부(830)는 XOR된 CLI 헤더를 XOR 연산하여 원래대로 복호화하고, 복호화된 CLI 헤더에서 스트림 헤더의 상대적 가상 주소(RVA, Relative Virtual Address)를 추출한다. 복호화부(830)는 또한, CLI 헤더의 키워드를 삭제하여 메모리 상에서 키워드 검색으로 DLL 영역을 찾지 못하게 한다.(도 9e 참조).
복호화부(830)는 XOR된 각 스트림 헤더를 XOR 연산하여 원래대로 복호화하고, 복호화된 스트림 헤더들을 이용하여 #~를 제외한 나머지 스트림들을 복호화하고 복호화된 스트림들을 DLL 영역 이외의 메모리 영역에 저장한다. 복호화부(830)는 이미지 구조체(820)에 DLL 영역 이외의 메모리 영역에 저장된 각 스트림의 주소를 저장하고, DLL의 복호화된 스트림들 영역을 스크램블링한다(도 9f 참조).
복호화부(830)는 XOR된 #~ 영역 내 테이블들을 XOR 연산하여 원래대로 복호화하고, 복호화된 #~ 영역 내 테이블들(모듈(module), typeref, typedef, 메소드(method), 필드(filed) 등)을 DLL 영역 이외의 메모리 영역에 저장한다. 복호화부(830)는 이미지 구조체(820)에 DLL 영역 이외의 메모리 영역에 저장된 #~ 영역 내 테이블들의 주소를 저장하고, DLL의 복호화된 스트림들 영역을 스크램블링한다(도 9g 참조).
한편, 복호화부(830)는 이미지 구조체(820)에 복호화된 #~ 영역 내 테이블의 헤더만 DLL 영역 이외의 메모리 영역에 저장하고 메소드는 DLL 영역에 그대로 둘 수 있다.
복호화부(830)는 이미지 구조체(820)에 저장된 헤더 관련 정보들을 이용하여 XOR된 실행 코드의 주소에 저장된 실행 코드를 XOR 연산하여 원래대로 실행 코드를 복호화한다.
복호화부(830)는 XOR된 텍스트 섹션 내 코드 영역과 그 외의 텍스트 섹션의 나머지 영역들을 XOR 연산하여 원래대로 복호화하고, DLL 내 섹션 테이블의 코드 영역을 제외한 나머지 영역 및 PE 헤더 등 필요 없는 영역을 임의의 값, 즉 의미 없는 값으로 채운다.
도 10은 본 발명의 일실시예에 따른 공통 중간 언어를 위한 보안 제공 방법의 흐름도를 도시하는 도면이다.
보안 제공 장치(120)는 복수의 스크립트 파일들을 컴파일하여 생성된 중간 언어 라이브러리와 실행 엔진 라이브러리를 조합하여 생성된 실행 패키지, 예를 들어 유니티 패키지를 저장한다(S1002).
중간 언어 추출부(510)는 실행 패키지로부터 상기 중간 언어 라이브러리를 추출한다(S1004).
암호화부(520)는 중간 언어 추출부(510)에서 추출된 중간 언어 라이브러리 전체에 대해 제1 암호화 알고리즘으로 암호화하고(S1006), 암호화된 중간 언어 라이브러리에 대해 제2 암호화 알고리즘으로 암호화하여 보안 중간 언어 라이브러리를 생성한다(S1008).
보안 파일 생성부(530)는 암호화부(520)의 제1 암호화 알고리즘의 암호화 키 값을 제2 암호화 알고리즘으로 암호화하여 보안 파일을 생성하고 실행 패키지에 생성된 보안 파일을 제공한다(S1010).
파일 대체부(540)는 실행 패키지의 중간 언어 라이브러리를 암호화부(520)에서 암호화된 보안 중간 언어 라이브러리로 대체하고, 그리고 실행 패키지의 모노 파일을, 이미지 구조체 및 암호화부(520)에 대응하는 복호화부를 포함하는 보안 모노 파일로 대체한다(S1012).
패키지 조합부(550)는 실행 엔진 라이브러리와, 파일 대체부(540)에서 대체된 보안 중간 언어 라이브러리 및 보안 모노 파일과, 및 보안 파일 생성부(530)에서 제공된 보안 파일을 조합하여 보안 실행 패키지를 생성한다(S1014).
도 11은 본 발명의 다른 실시예에 따른 공통 중간 언어를 위한 보안 실행 방법의 흐름도를 도시하는 도면이다.
실행 엔진부(810)는 실행 엔진 라이브러리에서의 동작에 따라 보안 중간 언어 라이브러리를 메인 메모리 유닛에 로딩한다(S1102). 여기서 보안 중간 언어 라이브러리는 중간 언어 라이브러리에 대해 제1 암호화 알고리즘으로 암호화되고 그리고 암호화된 중간 언어 라이브러리에 대해 제2 암호화 알고리즘으로 암호화되어 있다.
이미지 구조체(820)는 메인 메모리 유닛에 보안 중간 언어 라이브러리가 로딩되면 보안 중간 언어 라이브러리에 필요한 초기화 작업을 수행한다(S1104). 이미지 구조체(820)는 보안 파일로부터 상기 제1 암호화 알고리즘과 관련된 제1 복호화 함수 인터페이스 및 상기 제2 암호화 알고리즘과 관련된 제2 복호화 함수 인터페이스를 가져온다(S1106)
복호화부(830)는 이미지 구조체(820)에서 가져온 제2 복호화 함수 인터페이스를 이용하여 보안 중간 언어 라이브러리를 복호화한다(S1108). 암호화된 중간 언어 라이브러리는 메인 메모리 유닛의 중간 언어 라이브러리 영역에 유지된다.
복호화부(830)는 이미지 구조체(820)에서 가져온 제1 복호화 함수 인터페이스를 이용하여 암호화된 중간 언어 라이브러리의 헤더 관련 정보들을 원래의 중간 언어 라이브러리로 복호화한다(S1110). 복호화부(830)는 중간 언어 라이브러리의 헤더 관련 정보들 중 적어도 하나의 정보를 중간 언어 라이브러리 영역 이외의 메모리 영역에 저장하고(S1112), 중간 언어 라이브러리 영역 이외의 메모리 영역에 저장된 헤더 관련 정보의 위치를 이미지 구조체(820)에 저장한다((S1114)
복호화부(830)는 중간 언어 라이브러리 영역 이외의 메모리 영역에 헤더 관련 정보가 저장되면, 헤더 관련 정보가 저장되어 있는 중간 언어 라이브러리 영역을 스크램블링하거나 의미 없는 값으로 채운다(S1116).
복호화부(830)는 이미지 구조체(820)에 저장된 헤더 관련 정보들을 이용하여 XOR된 실행 코드의 주소에 저장된 실행 코드를 XOR 연산하여 원래대로 복호화한다(S1118).
이상에서 설명된 본 발명의 실시예들은 본 발명의 기술 사상을 예시적으로 보여준 것에 불과하며, 본 발명의 보호 범위는 이하 특허청구범위에 의하여 해석되어야 마땅할 것이다. 또한, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것인 바, 본 발명과 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
110: 프로그램 개발 장치 120: 보안 제공 장치
130: 보안 실행 장치 510: 공통 중간 언어 추출부
520: 암호화부 530: 보안 파일 생성부
540: 파일 대체부 550: 패키지 조합부
710: CPU 720: 메인 메모리 유닛
730: 디스플레이 유닛 740: 보조 기억 유닛
750: 입력 유닛 760: 네트워크 유닛
810: 실행 엔진부 820: 이미지 구조체
830: 복호화부 840: DLL 영역
850: DLL 이외의 영역

Claims (18)

  1. 복수의 파일들을 컴파일하여 생성된 중간 언어 라이브러리와 실행 엔진 라이브러리를 조합하여 생성된 실행 패키지가 저장되어 있는 보안 제공 장치에 있어서,
    상기 실행 패키지로부터 상기 중간 언어 라이브러리를 추출하는 중간 언어 추출부와,
    상기 중간 언어 추출부에서 추출된 중간 언어 라이브러리에 대해 제1 암호화 알고리즘으로 암호화하고 그리고 상기 암호화된 중간 언어 라이브러리에 대해 제2 암호화 알고리즘으로 암호화하여 보안 중간 언어 라이브러리를 제공하는 암호화부를 포함하는 것을 특징으로 하는 보안 제공 장치.
  2. 제1항에 있어서,
    상기 실행 패키지의 중간 언어 라이브러리를 상기 암호화부에서 암호화된 상기 보안 중간 언어 라이브러리로 대체하고, 그리고 상기 실행 패키지의 모노 파일을, 이미지 구조체 및 상기 암호화부에 대응하는 복호화부를 포함하는 보안 모노 파일로 대체하는 파일 대체부를 더 포함하는 것을 특징으로 하는 보안 제공 장치.
  3. 제2항에 있어서,
    상기 제1 암호화 알고리즘의 암호화 키 값을 제2 암호화 알고리즘으로 암호화하여 보안 파일을 생성하는 보안 파일 생성부를 더 포함하는 것을 특징으로 하는 보안 제공 장치.
  4. 제3항에 있어서,
    상기 실행 엔진 라이브러리와, 상기 파일 대체부에서 대체된 상기 보안 중간 언어 라이브러리와 상기 보안 모노 파일과, 및 상기 보안 파일 생성부에서 제공된 보안 파일을 조합하여 보안 실행 패키지를 생성하는 패키지 조합부를 더 포함하는 것을 특징으로 하는 보안 제공 장치.
  5. 제2항 내지 제4항 중 어느 한 항에 있어서,
    상기 보안 모노 파일은 상기 보안 중간 언어 라이브러리를 실행할 때, 메인 메모리에 상기 보안 중간 언어 라이브러리를 하나의 이미지로 로딩하고, 실행 코드에 접근하기 위해 상기 이미지 구조체에 복호화된 중간 언어 라이브러리의 각 파트의 시작 주소를 저장하는 것을 특징으로 하는, 보안 제공 장치.
  6. 제5항에 있어서,
    상기 제1 암호화 알고리즘은 XOR 연산 알고리즘이고, 상기 제2 암호화 알고리즘은 AES(Advanced Encryption Standard) 알고리즘인 것을 특징으로 하는, 보안 제공 장치.
  7. 중간 언어 라이브러리에 대해 제1 암호화 알고리즘으로 암호화하고 그리고 상기 암호화된 중간 언어 라이브러리에 대해 제2 암호화 알고리즘으로 암호화된 보안 중간 언어 라이브러리를, 실행 엔진 라이브러리에서의 동작에 따라 메인 메모리에 로딩하는 실행 엔진부와,
    상기 메인 메모리에 보안 중간 언어 라이브러리가 로딩되면 상기 보안 중간 언어 라이브러리에 필요한 초기화 작업을 수행하고 보안 파일로부터 상기 제1 암호화 알고리즘과 관련된 제1 복호화 함수 인터페이스 및 상기 제2 암호화 알고리즘과 관련된 제2 복호화 함수 인터페이스를 가져오는 이미지 구조체와, 및
    상기 이미지 구조체에서 가져온 제2 복호화 함수 인터페이스를 이용하여 암호화된 상기 보안 중간 라이브러리를 복호화하여 상기 암호화된 중간 언어 라이브러리를 상기 메인 메모리의 중간 언어 라이브러리 영역에 유지하는 복호화부를 포함하는 것을 특징으로 하는 보안 실행 장치.
  8. 제7항에 있어서,
    상기 복호화부는 상기 이미지 구조체에서 가져온 제1 복호화 함수 인터페이스를 이용하여 상기 암호화된 중간 언어 라이브러리의 헤더 관련 정보들을 원래의 중간 언어 라이브러리로 복호화하고, 상기 중간 언어 라이브러리의 헤더 관련 정보들 중 적어도 하나의 정보를 상기 중간 언어 라이브러리 영역 이외의 메모리 영역에 저장하고, 상기 중간 언어 라이브러리 영역 이외의 메모리 영역에 저장된 헤더 관련 정보의 위치를 이미지 구조체에 저장하는 것을 특징으로 하는 보안 실행 장치.
  9. 제8항에 있어서,
    상기 복호화부는 상기 중간 언어 라이브러리 영역 이외의 메모리 영역에 헤더 관련 정보가 저장되면, 헤더 관련 정보가 저장되어 있는 상기 중간 언어 라이브러리 영역을 스크램블링하거나 의미 없는 값으로 채우는 것을 특징으로 하는 보안 실행 장치.
  10. 삭제
  11. 보안 제공 장치에서의 보안 제공 방법에 있어서,
    복수의 파일들을 컴파일하여 생성된 중간 언어 라이브러리와 실행 엔진 라이브러리를 조합하여 생성된 실행 패키지를 저장하는 단계와,
    상기 실행 패키지로부터 상기 중간 언어 라이브러리를 추출하는 단계와,
    상기 실행 패키지로부터 추출된 중간 언어 라이브러리에 대해 제1 암호화 알고리즘으로 암호화하는 단계와, 및
    상기 암호화된 중간 언어 라이브러리에 대해 제2 암호화 알고리즘으로 암호화하여 보안 중간 언어 라이브러리를 생성하는 단계를 포함하는 것을 특징으로 하는 보안 제공 방법.
  12. 제11항에 있어서,
    상기 실행 패키지의 중간 언어 라이브러리를 상기 보안 중간 언어 라이브러리를 생성하는 단계에서 생성된 상기 보안 중간 언어 라이브러리로 대체하고, 그리고 상기 실행 패키지의 모노 파일을, 이미지 구조체 및 상기 제1 암호화 알고리즘 및 상기 제2 암호화 알고리즘에 대응하는 복호화부를 포함하는 보안 모노 파일로 대체하는 단계를 더 포함하는 것을 특징으로 하는 보안 제공 방법.
  13. 제12항에 있어서,
    상기 제1 암호화 알고리즘의 암호화 키 값을 제2 암호화 알고리즘으로 암호화하여 보안 파일을 생성하는 단계를 더 포함하는 것을 특징으로 하는 보안 제공 방법.
  14. 제13항에 있어서,
    상기 실행 엔진 라이브러리와, 상기 대체하는 단계에서 대체된 상기 보안 중간 언어 라이브러리 및 상기 보안 모노 파일과, 및 상기 보안 파일을 생성하는 단계에서 제공된 상기 보안 파일을 조합하여 보안 실행 패키지를 생성하는 단계를 더 포함하는 것을 특징으로 하는 보안 제공 방법.
  15. 제12항 내지 제14항 중 어느 한 항에 있어서,
    상기 보안 모노 파일은 상기 보안 중간 언어 라이브러리를 실행할 때, 메인 메모리에 상기 보안 중간 언어 라이브러리를 하나의 이미지로 로딩하고, 실행 코드에 접근하기 위해 상기 이미지 구조체에 복호화된 중간 언어 라이브러리의 각 파트의 시작 주소를 저장하는 것을 특징으로 하는, 보안 제공 방법.
  16. 보안 실행 장치에서의 보안 실행 방법에 있어서,
    중간 언어 라이브러리에 대해 제1 암호화 알고리즘으로 암호화하고 그리고 상기 암호화된 중간 언어 라이브러리에 대해 제2 암호화 알고리즘으로 암호화된 보안 중간 언어 라이브러리를, 실행 엔진 라이브러리에서의 동작에 따라 메인 메모리에 로딩하는 단계와,
    상기 메인 메모리에 보안 중간 언어 라이브러리가 로딩되면 상기 보안 중간 언어 라이브러리에 필요한 초기화 작업을 수행하는 단계와,
    보안 파일로부터 상기 제1 암호화 알고리즘과 관련된 제1 복호화 함수 인터페이스 및 상기 제2 암호화 알고리즘과 관련된 제2 복호화 함수 인터페이스를 가져오는 단계와, 및
    상기 가져오는 단계에서 가져온 제2 복호화 함수 인터페이스를 이용하여 암호화된 상기 보안 중간 라이브러리를 복호화하여 상기 암호화된 중간 언어 라이브러리를 상기 메인 메모리의 중간 언어 라이브러리 영역에 유지하는 단계를 포함하는 것을 특징으로 하는 보안 실행 방법.
  17. 제16항에 있어서,
    상기 가져오는 단계에서 가져온 제1 복호화 함수 인터페이스를 이용하여 상기 암호화된 중간 언어 라이브러리의 헤더 관련 정보들을 원래의 중간 언어 라이브러리로 복호화하는 단계와,
    상기 중간 언어 라이브러리의 헤더 관련 정보들 중 적어도 하나의 정보를 상기 중간 언어 라이브러리 영역 이외의 메모리 영역에 저장하고, 상기 중간 언어 라이브러리 영역 이외의 메모리 영역에 저장된 헤더 관련 정보의 위치를 이미지 구조체에 저장하는 단계를 더 포함하는 것을 특징으로 하는 보안 실행 방법.
  18. 제17항에 있어서,
    상기 중간 언어 라이브러리 영역 이외의 메모리 영역에 헤더 관련 정보가 저장되면, 헤더 관련 정보가 저장되어 있는 상기 중간 언어 라이브러리 영역을 스크램블링하거나 의미 없는 값으로 채우는 단계를 더 포함하는 것을 특징으로 하는 보안 실행 방법.
KR1020170158127A 2017-11-24 2017-11-24 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법 KR102001046B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020170158127A KR102001046B1 (ko) 2017-11-24 2017-11-24 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법
CN201810956392.7A CN109840400B (zh) 2017-11-24 2018-08-21 提供安全性的设备和方法以及针对通用中间语言执行安全性的设备和方法
US16/130,144 US10867017B2 (en) 2017-11-24 2018-09-13 Apparatus and method of providing security and apparatus and method of executing security for common intermediate language
JP2018175877A JP6698774B2 (ja) 2017-11-24 2018-09-20 共通中間言語のための保安提供装置と方法、及び保安実行装置と方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170158127A KR102001046B1 (ko) 2017-11-24 2017-11-24 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법

Publications (2)

Publication Number Publication Date
KR20190060179A KR20190060179A (ko) 2019-06-03
KR102001046B1 true KR102001046B1 (ko) 2019-07-17

Family

ID=66632529

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170158127A KR102001046B1 (ko) 2017-11-24 2017-11-24 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법

Country Status (4)

Country Link
US (1) US10867017B2 (ko)
JP (1) JP6698774B2 (ko)
KR (1) KR102001046B1 (ko)
CN (1) CN109840400B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022097799A1 (ko) * 2020-11-09 2022-05-12 동국대학교 산학협력단 함수 요약 정보를 생성하는 보안 취약점 분석 방법 및 이를 포함하는 전자 장치{security vulnerability analysis method for generating function abstract information and electronic device including the same}

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110472425A (zh) * 2019-07-18 2019-11-19 福建天晴在线互动科技有限公司 基于Mono的Unity插件加密方法、存储介质
CN116028057A (zh) * 2021-10-27 2023-04-28 北京字节跳动网络技术有限公司 代码管理的方法和装置
KR102622866B1 (ko) * 2022-09-26 2024-01-09 (주)잉카엔트웍스 매크로봇 탐지 서비스 제공 방법 및 시스템

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101471589B1 (ko) 2013-08-22 2014-12-10 (주)잉카엔트웍스 공통중간언어 기반 프로그램을 위한 보안 제공 방법
KR101667774B1 (ko) * 2015-04-23 2016-10-19 (주)잉카엔트웍스 스크립트 프로그램을 위한 보안 제공 장치 및 방법
KR101693249B1 (ko) 2015-09-08 2017-01-06 충북대학교 산학협력단 어플리케이션 관리 시스템 및 방법

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6539433B1 (en) * 1998-09-30 2003-03-25 Matsushita Electric Industrial Co., Ltd. System for distributing native program converted from Java bytecode to a specified home appliance
US7320075B2 (en) * 2001-11-20 2008-01-15 Safenet, Inc. Software protection method utilizing hidden application code in a protection dynamic link library object
US7260555B2 (en) * 2001-12-12 2007-08-21 Guardian Data Storage, Llc Method and architecture for providing pervasive security to digital assets
US8155306B2 (en) * 2004-12-09 2012-04-10 Intel Corporation Method and apparatus for increasing the speed of cryptographic processing
EP1891520B1 (en) * 2005-06-07 2017-09-13 VMware, Inc. Constraint injection system for immunizing software programs against vulnerabilities and attacks
US7962798B2 (en) * 2006-04-17 2011-06-14 The Trustees Of Columbia University In The City Of New York Methods, systems and media for software self-healing
US8423789B1 (en) * 2007-05-22 2013-04-16 Marvell International Ltd. Key generation techniques
US8756439B1 (en) * 2009-08-28 2014-06-17 Physical Optics Corporation Encryption key management for secured access
US8412934B2 (en) * 2010-04-07 2013-04-02 Apple Inc. System and method for backing up and restoring files encrypted with file-level content protection
US9143530B2 (en) * 2011-10-11 2015-09-22 Citrix Systems, Inc. Secure container for protecting enterprise data on a mobile device
WO2014022636A1 (en) * 2012-08-02 2014-02-06 Trustees Of Tufts College Broad spectrum inhibitors of the post proline cleaving enzymes for treatment of hepatitis c virus infections
US9087191B2 (en) * 2012-08-24 2015-07-21 Vmware, Inc. Method and system for facilitating isolated workspace for applications
US20150302218A1 (en) * 2014-04-22 2015-10-22 Pacid Technologies, Llc Method and system for file hiding
CN104199657B (zh) * 2014-08-27 2018-10-16 百度在线网络技术(北京)有限公司 开放平台的调用方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101471589B1 (ko) 2013-08-22 2014-12-10 (주)잉카엔트웍스 공통중간언어 기반 프로그램을 위한 보안 제공 방법
KR101667774B1 (ko) * 2015-04-23 2016-10-19 (주)잉카엔트웍스 스크립트 프로그램을 위한 보안 제공 장치 및 방법
KR101693249B1 (ko) 2015-09-08 2017-01-06 충북대학교 산학협력단 어플리케이션 관리 시스템 및 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022097799A1 (ko) * 2020-11-09 2022-05-12 동국대학교 산학협력단 함수 요약 정보를 생성하는 보안 취약점 분석 방법 및 이를 포함하는 전자 장치{security vulnerability analysis method for generating function abstract information and electronic device including the same}

Also Published As

Publication number Publication date
US10867017B2 (en) 2020-12-15
KR20190060179A (ko) 2019-06-03
JP6698774B2 (ja) 2020-05-27
US20190163884A1 (en) 2019-05-30
CN109840400B (zh) 2023-09-29
JP2019096299A (ja) 2019-06-20
CN109840400A (zh) 2019-06-04

Similar Documents

Publication Publication Date Title
US20160203087A1 (en) Method for providing security for common intermediate language-based program
KR102001046B1 (ko) 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법
JP5996810B2 (ja) 自己書換え基盤のアプリケーションコード難読化装置及びその方法
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
JP5990654B2 (ja) アプリケーションコード難読化装置及びその方法
RU2620712C2 (ru) Устройство виртуальной машины, имеющее управляемую ключом обфускацию, и способ
CN106203006A (zh) 基于dex与so文件动态执行的Android应用加固方法
CN105930695B (zh) 一种软件开发工具包的保护方法及装置
CN107273723B (zh) 一种基于so文件加壳的Android平台应用软件保护方法
CN104408337A (zh) 一种apk文件防逆向的加固方法
CN104318155A (zh) 一种防逆向apk文件的动态加载方法
Kim et al. Android Application Protection against Static Reverse Engineering based on Multidexing.
JP2007233426A (ja) アプリケーション実行装置
KR101734663B1 (ko) 안드로이드 어플리케이션의 역공학 방지 방법 및 이를 수행하는 장치
CN107871066B (zh) 基于安卓系统的代码编译方法及装置
CN107220528A (zh) Java程序的保护与运行方法、装置和终端
KR101667774B1 (ko) 스크립트 프로그램을 위한 보안 제공 장치 및 방법
KR101749209B1 (ko) 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치
JP2008040853A (ja) アプリケーション実行方法およびアプリケーション実行装置
KR101863325B1 (ko) 역공학 방지 방법 및 장치
KR102039380B1 (ko) 공유 오브젝트의 코드 보호를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법
JP6215468B2 (ja) プログラム保護装置
Kumbhar et al. Hybrid Encryption for Securing SharedPreferences of Android Applications
KR102177920B1 (ko) 원본코드 패킹장치 및 원본코드 패킹방법
Sonnleitner et al. Indirect Data Representation Via Offset Vectoring: A Code-integrity-driven In-memory Data Regeneration Scheme.

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
GRNT Written decision to grant