0. apktool 설치
https://apktool.org/docs/install
스크립트 파일 > 우클릭 > 다른 이름으로 링크 저장 > apktool.bat 으로 저장
C 드라이브 하위에 위와 같이 세팅합니다.
참고로 리패지킹 할 때, 경로에 한글 혹은 공백이 있으면 에러가 발생하는 경우가 있습니다.
그래서 저는 C 드라이브 바로 아래 apktool 폴더를 만들어서 작업했습니다.
jar 를 실행하고 후에 keytool을 사용하기 위해서 jdk 설치가 되어 있어야 함
1. apk 앱 추출
[Android] 소스코드 난독화 적용 여부
0. jadx 설치https://github.com/skylot/jadx1. apk 추출 앱 사용1.1. apk 추출 앱 다운로드플레이스토어에서 apk 추출 관련 앱을 다운 받습니다. 1.2. 진단 대상 앱의 apk 추출apk 추출 앱을 이용해먼저 apk 파일이
velvetviolet1024.tistory.com
/data/app 경로의 apk 추출
혹은
apk 추출 앱 사용
위 포스팅을 참고해서
진단 대상의 apk 앱을 추출한 뒤, apktool 폴더에 옮겨줍니다.
2. apk 디컴파일
apktool d [apk 파일 위치]
# apktool d insecurebank.apk
apktool 폴더 확인 시, apk 파일이 디컴파일된 모습을 볼 수 있습니다.
3.1. 앱 이름 변경
path : [앱]\res\values\strings.xml
※ strings.xml : 앱의 문자열 리소스가 있는 곳!
앱의 이름이 포함되어 있는 strings.xml 파일을 오픈합니다.
app_name : 앱 이름이 담겨있는 변수
앱 이름을 지정하는 app_name 변수의 값을 변조 후 저장합니다.
3.2. 앱 소스코드 내용 수정
3.3. 루팅 우회
4. apk 리패키징
apktool b [리패키징할 파일] -o [새로 지정할 apk 파일 이름].apk
# apktool b insecurebank -o insecurebank_modify.apk
리패키징 시 메모리 부족 관련 에러가 발생하는 경우

apktool.bat 파일에서 -Xmx 옵션 수정
apktool 폴더 확인 시, 리패키징된 apk 파일을 볼 수 있습니다.
5. apk 서명을 위한 비대칭키 생성하기
※ apk 파일을 성공적으로 리패키징했지만 서명을 등록하지 않으면 단말기에 앱을 설치할 수 없습니다.
※ 비대칭키 생성 시 사용하는 keytool은 jdk를 설치해야 사용할 수 있음
※ 시스템 환경변수에 jdk path를 등록해야 사용 가능! ( C:\Program Files\Java\jdk-24\bin )
keytool -genkey -v -keystore [키 저장소 이름].keystore -alias [별칭] -keyalg [사용 알고리즘] -keysize [키 사이즈]
# keytool -genkey -v -keystore alioth.keystore -alias alioth -keyalg RSA -keysize 2048
apktool 폴더 확인 시, 비대칭키(공개키, 비밀키)가 담긴 키 저장소가 생성된 모습을 확인할 수 있습니다.
6. 서명하기
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [키 저장소 이름].keystore [서명할 apk].apk [별칭]
# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore alioth.keystore insecurebank_modify.apk alioth
위의 jarsigner 서명 방법은 구식이라서 최신 앱에서는 apksigner 서명을 이용해야 한다.
# 안드로이드 SDK( https://developer.android.com/ ) 설치
# 시스템 환경변수 path 등록 ( C:\Users\[사용자명]\AppData\Local\Android\Sdk\build-tools\36.0.0 )
# apk 파일 정렬 // -p 옵션
zipalign -v 4 [apk 파일] [내보낼 apk 파일 이름]
# 서명하기
apksigner sign --ks [키 저장소 이름].keystore --ks-key-alias [별칭] [apk 파일]
# 서명 확인하기
apksigner verify --verbose [apk 파일]
"""
Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Verified using v3.1 scheme (APK Signature Scheme v3.1): false
Verified using v4 scheme (APK Signature Scheme v4): false
Verified for SourceStamp: false
Number of signers: 1
"""
# v1 : JAR 서명으로 구식 서명이 존재하지 않다는 의미
# v2, v3 : apksigner 서명 잘 되어 있다는 의미
# v3.1, 4 서명은 존재하지 않는다는 의미
# 1개의 서명자가 있다는 의미
# v2, v3 만 서명되면 됨
7. apk 설치
서명된 apk 파일을 adb를 이용해 단말기로 밀어 넣습니다.
※ 기존 원본 앱을 삭제하고 설치해야 함
※ Google Play Protect 해제 ( Play 스토어 > 프로필 > play 프로텍트 > 설정 > 앱 검사 해제 )

apk 설치 시, 앱 이름이 변경된 모습을 확인할 수 있습니다. ( 앱 위·변조 가능 )
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
apk 파일이 여러 개인 앱은
adb를 이용해 모든 apk 파일을 추출한 뒤,
메인인 base.apk 만 디컴파일해서 내용을 수정하고,
나머지 apk는 재서명만 해주면 됩니다.
adb install-multiple base.apk [].apk [].apk
그리고 adb를 이용해 multiple 설치를 해주면 앱이 설치됩니다.
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
'Android' 카테고리의 다른 글
[Android] 화면 강제실행에 의한 인증단계 우회 (0) | 2025.05.28 |
---|---|
[Android] 메모리 내 중요정보 노출(with. Manifest 패치) (0) | 2025.05.27 |
[Android] 앱 소스코드 내 운영정보 노출 (0) | 2025.05.20 |
[Android] 소스코드 난독화 적용 여부 (0) | 2025.05.20 |
[Android] 단말기 내 중요정보 저장 여부 (0) | 2025.05.16 |