ฉันจะตรวจสอบได้อย่างไรว่า Android apk ได้รับการรับรองด้วยใบรับรองการออก


222

ฉันจะตรวจสอบว่า Android apk ลงชื่อด้วยรีลีสและไม่แก้ปัญหาใบรับรองได้อย่างไร


6
ฉันเขียนสคริปต์ที่จะตรวจสอบ apk กับที่เก็บคีย์
JohnnyLambada

ยอมรับคำตอบถ้าคุณมีของคุณ
Rinkal Bhanderi

@JohnnyLambada ฉันจะเรียกใช้สคริปต์ของคุณใน Mac ได้อย่างไร?
Aaron Azhari

1
@JohnnyLambada ฉันจะรันสคริปต์ของคุณได้อย่างไร
นิล

@sunil มันเป็นสคริปต์ทุบตีที่สร้างฟังก์ชั่นทุบตีใหม่ source thatfileตามลิงค์และวางมันลงในไฟล์แล้ว ความคิดเห็นในสคริปต์อธิบายวิธีเรียกใช้
JohnnyLambada

คำตอบ:


372

ใช้คำสั่งนี้ (ไปที่ java <jdk <bin path ในพรอมต์ cmd)

$ jarsigner -verify -verbose -certs my_application.apk

หากคุณเห็น "CN = Android Debug" นี่หมายความว่า. apk ได้รับการลงนามด้วยคีย์แก้ไขข้อบกพร่องที่สร้างขึ้นโดย Android SDK (หมายถึงไม่มีการลงนาม) มิฉะนั้นคุณจะพบบางอย่างสำหรับ CN ดูรายละเอียดเพิ่มเติมได้ที่: http://developer.android.com/guide/publishing/app-signing.html


1
ฉันได้รับข้อความขณะที่ jar ตรวจสอบในตอนท้ายของการดำเนินการคำสั่งสำหรับไฟล์ 2 diff apk ดังนั้นสับสน แต่มันให้ CN = "android debug" สำหรับ 1 apk และต่างกันสำหรับ apk .got อื่น ๆ ที่จะรู้ว่ามีการลงนาม 1 ขอบคุณ
iRunner

3
สิ่งนี้จะตรวจสอบลายเซ็นได้อย่างไร มันจะใช้ CA ที่ไว้วางใจได้ของระบบหรือไม่ หรือนี่เป็นเพียงเครื่องมือในการตรวจสอบความสมบูรณ์ของไฟล์ jar? ขอบคุณ
Mostafa Shahverdy

2
this means the .apk was signed with the debug key generated by the Android SDK (means it is unsigned)- นี่ไม่ได้หมายความว่าไม่ได้ลงนาม มันหมายถึงสิ่งที่คุณเพิ่งเขียน - มันถูกเซ็นชื่อด้วย debug key
Dmitry Zaytsev

3
เราจะตรวจสอบได้อย่างไรว่ามีการลงชื่อด้วยไฟล์ใบรับรองที่แน่นอนและไม่ใช่เพียงไฟล์เดียวที่มีค่าเหมือนกันสำหรับองค์กรที่ตั้ง ฯลฯ
OlivierM

1
ขอบคุณ ดังนั้นjarsigner -verify -verbose -certs myapp.apk | grep CN= | lessเราไม่ควรเห็น "CN = Android Debug"
rpattabi

70

ใช้คำสั่งคอนโซล:

apksigner verify --print-certs application-development-release.apk

คุณสามารถค้นหา apksigner ใน ../sdk/build-tools/24.0.3/apksigner.bat เฉพาะสำหรับเครื่องมือสร้าง v. 24.0.3 และสูงกว่า

อ่าน google docs ด้วย: https://developer.android.com/studio/command-line/apksigner.html


ฉันพบapksignerใน `% LOCALAPPDATA% \ Android \ sdk \ build-tools \ 25.0.3` (และทุกรุ่นเครื่องมือสร้างอื่น ๆ ที่ฉันได้ติดตั้งไว้)
Jon

2
โปรดทราบว่าapksignerเวอร์ชัน26.0.0เครื่องมือหายไป มีการติดตามในissuetracker.google.com/issues/62696222และควรได้รับการแก้ไขในรุ่นถัดไป วิธีแก้ปัญหาจนแล้วคือการใช้จากapksigner 25.0.3
friederbluemle

2
อัปเดต: apksignerรวมอยู่ในเวอร์ชัน26.0.1
forresthopkinsa

อัปเดต: APKSigner นั้นอยู่ใน 26.0.2, 26.0.3, 27.0.0, 27.0.1, 27.0.2 ฉันเชื่อว่าคุณจะพบมันในการเผยแพร่ในอนาคตทั้งหมด :)
Kirill Vashilo

2
สำหรับการใช้เอาต์พุต verbose -v:./apksigner verify --print-certs -v ~/Downloads/MyAppHere.apk
Tilo

59

ใช้คำสั่งนี้: (Jarsigner อยู่ในโฟลเดอร์ Java bin ของคุณ goto java-> jdk-> bin bin ในคำสั่ง cmd)

$ jarsigner -verify my_signed.apk

หาก. apk ได้รับการลงชื่ออย่างถูกต้อง Jarsigner จะพิมพ์ "jar Verify"


13
สิ่งนี้ไม่ดีพอเนื่องจากทั้ง debug และ release apks จะได้รับ "jar Verify" ตรวจสอบรายละเอียดคำตอบของ @ Anass
rpattabi

ฉันลองทำตามคำสั่งนี้และยืนยันแล้ว จากนั้นเป็นการทดลองฉันไปที่ APK และลบตัวอักษรทุกไฟล์ยกเว้นไฟล์ sig และรายการและยังคงยืนยัน ดังนั้นมีบางอย่างผิดปกติมากที่นี่ อย่างไรก็ตามฉันยังไม่ได้ลองคำตอบของ @ Anass
orblivion

39

ง่ายที่สุดของทั้งหมด:

keytool -list -printcert -jarfile file.apk

สิ่งนี้ใช้แอพพลิเคชั่น keytool ในตัวของ Java และไม่ต้องการการแตกไฟล์หรือการติดตั้งเครื่องมือในตัว


สำหรับผู้ที่ไม่สามารถทำงานkeytoolได้ทันทีตรวจสอบสิ่งนี้และอาจลองเพิ่ม%JAVA_HOME%\binในเส้นทาง
TT--

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.