Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

HW_chick hacker

[AOS] APK 디컴파일 & 리패키징 본문

Mobile/AOS

[AOS] APK 디컴파일 & 리패키징

{{HW}} 2025. 8. 13. 02:48

 1. 디컴파일 & 리패키징

1.1 컴파일(Compile)

- 소스코드에서 기계가 인식할 수 있는 바이너리 파일로 변환하는 과정

- AOS는 컴파일 이후 패키징과 코드사인 과정을 추가로 수행하여야 실행가능한 APK파일이 만들짐.

 

1.2 디컴파일(Decompile)

- APK 파일을 분해하는 과정

- Binary 형식(dex, class, exe 등)을 원래의 고수준 소스 코드로 되돌리는 과정을 의미

 

smali 코드 사용 이유:

  • 컴파일된 .dex파일은 원본 변수명, 메서드명, 주석 등의 정보가 없어지기 때문에 디컴파일된 Java 코드가 원본과 달라질 수 있음

 

1.3 리패키징(Repackaging)

- APK 파일을 디컴파일 하고, 분해된 파일을 다시 APK 파일로 조합하는 과정

 

 

2. 도구(Tools)

2.1. .dex → .smali (어셈블리 수준)

  • 도구: apktool
  • 목적: Dalvik VM 바이트코드를 Smali 어셈블리 코드로 변환
  • 특징:
    • 원본 로직을 가장 정확하게 표현
    • 변수명·주석이 거의 없어 가독성이 낮음
    • 수정 후 다시 .dex로 빌드 가능

 

2.2. .dex → .java (소스 수준)

  • 도구:
    • JADX → .dex 직접 열어 Java 소스 뷰 제공
    • dex2jar → .dex를 .jar로 변환 후 Java 디컴파일러(JD-GUI 등)로 분석
  • 특징:
    • 원본 Java 코드에 가까운 형태
    • 가독성 좋음
    • 일부 최적화된 바이트코드는 복원 불가능할 수 있음

 

3. APK 디컴파일 & 리패키징 실습

3.1 디컴파일(Decompile)

- apktool (smali 코드 중심)

java -jar apktool_2.12.0.jar d "com.dreamhack.app(2.12.6).apk"

 

- 디컴파일 된 파일의 내부 구조를 확인 할 수 있다.

 

3.2 리패키징(Repackaging )

- 디컴파일 된 파일을 확인한다.

 

- 명령어를 입력하여 APK 파일을 리패키징한다.

java -jar apktool_2.12.0.jar b "com.dreamhack.app(2.12.6)"

 

- APK가 생성된 ./dist 경로에 APK 파일이 생성된다.