KR20160117183A - Dll 파일 암호화 방법, 이를 수행하는 dll 파일 암호화 시스템, 및 이를 저장하는 기록매체 - Google Patents
Dll 파일 암호화 방법, 이를 수행하는 dll 파일 암호화 시스템, 및 이를 저장하는 기록매체 Download PDFInfo
- Publication number
- KR20160117183A KR20160117183A KR1020160027669A KR20160027669A KR20160117183A KR 20160117183 A KR20160117183 A KR 20160117183A KR 1020160027669 A KR1020160027669 A KR 1020160027669A KR 20160027669 A KR20160027669 A KR 20160027669A KR 20160117183 A KR20160117183 A KR 20160117183A
- Authority
- KR
- South Korea
- Prior art keywords
- file
- application
- dll file
- dll
- code
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 69
- 238000009434 installation Methods 0.000 claims abstract description 56
- 230000006870 function Effects 0.000 claims abstract description 38
- 230000004048 modification Effects 0.000 abstract 1
- 238000012986 modification Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 4
- 238000003780 insertion Methods 0.000 description 3
- 230000037431 insertion Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/44—Program or device authentication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing 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/2107—File encryption
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Storage Device Security (AREA)
Abstract
본 발명은 DLL 파일 암호화 시스템에서 수행되는 DLL 파일 암호화 방법에 관한 것으로서, (a) 어플리케이션의 설치파일의 압축을 해제하고, 상기 어플리케이션 설치파일에 있는 DLL 파일을 암호화하는 단계; (b) 상기 어플리케이션의 실행 시 프로세스 메모리 권한을 변경할 수 있도록, 권한변경코드를 상기 어플리케이션의 설치파일에 삽입하는 단계; (c) 상기 어플리케이션의 실행 시 상기 암호화된 DLL 파일이 복호화되도록, 복호화코드를 상기 어플리케이션의 설치파일에 삽입하는 단계; 및 (d) 상기 어플리케이션 내의 특정 함수가 호출될 시, 상기 복호화코드를 통하여 복호화된 DLL 파일이 프로세스 메모리에 로딩되도록 파일로딩코드를 상기 어플리케이션의 설치파일에 삽입하는 단계를 포함한다.
Description
본 발명은 DLL 파일 암호화 기술에 관한 것으로, 보다 상세하게는 유니티에서 개발자가 프로그램한 DLL 실행파일이 역컴파일되거나 분석되는 것을 어렵게 하기 위하여 암호화하고, 암호화된 DLL 파일이 포함되어 있는 어플리케이션이 정상 실행되도록 하기 위한 유니티 기반의 DLL 파일 암호화 방법에 관한 것이다.
개발자들에게 게임을 쉽게 만들기 위한 게임엔진들이 출시되고 있다. 그 중 유니티는 가장 인기있는 게임 개발 엔진이다. 유니티에서 개발자는 C# 언어로 프로그램을 작성하며 이를 컴파일 하면 확장자 DLL 파일의 실행파일이 생성된다. DLL 파일은 자바의 CLASS 확장자 파일이나 안드로이드의 DEX 확장자 파일과 마찬가지로 바이트(Byte)코드로 구성되어 역컴파일로 인한 소스코드 노출이 된다.
도 1에 도시된 바와 같이, 유니티 게임엔진으로 개발된 폴더는 /Data/Managed이며, 해당 폴더 밑의 Assembly-CSharp.dll에 개발자가 작성한 코드가 포함되어 있다.
해당 DLL 파일은 ILspy, .NET Reflector등과 같은 인터넷에 공개되어 있는 툴을 이용한다면 도 2에 도시된 바와 같이, 역컴파일하여 개발자가 작성한 원본 소스코드 수준으로 쉽게 얻어 낼 수 있다.
유니티 DLL 파일뿐만 아니라 대부분 DLL 파일이 이러한 역컴파일에 취약하며, 이를 보완하기 위하여 소스코드 수준에서 함수와 변수 이름 그리고 코드의 로직 변경과 같은 기술들이 있다.
상기 기술들은 역컴파일 자체에 의한 소스코드 노출을 막지 못하고 또한 유니티에서 개발된 DLL 파일보다는 일반적인 윈도우 운영체제에서의 DLL 파일에 더 적합하게 개발 되어 있기 때문에, 유니티 프로그램 코드를 포함하고 있는 DLL 파일 암호화 방법에 대한 개발이 시급한 상황이다.
한국등록특허 제10-1140804호는 파일 암호화 방법 및 파일 자동 복호화 방법에 관한 것으로서, 파일 암호화를 위한 암호키를 생성하기 위한 암호키인덱스를 생성하여 파일에 저장하고, 자동 복호시 암호키인덱스로부터 복호키를 생성하고 그 복호키를 이용하여 암호화된 파일스트림을 자동으로 복호화하는 방법을 제공하고 있으나. 유니티 프로그램 코드를 포함하고 있는 DLL 파일을 암호화하고 보안하는 방법은 제시하고 있지 못하는바, 종래의 문제점이 여전히 남아 있다.
본 발명의 목적은 유니티를 이용한 게임에서의 개발자가 프로그램한 코드가 포함되어 있는 DLL 파일을 보호하는 DLL 파일 암호화 방법을 제공하는데 있다.
본 발명의 목적은 암호화된 DLL 파일을 포함한 어플리케이션이 정상적으로 동작하도록 어플리케이션의 실행 시점에 암호화된 DLL 파일을 복호화하기 위한 복호화 코드를 호출하고 복호화된 DLL 파일을 메모리에 올리도록 하는 DLL 파일 암호화 방법을 제공하는데 있다.
상기 목적을 달성하기 위한 본 발명의 제1 측면은, DLL 파일 암호화 시스템에서 수행되는 DLL 파일 암호화 방법으로서, (a) 어플리케이션의 설치파일의 압축을 해제하고, 상기 어플리케이션 설치파일에 있는 DLL 파일을 암호화하는 단계;
(b) 상기 어플리케이션의 실행 시 프로세스 메모리 권한을 변경할 수 있도록, 권한변경코드를 상기 어플리케이션의 설치파일에 삽입하는 단계; (c) 상기 어플리케이션의 실행 시 상기 암호화된 DLL 파일이 복호화되도록, 복호화코드를 상기 어플리케이션의 설치파일에 삽입하는 단계; 및 (d) 상기 어플리케이션 내의 특정 함수 가 호출될 시, 상기 복호화코드를 통하여 복호화된 DLL 파일이 프로세스 메모리에 로딩되도록 파일로딩코드를 상기 어플리케이션의 설치파일에 삽입하는 단계를 포함한다.
바람직하게, 상기 DLL 파일의 로딩 시, 상기 DLL 파일에 대하여 무결성 검사를 수행하기 위한 무결성 검사 코드를 상기 어플리케이션의 설치파일에 삽입 하는 단계를 더 포함할 수 있다.
바람직하게, 상기 어플리케이션의 설치파일을 압축 및 서명하는 단계; 및 상기 어플리케이션의 설치파일의 무결성 검사를 수행하기 위한 코드를 상기 압축 및 서명된 어플리케이션의 설치파일에 삽입하는 단계를 더 포함할 수 있다.
바람직하게, 상기 어플리케이션의 실행 시, 상기 권한변경코드를 통하여 상기 프로세스 메모리의 권한을 읽기권한에서 읽기/쓰기권한으로 변경하는 단계; 상기 특정 함수가 호출될 시, 호출 주소를 상기 복호화코드 및 상기 파일로딩 코드가 삽입된 함수의 주소로 변경 하는 단계; 및 상기 권한변경코드를 통하여 상기 프로세스 메모리의 권한을 읽기/쓰기권한에서 읽기권한으로 변경 하는 단계를 더 포함할 수 있다.
상기 목적을 달성하기 위한 본 발명의 제2 측면은, DLL 파일 암호화 시스템에서 수행되는 DLL 파일 암호화 방법으로서, (a) 어플리케이션의 설치파일의 압축을 해제하고, 상기 어플리케이션 설치파일에 있는 DLL 파일을 암호화하는 단계; (b) 상기 어플리케이션의 실행 시 상기 암호화된 DLL 파일이 복호화되도록, 복호화코드를 상기 어플리케이션의 설치파일에 삽입하는 단계; (c) 상기 암호화된 DLL 파일을 상기 어플리케이션의 설치파일 내의 임의의 장소 에 삽입하는 단계; 및 (d) 상기 암호화되지 않은 DLL 파일을 임시 DLL 파일로 교체하는 단계를 포함하되, 상기 임시 DLL 파일은 어플리케이션의 실행 시 복호화된 DLL 파일을 로딩하는 기능을 포함한다.
상기한 바와 같이 본 발명에 의하면, 유니티를 이용하여 개발된 어플리케이션에서 프로그램한 코드가 포함되어 있는 DLL 파일을 암호화 하여 역컴파일 및 분석을 어렵게 만들고, 어플리케이션의 실행 시 암호화된 DLL 파일이 복호화가 되어 어플리케이션이 정상적으로 실행 될 수 있는 효과가 있다.
도 1은 유니티 파일구조를 나타낸 도면이다.
도 2는 DLL 파일이 역컴파일 되는 과정을 나타내는 예시도이다.
도 3은 본 발명의 바람직한 실시예에 따른 DLL 파일 암호화 시스템에 대한 블록도이다.
도 4는 도 3의 DLL 파일 암호화 시스템에서 수행되는 DLL 파일 암호화 방법의 일 실시예를 나타내는 흐름도이다.
도 5는 도 3의 DLL 파일 암호화 시스템에서 수행되는 DLL 파일 암호화 방법의 다른 실시예를 나타내는 흐름도이다.
도 6은 프로세스 메모리 권한의 변경을 나타내는 예시이다.
도 2는 DLL 파일이 역컴파일 되는 과정을 나타내는 예시도이다.
도 3은 본 발명의 바람직한 실시예에 따른 DLL 파일 암호화 시스템에 대한 블록도이다.
도 4는 도 3의 DLL 파일 암호화 시스템에서 수행되는 DLL 파일 암호화 방법의 일 실시예를 나타내는 흐름도이다.
도 5는 도 3의 DLL 파일 암호화 시스템에서 수행되는 DLL 파일 암호화 방법의 다른 실시예를 나타내는 흐름도이다.
도 6은 프로세스 메모리 권한의 변경을 나타내는 예시이다.
이하, 본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 것이며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다. "및/또는"은 언급된 아이템들의 각각 및 하나 이상의 모든 조합을 포함한다.
비록 제1, 제2 등이 다양한 소자, 구성요소 및/또는 섹션들을 서술하기 위해서 사용되나, 이들 소자, 구성요소 및/또는 섹션들은 이들 용어에 의해 제한되지 않음은 물론이다. 이들 용어들은 단지 하나의 소자, 구성요소 또는 섹션들을 다른 소자, 구성요소 또는 섹션들과 구별하기 위하여 사용하는 것이다. 따라서, 이하에서 언급되는 제1 소자, 제1 구성요소 또는 제1 섹션은 본 발명의 기술적 사상 내에서 제2 소자, 제2 구성요소 또는 제2 섹션일 수도 있음은 물론이다.
또한, 각 단계들에 있어 식별부호(예를 들어, a, b, c 등)는 설명의 편의를 위하여 사용되는 것으로 식별부호는 각 단계들의 순서를 설명하는 것이 아니며, 각 단계들은 문맥상 명백하게 특정 순서를 기재하지 않는 이상 명기된 순서와 다르게 일어날 수 있다. 즉, 각 단계들은 명기된 순서와 동일하게 일어날 수도 있고 실질적으로 동시에 수행될 수도 있으며 반대의 순서대로 수행될 수도 있다.
본 명세서에서 사용된 용어는 실시예들을 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다. 명세서에서 사용되는 “포함한다(comprises)" 및/또는 “포함하는(comprising)"은 언급된 구성요소, 단계, 동작 및/또는 소자는 하나 이상의 다른 구성요소, 단계, 동작 및/또는 소자의 존재 또는 추가를 배제하지 않는다.
다른 정의가 없다면, 본 명세서에서 사용되는 모든 용어(기술 및 과학적 용어를 포함)는 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 공통적으로 이해될 수 있는 의미로 사용될 수 있을 것이다. 또 일반적으로 사용되는 사전에 정의되어 있는 용어들은 명백하게 특별히 정의되어 있지 않는 한 이상적으로 또는 과도하게 해석되지 않는다.
또한, 본 발명의 실시예들을 설명함에 있어서 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 그리고 후술되는 용어들은 본 발명의 실시예에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
도 3은 본 발명의 바람직한 실시예에 따른 DLL 파일 암호화 시스템에 대한 블록도이다.
도 3을 참조하면, DLL 파일 암호화 시스템(300)은 암호화부(310), 권한변경부(320), 복호화부(330), 파일로딩부(340), 및 제어부(350)을 포함한다.
암호화부(310)는 어플리케이션의 설치파일의 압축을 해제하고, 어플리케이션 설치파일에 있는 DLL 파일을 암호화한다. 여기에서, DLL 파일은 개발자가 프로그램한 코드로서 확장자가 dll에 해당하는 유니티 DLL 파일에 해당한다. 예를 들어, DLL 파일은, 안드로이드 환경에서는 “assets>bin>Data>Managed” 디렉토리에 저장될 수 있고, iOS 환경에서는 “(app_name).app/Data/Mnanaged” 내에 저장될 수 있으며, Assembly-CSharp.dll 파일일 수 있다. 즉, 암호화부(310)는 압축을 해제한 파일 내의 /Data/Managed와 같은 유니티 DLL 디렉토리 내에 개발자가 프로그램한 코드를 포함하는 Assembly-CSharp.dll와 같은 DLL 파일을 추출하고, DLL 파일을 암호화 한다. 또한, DLL 파일의 암호화에 사용되는 암호키는 외부의 암호키서버를 통하여 관리될 수 있다.
권한변경부(320)는 어플리케이션의 실행 시 프로세스 메모리 권한을 변경할 수 있도록, 권한변경코드를 어플리케이션의 설치파일에 삽입한다. 여기에서, 프로세스 메모리 권한은 /proc/self/maps 에서의 권한에 해당한다. 바람직하게, 권한변경부(320)는 시스템에서 제공하는 mprotect와 같은 함수를 이용하여 프로세스 메모리 권한을 rwx(Read, Write, Execute)와 같은 권한에서 쓰기(Write)가 가능하도록 권한을 추가 및 변환할 수 있는 권한변경코드를 삽입할 수 있다.
어플리케이션의 실행 시, 구체적으로, 어플리케이션 실행 후 DLL 함수 호출 시, 권한변경부(320)에 의하여 삽입된 권한변경코드를 통하여 프로세스 메모리의 권한을 읽기권한에서 읽기/쓰기권한으로 변경할 수 있고, 그 다음 특정 함수가 호출될 시, 호출 주소를 변경하여 복호화코드 및 파일로딩코드가 삽입된 함수가 호출되도록 변경할 수 있다. 즉, 원래의 함수를 호출하는 호출 주소는 DLL 파일을 복호화하여 로딩하는 함수가 호출되도록 변경된다. 권한변경코드를 통하여 프로세스 메모리의 권한을 읽기/쓰기권한에서 읽기권한으로 다시 변경할 수 있다.
보다 구체적으로, 어플리케이션의 실행 시, 권한변경부(320)를 통하여 프로세스 메모리의 권한이 쓰기 권한으로 변경되면, 복호화코드 및 파일로딩코드가 삽입된 함수가 호출되도록 호출 주소가 변경되어 프로세스 메모리가 재작성된다. 즉, 유니티 DLL 파일을 실행시키는, 예를 들어 libunity.so 와 같은 유니티 엔진 라이브러리가 실행 될 때 다른 프로세스를 호출할 수 있도록 프로세스 메모리를 재작성하여 복호화코드 및 파일로딩코드가 호출될 수 있다.
바람직하게,, 권한변경부(320)는 프로세스 메모리의 권한을 쓰기로 변경한 다음, 어플리케이션의 기본 주소(base address)를 얻기 위한 코드를 프로세스 메모리에 삽입한다. 여기에서, 어플리케이션의 기본 주소는 전체 운영체제 메모리 상에서 해당 어플리케이션 프로세스가 위치한 시작 주소에 해당하고, 어플리케이션의 기본 주소를 얻기 위한 코드는 /proc/프로세스ID/maps와 같은 프로세스 맵을 이용하여 프로세스 메모리에 삽입될 수 있다.
다음으로, 권한변경부(320)는 리눅스 운영체제에서 제공하는 명령어를 이용하거나 파서(Parser)를 구현하여, 어플리케이션의 설치파일 내에서 후킹(hooking)하려고 하는 함수의 PLT(Procedure Linkage Table) 및 GOT(Global Offset Table) 주소를 얻기 위한 코드를 어플리케이션의 설치파일에 삽입할 수 있다. 여기에서, 후킹하려고 하는 함수는 함수 호출시 호출될 함수로서 유니티 라이브러리(Unity Library) 내에 있는 것이고, PLT는 외부 라이브러리에 있는 함수를 호출하는 영역이며, PLT는 외부 함수를 호출할 때 GOT를 참조하여 해당 주소로 이동할 수 있다.
다음으로, 권한변경부(320)는 기본 주소에 PLT 및 GOT 주소를 더하여, 후킹하려고 하는 함수의 주소를 계산하기 위한 코드를 어플리케이션의 설치파일에 삽입하고, 여기에서, “기본 주소(base address) + (PLT 주소(.plt) 또는 .GOT 주소(.got)) = 후킹하려는 함수의 주소” 에 해당한다.
다음으로, 권한변경부(320)는 계산된 후킹하려고 하는 함수의 주소를 변경하여, 어플리케이션과 유니티 라이브러리가 실행되는 시점에 복호화코드 및 파일로딩코드를 호출하기 위한 코드를 어플리케이션의 설치파일에 삽입할 수 있다.
복호화부(330)는 어플리케이션의 실행 시 암호화된 DLL 파일이 복호화되도록, 복호화코드를 어플리케이션의 설치파일에 삽입한다. 예를 들어, 어플리케이션의 실행파일 내에 있는 JIN(Java Native Interface)로 개발자가 프로그램 한 유니티 DLL 파일을 호출하는 유니티 라이브러리가 실행 될 때, 개발자가 프로그램 한 유니티 DLL 파일을 복호화하는 라이브러리가 삽입될 수 있다. 바람직하게, 복호화부(330)는 어플리케이션의 정상 실행에 방해가 되지 않는 장소에 복호화코드를 삽입할 수 있고, 여기에서, 어플리케이션의 정상 실행에 방해가 되지 않는 장소는 라이브러리 형식이거나 또는 어플리케이션의 실행파일 중 사용하지 않는 영역과 같이 어플리케이션의 실행에 문제가 되지 않는 영역에 해당할 수 있다.
파일로딩부(340)는 어플리케이션 내의 특정 함수가 호출될 시, 복호화코드를 통하여 복호화된 DLL 파일이 프로세스 메모리에 로딩되도록 파일로딩코드를 어플리케이션의 설치파일에 삽입한다. 여기에서, 특정 함수는 어플리케이션이 DLL을 로딩할 때 반드시 호출되는 함수에 해당할 수 있다.
일 실시예에서, DLL 파일 암호화 시스템(300)은 무결성검사부를 더 포함할 수 있고, 무결성검사부는 DLL 파일 로딩 시, DLL 파일에 대하여 무결성 검사를 수행하기 위한 무결성 검사 코드를 어플리케이션의 설치파일에 삽입할 수 있다. 보다 구체적으로, 무결성검사부는 외부의 해쉬관리서버와 연결되어 암호화부(310)를 통하여 DLL 파일의 암호화 시 DLL 파일의 해쉬를 등록하고, 동륵된 해쉬를 이용하여 DLL 파일의 무결성을 검사할 수 있다. 또한, 무결성검사부는 암호화되어 압축 및 서명까지 완료된 어플리케이션의 설치파일의 무결성 검사를 수행하기 위한 코드를 압축 및 서명된 어플리케이션의 설치파일에 삽입할 수 있다.
일 실시예에서, DLL 파일 암호화 시스템(300)은 압축 및 서명부를 더 포함할 수 있고, 압축 및 서명부는 어플리케이션의 설치파일을 압축하고 정상적인 배포자임을 어플리케이션에 서명한다.
일 실시예에서, DLL 파일 암호화 시스템(300)은 암호화부(310)와 복호화부(330), 및 도면에 도시하지 않았지만 파일 삽입부 및 파일 교체부를 통하여 아래와 같이 DLL 파일을 암호화할 수도 있다.
암호화부(310)는 어플리케이션의 설치파일의 압축을 해제하고, 어플리케이션 설치파일에 있는 DLL 파일을 암호화하고, 복호화부(330)는 어플리케이션의 실행 시 암호화된 DLL 파일이 복호화되도록 복호화코드를 어플리케이션의 설치파일에 삽입한다.
파일 삽입부는 암호화된 DLL 파일을 어플리케이션의 설치파일 내의 임의의 장소에 삽입한다. 여기에서, 임의의 장소는 DLL 스크립트가 저장되는 장소에 해당할 수 있다.
파일 교체부는 암호화되지 않은 DLL파일을 임시 DLL 파일로 교체하고, 여기에서, 임시 DLL 파일은 어플리케이션의 실행 시 복호화된 DLL 파일을 로딩하는 기능을 포함한다. 여기에서, 복호화된 DLL 파일을 로딩하는 함수는 System.Reflection.Assembly.Load가 이용될 수 있다.
제어부(350)는 암호화부(310), 권한변경부(320), 복호화부(330), 및 파일로딩부(340)의 동작 및 데이터의 흐름을 제어한다.
도 4는 도 3의 DLL 파일 암호화 시스템에서 수행되는 DLL 파일 암호화 방법의 일 실시예를 나타내는 흐름도이다.
암호화부(310)는 어플리케이션의 설치파일의 압축을 해제하고, 어플리케이션 설치파일에 있는 DLL 파일을 암호화한다(단계 S410). 여기에서, DLL 파일은 DLL 파일 내에서 특정 알고리즘이나 로직이 포함된 소스코드를 분리하여 암호화되는 것이 아니라 DLL 파일 전체가 암호화된다.
권한변경부(320)는 어플리케이션의 실행 시 프로세스 메모리 권한을 변경할 수 있도록, 권한변경코드를 어플리케이션의 설치파일에 삽입한다(단계 S420). 바람직하게, 프로세스 메모리 권한은 읽기, 쓰기, 및 실행이 있고, 본 발명에서는 쓰기 권한을 추가하고, 프로세스 메모리를 수정한 다음 다시 쓰기 권한을 삭제할 수 있도록 하는 권한변경코드가 삽입될 수 있다.
복호화부(330)은 어플리케이션의 실행 시 암호화된 DLL 파일이 복호화되도록, 복호화코드를 어플리케이션의 설치파일에 삽입한다(단계 S430).
파일로딩부(340)는 어플리케이션 내의 특정 함수가 호출될 시, 복호화코드를 통하여 복호화된 DLL 파일이 프로세스 메모리에 로딩되도록 파일로딩코드를 어플리케이션의 설치파일에 삽입한다(단계 S430).
일 실시예에서, 상기와 같은 방법으로 암호화된 DLL 파일을 포함하는 어플리케이션이 실행 되면, 다음과 같은 과정으로 어플리케이션이 실행될 수 있다.
어플리케이션 실행 시, 암호화된 DLL 파일이 로딩되고, 해쉬관리 서버를 통하여 관리되고 있는 해쉬를 이용하여 DLL 파일의 무결성 검사가 수행된다. 무결성 검사 수행결과, DLL 파일이 적법한 것으로 판단되면, 권한변경코드를 통하여 프로세스 메모리 권한에 쓰기권한을 추가한다. 다음으로, 특정 함수가 호출될 때 호출 주소를 변경하여 복호화코드 및 파일로딩코드가 삽입된 함수가 호출되도록 변경하고, 프로세스 메모리 권한에서 쓰기권한을 삭제하여 다시 읽기 권한만 있도록 변경한다. 즉, 도 6과 같이, 프로세스 메모리 권한은 r 권한에서 rw 권한으로 변경된 다음 다시 r 권한으로 변경된다. 다음으로, 위와 같은 프로세스 메모리 권한의 변경 및 프로세스 메모리의 재작성을 통하여 복호화코드 및 파일로딩코드가 호출되면 암호화된 DLL 파일을 복호화하고 복호화된 DLL 파일을 프로세스 메모리에 로딩한다. 이를 통하여, 암호화된 DLL 파일을 포함하는 어플리케이션을 정상적으로 실행될 수 있다.
도 5는 도 3의 DLL 파일 암호화 시스템에서 수행되는 DLL 파일 암호화 방법의 다른 실시예를 나타내는 흐름도이다. 여기에서 수행되는 DLL 파일 암호화 방법은 암호화부(310), 복호화부(330), 파일 삽입부, 및 파일 교체부를 통하여 수행된다.
암호화부(310)는 어플리케이션의 설치파일의 압축을 해제하고, 어플리케이션 설치파일에 있는 DLL 파일을 암호화한다(단계 S510). 복호화부(330)는 어플리케이션의 실행 시 암호화된 DLL 파일이 복호화되도록, 복호화코드를 어플리케이션의 설치파일에 삽입한다(단계 S520).
다음으로, 파일 삽입부는 암호화된 DLL 파일을 어플리케이션의 설치파일 내의 임의의 장소에 삽입하고(단계 S530), 파일 교체부는 암호화되지 않은 DLL 파일을 임시 DLL 파일로 교체한다(단계 S540). 여기에서, 임시 DLL 파일은 어플리케이션의 실행 시 복호화된 DLL 파일을 로딩하는 기능을 포함하도록 생성될 수 있다.
일 실시예에서, 상기와 같은 방법으로 암호화된 DLL 파일을 포함하는 어플리케이션이 실행 되면, 다음과 같은 과정으로 어플리케이션이 실행될 수 있다.
어플리케이션의 실행 시, DLL 파일의 무결성 검사가 수행되고, 암호화된 DLL 파일이 로딩되며, 암호화된 DLL 파일이 복호화된다. 다음으로, 임시 DLL 파일에 포함된 복호화된 DLL 파일을 로딩하는 기능을 통하여 복호화된 DLL 파일을 로딩한다. 이를 통하여 암호화된 DLL 파일을 포함하는 어플리케이션이 정상 실행될 수 있다.
상기의 과정을 거쳐 생성된 어플리케이션 내에 암호화된 DLL 파일은 악의적인 목적의 사용자에 의해 역컴파일이나 분석이 쉽게 이루어 지지 않으며, 어플리케이션이 실행되면서 암호화된 DLL 파일이 복호화 되어 메모리에 로딩되므로 정상적으로 실행되는 어플리케이션 설치 및 실행파일을 갖게 된다.
한편, 본 발명의 일 실시예에 따른 DLL 파일 암호화 방법은 또한 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현되는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다.
예컨대, 컴퓨터가 읽을 수 있는 기록매체로는 롬(ROM), 램(RAM), 시디-롬(CD-ROM), 자기 테이프, 하드디스크, 플로피디스크, 이동식 저장장치, 비휘발성메모리(Flash Memory), 광 데이터 저장장치 등이 있다.
또한, 컴퓨터로 읽을 수 있는 기록매체는 컴퓨터 통신망으로 연결된 컴퓨터시스템에 분산되어, 분산방식으로 읽을 수 있는 코드로서 저장되고 실행될 수 있다.
전술한 본 발명에 따른 DLL 파일 암호화 방법, 이를 수행하는 DLL 파일 암호화 시스템, 및 이를 저장하는 기록매체에 대한 바람직한 실시예에 대하여 설명하였지만, 본 발명은 이에 한정되는 것이 아니고 특허청구범위와 발명의 상세한 설명 및 첨부한 도면의 범위 안에서 여러가지로 변형하여 실시하는 것이 가능하고 이 또한 본 발명에 속한다.
300: DLL 파일 암호화 시스템
310: 암호화부
320: 권한변경부
330: 복호화부
340: 파일로딩부
350: 제어부
310: 암호화부
320: 권한변경부
330: 복호화부
340: 파일로딩부
350: 제어부
Claims (6)
- DLL 파일 암호화 시스템에서 수행되는 DLL 파일 암호화 방법에 있어서,
(a) 어플리케이션의 설치파일의 압축을 해제하고, 상기 어플리케이션 설치파일에 있는 DLL 파일을 암호화하는 단계;
(b) 상기 어플리케이션의 실행 시 프로세스 메모리 권한을 변경할 수 있도록, 권한변경코드를 상기 어플리케이션의 설치파일에 삽입하는 단계;
(c) 상기 어플리케이션의 실행 시 상기 암호화된 DLL 파일이 복호화되도록, 복호화코드를 상기 어플리케이션의 설치파일에 삽입하는 단계;
(d) 상기 어플리케이션 내의 특정 함수가 호출될 시, 상기 복호화코드를 통하여 복호화된 DLL 파일이 프로세스 메모리에 로딩되도록 파일로딩코드를 상기 어플리케이션의 설치파일에 삽입하는 단계를 포함하는 DLL 파일 암호화 방법.
- 제1항에 있어서,
상기 DLL 파일의 로딩 시, 상기 DLL 파일에 대하여 무결성 검사를 수행하기 위한 무결성 검사 코드를 상기 어플리케이션의 설치파일에 삽입하는 단계를 더 포함하는 것을 특징으로 하는 DLL 파일 암호화 방법.
- 제1항에 있어서,
상기 어플리케이션의 설치파일을 압축 및 서명하는 단계; 및
상기 어플리케이션의 설치파일의 무결성 검사를 수행하기 위한 코드를 상기 압축 및 서명된 어플리케이션의 설치파일에 삽입하는 단계를 더 포함하는 것을 특징으로 하는 DLL 파일 암호화 방법.
- 제1항에 있어서,
상기 어플리케이션의 실행 시,
상기 권한변경코드를 통하여 상기 프로세스 메모리의 권한을 읽기권한에서 읽기/쓰기권한으로 변경하는 단계;
상기 특정 함수가 호출될 시, 호출 주소를 상기 복호화코드 및 상기 파일로딩코드가 삽입된 함수의 주소로 변경하는 단계; 및
상기 권한변경코드를 통하여 상기 프로세스 메모리의 권한을 읽기/쓰기권한에서 읽기권한으로 변경하는 단계를 더 포함하는 것을 특징으로 하는 DLL 파일 암호화 방법.
- DLL 파일 암호화 시스템에서 수행되는 DLL 파일 암호화 방법에 있어서,
(a) 어플리케이션의 설치파일의 압축을 해제하고, 상기 어플리케이션 설치파일에 있는 DLL 파일을 암호화하는 단계;
(b) 상기 어플리케이션의 실행 시 상기 암호화된 DLL 파일이 복호화되도록, 복호화코드를 상기 어플리케이션의 설치파일에 삽입하는 단계;
(c) 상기 암호화된 DLL 파일을 상기 어플리케이션의 설치파일 내의 임의의 장소에 삽입하는 단계; 및
(d) 상기 암호화되지 않은 DLL 파일을 임시 DLL 파일로 교체하는 단계를 포함하되, 상기 임시 DLL 파일은 어플리케이션의 실행 시 복호화된 DLL 파일을 로딩하는 기능을 포함하는 것을 특징으로 하는 DLL 파일 암호화 방법.
- 제1항 내지 제5항 중 어느 한 항의 방법을 컴퓨터로 실행시킬 수 있는 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020150043960 | 2015-03-30 | ||
KR20150043960 | 2015-03-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160117183A true KR20160117183A (ko) | 2016-10-10 |
KR102459774B1 KR102459774B1 (ko) | 2022-10-28 |
Family
ID=57145894
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020160027669A KR102459774B1 (ko) | 2015-03-30 | 2016-03-08 | Dll 파일 암호화 방법, 이를 수행하는 dll 파일 암호화 시스템, 및 이를 저장하는 기록매체 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR102459774B1 (ko) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018194198A1 (ko) * | 2017-04-20 | 2018-10-25 | 라인 가부시키가이샤 | Pe 파일의 난독화 적용 여부의 탐지 및 보안성 평가를 위한 방법 및 시스템 |
CN110968867A (zh) * | 2018-09-29 | 2020-04-07 | 武汉斗鱼网络科技有限公司 | 防止不良dll注入的方法、存储介质、电子设备及系统 |
CN111625278A (zh) * | 2020-05-26 | 2020-09-04 | 深圳云之家网络有限公司 | 一种源代码文件的生成方法及相关设备 |
KR20210008469A (ko) * | 2018-06-08 | 2021-01-22 | 라인플러스 주식회사 | 네이티브 라이브러리를 보호하는 방법 및 시스템 |
US10963563B2 (en) | 2017-04-20 | 2021-03-30 | Line Corporation | Method and system for evaluating security of application |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101140804B1 (ko) | 2009-12-18 | 2012-05-03 | 주식회사 잉카인터넷 | 파일 암호화 방법 및 파일 자동 복호화 방법 |
KR101518420B1 (ko) * | 2014-11-11 | 2015-05-07 | 주식회사 에스이웍스 | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 |
KR20160118920A (ko) * | 2015-04-04 | 2016-10-12 | 홍동철 | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 |
-
2016
- 2016-03-08 KR KR1020160027669A patent/KR102459774B1/ko active IP Right Grant
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101140804B1 (ko) | 2009-12-18 | 2012-05-03 | 주식회사 잉카인터넷 | 파일 암호화 방법 및 파일 자동 복호화 방법 |
KR101518420B1 (ko) * | 2014-11-11 | 2015-05-07 | 주식회사 에스이웍스 | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 |
KR20160118920A (ko) * | 2015-04-04 | 2016-10-12 | 홍동철 | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018194198A1 (ko) * | 2017-04-20 | 2018-10-25 | 라인 가부시키가이샤 | Pe 파일의 난독화 적용 여부의 탐지 및 보안성 평가를 위한 방법 및 시스템 |
US10963563B2 (en) | 2017-04-20 | 2021-03-30 | Line Corporation | Method and system for evaluating security of application |
KR20210008469A (ko) * | 2018-06-08 | 2021-01-22 | 라인플러스 주식회사 | 네이티브 라이브러리를 보호하는 방법 및 시스템 |
CN110968867A (zh) * | 2018-09-29 | 2020-04-07 | 武汉斗鱼网络科技有限公司 | 防止不良dll注入的方法、存储介质、电子设备及系统 |
CN110968867B (zh) * | 2018-09-29 | 2022-04-08 | 武汉斗鱼网络科技有限公司 | 防止不良dll注入的方法、存储介质、电子设备及系统 |
CN111625278A (zh) * | 2020-05-26 | 2020-09-04 | 深圳云之家网络有限公司 | 一种源代码文件的生成方法及相关设备 |
CN111625278B (zh) * | 2020-05-26 | 2023-12-19 | 深圳云之家网络有限公司 | 一种源代码文件的生成方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
KR102459774B1 (ko) | 2022-10-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102433011B1 (ko) | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 | |
US20210294879A1 (en) | Securing executable code integrity using auto-derivative key | |
KR101518420B1 (ko) | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 | |
JP5821034B2 (ja) | 情報処理装置、仮想マシン生成方法及びアプリ配信システム | |
JP5190800B2 (ja) | プログラムの実行制御システム、実行制御方法、実行制御用コンピュータプログラム | |
JP5061908B2 (ja) | プログラム実行制御方法および装置ならびに実行制御プログラム | |
KR102459774B1 (ko) | Dll 파일 암호화 방법, 이를 수행하는 dll 파일 암호화 시스템, 및 이를 저장하는 기록매체 | |
WO2016078130A1 (zh) | 一种防逆向apk文件的动态加载方法 | |
CN104408337A (zh) | 一种apk文件防逆向的加固方法 | |
CN110188555B (zh) | 一种磁盘数据保护方法、系统及相关组件 | |
CN103530535A (zh) | 一种Android平台应用程序保护的加脱壳方法 | |
CN109992987B (zh) | 基于Nginx的脚本文件保护方法、装置及终端设备 | |
CN106599629B (zh) | 一种安卓应用程序加固方法及装置 | |
KR20070001893A (ko) | 탬퍼-레지스턴트 트러스티드 가상 머신 | |
CN104239757A (zh) | 应用程序防止逆向的方法及装置、运行方法及终端 | |
KR101695639B1 (ko) | 클라우드 기반의 애플리케이션 보안 서비스 제공 방법 및 시스템 | |
CN105095771A (zh) | 一种共享目标文件的保护方法及装置 | |
CN109255235A (zh) | 基于用户态沙箱的移动应用第三方库隔离方法 | |
KR101734663B1 (ko) | 안드로이드 어플리케이션의 역공학 방지 방법 및 이를 수행하는 장치 | |
Alendal et al. | Forensics acquisition—Analysis and circumvention of samsung secure boot enforced common criteria mode | |
KR101749209B1 (ko) | 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치 | |
KR101638257B1 (ko) | 애플리케이션의 소스 코드 보호 방법 및 이를 수행하는 장치 | |
KR101863325B1 (ko) | 역공학 방지 방법 및 장치 | |
KR20220085786A (ko) | 랜섬웨어 방지 | |
CN112115430A (zh) | 一种apk的加固方法、电子设备及存储介质 |
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 |