# Android 앱 소스 난독화/암호화(Obfuscation) 종류


"Proguard면 충분하지!" 하고 살았던 그동안의 시간을 반성한다.

난독화의 종류는 다양하며 Proguard는 그 중 극히 일부분만 혹은 거의 보호를 못한다고 봐야 된다.



# 소스 난독화/암호화 종류

1. Renaming: 식별자 전환. 클래스/메소드의 이름을 a, b, c... 등 의미없는 이름으로 대체

2. Control Flow: 제어흐름 변환. A->B 와 같던 실행순서를 A->C->B 처럼 C구문을 삽입하는 기법

3. String Encryption: 문자열 암호화. 문자열을 암호화된 문자열로 대체하고 사용시 이를 치환

4. API Hiding: API 은닉. 특정 라이브러리 또는 메소드 호출을 Reflection으로 대체하여 숨긴다.

5. Class Encryption: 파일내용 전체를 암호화하여 저장해 두었다가 동적으로 복호화, 클래스 로더로 로딩



# 안드로이드 

6. DEX Encryption: Dalvik Executable 파일 자체를 암호화 한다.



난독화를 직접 할 수도 있다지만

아래와 같이 Proguard는 식별자 변환만 하고 나머지 툴은 모두 유료다.


 

 Proguard(무료)

DashOPro(유료)

Allatori(유료)

 DexGuard(유료)

 Renaming

O

O

O

O

 Control Flow

X

O

O

O

 String Encryption

X

O

O

O

 API hiding

X

X

X

O

 Class Encryption

X

X

X

O

 DEX Entryption

X

X

X

X






Reference

- Kim Jiyun, Go Namhyeon, Park Yongsu, A Code Concealment Method using Java Reflection and Dynamic Loading in Android, Journal of the Korea Institute of Information Security and Cryptology, Volume 25, Issue 1,  2015, pp.17-30

+ Recent posts