KR101623096B1 - 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 - Google Patents

안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 Download PDF

Info

Publication number
KR101623096B1
KR101623096B1 KR1020150066597A KR20150066597A KR101623096B1 KR 101623096 B1 KR101623096 B1 KR 101623096B1 KR 1020150066597 A KR1020150066597 A KR 1020150066597A KR 20150066597 A KR20150066597 A KR 20150066597A KR 101623096 B1 KR101623096 B1 KR 101623096B1
Authority
KR
South Korea
Prior art keywords
file
library
dex file
original dex
apk
Prior art date
Application number
KR1020150066597A
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 KR1020150066597A priority Critical patent/KR101623096B1/ko
Application granted granted Critical
Publication of KR101623096B1 publication Critical patent/KR101623096B1/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]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

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

본 발명은 APK 파일 내 실행 파일이 역공학 및 역컴파일을 통해 분석되는 것을 미연에 방지할 수 있도록 하기 위한 것으로, APK 파일 내 원본 DEX 파일과 네이티브 라이브러리를 추출하는 파일 추출부; 원본 DEX 파일에 명령어의 추가, 원본 DEX 파일의 각 메소드에 대한 분할과 위치 변경, 및 위치 변경된 각 메소드에 이동 명령어의 삽입을 통해 원본 DEX 파일에 분석 툴 교란 기법을 적용시키는 파일 난독화부; 분석 툴 교란 기법이 적용된 원본 DEX 파일과 네이티브 라이브러리를 암호화시켜 APK 파일 내 소정의 폴더에 저장하는 암호화부; 암호화된 원본 DEX 파일과 네이티브 라이브러리를 복호화시키기 위한 복호화 키를 외부 서버 또는 로컬 상의 파일에서 읽어들일 수 있는 제 1 및 제 2 복호화 라이브러리를 생성하는 라이브러리 생성부; 소정의 폴더에 접근하여 암호화된 원본 DEX 파일을 추출하여 제 1 복호화 라이브러리를 이용하여 복호화시켜 메모리에 로딩하도록 임시 DEX 파일을 생성하는 임시 파일 생성부; 및 임시 DEX 파일, 제 2 복호화 라이브러리 및 암호화된 원본 DEX 파일과 네이티브 라이브러리를 이용하여 보호된 APK 파일을 생성하는 파일 생성부를 포함하는 것을 특징으로 하는 안드로이드 플랫폼에서의 APK 파일 관리 장치를 제공한다.

Description

안드로이드 플랫폼에서의 APK 파일 관리 장치 및 방법{APPARATUS AND METHOD FOR MANAGING APK FILE IN A ANDROID PLATFORM}
본 발명은 안드로이드 플랫폼에서의 APK 파일 관리에 관한 것으로, 보다 상세하게는 APK 파일 내 실행 파일이 역공학 및 역컴파일을 통해 분석되는 것을 미연에 방지할 수 있는 안드로이드 플랫폼에서의 APK 파일 관리 장치 및 방법에 관한 것이다.
스마트폰을 비롯한 다양한 모바일 기기 보급이 급속도로 증가하고 있고, 이들 기기에 저장된 각종 개인정보에 대한 불법적 접근을 노리는 악성 앱들로 인한 피해가 발생하고 있다. 이들 악성 앱 출현의 원인 중 하나는 앱 실행파일의 역컴파일이 쉽기 때문이다. 이러한 앱 실행파일의 역컴파일이 쉽게 이루어지지 않도록 하기 위한 기술 중의 하나가 코드 난독화 기술이다.
역컴파일(decompile)이란 이미 컴파일된 기계어나 어셈블러 부호로부터 컴파일 전의 본래 소스 코드를 추출해 내는 프로그램이다. 기계어 부호와 고수준 언어의 원시 부호는 서로 대응되지 않는 경우가 많으므로 역컴파일 작업이 매우 어렵다. 델파이용 역컴파일러로는 디디(DeDe: Delphi decompiler)가 있으며, 자바(Java)용 역컴파일러로는 자스민(Jasmine), 자드(Jad), 모카(Mocha) 등 다양한 것들이 있다.
특히, 자바는 컴파일하면 클래스(class) 확장자의 실행파일이 생성되며 이를 JVM(Java Virtual Machine)이 해석해 주는 역할을 하고, 안드로이드는 Dalvik VM(Dalvik Virtual Machine)이 APK(Android application package) 파일의 압축을 해제하고 DEX(Dalvik Executable) 파일을 실행파일로 사용하고 있다.
일반적으로 안드로이드의 실행파일인 APK는 ZIP 파일 포맷에 기반을 두어 아래의 [표1]과 같은 구조를 가지고 있다.
파일명 설명
AndroidManifest.xml. APK 실행 파일의 전체적인 구조, 그리고 부가적인 권한 설정이나 기능을 사용하는 class를 명시한다.
Classes.dex. 안드로이드의 실행 코드가 저장되어 있다.
META-INF 인증된 키값이 저장된 폴더
res 그래픽과 관련된 이미지 및 레이아웃
lib Dalvik을 이용하지 않는 SO(Shared Object) 라이브러리
개발자가 컴파일시 자바(Java) 소스 코드는 Dalvik VM이 해석할 수 있는 바이트 코드로 변환되어 classes.dex 파일로 저장된다.
도 1 내지 도 3은 종래의 역컴파일을 통해 classes.dex 파일이 java 파일로 역컴파일되는 과정의 예를 나타낸 도면이다.
classes.dex 파일은 먼저 dex 파일을 class로 만들고 그것을 다시 java 파일로 역컴파일하는 과정을 거치게 된다.
도 1에 도시된 바와 같이, 역컴파일을 통하여 class 파일로 변경하면 해당 class 파일이 도 2와 같이 나타나게 된다. 이후 class 파일을 일반적인 자바 역컴파일러인 JD를 통하여 역컴파일하면 도 3과 같이 실행파일에서 추출한 소스를 확인할 수 있다.
이렇듯, 안드로이드는 기존의 Java와 비슷한 언어인 Dalvik을 사용하기 때문에 역컴파일에 노출이 쉽다는 단점이 있다.
이러한 단점을 파고들어서 최근에는 여러 가지 역컴파일 관련 툴들이 쏟아져 나오고 있는데 dex2jar와 같은 툴들이 그 예이다. 이에 따라 역컴파일을 방어하기 위한 난독화 기술이 절실해지고 있다.
한편, 종래의 안드로이드 난독화 기술은 역컴파일 관련 툴들이 dex 파일을 분석하는 데 방해하는 수준의 코드를 추가하는 DEX 분석 방지 또는 역컴파일 방지 기법이 있다.
상술한 바와 같은 코드 추가 방식은 DEX 파일에서 추가된 코드가 제거되면, 역공학 또는 역컴파일이 가능하다는 단점이 있다.
대한민국 등록특허공보 제10-1161778호(2012. 07. 03.)
본 발명의 목적은, 안드로이드 플랫폼 내에서 난독화 및 암호화를 통해 APK 파일의 원본 DEX 파일을 변경함과 더불어 APK 파일 내 네이티브 라이브러리 파일을 암호화시켜 보호된 APK 파일을 생성함으로써, APK 파일이 외부로 누출되더라도 소스 코드의 복구 및 분석이 불가능하도록 할 수 있는 안드로이드 플랫폼에서의 APK 파일 관리 장치 및 방법을 제공하는 데 있다.
상기한 본 발명의 목적은, 안드로이드 플랫폼에서의 APK 파일을 관리하는 장치에 있어서, APK 파일 내 원본 DEX 파일과 네이티브 라이브러리를 추출하는 파일 추출부; 상기 원본 DEX 파일에 명령어의 추가, 상기 원본 DEX 파일의 각 메소드에 대한 분할과 위치 변경, 및 위치 변경된 각 메소드에 이동 명령어의 삽입을 통해 상기 원본 DEX 파일에 분석 툴 교란 기법을 적용시키는 파일 난독화부; 상기 분석 툴 교란 기법이 적용된 원본 DEX 파일과 네이티브 라이브러리를 암호화시켜 상기 APK 파일 내 소정의 폴더에 저장하는 암호화부; 암호화된 원본 DEX 파일과 네이티브 라이브러리를 복호화시키기 위한 복호화 키를 외부 서버 또는 로컬 상의 파일에서 읽어들일 수 있는 제 1 및 제 2 복호화 라이브러리를 생성하는 라이브러리 생성부; 상기 소정의 폴더에 접근하여 암호화된 원본 DEX 파일을 추출하여 상기 제 1 복호화 라이브러리를 이용하여 복호화시켜 메모리에 로딩하도록 임시 DEX 파일을 생성하는 임시 파일 생성부; 및 상기 임시 DEX 파일, 제 2 복호화 라이브러리 및 상기 암호화된 원본 DEX 파일과 네이티브 라이브러리를 이용하여 보호된 APK 파일을 생성하는 파일 생성부를 포함하는 것을 특징으로 하는 안드로이드 플랫폼에서의 APK 파일 관리 장치에 의해 달성된다.
또한 본 발명의 실시예에 따르면, 상기 분석 툴 교란 기법이 적용된 원본 DEX 파일 내의 네이티브 호출 함수를 수정하는 호출 함수 수정부를 더 포함하는 것을 특징으로 한다.
또한 본 발명의 실시예에 따르면, 상기 보호된 APK 파일 내 제 1 및 제 2 복호화 라이브러리의 실행을 통해 외부 서버 또는 로컬 상의 파일에서 복호화 키를 제공받고, 상기 임시 DEX 파일의 실행을 통해 상기 소정의 폴더에 저장된 암호화된 원본 DEX 파일을 복호화시켜 상기 메모리에 로딩함과 더불어, 상기 호출 함수를 이용하여 임시 폴더에 접근하여 복호화된 네이티브 라이브러리를 상기 메모리에 로딩하는 파일 실행부를 더 포함하는 것을 특징으로 한다.
상기한 본 발명의 목적은 또한, 안드로이드 플랫폼에서의 APK 파일을 관리하는 방법에 있어서, 파일 추출부에서 APK 파일 내 원본 DEX 파일과 네이티브 라이브러리를 추출하는 단계; 파일 난독화부에서 상기 원본 DEX 파일에 명령어의 추가, 상기 원본 DEX 파일의 각 메소드에 대한 분할과 위치 변경, 및 위치 변경된 각 메소드에 이동 명령어의 삽입을 통해 상기 원본 DEX 파일에 분석 툴 교란 기법을 적용시키는 단계; 암호화부에서 상기 분석 툴 교란 기법이 적용된 원본 DEX 파일과 네이티브 라이브러리를 암호화시켜 상기 APK 파일 내 소정의 폴더에 저장하는 단계; 라이브러리 생성부에서 암호화된 원본 DEX 파일과 네이티브 라이브러리를 복호화시키기 위한 복호화 키를 외부 서버 또는 로컬 상의 파일에서 읽어들일 수 있는 제 1 및 제 2 복호화 라이브러리를 생성하는 단계; 임시 파일 생성부에서 상기 소정의 폴더에 접근하여 암호화된 원본 DEX 파일을 추출하여 상기 제 1 복호화 라이브러리를 이용하여 복호화시켜 메모리에 로딩하도록 임시 DEX 파일을 생성하는 단계; 및 파일 생성부에서 상기 임시 DEX 파일, 제 2 복호화 라이브러리 및 상기 암호화된 원본 DEX 파일과 네이티브 라이브러리를 이용하여 보호된 APK 파일을 생성하는 단계를 포함하는 것을 특징으로 하는 안드로이드 플랫폼에서의 APK 파일 관리 방법에 의해서도 달성된다.
또한 본 발명의 실시예에 따르면, 상기 저장하는 단계 이전에, 호출 함수 수정부에서 상기 분석 툴 교란 기법이 적용된 원본 DEX 파일 내의 네이티브 호출 함수를 수정하는 단계를 더 포함하는 것을 특징으로 한다.
또한 본 발명의 실시예에 따르면, 상기 보호된 APK 파일에 대한 실행 요청 시, 파일 실행부에서 상기 보호된 APK 파일 내 제 1 및 제 2 복호화 라이브러리의 실행을 통해 외부 서버 또는 로컬 상의 파일에서 복호화 키를 제공받는 단계; 상기 임시 DEX 파일의 실행을 통해 상기 소정의 폴더에 저장된 암호화된 원본 DEX 파일을 복호화시켜 상기 메모리에 로딩하는 단계; 상기 호출 함수를 이용하여 임시 폴더에 접근하여 복호화된 네이티브 라이브러리를 상기 메모리에 로딩하는 단계; 및 상기 메모리에 로딩된 네이티브 라이브러리와 원본 DEX 파일을 이용하여 APK 파일을 실행시키는 단계를 더 포함하는 것을 특징으로 한다.
본 발명의 APK 파일 관리 장치 및 방법에 의하면, 안드로이드 플랫폼 내에서 난독화 및 암호화를 통해 APK 파일의 원본 DEX 파일을 변경함과 더불어 APK 파일 내 네이티브 라이브러리 파일을 암호화시켜 보호된 APK 파일을 생성함으로써, APK 파일이 외부로 누출되더라도 DEX 파일이 디컴파일되는 것을 방지할 수 있을 뿐만 아니라, 네이티브 라이브러리 파일이 분석되는 것을 방지할 수 있는 이점이 있다.
도 1 내지 도 3은 종래의 역컴파일을 통해 classes.dex 파일이 java 파일로 역컴파일되는 과정의 예를 나타낸 도면이고,
도 4는 본 발명의 실시예에 따른 안드로이드 플랫폼에서 이용되는 APK 파일의 폴더 구조를 도시한 도면이고,
도 5는 본 발명의 실시예에 따른 안드로이드 플랫폼에서의 APK 파일 관리 장치를 도시한 블록도이고,
도 6은 본 발명의 실시예에 따른 파일 난독화 과정 중 이동 명령어 삽입 과정을 설명하기 위한 도면이고,
도 7은 본 발명의 실시예에 따른 APK 파일 관리 장치가 보호된 APK 파일을 생성하는 과정을 도시한 흐름도이고,
도 8은 도 7의 단계들을 통해 생성된 보호된 APK 파일의 실행하는 과정을 도시한 흐름도이다.
이하, 도면을 참조하여 본 발명의 구체적인 실시형태를 보다 상세히 설명하기로 한다.
도 4는 본 발명의 실시예에 따른 안드로이드 플랫폼에서 이용되는 APK 파일의 폴더 구조를 도시한 도면이다.
도 4에 도시된 바와 같이, APK 파일은 리소스 파일 폴더(res), 라이브러리 폴더(lib), 읽기 가능한 폴더(asset), 앱에 대한 정보 및 실행 권한 등의 정보를 갖는 XML 파일, 달빅(Dalvik) 가상 머신에서 동작하는 바이너리 파일에 해당하는 실행 파일 등을 포함할 수 있다.
또한, APK 파일은 확장자가 DEX인 실행 파일과 확장자가 "so"인 네이티브 라이브러리를 포함하고 있다.
도 5는 본 발명의 실시예에 따른 안드로이드 플랫폼에서의 APK 파일 관리 장치를 도시한 블록도이다.
도 5에 도시된 바와 같이, APK 파일 관리 장치(100)는 파일 추출부(110), 파일 난독화부(120), 암호화부(130), 라이브러리 생성부(140), 호출 함수 수정부(150), 임시 파일 생성부(160), 파일 생성부(170), 메모리(175) 및 파일 실행부(180)를 포함한다.
상기와 같은 구조를 갖는 APK의 실행 파일이 디컴파일되는 것을 방지하고, 확장자가 "so"인 네이티브 라이브러리가 분석되는 것을 방지하기 위한 안드로이드 플랫폼에서의 APK 파일 관리 장치(100)에 대해 도 5를 참조하여 설명한다.
파일 추출부(110)는 APK 파일 내에서 DEX 파일과 확장자가 "so"인 네이티브 라이브러리 파일을 추출한다. 추출한 DEX 파일은 파일 난독화부(120)에 제공되며, 추출한 네이티브 라이브러리 파일은 암호화부(130)에 제공된다.
파일 난독화부(120)는 원본 DEX 파일에 명령어 추가, 원본 DEX 파일의 각 메소드(method)에 대한 분할과 위치 변경 및 각 메소드에 이동 명령어를 포함시켜 원본 DEX 파일에 분석 툴 교란 기법을 적용시켜 출력한다. 이를 위하여, 파일 난독화부(120)는 명령어 추가 모듈(122), 분할 및 위치 변경 모듈(124) 및 이동 명령어 삽입 모듈(126)을 포함한다.
명령어 추가 모듈(122)은 DEX 파일 내 복수의 각 메소드 내에 디컴파일링을 방지하기 위한 하나 이상의 제 1 명령어를 추가하고, 디컴파일링을 방해하기 위한 방해 코드인 제 2 명령어를 추가한다. 여기에서, 제 1 명령어는 NOP(No Operation) 명령어일 수 있다.
명령어 추가 모듈(122)은 제 1 명령어가 포함된 DEX 파일을 실행시켜 소정의 공간을 생성한 후 소정의 공간에 DEX 파일이 디컴파일되지 않도록 하기 위한 방해 코드인 제 2 명령어를 삽입한다. 여기에서, 제 2 명령어는 DEX 파일의 난독화를 위한 하나 이상의 명령어 군(set)일 수 있으며, 소정의 공간은 제 2 명령어가 삽입되는 공간으로서 방해 공간이라고 할 수 있다.
분할 및 위치 변경 모듈(124)은 제 1 명령어와 제 2 명령어가 삽입된 DEX 파일의 각 메소드를 분할하고, 분할된 각 메소드의 위치를 변경한다. 즉, A 라는 메소드가 A'와 A"의 하위 메소드들로 분할되는 경우 분할 및 위치 변경 모듈(124)은 분할된 A'와 A"의 위치를 변경한다.
상술한 바와 같이, 하나의 메소드를 복수의 하위 메소드들로 분할한 후 하위 메소드들의 위치를 변경함으로써, DEX 파일 내 해당 메소드들의 물리적 위치가 변경되어 실행 코드가 변경될 수 있다.
이동 명령어 삽입 모듈(126)은 복수의 메소드 위치를 메소드의 길이 계산을 통해 메소드가 끝날 때마다 실행되는 이동 명령어를 삽입한다. 즉, 이동 명령어 삽입 모듈(126)은 분할 및 위치 변경 모듈(124)을 통해 분할 및 위치가 변경된 각 메소드의 길이를 계산하고, 위치가 변경된 메소드의 실행이 끝날 때마다 실행되는 이동 명령어, 예컨대 goto 명령어를 메소드의 끝단에 삽입한다. 예를 들어, 도 6에 도시된 바와 같이, 임의의 메소드가 하위 메소드1, 메소드2 및 메소드3으로 분할된 경우 하위 메소드1 다음에 메소드3이 실행되도록 메소드1에 이동 명령어(goto method3)를 삽입하고, 메소드3 이후에 메소드2가 실행되도록 메소드3에 이동 명령어(goto method2)를 삽입한다.
상기와 같은 파일 난독화부(120)에 의해 분석 툴 교란 기법이 적용된 원본 DEX 파일은 호출 함수 수정부(150)에 제공된다.
암호화부(130)는 APK 파일 내 확장자가 "so"인 네이티브 라이브러리를 파일 추출부(110)로부터 제공받아 암호화하며, 암호화된 네이티브 라이브러리를 APK 파일 내 읽기 가능한 폴더, 예컨대 'asset' 폴더에 저장한다.
또한, 암호화부(130)는 호출 함수 수정부(150)에 의해 호출 함수가 수정되고, 분석 툴 교란 기법이 적용된 원본 DEX 파일을 변경, 예컨대 암호화한 후 APK 파일 내 읽기 가능한 폴더에 저장한다.
라이브러리 생성부(140)는 암호화된 네이티브 라이브러리를 복호화할 수 있는 복호화 키를 외부 서버(미도시됨) 또는 로컬(안드로이드 플랫폼) 상의 파일로부터 제공받을 수 있는 제 1 복호화 라이브러리를 생성한 후 이를 읽기 가능한 폴더에 저장된 원본 DEX 파일에 삽입한다. 여기에서, 제 1 복호화 라이브러리는 실행에 따라 외부의 서버 또는 로컬 상의 파일에서 암호화된 네이티브 라이브러리를 복호화할 수 있는 복호화 키를 제공받으며, 제공받은 복호화 키를 이용하여 네이티브 라이브러리를 복호화한 후 임시 폴더, 예컨대 cache, tmp 폴더에 저장하여 메모리(175)에 로딩한다.
또한, 라이브러리 생성부(140)는 읽기 가능한 폴더에 저장된 암호화된 원본 DEX 파일을 복호화할 수 있는 복호화 키를 외부 서버 또는 로컬 상의 파일로부터 제공받아 복호화를 수행하는 제 2 복호화 라이브러리를 생성한다.
호출 함수 수정부(150)는 APK 파일 실행 시 제 1 복호화 라이브러리에 의해 복호화된 네이티브 라이브러리를 호출하기 위한 네이티브 호출 함수를 수정한다. 여기에서, 네이티브 호출 함수는 분석 툴 교란 기법이 적용된 원본 DEX 파일 내부에 있는 구문으로서, 자동으로 경로가 설정된 시스템 로드라이브러리(System.loadLibrary)와 명시적으로 경로가 지정된 시스템로드(System.load) 함수를 예로 들 수 있으며, 시스템로드라이브러리의 경로 및 시스템로드 함수에 지정된 경로의 변경을 통해 수정되어 수정된 경로에 의거하여 네이티브 라이브러리를 호출한다. 예를 들어, APK 파일 실행 시 복호화된 네이티브 라이브러리가 안드로이드 플랫폼 내 임시 폴더, 예컨대 cache, tmp 폴더에 저장된 경우에는 시스템로드 함수의 경로를 "data/cache..."로 변경하여 네이티브 호출 함수가 수정된다.
이러한 호출 함수 수정부(150)는 분석 툴 교란 기법이 적용된 원본 DEX 파일이 암호화되기 전에 원본 DEX 파일 내 네이티브 호출 함수를 수정한다. 이에 따라, 암호화부(130)는 네이티브 호출 함수가 수정된 원본 DEX 파일을 암호화하여 읽기 가능한 폴더에 저장한다.
임시 파일 생성부(160)는 라이브러리 생성부(140)에 의해 생성된 제 2 복호화 라이브러리를 포함하고, 제 2 복호화 라이브러리의 실행에 따라 읽기 가능한 폴더에 저장된 암호화된 원본 DEX 파일을 복호화하여 메모리(175)에 로딩할 수 있는 임시 DEX 파일을 생성한다.
파일 생성부(170)는 임시 DEX 파일, 제 1 복호화 라이브러리, 암호화된 분석 툴 교란 기법이 적용된 원본 DEX 파일, 네이티브 라이브러리 등을 이용하여 보호된 APK 파일을 생성한다.
임시 DEX 파일 내 코드는 실행에 따라 외부 서버 또는 로컬 상의 파일에서 키를 제공받아 변경된 DEX 파일을 복원하여 메모리(175)에 로딩한다.
파일 실행부(180)는 보호된 APK 파일의 실행, 즉 앱의 구동에 따라 APK 파일 내 임시 DEX 파일의 실행을 통해 외부 서버 또는 로컬 상의 파일에서 복호화 키를 제공받음과 더불어 제 2 복호화 라이브러리를 읽어들여 읽기 가능한 폴더 내 암호화된 원본 DEX 파일을 읽어들여 복호화한 후 메모리(175)에 로딩하여 동작시킨다.
또한, 파일 실행부(180)는 제 2 복호화 라이브러리의 실행을 통해 읽기 가능한 폴더에서 암호화된 네이티브 라이브러리를 읽어들이고, 외부 서버 또는 로컬 상의 파일에서 복호화 키를 제공받아 암호화된 네이티브 라이브러리를 복호화한 후 이를 안드로이드 플랫폼 내 임의의 폴더, 예컨대 cache, tmp 폴더에 저장한다. 그런 다음, 파일 실행부(180)는 네이티브 호출 구문의 실행의 수행을 통해 폴더에 저장된 복호화된 네이티브 라이브러리를 메모리(175)에 로딩함으로써, APK 파일을 실행시킨다.
상기와 같은 구성을 갖는 안드로이드 플랫폼에서의 APK 파일 관리 장치(100)가 동작하는 과정에 대해 도 7 및 도 8을 참조하여 설명한다.
도 7은 본 발명의 실시예에 따른 APK 파일 관리 장치(100)가 보호된 APK 파일을 생성하는 과정을 도시한 흐름도이다.
도 7에 도시된 바와 같이, 먼저 파일 추출부(110)는 메모리(175) 내 APK 파일에서 원본 DEX 파일과 네이티브 라이브러리 파일을 추출한다(S202). 이때, 추출한 원본 DEX 파일은 파일 난독화부(120)에 제공되며, 네이티브 라이브러리 파일은 암호화부(130)에 제공된다.
파일 난독화부(120)는 명령어 추가 모듈(122)을 이용하여 원본 DEX 파일에 하나 이상의 명령어를 추가하여(S204), 분할 및 위치 변경 모듈(124)에 제공한다.
이후, 파일 난독화부(120)는 분할 및 위치 변경 모듈(124)을 이용하여 명령어가 추가된 원본 DEX 파일 내 메소드를 적어도 하나 이상의 메소드로 분할한 후 각 메소드의 길이 계산을 통해 위치를 변경시켜(S206), 이동 명령어 삽입 모듈(126)에 제공한다.
파일 난독화부(120)는 이동 명령어 삽입 모듈(126)을 통해 위치 변경된 메소드의 순차적인 실행을 위해 분할된 각 메소드에 이동 명령어를 삽입한다(S208).
상기의 S204, S206, S208을 통해 원본 DEX 파일은 분석 툴 교란 기법이 적용된 후 호출 함수 수정부(150)에 제공된다.
호출 함수 수정부(150)는 분석 툴 교란 기법이 적용된 원본 DEX 파일 내부의 네이티브 호출 함수의 경로를 수정(S210)하여 암호화부(130)에 제공한다.
그런 다음, 암호화부(130)는 네이티브 라이브러리를 암호화한 후 암호화된 네이티브 라이브러리를 APK 파일 내 읽기 가능한 폴더에 저장하고, 네이티브 호출 함수의 경로가 수정된 원본 DEX 파일을 암호화하여 읽기 가능한 폴더에 저장한다(S212).
이후, 라이브러리 생성부(140)는 암호화된 네이티브 라이브러리를 복호화할 수 있는 복호화 키와 암호화된 원본 DEX 파일을 복호화할 수 있는 복호화 키를 외부 서버 또는 로컬 상의 파일에서 가져올 수 있는 제 1 및 제 2 복호화 라이브러리를 생성한다(S214).
그런 다음, 임시 파일 생성부(160)는 제 2 복호화 라이브러리와 이를 실행시킬 수 있는 임시 DEX 파일(New classes.dex)을 생성한 후(S216), 생성된 임시 DEX 파일, 암호화된 네이티브 라이브러리 및 제 1 복호화 라이브러리를 이용하여 보호된 APK 파일을 생성한다(S218).
상기와 같은 과정을 통해 생성된 보호된 APK 파일이 실행되는 과정에 대해 도 8을 참조하여 설명한다.
도 8은 도 7의 단계들을 통해 생성된 보호된 APK 파일의 실행하는 과정을 도시한 흐름도이다.
도 8에 도시된 바와 같이, 먼저 보호된 APK 파일에 대한 실행 요청이 수신되면(S302), 파일 실행부(180)는 보호된 APK 파일에서 제 1 복호화 라이브러리와 임시 DEX 파일 실행 내 제 2 복호화 라이브러리를 이용하여 외부 서버 또는 로컬 상의 파일에서 복호화 키를 가져온다(S304).
그런 다음, 파일 실행부(180)는 복호화 키를 이용하여 암호화된 원본 DEX 파일을 복호화한 후 이를 메모리(175)에 로딩하고(S306), 복호화 키를 이용하여 암호화된 네이티브 라이브러리를 복호화하여 임시 폴더에 저장한다(S308).
그리고 나서, 파일 실행부(180)는 메모리(175)에 로딩된 원본 DEX 파일의 네이티브 호출 함수를 이용하여 임시 폴더에 저장된 네이티브 라이브러리를 읽어들여 메모리(175)에 로딩하여(S310), 보호된 APK 파일을 실행시킨다(S312).
100 : APK 파일 관리 장치 110 : 파일 추출부
120 : 파일 난독화부 130 : 암호화부
140 : 라이브러리 생성부 150 : 호출 함수 수정부
160 : 임시 파일 생성부 170 : 파일 생성부
175 : 메모리 180 : 파일 실행부

Claims (6)

  1. 안드로이드 플랫폼에서의 APK 파일을 관리하는 장치에 있어서,
    APK 파일 내 원본 DEX 파일과 네이티브 라이브러리를 추출하는 파일 추출부;
    상기 원본 DEX 파일에 분석 툴 교란 기법을 적용시키는 파일 난독화부;
    상기 분석 툴 교란 기법이 적용된 원본 DEX 파일과 네이티브 라이브러리를 암호화시켜 상기 APK 파일 내 소정의 폴더에 저장하는 암호화부;
    암호화된 원본 DEX 파일과 네이티브 라이브러리를 복호화시키기 위한 복호화 키를 외부 서버 또는 로컬 상의 파일에서 읽어들일 수 있는 제 1 및 제 2 복호화 라이브러리를 생성하는 라이브러리 생성부;
    상기 소정의 폴더에 접근하여 암호화된 원본 DEX 파일을 추출하여 상기 제 1 복호화 라이브러리를 이용하여 복호화시켜 메모리에 로딩하도록 임시 DEX 파일을 생성하는 임시 파일 생성부; 및
    상기 임시 DEX 파일, 제 2 복호화 라이브러리 및 상기 암호화된 원본 DEX 파일과 네이티브 라이브러리를 이용하여 보호된 APK 파일을 생성하는 파일 생성부를 포함하며,
    상기 파일 난독화부는,
    상기 추출한 원본 DEX 파일 내 복수의 각 메소드에 디컴파일링을 방지하기 위한 하나 이상의 제 1 명령어를 삽입하고, 상기 제 1 명령어가 포함된 원본 DEX 파일이 디컴파일 되지 않도록 하기 위한 방해 코드인 제 2 명령어를 삽입하는 명령어 추가 모듈;
    상기 제 1 명령어과 제 2 명령어가 삽입된 원본 DEX 파일의 각 메소드를 분할하고, 상기 분할한 각 메소드의 위치를 변경하는 분할 및 위치 변경 모듈; 및
    상기 분할 및 위치가 변경된 각 메소드의 길이를 계산하고, 상기 길이 및 변경된 위치를 기반으로 상기 각 메소드가 실행될 때마다 실행되는 이동 명령어를 상기 각 메소드에 삽입하는 이동 명령어 삽입 모듈을 포함하는 것을 특징으로 하는 안드로이드 플랫폼에서의 APK 파일 관리 장치.
  2. 제1항에 있어서,
    상기 분석 툴 교란 기법이 적용된 원본 DEX 파일 내의 네이티브 호출 함수를 수정하는 호출 함수 수정부를 더 포함하는 것을 특징으로 하는 안드로이드 플랫폼에서의 APK 파일 관리 장치.
  3. 제2항에 있어서,
    상기 보호된 APK 파일 내 제 1 및 제 2 복호화 라이브러리의 실행을 통해 외부 서버 또는 로컬 상의 파일에서 복호화 키를 제공받고, 상기 임시 DEX 파일의 실행을 통해 상기 소정의 폴더에 저장된 암호화된 원본 DEX 파일을 복호화시켜 상기 메모리에 로딩함과 더불어, 상기 호출 함수를 이용하여 임시 폴더에 접근하여 복호화된 네이티브 라이브러리를 상기 메모리에 로딩하는 파일 실행부를 더 포함하는 것을 특징으로 하는 안드로이드 플랫폼에서의 APK 파일 관리 장치.
  4. 안드로이드 플랫폼에서의 APK 파일을 관리하는 방법에 있어서,
    파일 추출부에서 APK 파일 내 원본 DEX 파일과 네이티브 라이브러리를 추출하는 단계;
    상기 원본 DEX 파일에 분석 툴 교란 기법을 적용시키는 단계;
    암호화부에서 상기 분석 툴 교란 기법이 적용된 원본 DEX 파일과 네이티브 라이브러리를 암호화시켜 상기 APK 파일 내 소정의 폴더에 저장하는 단계;
    라이브러리 생성부에서 암호화된 원본 DEX 파일과 네이티브 라이브러리를 복호화시키기 위한 복호화 키를 외부 서버 또는 로컬 상의 파일에서 읽어들일 수 있는 제 1 및 제 2 복호화 라이브러리를 생성하는 단계;
    임시 파일 생성부에서 상기 소정의 폴더에 접근하여 암호화된 원본 DEX 파일을 추출하여 상기 제 1 복호화 라이브러리를 이용하여 복호화시켜 메모리에 로딩하도록 임시 DEX 파일을 생성하는 단계; 및
    파일 생성부에서 상기 임시 DEX 파일, 제 2 복호화 라이브러리 및 상기 암호화된 원본 DEX 파일과 네이티브 라이브러리를 이용하여 보호된 APK 파일을 생성하는 단계를 포함하며,
    상기 분석 툴 교란 기법을 적용시키는 단계는,
    상기 추출한 원본 DEX 파일 내 복수의 각 메소드에 디컴파일링을 방지하기 위한 하나 이상의 제 1 명령어를 삽입하고, 상기 제 1 명령어가 포함된 원본 DEX 파일이 디컴파일 되지 않도록 하기 위한 방해 코드인 제 2 명령어를 삽입하는 단계;
    상기 제 1 명령어과 제 2 명령어가 삽입된 원본 DEX 파일의 각 메소드를 분할하고, 상기 분할한 각 메소드의 위치를 변경하는 단계; 및
    상기 분할 및 위치가 변경된 각 메소드의 길이를 계산하고, 상기 길이 및 변경된 위치를 기반으로 상기 각 메소드가 실행될 때마다 실행되는 이동 명령어를 상기 각 메소드에 삽입하는 단계를 포함하는 것을 특징으로 하는 안드로이드 플랫폼에서의 APK 파일 관리 방법.
  5. 제4항에 있어서,
    상기 저장하는 단계 이전에, 호출 함수 수정부에서 상기 분석 툴 교란 기법이 적용된 원본 DEX 파일 내의 네이티브 호출 함수를 수정하는 단계를 더 포함하는 것을 특징으로 하는 안드로이드 플랫폼에서의 APK 파일 관리 방법.
  6. 제5항에 있어서,
    상기 보호된 APK 파일에 대한 실행 요청 시,
    파일 실행부에서 상기 보호된 APK 파일 내 제 1 및 제 2 복호화 라이브러리의 실행을 통해 외부 서버 또는 로컬 상의 파일에서 복호화 키를 제공받는 단계;
    상기 임시 DEX 파일의 실행을 통해 상기 소정의 폴더에 저장된 암호화된 원본 DEX 파일을 복호화시켜 상기 메모리에 로딩하는 단계; 및
    상기 호출 함수를 이용하여 임시 폴더에 접근하여 복호화된 네이티브 라이브러리를 상기 메모리에 로딩하는 단계; 및
    상기 메모리에 로딩된 네이티브 라이브러리와 원본 DEX 파일을 이용하여 APK 파일을 실행시키는 단계를 더 포함하는 것을 특징으로 하는 안드로이드 플랫폼에서의 APK 파일 관리 방법.

KR1020150066597A 2015-05-13 2015-05-13 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 KR101623096B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020150066597A KR101623096B1 (ko) 2015-05-13 2015-05-13 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150066597A KR101623096B1 (ko) 2015-05-13 2015-05-13 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법

Publications (1)

Publication Number Publication Date
KR101623096B1 true KR101623096B1 (ko) 2016-05-23

Family

ID=56104359

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150066597A KR101623096B1 (ko) 2015-05-13 2015-05-13 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법

Country Status (1)

Country Link
KR (1) KR101623096B1 (ko)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160118920A (ko) * 2015-04-04 2016-10-12 홍동철 Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체
KR20180004462A (ko) * 2016-07-04 2018-01-12 순천향대학교 산학협력단 키 백업을 사용한 랜섬웨어 방지 시스템 및 방법
KR20190043750A (ko) * 2017-10-19 2019-04-29 한국전자통신연구원 덱스 파일의 메모리 적재 장치 및 방법
KR101976993B1 (ko) * 2017-11-16 2019-05-10 숭실대학교산학협력단 모바일 코드 자동 분석을 위한 동적 바이너리 계측 코드추출장치 및 그 방법
KR20190074170A (ko) * 2017-12-19 2019-06-27 유재욱 이중 패킹을 이용한 코드 난독화
WO2019235663A1 (ko) * 2018-06-08 2019-12-12 라인플러스 주식회사 네이티브 라이브러리를 보호하는 방법 및 시스템
WO2020050455A1 (ko) * 2017-11-16 2020-03-12 숭실대학교산학협력단 시그니처 추출을 이용한 분석회피기법 자동 인식 장치 및 그 방법
CN111209001A (zh) * 2019-12-19 2020-05-29 福建升腾资讯有限公司 批量生成安卓各渠道apk的方法、系统、设备和介质
KR20200116812A (ko) * 2019-04-02 2020-10-13 (주)드림시큐리티 자바 라이브러리의 무결성을 보장하기 위한 방법 및 장치
KR102314829B1 (ko) 2021-01-29 2021-10-18 숭실대학교산학협력단 애플리케이션 내부의 데이터 유출 위험성 평가 방법, 이를 수행하기 위한 기록 매체 및 장치
US11928220B2 (en) 2021-01-29 2024-03-12 Foundation Of Soongsil University-Industry Cooperation Method for evaluating risk of data leakage in application, recording medium and device for performing the method
CN118133247A (zh) * 2024-03-05 2024-06-04 北京芯境科技有限责任公司 一种基于Android移动端的软件加固方法及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101518420B1 (ko) 2014-11-11 2015-05-07 주식회사 에스이웍스 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101518420B1 (ko) 2014-11-11 2015-05-07 주식회사 에스이웍스 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법

Cited By (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160118920A (ko) * 2015-04-04 2016-10-12 홍동철 Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체
KR102433011B1 (ko) 2015-04-04 2022-08-19 홍동철 Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체
KR20180004462A (ko) * 2016-07-04 2018-01-12 순천향대학교 산학협력단 키 백업을 사용한 랜섬웨어 방지 시스템 및 방법
KR101859823B1 (ko) 2016-07-04 2018-06-28 순천향대학교 산학협력단 키 백업을 사용한 랜섬웨어 방지 시스템 및 방법
KR20190043750A (ko) * 2017-10-19 2019-04-29 한국전자통신연구원 덱스 파일의 메모리 적재 장치 및 방법
KR102028091B1 (ko) * 2017-10-19 2019-10-02 한국전자통신연구원 덱스 파일의 메모리 적재 장치 및 방법
WO2020050455A1 (ko) * 2017-11-16 2020-03-12 숭실대학교산학협력단 시그니처 추출을 이용한 분석회피기법 자동 인식 장치 및 그 방법
KR101976993B1 (ko) * 2017-11-16 2019-05-10 숭실대학교산학협력단 모바일 코드 자동 분석을 위한 동적 바이너리 계측 코드추출장치 및 그 방법
US11934495B2 (en) 2017-11-16 2024-03-19 Foundation Of Soongsil University-Industry Cooperation Device for automatically identifying anti-analysis techniques by using signature extraction and method therefor
KR20190074170A (ko) * 2017-12-19 2019-06-27 유재욱 이중 패킹을 이용한 코드 난독화
KR102018960B1 (ko) 2017-12-19 2019-09-05 유재욱 이중 패킹을 이용한 코드 난독화
KR20210008469A (ko) * 2018-06-08 2021-01-22 라인플러스 주식회사 네이티브 라이브러리를 보호하는 방법 및 시스템
WO2019235663A1 (ko) * 2018-06-08 2019-12-12 라인플러스 주식회사 네이티브 라이브러리를 보호하는 방법 및 시스템
KR102677540B1 (ko) * 2018-06-08 2024-06-24 라인플러스 주식회사 네이티브 라이브러리를 보호하는 방법 및 시스템
KR20200116812A (ko) * 2019-04-02 2020-10-13 (주)드림시큐리티 자바 라이브러리의 무결성을 보장하기 위한 방법 및 장치
KR102243378B1 (ko) * 2019-04-02 2021-04-22 (주)드림시큐리티 자바 라이브러리의 무결성을 보장하기 위한 방법 및 장치
CN111209001A (zh) * 2019-12-19 2020-05-29 福建升腾资讯有限公司 批量生成安卓各渠道apk的方法、系统、设备和介质
KR102314829B1 (ko) 2021-01-29 2021-10-18 숭실대학교산학협력단 애플리케이션 내부의 데이터 유출 위험성 평가 방법, 이를 수행하기 위한 기록 매체 및 장치
US11928220B2 (en) 2021-01-29 2024-03-12 Foundation Of Soongsil University-Industry Cooperation Method for evaluating risk of data leakage in application, recording medium and device for performing the method
CN118133247A (zh) * 2024-03-05 2024-06-04 北京芯境科技有限责任公司 一种基于Android移动端的软件加固方法及系统

Similar Documents

Publication Publication Date Title
KR101623096B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
KR101518420B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
KR101545272B1 (ko) 안드로이드에서의 dex파일 바이너리 난독화 방법
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
KR102433011B1 (ko) Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
KR101391982B1 (ko) 안드로이드 어플리케이션의 디컴파일 방지를 위한 암호화 방법
US9396313B2 (en) Apparatus for tamper protection of application code and method thereof
KR101521765B1 (ko) 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법
WO2015058620A1 (en) Method and apparatus for generating installation package corresponding to an application and executing application
CN106599629B (zh) 一种安卓应用程序加固方法及装置
CN105095771B (zh) 一种共享目标文件的保护方法及装置
US20150095653A1 (en) Method and apparatus of creating application package, method and apparatus of executing application package, and recording medium storing application package
US20110271350A1 (en) method for protecting software
CN108399319B (zh) 源代码保护方法、应用服务器及计算机可读存储介质
US20170024230A1 (en) Method, apparatus, and computer-readable medium for ofuscating execution of an application on a virtual machine
CN109598107B (zh) 一种基于应用安装包文件的代码转换方法及装置
CN106415491B (zh) 一种应用保护方法、服务器以及终端
KR101861341B1 (ko) 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법
CN104866739A (zh) 安卓系统中应用程序加密方法及系统
CN107871066B (zh) 基于安卓系统的代码编译方法及装置
CN105279399A (zh) 应用防破解方法和装置
KR20180015535A (ko) 안드로이드 어플리케이션 패키지(apk) 내 dex 파일의 부분 암호화를 이용한 안드로이드 어플리케이션의 난독화 방법
KR101734663B1 (ko) 안드로이드 어플리케이션의 역공학 방지 방법 및 이를 수행하는 장치
KR101536920B1 (ko) Arm 프로세서 기반의 파일 난독화 방법

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: 20190508

Year of fee payment: 4