본문 바로가기
개발/Adroid

[Android] 앱 분석 (APK 디컴파일 및 리패키징)

by KEI NETWORK 2019. 8. 22.
728x90

모바일 앱을 분석하기 위해 알아야 하는 용어들에 대해서 먼저 정리해 봅시다.

 

APK (Android Package)

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

  • ZIP 파일 포맷 형태로 구성되어 있으며, 아래와 같은 구성 요소들을 포함하고 있다.

  • 구성요소

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

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

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

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

- resources.arsc : 컴파일된 리소스 파일

 

DEX (Dalvik Executable)

달빅 가상 머신에 맞게 클래스 파일을 바이트 코드로 변환한 파일

 

 

 

APK 파일 분석을 위한 디컴파일 방법은 두 가지가 있는데요. 한 가지 방법은 dex 파일을 고수준 언어(java 코드)로 디컴파일 하는 것이구요. 다른 한 가지 방법은 apk 파일을 저수준 언어(smail 코드)로 디컴파일 하는 것입니다.

 

Java 코드로 분석할 경우에는 가독성은 높지만 일부 코드들이 정상적으로 디컴파일이 안되어 있을 수도 있는데요. smail 코드 같은 경우는 가독성은 낮지만 모든 코드를 볼 수 있습니다. 그럼 이제 디컴파일 하는 방법에 대해서 알아보겠습니다.

 

고수준 언어로 디컴파일

dex2jar - https://code.google.com/p/dex2jar/

JD-GUI - http://jd.benow.ca/

 

dex2jar는 dex 파일을 jar 파일로 변환 시켜주는데요. 이 jar 파일을 JD-GUI로 열어보면 java 코드를 확인하실 수 있습니다.

 

dex2jar 사용법

> dex2jar.bat [apk or dex file]

 

 

 

 



이제 이렇게 생성된 jar 파일을 jd-gui로 열어보면 아래와 같이 코드를 확인할 수 있습니다.

 

 

 

저수준 언어로 디컴파일

apktool - https://code.google.com/p/android-apktool/

 

apktool은 apk 파일을 디컴파일하고 리패키징할 수 있게 해주는 툴인데요. 우선 디컴파일을 하게되면 저수준 코드인 smali코드를 생성해줍니다.

 

apktool을 이용한 디컴파일

java -jar apktool.jar d [apk file]

 

 

 

 

 

이렇게 디컴파일 후 생성된 폴더 내부에 smali 코드가 생성되는데요. 생성된.smali 코드는 사용하시는 텍스트 에디터들을 이용하셔서 변경하실 수 있습니다.

 

리패키징

위에서 언급한 것처럼 apktool을 이용해서 리패키징을 할 수 있는데요. 리패키징은 저희가 수정한 코드들을 가지고 다시 apk 파일을 만드는 과정입니다.

 

apktool을 이용한 리패키징

java -jar apktool.jar b [dir_name]

 

 

 

 

 

리패키징을 하면 dist 폴더가 생성되고 dist폴더 안에 apk 파일이 생성됩니다. 이렇게 생성된 apk파일은 서명이 되어 있지 않아서 설치를 할 수가 없는데요. 이는 재서명 과정을 걸쳐서 해결할 수 있습니다.

 

signapk - https://code.google.com/p/signapk/

motizen-sign - 첨부 파일 참조

 

둘 중 아무거나 다운받으셔서 사용하시면 됩니다.

 

재서명

java -jar signapk.jar testkey.x509.pem testkey.pk8 [old apk file] [new apk file]

 

재서명 과정을 마치시고 새로 만들어진 apk 파일을 설치하시면 됩니다!

728x90

댓글