[Android] 안드로이드 어플리케이션 디컴파일 및 리패키징
apktool
을 이용하여 안드로이드 어플리케이션을 리패키징 할 수 있다는 사실을 알았다.
까먹을 것 같아 방법을 정리 해 두려 한다.
어플리케이션을 리패키징 하는 과정은 크게 5단계 인 것 같다.
- apktool 설치
- 분석 및 리패키징 할 APK 다운
- 어플리케이션 분석
- 어플리케이션 디컴파일 및 코드 수정
- 빌드 및 sign
위의 순서에 따라 과정을 차근차근 적어보려 한다.
apktool 설치하기
apktool
의 공식 홈페이지는 여기이다.
나는 윈도우를 사용할 것이므로, 윈도우 기준으로 설치할 것이다.
설치 과정은 다음과 같다.
- https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat 에서
apktool.bat
다운받기
- 위의 링크 클릭 후
마우스 오른쪽 버튼 클릭
→다른 이름으로 저장
→apktool.bat
으로 저장 혹은 해당 내용 복사 후apktool.bat
으로 저장- https://bitbucket.org/iBotPeaches/apktool/downloads/ 에서
apktool.jar
다운받기
- 최신 버전의
apktool.jar
다운 후, 이름을apktool.jar
로 변경- 다운받은
apktool.bat
과apktool.jar
를C://Windows
에 옮기기
여기까지 하면 apktool
을 사용 할 준비가 끝난다.
APK 다운
그럼 이제 분석 할 APK
와 이를 분석 할 jd-gui
를 다운받아야 한다.
APK
는 아래의 링크에서 검색 해 다운받을 수 있다.
해당 링크에서 오른쪽의 검색 창에 다운받을 어플리케이션의 이름을 입력하면 APK
파일을 다운받을 수 있다.
어플리케이션 분석 툴 다운
다음 단계는 어플리케이션을 분석해야 하는데, 분석을 위해서는 또 다른 툴이 필요하다.
jadx
라는 툴인데, 무료로 제공되며 apk
파일을 바로 java
코드로 볼 수 있게 해 준다.
아래와 같이 해당 링크를 클릭하면 최신 버전의 jadx
를 다운받을 수 있다.
링크 클릭 시 3개의 파일이 있을텐데 이 중 zip
파일을 다운받으면 된다.
압축을 해제하고 이 중 jadx-gui.bat
을 실행시키면 된다.
Windows 10
의 경우 경고화면이 나올 수 있는데, 추가 정보 보기
를 클릭 후 실행
버튼을 누르면 정상적으로 실행할 수 있다.
실행 후 분석할 APK
파일을 열면 JAVA
코드로 디컴파일 된 것을 확인할 수 있다.
어플리케이션 리패키징 하기
이제 드디어 모든 준비가 끝나고 어플리케이션을 리패키징 할 차례이다.
리패키징을 하기 위해서는 먼저 디컴파일을 하고 코드를 수정한 후, 다시 빌드를 하고 마지막으로 어플리케이션에 서명을 해 주어야 한다.
디컴파일을 하는 방법은 다음과 같다.
apktool d [APK 파일 경로]
그럼 명령어를 실행 한 디렉토리에 디컴파일 된 APK
파일을 확인할 수 있다.
나의 경우에는 cmd
를 실행 한 경로가 C:\Users\USERNAME
이었기에 디컴파일 된 폴더도 같은 곳에 생성되었다.
이 중 smali
라는 디렉토리가 있는데, 이 디렉토리 안을 보면 jadx
에서 본 구조와 동일한 것을 알 수 있다.
따라서 smali
디렉토리에서 jadx
와 비교하며 고칠 부분을 찾은 후, .smali
코드를 수정한 후 다시 빌드하면 어플리케이션을 리패키징 할 수 있다.
리패키징 방법은 다음과 같다.
apktool b [디렉토리 명]
그럼 아래와 같이 dist
디렉토리가 생성되며, 그 안에 apk
파일이 생성 된 것을 확인할 수 있다.
APK 서명하기
이제 마지막으로 서명을 해야 정상적으로 어플리케이션을 실행시킬 수 있다.
서명을 위한 파일은 여기에 있다.
해당 디렉토리에 서명 할 APK
파일을 넣고, 아래의 명령어를 실행하면 정상적으로 서명 된 것을 확인할 수 있다.
java -jar signapk.jar testkey.x509.pem testkey.pk8 [서명할 APK 이름] [서명 후의 APK 명]
위의 명령어를 실행 한 결과 아래와 같이 apk
가 새로 생성 된 것을 확인할 수 있다.
이제 이 apk
파일을 실행시키면 정상적으로 동작 할 것이다.