[Android] 안드로이드 어플리케이션 디컴파일 및 리패키징

2019-04-21

apktool을 이용하여 안드로이드 어플리케이션을 리패키징 할 수 있다는 사실을 알았다.

까먹을 것 같아 방법을 정리 해 두려 한다.

어플리케이션을 리패키징 하는 과정은 크게 5단계 인 것 같다.

  1. apktool 설치
  2. 분석 및 리패키징 할 APK 다운
  3. 어플리케이션 분석
  4. 어플리케이션 디컴파일 및 코드 수정
  5. 빌드 및 sign

위의 순서에 따라 과정을 차근차근 적어보려 한다.

apktool 설치하기

apktool의 공식 홈페이지는 여기이다.

나는 윈도우를 사용할 것이므로, 윈도우 기준으로 설치할 것이다.

설치 과정은 다음과 같다.

  1. https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat 에서 apktool.bat 다운받기
    • 위의 링크 클릭 후 마우스 오른쪽 버튼 클릭다른 이름으로 저장apktool.bat으로 저장 혹은 해당 내용 복사 후 apktool.bat으로 저장
  2. https://bitbucket.org/iBotPeaches/apktool/downloads/ 에서 apktool.jar 다운받기
    • 최신 버전의 apktool.jar 다운 후, 이름을 apktool.jar로 변경
  3. 다운받은 apktool.batapktool.jarC://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 파일을 실행시키면 정상적으로 동작 할 것이다.