KR101749209B1 - 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치 - Google Patents

애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치 Download PDF

Info

Publication number
KR101749209B1
KR101749209B1 KR1020150072056A KR20150072056A KR101749209B1 KR 101749209 B1 KR101749209 B1 KR 101749209B1 KR 1020150072056 A KR1020150072056 A KR 1020150072056A KR 20150072056 A KR20150072056 A KR 20150072056A KR 101749209 B1 KR101749209 B1 KR 101749209B1
Authority
KR
South Korea
Prior art keywords
application
executable file
loader
file
information
Prior art date
Application number
KR1020150072056A
Other languages
English (en)
Other versions
KR20160137222A (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 KR1020150072056A priority Critical patent/KR101749209B1/ko
Publication of KR20160137222A publication Critical patent/KR20160137222A/ko
Application granted granted Critical
Publication of KR101749209B1 publication Critical patent/KR101749209B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • 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]

Landscapes

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

Abstract

본 발명은 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치에 관한 것이다. 본 발명에 따르면, 원본 애플리케이션에서 소스 코드를 포함하는 원본 실행 파일을 추출하는 단계; 상기 원본 애플리케이션의 매니페스트(manifest) 정보를 상기 원본 실행 파일에 추가하여 새로운 실행 파일을 재생성하는 단계; 상기 재생성된 새로운 실행 파일을 암호화 알고리즘을 이용하여 암호화하는 단계; 및 상기 암호화된 새로운 실행 파일을 포함하고, 상기 원본 애플리케이션 실행시 상기 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성하는 단계를 포함하는 애플리케이션의 정보 은닉 방법이 제공된다. 본 발명에 따르면, 핵심 알고리즘을 은폐함으로써 저작권을 보호할 수 있다.

Description

애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치{METHOD AND APPARATUS FOR HIDING INFORMATION OF APPLICATION, AND METHOD AND APPARATUS FOR EXECUTING APPLICATION}
본 발명은, 애플리케이션의 정보 은닉 방법 및 애플리케이션의 정보 은닉 장치, 및 애플리케이션 실행 방법 및 애플리케이션 실행 장치에 관한 것이다.
스마트 폰 등의 다양한 모바일 기기 보급이 급속도로 증가하고 있고, 이들 기기에 저장된 각종 개인정보에 대한 불법적 접근을 노리는 악성 애플리케이션들로 인한 피해가 발생되고 있다.
위변조 애플리케이션 출현의 원인 중의 하나는 애플리케이션 실행파일의 디컴파일(decompile)이 쉽기 때문이다. 애플리케이션 디컴파일이 쉽게 되지 않도록 하기 위한 기술 중의 하나가 코드 난독화 기술이다.
디컴파일이란 이미 컴파일된 기계어나 어셈블러 부호 등으로부터 컴파일 전의 본래의 소스 코드를 추출하는 프로그램이다.
특히, 자바는 컴파일하면 JAR 확장자의 실행파일이 생성되고, 이를 JVM(Java Virtual Machine)이 해석하며, 안드로이드는 Dalvik VM(Dalvik Virtual Machine)이 APK(Android application package)파일의 압축을 해제하여 얻은 DEX(Dalvik Executable)파일을 실행파일로 한다.
디컴파일을 방어하기 위하여 코드 난독화 기술이 절실히 요구되고 있으므로, 이에 코드 난독화 기술을 제안하고자 한다.
본 발명은 상술한 문제점을 모두 해결하는 것을 목적으로 한다.
본 발명은, 안드로이드 애플리케이션의 디컴파일 방지를 위한 바이너리 암호화를 제공하는 것을 다른 목적으로 한다.
본 발명은, 핵심 알고리즘을 은폐하여 저작권을 보호하는 것을 또 다른 목적으로 한다.
상기한 바와 같은 본 발명의 목적을 달성하고, 후술하는 본 발명의 특징적인 효과를 실현하기 위한, 본 발명의 특징적인 구성은 하기와 같다.
일실시예에 따른, 애플리케이션의 정보 은닉 방법에 있어서, 애플리케이션의 정보 은닉 방법은, 원본 애플리케이션에서 소스 코드를 포함하는 원본 실행 파일을 추출하는 단계; 상기 원본 애플리케이션의 매니페스트(manifest) 정보를 상기 원본 실행 파일에 추가하여 새로운 실행 파일을 재생성하는 단계; 상기 재생성된 새로운 실행 파일을 암호화 알고리즘을 이용하여 암호화하는 단계; 및 상기 암호화된 새로운 실행 파일을 포함하고, 상기 원본 애플리케이션 실행시 상기 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성하는 단계를 포함할 수 있다.
일실시예에 따른, 애플리케이션의 정보 은닉 방법에 있어서, 애플리케이션의 정보 은닉 방법은, 원본 애플리케이션에서 소스 코드를 포함하는 원본 실행 파일을 추출하는 단계; 상기 원본 애플리케이션의 매니페스트(manifest) 정보를 상기 원본 실행 파일에 추가하여 새로운 실행 파일을 재생성하는 단계; 상기 재생성된 새로운 실행 파일을 암호화 알고리즘을 이용하여 암호화하는 단계; 및 상기 암호화된 새로운 실행 파일을 포함하고, 로더 원본 애플리케이션 실행시 상기 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성하는 단계를 포함할 수 있다.
다른 실시예에 따른, 애플리케이션의 정보 은닉 방법에 있어서, 상기 원본 실행 파일을 추출하는 단계는, 압축 알고리즘을 이용하여 상기 원본 애플리케이션을 압축 해제하여 원본 실행 파일을 추출하는 것을 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션의 정보 은닉 방법에 있어서, 상기 새로운 실행 파일을 재생성하는 단계는, 상기 매니페스트 정보 중 일부 정보와 관련된 코드를 상기 새로운 실행 파일의 클래스에 추가하여 상기 새로운 실행 파일을 재생성하는 것을 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션의 정보 은닉 방법에 있어서, 상기 로더 애플리케이션을 생성하는 단계는, 상기 일부 정보를 상기 매니페스트 정보에서 삭제하고 로더 애플리케이션을 생성하는 것을 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션의 정보 은닉 방법에 있어서, 상기 로더 애플리케이션을 생성하는 단계는, 상기 암호화된 새로운 실행 파일을 상기 로더 애플리케이션의 데이터 영역 폴더에 저장하고, 상기 암호화된 새로운 실행 파일을 복호화하고, 상기 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성하는 것을 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션의 정보 은닉 방법에 있어서, 상기 로더 애플리케이션을 생성하는 단계는, 상기 복호화된 새로운 실행 파일을 로드하고 자바 리플렉션을 이용하여 상기 로드한 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성하는 것을 포함할 수 있다.
일실시예에 따른, 애플리케이션 실행 방법에 있어서, 애플리케이션 실행 방법은, 난독화된 실행 파일을 복호화하기 위한 키를 추출하는 단계; 상기 추출된 키를 이용하여 상기 난독화된 실행 파일을 복호화하는 단계; 및 상기 복호화된 실행 파일을 로더 애플리케이션의 폴더에 저장하는 단계;를 포함할 수 있다.
다른 실시예에 따른, 애플리케이션 실행 방법에 있어서, 애플리케이션 실행 방법은, 상기 로더 애플리케이션의 폴더에 저장된 복호화된 실행 파일을 클래스 로더를 이용하여 동적 로딩하는 단계를 더 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션 실행 방법에 있어서, 상기 키를 추출하는 단계는, 상기 난독화된 실행 파일을 포함하는 애플리케이션의 폴더의 파일에서 암호키를 추출하는 것을 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션 실행 방법에 있어서, 상기 복호화하는 단계는, 상기 복호화된 실행 파일을 체크하여 복호화의 성공 여부를 판단하여, 복호화 실패시 자바 코드의 예외 핸들링을 이용하여 다시 상기 난독화된 실행 파일을 복호화하는 것을 포함할 수 있다.
일실시예에 따른, 애플리케이션의 정보 은닉 장치에 있어서, 원본 애플리케이션에서 소스 코드를 포함하는 원본 실행 파일을 추출하는 원본 실행 파일 추출부; 상기 원본 애플리케이션의 매니페스트(manifest) 정보를 상기 원본 실행 파일에 추가하여 새로운 실행 파일을 재생성하는 실행 파일 재생성부; 상기 재생성된 새로운 실행 파일을 암호화 알고리즘을 이용하여 암호화하는 암호화부; 및 상기 암호화된 새로운 실행 파일을 포함하고, 상기 원본 애플리케이션 실행시 상기 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성하는 로더 애플리케이션 생성부를 포함할 수 있다.
일실시예에 따른, 애플리케이션의 정보 은닉 장치에 있어서, 원본 애플리케이션에서 소스 코드를 포함하는 원본 실행 파일을 추출하는 원본 실행 파일 추출부; 상기 원본 애플리케이션의 매니페스트(manifest) 정보를 상기 원본 실행 파일에 추가하여 새로운 실행 파일을 재생성하는 실행 파일 재생성부; 상기 재생성된 새로운 실행 파일을 암호화 알고리즘을 이용하여 암호화하는 암호화부; 및 상기 암호화된 새로운 실행 파일을 포함하고, 로더 애플리케이션 실행시 상기 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성하는 로더 애플리케이션 생성부를 포함할 수 있다.
다른 실시예에 따른, 애플리케이션의 정보 은닉 장치에 있어서, 상기 원본 실행 파일 추출부는, 압축 알고리즘을 이용하여 상기 원본 애플리케이션을 압축 해제하여 원본 실행 파일을 추출하는 것을 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션의 정보 은닉 장치에 있어서, 상기 실행 파일 재생성부는, 상기 매니페스트 정보 중 일부 정보와 관련된 코드를 상기 새로운 실행 파일의 클래스에 추가하여 상기 새로운 실행 파일을 재생성하는 것을 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션의 정보 은닉 장치에 있어서, 상기 로더 애플리케이션 생성부는, 상기 일부 정보를 상기 매니페스트 정보에서 삭제하여 로더 애플리케이션을 생성하는 것을 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션의 정보 은닉 장치에 있어서, 상기 로더 애플리케이션 생성부는, 상기 암호화된 새로운 실행 파일을 상기 로더 애플리케이션의 데이터 영역 폴더에 저장하고, 상기 암호화된 새로운 실행 파일을 포함하고, 상기 원본 애플리케이션 실행시 상기 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성하는 것을 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션의 정보 은닉 장치에 있어서, 상기 로더 애플리케이션 생성부는, 상기 암호화된 새로운 실행 파일을 상기 로더 애플리케이션의 데이터 영역 폴더에 저장하고, 상기 암호화된 새로운 실행 파일을 포함하고, 로더 애플리케이션 실행시 상기 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성하는 것을 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션의 정보 은닉 장치에 있어서, 상기 로더 애플리케이션 생성부는, 상기 복호화된 새로운 실행 파일을 로드하고 자바 리플렉션을 이용하여 상기 로드한 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성하는 것을 포함할 수 있다.
일실시예에 따른, 애플리케이션 실행 장치에 있어서, 애플리케이션 실행 장치는, 난독화된 실행 파일을 복호화하기 위한 키를 추출하는 키 추출부; 상기 추출된 키를 이용하여 상기 난독화된 실행 파일을 복호화하는 복호화부; 및 상기 복호화된 실행 파일을 로더 애플리케이션의 폴더에 저장하는 파일 폴더 저장부;를 포함할 수 있다.
다른 실시예에 따른, 애플리케이션 실행 장치에 있어서, 애플리케이션 실행 장치는, 상기 로더 애플리케이션의 폴더에 저장된 복호화된 실행 파일을 클래스 로더를 이용하여 동적 로딩하는 동적 로딩부를 더 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션 실행 장치에 있어서, 상기 키 추출부는, 상기 난독화된 실행 파일을 포함하는 애플리케이션의 폴더의 파일에서 암호키를 추출하는 것을 포함할 수 있다.
또 다른 실시예에 따른, 애플리케이션 실행 장치에 있어서, 상기 복호화부는, 상기 복호화된 실행 파일을 체크하여 복호화의 성공 여부를 판단하여, 복호화 실패시 자바 코드의 예외 핸들링을 이용하여 다시 상기 난독화된 실행 파일을 복호화하는 것을 포함할 수 있다.
본 발명은, 자바 리플렉션(Java Reflection)과 DEX 동적 로딩으로 은닉한 DEX를 로딩 및 실행할 수 있다. 그러므로, 본 발명은, 안드로이드 애플리케이션의 디컴파일 방지를 위한 바이너리 암호화를 할 수 있는 효과가 있다.
본 발명은, 핵심 알고리즘을 은폐할 수 있다. 그러므로, 본 발명은, 프로그램 제작자의 저작권 보호가 가능하다는 효과가 있다.
본 발명은, 한 회로 파일 전체 복호화를 할 수 있다. 그러므로, 본 발명은, 복호화 속도가 빠르고, 완전한 복호화 가능성이 높다는 효과가 있다.
도 1은 본 발명의 일실시예에 따른 애플리케이션의 정보 은닉 방법으로서, 애플리케이션 구조를 나타내는 것이다.
도 2는 본 발명의 일실시예에 따른 애플리케이션의 정보 은닉 방법을 나타내는 흐름도이다.
도 3은 본 발명의 일실시예에 따른 애플리케이션의 정보 은닉 방법을 나타내는 것이다.
도 4는 본 발명의 일실시예에 따른 애플리케이션의 정보 은닉 방법을 도시한 것이다.
도 5는 본 발명의 일실시예에 따른 애플리케이션의 정보 은닉 방법으로서 트리플 DES를 이용하는 것을 나타내는 것이다.
도 6은 본 발명의 일실시예에 따른 애플리케이션 실행 방법을 나타내는 흐름도이다.
도 7은 본 발명의 일실시예에 따른 애플리케이션 실행 방법을 나타내는 것이다.
도 8은 본 발명의 일실시예에 따른 애플리케이션의 정보 실행 방법의 흐름을 나타내는 것이다.
도 9는 본 발명의 일실시예에 따른 애플리케이션 은닉 장치를 나타내는 블록도이다.
도 10은 본 발명의 일실시예에 따른 애플리케이션 실행 장치를 나타내는 블록도이다.
이하, 본 발명의 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 본 발명의 일실시예에 따른 애플리케이션의 정보 은닉 방법으로서, 애플리케이션 구조를 나타내는 것이다.
일실시예에 따르면, 애플리케이션은 안드로이드 애플리케이션이 될 수 있으나, 이에 한정되지는 않는다. 이때, 안드로이드 애플리케이션은 자바 프로그래밍 언어로 작성될 수 있다. 또한, 애플리케이션은 안드로이드 패키지(APK)가 될 수 있다.
일실시예에 따르면, 애플리케이션은 zip 알고리즘으로 압축된 파일 형태와 같은 형태가 될 수 있다. 이때, 애플리케이션의 정보 은닉 장치는, 애플리케이션을 zip 알고리즘으로 압축해제를 하여, 크게 DEX 파일(110), resources.arsc(120), 컴파일 필요 없는 리소스(130), AndroidManifest.xml(140)을 포함하여 애플리케이션의 요소를 획득할 수 있다. 애플리케이션의 정보 은닉 장치는, 컴퓨팅 디바이스일 수도 있으며, 메모리, 데이터 송수신기, 프로세서 중 적어도 하나를 포함하여 구성될 수도 있으며, 전자 회로, 전기 회로, 집적 회로, 전자 소자, 자기 소자 중 적어도 하나를 포함하여 구성될 수도 있으나, 이에 한정되지는 않는다. DEX 파일(110)은 소스 코드가 포함된DEX 파일이고 resources.arsc(120)는 컴파일된 리소스 파일일 수 있다. 컴파일 필요 없는 리소스(130)는 컴파일할 필요가 없는 리소스 파일이고, AndroidManifest.xml(140)는 애플리케이션 실행에 필요한 정보들이 있는 파일일 수 있다.
안드로이드 애플리케이션은 암호로 서명될 수 있으나, 보안성을 높이지는 못한다. 하지만, 안드로이드 애플리케이션의 개발자를 확인하거나 구분하는데 사용될 수 있다. 안드로이드 애플리케이션을 실행하기 위한 요소는 Dalvik 바이트코드, Dalvik Virtual Machine(DVM), Native Code, 안드로이드 애플리케이션 Framework의 4가지로 구성될 수 있다. DVM은 Dalvik 바이트코드를 읽어서 실행하고, Native Code의 함수를 호출할 수 있다. Native Code는 라이브러리 요청에 의해 DVM이 아닌 프로세서에서 직접 실행될 수 있다. 안드로이드 애플리케이션의 Framework는 운영체제의 시스템 운영과 애플리케이션의 상호 작용을 위한 API와 같은 기반을 제공할 수 있다.
일실시예에 따르면, 애플리케이션의 정보 은닉 장치는, 암호화할 원본 애플리케이션의 DEX 파일 전체와 Manifest 일부를 암호화할 수 있고, 애플리케이션 실행 장치는, 원본 애플리케이션의 실행 형태를 그대로 복원할 수 있다. 이때, 애플리케이션의 정보 은닉 장치는, 자바 리플렉션을 활용하여 수동으로 프로세스에 클래스를 등록할 수 있다.
안드로이드는 Zygote를 통해 프로세스를 관리할 수 있다. 모든 안드로이드 애플리케이션의 액티비티와 클래스는 Zygote에 의해 fork(생성)된 프로세스 위에서 동작할 수 있다. 이때, 프로세스를 fork할 때 애플리케이션의 실행요청이 담긴 Binder IPC를 받는 액티비티 관리자는 액티비티 스레드라고 명명되는 표준 클래스를 사용할 수 있다. 표준 클래스는 시스템의 리눅스 프로세스와 애플리케이션을 묶는(binding) 작업을 수행할 수 있다.
안드로이드의 애플리케이션 계층에서는, 프로세스 생성 과정을 거친 후 실제 실행이 가능하도록 액티비티 스레드 클래스를 호출하고 Instrumentation 정보 등록을 할 수 있다. 이때, 클래스 기재 후 실행중인 안드로이드 시스템과 기재한 클래스의 상호작용을 위해 Instrumentation 형태의 클래스가 생성된 후 LoadedApk 클래스의 makeApplication이 호출되어 등록될 수 있다. 리플렉션 기법으로 액티비티 스레드에 등록된 애플리케이션 정보와 등록한 Instrumentation 정보를 이용하여 애플리케이션 초기화 설정이 될 수 있다.
일실시예에 따르면, 애플리케이션의 정보 은닉 장치는 클래스가 로드될 때 리플렉션 기법으로 안드로이드 액티비티 스레드에 임의의 애플리케이션 정보를 등록할 클래스를 생성할 수 있다. 또한, 애플리케이션의 정보 은닉 장치는 로더 애플리케이션에서 로드한 DEX의 원본 애플리케이션 정보를 담고 있는 클래스와 액티비티 스레드의 애플리케이션 바인딩 데이터로부터 임의대로 실행하고자 하는 클래스를 기재할 수 있는 엑티비티 스레드 내부의 공간을 할당할 수 있다. 이 공간은 애플리케이션의 정보가 있다. 이를 활용하여 클래스 네임 필드에 사용하고자 하는 클래스의 정보를 임의대로 기재할 수 있다. 애플리케이션의 정보 은닉 장치는, 리플렉션 기법을 이용하여 애플리케이션 정보가 저장된 액티비티 스레드 공간에 리소스 정보를 등록하여 차후 은닉된 DEX에서도 내부 리소스 영역에 접근하여 활용할 수 있는 여지를 제공할 수 있다.
또한, 일실시예에 따르면, 애플리케이션 실행 장치는, 안드로이드 시스템에서 애플리케이션을 실행할 때 수행하는 일련의 과정 중에서 액티비티 스레드 클래스를 이용하여 애플리케이션 정보를 등록하고 실행하는 시스템의 기본 동작을 자바 리플렉션을 활용하여 개발자가 임의대로 수행하도록 구현할 수 있다. 애플리케이션 실행 장치는, 컴퓨팅 디바이스일 수도 있으며, 메모리, 데이터 송수신기, 프로세서 중 적어도 하나를 포함하여 구성될 수도 있으며, 전자 회로, 전기 회로, 집적 회로, 전자 소자, 자기 소자 중 적어도 하나를 포함하여 구성될 수도 있으나, 이에 한정되지는 않는다.
도 2는 본 발명의 일실시예에 따른 애플리케이션의 정보 은닉 방법을 나타내는 흐름도이다.
일실시예에 따른, 애플리케이션의 정보 은닉 장치가 수행하는 애플리케이션의 정보 은닉 방법은 하기와 같은 단계를 포함하여 구성될 수 있다.
단계(S201)에서, 애플리케이션의 정보 은닉 장치는, 원본 애플리케이션에서 소스 코드를 포함하는 원본 실행 파일을 추출할 수 있다. 이때, 애플리케이션의 정보 은닉 장치는, 압축 알고리즘을 이용하여 원본 애플리케이션을 압축 해제하여 원본 실행 파일을 추출할 수 있다.
단계(S202)에서, 애플리케이션의 정보 은닉 장치는, 원본 애플리케이션의 매니페스트(manifest) 정보를 원본 실행 파일에 추가하여 새로운 실행 파일을 재생성할 수 있다. 구체적으로, 애플리케이션의 정보 은닉 장치는, 매니페스트 정보 중 일부 정보와 관련된 코드를 새로운 실행 파일의 클래스에 추가하여 새로운 실행 파일을 재생성할 수 있다.
단계(S203)에서, 애플리케이션의 정보 은닉 장치는, 재생성된 새로운 실행 파일을 암호화 알고리즘을 이용하여 암호화할 수 있다.
단계(S204)에서, 애플리케이션의 정보 은닉 장치는, 암호화된 새로운 실행 파일을 포함하고, 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성할 수 있다. 물론, 애플리케이션의 정보 은닉 장치는, 원본 애플리케이션 실행시 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성할 수 있다. 또한, 애플리케이션의 정보 은닉 장치는, 로더 애플리케이션 실행시 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성할 수도 있다. 이때, 애플리케이션의 정보 은닉 장치는, 일부 정보를 매니페스트 정보에서 삭제하여 로더 애플리케이션을 생성할 수 있다.
또한, 애플리케이션의 정보 은닉 장치는, 암호화된 새로운 실행 파일을 로더 애플리케이션의 데이터 영역 폴더에 저장하고, 암호화된 새로운 실행 파일을 복호화하고, 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수 있다. 물론, 애플리케이션의 정보 은닉 장치는, 로더 애플리케이션이 복호화된 새로운 실행 파일을 포함하고, 로더 애플리케이션이 복호화된 새로운 실행 파일을 실행할 수 있도록 로더 애플리케이션을 생성할 수 있다. 또한, 애플리케이션의 정보 은닉 장치는, 원본 애플리케이션 실행시 로더 애플리케이션이 복호화된 새로운 실행 파일을 실행할 수 있도록 로더 애플리케이션을 생성할 수 있다. 또한, 애플리케이션의 정보 은닉 장치는, 로더 애플리케이션 실행시 로더 애플리케이션이 복호화된 새로운 실행 파일을 실행할 수 있도록 로더 애플리케이션을 생성할 수 있다. 이때, 애플리케이션의 정보 은닉 장치는, 복호화된 새로운 실행 파일을 로드하고 자바 리플렉션을 이용하여 로드한 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수 있다. 물론, 애플리케이션의 정보 은닉 장치는, 복호화된 새로운 실행 파일을 로드하고 자바 리플렉션을 이용하여 로드한 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수 있다. 또한, 애플리케이션의 정보 은닉 장치는, 원본 애플리케이션 실행시 복호화된 새로운 실행 파일을 로드하고 자바 리플렉션을 이용하여 로드한 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수 있다. 또한, 애플리케이션의 정보 은닉 장치는, 로더 애플리케이션 실행시 복호화된 새로운 실행 파일을 로드하고 자바 리플렉션을 이용하여 로드한 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수도 있다.
일실시예에 따르면, 애플리케이션의 정보 은닉 장치는, 식별자 변환, 제어 흐름 변환, 문자열 암호화, API 은닉, 클래스 암호화 등의 기존 바이트코드 변환 형태의 난독화 기술을 이용하여 암호화할 수도 있으나, 바이트코드가 기록된 파일 전체를 암호화할 수 있다. 또한, 애플리케이션의 정보 은닉 장치는, 바이트코드 변환 형태의 기술을 이미 적용한 상태에서 애플리케이션의 정보 은닉 방법을 활용할 수도 있다.
일실시예에 따르면, 애플리케이션의 정보 은닉 장치는, 동적으로 암호화 된 파일을 생성하는 과정을 수행한 후 복호화 및 로드를 할 수도 있으나, 동적으로 암호화된 파일을 생성하는 과정 없이 코드를 난독화할 수 있다. 또한, 애플리케이션의 정보 은닉 장치는, 모든 DEX 파일 내부의 클래스를 암호화하고 복호화 루틴만 남김으로써 DEX 파일 구조 파악을 어렵게 할 수 있다.
또한, 애플리케이션의 정보 은닉 방법은, 암호키를 동적으로 생성되는 파일에 포함시켜서 활용할 수도 있으나, 생성된 키를 메모리상에서만 저장 및 활용하여 유출 가능성을 줄일 수도 있다. 또한, 애플리케이션의 정보 은닉 방법은, 기존 바이트코드 변환 형태의 난독화 기법이 적용된 DEX 파일의 복호화 진행시, DEX 파일 내부를 구분할 수도 있으나, 1회의 DEX 파일 전체 복호화 과정을 거치면 되므로 복호화 속도가 빠르다. 또한, 애플리케이션의 정보 은닉 방법은, 완전한 복호화 가능성이 높아지는 장점이 있다.
기존의 안드로이드 애플리케이션 암호화 기법은 바이트코드에 중점을 두고 있으므로, 암호화 및 복호화를 위한 알고리즘이 매우 복잡하고 구현이 어려우며 사용자가 체감할만한 실행 속도 저하가 발생한다.
일실시예에 따르면, 애플리케이션의 정보 은닉 방법은, 암호화하고자 하는 애플리케이션의 압축해제시 루트 디렉토리의 모든 클래스가 저장된 DEX 파일을 추출할 수 있다. 이때, 애플리케이션의 정보 은닉 방법은, 추출한 DEX 파일 자체를 암호화 및 복호화하므로 복호화 시간을 제외하고는 실행 속도가 원본 애플리케이션과 거의 같다. 또한, 애플리케이션의 정보 은닉 방법은, 암호화하려는 코드를 포함한 원본 애플리케이션과 암호화된 코드를 바탕으로 실행되는 로더 애플리케이션, Manifest정보를 포함한 클래스의 패키지 명이 같을 경우, DEX 파일 내부의 바이트코드의 특성을 고려할 필요도 없다.
또한, 일실시예에 따르면, 애플리케이션의 정보 은닉 장치는, 원본 애플리케이션의 실행 형태를 그대로 복원시켜 주어야 하므로 자바 리플렉션을 활용하여 수동으로 프로세스에 클래스를 등록할 수 있다. 또한, 애플리케이션의 정보 은닉 장치는, 원본 애플리케이션의 Manifest 정보에 기재된 행위가 로더 애플리케이션에서 진행되도록 만들기 위한 작업을 할 수도 있다.
도 3은 본 발명의 일실시예에 따른 애플리케이션의 정보 은닉 방법을 나타내는 것이다.
도 3을 참조하면, 애플리케이션의 정보 은닉 장치가 수행하는 애플리케이션의 정보 은닉 방법으로서, 암호화된 새로운 실행 파일을 포함하고, 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성하는 단계는 하기와 같은 단계를 포함하여 이루어질 수 있는 것을 알 수 있다.
단계(S301)에서, 애플리케이션의 정보 은닉 장치는, 암호화된 새로운 실행 파일을 로더 애플리케이션의 데이터 영역 폴더에 저장할 수 있다.
단계(S302)에서, 애플리케이션의 정보 은닉 장치는, 암호화된 새로운 실행 파일을 복호화하고, 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수 있다. 물론, 애플리케이션의 정보 은닉 장치는, 원본 애플리케이션 실행시 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수 있다. 또한, 애플리케이션의 정보 은닉 장치는, 로더 애플리케이션 실행시 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수도 있다.
도 4는 본 발명의 일실시예에 따른 애플리케이션의 정보 은닉 방법을 도시한 것이다.
일실시예에 따르면, 애플리케이션의 정보 은닉 장치가 수행하는, 애플리케이션의 정보 은닉 방법은, 바이트코드 중심의 안드로이드 애플리케이션 코드 난독화와 다르게 암호화하려는 애플리케이션 내부의 DEX 파일을 암호화할 수 있다. 또한, 애플리케이션의 정보 은닉 장치는, 암호화한 DEX 파일을 복호화하여 실행하는 로더 애플리케이션의 생성시 암호화한 DEX 파일을 리소스 파일로 애플리케이션 내부에 포함할 수 있다. 이때, 애플리케이션 실행 장치는, 로더 애플리케이션 실행시 런타임에서 동적으로 암호화된 애플리케이션 내부의 DEX 파일을 복호화 및 동적 로딩하고 필요한 경우 자바 리플렉션 기법으로 실행할 수 있다. 또한, 애플리케이션 실행 장치는, 원본 애플리케이션 실행시 런타임에서 동적으로 암호화된 애플리케이션 내부의 DEX 파일을 복호화 및 동적 로딩하고 필요한 경우 자바 리플렉션 기법으로 실행할 수도 있다.
또한, 일실시예에 따르면, 분석을 더욱 어렵게 하기 위하여, 애플리케이션의 정보 은닉 장치는, 원본 애플리케이션의 Manifest에 기재된 리시버, 서비스 컴포넌트의 인텐트, 인텐트 필터 정보를 삭제하고 나머지 리시버 컴포넌트 정보도 삭제할 수 있다.
안드로이드 환경에서는 서로 다른 애플리케이션의 상호 작용을 인텐트를 통해서 한다. 안드로이드 인텐트는 3가지로 나뉜다. 첫째, 명시적 인텐트는 같은 애플리케이션 내에 속해 있는 컴포넌트의 이름을 입력하여 직접 메시지 객체를 전달한다. 둘째, 인텐트 필터에서 액선, 카테고리, 데이터를 참고하여 해당되는 컴포넌트에게 인텐트를 전달하는 암시적 인텐트가 있다. 마지막으로 특정 이벤트 발생 시점에 모든 애플리케이션에 인텐트를 전달하여 각 애플리케이션의 리시버가 이벤트를 수신할 수 있는 브로드캐스트 인텐트가 있다. 안드로이드에서 인텐트 필터에 의한 컴포넌트 접근은 Manifest 설정으로 차단 또는 허용할 수 있다. 일반적으로 개발자들은 다른 애플리케이션의 접근을 막기 위해 컴포넌트 이름을 공개하지 않는다. 인텐트 필터에 의한 엑티비티 접근 과정은 하기와 같다.
단계(1)에서, 액티비티 A는 StartActivity로 통과하는 액션을 포함한 인텐트를 생성한다.
단계(2)에서, 안드로이드 시스템은 인텐트 필터를 이용하여 인텐트에 알맞은 모든 애플리케이션을 검색한다.
단계(3)에서, 안드로이드 시스템은 알맞은 액티비티 B의 onCreate() 메소드를 호출하고 인텐트로 이것을 통과시킨다.
인텐트 필터를 통해 여러 애플리케이션이 발생시킨 인텐트 중 자신이 받을 인텐트만을 받아서 처리하도록 되어있다. 이러한 과정을 거치지 않고 다른 애플리케이션의 자원을 사용하고자 할 경우 CONTEXT_IGNORE_SECURITY 설정으로 인증서를 무시하여 보호 시스템 우회가 필요하다.
일실시예에 따르면, 애플리케이션의 정보 은닉 장치는, 암호화할 원본 애플리케이션의 DEX 파일 내부에 새로운 클래스를 만들거나 기존 클래스에 삭제한 정보를 기재하여 원본 애플리케이션의 Manifest 실행 결과와 같거나 동등한 실행이 이루어지도록 할 수 있다.
일실시예에 따르면, 애플리케이션의 정보 은닉 장치는, 새롭게 클래스를 추가하여 Manifest 정보를 기록할 수 있다. 이때, 애플리케이션 실행 장치는, 로더 애플리케이션이 암호화된 DEX를 복호화하고 로드한 후에 자바 리플렉션으로 해당 클래스가 실행되도록 만들 수 있다.
또한, 일실시예에 따르면, 애플리케이션 정보 은닉 방법 또는 애플리케이션 실행 방법은 기존의 바이트코드 변환 방식의 난독화 기법들과 함께 활용할 수도 있다.
도 5는 본 발명의 일실시예에 따른 애플리케이션의 정보 은닉 방법으로서 트리플 DES를 이용하는 것을 나타내는 것이다.
도 5를 참조하면, 트리플(Triple) DES를 이용한 암호화 및 코드 은폐 방식을 알 수 있다.
일실시예에 따르면, 애플리케이션 정보 은닉 장치는, Single DES와 Double DES 알고리즘을 사용하여 암호화할 수도 있으나, TripleDES 알고리즘을 사용하여, 총 3번의 DES 연산으로 최종 암호문 값을 출력할 수 있다. 또한, 애플리케이션 실행 장치는, 복호화도 3번의 연산을 할 수 있다. 구체적으로, 애플리케이션 정보 은닉 장치는, DES를 이용하여 암호화, 복호화, 암호화 순서로 암호화를 진행하고, 애플리케이션 실행 장치는, DES로 복호화, 암호화, 복호화 순서로 복호화를 진행할 수 있다. 이때, 애플리케이션 정보 은닉 장치 또는 애플리케이션 실행 장치는, 각 단계마다 다른 키를 사용하여 세 개의 키를 사용할 수도 있고, 첫 번째와 세 번째 단계에서 같은 키를 사용하여 암호화함으로써 두 개의 키를 활용할 수도 있다.
일실시예에 따라서, 애플리케이션 정보 은닉 장치 및 애플리케이션 실행 장치는, 세 개의 키를 사용하는 Triple DES와 동적 로딩을 이용한 코드 은폐 방식을 이용할 수 있다. 안드로이드 애플리케이션은 주로 마켓을 통해 배포되며 각 단말기 제조사에 의해 맞춤화된 다양한 운영체제 환경에서 구동된다. 애플리케이션 정보 은닉 방법 또는 애플리케이션 실행 방법이 적용된 애플리케이션의 범용성을 마켓 등에서 자유롭게 배포할 수 있는 수준이 되도록 높일 수 있다. 예를 들면, 애플리케이션 정보 은닉 장치 및 애플리케이션 실행 장치는, 암호화된 DEX 파일을 복호화하는 키를 얻는 절차를 서버와 연결하거나 사용자에게 키 값을 입력 받는 등의 외부 입력 없이 독립적으로 수행할 수 있다.
또한, 일실시예에 따르면, 애플리케이션 정보 은닉 방법 및 애플리케이션 실행 방법은, 공격자가 리버싱 및 디버깅 등의 과정을 수행하여 키값을 찾아낼 수 없고, 복호화 키를 추측하지 못하도록, 동적 키 생성을 포함하는 복잡한 복호화 키 생성 과정을 포함할 수 있다. 또한, 애플리케이션 정보 은닉 방법 및 애플리케이션 실행 방법은, 공격자가 무차별 대입(Brute Force) 이외의 다른 방법으로 키를 획득하지 못하도록 공격 가능성을 줄이기 위해서, 키를 서로 다른 장소에 다른 방식으로 저장하여 키 값의 유출 가능성을 최소화할 수 있다.
일실시예에 따르면, 원본 애플리케이션인 APK 파일은 zip 압축 파일과 같은 형태를 가질 수 있다. 애플리케이션 정보 은닉 장치는 APK 파일을 zip 알고리즘으로 압축해제(501)할 수 있다.
이때, 애플리케이션 정보 은닉 장치는, 원본 애플리케이션으로서 암호화 대상인 APK 파일의 압축을 해제하면 classes.dex, AndroidManifest.xml과 그 밖의 리소스 파일을 획득할 수 있다.
다음으로, 애플리케이션 정보 은닉 장치는, 이벤트 처리 정보를 은닉하기 위해 획득한 AndroidManifest.xml의 정보에서 리시버, 서비스 컴포넌트의 인텐트, 인텐트 필터 정보와 나머지 리시버 컴포넌트 정보를 추출할 수 있다. 또한, 애플리케이션 정보 은닉 장치는, 추출한 정보를 포함한 class 파일을 생성(502)할 수 있다. 이때, 생성된 class 파일에 포함된 Manifest 정보는 이후(511) 만들어지는 로더 애플리케이션의 AndroidManifest.xml에서는 삭제될 수 있다.
다음으로, 애플리케이션 정보 은닉 장치는, 생성된 class 파일을 획득한 classes.dex 파일에 포함(503)시킬 수 있다.
다음으로, 애플리케이션 정보 은닉 장치는, 임의의 64비트 길이를 가진 키 스트링을 두 개 K1, K2를 생성(504)할 수 있다.
다음으로, 애플리케이션 정보 은닉 장치는, K1과 K2를 XOR 연산하여 3번째 키 K3를 생성(505)할 수 있다.
다음으로, 애플리케이션 정보 은닉 장치는, 높은 보안성을 위해 암호화 알고리즘으로 Triple DES를 사용(506)할 수 있다. 이때, Triple DES에는 56비트 키 3개가 필요하지만, 3개의 키는 각 64비트일 수도 있다.
예를 들면, 애플리케이션 정보 은닉 장치는, 실제로는 56비트만 필요하지만, 공격자에게 혼동을 주기 위하여 키 길이를 임의로 늘릴 수 있다. 애플리케이션 정보 은닉 장치는, 각 64비트의 키에서 필요한 상위 56비트를 잘라서 암복호화에 필요한 키를 얻을 수 있다. 애플리케이션 정보 은닉 장치는, 생성된 classes.dex 파일을 zip 형식으로 압축하고 Triple DES 알고리즘을 활용하여 암호화할 수 있다. 이때, 암호화된 파일은 분석가의 리버싱을 어렵게 하는 효과가 있다. 또한, 애플리케이션 정보 은닉 장치는, 판단에 따라서 Triple DES 대신 AES 등의 다른 암호 알고리즘을 이용할 수도 있다.
다음으로, 애플리케이션 정보 은닉 장치는, 암호화한 DEX 파일을 동적 로딩하여 원본 애플리케이션과 똑같이 실행할 수 있도록 만들어 주는 로더 애플리케이션을 생성할 수 있다. 또한, 애플리케이션 정보 은닉 장치는, 암호화된 DEX 파일을 로더 애플리케이션의 내부 데이터 영역 assets 폴더에 저장(507)할 수 있다.
다음으로, 애플리케이션 정보 은닉 장치는, 로더 애플리케이션의 소스 코드인 DEX 파일을 3개의 클래스를 포함하여 구성(508)할 수 있다. 예를 들면, 애플리케이션 정보 은닉 장치는, 로더 클래스, 복호화 클래스, 리플렉션 클래스를 DEX에 포함하도록 할 수 있다. 애플리케이션 정보 은닉 장치는, assets 폴더 안에 있는 암호화한 DEX 파일을 복호화하는 역할을 하는 복호화 클래스를 생성할 수 있다. 또한, 애플리케이션 정보 은닉 장치는, 복호화된 DEX 파일을 로드한 다음에 자바 리플렉션을 이용하여 원본 애플리케이션과 똑같이 로더 애플리케이션이 동작할 수 있도록 돕는 로더 클래스를 생성할 수도 있다. 또한, 애플리케이션 정보 은닉 장치는, 자바 리플렉션을 사용할 수 있도록 해주는 리플렉션 클래스를 생성할 수도 있다.
다음으로, 애플리케이션 정보 은닉 장치는, 애플리케이션 내부 데이터 영역 res 폴더에 저장된 로고 이미지 파일에 K3 키를 임베딩(Embedding)(509)할 수 있다.
다음으로, 애플리케이션 정보 은닉 장치는, assets 폴더에 K2를 BASE64로 인코딩하여 저장(510)할 수 있다. 이때, 남은 키는 동적으로 앞에서 얻은 2개의 키를 XOR하여 만들어지므로 파일로 저장되지 않는다.
다음으로, 애플리케이션 정보 은닉 장치는, 원본 애플리케이션의 동일한 Manifest 파일을 이용하여 생성된 클래스 내부에 저장된 정보가 삭제된 상태로서 로더 애플리케이션의 Manifest 파일을 업데이트하거나 생성할 수 있다.
도 6은 본 발명의 일실시예에 따른 애플리케이션 실행 방법을 나타내는 흐름도이다.
도 6을 참조하면, 애플리케이션 실행 장치가 수행하는 애플리케이션 실행 방법은 하기와 같은 단계를 포함하여 구성될 수 있다.
단계(S601)에서, 애플리케이션 실행 장치는, 난독화된 실행 파일을 복호화하기 위한 키를 추출할 수 있다. 이때, 애플리케이션 실행 장치는, 난독화된 실행 파일을 포함하는 애플리케이션의 폴더의 파일에서 암호키를 추출할 수 있다.
단계(S602)에서, 애플리케이션 실행 장치는, 추출된 키를 이용하여 난독화된 실행 파일을 복호화할 수 있다.
일실시예에 따르면, 애플리케이션 실행 장치는, 복호화된 실행 파일을 체크하여 복호화의 성공 여부를 판단하여, 복호화 실패시 자바 코드의 예외 핸들링을 이용하여 다시 난독화된 실행 파일을 복호화할 수 있다.
단계(S603)에서, 애플리케이션 실행 장치는, 복호화된 실행 파일을 로더 애플리케이션의 폴더에 저장할 수 있다.
단계(S604)에서, 애플리케이션 실행 장치는, 로더 애플리케이션의 폴더에 저장된 복호화된 실행 파일을 클래스 로더를 이용하여 동적 로딩할 수 있다.
도 7은 본 발명의 일실시예에 따른 애플리케이션 실행 방법을 나타내는 것이다.
도 7을 참조하면, 애플리케이션 실행 장치가 수행하는 애플리케이션 실행 방법으로서, 추출된 키를 이용하여 난독화된 실행 파일을 복호화하는 단계는 하기와 같은 단계를 포함하여 이루어질 수 있는 것을 알 수 있다.
단계(S701)에서, 애플리케이션 실행 장치는, 복호화된 실행 파일을 체크하여 복호화의 성공 여부를 판단할 수 있다.
단계(S702)에서, 애플리케이션 실행 장치는, 복호화 실패시 자바 코드의 예외 핸들링을 이용하여 다시 난독화된 실행 파일을 복호화할 수 있다.
도 8은 본 발명의 일실시예에 따른 애플리케이션의 정보 실행 방법의 흐름을 나타내는 것이다.
도 8을 참조하면, 런타임 과정의 개요로서 자바 리플렉션과 클래스 로더를 이용한 복호화 및 임의 코드 수행 방식을 알 수 있다.
안드로이드 애플리케이션은 루트 디렉토리의 DEX 파일에 모든 클래스가 저장되어 있고 애플리케이션 실행 즉시 한번에 로드된다.
일실시예에 따르면, 애플리케이션 실행 장치가 실행하는 애플리케이션은 원본 애플리케이션의 클래스 모두를 암호화한 파일을 포함하고 있다. 애플리케이션 실행 장치는, 암호화된 파일을 복호화하기 위한 코드가 담긴 DEX 파일의 클래스가 실행된 이후 암호화된 파일을 복호화할 수 있다. 다음으로, 애플리케이션 실행 장치는, 원본 애플리케이션의 클래스가 원본 애플리케이션의 Manifest 정보와 동일한 과정을 거쳐 실행될 수 있다.
또한, 일실시예에 따르면, 애플리케이션 실행 장치는, 자바 리플렉션 기법으로 안드로이드 시스템에 접근하여 애플리케이션 내부 리소스 영역(assets, res 폴더)인 assets 폴더에 저장된 제 3의 난독화된 DEX 파일을 로드하고 파일 내부의 클래스를 자유자재로 활용할 수 있다. 이때, 보안을 무시하는 설정(CONTEXT_IGNORE_SECURITY)이 필요 없게 된다.
또한, 일실시예에 따르면, 애플리케이션 실행 장치는, Manifest에 인텐트 필터 정보나 일부 컴포넌트 정보를 포함하지 않는 대신에 DEX 파일 내부의 클래스에 인텐트 필터 정보나 일부 컴포넌트 정보를 포함하여 애플리케이션 실행 정보 노출을 피할 수 있다. 다음으로, 애플리케이션 실행 장치는, 리플렉션 기법으로 시스템에 접근한 뒤 복호화된 클래스를 액티비티 스레드에 등록하면서 은닉했던 내용을 실행할 수 있다. 구체적으로, 애플리케이션 실행 장치가 수행하는 애플리케이션 실행 방법은 하기와 같다.
먼저, 단계(S801)에서, 애플리케이션 실행 장치는, 애플리케이션 정보 은닉 방법이 적용된 APK 파일을 실행(800)할 수 있으며, 경우에 따라서, 사용자나 시스템으로부터 실행 요청을 받을 수도 있다.
단계(S802)에서, 애플리케이션 실행 장치는, 암호화된 DEX 파일을 복호화 하기 위해서 암호키를 획득할 수 있다. 이때, 애플리케이션 실행 장치는, res 폴더 내부(831)의 키가 임베딩(Embedding)되어있는 이미지 파일에서 K3 키를 추출할 수 있다.
단계(S803)에서, 애플리케이션 실행 장치는, assets 폴더(832)에서 BASE64로 암호화된 K2 키를 추출할 수 있다.
단계(S804)에서, 애플리케이션 실행 장치는, 위의 단계에서 획득한 두 개의 키를 XOR 연산하여 K1 키를 획득할 수 있다. 이는, 나머지 키를 동적으로 획득함으로써 키 탈취 가능성을 낮추기 위함이다.
단계(S805)에서, 애플리케이션 실행 장치는, K1, K2, K3의 각 64비트의 키에서 앞 56비트를 잘라서 사용할 수 있다. 또한, 애플리케이션 실행 장치는, 획득한 키로 난독화된 DEX 파일을 Triple DES 알고리즘으로 복호화하여 로더 애플리케이션의 assets 폴더(832)에 저장할 수 있다.
단계(S806)에서, 애플리케이션 실행 장치는, 복호화된 파일이 정상적이지 않을 경우에 자바 코드의 예외 핸들링 부분을 이용하여 성공적으로 복호화할 수 있다.
단계(S807)에서, 애플리케이션 실행 장치는, 복호화가 성공했으면 복호화한 DEX 파일을 클래스 로더로 동적 로딩하는 과정을 진행할 수 있다.
단계(S808)에서, 애플리케이션 실행 장치는, 원본 애플리케이션의 Manifest 정보와 똑같이 로더 애플리케이션이 실행되기 위하여 단계(S807)의 과정이 성공하면 Manifest information 클래스 등록을 할 수 있다. 애플리케이션 실행 장치는, 자바 리플렉션 기법으로 프로세스에 등록하기 위해 필요한 클래스 등록을 진행할 수 있다.
단계(S809)에서, 애플리케이션 실행 장치는, 단계(S808)의 과정에서 Manifest information 클래스가 등록되면, 원본 애플리케이션의 Manifest와 같이 로더 애플리케이션이 동작하도록 할 수 있다.
도 9는 본 발명의 일실시예에 따른 애플리케이션 은닉 장치를 나타내는 블록도이다.
먼저, 도 9를 참조하면, 애플리케이션 은닉 장치는 원본 실행 파일 추출부(910), 실행 파일 재생성부(920), 암호화부(930), 로더 애플리케이션 생성부(940)를 포함하여 구성될 수 있다.
원본 실행 파일 추출부(910)는, 원본 애플리케이션에서 소스 코드를 포함하는 원본 실행 파일을 추출할 수 있다. 구체적으로, 원본 실행 파일 추출부(910)는, 압축 알고리즘을 이용하여 원본 애플리케이션을 압축 해제하여 원본 실행 파일을 추출할 수 있다.
실행 파일 재생성부(920)는, 원본 애플리케이션의 매니페스트(manifest) 정보를 원본 실행 파일에 추가하여 새로운 실행 파일을 재생성할 수 있다. 이때, 실행 파일 재생성부(920)는, 매니페스트 정보 중 일부 정보와 관련된 코드를 새로운 실행 파일의 클래스에 추가하여 새로운 실행 파일을 재생성할 수 있다.
암호화부(930)는, 재생성된 새로운 실행 파일을 암호화 알고리즘을 이용하여 암호화할 수 있다.
로더 애플리케이션 생성부(940)는, 암호화된 새로운 실행 파일을 포함하고, 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성할 수 있다. 물론, 로더 애플리케이션 생성부(940)는, 원본 애플리케이션 실행시 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성할 수 있다. 또한, 로더 애플리케이션 생성부(940)는, 로더 애플리케이션 실행시 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성할 수 있다. 또한, 로더 애플리케이션 생성부(940)는, 일부 정보를 매니페스트 정보에서 삭제하여 로더 애플리케이션을 생성할 수 있다.
일실시예에 따르면, 로더 애플리케이션 생성부(940)는, 암호화된 새로운 실행 파일을 로더 애플리케이션의 데이터 영역 폴더에 저장하고, 암호화된 새로운 실행 파일을 복호화하고, 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수 있다. 물론, 로더 애플리케이션 생성부(940)는, 원본 애플리케이션 실행시 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수 있다. 이때, 로더 애플리케이션 생성부(940)는, 복호화된 새로운 실행 파일을 로드하고 자바 리플렉션을 이용하여 로드한 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수도 있다. 또한, 로더 애플리케이션 생성부(940)는, 원본 애플리케이션 실행시 복호화된 새로운 실행 파일을 로드하고 자바 리플렉션을 이용하여 로드한 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수도 있다. 물론, 로더 애플리케이션 생성부(940)는, 원본 애플리케이션 실행시 복호화된 새로운 실행 파일을 로드하고 자바 리플렉션을 이용하여 로드한 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수도 있다. 또한, 로더 애플리케이션 생성부(940)는, 로더 애플리케이션 실행시 복호화된 새로운 실행 파일을 로드하고 자바 리플렉션을 이용하여 로드한 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성할 수도 있다.
도 10은 본 발명의 일실시예에 따른 애플리케이션 실행 장치를 나타내는 블록도이다.
도 10을 참조하면, 애플리케이션 실행 장치는 키 추출부(1010), 복호화부(1020), 파일 폴더 저장부(1030), 동적 로딩부(1040)를 포함하여 구성될 수 있는 것을 알 수 있다.
키 추출부(1010)는, 난독화된 실행 파일을 복호화하기 위한 키를 추출할 수 있다. 구체적으로, 키 추출부(1010)는, 난독화된 실행 파일을 포함하는 애플리케이션의 폴더의 파일에서 암호키를 추출할 수 있다.
복호화부(1020)는, 추출된 키를 이용하여 난독화된 실행 파일을 복호화할 수 있다. 이때, 복호화부(1020)는, 복호화된 실행 파일을 체크하여 복호화의 성공 여부를 판단하여, 복호화 실패시 자바 코드의 예외 핸들링을 이용하여 다시 난독화된 실행 파일을 복호화할 수 있다.
파일 폴더 저장부(1030)는, 복호화된 실행 파일을 로더 애플리케이션의 폴더에 저장할 수 있다.
동적 로딩부(1040)는, 로더 애플리케이션의 폴더에 저장된 복호화된 실행 파일을 클래스 로더를 이용하여 동적 로딩할 수 있다.
상기에서 기술한 바와 같이, 애플리케이션의 정보 은닉 방법 및 애플리케이션 실행 방법은, 안드로이드 애플리케이션의 코드 난독화에 관한 것이다. 특히 애플리케이션의 정보 은닉 방법 및 애플리케이션 실행 방법은, 애플리케이션 내부의 DEX 파일에 Manifest의 일부 정보를 포함시키고 이를 은닉하며, 자바 리플렉션(Java Reflection)과 DEX 동적 로딩으로 은닉한 DEX를 로딩 및 실행할 수 있는 효과가 있다.
또한, 애플리케이션의 정보 은닉 방법 및 애플리케이션 실행 방법은, 안드로이드 애플리케이션의 디컴파일 방지를 위한 바이너리 암호화를 목적으로 한다. 또한, 애플리케이션의 정보 은닉 방법 및 애플리케이션 실행 방법은, 자바 리플렉션과 DEX 동적 로딩을 이용하여 임의의 디렉토리 내부에 암호화된 실행 파일을 로딩 및 실행할 수 있는 방법을 제시하고, 이를 기반으로 암호화와 동적 로딩을 이용하여 모바일 애플리케이션의 내부 코드를 은폐할 수 있다.
애플리케이션의 정보 은닉 방법 및 애플리케이션 실행 방법을 활용하면 프로그램 제작자가 내부 코드 및 핵심 알고리즘을 은폐할 수 있으므로, 프로그램 및 애플리케이션의 저작권을 보호할 수 있다.
또한, 애플리케이션의 정보 은닉 방법 및 애플리케이션 실행 방법은, 안드로이드 패커 또는 난독화 도구 개발에 활용할 수 있다. 또한, 애플리케이션의 정보 은닉 방법 및 애플리케이션 실행 방법은, 보호하고자 하는 모든 안드로이드 운영체제나 이의 전용 애플리케이션을 지원하는 운영체제에서 구동 가능한 애플리케이션을 개발하는데 적용할 수 있다. 애플리케이션의 정보 은닉 방법 및 애플리케이션 실행 방법은, 저작권 보호를 원하는 클래스 집단과 매니페스트의 실행 정보 일부를 난독화 할 수 있기 때문이다.
일실시예에 따르면, 애플리케이션의 정보 은닉 방법 및 애플리케이션 실행 방법은, 원본 안드로이드 애플리케이션 내부 DEX 파일을 디컴파일하여 새로운 코드를 넣은 후에 다시 컴파일할 수 있다. 또한, 애플리케이션의 정보 은닉 방법 및 애플리케이션 실행 방법은, DEX 파일 전체를 암호화하고 실행을 위한 로더 애플리케이션 안에 포함시킬 수 있다. 따라서, 원본 애플리케이션의 코드 전체가 난독화되므로 원본 애플리케이션과 난독화된 애플리케이션의 유사도를 비교시 상당히 낮은 유사도를 얻는 효과가 있다.
본 발명의 실시 예에 따른 방법들은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다.
그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.

Claims (20)

  1. 원본 실행 파일 추출부, 실행 파일 재생성부, 암호화부, 로더 애플리케이션 생성부를 포함하는, 애플리케이션의 정보 은닉 장치가 수행하는, 애플리케이션의 정보 은닉 방법에 있어서,
    상기 원본 실행 파일 추출부가 원본 애플리케이션에서 소스 코드를 포함하는 원본 실행 파일을 추출하는 단계;
    상기 실행 파일 재생성부가 상기 원본 애플리케이션의 매니페스트(manifest) 정보를 상기 원본 실행 파일에 추가하여 새로운 실행 파일을 재생성하는 단계;
    상기 암호화부가 상기 재생성된 새로운 실행 파일을 암호화 알고리즘을 이용하여 암호화하는 단계; 및
    상기 로더 애플리케이션 생성부가 상기 암호화된 새로운 실행 파일을 포함하고, 상기 원본 애플리케이션 실행시 상기 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성하는 단계
    를 포함하는 애플리케이션의 정보 은닉 방법.
  2. 제1항에 있어서,
    상기 원본 실행 파일을 추출하는 단계는,
    상기 원본 실행 파일 추출부가 압축 알고리즘을 이용하여 상기 원본 애플리케이션을 압축 해제하여 원본 실행 파일을 추출하는 애플리케이션의 정보 은닉 방법.
  3. 제1항에 있어서,
    상기 새로운 실행 파일을 재생성하는 단계는,
    상기 실행 파일 재생성부가 상기 매니페스트 정보 중 일부 정보와 관련된 코드를 상기 새로운 실행 파일의 클래스에 추가하여 상기 새로운 실행 파일을 재생성하는 애플리케이션의 정보 은닉 방법.
  4. 제3항에 있어서,
    상기 로더 애플리케이션을 생성하는 단계는,
    상기 로더 애플리케이션 생성부가 상기 일부 정보를 상기 매니페스트 정보에서 삭제하여 로더 애플리케이션을 생성하는 애플리케이션의 정보 은닉 방법.
  5. 제1항에 있어서,
    상기 로더 애플리케이션을 생성하는 단계는,
    상기 로더 애플리케이션 생성부가 상기 암호화된 새로운 실행 파일을 상기 로더 애플리케이션의 데이터 영역 폴더에 저장하고, 상기 암호화된 새로운 실행 파일을 복호화하고, 상기 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성하는 애플리케이션의 정보 은닉 방법.
  6. 제5항에 있어서,
    상기 로더 애플리케이션을 생성하는 단계는,
    상기 로더 애플리케이션 생성부가 상기 복호화된 새로운 실행 파일을 로드하고 자바 리플렉션을 이용하여 상기 로드한 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성하는 애플리케이션의 정보 은닉 방법.
  7. 키 추출부, 복호화부, 파일 폴더 저장부를 포함하는 애플리케이션 실행 장치가 수행하는, 애플리케이션 실행 방법에 있어서,
    상기 키 추출부가 난독화된 실행 파일을 복호화하기 위한 키를 추출하는 단계;
    상기 복호화부가 상기 추출된 키를 이용하여 상기 난독화된 실행 파일을 복호화하는 단계; 및
    상기 파일 폴더 저장부가 상기 복호화된 실행 파일을 로더 애플리케이션의 폴더에 저장하는 단계;
    를 포함하는 애플리케이션 실행 방법.
  8. 제7항에 있어서,
    상기 애플리케이션 실행 장치는 동적 로딩부를 더 포함하고,
    상기 동적 로딩부가 상기 로더 애플리케이션의 폴더에 저장된 복호화된 실행 파일을 클래스 로더를 이용하여 동적 로딩하는 단계
    를 더 포함하는 애플리케이션 실행 방법.
  9. 제7항에 있어서,
    상기 키를 추출하는 단계는,
    상기 키 추출부가 상기 난독화된 실행 파일을 포함하는 애플리케이션의 폴더의 파일에서 암호키를 추출하는 애플리케이션 실행 방법.
  10. 제7항에 있어서,
    상기 복호화하는 단계는,
    상기 복호화부가 상기 복호화된 실행 파일을 체크하여 복호화의 성공 여부를 판단하여, 복호화 실패시 자바 코드의 예외 핸들링을 이용하여 다시 상기 난독화된 실행 파일을 복호화하는 애플리케이션 실행 방법.
  11. 애플리케이션의 정보 은닉 장치에 있어서,
    원본 애플리케이션에서 소스 코드를 포함하는 원본 실행 파일을 추출하는 원본 실행 파일 추출부;
    상기 원본 애플리케이션의 매니페스트(manifest) 정보를 상기 원본 실행 파일에 추가하여 새로운 실행 파일을 재생성하는 실행 파일 재생성부;
    상기 재생성된 새로운 실행 파일을 암호화 알고리즘을 이용하여 암호화하는 암호화부; 및
    상기 암호화된 새로운 실행 파일을 포함하고, 상기 원본 애플리케이션 실행시 상기 암호화된 새로운 실행 파일을 로딩하여 실행하는 로더 애플리케이션을 생성하는 로더 애플리케이션 생성부
    를 포함하는 애플리케이션의 정보 은닉 장치.
  12. 제11항에 있어서,
    상기 원본 실행 파일 추출부는,
    압축 알고리즘을 이용하여 상기 원본 애플리케이션을 압축 해제하여 원본 실행 파일을 추출하는 애플리케이션의 정보 은닉 장치.
  13. 제11항에 있어서,
    상기 실행 파일 재생성부는,
    상기 매니페스트 정보 중 일부 정보와 관련된 코드를 상기 새로운 실행 파일의 클래스에 추가하여 상기 새로운 실행 파일을 재생성하는 애플리케이션의 정보 은닉 장치.
  14. 제13항에 있어서,
    상기 로더 애플리케이션 생성부는,
    상기 일부 정보를 상기 매니페스트 정보에서 삭제하여 로더 애플리케이션을 생성하는 애플리케이션의 정보 은닉 장치.
  15. 제11항에 있어서,
    상기 로더 애플리케이션 생성부는,
    상기 암호화된 새로운 실행 파일을 상기 로더 애플리케이션의 데이터 영역 폴더에 저장하고, 상기 암호화된 새로운 실행 파일을 복호화하고, 상기 복호화된 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성하는 애플리케이션의 정보 은닉 장치.
  16. 제15항에 있어서,
    상기 로더 애플리케이션 생성부는,
    상기 복호화된 새로운 실행 파일을 로드하고 자바 리플렉션을 이용하여 상기 로드한 새로운 실행 파일을 실행하는 로더 애플리케이션을 생성하는 애플리케이션의 정보 은닉 장치.
  17. 애플리케이션 실행 장치에 있어서,
    난독화된 실행 파일을 복호화하기 위한 키를 추출하는 키 추출부;
    상기 추출된 키를 이용하여 상기 난독화된 실행 파일을 복호화하는 복호화부; 및
    상기 복호화된 실행 파일을 로더 애플리케이션의 폴더에 저장하는 파일 폴더 저장부;
    를 포함하는 애플리케이션 실행 장치.
  18. 제17항에 있어서,
    상기 로더 애플리케이션의 폴더에 저장된 복호화된 실행 파일을 클래스 로더를 이용하여 동적 로딩하는 동적 로딩부
    를 더 포함하는 애플리케이션 실행 장치.
  19. 제17항에 있어서,
    상기 키 추출부는,
    상기 난독화된 실행 파일을 포함하는 애플리케이션의 폴더의 파일에서 암호키를 추출하는 애플리케이션 실행 장치.
  20. 제17항에 있어서,
    상기 복호화부는,
    상기 복호화된 실행 파일을 체크하여 복호화의 성공 여부를 판단하여, 복호화 실패시 자바 코드의 예외 핸들링을 이용하여 다시 상기 난독화된 실행 파일을 복호화하는 애플리케이션 실행 장치.
KR1020150072056A 2015-05-22 2015-05-22 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치 KR101749209B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020150072056A KR101749209B1 (ko) 2015-05-22 2015-05-22 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150072056A KR101749209B1 (ko) 2015-05-22 2015-05-22 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20160137222A KR20160137222A (ko) 2016-11-30
KR101749209B1 true KR101749209B1 (ko) 2017-06-20

Family

ID=57707366

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150072056A KR101749209B1 (ko) 2015-05-22 2015-05-22 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치

Country Status (1)

Country Link
KR (1) KR101749209B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102009419B1 (ko) * 2017-07-20 2019-08-09 라인 가부시키가이샤 실행 가능한 압축 파일을 보호하기 위한 파일 보호 방법 및 시스템
KR102449500B1 (ko) * 2017-11-14 2022-09-30 주식회사 케이티 예외 오류를 회피하기 위해 형상 관리를 이용하여 어플리케이션을 실행하는 장치 및 방법
KR101883996B1 (ko) * 2017-11-29 2018-07-31 주식회사 스틸리언 동적 프레임워크를 이용한 iOS 애플리케이션의 문자열 복호화 방법
CN113238762B (zh) * 2021-05-10 2024-07-02 深圳前海微众银行股份有限公司 java应用远程部署方法、装置及设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101214893B1 (ko) * 2011-12-16 2013-01-09 주식회사 안랩 어플리케이션의 유사성 검출 장치 및 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101214893B1 (ko) * 2011-12-16 2013-01-09 주식회사 안랩 어플리케이션의 유사성 검출 장치 및 방법

Also Published As

Publication number Publication date
KR20160137222A (ko) 2016-11-30

Similar Documents

Publication Publication Date Title
US7469346B2 (en) Dual virtual machine architecture for media devices
JP6227772B2 (ja) 動的ライブラリを保護する方法及び装置
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
KR101054318B1 (ko) 정보 처리 시스템 및 프로그램을 기록한 컴퓨터로 읽을 수 있는 매체
KR102433011B1 (ko) Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체
JPWO2006009081A1 (ja) アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法
CN104298932A (zh) 一种so文件的调用方法及装置
KR20070001893A (ko) 탬퍼-레지스턴트 트러스티드 가상 머신
CN104318155A (zh) 一种防逆向apk文件的动态加载方法
CN104408337A (zh) 一种apk文件防逆向的加固方法
CN105930695A (zh) 一种软件开发工具包的保护方法及装置
CN108133147B (zh) 可执行代码的保护方法、设备及可读存储介质
US9256756B2 (en) Method of encryption and decryption for shared library in open operating system
KR101749209B1 (ko) 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치
JP6698774B2 (ja) 共通中間言語のための保安提供装置と方法、及び保安実行装置と方法
US9292708B2 (en) Protection of interpreted source code in virtual appliances
JP2007233426A (ja) アプリケーション実行装置
KR20160117183A (ko) Dll 파일 암호화 방법, 이를 수행하는 dll 파일 암호화 시스템, 및 이를 저장하는 기록매체
KR20140139392A (ko) 모바일 장치를 위한 애플리케이션 실행 파일 생성방법, 모바일 장치의 애플리케이션 실행 방법, 애플리케이션 실행 파일 생성 장치 및 모바일 장치
CN112115430A (zh) 一种apk的加固方法、电子设备及存储介质
JP2008040853A (ja) アプリケーション実行方法およびアプリケーション実行装置
WO2016188134A1 (zh) 一种实现应用加固的方法及装置
KR102557007B1 (ko) 바이너리 파일 재구성 방법 및 그 장치
CN107688729B (zh) 基于可信主机的应用程序保护系统及方法
KR102326100B1 (ko) 안전한 안드로이드 앱 생성 및 안드로이드 플랫폼에서의 앱 설치/실행을 위한 시스템 및 방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal