ฉันมีแอพที่ลงชื่อและที่เก็บไฟล์หลายไฟล์ ฉันต้องการอัปเดตแอปดังนั้นฉันจึงต้องตรวจสอบว่าใช้หนึ่งในคีย์ใด
ฉันจะจับคู่ keystore ใดที่ใช้ในการเซ็นชื่อแอพของฉันกับที่เก็บคีย์ต่าง ๆ ที่ฉันมีในเครื่องของฉัน
ฉันมีแอพที่ลงชื่อและที่เก็บไฟล์หลายไฟล์ ฉันต้องการอัปเดตแอปดังนั้นฉันจึงต้องตรวจสอบว่าใช้หนึ่งในคีย์ใด
ฉันจะจับคู่ keystore ใดที่ใช้ในการเซ็นชื่อแอพของฉันกับที่เก็บคีย์ต่าง ๆ ที่ฉันมีในเครื่องของฉัน
คำตอบ:
ก่อนอื่นให้เปิดเครื่องรูด APK และแตกไฟล์ /META-INF/ANDROID_.RSA (ไฟล์นี้อาจเป็น CERT.RSA แต่ควรมีไฟล์. RSA เพียงไฟล์เดียวเท่านั้น)
จากนั้นออกคำสั่งนี้:
keytool -printcert -file ANDROID_.RSA
คุณจะได้รับลายนิ้วมือใบรับรองเช่นนี้:
MD5: B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB
SHA1: 16:59:E7:E3:0C:AA:7A:0D:F2:0D:05:20:12:A8:85:0B:32:C5:4F:68
Signature algorithm name: SHA1withRSA
จากนั้นใช้ keytool อีกครั้งเพื่อพิมพ์นามแฝงทั้งหมดของที่เก็บคีย์ของคุณ:
keytool -list -keystore my-signing-key.keystore
คุณจะได้รับรายชื่อแทนและลายนิ้วมือใบรับรอง:
android_key, Jan 23, 2010, PrivateKeyEntry,
Certificate fingerprint (MD5): B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB
Voila! ตอนนี้เราสามารถพิจารณาได้ว่า apk ได้รับการลงนามด้วย keystore นี้และด้วยนามแฝง 'android_key'
Keytool เป็นส่วนหนึ่งของ Java ดังนั้นตรวจสอบให้แน่ใจว่า PATH ของคุณมีการติดตั้ง Java ในตัว
คุณสามารถใช้เครื่องมือการจัดการคีย์และใบรับรองของ Java 7 keytool
เพื่อตรวจสอบลายเซ็นของที่เก็บคีย์หรือ APK โดยไม่ต้องแตกไฟล์ใด ๆ
keytool -printcert -jarfile app.apk
เอาท์พุทจะเปิดเผยลายเซ็นเจ้าของ / ผู้ออกหลักทรัพย์และ MD5, SHA1 SHA256 app.apk
และลายนิ้วมือของไฟล์
(โปรดทราบว่ามีการ-jarfile
แนะนำอาร์กิวเมนต์ใน Java 7 ดูเอกสารประกอบสำหรับรายละเอียดเพิ่มเติม)
keytool -list -v -keystore release.jks
เอาต์พุตจะเปิดเผยนามแฝง (รายการ) ในไฟล์ที่เก็บคีย์release.jks
พร้อมกับลายนิ้วมือใบรับรอง (MD5, SHA1 และ SHA256)
หากลายนิ้วมือ SHA1 ระหว่าง APK และที่เก็บคีย์ตรงกันคุณสามารถมั่นใจได้ว่าแอปนั้นลงชื่อด้วยรหัส
-jarfile
ข้อโต้แย้งถูกนำมาใช้กับ Java 7 ฉันได้อัปเดตคำตอบ
เพื่อสร้างคำตอบของ Paul Lammertsma คำสั่งนี้จะพิมพ์ชื่อและลายเซ็นของ APK ทั้งหมดใน dir ปัจจุบัน (ฉันใช้ sh เพราะในภายหลังฉันต้องไปป์ที่เอาต์พุตเพื่อ grep):
find . -name "*.apk" -exec echo "APK: {}" \; -exec sh -c 'keytool -printcert -jarfile "{}"' \;
ตัวอย่างผลลัพธ์:
APK: ./com.google.android.youtube-10.39.54-107954130-minAPI15.apk
Signer #1:
Signature:
Owner: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Issuer: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Serial number: 4934987e
Valid from: Mon Dec 01 18:07:58 PST 2008 until: Fri Apr 18 19:07:58 PDT 2036
Certificate fingerprints:
MD5: D0:46:FC:5D:1F:C3:CD:0E:57:C5:44:40:97:CD:54:49
SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
SHA256: 3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A
Signature algorithm name: MD5withRSA
Version: 1
APK: ./com.google.android.youtube_10.40.56-108056134_minAPI15_maxAPI22(armeabi-v7a)(480dpi).apk
Signer #1:
Signature:
Owner: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Issuer: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Serial number: 4934987e
Valid from: Mon Dec 01 18:07:58 PST 2008 until: Fri Apr 18 19:07:58 PDT 2036
Certificate fingerprints:
MD5: D0:46:FC:5D:1F:C3:CD:0E:57:C5:44:40:97:CD:54:49
SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
SHA256: 3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A
Signature algorithm name: MD5withRSA
Version: 1
หรือถ้าคุณสนใจ SHA1:
find . -name "*.apk" -exec echo "APK: {}" \; -exec sh -c 'keytool -printcert -jarfile "{}" | grep SHA1' \;
ตัวอย่างผลลัพธ์:
APK: ./com.google.android.youtube-10.39.54-107954130-minAPI15.apk
SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
APK: ./com.google.android.youtube_10.40.56-108056134_minAPI15_maxAPI22(armeabi-v7a)(480dpi).apk
SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
วิธีที่ง่ายกว่ามากในการดูใบรับรองการลงนาม:
jarsigner.exe -verbose -verify -certs myapk.apk
สิ่งนี้จะแสดงเฉพาะ DN ดังนั้นหากคุณมีสอง certs กับ DN เดียวกันคุณอาจต้องเปรียบเทียบด้วยลายนิ้วมือ
มีหลาย freewares การตรวจสอบใบรับรองและร้านค้าที่สำคัญเช่นKeyStore Explorer ที่
เปิดเครื่องรูด apk และเปิดไฟล์ META-INF / ?. RSA ? จะเป็น CERT หรือ ANDROID หรืออาจเป็นอย่างอื่น มันจะแสดงข้อมูลทั้งหมดที่เกี่ยวข้องกับ apk ของคุณ
คุณสามารถทำได้ด้วยapksigner
เครื่องมือที่เป็นส่วนหนึ่งของ Android SDK:
apksigner verify --print-certs my_app.apk
คุณสามารถค้นหา apksigner ในไดเรกทอรี build-tools ตัวอย่างเช่น:
~/Library/Android/sdk/build-tools/29.0.1/apksigner