새소식

공부/안드로이드

Decompile이란?

  • -

Decompile이란?


디컴파일이란 컴퓨터에서 읽을 수 있는 코드를 원래 코드 기능으로 사람이 읽을 수 있는 소스 코드로 변환하는 행위다. 디컴파일은 리버스 엔지니어링의 한 방법으로, 독립적으로 창작된 컴퓨터 프로그램과 다른 프로그램과의 호환에 필요한 정보를 얻기 위해 사용될 수 있다. 디컴파일러는 디컴파일을 수행하는 컴퓨터 프로그램이다. 디컴파일은 애플리케이션의 소스 코드를 분석하고 애플리케이션의 보안 결함을 탐색하는 데 유용하게 사용될 수 있지만 원본 프로그램의 저작권을 침해하지 않도록 주의해야 한다.


APK와 Decompile

APK (Android PacKage) 파일은 Android 애플리케이션의 실행 파일이다. APK 파일은 리소스 및 Android Manifest 파일 및 Java 언어로 작성된 소스 코드를 포함하고 있으며, 이때 소스 코드는 Android Dalvik Virtual Machine (DVM)이나 Android ART (Android RunTime)이 실행할 수 있는 형태로 컴파일되어 패키징된 것이다. 

APK 파일의 디컴파일은 이 패키징된 파일을 다시 소스 코드 형태로 복원하는 것을 말한다. 이를 위해서는 APK 파일을 언패키징하고 컴파일된 코드를 디컴파일링 하는 과정이 필요하다. 디컴파일링 툴을 사용하면 Java 소스 코드를 복원할 수 있지만, 이 과정에서 복원된 소스 코드의 완전성과 정확성은 보장되지 않는다.

APK 디컴파일을 통해 복원된 소스 코드의 완전성과 정확성이 보장되지 않는 이유

  1. 컴파일 최적화: Java 소스 코드는 컴파일될 때 최적화 과정을 거치며, 이 과정에서 일부 코드가 제거되거나 변형될 수 있다.
  2. 암호화: 보안상의 이유로 일부 애플리케이션에서는 소스 코드를 암호화하여 APK 파일에 포함할 수 있다. 이 경우, 디컴파일링을 통해 복원된 소스 코드는 암호화된 부분이 포함되어 있지 않을 수 있다.
  3. 디컴파일링 도구의 제한: 디컴파일링 도구는 일부 코드를 제대로 복원하지 못할 수 있고, 이는 디컴파일링 도구의 구조와 제한적인 기능 때문일 수 있다.

이때 APK 파일을 디컴파일의 장점은 다음과 같다.

  • 안드로이드 앱의 작동 방식을 이해할 수 있다.
  • 개발자가 앱이나 게임의 다양한 측면을 수정할 수 있다. 예를 들어, 페이스북 앱의 색상을 바꾸거나 기능을 활성화하거나 비활성화할 수 있다.
  • 보안 전문가의 경우 APK 디컴파일을 사용하여 앱의 보안 취약점을 식별하고 수정할 수 있다. 
  • YouTube 모드와 같은 커스텀 앱을 만들 수 있다.

APK Decompile을 도와주는 도구

  1. Frida : Frida는 APK 디컴파일을 포함하여 동적으로 디버그 할 수 있는 도구다. 이를 통해 앱에 코드를 삽입하여 동작을 실시간으로 모니터링, 수정 및 조작할 수 있다. Frida는 APK의 디컴파일된 코드를 추출하는 데 사용할 수 있으며 디버깅 및 분석을 위한 대화형 콘솔도 제공한다.
  2. JD-GUI : JD-GUI는 Java 클래스 파일을 Java 소스 코드로 디컴파일할 수 있는 GUI 기반 도구다. 이 도구를 사용하여 APK 파일을 디컴파일하고 Java 코드를 사람이 읽을 수 있는 형식으로 볼 수 있다. JD-GUI는 구문 강조 표시, 검색 기능 및 한 번에 여러 파일을 디컴파일하는 기능과 같은 기능을 제공한다.
  3. JADX : JADX는 Android APK 파일을 Java 소스 코드로 디컴파일할 수 있는 오픈 소스 도구다. 빠른 디컴파일 속도와 고품질 디컴파일 코드 생성 능력으로 유명함. JADX는 또한 디컴파일된 코드를 쉽게 탐색하고 분석할 수 있도록 GUI를 제공한다.
  4. Apktool : Apktool은 Android APK 파일을 리버스 엔지니어링하기 위한 오픈 소스 도구다. 리소스, Android 매니페스트 및 컴파일된 Java 코드를 포함하여 APK 파일을 구성 요소로 디컴파일하는 데 사용할 수 있다. Apktool을 사용하여 디컴파일된 코드를 수정하고 새 APK 파일로 다시 패키징할 수도 있다.
  5. Apktool-GUI : Apktool-GUI는 Apktool용 GUI로 디컴파일 및 수정 프로세스를 보다 사용자 친화적으로 만들도록 설계되었다. APK 파일 디컴파일 및 리패키징을 위한 시각적 인터페이스와 디컴파일된 코드를 수정하기 위한 코드 편집기를 제공한다.
  6. Dex2jar : Dex2jar는 Android의 Dalvik Executable(.dex) 파일을 Java Archive(.jar) 파일로 변환할 수 있는 도구다. 이는 .jar 파일을 Java 디컴파일러를 사용하여 Java 소스 코드로 디컴파일할 수 있으므로 APK 파일 디컴파일에 유용하다.
  7. ByteCodeViewer : ByteCodeViewer는 APK 파일을 분석하고 디컴파일하는 데 사용할 수 있는 Java 기반 도구다. 디컴파일된 코드를 쉽게 탐색할 수 있는 GUI는 물론 구문 강조 표시, 검색 기능 및 한 번에 여러 파일을 디컴파일하는 기능과 같은 기능을 제공한다.
  8. Jeb : Jeb은 Android APK 파일을 리버스 엔지니어링하기 위한 유료 상용 도구다. APK 파일을 디컴파일, 디버그 및 수정하는 기능을 포함하여 고급 기능으로 유명하다. Jeb은 디컴파일된 코드를 쉽게 탐색할 수 있는 GUI와 코드 수정을 위한 코드 편집기를 제공한다.

출처 :

https://hackernoon.com/apk-decompilation-a-beginners-guide-for-reverse-engineers

 

APK Decompilation: A Beginner's Guide for Reverse Engineers | HackerNoon

APK decompilation is the process of reverse engineering an APK file to retrieve its source code. It is useful for understanding how an Android app works.

hackernoon.com

https://kibua20.tistory.com/162

 

Android apk Decompile 과 분석 tool: apktool 사용법

Android apk 분석 시 사용할 수 있는 Tool은 크게 Anroid SDK에 포함된 apkanalyzer (사용법 링크), aapt2, SDK 에는 포함되지 않은 Android studio에서 사용된다고 하는 apktool이 있습니다. apktool 은 원래 Apk의 Reverse

kibua20.tistory.com

https://m.blog.naver.com/ndb796/221162559976

 

안드로이드 앱 해킹 ② - APK 파일 디컴파일하기

※ 이 글에서 해킹 대상으로 하는 안드로이드 어플리케이션은 제가 개발한 어플리케이션이고, 정상적...

blog.naver.com

 

'공부 > 안드로이드' 카테고리의 다른 글

안드로이드가 부팅 될 때 동작 순서  (0) 2023.03.17
JVM이란?  (0) 2023.03.09
안드로이드 JAVA, Kotlin  (0) 2023.03.09
NDK와 JNI란?  (0) 2023.03.09
안드로이드의 개념과 4대 구성 요소  (0) 2023.03.09
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.