KR101667774B1 - 스크립트 프로그램을 위한 보안 제공 장치 및 방법 - Google Patents

스크립트 프로그램을 위한 보안 제공 장치 및 방법 Download PDF

Info

Publication number
KR101667774B1
KR101667774B1 KR1020150057113A KR20150057113A KR101667774B1 KR 101667774 B1 KR101667774 B1 KR 101667774B1 KR 1020150057113 A KR1020150057113 A KR 1020150057113A KR 20150057113 A KR20150057113 A KR 20150057113A KR 101667774 B1 KR101667774 B1 KR 101667774B1
Authority
KR
South Korea
Prior art keywords
library
intermediate language
security
unit
proxy
Prior art date
Application number
KR1020150057113A
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 KR1020150057113A priority Critical patent/KR101667774B1/ko
Application granted granted Critical
Publication of KR101667774B1 publication Critical patent/KR101667774B1/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]
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 스크립트 프로그램을 위한 보안 제공 장치 및 방법에 관한 것으로, 본 발명에 따른 복수의 스크립트 파일들을 컴파일하여 생성된 중간 언어 라이브러리와 실행 엔진 라이브러리를 조합하여 생성된 실행 패키지가 저장되어 있는 보안 제공 장치는, 실행 패키지로부터 중간 언어 라이브러리를 추출하는 중간 언어 추출부와, 중간 언어 추출부에서 추출된 중간 언어 라이브러리의 메소드에 대해 프록시 메소드를 생성하여 추가하고 또한 프록시 메소드에 대응하는 원본 메소드의 바디 시작과 바디 끝에 각각 태그를 추가하는 프록시 메소드 추가부와, 및 프록시 메소드 추가부에서 추가된 원본 메소드의 시작 태그와 종료 태그를 이용하여 원본 메소드에 대한 보안을 제공하여 보안이 적용된 중간 언어 라이브러리를 생성하는 보안 중간 언어 생성부를 포함함으로써, 정적 공격에 의한 해킹으로부터 스크립트 소스 코드를 보호할 수 있다.

Description

스크립트 프로그램을 위한 보안 제공 장치 및 방법{Apparatus and Method of Providing Security for Script Program}
본 발명은 스크립트 프로그램을 위한 보안 제공 장치 및 방법에 관한 것으로, 특히 스크립트 언어로 작성된 프로그램의 공통 중간 언어에 대해 보안을 제공하는 보안 제공 장치 및 방법에 관한 것이다.
애플리케이션은 동일한 일을 수행한다고 하더라도 하드웨어나 운영체제에 따라 동작 가능하도록 개별적으로 프로그램 되어야 한다. 즉, 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#과 마찬가지로 중간 언어로 변환하여 실행하는 언어이므로 쉽게 소스 코드 노출과 변조가 이루어질 수 있는 탓에 공격자가 매우 쉽게 보안 로직을 무력화할 수 있다.
상술한 문제점을 해결하기 위해, 본 발명은 중간 언어 라이브러리들에 보안을 제공하여 해킹으로부터 스크립트 프로그램을 보호할 수 있는 스크립트 프로그램을 위한 보안 제공 장치 및 방법을 제공하는 것을 목적으로 한다.
또한, 본 발명은 중요한 게임 로직이 들어 있는 중간 언어 라이브러리들의 보안 속성을 이용하여 자동적으로 보안을 제공할 수 있는 스크립트 프로그램을 위한 보안 제공 장치 및 방법을 제공하는 것을 목적으로 한다.
상술한 목적을 달성하기 위해, 본 발명의 일실시예에 따른 복수의 스크립트 파일들을 컴파일하여 생성된 중간 언어 라이브러리와 실행 엔진 라이브러리를 조합하여 생성된 실행 패키지가 저장되어 있는 보안 제공 장치는, 상기 실행 패키지로부터 상기 중간 언어 라이브러리를 추출하는 중간 언어 추출부와, 상기 중간 언어 추출부에서 추출된 중간 언어 라이브러리의 메소드에 대해 프록시 메소드를 생성하여 추가하고 또한 상기 프록시 메소드에 대응하는 원본 메소드의 바디 시작과 바디 끝에 각각 태그를 추가하는 프록시 메소드 추가부와, 및 상기 프록시 메소드 추가부에서 추가된 원본 메소드의 시작 태그와 종료 태그를 이용하여 원본 메소드에 대한 보안을 제공하여 보안이 적용된 중간 언어 라이브러리를 생성하는 보안 중간 언어 생성부를 제공할 수 있다.
상기 중간 언어 추출부에서 추출된 상기 중간 언어 라이브러리는 공통 중간 언어 라이브러리일 수 있고, 상기 보안 중간 언어 생성부에서 제공한 보안은 원본 메소드에 대한 암호화를 수행할 수 있다.
상기 보안 제공 장치는 상기 중간 언어 추출부에서 추출된 공통 중간 언어 라이브러리를 텍스트 중간 언어 라이브러리로 변환하는 중간 언어 변환부와, 및 상기 프록시 메소드 추가부에서 추가된 프록시 메소드와 상기 중간 언어 변환부에서 변환된 텍스트 중간 언어 라이브러리의 원본 메소드를 조합하여 다시 공통 중간 언어 라이브러리를 생성하는 공통 중간 언어 생성부를 더 포함할 수 있다.
상기 보안 제공 장치는 상기 보안이 적용된 중간 언어 라이브러리, 상기 실행 엔진 라이브러리 및 상기 보안 중간 언어 생성부에서 제공된 보안 라이브러리를 조합하여 다시 패키지를 생성하는 패키지 조합부를 더 포함할 수 있다.
상기 메소드 추가부는 상기 중간 언어 추출부에서 추출된 중간 언어 라이브러리의 메소드들 중 보안 속성이 적용된 메소드들에 대해서만 상기 프록시 메소드를 생성하여 추가할 수 있다.
본 발명의 또 하나의 실시예에 따른 보안 제공 방법은, 복수의 스크립트 파일들을 컴파일하여 생성된 중간 언어 라이브러리와 실행 엔진 라이브러리를 조합하여 생성된 실행 패키지를 저장하는 단계와, 상기 실행 패키지로부터 상기 중간 언어 라이브러리를 추출하는 단계와, 상기 추출하는 단계에서 추출된 중간 언어 라이브러리의 메소드에 대해 프록시 메소드를 생성하여 추가하고 또한 상기 프록시 메소드에 대응하는 원본 메소드의 바디 시작과 바디 끝에 각각 태그를 추가하는 단계와, 및 상기 추가하는 단계에서 추가된 원본 메소드의 시작 태그와 종료 태그를 이용하여 원본 메소드에 대한 보안을 제공하여 보안이 적용된 중간 언어 라이브러리를 생성하는 단계를 제공함으로써, 상술한 목적을 달성할 수 있다.
본 발명의 또 다른 하나의 실시예에 따른 보안 제공 방법은, 실행 엔진 라이브러리에서 실행 로직에 따라 보안 라이브러리를 로딩하는 단계와, 상기 보안 라이브러리에서 해시 레지스트리를 이용하여 자신의 라이브러리에 대한 무결성을 검증하는 단계와, 상기 실행 엔진 라이브러리에서 실행 로직에 따라 보안이 적용된 중간 언어 라이브러리의 메소드가 호출되면 대응하는 프록시 메소드를 호출하는 단계와, 상기 프록시 메소드에서 상기 보안 라이브러리의 보안 해제 기능을 호출하면, 상기 보안 라이브러리에서 보안이 적용된 원본 메소드에 대해 보안을 해제하는 단계와, 및 상기 중간 언어 라이브러리의 보안이 해제된 원본 메소드를 실행하는 단계를 제공함으로써, 상술한 목적을 달성할 수 있다.
상기 호출하는 단계에서의 보안이 적용된 상기 중간 언어 라이브러리는 공통 중간 언어 라이브러리일 수 있고, 상기 해제하는 단계에서의 보안 해제는 암호화된 원본 메소드에 대해 복호화를 수행할 수 있다.
상기 보안 제공 방법은 상기 보안 라이브러리에서 해시 레지스트리를 이용하여 상기 실행 엔진 라이브러리에 대한 무결성을 검증하는 단계를 더 포함할 수 있다.
상기 보안 제공 방법은 상기 보안 라이브러리에서 디버거(debugger)를 이용하여 게임 프로그램을 분석하는 것을 방지하기 위한 안티디버깅 기능을 수행하는 단계를 더 포함할 수 있다.
상기 보안 제공 방법은 상기 보안 라이브러리에서 게임 프로그램의 메모리 상태를 덤프하는 것을 방지하기 위한 안티덤프 기능을 수행하는 단계를 더 포함할 수 있다.
상기 보안 제공 방법은 상기 실행하는 단계가 종료되면, 상기 보안 라이브러리에서 상기 중간 언어 라이브러리의 복호화된 상기 원본 메소드에 대해 암호화를 수행하는 단계를 더 포함할 수 있다.
상기 해제하는 단계에서 상기 프록시 메소드가 상기 보안 라이브러리의 복호화 기능을 호출하면서 상기 보안 라이브러리로 상기 원본 메소드의 시작 위치와 길이를 제공할 수 있다.
상술한 구성에 의해, 본 발명은 스크립트 소스 코드에 대해 보안을 제공함으로써, 정적 공격에 의한 해킹으로부터 스크립트 소스 코드를 보호할 수 있다.
또한, 본 발명은 공통 중간 언어 라이브러리를 텍스트 중간 언어 라이브러리로 변환한 후에 프록시 메소드를 추가함으로써 메소드에 대한 보안 적용을 용이하게 할 수 있다.
또한, 본 발명은 중요한 게임 로직이 들어 있는 중간 언어 라이브러리들의 보안 속성을 이용하여 자동적으로 보안을 제공할 수 있다.
도 1은 본 발명의 일실시예에 따른 스크립트 프로그램을 위한 보안 시스템의 구성을 도시하는 도면이다.
도 2는 도 1의 프로그램 개발 장치에서의 통상의 유니티 패키지 생성 방법의 예를 도시하는 도면이다.
도 3은 본 발명의 일실시예에 따른 보안 속성의 적용한 유니티 패키지 생성 방법의 예를 도시하는 도면이다.
도 4는 도 1의 보안 제공 장치의 블록도를 도시하는 도면이다.
도 5는 도 4의 보안 제공 장치의 동작을 설명하기 위한 동작 설명도를 도시한 도면이다.
도 6은 도 1의 사용자 단말 장치의 블록도를 도시하는 도면이다.
도 7은 도 6의 사용자 단말 장치의 동작을 설명하기 위한 동작 설명도를 도시한 도면이다.
도 8은 본 발명의 일실시예에 따른 보안 제공 장치에서의 스크립트 프로그램을 위한 보안 제공 방법의 흐름도를 도시하는 도면이다.
도 9는 본 발명의 다른 실시예에 따른 사용자 단말 장치에서의 스크립트 프로그램을 위한 보안 제공 방법의 흐름도를 도시하는 도면이다.
이하, 첨부된 도면을 참조하여 본 발명에 따른 스크립트 프로그램을 위한 보안 제공 장치 및 방법의 바람직한 실시예를 설명한다. 참고로, 아래에서 본 발명을 설명함에 있어서, 본 발명의 구성요소를 지칭하는 용어들은 각각의 구성 요소들의 기능을 고려하여 명명된 것이므로, 본 발명의 기술적 구성요소를 한정하는 의미로 이해되어서는 안 될 것이다.
도 1은 본 발명의 일실시예에 따른 스크립트 프로그램을 위한 보안 시스템의 구성을 도시하는 도면이다.
도 1에 도시된 바와 같이, 본 발명에 따른 스크립트 프로그램을 위한 보안 시스템은 프로그램 개발 장치(110), 보안 제공 장치(120) 및 사용자 단말 장치(130)를 포함한다.
프로그램 개발 장치(110)는 개발자가 애플리케이션 프로그램을 개발하기 위한 장치로, 애플리케이션 프로그램이 개발되면 유니티 엔진은 애플리케이션 소스 코드들을 컴파일되어 바이너리 코드를 생성하고, 생성된 바이너리 코드에 필수 리소스 라이브러리 등을 포함하여 실행 패키지, 예컨대 유니티 패키지를 생성한다.
보안 제공 장치(120)는 프로그램 개발 장치(110)에서 생성된 유니티 패키지에 대한 보안을 제공하기 위한 장치로, 프로그램 개발 장치(110)에서 생성된 유니티 패키지가 업로드되면, 공통 중간 언어 라이브러리인 Assembly-CSharp.dll를 추출하고 추출된 Assembly-CSharp.dll를 이용하여 메소드들에 대해 암호화를 수행하고 이후 다시 보안 적용 유니티 패키지를 생성한다.
사용자 단말 장치(130)는 프로그램, 예를 들어 게임 프로그램이 실행되는 장치로, 프로그램 개발 장치(110) 또는 보안 제공 장치(120)로부터 보안 적용 유니티 패키지를 다운로드받아 게임 프로그램을 실행할 수 있다.
도 1에서는 예를 들어 프로그램 개발 장치(110)와 보안 제공 장치(120)가 각각 별도의 장치로 도시되어 있으나, 이에 한정하는 것은 아니며, 또한 프로그램 개발 장치(110), 보안 제공 장치(120) 및 사용자 단말 장치(130)는 유무선 통신망을 통해 연결될 수 있다.
도 2는 도 1의 프로그램 개발 장치에서의 통상의 유니티 패키지 생성 방법의 예를 도시하는 도면이고, 도 3은 본 발명의 일실시예에 따른 보안 속성의 적용한 유니티 패키지 생성 방법의 예를 도시하는 도면이다.
도 2에 도시된 바와 같이, 유니티 엔진은 스크립트 파일들, 예를 들어, GameScript1.cs, GameScript2.cs, GameScript2.cs, … GameScriptN.cs를 컴파일하여 공통 중간 언어의 Assembly-CSharp.dll 라이브러리를 생성한다. 그리고 유니티 엔진은 생성된 Assembly-CSharp.dll에 유니티 엔진 관련 리소스 라이브러리들, 예를 들어 Mono.Security.dll, UnityEngine.dll, libmono.so 및 libunity.so 등을 포함하여 유니티 패키지를 생성한다. 그리고 본 발명의 일실시예에 따른 보안 속성의 적용한 유니티 패키지 생성 방법의 예가 도 3에 도시되어 있다. 메소드 start() 위에 기재된 AppSealingEncryption이 메소드 start()에 대한 보안 속성을 나타낸다.
도 4는 도 1의 보안 제공 장치의 블록도를 도시하는 도면이고, 도 5는 도 4의 보안 제공 장치의 동작을 설명하기 위한 동작 설명도를 도시한 도면이다.
도 4에 도시된 바와 같이, 보안 제공 장치(120)는 공통 중간 언어 추출부(410), 텍스트 중간 언어 변환부(420), 프록시 메소드 추가부(430), 공통 중간 언어 생성부(440), 보안 중간 언어 생성부(450) 및 패키지 조합부(470)를 포함한다.
공통 중간 언어 추출부(410)는 프로그램 개발 장치(110)로부터 업로드된 유니티 패키지의 복수의 라이브러리들을 파서하여 공통 중간 언어 라이브러리인 Assembly-CSharp.dll를 추출한다. 텍스트 중간 언어 변환부(420)는 추출된 공통 중간 언어 라이브러리인 Assembly-CSharp.dll을 텍스트 중간 언어 라이브러리로 변환한다.
프록시 메소드 추가부(430)는 텍스트 중간 언어 변환부(420)에서 변환된 텍스트 중간 언어 라이브러리로 변환된 메소드들을 위한 프록시 메소드를 생성하여 추가하고, 그리고 원본 메소드의 바디 시작과 바디 종료 부분에 각각의 태그를 추가한다. 한편, 프록시 메소드 추가부(430)는 텍스트 중간 언어 변환부(420)에서 변환된 텍스트 중간 언어 라이브러리로 변환된 메소드들 중에서 도 3과 표시된 보안 속성이 적용된 메소드들에 대해서만 자동적으로 프록시 메소드를 생성하여 추가할 수 있다.
공통 중간 언어 생성부(440)는 프록시 메소드 추가부(430)에서 추가된 프록시 메소드와 시작 태그와 종료 태그가 추가된 원본 메소드를 조합하여 다시 공통 중간 언어 라이브러리인 Assembly-CSharp.dll를 생성한다.
보안 중간 언어 생성부(450)는 공통 중간 언어 라이브러리인 Assembly-CSharp.dll에 보안을 적용하기 위한 구성으로, 보안 라이브러리(452)인 libsealing.so를 포함한다.
보안 라이브러리(452)는 메소드의 암호화를 위한 암호화 파트(454)와, 암호화된 메소드의 복호화를 위한 복호화 파트(456)와, 라이브러리의 무결성 검증을 위한 해시 레지스트리 파트(458)와, 디버거(debugger)를 이용한 게임 프로그램을 분석을 방지하기 위한 안티디버깅 파트(460)와, 게임 프로그램의 메모리 상태를 덤프하는 것을 방지하기 위한 안티덤프 파트(462)를 포함할 수 있다.
보안 중간 언어 생성부(450)는 암호화 파트(454)를 이용하여 공통 중간 언어 라이브러리인 Assembly-CSharp.dll의 원본 메소드의 시작 태그와 종료 태그를 이용하여 메소드 바디를 암호화하고, 해시 레지스트리 파트(456)를 이용하여 무결성 검증을 위한 해시 레지스트리를 생성한다.
보안 중간 언어 생성부(450)는 즉, 보안 라이브러리(452)인 libsealing.so의 암호화 기능을 이용하여 원본 메소드들의 시작 태그와 종료 태그 사이의 공통 중간 언어를 암호화한다. 공통 중간 언어의 암호화 기술은 DES, AES, RSA 등과 같은 암호화 알고리즘을 포함할 수 있다. 또한, 보안 중간 언어 생성부(450)는 해시 함수(MD5, SHA, Checksum 등)를 이용하여 프로그램의 실행에 필요한 필수 리소스 라이브러리 등에 대해 해시 레지스트리를 생성할 수 있다.
패키지 조합부(470)는 보안 제공 장치(120)에서 보안이 적용되어 생성된 보안 적용 공통 중간 언어 라이브러리인 Assembly-CSharp.dll 및 보안 라이브러리(452)인 libsealing.so에 필수 리소스 라이브러리들을 포함하여 다시 유니티 패키지를 재조합한다.
도 6은 도 1의 사용자 단말 장치의 블록도를 도시하는 도면이다.
도 6에 도시된 바와 같이, 사용자 단말 장치(130)는 CPU(610), 메인 메모리 유닛(620), 디스플레이 유닛(630), 보조 기억 유닛(640), 입력 유닛(650) 및 네트워크 유닛(660)을 포함할 수 있다.
보조 메모리 유닛(640)에는 프로그램 개발 장치(110) 또는 보안 제공 장치(120)로부터 네트워크 유닛(660)을 통해 다운로드된 보안 적용 실행 패키지가 저장된다. 실행 패키지, 예컨대 게임 프로그램의 패키지의 실행이 요청되면, CPU(610)는 보조 메모리 유닛(640)에 저장된 실행 패키지를 메인 메모리 유닛(620)에 로드한다. 게임 프로그램의 로직이 실행되면서 해당 메소드를 요청하면 CPU(610)는 메인 메모리 유닛(620)에 로드된 실행 패키지로부터 해당 메소드를 실행하고, 그 실행 결과를 디스플레이 유닛(630)에 표시한다. 게임 프로그램은 입력 유닛(650)이나 네트워크 유닛(660)을 통해 새로운 값을 입력 받을 수도 있다.
본 발명의 실시예에 따른 사용자 단말 장치(130)는 개인용 컴퓨터(PC: Personal Computer), 노트북 컴퓨터, 태블릿, 개인 휴대 단말기(PDA: Personal Digital Assistant), 게임 콘솔, 휴대형 멀티미디어 플레이어(PMP: Portable Multimedia Player), 플레이스테이션 포터블(PSP: PlayStation Portable), 무선 통신 단말기(Wireless Communication Terminal), 스마트폰(Smart Phone), TV, 미디어 플레이어 등과 같은 사용자 단말기일 수 있다. 본 발명의 실시예에 따른 사용자 단말 장치(130)는 응용 서버와 서비스 서버 등 서버 단말기일 수 있다. 본 발명의 실시예에 따른 사용자 단말 장치(130)는 각기 (i) 각종 기기 또는 유무선 통신망과 통신을 수행하기 위한 통신 모뎀 등의 통신장치, (ii) 프로그램을 실행하기 위한 데이터를 저장하기 위한 메모리, (iii) 프로그램을 실행하여 연산 및 제어하기 위한 마이크로프로세서 등을 구비하는 다양한 장치를 의미할 수 있다. 적어도 일 실시예에 따르면, 메모리는 램(Random Access Memory: RAM), 롬(Read Only Memory: ROM), 플래시 메모리, 광디스크, 자기 디스크, 솔리드 스테이트 디스크(Solid State Disk: SSD) 등의 컴퓨터로 판독 가능한 기록/저장매체일 수 있다. 적어도 일 실시예에 따르면, 마이크로프로세서는 명세서에 기재된 동작과 기능을 하나 이상 선택적으로 수행하도록 프로그램될 수 있다.
도 7은 도 6의 사용자 단말 장치의 동작을 설명하기 위한 동작 설명도를 도시한 도면이다.
사용자 단말 장치(130)에서 입력 유닛(650)을 통해 애플리케이션, 예컨대 게임 프로그램이 실행되면, CPU(610)는 게임 프로그램을 메인 메모리 유닛(620)으로 로딩한다. 메인 메모리 유닛(620)에 로딩된 게임 프로그램이 실행되면 게임 프로그램의 실행에 따라 보안 라이브러리(452)가 로딩된다.
상술한 바와 같이, 보안 라이브러리(452)에는 메소드의 암호화를 위한 암호화 파트(454)와, 암호화된 메소드의 복호화를 위한 복호화 파트(456)와, 라이브러리의 무결성 검증을 위한 해시 레지스트리 파트(458)와, 디버거(debugger)를 이용한 게임 프로그램을 분석을 방지하기 위한 안티디버깅 파트(460)와, 게임 프로그램의 메모리 상태를 덤프하는 것을 방지하기 위한 안티덤프 파트(462)가 내포되어 있다.
보안 라이브러리(452)는 해시 레지스트리 파트(458)를 이용하여 먼저 자신의 라이브러리에 대한 무결성 검증을 수행한다. 그리고 보안 라이브러리(452)는 유니티 엔진의 주요 라이브러리들, 예를 들어 libmono.so, Mono.Security.dll 및 UnityEngine.dll에 대해 해시 체크를 수행하여 무결성 검증을 수행한다. 보안 라이브러리(452)는 이어서 안티디버깅 및 안티덤프 기능을 수행할 수 있다.
게임 프로그램의 게임 로직은 실행 엔진 라이브러리인 libmono.so에 의해 실행되는데, 보안이 적용된 공통 중간 언어 라이브러리브인 Assembly-CSharp.dll의 메소드가 호출되면, 우선 실행 엔진 라이브러리인 libmono.so는 보안이 적용된 공통 중간 언어 라이브러리브인 Assembly-CSharp.dll를 메인 메모리 유닛(620)에 로딩한다. 그리고 실행 엔진 라이브러리인 libmono.so는 보안이 적용된 메소드에 대응되는 프록시 메소드를 호출한다.
프록시 메소드는 보안 라이브러리(452)의 복호화 파트(456)를 이용하여 암호화된 원본 메소드의 바디에 대한 복호화를 실행하게 한다. 프록시 메소드는 복호화된 원본 메소드를 읽어 메소드를 실행한다. 보안 라이브러리(452)는 원본 메소드의 실행이 종료되면, 복호화된 원본 메소드에 대한 암호화를 실행한다.
도 8은 본 발명의 일실시예에 따른 보안 제공 장치에서의 스크립트 프로그램을 위한 보안 제공 방법의 흐름도를 도시하는 도면이다.
보안 제공 장치(120)는 프로그램 개발 장치(110)에서 생성된 유니티 패키지가 업로드하여 저장한다(S802). 공통 중간 언어 추출부(410)는 프로그램 개발 장치(110)로부터 업로드된 유니티 패키지로부터 라이브러리들을 파서하여 공통 중간 언어 라이브러리인 Assembly-CSharp.dll를 추출한다(S804). 텍스트 중간 언어 변환부(420)는 공통 중간 언어 추출부(410)에서 추출된 공통 중간 언어 라이브러리인 Assembly-CSharp.dll을 텍스트 중간 언어 라이브러리로 변환한다(S806).
프록시 메소드 추가부(430)는 텍스트 중간 언어 변환부(420)에서 변환된 텍스트 중간 언어 라이브러리로 변환된 메소드들을 위한 프록시 메소드를 생성하여 추가하고, 그리고 원본 메소드의 시작과 종료 부분에 각각의 태그를 추가한다(S808). 공통 중간 언어 생성부(440)는 프록시 메소드 추가부(430)에서 추가된 프록시 메소드와 시작 태그와 종료 태그가 추가된 원본 메소드를 조합하여 다시 공통 중간 언어 라이브러리인 Assembly-CSharp.dll를 생성한다(S810).
보안 중간 언어 생성부(450)는 암호화 파트(454)를 이용하여 공통 중간 언어 라이브러리인 Assembly-CSharp.dll의 원본 메소드의 시작 태그와 종료 태그를 이용하여 메소드 바디를 암호화하고, 해시 레지스트리 파트(456)를 이용하여 무결성 검증을 위한 해시 레지스트리를 생성한다(S812). 패키지 조합부(470)는 보안 제공 장치(120)에서 보안이 적용되어 생성된 보안 적용 공통 중간 언어 라이브러리인 Assembly-CSharp.dll 및 보안 라이브러리(452)인 libsealing.so에 필수 리소스 라이브러리들을 포함하여 다시 유니티 패키지를 재조합한다(S814).
도 9는 본 발명의 다른 실시예에 따른 사용자 단말 장치에서의 스크립트 프로그램을 위한 보안 제공 방법의 흐름도를 도시하는 도면이다.
사용자 단말 장치(130)는 네트워크 유닛(660)을 통해 프로그램 개발 장치(110) 또는 보안 제공 장치(120)로부터 보안 적용 실행 패키지 다운로드하여 보조 메모리 유닛(640)에 저장한다(S902). 그리고 사용자 단말 장치(130)에서 입력 유닛(650)을 통해 애플리케이션, 예컨대 게임 프로그램이 실행되면, CPU(610)는 게임 프로그램을 메인 메모리 유닛(620)으로 로딩한다(S904). 메인 메모리 유닛(620)에 로딩된 게임 프로그램이 실행되면 게임 프로그램의 실행에 따라 보안 라이브러리(452)가 로딩된다(S906).
보안 라이브러리(452)는 해시 레지스트리 파트(458)를 이용하여 먼저 자신의 라이브러리에 대한 무결성 검증을 수행한다(S908). 그리고 보안 라이브러리(452)는 유니티 엔진의 주요 라이브러리들, 예를 들어 libmono.so, Mono.Security.dll 및 UnityEngine.dll에 대해 해시 체크를 수행하여 무결성 검증을 수행한다. 보안 라이브러리(452)는 이어서 안티디버깅 및 안티덤프 기능을 수행할 수 있다(S910).
게임 프로그램의 게임 로직은 실행 엔진 라이브러리인 libmono.so에 의해 실행되는데, 보안이 적용된 공통 중간 언어 라이브러리브인 Assembly-CSharp.dll의 메소드가 호출되면, 우선 실행 엔진 라이브러리인 libmono.so는 보안이 적용된 공통 중간 언어 라이브러리인 Assembly-CSharp.dll를 메인 메모리 유닛(620)에 로딩한다(S912). 그리고 실행 엔진 라이브러리인 libmono.so는 보안이 적용된 메소드에 대응되는 프록시 메소드를 호출한다(S914).
프록시 메소드는 보안 라이브러리(452)의 복호화 파트(456)를 이용하여 암호화된 원본 메소드의 바디에 대한 복호화를 실행하게 한다(S916). 프록시 메소드는 복호화된 원본 메소드를 읽어 메소드를 실행한다(S918). 보안 라이브러리(452)는 원본 메소드의 실행이 종료되면, 복호화된 원본 메소드에 대한 암호화를 실행한다(S920).
이상에서 설명된 본 발명의 실시예들은 본 발명의 기술 사상을 예시적으로 보여준 것에 불과하며, 본 발명의 보호 범위는 이하 특허청구범위에 의하여 해석되어야 마땅할 것이다. 또한, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것인 바, 본 발명과 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
110: 프로그램 개발 장치 120: 보안 제공 장치
130: 사용자 단말 장치 410: 공통 중간 언어 추출부
420: 텍스트 중간 언어 변환부 430: 프록시 메소드 추가부
440: 공통 중간 언어 생성부 450: 보안 중간 언어 생성부
470: 패키지 조합부 610: CPU
620: 메인 메모리 유닛 630: 디스플레이 유닛
640: 보조 기억 유닛 650: 입력 유닛
660: 네트워크 유닛

Claims (17)

  1. 복수의 스크립트 파일들을 컴파일하여 생성된 중간 언어 라이브러리와 실행 엔진 라이브러리를 조합하여 생성된 실행 패키지가 저장되어 있는 보안 제공 장치에 있어서,
    상기 실행 패키지로부터 상기 중간 언어 라이브러리를 추출하는 중간 언어 추출부와,
    상기 중간 언어 추출부에서 추출된 중간 언어 라이브러리의 메소드에 대해 프록시 메소드를 생성하여 추가하고 또한 상기 프록시 메소드에 대응하는 원본 메소드의 바디 시작과 바디 끝에 각각 태그를 추가하는 프록시 메소드 추가부와, 및
    상기 프록시 메소드 추가부에서 추가된 원본 메소드의 시작 태그와 종료 태그를 이용하여 원본 메소드에 대한 보안을 제공하여 보안이 적용된 중간 언어 라이브러리를 생성하는 보안 중간 언어 생성부를 포함하는 것을 특징으로 하는 보안 제공 장치.
  2. 제1항에 있어서,
    상기 중간 언어 추출부에서 추출된 상기 중간 언어 라이브러리는 공통 중간 언어 라이브러리이고,
    상기 보안 중간 언어 생성부에서 제공한 보안은 원본 메소드에 대한 암호화를 수행하는 것을 특징으로 하는 보안 제공 장치.
  3. 제2항에 있어서,
    상기 중간 언어 추출부에서 추출된 공통 중간 언어 라이브러리를 텍스트 중간 언어 라이브러리로 변환하는 중간 언어 변환부와, 및
    상기 프록시 메소드 추가부에서 추가된 프록시 메소드와 상기 중간 언어 변환부에서 변환된 텍스트 중간 언어 라이브러리의 원본 메소드를 조합하여 다시 공통 중간 언어 라이브러리를 생성하는 공통 중간 언어 생성부를 더 포함하는 것을 특징으로 하는 보안 제공 장치.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 보안이 적용된 중간 언어 라이브러리, 상기 실행 엔진 라이브러리 및 상기 보안 중간 언어 생성부에서 제공된 보안 라이브러리를 조합하여 다시 패키지를 생성하는 패키지 조합부를 더 포함하는 것을 특징으로 하는 보안 제공 장치.
  5. 제4항에 있어서,
    상기 프록시 메소드 추가부는 상기 중간 언어 추출부에서 추출된 중간 언어 라이브러리의 메소드들 중 보안 속성이 적용된 메소드들에 대해서만 상기 프록시 메소드를 생성하여 추가하는 것을 특징으로 하는 보안 제공 장치.
  6. 복수의 스크립트 파일들을 컴파일하여 생성된 중간 언어 라이브러리와 실행 엔진 라이브러리를 조합하여 생성된 실행 패키지를 저장하는 단계와,
    상기 실행 패키지로부터 상기 중간 언어 라이브러리를 추출하는 단계와,
    상기 추출하는 단계에서 추출된 중간 언어 라이브러리의 메소드에 대해 프록시 메소드를 생성하여 추가하고 또한 상기 프록시 메소드에 대응하는 원본 메소드의 바디 시작과 바디 끝에 각각 태그를 추가하는 단계와, 및
    상기 추가하는 단계에서 추가된 원본 메소드의 시작 태그와 종료 태그를 이용하여 원본 메소드에 대한 보안을 제공하여 보안이 적용된 중간 언어 라이브러리를 생성하는 단계를 포함하는 것을 특징으로 하는 보안 제공 방법.
  7. 제6항에 있어서,
    상기 추출하는 단계에서 추출된 상기 중간 언어 라이브러리는 공통 중간 언어 라이브러리이고,
    상기 생성하는 단계에서 제공한 보안은 원본 메소드에 대한 암호화를 수행하는 것을 특징으로 하는 보안 제공 방법.
  8. 제7항에 있어서,
    상기 추출하는 단계에서 추출된 공통 중간 언어 라이브러리를 텍스트 중간 언어 라이브러리로 변환하는 단계와,
    상기 추가하는 단계에서 추가된 프록시 메소드와 상기 변환하는 단계에서 변환된 텍스트 중간 언어 라이브러리의 원본 메소드를 조합하여 다시 공통 중간 언어 라이브러리를 생성하는 단계를 포함하는 것을 특징으로 하는 보안 제공 방법.
  9. 제6항 내지 제8항 중 어느 한 항에 있어서,
    상기 보안이 적용된 중간 언어 라이브러리, 상기 실행 엔진 라이브러리 및 상기 생성하는 단계에서 제공된 보안 라이브러리를 조합하여 다시 패키지를 생성하는 단계를 더 포함하는 것을 특징으로 하는 보안 제공 방법.
  10. 제9항에 있어서,
    상기 추가하는 단계는 상기 추출하는 단계에서 추출된 중간 언어 라이브러리의 메소드들 중 보안 속성이 적용된 메소드들에 대해서만 상기 프록시 메소드를 생성하여 추가하는 것을 특징으로 하는 보안 제공 방법.
  11. 실행 엔진 라이브러리에서 실행 로직에 따라 보안 라이브러리를 로딩하는 단계와,
    상기 보안 라이브러리에서 해시 레지스트리를 이용하여 자신의 라이브러리에 대한 무결성을 검증하는 단계와,
    상기 실행 엔진 라이브러리에서 실행 로직에 따라 보안이 적용된 중간 언어 라이브러리의 메소드가 호출되면 대응하는 프록시 메소드를 호출하는 단계와,
    상기 프록시 메소드에서 상기 보안 라이브러리의 보안 해제 기능을 호출하면, 상기 보안 라이브러리에서 보안이 적용된 원본 메소드에 대해 보안을 해제하는 단계와, 및
    상기 중간 언어 라이브러리의 보안이 해제된 원본 메소드를 실행하는 단계를 포함하는 보안 제공 방법.
  12. 제11항에 있어서
    상기 호출하는 단계에서의 보안이 적용된 상기 중간 언어 라이브러리는 공통 중간 언어 라이브러리이고,
    상기 해제하는 단계에서의 보안 해제는 암호화된 원본 메소드에 대해 복호화를 수행하는 것을 특징으로 하는 보안 제공 방법.
  13. 제12항에 있어서,
    상기 보안 라이브러리에서 해시 레지스트리를 이용하여 상기 실행 엔진 라이브러리에 대한 무결성을 검증하는 단계를 더 포함하는 것을 특징으로 하는 보안 제공 방법.
  14. 제13항에 있어서,
    상기 보안 라이브러리에서 디버거(debugger)를 이용하여 게임 프로그램을 분석하는 것을 방지하기 위한 안티디버깅 기능을 수행하는 단계를 더 포함하는 것을 특징으로 하는 보안 제공 방법.
  15. 제13항에 있어서,
    상기 보안 라이브러리에서 게임 프로그램의 메모리 상태를 덤프하는 것을 방지하기 위한 안티덤프 기능을 수행하는 단계를 더 포함하는 것을 특징으로 하는 보안 제공 방법.
  16. 제12항 내지 제15항 중 어느 한 항에 있어서,
    상기 실행하는 단계가 종료되면, 상기 보안 라이브러리에서 상기 중간 언어 라이브러리의 복호화된 상기 원본 메소드에 대해 암호화를 수행하는 단계를 더 포함하는 것을 특징으로 하는 보안 제공 방법.
  17. 제16항에 있어서,
    상기 해제하는 단계에서 상기 프록시 메소드가 상기 보안 라이브러리의 복호화 기능을 호출하면서 상기 보안 라이브러리로 상기 원본 메소드의 시작 위치와 길이를 제공하는 것을 특징으로 하는 보안 제공 방법.
KR1020150057113A 2015-04-23 2015-04-23 스크립트 프로그램을 위한 보안 제공 장치 및 방법 KR101667774B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020150057113A KR101667774B1 (ko) 2015-04-23 2015-04-23 스크립트 프로그램을 위한 보안 제공 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150057113A KR101667774B1 (ko) 2015-04-23 2015-04-23 스크립트 프로그램을 위한 보안 제공 장치 및 방법

Publications (1)

Publication Number Publication Date
KR101667774B1 true KR101667774B1 (ko) 2016-10-19

Family

ID=57250718

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150057113A KR101667774B1 (ko) 2015-04-23 2015-04-23 스크립트 프로그램을 위한 보안 제공 장치 및 방법

Country Status (1)

Country Link
KR (1) KR101667774B1 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018194198A1 (ko) * 2017-04-20 2018-10-25 라인 가부시키가이샤 Pe 파일의 난독화 적용 여부의 탐지 및 보안성 평가를 위한 방법 및 시스템
KR20190060179A (ko) * 2017-11-24 2019-06-03 (주)잉카엔트웍스 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법
US10963563B2 (en) 2017-04-20 2021-03-30 Line Corporation Method and system for evaluating security of application

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040069059A (ko) * 2003-01-28 2004-08-04 삼성전자주식회사 가상 머신을 이용한 분산 처리 시스템 및 분산 처리방법
KR20040080845A (ko) * 2003-03-14 2004-09-20 주식회사 안철수연구소 코드 삽입 기법을 이용한 악성 스크립트 감지 방법
KR101143998B1 (ko) * 2011-09-20 2012-05-09 주식회사 안철수연구소 데이터베이스 보안 장치 및 방법
KR101471589B1 (ko) * 2013-08-22 2014-12-10 (주)잉카엔트웍스 공통중간언어 기반 프로그램을 위한 보안 제공 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040069059A (ko) * 2003-01-28 2004-08-04 삼성전자주식회사 가상 머신을 이용한 분산 처리 시스템 및 분산 처리방법
KR20040080845A (ko) * 2003-03-14 2004-09-20 주식회사 안철수연구소 코드 삽입 기법을 이용한 악성 스크립트 감지 방법
KR101143998B1 (ko) * 2011-09-20 2012-05-09 주식회사 안철수연구소 데이터베이스 보안 장치 및 방법
KR101471589B1 (ko) * 2013-08-22 2014-12-10 (주)잉카엔트웍스 공통중간언어 기반 프로그램을 위한 보안 제공 방법

Cited By (4)

* Cited by examiner, † Cited by third party
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
KR20190060179A (ko) * 2017-11-24 2019-06-03 (주)잉카엔트웍스 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법
KR102001046B1 (ko) * 2017-11-24 2019-07-17 (주)잉카엔트웍스 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법

Similar Documents

Publication Publication Date Title
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
JP5990654B2 (ja) アプリケーションコード難読化装置及びその方法
JP5996810B2 (ja) 自己書換え基盤のアプリケーションコード難読化装置及びその方法
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
CN106203006A (zh) 基于dex与so文件动态执行的Android应用加固方法
CN111143869B (zh) 应用程序包处理方法、装置、电子设备及存储介质
WO2016078130A1 (zh) 一种防逆向apk文件的动态加载方法
CN107273723B (zh) 一种基于so文件加壳的Android平台应用软件保护方法
JP6392446B2 (ja) クラウドベースのアプリケーションセキュリティサービスの提供方法及びシステム
CN104408337A (zh) 一种apk文件防逆向的加固方法
CN105022936A (zh) 一种类class文件加密解密方法和装置
CN109840400B (zh) 提供安全性的设备和方法以及针对通用中间语言执行安全性的设备和方法
KR101734663B1 (ko) 안드로이드 어플리케이션의 역공학 방지 방법 및 이를 수행하는 장치
KR101667774B1 (ko) 스크립트 프로그램을 위한 보안 제공 장치 및 방법
KR101863325B1 (ko) 역공학 방지 방법 및 장치
JP2008040853A (ja) アプリケーション実行方法およびアプリケーション実行装置
US11061998B2 (en) Apparatus and method for providing security and apparatus and method for executing security to protect code of shared object
JP6215468B2 (ja) プログラム保護装置

Legal Events

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

Payment date: 20190923

Year of fee payment: 4