1.apk signer?
안드로이드 앱을 변조(리패키징) 한 후 기기에 설치하기 위해 필수적으로 수행해야 하는 디지털 서명 도구이다.
2. 설치
Android SDK Build-Tools에 포함되어 있다. (안드로이드 스튜디오 설치하면 포함되어 있음)
예시 경로 ) Android\Sdk\build-tools\버전\
또 JDK에 포함된 Keytool 이 필요하다. (Java 설치 시 포함)
예시 경로 ) C:\Program Files\Java\jdk-17\bin
3. 기본 개념
| 구성요소 | 설명 |
| Keystore | 개인키 저장소 |
| Key alias | 키 이름 |
| Password | keystore / key 비밀번호 |
| Signature | APK 무결성 + 신뢰 보장 |
APK는 서명 없으면 설치가 불가하다.
4. 사용 방법
4-1. Keystore 생성
C:\Users\test\Desktop\apksigner_test>keytool -genkeypair -v ^
More? -keystore mykey.keystore ^
More? -alias myalias ^
More? -keyalg RSA ^
More? -keysize 2048 ^
More? -validity 10000
RSA 2048비트 개인키/공개키 쌍을 생성하고,
그 키를 식별자(alias)로 묶어서
mykey.keystore라는 저장소에
10,000일 유효한 자기서명 인증서와 함께 저장한다.
Enter keystore password:
Keystore password is too short - must be at least 6 characters
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: test
What is the name of your organizational unit?
[Unknown]: test
What is the name of your organization?
[Unknown]: test
What is the name of your City or Locality?
[Unknown]: test
What is the name of your State or Province?
[Unknown]: test
What is the two-letter country code for this unit?
[Unknown]: test
Is CN=test, OU=T, O=test, L=test, ST=test, C=test correct?
[no]: yes
Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,000 days
for: CN=test, OU=test, O=test, L=test, ST=test, C=test
[Storing mykey.keystore]

4-2. APK 서명
apksigner sign --ks mykey.keystore --ks-key-alias myalias [apk 이름 입력]
// mykey.keystore 안에 있는 myalias 개인키로 CyberO.apk에 서명하라

Keystore 생성했을 때 비밀번호를 입력하면 서명이 완료된다.
4-3. 서명 확인
apksigner verify --verbose [apk 이름]

| v1 scheme | true | 구형 Android 호환용 JAR 서명 존재 |
| v2 scheme | true | APK 전체 무결성 보호 |
| v3 scheme | true | 키 로테이션 지원 서명 존재 |
| v3.1 scheme | false | 롤백 방지 확장 서명 없음 |
| v4 scheme | false | 스트리밍 설치용 서명 없음 |
| SourceStamp | false | Google Play 공식 서명 아님 |
| Number of signers | 1 | 서명 키 1개 사용 |
