clyne의 개발 기록
[Android] APK서명과 관련한 명령어들 본문
안녕하세요
모바일 개발자 CNOO 입니다~
오늘은 APK 서명과 관련된 터미널 명령어들을 총 정리해볼거예요!
cd/Library/Android/sdk/build-tools/28.0.3
위와 같은 경로로 이동해보시면, (저는 28.0.3 버전이 설치되어있어서, 여기로 왔는데, 다른 버전이어도 상관없습니다.! 최소버전이 따로 있는지는 잘 모르겠네요.. ^^;;)
jarsigner 라는 파일이 있습니다. 이 녀석이 이번에 우리를 도와줄 녀석입니다.
자 그럼 명령어를 입력해봅시다!
1. 서명 키 확인
jarsigner -verify (-verbose) (-certs) (apk파일)
명령어는 다음과 같아요!
-verbose랑 -certs를 괄호쳐놨는데, verbose 옵션을 추가하시면, 각 파일마다(?) 어떻게 서명이 되어있는지 보여줍니다..
엄청나게 길어서 샘플로만 .. ㅎㅎ
>>> Signer
X.509, CN=letudy, OU=letudy, O=letudy
[certificate is valid from 20. 3. 24. 오전 1:02 to 19. 3. 1. 오전 1:02]
[Invalid certificate chain: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
sm 316 Thu Jan 01 01:01:02 KST 1981 res/drawable-xxhdpi-v4/ic_calendar_small.png
>>> Signer
X.509, CN=letudy, OU=letudy, O=letudy
[certificate is valid from 20. 3. 24. 오전 1:02 to 19. 3. 1. 오전 1:02]
[Invalid certificate chain: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
sm 372 Thu Jan 01 01:01:02 KST 1981 res/drawable/dialog_btn_selector_shape_n.xml
cert옵션은 서명과 관련된 내용을 보여주는 옵션인데요.
- Signed by "CN=letudy, OU=letudy, O=letudy"
Digest algorithm: SHA-256
Signature algorithm: SHA256withRSA, 2048-bit key
jar verified.
이렇게 결과값을 보여줘요!
서명 알고리즘도 잘 나와있어요
2. SHA1 지문인증서 (fingerprint)
SHA1지문인증서는 APK파일에서도 추출할 수 있고, 키스토어 파일에서도 추출할 수 있어요.
keytool 위치는 위에서 언급드린 곳과 동일한 위치예요! ㅎㅎ
APK파일에서 추출
keytool -printcert -jarfile (app.apk)
이건 좀 민감한 정보다보니, 블라인드 처리 조금 하겠습니다 ㅎㅎ
<결과값>cnoo@iMac 28.0.3 % keytool -printcert -jarfile /Users/cnoo/Desktop/release/letudy_v1.0.11.apk
Signer #1:
Signature:
Owner: CN=letudy, OU=letudy, O=letudy
Issuer: CN=letudy, OU=letudy, O=letudy
Serial number: <<<<블라인드처리>>>>>
Valid from: Tue Mar 24 01:02:18 KST 2020 until: Wed Mar 01 01:02:18 KST 2119
Certificate fingerprints:
SHA1: <<<<블라인드처리>>>>>
SHA256: <<<<블라인드처리>>>>>
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: <<<<블라인드처리>>>>> .bO....(..D.,?Id
0010: <<<<블라인드처리>>>>> .:..
]
]
키스토어에서 추출
keytool -list -v -alias (ALIAS) -keystore (APP.keystore)
이것도 동일한 결과입니다 ㅎㅎ
3. 지문인증서를 안드로이드 스튜디오에서 보기
지문인증서는 굳이 터미널 명령어가 아닌, 안드로이드 앱에서도 볼 수가 있어요.
우측의 Gradle탭에서
App > Tasks > android > signingReport를 더블클릭!
해보시면
스튜디오 아래쪽 Run탭 창에
오른쪽과 같이 서명 결과가 나옵니다 ㅎㅎ
렛터디 서명 정보가 들어있어서, 일부만 보여드리는점 양해 부탁드립니다.
감사합니다.
4. 번외 (앱 서명 및 코드얼라인)
외부 툴을 이용해 2차난독화를 진행하게되면, 서명이 풀리는 경우가 있어,
나의 경우 아래 명령어로 서명되지 않은 apk파일을 서명하고 align하는 과정을 거쳐 배포한다.
외부 업체를 통해 2차난독화를 진행하는 편이다.
1차 난독화는 프로가드나, Al****뭐시기 업체를 주로 이용했다.
보안이 중요한 앱의 난독화 처리는 외부 업체를 통해 진행해도 괜찮은 것 같다. 매번 보안성 검토에서 지적받을 일이 없으니 말이다 ㅎㅎ...
번외1: 앱 사이닝 명령어
jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA256 -keystore (키스토어) (서명할APK) (키스토어암호)
예전 사수가 앱 사이닝 후에는 코드 얼라인을 꼭 해주라고 했다. 왜 그런지는 아직도 안찾아봤고, 모르곘다... ㅎㅎ 딱히 필요성을 못느껴서... 그래도 여기에 기록해두면 자주 보고 활용할 것 같아 작성한다.
번외2: 코드 얼라인 명령어
./zipalign -f -v 4 (APK파일) (얼라인후저장할APK파일명)
'Android' 카테고리의 다른 글
[Android] APK파일 내 manifest, gradle 보기 (ADB Shell) (0) | 2021.04.10 |
---|---|
[Android] 명령어로 앱 설치하기 (ADB Shell - 앱 설치 디버깅) (0) | 2021.04.09 |