본문 바로가기
Android

APK 디컴파일 & 리패키징(APK Tool)

by ejxousiva(ἐξουσία) 2024. 1. 29.
반응형

이번에는 디컴파일 후 파일을 수정하고 리패키징까지 할 수 있는 방법을 사용해보려고 한다.
이 방법은 smali 라는 어셈블리 파일을 수정해야 하기에 조금 어려울 수 있고, 이를 통해 수정한 APK를 배포하면 당연히 불법이니 주의해야한다.

https://ejxousiva.tistory.com/29

 

APK Decompile(안드로이드 디컴파일 하는 방법)

일단 가장 유명한 APK Tool을 제외한 다른 2가지 방법을 소개하려고 한다. 1. dex-tools & JD(Java Decompiler) (웹사이트에서 찾거나, 스마트폰에서 APK 추출 앱을 사용해 만들어서) 먼저 APK 파일을 준비한 후

ejxousiva.tistory.com

smali는 익숙하지 않으므로 이전 글을 참고해서 class파일을 띄워두고, smali와 비교하면서 수정하면 그나마 편하게 할 수 있다.

APK Decompile(안드로이드 디컴파일 하는 방법)

일단 가장 유명한 APK Tool을 제외한 다른 2가지 방법을 소개하려고 한다.

1. dex-tools & JD(Java Decompiler) (웹사이트에서 찾거나, 스마트폰에서 APK 추출 앱을 사용해 만들어서) 먼저 APK 파일을 준비한 후

apktool.jar 다운로드

먼저 Download APK Tool 최신버전의 apktool_2.9.3.jar를 다운받고,

각 OS별 apktool 다운로드

Windows 해당 링크에서 마우스 우클릭 - 다른 이름으로 저장 - apktool.bat으로 저장한다.

MacOSapktool로 저장한다.
HomeBrew를 사용한다면 brew install apktool로 간편하게 설치해도 무방하다.

Linuxapktool로 저장한다.

디컴파일

apktool.jarapktool.bat가 있는 폴더로 이동해서

apktool d name.apk -o name_apktool

를 하면 name_apktool 폴더에 디컴파일한 파일들이 생긴다.

 

만약 디컴파일이 되지 않는다면
Windows : C://Windows로 두 파일을 옮겨주고, 환경변수 - PATH에 C://Windows를 추가한다.
Mac & Linux : /usr/local/bin 로 두 파일을 옮겨주고 chmod +x로 권한을 준다.

sudo mv apktool.jar /usr/local/bin/apktool.jar
sudo mv apktool /usr/local/bin/apktool
cd /usr/local/bin/
sudo chmod +x apktool.jar
sudo chmod +x apktool

smali 파일 수정하기

사진처럼 class 파일을 보고 해당 smali에서 비교하면서 수정하면 한결 편하다.

리패키징

리패키징을 할 땐 다시 apk로 만든 후 서명까지 완료해야 정상적으로 사용할 수 있다.

리패키징

apktool b name_apktool -o name_v2.apk

수정한 smali 파일이 있는 디컴파일 폴더를 지정해서 apk로 리패키징 한다.

서명 만들기

이미 서명이 있는 사람은 해당 서명을 사용해도 되지만, 없다면 만들어야한다.

# keytool -genkey -v -keystore [이름] -alias [약칭] -keyalg [알고리즘] -keysize [사이즈]
keytool -genkey -v -keystore ejxousiva.keystore -alias ejxousiva -keyalg RSA -keysize 2048

이후 비밀번호를 비롯한 다양한 정보들은 아래 예시를 참고해서 입력해주면 된다.

키 저장소 비밀번호 입력: myPassword
새 비밀번호 다시 입력 : myPassword
이름과 성을 입력하십시오.
[unknown]: ejxousiva
조직 단위 이름을 입력하십시오.
[unknown]: ejxousiva
조직 이름을 입력하십시오.
[unknown]: ejxousiva
구/군/시 이름을 입력하십시오?
  [Unknown]:  Seoul
시/도 이름을 입력하십시오.
  [Unknown]:  Seoul
이 조직의 두 자리 국가 코드를 입력하십시오.
  [Unknown]:  KO
CN=ejxousiva, OU=ejxousiva, O=ejxousiva, L=Seoul, ST=Seoul, C=KO이(가) 맞습니까?
  [아니오]:  y
다음에 대해 유효 기간이 90일인 2,048비트 RSA 키 쌍 및 자체 서명된 인증서(SHA256withRSA)를 생 성하는 중
        : CN=ejxousiva, OU=ejxousiva, O=ejxousiva, L=Seoul, ST=Seoul, C=KO
<ejxousiva>에 대한 키 비밀번호를 입력하십시오.
        (키 저장소 비밀번호와 동일한 경우 Enter 키를 누름): myPassword
새 비밀번호 다시 입력: myPassword
[ejxousiva.keystore을(를) 저장하는 중]

Warning:
JKS 키 저장소는 고유 형식을 사용합니다. "keytool -importkeystore -srckeystore ejxousiva.keystore -destkeystore ejxousiva.keystore -deststoretype pkcs12"를 사용하는 산업 표준 형식인 PKCS12로 이전하는 것이 좋습니다.

서명하기

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ejxousiva.keystore -storepass myPassword -keypass myPassword ㅜname_v2.apk ejxousiva

APK 설치하기

만들어진 APK를 스마트폰으로 옮겨서 설치하면 끝이다.

만약 오류가 뜬다면 Google Play Protect 를 해제 후 설치하면 된다.

  • 구글 Play Store 실행
  • 프로필 - Play 프로텍트 - 설정
  • Play 프로텍트로 앱 검사 해제
  • name_v2.apk 설치

APK Tool을 사용하는 방법은
APK Tool 공식문서에도 상세하게 설명되어 있다.

 

Install Guide | Apktool

A minimum of Java 8 is required to run Apktool.

apktool.org