반응형
작성 배경
Android Keystore가 왜 필요할까?
APK 혹은 AAB을 만들어 앱을 배포하기 위해서는, 앱에 서명하는 과정을 거쳐 서명된 앱을 배포해야만 한다.
이 과정에서 사용되는 것이 KeyStore인데, 해당 KeyStore를 사용하기 위해서는 비밀번호가 2종류가 사용되고, 1개는 Key Store Password, 다른 1가지는 Key Password이며, 이는 서명된 앱을 Generate 할 때마다 사용되게 된다.
문제는, 이 keystoe 파일이 없거나 해당 keystore 파일을 사용하기 위한 패스워드를 잊어버렸을 때 발생한다.
이 경우 기존에 플레이스토어에 올려놨던 앱을 업데이트 하는 등의 조치를 더이상 취할 수 없게 된다..
왜냐하면, keystore을 재발급 받아서 서명하게 되면, 이미 구글 플레이 스토어에 올라간 앱과 동일한 앱으로 취급하지 않기 때문이다.
또한, jks 인증서 파일의 경우 단방향 암호화로 패스워드를 저장하기 때문에 비밀번호 분실시 추출해낼 수 없는 방법이 없다.
그렇다면,,, 출시된 앱의 keystore 비밀번호를 잊어버린 난 큰일난것일까?
다행스럽게도 아직 희망의 끈은 몇개가 남아있고 그 몇가지 희망을 소개하고자 한다
해결 방법
- 안드로이드 스튜디오 로그파일
→ 유감스럽게도 해당 방법은 안드로이드 스튜디오가 최신 버전으로 업데이트 되면서 사용할 수 없다,- MAC 기준으로 ~/Library/Logs/Google/AndroidStudioXXX(버전) 폴더로 들어간다
- 여러개의
idea.log
파일을 텍스트 편집기로 열어,.password=
를 검색해본다 - 다음과 같은 로그를 발견할 수 있다
Pandroid.injected.signing.store.password=*********
- 문제는, 앞서 언급했듯이 안드로이드 스튜디오가 업데이트 되면서 기존에 비밀번호가 나왔던 부분이 *로 마스킹 처리되어 보여지기 때문에 이젠 로그파일을 통해 비밀번호를 알아낼 수 없다
- Google에서 제공하는 jar를 통해 비밀번호 찾기
- https://code.google.com/archive/p/android-keystore-password-recover/wikis/HowTo.wiki
- http://maxcamillo.github.io/android-keystore-password-recover/
- 위 2개의 사이트 중 1개를 들어가 가이드대로 실행하면 된다.
- java 7 다운로드
- 구글에서 제공하는 키 찾기 프로그램 실행
java -jar AndroidKeystoreBrute.jar <args>
(args는 매개변수) - 3가지 검색방식이 있다. 3가지 중 하나를 골라서 하면되는데 google의 추천은 3번째 방법이다.
- brute-force attack
java -jar AndroidKeystoreBrute_v1.05.jar -m 1 -k <...keystore> -start AAAAAA
- dictionary attack
java -jar AndroidKeystoreBrute_v1.05.jar -m 2 -k "C:\\mykeystore.keystore" -d "wordlist.txt 위치"
- smart wordlist attack (recommend)
java -jar AndroidKeystoreBrute_v1.05.jar -m 3 -k "C:\\mykeystore.keystore" -d "wordlist.txt 위치"
- brute-force attack
- 2번째와 3번째 방법을 사용하는 경우 비밀번호가 들어갔을 것으로 생각되는 단어들을 wordlist.txt에 작성한다. 이 때 단어들은 엔터로 구분해서 나열하면된다.
- 비밀번호로 사용할만한 가능한 모든 단어와 숫자를 넣는다
- 내가 일반적으로 사용하는 비밀번호를 넣을 때, 영문자와 숫자를 함께 쓰는경우 이를 엔터로 분리해서 wordlist.txt에 작성한다
- 계속해서 시도해보기
keytool -list -v -keystore <키스토어 파일>
를 터미널에 입력하면, 비밀번호를 입력하라고 나온다. 여러 번 틀린다고 잠기진 않으므로, 생각날 때까지 입력하면 된다..
- Remeber Password를 체크해놓은 상태인 경우
- MAC을 사용하는 경우
이 상태에서 key store password가 무엇인지 모르고 있는 경우가 있을 것이다.
이 상태에서는 어차피 복사붙여넣기로 password를 읽어오려고 해도 불가능하기 때문에, 위의 방법들을 사용하려고 하였다. - 하지만, MAC 사용자에겐 KeyChain이 있고 이를 활용하면 쉽게 Keystore 비밀번호를 가져올 수 있다.
방법은 단순하다. KeyChain Access를 열고, intellij를 검색해주게 되면,
이렇게 Key Password과 Key Store Password가 고스란히 저장되어 있는 것을 볼 수있다. 그러면 여기서 더블클릭을 통해서 암호보기를 이용해서 열어주게 되면, remeber password를 통해 저장해놨던 비밀번호를 볼 수 있게된다! - 이외에 비밀번호를 확인할 수 있는 방법
https://stackoverflow.com/questions/18701932/how-can-i-retrieve-a-saved-keystore-password-from-android-studio/53746927#53746927
- MAC을 사용하는 경우
비밀번호를 찾은 후 후속조치
비밀번호를 찾았다면, 어디엔가 꼭 확인할 수 있는 곳에 적어두도록 한다.
또한, 헷갈리는 비밀번호이기 때문에 잃어버렸을 확률이 높다. 비밀번호를 찾았다면 꼭 비밀번호도 바꿔놓도록 하자
[Keystore 비밀번호 변경]
$ keytool -storepasswd -keystore [xxxx.keystore]
$ keytool -keypasswd -alias [my-key-alias] -keystore [xxxx.keystore]
비밀번호 찾기에 실패한 경우
해당 페이지 맨 아래를 참고해서 해결내가야 한다..
반응형
'IT > Android' 카테고리의 다른 글
[Android/Retrofit] Effective Error Handling을 위한 CallAdapter의 활용 (0) | 2023.01.25 |
---|---|
[Android Dev] RecyclerView의 스크롤 상태 체크 (0) | 2023.01.22 |
[Android] Custom App Bar 사용 - Kotlin (0) | 2021.07.27 |
[Android] (2) SharedPreferences의 사용 - Kotlin (2) | 2021.07.26 |
[Android] (1) SharedPreferences의 사용 - Kotlin (0) | 2021.07.25 |