ตรวจสอบลายเซ็นของ APK ด้วยตนเอง

ฉันต้องการดำเนินการตรวจสอบลายเซ็นของ APK ขณะรันไทม์โดยทางโปรแกรม ฉันเป็นเจ้าของที่เก็บคีย์บนเวิร์กสเตชันการพัฒนาของฉัน ดังนั้นฉันจึงรู้ (ไม่ทราบได้อย่างไร) ว่าคีย์สาธารณะที่ฉันกำลังลงนาม APK ด้วยคืออะไร

เมื่อฉันรู้ว่ากุญแจสาธารณะจะเป็นอย่างไรหลังป้าย ฉันต้องการใส่ซอร์สโค้ดและตรวจสอบว่าแอปพลิเคชันที่รันอยู่ในปัจจุบันตรงกับคีย์หรือไม่

เป็นไปได้ไหม? หากเป็นเช่นนั้น ฉันจะรับพับลิกคีย์จากที่เก็บคีย์ที่สร้างโดย Eclipse ได้อย่างไร

ขอบคุณ.


person usr-local-ΕΨΗΕΛΩΝ    schedule 30.03.2012    source แหล่งที่มา
comment
ลองใช้บริการตรวจสอบใบอนุญาตของ Android   -  person Seva Alekseyev    schedule 30.03.2012
comment
ขออภัย สิ่งนี้ต้องทำงานแบบออฟไลน์และเป็นแอปเวอร์ชันตัวอย่าง ฉันมีคำถามที่เกี่ยวข้องเกี่ยวกับเรื่องนี้   -  person usr-local-ΕΨΗΕΛΩΝ    schedule 30.03.2012
comment
การตรวจสอบตัวเองนั้นไม่สมเหตุสมผลเลยจากมุมมองด้านความปลอดภัย เนื่องจากผู้โจมตีสามารถแก้ไขโค้ดเพื่อให้ยอมรับอะไรก็ได้   -  person Eugene Mayevski 'Callback    schedule 31.03.2012
comment
จริงอยู่ แต่เมื่อรวมกับการทำให้งงงันแล้ว จะทำให้ชีวิตของผู้โจมตียากขึ้นอีกหน่อยเท่านั้น ในกรณีเฉพาะของฉัน การให้สิทธิ์ใช้งาน Android ไม่สามารถทำได้โดยสิ้นเชิง   -  person usr-local-ΕΨΗΕΛΩΝ    schedule 31.03.2012
comment
สิ่งที่ฉันไม่เข้าใจในที่นี้คือ หากแฮ็กเกอร์บางคนสามารถแก้ไข APK ของคุณในแบบที่เขาต้องการได้ เขาจะลบ stub (วิธีการ) ที่คุณทำการตรวจสอบลายเซ็นนี้ออกไม่ได้ เพื่อให้แอปไม่ได้ตรวจสอบอะไรเลยด้วยซ้ำ มีเหตุผล?   -  person eRaisedToX    schedule 24.02.2017
comment
แน่นอน แต่การทำให้สับสนอาจทำให้ยากขึ้นอีกเล็กน้อย   -  person usr-local-ΕΨΗΕΛΩΝ    schedule 24.02.2017


คำตอบ (2)


คุณสามารถลองสิ่งนี้ได้ มันควรจะได้ผล

Signature[] sigs = getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
    for (Signature sig : sigs)
    {
        // log the sig here
    }
person Faisal Abid    schedule 30.03.2012
comment
ใช้งานไม่ได้หลังจากอัพโหลดบน playstore ลองใช้ apk ก่อนอัพโหลดบน playstore ก็ใช้งานได้ แต่หลังจากอัพโหลดแล้วลายเซ็นต์ก็เปลี่ยนไป - person Tenten Ponce; 19.02.2020
comment
@TentenPonce วิธีแก้ปัญหาคืออะไร? ลายเซ็นแอปของคุณเปลี่ยนไปหลังจากอัปโหลดบน Google Play? - person Farzad; 04.03.2020
comment
@Farzad ยังคงมองหาวิธีแก้ปัญหาอื่น แต่เราสามารถลองเผยแพร่เวอร์ชันล่วงหน้าเพื่อตรวจสอบลายเซ็นบน playstore จากนั้นเผยแพร่อีกครั้งพร้อมกับลายเซ็นที่เราได้รับจากแอป playstore - person Tenten Ponce; 04.03.2020
comment
@TentenPonce ผู้ก่อวินาศกรรมสามารถต่อต้านโซลูชันนี้โดยการเปลี่ยนโค้ด Java ได้หรือไม่ - person Farzad; 04.03.2020
comment
@Farzad ใช่แล้ว พวกเขายังสามารถลบรหัสที่ตรวจสอบลายเซ็นได้ ไม่มีกระสุนเงินในการรักษาความปลอดภัยอย่างที่พวกเขาพูด คุณทำได้เพียงทำให้มันยากแต่ไม่สามารถป้องกันได้ทั้งหมด - person Tenten Ponce; 09.03.2020
comment
ทำไมลายเซ็นถึงเปลี่ยนหลังจากอัพโหลดไปที่ play store? - person D.madushanka; 03.02.2021
comment
สิ่งนี้จะใช้ได้กับไฟล์ aar หรือไม่? - person sinek; 08.07.2021

ฉันคิดว่าฉันมีสถานการณ์เช่นเดียวกับคุณ นี่คือโซลูชันดั้งเดิมของฉัน

คุณอาจต้องลองมัน

Signature sig = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0];
Signature releaseSig = context.getPackageManager().getPackageAchiveInfo("/mnt/sdcard/myReleaseApk.apk", PackageManager.GET_SIGNATURES).signatures[0];
return sig.hashCode() == releaseSig.hashCode;
person Shengfeng Li    schedule 27.07.2016