취소

커뮤니티

가이드

서포트

전체

| APK 파일의 디컴파일이란?

  

앱 모딩을 위해서, 또는 앱을 개발하는 데 참고하고 싶어서 APK 파일을 종종 읽고 수정해야 할 경우가 있다.

그러나 APK 파일 내부의 소스코드를 얻기 위해 아무 작업 없이 열면 대부분의 소스코드가 깨져있을 것이다.

이는 안드로이드에서 달빅이 인식할 수 있도록 class 파일과 같은 파일들을 바이트 코드로 변환하기 때문인데, 이유를 설명하기에는 글이 너무 길어지므로 자바의 컴파일에 대한 설명이나 APK의 구조를 참고하도록 하자.

따라서 코드 난독화가 되지 않았다면, 우리는 디컴파일을 통해 어느 정도 소스를 읽고 수정할 수 있다.

디컴파일링을 하기 위해 사용할 수 있는 툴은 많다.

아마 제일 많이 쓰이는 툴은 APK Manager이 아닐까 싶다.

그러나 APK Manager은 블로그에서 공유가 되어 APK Manager의 디/컴파일을 할 때 사용되는 Apktool 업데이트가 제대로 되지 않고 에러가 발생해도 원인을 알기 어렵다.

그래서 에러(21번)를 해결을 못 해 다른 툴을 알아보다 찾았던 프로그램이 이번에 소개할 APK Easy Tool 이다.

 

| APK Easy tool를 사용하기 위한 준비

일단 시작하기 전에 우리는 Java SE가 필요하다.

Java SE의 최신 버전은 Apksigner을 지원하지 않으므로 하단의 주소에서 자바 8을 다운로드 받아야 한다.

Java SE Development Kit 8 - Downloads

Overview Downloads Documentation Community Technologies Training Java SE Development Kit 8 Downloads Than..

www.oracle.com

</p>

혹시나 어떻게 다운로드 받아야 하는지 모르면 사진을 참고하자.

Windows x86이 32비트 전용이고, Windows x64가 64비트 전용이다.

세부 버전은 딱히 상관은 없으므로, 만일에 사이트에 다른 세부버전이 업데이트되더라도 최상단에 있는 버전을 다운로드 받는 것이 좋다.

그 외에도 .NET Framework 4.6.2 이상이 필요하나, Windows 7 이상에서는 권장업데이트로 설치된다.

설치가 끝났다면, 이제 APK Easy Tool을 다운로드 받자.

[TOOL] APK Easy Tool 1.541 (Windows) (16 sep. 2018)

APK Easy Tool in action. Note: Sided log output is only available for higher resolution with 1250 width and above..

forum.xda-developers.com

</p>

하단의 Download links 에서 다운로드 할 수 있다.

Setup.msi/zip 파일은 설치파일로, x86은 32비트, x64는 64비트 전용이며, Portable.zip 파일은 무설치 버전이다.

이 프로그램을 처음 실행했을 때 작업한 파일이나 폴더를 저장할 폴더를 생성할 것인지를 묻는 창이 뜬다.

만일 아니요를 선택하더라도 나중에 옵션에서 따로 설정할 수 있다.

| Apk Easy Tool로 APK 디컴파일하는 방법

 

전반적인 인터페이스는 Apk Manager 보다 사용하기 편하게 이루어져 있다.

세부적인 옵션은 Options에서 설정할 수 있다. 예를 들자면 서명할 때 키파일이 있으면 Signing에서 키를 지정하면 된다.

디컴파일을 하기에 앞서 메인의 우측 상단에 있는 "Sel.APK/JAR"에서 APK 파일을 지정해야 한다.

그 다음에 Decompile을 누르면 자동으로 디컴파일을 진행한다.

'The Decompile directory is not set'이라는 경고창이 뜨면 Options - General에 있는 Directory에서 'Decompiled APK directory'와 'Compiled APK directory'를 따로 지정해야 한다.

'Decompile successfully'라는 안내창이 뜨면 디컴파일이 성공적으로 끝난 것이다.

좌측 하단의 'Decompiled APK directroy'로 해당 폴더의 상위 폴더를 열 수 있다.

 

해당 폴더로 이동하면 classes.dex 파일이 class 파일로 디컴파일된 후 smali 파일로 변환이 되었고, xml파일들은 읽을 수 있게 변환이 되었음을 알 수 있다.

 

| XML, SMALI 파일의 읽기와 수정

이제 xml 파일이나 smali 파일에서 소스코드를 깨짐 없이 읽고 마음대로 수정할 수 있다.

그러나 smali 파일이나 xml파일에서 복잡한 소스코드의 경우 메모장으로 보는 데 무리가 있으므로

소스코드를 읽거나 수정하는 것은 Notepad++를 사용하는 것을 추천한다.

Notepad++ v7.6.3 - Current Version

Release Date: 2019-01-27 Download 32-bit x86 Notepad++ Installer 32-bit x86 : Take this one if you have no idea w..

notepad-plus-plus.org

</p>

다운로드를 누르면 32비트용 설치파일이 다운로드되며, 64비트 및 포터블이나 다른 옵션을 찾는다면 하단의 하이퍼링크 중 필요한 파일을 찾아 다운로드하면 된다.

| Apk Easy Tool로 APK 컴파일 및 서명

APK 파일을 수정한 후 다시 APK 파일로 다시 만들려면 컴파일이라는 작업을 해야한다.

컴파일하려면 다시 APK Easy tool을 실행한 후 Compile을 누르면 컴파일을 진행한다.

APK Manager에서는 그 후 재서명을 해야 하지만 APK Easy Tool 좌측의 옵션을 끄지 않으면 자동으로 서명까지 진행한다.

서명이 무엇인지 모르는 사람이라면 저 옵션을 키는 것이 좋다.

Compile을 누른 후 'Sign successfully'라는 메시지가 뜨면 컴파일과 서명까지 끝난 것이다.

다행스럽게도 Apk Manager에서 뜨던 지긋지긋한 에러는 뜨지 않고 제대로 설치도 되었다.

이제 'Compiled APK directory'를 눌러 서명된 APK파일을 확인할 수 있다.

그러나 필자는 설치 후 동적 라이브러리(SO 파일)에 있던 해시 검사로 인하여 앱이 열리지 않았다.

이처럼 컴파일 후에도 설치 및 실행이 제대로 될지는 장담할 수는 없을 것 같다.