clyne의 개발 기록

[Android] APK서명과 관련한 명령어들 본문

Android

[Android] APK서명과 관련한 명령어들

clyne_dev 2021. 4. 11. 09:00

안녕하세요

모바일 개발자 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파일명)