APKTool과 디컴파일

2023. 3. 10. 11:40

1. apktool이란?

: 안드로이드 어플리케이션의 APK 파일을 디컴파일하여 리소스 파일과 소스 코드를 추출하는 데 사용되는 오픈 소스 도구이다. 

- 난독화가 수행된 안드로이드 앱의 개발 코드를 원복 수준의 형태로 되돌릴 수 있게 도와주며, 앱을 다시 설치하여 실행시킬 수 있게 도와주는 역공학 도구이다.

-> 이 도구 사용하면 거의 오리지널 코드에 가깝게 디컴파일 할 수 있다.

+) 역공학(리버스 엔지니어링) : 프로그램을 복제하거나 기능 향상, 유지보수 등을 위해 분해해보는 과정이다. (역공학 단계에서 중요한 역할을 하는 것이 디컴파일 과정)

 

 

- AKP?

: 안드로이드 플랫폼에서 어플리케이션 설치를 위해 배포되는 패키지 파일이다.

- ZIP 파일 포맷 형태로 구성되어 있으며, 다양한 구성 요소들을 포함하고 있다.

 

<APK의 구성 요소>

- AndroidManifest.xml : 어플리케이션에 대한 설명 및 실행권한 등의 정보를 가진 파일이다.

- calsses.dex : 달빅 가상머신에서 동작하는 바이너리 실행 파일이다.

- /res : 컴파일되지 않은 리소스 파일들이 포함된 폴더이다.

- assets : 앱 실행에 필요한 자원들이 저장되는 디렉토리이다. (주로 용량이 큰 파일이 저장된다.)

- META-INF : 배포시 인증서로 서명한 내용이다.

- resources.arse : 컴파일된 리소스 파일이다.

- lib : 라이브러리 파일(*.so)이 저장되는 디렉토리이다.

 

+) 이미 만들어진 APK 파일의 소스를 수정할 수 있다.

수정하기 위해서는 먼저 디컴파일을 진행하여 수정하고, 수정이 끝나면 다시 앱으로 사용할 수 있도록 리패키징 과정을 통해 apk로 만들어줘야 한다.

- 디컴파일 : APK 파일이 어떤 소스들로 구성되어 있는지 확인하는 과정

- 리패키징 : 소스를 수정하고 다시 APK 파일로 만들어내는 과정

 

 


2. 디컴파일

디컴파일이란?

컴파일과는 반대로, 실행 가능한 프로그램 코드를 사람이 읽을 수 있는 고급 프로그래밍 언어로 변환하는 것이다.

- 역공학(리버스 엔지니어링)이라고도 부른다.

+)컴파일 : 사람이 이해할 수 있는 언어를 컴퓨터가 이해할 수 있는 언어(기계어)로 바꿔주는 것이다.

 

 

디컴파일의 원리

디컴파일의 원리를 이해하기 위해서는 컴파일 과정에 대해 먼저 이해가 필요하다.

예를 들어, C#이나 자바는 소스 코드를 바이트코드(중간언어)로 컴파일한 후, 이를 기계어로 변환한다. 

-> 여기서 바이트코드를 역어셈블하여 사람이 알 수 있도록 변환하는 것이 바로 디컴파일이다.

 

<안드로이드에서 디컴파일>

안드로이드는 APK파일을 가지고 디컴파일이 가능하다.

APK 파일은 자바 기반으로 이루어져 있기 때문에 소스코드를 컴파일한 후 바이트코드를 디컴파일할 수 있다.

APK 파일을 디컴파일하는 방법은 다양하다. 앞에서 말한 방식인 apktool을 사용하여 하거나, apk 파일을 저수준 언어(smail 코드)로 디컴파일 가능하다.

 

 

디컴파일을 하는 이유

디컴파일은 소스 코드를 더 이상 사용할 수 없을 때 컴퓨터 코드에서 수행 가능하다. 추가적으로 컴퓨터 보안, 상호 운용성 및 오류 수정을 위해 디컴파일을 사용한다.

 

<디컴파일이 사용되는 경우>

1. 손실된 소스 코드를 복구하는 경우 

2. 새로운 하드웨어 플랫폼으로 어플리케이션 마이그레이션하는 경우

3. 프로그램에서 바이러스 또는 악의적인 코드의 존재 여부를 결정하는 경우

4. 응용 프로그램 소유자가 수정할 수 없는 상황에 오류 수정을 위한 경우

5. 다른 사람의 소스 코드를 복구하는 경우

BELATED ARTICLES

more