디컴파일이란 컴퓨터에서 읽을 수 있는 코드를 원래 코드 기능으로 사람이 읽을 수 있는 소스 코드로 변환하는 행위다. 디컴파일은 리버스 엔지니어링의 한 방법으로, 독립적으로 창작된 컴퓨터 프로그램과 다른 프로그램과의 호환에 필요한 정보를 얻기 위해 사용될 수 있다. 디컴파일러는 디컴파일을 수행하는 컴퓨터 프로그램이다. 디컴파일은 애플리케이션의 소스 코드를 분석하고 애플리케이션의 보안 결함을 탐색하는 데 유용하게 사용될 수 있지만원본 프로그램의 저작권을 침해하지 않도록 주의해야 한다.
APK와 Decompile
APK (Android PacKage) 파일은 Android 애플리케이션의 실행 파일이다. APK 파일은 리소스 및 Android Manifest 파일 및 Java 언어로 작성된 소스 코드를 포함하고 있으며, 이때 소스 코드는 Android Dalvik Virtual Machine (DVM)이나 Android ART (Android RunTime)이 실행할 수 있는 형태로 컴파일되어 패키징된 것이다.
APK 파일의 디컴파일은 이 패키징된 파일을 다시 소스 코드 형태로 복원하는 것을 말한다. 이를 위해서는 APK 파일을 언패키징하고 컴파일된 코드를 디컴파일링 하는 과정이 필요하다. 디컴파일링 툴을 사용하면 Java 소스 코드를 복원할 수 있지만, 이 과정에서 복원된 소스 코드의 완전성과 정확성은 보장되지 않는다.
APK 디컴파일을 통해 복원된 소스 코드의 완전성과 정확성이 보장되지 않는 이유
컴파일 최적화: Java 소스 코드는 컴파일될 때 최적화 과정을 거치며, 이 과정에서 일부 코드가 제거되거나 변형될 수 있다.
암호화: 보안상의 이유로 일부 애플리케이션에서는 소스 코드를 암호화하여 APK 파일에 포함할 수 있다. 이 경우, 디컴파일링을 통해 복원된 소스 코드는 암호화된 부분이 포함되어 있지 않을 수 있다.
디컴파일링 도구의 제한: 디컴파일링 도구는 일부 코드를 제대로 복원하지 못할 수 있고, 이는 디컴파일링 도구의 구조와 제한적인 기능 때문일 수 있다.
이때 APK 파일을 디컴파일의 장점은 다음과 같다.
안드로이드 앱의 작동 방식을 이해할 수 있다.
개발자가 앱이나 게임의 다양한 측면을 수정할 수 있다. 예를 들어, 페이스북 앱의 색상을 바꾸거나 기능을 활성화하거나 비활성화할 수 있다.
보안 전문가의 경우 APK 디컴파일을 사용하여 앱의 보안 취약점을 식별하고 수정할 수 있다.
YouTube 모드와 같은 커스텀 앱을 만들 수 있다.
APK Decompile을 도와주는 도구
Frida : Frida는 APK 디컴파일을 포함하여 동적으로 디버그 할 수 있는 도구다. 이를 통해 앱에 코드를 삽입하여 동작을 실시간으로 모니터링, 수정 및 조작할 수 있다. Frida는 APK의 디컴파일된 코드를 추출하는 데 사용할 수 있으며 디버깅 및 분석을 위한 대화형 콘솔도 제공한다.
JD-GUI : JD-GUI는 Java 클래스 파일을 Java 소스 코드로 디컴파일할 수 있는 GUI 기반 도구다. 이 도구를 사용하여 APK 파일을 디컴파일하고 Java 코드를 사람이 읽을 수 있는 형식으로 볼 수 있다. JD-GUI는 구문 강조 표시, 검색 기능 및 한 번에 여러 파일을 디컴파일하는 기능과 같은 기능을 제공한다.
JADX : JADX는 Android APK 파일을 Java 소스 코드로 디컴파일할 수 있는 오픈 소스 도구다. 빠른 디컴파일 속도와 고품질 디컴파일 코드 생성 능력으로 유명함. JADX는 또한 디컴파일된 코드를 쉽게 탐색하고 분석할 수 있도록 GUI를 제공한다.
Apktool : Apktool은 Android APK 파일을 리버스 엔지니어링하기 위한 오픈 소스 도구다. 리소스, Android 매니페스트 및 컴파일된 Java 코드를 포함하여 APK 파일을 구성 요소로 디컴파일하는 데 사용할 수 있다. Apktool을 사용하여 디컴파일된 코드를 수정하고 새 APK 파일로 다시 패키징할 수도 있다.
Apktool-GUI : Apktool-GUI는 Apktool용 GUI로 디컴파일 및 수정 프로세스를 보다 사용자 친화적으로 만들도록 설계되었다. APK 파일 디컴파일 및 리패키징을 위한 시각적 인터페이스와 디컴파일된 코드를 수정하기 위한 코드 편집기를 제공한다.
Dex2jar : Dex2jar는 Android의 Dalvik Executable(.dex) 파일을 Java Archive(.jar) 파일로 변환할 수 있는 도구다. 이는 .jar 파일을 Java 디컴파일러를 사용하여 Java 소스 코드로 디컴파일할 수 있으므로 APK 파일 디컴파일에 유용하다.
ByteCodeViewer : ByteCodeViewer는 APK 파일을 분석하고 디컴파일하는 데 사용할 수 있는 Java 기반 도구다. 디컴파일된 코드를 쉽게 탐색할 수 있는 GUI는 물론 구문 강조 표시, 검색 기능 및 한 번에 여러 파일을 디컴파일하는 기능과 같은 기능을 제공한다.
Jeb : Jeb은 Android APK 파일을 리버스 엔지니어링하기 위한 유료 상용 도구다. APK 파일을 디컴파일, 디버그 및 수정하는 기능을 포함하여 고급 기능으로 유명하다. Jeb은 디컴파일된 코드를 쉽게 탐색할 수 있는 GUI와 코드 수정을 위한 코드 편집기를 제공한다.