보안

Android 앱 디컴파일 과정 및 방법 정리

Zibro 2025. 5. 22. 21:52
728x90
반응형

안드로이드 앱의 APK 파일을 분석하거나 내부 구조를 확인할 때 디컴파일(decompile)이 유용합니다. 이 포스팅에서는 디컴파일의 개념과 사용되는 주요 도구들에 대한 설명을 포함하여, 맥북에서 HomeBrew를 통해 APK 파일을 디컴파일하는 방법을 단계별로 안내하겠습니다.

디컴파일이란?

디컴파일(Decompile)이란 실행 가능한 바이너리 파일(예: APK)을 원본 소스 코드와 유사한 형태의 코드로 변환하는 작업입니다. 디컴파일을 통해 앱의 구조, 사용된 기술, 그리고 보안 취약점 등을 분석할 수 있습니다.

728x90

APK 디컴파일에 사용되는 도구

apktool

  • APK 파일에서 리소스(이미지, XML, 레이아웃 등)와 Smali 코드(안드로이드의 중간 코드)를 추출하는 데 사용되는 오픈소스 도구입니다.

jadx

  • Smali 코드를 자바와 비슷한 형태로 변환해주는 도구로, 보다 이해하기 쉬운 소스 코드 탐색이 가능합니다. GUI 형태의 인터페이스를 제공합니다.

 

Smali 코드란?

Smali는 안드로이드의 Dalvik 바이트 코드를 사람이 읽기 쉬운 형태로 변환한 어셈블리 언어입니다. APK를 디컴파일할 때 처음 얻어지는 코드 형태로, 이를 다시 자바 코드와 유사한 형태로 변환하기 위해 jadx와 같은 추가적인 도구를 사용합니다.

 

APK 디컴파일 방법

이제 실제로 맥북에서 APK를 디컴파일하는 방법을 안내하겠습니다.

 

1단계: 필요한 도구 설치

터미널에서 다음 명령어를 사용하여 apktool과 jadx를 설치합니다.

brew install apktool jadx

2단계: APK 파일 준비

디컴파일하고 싶은 APK 파일을 접근하기 쉬운 위치(예: 데스크탑 또는 작업 디렉토리)에 준비합니다.

 

3단계: APK 디컴파일 (리소스 및 Smali 코드)

터미널을 열고 APK 파일이 위치한 디렉토리로 이동한 후 다음 명령어를 실행합니다.

apktool d your_app.apk

이 과정에서 APK의 리소스와 Smali 코드가 추출되어 your_app 디렉터리에 저장됩니다.

 

4단계 : APK에서 자바 소스 코드 추출

더 이해하기 쉬운 형태의 자바 코드에 가까운 결과물을 얻고 싶다면 jadx를 사용합니다.

터미널에서 다음 명령어를 실행합니다.

  • GUI로 소스 코드 보기:
jadx your_app.apk
  • GUI 없이 명령어로만 결과 얻기:
jadx -d output_folder your_app.apk

이렇게 하면 소스 코드가 output_folder 디렉터리에 저장됩니다.

 

5단계 : jadx-gui를 통해 디컴파일된 소스 보기

jadx-gui를 실행하면 APK 파일의 소스 코드가 탐색 가능한 GUI 환경에서 열립니다. 방법은 다음과 같습니다.

터미널에서 다음 명령어를 실행합니다.

jadx-gui your_app.apk

명령어 실행 후, 별도의 창이 열리며, 왼쪽 패널에 APK 파일의 패키지 구조와 클래스들이 표시됩니다. 원하는 클래스를 클릭하면 우측 패널에 소스 코드가 표시되어 쉽게 확인할 수 있습니다.

 

반응형

 

마무리

이제 APK 파일 내부의 리소스, Smali 코드, 그리고 자바 소스 코드까지 성공적으로 디컴파일 및 취약점 분석할 수 있게 되었습니다. APK 분석, 앱 구조 이해, 보안 취약점 점검 등의 다양한 용도로 활용 가능합니다.

728x90
반응형