Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Cleartext
- How to Android TextFile Reader?
- AndroidBackup
- keytool
- illegalstateexception
- Android
- It
- 로그인정보
- Hilt
- 안드로이드
- 안드로이드 파이
- @InstallIn
- 설치확인
- 구글
- Oreo
- 텍스트파일 읽기
- Check Permission
- How to check permission?
- dagger
- 투명액티비티 오류
- 개발자
- TextFileReader
- java
- Permission Check
- 안드로이드백업
- IOException
- 권한 체크
- android:allowBackup
- 스토어확인
- TedPermission
Archives
- Today
- Total
사슴벌레의 개발블로그
안드로이드 APK서명 검증하기 (빌드 유효성 체크) 본문
// YOUR_DEBUG_KEY is like 'ab7VJWcdefghiVFqLIz2gKgehKk='
fun isSignatureValid(context: Context): Boolean {
var result = false
context.runCatching {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val sig = this.packageManager.getPackageInfo(this.packageName, PackageManager.GET_SIGNING_CERTIFICATES).signingInfo
if (sig.hasMultipleSigners()) {
sig.apkContentsSigners.map {
val certificate = getCertificateSHA1(generateX509CertificateFromSignature(it))
if (YOUR_DEBUG_KEY == certificate || YOUR_SIGN_KEY == certificate) {
result = true
}
}
} else {
sig.signingCertificateHistory.map {
val certificate = getCertificateSHA1(generateX509CertificateFromSignature(it))
if (YOUR_DEBUG_KEY == certificate || YOUR_SIGN_KEY == certificate) {
result = true
}
}
}
} else {
val sig = this.packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures
sig.map {
val certificate = getCertificateSHA1(generateX509CertificateFromSignature(it))
if (YOUR_DEBUG_KEY == certificate || YOUR_SIGN_KEY == certificate) {
result = true
}
}
}
}.onFailure {
// 실패시 true 로 반환
result = true
}
return result
}
private fun getCertificateSHA1(certificate: X509Certificate): String? {
val messageDigest: MessageDigest = MessageDigest.getInstance("SHA")
val der = certificate.encoded
messageDigest.update(der)
val digest: ByteArray = messageDigest.digest()
return Base64.encodeToString(digest, Base64.DEFAULT).trim()
}
private fun generateX509CertificateFromSignature(signature: Signature): X509Certificate {
val certificateFactory: CertificateFactory = CertificateFactory.getInstance("X.509")
val inputStream = ByteArrayInputStream(signature.toByteArray())
return certificateFactory.generateCertificate(inputStream) as X509Certificate
}
안드로이드 빌드 유효성 검증하는 방법...
내가 빌드한 apk파일을 다른 키스토어 파일로 빌드하는지 판단할 때 사용하면 된다...
'Android' 카테고리의 다른 글
Module is missing an @InstallIn annotation (0) | 2022.01.24 |
---|---|
앱 설치정보 확인 (앱 정상설치여부 확인) (0) | 2021.12.13 |
안드로이드 앱에서 로그인정보가 계속 남아있는경우.. (0) | 2019.08.23 |
안드로이드 파이 이슈 java.io.IOException: Cleartext HTTP traffic to www.site.com not permitted (4) | 2019.01.18 |
안드로이드 오레오버전에서 투명액티비티 오류 (0) | 2019.01.03 |
Comments