Jadx
: Android APK 파일을 디컴파일하여 Java 소스 코드로 변환해 주는 도구로 이를 통해 Android 애플리케이션의 내부 코드를 분석할 수 있다. 보안 분석이나 악성코드 탐지 목적으로 많이 사용되며 Jadx는 GUI 방식과 CLI 방식 모두 제공하여 사용자가 편한 방식으로 접근 가능한 도구이다. (클래스, 메소드, 리소스 파일 등의 구조를 유지하면서 원본에 가깝게 소스 코드를 복원해 주기 때문에 빠르고 직관적인 분석에 유용하다.)
https://github.com/skylot/jadx/releases
해당 툴을 사용하기 위해서 먼저 위의 깃허브 링크로 접속하여 win-zip 파일을 다운로드 받은 뒤 압축을 해제해 준다.
그리고 위의 사진과 같이 jadx-gui 파일을 클릭하여 해당 프로그램을 실행해 주면 된다.
첫 화면은 이렇다. 시작의 파일 열기 또는 프로젝트 열기를 통해서 apk 파일을 불러와 디컴파일링을 시도해도 좋고, 다른 저장소에 저장된 파일을 드래그하여 가져올 수도 있다. (사용하기에 매우 간편하고 직관적임)
어떤 APK 파일을 가져와서 디컴파일링 후 분석해 볼지 생각해 보다가 내가 참여했던 프로젝트 앱을 직접 디컴파일링하여 얼마나 높은 수준으로 원본 소스에 가깝게 디컴파일링이 가능한지 분석해 보자.
APK를 디컴파일링 시도한 결과 실제 프로젝트에 작성했던 코드와 거의 같았다. 심지어 개발자가 작성한 소스 코드 부분 뿐만 아니라 Gradle 파일을 통해 가져온 라이브러리 소스도 그대로 가져온 상태이다.
사용해 보니 해당 viewmodel class를 단순하게 코드로만 표출하는 게 아닌 이렇게 해당 클래스에서 사용된 메소드들까지 한 번에 확인이 가능하다. 이 점에서 코드를 분석하기에 매우 유용할 것 같다고 생각했다.
이렇게 Jadx를 통해 직접 만들었던 앱을 가져와 다시 디컴파일링하는 작업을 시도해 봤다. 해당 도구를 안드로이드 악성코드 진단에 왜 사용하는지 알 수 있었다.
Kotlin도 Java와 같은 JVM에서 실행되기 때문에 Kotlin으로 작성된 APK도 Jadx를 통해 분석이 가능하다는 점을 알 수 있다. (찾아보니 Kotlin 고유의 문법을 최대한 복원한 것이 보이며 복잡한 Kotlin 코드 구조는 Java로 변환된 형태로 표시한다고 한다.)
안드로이드 개발을 하며 APK 파일을 디컴파일링하는 방법이 있을까? 라는 생각을 한 적이 있었는데 이렇게 악성코드 분석을 위한 도구로 디컴파일링이 가능하다는 사실이 놀랍다. 안드로이드는 개발 뿐만 아니라 보안과 관련된 부분에 대해 알아보는 것 또한 매우 흥미롭다.