본문 바로가기
Develop/Android

Android APK Decompile

by J0DEV 2021. 8. 11.
반응형

안드로이드 APK를 디컴파일해서 분석하는 방법들에 대해 소개하려고 합니다.

 

우리가 안드로이드 어플리케이션을 사용하기 위해서는 APK파일을 설치해야합니다.

 

이 APK파일은 일종의 압축형태의 파일로서 아래의 그림과 같은 구조를 가지고 있습니다.

APK파일은 자바코드와 그외의 여러 리소스들을 클래스파일로 컴파일하여 dex파일을 만들어 냅니다.

 

그리고 그 dex파일과 여러 자원들을 합쳐서 만든 것이 APK입니다.

 

안드로이드 APK를 분석하기 위해서는 위와 같은 과정을 역으로 거쳐야하는데요

 

바로 APK파일을 풀어서 dex파일을 분석하는 것입니다.

 

JVM 바이트 코드로 dex파일을 디컴파일하고 class 파일을 추출해내어 java코드를 확인할 수 있습니다.

 

실제로 apk 파일을 zip파일로 만든 후, 압축을 풀면 dex파일 등의

 

안드로이드 개발관련 리소스들을 확인할 수 있습니다.

 

여기서 자바코드는 classes.dex 파일에 들어있습니다.

 

분석을 하기위해서는 이 dex파일을 디컴파일해야 합니다.

 

안드로이드 APK 를 분석하는 툴은 여러가지가 있습니다.

 

자주 사용하는 툴로는 androtools, jeb(유료), apktools, dex2jar 등이 있습니다.

 

androtools를 사용하면 해당 apk의 특정 중요 자료들을 추출하여 html형식으로 제공해줍니다.

 

jeb는 아주강력한 툴로 유료입니다.

 

apktools는 자바코드를 smali코드로 보여주는데 이를 수정하여 리패키징 하는게 가능합니다.

 

dex2jar는 .dex파일을 자바코드로 보여줍니다.

 

개인적으로는 dex2jar와 apktools를 동시에 사용하여 java코드와 smali코드를 동시에 보면서

 

원하는 부분을 수정하여 리패키징합니다.

 

apktools에 관해서는 다른 블로그들에 잘 정리되어있으며 jeb는 유료라서 여기서는 소개하지 않겠습니다.

 

androtools와 dex2jar에 대해서만 소개하도록 하겠습니다.

 

androtools는 

https://github.com/bunseokbot/androtools

 

위의 깃헙에서 다운받을 수 있습니다.

 

사용법은 아주 간단합니다.

 

 

python androtools.py 해당apk 추출하고자하는경로 및 파일명의 형태로 커맨드를 입력하면 아주 짧은 시간동안 분석을 완료합니다!

 

 

그럼 위와 같이 웹 문서 파일로 분석결과가 나타납니다.

 

 

 

위와 같이 웹문서로 여러가지 정보들을 가져와줍니다.

(민감한 내용은 가렸습니다.)

 

 

앱에 대한 간단한 분석을 시도할때에는 androtools를 사용하는게 적당한것 같습니다.

 

 

다음은 dex2jar를 사용해보겠습니다.

 

 

dex2jar를 이용하기 위해서는

 

 

위에서 했던 것처럼 apk를 zip형태로 압축을 풀어서

 

나오는 .dex파일이 필요합니다.

 

 

 

(dex2jar파일은 구글링통해 구하시기 바랍니다. ㅎㅎ)

 

사용법은 아래와 같습니다.

 

./d2j-dex2jar.sh dex파일

추출된 classes-dex2jar.jar을 확인하면 java코드로 나와있습니다.

 

이 파일을 가시적으로 쉽게 확인하려면

 

JD-GUI라는 프로그램을 통해서 확인하시면 됩니다.

 

 

(민감한 내용은 가렸습니다.)

 

이렇게 자바 소스코드를 분석하면 됩니다.

 

툴을 이용하면 디컴파일 하는 것이 쉽습니다.

 

하지만 100%확실하게 디컴파일 되지 않으니,

 

여러 툴을 동시에 사용해서 분석하는 것이 좋은것 같습니다.

 

(이 글은 지극히 개인적이고 주관적인 내용입니다.)

 

 

 

 

 

 

 

 

반응형

'Develop > Android' 카테고리의 다른 글

ANDROID HelloWorld!  (0) 2021.08.06
ANDROID 안드로이드란?  (0) 2021.08.06