Transcript
Page 1: (Robust Anti Reverse Engineering Technique for Protecting ...kiise.or.kr/e_journal/2015/9/JOK/pdf/04.pdf · 그림 3 자바소스의 컴파일 및 실행과정 Fig. 3 Compilation

ISSN 2383-630X(Print) / ISSN 2383-6296(Online)

Journal of KIISE, Vol. 42, No. 9, pp. 1100-1108, 2015. 9

http://dx.doi.org/10.5626/JOK.2015.42.9.1100

††

학생회원

정 회 원

:

:

동의 학교 산정보부

[email protected]

동의 학교 컴퓨터공학과 교수(Dong-Eui Univ.)

[email protected]

(Corresponding author임)

심사완료 : 2015년 7월 16일

(Accepted 16 July 2015)

CopyrightⒸ2015 한국정보과학회ː개인 목 이나 교육 목 인 경우, 이 작물

의 체 는 일부에 한 복사본 혹은 디지털 사본의 제작을 허가합니다. 이 때,

사본은 상업 수단으로 사용할 수 없으며 첫 페이지에 본 문구와 출처를 반드시

명시해야 합니다. 이 외의 목 으로 복제, 배포, 출 , 송 등 모든 유형의 사용행

를 하는 경우에 하여는 사 에 허가를 얻고 비용을 지불해야 합니다.

정보과학회논문지 제42권 제9호(2015. 9)

논문 수 : 2015년 1월 5일

(Received 5 January 2015)

논문수정 : 2015년 7월 13일

(Revised 13 July 2015)

AES 알고리즘을 사용하여 안드로이드 어 리 이션을 보호하기 한

견고한 역공학 방지기법(Robust Anti Reverse Engineering Technique for Protecting

Android Applications using the AES Algorithm)

김 정 이 강 승††

(JungHyun Kim) (Kang Seung Lee)

요 약 안드로이드 운 체제의 실행 일인 classes.dex 일은 Java 바이트코드 형식이므로 구나 쉽

게 역공학으로 소스코드를 분석하고 수정이 가능하다. 이러한 특징 때문에 많은 어 리 이션들이 불법 복

제되어 유통됨에 따라 피해가 증가하고 있다. 이러한 문제를 해결하기 해 본 논문은 classes.dex 일을

AES 암호화 알고리즘으로 암호화하여 배포하고, 암호화된 어 리 이션을 복호화하여 실행하는 어 리

이션 불법복제를 방지하는 기법을 제안한다. 암호화 복호화에 사용되는 Key는 랜덤한 값인 Salt값를

기반으로 조합하여 Hash함수에 입하여 얻어진 Hash값을 Key로 사용하여 역공학 공격으로부터 견고함

을 더했다. 실험을 통해 제안한 기법이 어 리 이션의 불법복제를 방지하는데 효과 이고, 역공학 공격을

불가능하게 하여 어 리 이션의 원천기술 보호와 리패키징으로 인한 악성코드의 도 방지할 수 있음

을 보 다.

키워드: 안드로이드, 암호화, 불법복제, AES 알고리즘, 역공학

Abstract Classes.dex, which is the executable file for android operation system, has Java bite

code format, so that anyone can analyze and modify its source codes by using reverse engineering.

Due to this characteristic, many android applications using classes.dex as executable file have been

illegally copied and distributed, causing damage to the developers and software industry. To tackle

such ill-intended behavior, this paper proposes a technique to encrypt classes.dex file using an

AES(Advanced Encryption Standard) encryption algorithm and decrypts the applications encrypted in

such a manner in order to prevent reverse engineering of the applications. To reinforce the file against

reverse engineering attack, hash values that are obtained from substituting a hash equation through

the combination of salt values, are used for the keys for encrypting and decrypting classes.dex. The

experiments demonstrated that the proposed technique is effective in preventing the illegal duplication

of classes.dex-based android applications and reverse engineering attack. As a result, the proposed

technique can protect the source of an application and also prevent the spreading of malicious codes

due to repackaging attack.

Keywords: android, encryption, illegal copy, AES algorithm, reverse engineering

Page 2: (Robust Anti Reverse Engineering Technique for Protecting ...kiise.or.kr/e_journal/2015/9/JOK/pdf/04.pdf · 그림 3 자바소스의 컴파일 및 실행과정 Fig. 3 Compilation

AES 알고리즘을 사용하여 안드로이드 어 리 이션을 보호하기 한 견고한 역공학 방지기법 1101

1. 서 론

최근 반도체 집 도의 증가와 무선이동통신의 속도향

상 덕분에 이동 에도 스마트폰을 이용해 언제 어디서

나 빠른 인터넷을 즐길 수 있고, PC처럼 스마트폰에서

사용자가 사용하고 싶은 어 리 이션을 설치하여 사용

할 수 있는 편리함 때문에 스마트폰은 빠르게 보 되었

다. 스마트폰의 운 체제로 구 의 안드로이드와 애 의

iOS가 주를 이루고 있는데, 가트 의 보고서에 따르면

2013년 2분기 안드로이드는 79.0%의 유율, iOS는

14.2%의 유율을 보이고 있다[1]. 이 두 운 체제가

93.2%의 유율로 모든 스마트폰 운 체제 시장을 잠식

하고 있다고 해도 과언이 아니다.

가장 많은 유율을 가지고 있는 안드로이드의 경우

마켓을 통해 구매한 어 리 이션을 스마트폰과 PC를

연결하여 어 리 이션을 쉽게 빼내서 유포할 수 있다.

이 게 불법 복제된 어 리 이션은 인터넷을 통해 유

포되고 정당한 지불을 하지 않은 사용자도 인터넷을 통

해 얻은 어 리 이션을 자신의 안드로이드 스마트폰에

설치하여 사용할 수 있다.

이러한 행태 때문에 많은 개발자와 개발사들이 많은

자본과 시간을 투자해 힘들게 개발한 어 리 이션이

불법 복제되어 유통되어 많은 피해를 입게 되며, 불법

복제된 어 리 이션에 역공학(Reverse engineering)을

하여 원래 소스코드를 탈취하여 원천기술을 빼돌리거나

기존 소스코드에 악성코드를 추가하여 리패키징(Repac-

kaging) 후, 재배포해 사용자들의 개인정보 탈취

DDOS 공격에 사용될 좀비 디바이스로 만들어 더 큰

피해가 발생되고 있다[2]. 구 은 유료 어 리 이션 보

호를 해 LVL[3]을 제공하고 있지만, 이 역시 역공학

후에 얻어진 소스코드에서 LVL을 인증하는 코드를 삭

제하면 쉽게 우회할 수 있다. 그리고 구 에서 어 리

이션을 마켓에 등록하기 에 소스코드에 난독화(Ob-

fuscation) 도구인 Proguard[4]을 용할 것을 권장하고

있으나, 이 역시 역공학 후에 얻어진 소스코드의 분석시

간만 늘릴 뿐, 완벽한 보안은 되지 않는다. 이러한 안드

로이드 어 리 이션의 낮은 보안성 때문에 유명 어

리 이션을 사칭하는 악성코드 어 리 이션으로 인해

많은 피해사례가 증가하고 있다. 이에, 기존의 어 리

이션 라이선스 보호 방법, 불법 복제된 어 리 이션의

역공학 공격으로부터 안 하게 보호할 수 있는 더 효율

이고 용 가능한 어 리 이션 불법복제 방지기법이

요구된다.

본 논문은 마켓에 등록된 어 리 이션의 패키지

일인 APK 일에 포함된 어 리 이션 실행 일인

DEX 일을 AES 암호화 알고리즘으로 암호화하여 사

용하는 방법을 연구하여 어 리 이션이 유출되더라도

역공학 공격으로부터 보호할 수 있는 기법을 제안하고,

제안한 기법에 해 실험 평가하 다.

본 논문의 구성은 다음과 같다. 2장에서 역공학 방지

기법과 련된 배경연구에 해 알아보고 그에 한 특

징과 장 , 단 을 분석한다. 3장에서 AES 알고리즘을

사용한 어 리 이션 불법 복제 방지 시스템을 제안한

다. 4장에서는 제안한 어 리 이션 불법 복제 방지 시

스템의 실험 결과와 성능을 평가하며, 끝으로 5장에서

결론을 맺는다.

2. 배경 련연구

2.1 안드로이드 어 리 이션 보호기법

2.1.1 LVL(License Verification Library)

구 은 LVL을 사용하여 사용자가 어 리 이션을 사

용할 수 있는 권한이 있는지를 인증하는 기능을 가지는

라이 러리로 무료로 지원되며, 라이센스 검증을 한

서버를 구 에서 제공한다[3]. 개발자 개발사가 어

리 이션을 개발할 때 구 에서 제공하는 LVL을 활용

하여 코드를 추가하면, 사용자가 어 리 이션을 실행할

때 “마켓 라이센스 서버”에 장된 구매 기록에 기반

해서 정상 으로 구매한 사용자인지 확인해주는 방식이

다. 마켓 어 리 이션의 라이센싱 서비스는, 네트워크

통신이 가능할 때 “마켓 라이센스 서버”와 통신하여 사

용자 정보와 사용자 단말기에 설치된 어 리 이션에

한 정보를 송신하고, “마켓 라이센스 서버”는 사용자

의 구매 이력을 조회해 이를 확인하여 라이센스 상태를

라이센싱 서비스로 송하게 된다. LVL이 용된 어

리 이션은 매번 실행할 때 마다 직 “마켓 라이센스

서버”와 통신을 해서 인증 차를 거치는 것이 아니라

마켓 어 리 이션과 직 로세스 통신하여 인증을

하게 된다. LVL이 용된 어 리 이션과 마켓 어 리

이션의 통신으로 인증 과정이 이루어지므로 LVL이

용된 어 리 이션은 별도의 네트워크 기능의 퍼미션

을 가질 필요가 없다. 하지만 이러한 LVL은 역공학에

의해 얻어진 소스코드에서 인증 차를 거치는 코드를

삭제하거나 인증결과가 항상 옳은 값을 받도록 수정하

여 “마켓 라이센스 서버”의 인증을 무의미하게 하는 방

법 때문에 큰 효과를 발휘하지 못하고 있다[5].

2.1.2 ARM(Application Rights Management)

서드 티 어 리 이션 마켓 하나인 SKT의 T

Store에는 LVL과 유사한 어 리 이션 보호 라이 러

리인 ARM이 존재한다. ARM의 경우 안드로이드 디바

이스 내에 백그라운드로 동작 인 “ARM Client Service”

와 “T Store Server”가 통신을 하여 인증과정을 거치

게 된다[6]. 하지만 T Store의 ARM 역시 역공학을 통

Page 3: (Robust Anti Reverse Engineering Technique for Protecting ...kiise.or.kr/e_journal/2015/9/JOK/pdf/04.pdf · 그림 3 자바소스의 컴파일 및 실행과정 Fig. 3 Compilation

1102 정보과학회논문지 제42권 제9호(2015. 9)

해 얻어진 소스코드에서 LVL의 우회 방법과 같이 “T

Store Server“로부터 수신한 메시지를 확인하는 부분의

소스코드를 조작하여 우회하는 방법이 있다[7].

구 의 LVL과 T Store의 ARM은 서버에 장된 구

매이력을 근거해서 사용자의 어 리 이션이 정상구매

되었는지 여부를 단한다. 하지만 이러한 방법은 APK

일 역공학에 의해서 얻어진 소스코드에서 인증과정을

우회하도록 소스코드를 수정하면 쉽게 인증 차를 무시

할 수 있으므로 어 리 이션 불법 복제 방지에서 큰

효과를 얻지 못하고 있다.

2.1.3 난독화

구 에서 LVL이 역공학 기술에 취약 을 보이고 있

어서, 그 단 을 보완하기 해 구 은 기존에 자바 기

반의 어 리 이션의 난독화 도구로 사용된 Proguard[4]

를 안드로이드 어 리 이션 개발 후 마켓에 등록하기

에 사용할 것을 권장하고 있다. 안드로이드 SDK r08

버 과 ADT 8.0.1 버 부터 기본 으로 Proguard를

내장하여 배포하고 있다.

Proguard는 변수이름, 함수이름, 리소스 일이름 등

을 의미 없는 이름들로 체하는 방식의 심볼 난독화와

난독화 사 을 이용한 약된 키워드를 난독화할 수 있

는 기능을 지원하고 있다. Proguard를 비롯해 문자열

상수의 난독화나 제어 흐름 난독화 등 여러 가지 난독

화 기법들은 공격자가 역공학 후 얻어지는 소스코드를

분석하는 것에 많은 시간과 노력을 들이게 할 뿐, 완벽

하게 역공학으로부터 소스코드를 보호하지 못하는 단

을 가지고 있다.

2.2 암호화를 이용한 역공학 방지 시스템의 기존연구

2.2.1 XOR 암호화 알고리즘을 사용한 DEX 일 역

공학 방지 시스템

[8]에서 제안하는 기법은 안드로이드 Dalvik에서 동작

하는 실행 일인 DEX 일을 XOR 연산으로 일 체

를 암호화하고, 스마트폰에서 설치 실행 시에 복호화

하는 기법이다.

그림 1에 나온 개념도처럼 [8]은 안드로이드 스마트폰

사용자가 마켓에 어 리 이션 구매 요청을 하면, 마켓

에서 구매정보를 확인 후, 정상 으로 구매가 이루어졌

으면 구매한 어 리 이션을 XOR 연산으로 암호화를

한다. 이 때, 암호화에 사용되는 키는, 사용자의 스마트

폰에 장착되어 있는 SIM카드에 있는 시리얼번호를 사

용한다.

암호화가 완료된 어 리 이션은 사용자에게 송되

고 스마트폰에서는 그림 2와 같은 차에 의해서 설치

실행이 된다.

스마트폰에서 어 리 이션 송이 완료되면 실행을

한다. 최 실행의 경우 스마트폰에 내장된 복호화 모듈

그림 1 DEX 일에 XOR 암호화가 용된 어 리 이

션 구매 차

Fig. 1 Procedure for the purchase of application in which

XOR encryption is applied to the DEX file

그림 2 XOR 암호화된 DEX 일의 설치 실행 차

Fig. 2 Procedure for installing and running the DEX

file encrypted with XOR

에 의해서 DEX 일이 복호화가 되고 설치가 진행된

다. 설치 완료 후에는 DEX 일을 다시 암호화 하여 보

하고, 어 리 이션 실행 시 복호화하여 실행하는

차를 가진다.

2.2.2 AES 암호화 알고리즘을 사용한 클래스 일 역

공학 방지 시스템

[9]가 제안하는 기법은 AES 암호화 알고리즘을 사용

하여 자바 클래스 일을 암호화하여 역공학을 방지하

는 기법이다. 자바언어로 작성된 .java 소스코드는 그림

3처럼 javac에 의해 컴 일되어서 .class 일인 바이트

코드로 변환된다. 이 class 일은 JRE에 있는 Class-

loader에 의해서 로딩되고 실행된다. 바이트코드는 기계

어와 1:1로 매칭되는 명령어들의 집합이기 때문에 class-

loader를 통하여 바이트코드는 다시 재해석되어 기계어

로 번역되어서 JVM에서 실행된다.

자바는 클래스를 참조할 때, 해당 클래스를 로드하고

Page 4: (Robust Anti Reverse Engineering Technique for Protecting ...kiise.or.kr/e_journal/2015/9/JOK/pdf/04.pdf · 그림 3 자바소스의 컴파일 및 실행과정 Fig. 3 Compilation

AES 알고리즘을 사용하여 안드로이드 어 리 이션을 보호하기 한 견고한 역공학 방지기법 1103

그림 3 자바소스의 컴 일 실행과정

Fig. 3 Compilation and execution process of the Java source

그림 4 Class loader 처리과정

Fig. 4 Processing of Class loader

링크하는 특징이 있다. 이러한 처리를 담당하는 부분이

Classloader이다. Classloader는 그림 4와 같은 처리과

정을 거치게 된다.

처음으로 클래스 일을 가져와 JVM의 메모리에 로딩

한다. 읽어드린 클래스가 자바언어명세 JVM 명세에

명시된 로 잘 구성되었는지 검사하는 Verifying 과정

을 거치고, 클래스가 필요로 하는 메모리를 할당하고 클

래스에서 정의된 필드, 메소드, 인터페이스들을 나타내

는 데이터 구조를 비하는 Prepairing 단계를 거치게

된다. 그런 뒤, 클래스의 상수 풀의 모든 심볼릭 퍼런

스를 다이 트 퍼런스로 변경하는 Resolving 과정을

거친다.

자바에서는 Classloader를 상속할 수 있도록 지원한다.

[9]의 연구는 Classloader를 상속받아 복호화 모듈을 구

한다. [9]에서 제안하는 클래스 암호화 방식은 컴 일

이 된 클래스 일에 용되며 복호화는 Classloader에

서 실행된다.

[9]의 연구에서 클래스 일 암호화는 그림 5의 처리과

정을 거쳐서 암호화가 진행된다.

자바언어로 작성된 .java 일이 암호화 모듈에 들어가

면 .java 일이 컴 일 되어서 .class 일이 되고 이

.class 일을 AES 암호화 알고리즘을 사용하여 암호화

하여, 암호화된 .class 일을 배포하게 된다. 이 게 배포

된 클래스 일을 받아서 실행하는 JRE환경에서는 그림 6

과 같은 복호화과정을 거치는 복호화모듈이 실행된다.

AES암호화 된 클래스 일은 Classloader에 의해서

로드되게 되고 Classloader안에서 우선 AES 복호화 과

그림 5 클래스 일 AES 암호화 처리과정

Fig. 5 AES Encryption processing of class file

그림 6 클래스 일 AES 복호화 처리과정

Fig. 6 AES Decryption processing of class file

정을 거치게 된다. 그러면 복호화된 클래스 일을 얻을

수 있고, 클래스 일의 바이트코드는 재해석되어 기계어

로 번역되어 JVM에서 실행된다.

2.2.3 XOR 암호화 알고리즘을 사용한 DEX 일 역공

학 방지 시스템의 단

첫 번째 단 으로 XOR연산의 취약 을 들 수 있다.

[8]의 연구는 암호화 알고리즘 에 가장 단순한 알고리

즘인 XOR연산을 사용하여 DEX 일을 암호화 하 다.

[8]의 연구가 진행될 당시 스마트폰의 하드웨어 스펙은

많이 제한 이어서 속도향상을 해 XOR연산을 사용하

지만, XOR연산은 매우 단순한 구조이므로 보안에 취

약하다.

두 번째로 Key의 취약 을 들 수 있다. [8]의 암호화

에 사용된 Key는, 스마트폰에 부착된 SIM카드의 시리

얼번호를 Key로 사용한다. 이 경우, 구매한 어 리 이

션을 다른 스마트폰에 복제하여 사용할 때 스마트폰 별

로 SIM카드의 시리얼번호가 달라서 복호화에 실패해

복제를 차단할 수는 있지만, SIM카드의 시리얼번호는

쉽게 구할 수 있는 데이터이므로 암호화의 Key로 사용

에 한계가 있다.

2.2.4 AES 암호화 알고리즘을 사용한 자바 클래스

일 역공학 방지 시스템의 단

첫 번째 단 으로 암호화 라이 러리로 JCE를 사용

한 이다. [9]의 연구에서 암호화 라이 러리로 JCE를

사용하여 AES 암호화 복호화를 진행한다. JCE의

경우 자바언어로 만들어진 암호화 라이 러리이다. 자바

라는 고 언어로 만들어진 라이 러리이다 보니 C/C++

기반으로 만들어진 라이 러리보다 속도가 많이 느리다.

두 번째로 JVM과 Dalvik은 서로 다른 구조의 VM이

다. 자바 어 리 이션의 VM인 JVM과 안드로이드 어

Page 5: (Robust Anti Reverse Engineering Technique for Protecting ...kiise.or.kr/e_journal/2015/9/JOK/pdf/04.pdf · 그림 3 자바소스의 컴파일 및 실행과정 Fig. 3 Compilation

1104 정보과학회논문지 제42권 제9호(2015. 9)

그림 7 어 리 이션 구매 암호화 과정

Fig. 7 Procedure for purchasing and encrypting an application

리 이션의 VM인 Dalvik은 구조 으로 차이 이 있

다. Dalvik은 모바일 환경에 최 화 되도록 지스터 기

반으로 만든 VM이다. [9]에서 사용된 Classloader를 상

속받아 복호화모듈을 만드는 것은 안드로이드에 용할

수가 없다.

3. AES 알고리즘을 사용한 안드로이드 어

리 이션 불법복제 방지기법 설계

본 논문은 안드로이드 어 리 이션의 실행 일인 DEX

일을 AES 암호화 알고리즘으로 암호화하여 역공학으

로부터 어 리 이션을 보호하는 기법을 제안한다.

본 논문에서 제안하는 기법은 어 리 이션의 구매

암호화 단계와 어 리 이션의 설치 실행 단계로

구성된다.

3.1 어 리 이션 구매 암호화 과정

제안하는 어 리 이션 구매 암호화 과정은 그림 7

과 같다. 사용자가 스마트폰에서 서버측에 어 리 이션

구매요청을 하게 되면, 서버는 해당 요청이 정당한 구매

차를 통한 요청인지 확인한 후, 정당한 구매요청이 아

니면 사용자에게 실패 메시지를 보내게 되고, 구매요청이

정당하면 DEX 일을 AES로 암호화하여 APK 일로

패키징하여 사용자에게 송한다. 암호화에 사용될 Key

생성 암호화 과정은 아래 에서 자세히 기술한다.

3.1.1 Key 생성

[8]의 경우 Key를 스마트폰 SIM카드 시리얼번호로

사용한다. SIM카드 시리얼번호의 경우 공격자가 쉽게

얻을 수 있는 데이터이므로 보안에 취약하지만, 본 논문

에서는 사용자의 SIM카드 시리얼번호에 Salt(난수 생성

기에서 생성한 임의의 값)를 조합하여 해시함수에 입

하여 얻은 해시 값을 암호화 Key로 사용한다.

Key생성은 우선 Salt를 생성하는 것으로 시작된다.

비 번호, 암호화 Key와 같이 요한 값을 보 할 때

해시를 하여 해시값을 장한다. 하지만 이 방법은 같은

비 번호는 해시 결과도 같다는 단 이 있다. 이 단 을

보완하는 것이 Password Salt이다. Password Salt는

랜덤한 값을 비 번호와 조합하여 해시하는 것이다. 그

러면 해시 결과가 항상 랜덤하게 장될 것이다. 그림 8

에서 란색으로 표시된 부분이 Salt를 만드는 과정이

다. 난수생성기에 의해 만들어진 랜덤한 값을 사용자정

보에 있는 SIM카드 시리얼번호와 조합하는 것이다.

다음은 조합된 Key를 해시함수를 사용하여 랜덤한

Key를 만든다. 그림 8의 록색으로 표시된 부분을 보

면 에서 만들어진 Salt와 SIM카드 시리얼번호를 조

합한 값을 SHA-128 해시함수에 입한다. SHA-128

해시함수는 가변 인 길이의 입력 데이터를 128비트의

해시값으로 출력한다. 이 게 출력된 결과 값이 AES암

호화에 사용되는 Key값이다.

3.1.2 classes.dex 일 AES 암호화

안드로이드 VM인 Dalvik에서 실행 가능한 실행 일

인 classes.dex 일은 안드로이드 어 리 이션 하나당

하나씩 존재한다. 안드로이드 어 리 이션 개발 시 작

성한 클래스가 여러 개이더라도 컴 일과정을 거치면

하나의 classes.dex 일로 존재한다. 본 논문에서는 실

행 일인 classes.dex 일을 암호화하여 배포한다.

3.1.1 에서 생성한 해시값을 AES 암호화 알고리즘의

Key로 사용하여 classes.dex 일을 암호화한다. 본 논

문에서 해시함수를 SHA-128을 사용한 해시결과 값이

128비트이어서 암호화에 사용되는 Key길이도 128비트

Page 6: (Robust Anti Reverse Engineering Technique for Protecting ...kiise.or.kr/e_journal/2015/9/JOK/pdf/04.pdf · 그림 3 자바소스의 컴파일 및 실행과정 Fig. 3 Compilation

AES 알고리즘을 사용하여 안드로이드 어 리 이션을 보호하기 한 견고한 역공학 방지기법 1105

그림 8 Key생성 DEX 일 암호화 과정

Fig. 8 Process of Key generation and DEX file encryption

이어야 함으로 암호화에 사용되는 알고리즘을 AES-128

이다. 그림 8에서 보라색으로 표시된 부분이 AES 암호

화과정을 나타낸다.

3.1.3 APK 패키징 배포

그림 8에서 빨간색으로 표시된 부분을 보면 암호화된

DEX 일을 패키징을 하고 있다. classes.dex 일에는

소스코드와 UI에 련된 일들만 들어있다. 어 리 이

션은 classes.dex 일 외에 AndroidMenifest.xml 일과

여러 가지 그림 소리 일들이 들어있는 Resource

일들이 있다. 이러한 일들을 모두 ZIP포맷으로 압축

하여 패키징한다. 이 게 생성된 일이 APK 일이다.

이 APK 일과 3.1.1 에서 생성한 Salt를 함께 사용자

에게 배포한다. 사용자도 스마트폰에 어 리 이션을 설

치 실행하려면 복호화를 해야 하는데 사용자는 복호

화에 사용될 Key값의 일부인 Salt를 모르기 때문에

APK를 배포할 때 Salt도 같이 첨부하여 배포한다.

3.2 어 리 이션 설치 실행과정

서버로부터 송받은 Salt는 격리공간에 장되어서 안

하게 보 되고, APK 일은 Package Manager에 의해

서 실행되고 설치된다. 본 은 그림 9와 같이 크게 두 가지

의 차로 나뉜다. 어 리 이션을 스마트폰에 설치하는

과정과 설치된 어 리 이션을 실행하는 과정으로 나뉜다.

3.2.1 어 리 이션 설치과정

서버로부터 송받은 APK 일은 Activity 서비스를

통해 실행되며, 아직 스마트폰에 설치되지 않은 어 리

이션은 Package Manager를 통해 설치과정이 진행된다.

첫 번째로 classes.dex 일을 추출하는데, 서버에서

송받은 APK 일은 실행 일인 classes.dex 일과 이

미지, 사운드 등의 리소스 일들과 AndroidMenifest.

xml 일 등이 ZIP포맷으로 묶어져 있는 일이다. 우선

그림 9 어 리 이션 설치 실행과정

Fig. 9 Process of application installation and execution

암호화가 되어있는 classes.dex 일을 추출해서 복호화

를 진행해야 하므로 classes.dex 일을 추출한다. 어

리 이션 설치 시 Package Manager가 classes.dex

일을 얻어오는 코드는 AOSP 소스 \dalvik\dexopt\

OptMain.c에 존재하는데, dexZipExtractEntrytoFile

(&zippy, zipEntry, cacheFd)함수를 통해 APK 일로

부터 실제 classes.dex 일을 얻어오게 된다.

두 번째 단계로 Key를 조합한다. 얻어온 classes.dex

일은 서버에서 AES 암호화가 되어서 송된 일이

다. 정상 인 설치과정을 거치기 해서는 classes.dex

일을 복호화해야 하는데, 복호화에는 Key가 필요하다.

서버에서 사용한 Key는 SIM카드 시리얼번호와 Salt를

조합하여 해시한 결과 값을 Key로 사용하 다. 안드로

이드 API에 SIM카드의 시리얼번호를 얻을 수 있는

Page 7: (Robust Anti Reverse Engineering Technique for Protecting ...kiise.or.kr/e_journal/2015/9/JOK/pdf/04.pdf · 그림 3 자바소스의 컴파일 및 실행과정 Fig. 3 Compilation

1106 정보과학회논문지 제42권 제9호(2015. 9)

getSimSerialNumber()라는 함수가 존재한다. 이 함수

를 사용하면 20자리의 SIM Card Serial no를 얻을 수

있다. 그리고 격리공간에 장된 Salt와 조합하여 SHA-

128 해시에 입하여 해시 값을 얻어서 복호화 Key로

사용하여 classes.dex 일을 복호화한다.

세 번째로 Optimize, Verify 과정을 거친다. 복호화가

완료되면 Package Manager에 의해서 classes.dex 일

이 스마트폰에 최 화 되게끔 Optimize Verify과정

을 거치게 되고, 이 과정이 완료되면 ODEX(Optimize

DEX) 일이 생성된다. ODEX 일은 스마트폰의 \data\

dalvik-cache\ 디 토리에 장되며, 장되는 일명은

data@[email protected]@classes.dex이다.

마지막으로 ODEX 일의 암호화가 이루어진다. Opti-

mize가 끝나고 생성된 ODEX 일은 다시 암호화해서

장해야 한다. 암호화해서 장하지 않으면 설치 시 복

호화된 ODEX 일을 불법복제하면 쉽게 역공학이 가능

하기 때문에 사용하지 않을 때는 암호화를 해서 보 을

하도록 한다. 앞에서 만든 Key를 사용해서 AES 알고

리즘으로 암호화를 하여 \data\dalvik-cache\ 디 토리

에 장한다. 생성된 ODEX 일을 암호화하려면 Opti-

mize를 하는dvmContinueOptimization()함수가 있는 if

문이 끝나는 부분에 암호화 모듈을 삽입하여 생성된

ODEX 일을 암호화한다.

3.2.2 어 리 이션 실행과정

스마트폰에 설치되어있는 어 리 이션은 설치 시 만

들어져 있는 ODEX 일을 사용하여 실행한다. ODEX

일은 3.1.1 의 어 리 이션 설치과정이 끝난 후

\data\dalvik-cache\ 디 토리에 data@app@Application-

[email protected]의 이름으로 장되어 있다. ODEX

일을 실제로 읽어서 로드하는 부분은 \dalvik\vm\ana-

lysis 디 토리의 DexPrepare.cpp 일에 있다. Dex-

Prepare.cpp 일에 있는 open() 함수에서 ODEX 일

을 로드하므로 open() 함수 뒤에 암호화된 ODEX 일

을 복호화하는 코드를 삽입하면 암호화되어서 장된

ODEX 일을 복호화하여 실행할 수 있다. 복호화할 때

사용하는 Key는 3.2.1 에서 생성한 Key 사용한다.

4. 실험 고찰

4.1 실험환경

제안한 기법을 구 한 환경은 AOSP 소스의 원할한

컴 일 테스트를 해 Linux환경에서 실험을 진행하

으며, Android Version은 Jelly Been 4.1.2을 사용하

다. 빌드된 이미지 일을 테스트할 Target Device는

구 에서 제공하는 Emulator를 사용하 다. 실험은 크

게 두 가지로 진행하 다. 첫 번째로 AOSP 소스에 암

호화, 복호화 모듈의 삽입 과 후를 비교하고, 두 번째

로 암호화된 classes.dex 일의 내용을 분석하여 역공학

가능여부를 알아봤다.

4.2 실험결과

4.2.1 암호화, 복호화 모듈 삽입 유무에 따른 어 리

이션 실행결과

AOSP 소스에 암호화, 복호화 모듈을 삽입하고 어

리 이션을 실행하여 실험하 다. 실험에서 사용한 어

리 이션은 동의 학교 어 리 이션과 간단한 문자열

출력을 하는 HelloWorld 어 리 이션이다.

실험결과, AOSP 소스에 암호화, 복호화 모듈이 삽입

된 안드로이드 스마트폰에서는 암호화된 어 리 이션

이 그림 10처럼 정상 으로 실행되었다.

하지만, AOSP 소스에 암호화. 복호화 모듈을 제거하

고 어 리 이션을 실행한 결과는 그림 11에서 확인할

수 있듯이 어 리 이션이 정상 으로 실행이 되지 않

고 꺼져버렸다. 이로서, 암호화 되어있는 어 리 이션

을 불법 복제하여 암호화, 복호화 모듈이 없는 안드로이

드 스마트폰에서 실행하면 암호화된 어 리 이션이 정

상 으로 실행이 되지 않음을 그림 10, 그림 11의 실험

결과를 통해서 확인하 다.

4.2.2 classes.dex 일 암호화 과 후의 비교

classes.dex 일의 AES 암호화 과 후를 Hexa

Viewer를 사용하여 비교하 다. 그림 12는 DEX 일

AES 암호화 의 Hexa 값과 문자열 값이고, 그림 13은

DEX 일의 AES 암호화 후의 Hexa 값과 문자열이다.

그림 12의 암호화 Hexa값을 보면 00000009B650h 주

소를 보면 “63 6F 6D 2F 69 72 65 61 6C 2F 64 65 75

2F 61 6B”의 값과 정상 인 문자열이 있다. 하지만 그림

13의 암호화 후 Hexa 값을 보면 동일한 00000009B650h

주소에서 “EC 53 C6 11 DA 1E 73 F1 C2 50 00 29 7D

C3 D1 33”의 값들과 깨져있는 문자열을 확인할 수 있다.

이 실험에서 DEX 일은 AES암호화 과정을 거치면

서 다른 일로 변환되어 본래의 기능을 상실하는

것을 확인할 수 있다.

4.3 기존연구와 비교

classes.dex 일을 암호화 하여 보호하는 기법을 제안

한 [8]의 연구와 본 논문에서 제안한 기법을 비교하여

성능을 분석한다.

표 1에서 비교하 듯이 [8]의 기법은 비 키 암호화

알고리즘 가장 단순하고 약한 XOR 알고리즘을 사용

해서 사공격으로 쉽게 해독이 가능하다. 하지만 본 논

문에서 제안한 기법의 경우, 재 비 키 암호화 알고리

즘의 표 으로 사용되고 있는 AES 알고리즘으로 암호

화를 하여 사공격이 불가능하다. 그리고 제안한 기법

은 [8]과 다르게 난수를 베이스로 하는 Salt와 SIM카드

시리얼번호를 조합한 뒤 Hash함수를 사용하여 Key를

Page 8: (Robust Anti Reverse Engineering Technique for Protecting ...kiise.or.kr/e_journal/2015/9/JOK/pdf/04.pdf · 그림 3 자바소스의 컴파일 및 실행과정 Fig. 3 Compilation

AES 알고리즘을 사용하여 안드로이드 어 리 이션을 보호하기 한 견고한 역공학 방지기법 1107

그림 10 복호화 모듈 삽입 후 실행결과

Fig. 10 Result of insertion of decryption module

그림 11 모듈 제거 후 실행결과

Fig. 11 Result of deletion of decryption module

그림 12 암호화 의 DEX 일

Fig. 12 Before encrypt DEX file

그림 13 암호화 후의 DEX 일

Fig. 13 After encrypt DEX file

Page 9: (Robust Anti Reverse Engineering Technique for Protecting ...kiise.or.kr/e_journal/2015/9/JOK/pdf/04.pdf · 그림 3 자바소스의 컴파일 및 실행과정 Fig. 3 Compilation

1108 정보과학회논문지 제42권 제9호(2015. 9)

표 1 기존연구와 비교

Table 1 Comparison with previous research

[8]’s scheme Proposed scheme

Possibility of brute

force attackpossible impossible

Generate of random key X O

Use hash algorithm X O

Possibility of decryption

for leaked sim cardpossible impossible

Possibility of exposure

for wiretappossible possible

생성하 으므로 Key 생성에 사용된 SIM카드 시리얼번

호가 유출되어도 Key가 안 하다. 하지만 비교한 두 기

법 모두 서버에서 Key 배송도 도청에 의해 Key가

노출될 가능성이 있다. 그러므로 공개키 암호화 알고리

즘을 사용하여 Key를 암호화할 필요가 있다.

5. 결 론

본 논문은 AES 암호화 알고리즘을 사용하여 안드로

이드 어 리 이션 불법복제 방지기법에 해 연구하고

설계하 다. 제안하는 기법은 안드로이드 Dalvik VM의

실행 일인 DEX 일을 AES 알고리즘으로 암호화 하

여 보 해 APK 일이 탈취되어도 역공학 공격으로부터

안 하도록 설계하 다. 기존의 연구는 XOR 암호화 알

고리즘을 SIM카드 시리얼번호를 Key값으로 암호화하

여 어 리 이션을 보호하 으나, 본 논문은 강력한 공

개키 알고리즘인 AES 알고리즘을 사용하여 암호화하

다. 그리고 쉽게 탈취 가능한 SIM카드 시리얼번호

신, 난수생성기로 만든 Salt와 SIM카드 시리얼번호를

조합한 뒤, SHA-128 해시 함수에 입하여 얻은 해시

값을 암호화 Key로 사용하여 기존 연구의 Key보다 안

하게 설계하 다.

암호화된 어 리 이션을 AOSP 소스에 복호화 모듈

을 삽입하기 과 삽입한 후로 나눠서 실행하여 암호화

된 어 리 이션의 실행 여부를 실험한 결과, 제안한 기

법이 용된 AOSP 소스에는 어 리 이션이 정상 으

로 동작하 지만, 복호화 모듈을 제거한 AOSP 소스에

는 어 리 이션이 동작하지 않는 것을 확인하 다. 그

리고 암호화되어 보 된 DEX 일을 불법 복제하여 역

공학 공격을 하여도 DEX 일이 다른 값들로 바

어져 있어서 정상 인 사용이 불가능하다. 이로서 제안

한 기법이 어 리 이션 불법복제와 역공학 공격으로부

터 안 하다는 것을 확인하 다.

References

[ 1 ] Gartner. (2013, August 14). Worldwide Smartphone

Sales to End Users by Operating System in 2Q13

[Online]. Available: http://www.gartner.com/newsroom

/id/2573415

[ 2 ] AhnLab, Analysis of mobile malicious code, Vol.26,

pp. 25-30. ASEC Report, Korea, Mar. 2012.

[ 3 ] Google Android Developer. LVL(License Verifica-

tion Library) Overview [Online]. Available: http://

developer.android.com/google/play/licensing/overvie

w.html

[ 4 ] Google Android Developer. Proguard [Online]. Avail-

able: http://developer.android.com/tools/help/proguard.

html

[ 5 ] Justin Case. (2012, June 5). Google's Android Market

License Verification Easily Circumvented, Will Not

Stop Pirates [Online]. Available: http://www.android-

police.com/2010/08/23/exclusive-report-googles-andro

id-market-license-verification-easily-circumvented

-will-not-stop-pirates/

[ 6 ] T Store Developer Center. Android Application Rights

Management 3.0 Developer Guide. Version 1.0.2.,

pp. 7-10. SK Planet, Korea, Apr. 2013.

[ 7 ] Ko, Myung Han, A Study of the Security Verifi-

cation Measures of a Smartphone Application. The

Graduate School of Information & Communications

Sungkyunkwan University, Feb. 2013.

[ 8 ] Kim, Hee Moon, Protection Framework for Android

Application by Encrypting DEX files. The Graduate

School of Hanyang University, Feb. 2011.

[ 9 ] Choi, Chul Hee, AES encryption algorithm with tech-

niques to prevent Java decompiling. The Graduate

School of Information Chung-Ang University, Aug.

2012.

김 정

2012년 2월 동의 학교 공과 학 컴퓨터

공학과(공학사). 2014년 2월 동의 학교

학원 컴퓨터공학과(공학석사). 2014년

5월~11월 이 루시큐리티 연구원. 2014

년 12월~ 재 동의 학교 산정보원

직원. 심분야는 정보보호, 안드로이드,

역공학

이 강 승

1985년 2월 연세 학교 자공학과(공학

사). 1991년 2월 연세 학교 학원 자

공(공학석사). 1995년 8월 연세 하교

학원 자 공(공학박사). 2000년 1

월~2001년 2월 Stanford University

기공학과 빙교수. 1996년 3월~ 재

동의 학교 공과 학 컴퓨터공학과 교수 심분야는 정보보

호, 멀티미디어신호처리, 응신호처리, DSP응용


Recommended