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 파일을 실행시키면 정상적으로 동작 할 것이다.
'개발 > Adroid' 카테고리의 다른 글
[Android] Fiddler를 이용한 프록시 구성 (0) | 2019.08.23 |
---|---|
[Android] 앱 분석 (APK 디컴파일 및 리패키징) (0) | 2019.08.22 |
[android] layout폴더를 서브폴더로 나누기 (0) | 2019.08.17 |
[android studio] ImageButton 배경 투명하게 만들기 (0) | 2019.08.17 |
[android studio] RecyclerView (0) | 2019.08.16 |
댓글