Apk - 디컴파일 및 리패키징

1. 디컴파일(Decompile)

디컴파일이란 컴파일(사람이 읽을 수 있는 소스코드를 기계어로 변환하는 작업)의 반대 말로 APK 파일을 분해하는 과정을 통해 리소스, 소스코드, Smali 코드가 나오게 된다. 

 

2. 리패키징 

리패키징이란 디컴파일을 통해 사람이 읽을 수 있는 소스코드, Smali 코드를 변조 후 앱을 구동할 수 있도록 패키징 하는 것이다.

리패키징

3. apktool 다운로드

앞서 설명한 디컴파일과 리패키징을 하기 위해서는 apktool이 필요하다.

apktool이란 안드로이드 대상의 리버스 엔지니어링 도구이며 apk파일을 디컴파일 하거나, 코드를 수정하여 패키징 할 수 tool이다.

https://apktool.org/

 

Apktool | Apktool

A tool for reverse engineering Android apk files.

apktool.org

해당 사이트에 apktool을 다운로드할 수 있다.

 

4. 디컴파일 및 리패키징 실습

준비물

실습을 위해  apktool 파일과 연습하기 위한 FridaLab.apk를 준비하였다.

 

Fridalab

Fridalab을 실행했을 때의 정상적으로 동작하는 앱을 디컴파일 해볼 것이다.

 

디컴파일 명령어는 아래와 같다.

java - jar [apktool 이름] -f -r d [apk파일]

디컴파일

해당 명령어를 입력하면 디컴파일이 된다.

디컴파일에서 나온 파일들

 

디컴파일을 하면 리소스 파일과 smali파일이 나오는 것을 확인할 수 있다.

 

이전에 FridaLab 문제를 푼 글을 보면 문제 해결 시 CompleteArr 배열의 값에 변화 주는 것을 확인했다.

 

그래서 이번에 smali코드에서 CompleteArr를 변조시켜 볼 것이다.

smali 코드에 접근

smali -> uk -> rossmarks -> fridalab에 접근 후 Mainactivity.smali을 연다.

 

 

smali 코드는 이전의 smali글에서 지시자나 제어문을 확인할 수 있다.

array 변형

 

해당 CompleteArr에 있는 배열에 있는 값을 변경하여 저장한다.

 

java -jar [apktool이름] -f -r b FridaLab

 

이후 위의 명령어를 입력하게 되면

리패키징

위와 같이 리패키징이 된다. 이 상태로 안드로이드에 다운로드할 시 서명문제로 인하여 다운로드가 되지 않기 때문에 Sinning을 해준다.

 

keytool -genkey -v -keystore [키이름.keystore] -alias [별명] -keyalg RSA -keysize 2048

 

Sinning

Sinning 할 키를 만들어 주고 앱에 재서명을 해준다.

 

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [만든 키 파일] [apk 파일명] [별명]

 

해당 명령어를 사용하기 전 디컴파일한 폴더의 dist폴더 안에 리패키징한 apk를 키를 생성한 폴더로 옮긴다.

 

재서명

이후 명령어를 실행하게 되면 재서명이 된다.

변조한 apk

해당 apk를 안드로이드로 옮겨 실행 시 정상적으로 다운로드가 되며 변경된 코드가 정상동작하는 것을 확인할 수 있다.

 

참조

https://www.ahnlab.com/ko/contents/content-center/19269

 

AhnLab | 콘텐츠 센터

 

www.ahnlab.com

 

https://hagsig.tistory.com/192

 

안드로이드 APK 파일 디컴파일/리패키징 방법

1. 디컴파일/리패키징 이란?1.1. 컴파일(compile)- 소스코드(source code)에서 기계가 인식할 수 있는 *바이너리(binary) 파일로 변환하는 과정을 말한다.*바이너리 파일 : 사람이 아닌 컴퓨터가 직접 해

hagsig.tistory.com

https://cgy12306.tistory.com/394

 

[Mobile] 안드로이드 apk Decompile & Recompile & Signing

Decompile apktool d [apk 파일] ※ 난독화가 되어 있으면 에러가 발생할 수 있습니다. -r 옵션으로 리소스 디컴파일링 무시합니다. decompile을 하면 apk파일명으로 폴더가 하나 생성됩니다. 디컴파일과 리

cgy12306.tistory.com

https://blog.naver.com/heapskewl73/222277069346

 

안드로이드 apktool 에러 해결방법

디컴파일 java -jar apktool_2.4.0.jar -f -r d base.apk 리패키징 java -jar apktool_2.4.0.jar -f -r b b...

blog.naver.com

 

'앱 진단 > 안드로이드 진단' 카테고리의 다른 글

안드로이드 리패키징(인시큐어뱅크)  (1) 2025.04.01
안드로이드 - 루팅  (0) 2024.12.17
안드로이드 - Smali  (0) 2024.09.09
안드로이드 - DEX  (0) 2024.08.20