LoginSignup
3
2

androidのapkをapksignerでverifyする

Posted at

apksignerと署名スキームのページが若干ばらついているのとv4の検証コマンドがサイトにないためまとめる

apksignerとは

https://developer.android.com/studio/command-line/apksigner

Android SDK Build Toolsに含まれており、apkの署名と署名の検証ができる

apk署名スキーム

v1からv4まで存在する

version 特徴 リンク
v1 JARベースの署名スキーム https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Signed_JAR_File
v2 android7から使用可能
apkの無許可変更を許容しない
https://source.android.com/docs/security/features/apksigning/v2
v3 android9から使用可能
鍵のrotationが可能になった
https://source.android.com/docs/security/features/apksigning/v3
v3.1 android13から使用可能
v3のバグ修正パッチが当たっている
https://source.android.com/docs/security/features/apksigning/v3-1
v4 android11から使用可能
apkの全バイトに対して署名計算を行う
互換性の高めるためにv2もしくはv3での署名も必要
https://source.android.com/docs/security/features/apksigning/v4

署名する

Gradle

build.gradleからMin SDKとTarget SDKを読み取って署名スキームを良しなに使い分けてくれる

signingConfigs内の各keyにフラグを設定することで有効化できる

app/build.gradle
android.signingConfigs {
    release {
        storeFile = rootProject.file("release.keystore")
        enableV1Signing = true
        enableV2Signing = true
        enableV3Signing = true
        enableV4Signing = true
    }
}

コマンドライン

apkファイルからMin SDKとTarget SDKを読み取って署名スキームを良しなに使い分けてくれる

オプションで指定することも可能

v2, v3を有効化する例

apksigner sign --ks <jks|keystore file> --v2-signing-enabled true --v3-signing-enabled true <apk file>

署名時のオプションはサイトにちゃんとまとまっている

https://developer.android.com/studio/command-line/apksigner#options

検証する

v1 ~ v3.1はapkファイルのみで検証が可能

v1 ~ v3.1

apksigner verify -v <apk file>
Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Verified using v3.1 scheme (APK Signature Scheme v3.1): false
Verified using v4 scheme (APK Signature Scheme v4): false
Verified for SourceStamp: false
Number of signers: 1

v4

v4は署名時に生成されるidsigファイル(signature file)が必要

apksigner verify -v -v4-signature-file <idsig file> <apk file>
Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Verified using v3.1 scheme (APK Signature Scheme v3.1): false
Verified using v4 scheme (APK Signature Scheme v4): true
Verified for SourceStamp: false
Number of signers: 1

v4で署名していてもsignature fileをapksignerに渡さない場合はv4での検証ができないことに注意

渡さなかった場合はv3.1までの検証が実行される

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2