이번에는 디컴파일 후 파일을 수정하고 리패키징까지 할 수 있는 방법을 사용해보려고 한다.
이 방법은 smali 라는 어셈블리 파일을 수정해야 하기에 조금 어려울 수 있고, 이를 통해 수정한 APK를 배포하면 당연히 불법이니 주의해야한다.
https://ejxousiva.tistory.com/29
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
으로 저장한다.
MacOS를 apktool
로 저장한다.
HomeBrew를 사용한다면 brew install apktool
로 간편하게 설치해도 무방하다.
Linux를 apktool
로 저장한다.
디컴파일
apktool.jar
와 apktool.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 공식문서에도 상세하게 설명되어 있다.