Memeriksa sendiri tanda tangan APK

Saya ingin melakukan pemeriksaan terprogram pada tanda tangan APK saat runtime. Saya memiliki keystore di stasiun kerja pengembangan saya, jadi saya bisa mengetahui (tidak tahu caranya) kunci publik yang saya gunakan untuk menandatangani APK.

Setelah saya mengetahui apa yang akan menjadi kunci publik setelah signage, saya ingin memasukkan kode sumber dan memeriksa apakah aplikasi yang sedang berjalan cocok dengan kunci tersebut.

Apa itu mungkin? Jika demikian, bagaimana cara mendapatkan kunci publik dari keystore yang dihasilkan Eclipse?

Terima kasih.


person usr-local-ΕΨΗΕΛΩΝ    schedule 30.03.2012    source sumber
comment
Pertimbangkan layanan pemeriksaan lisensi Android.   -  person Seva Alekseyev    schedule 30.03.2012
comment
Maaf, ini harus berfungsi secara offline dan ditujukan untuk versi pratinjau suatu aplikasi. Saya punya pertanyaan terkait tentang ini   -  person usr-local-ΕΨΗΕΛΩΝ    schedule 30.03.2012
comment
Pemeriksaan mandiri tidak masuk akal dari sudut pandang keamanan, karena penyerang dapat mengubah kode sehingga menerima apa pun.   -  person Eugene Mayevski 'Callback    schedule 31.03.2012
comment
Benar, tapi disertai kebingungan hanya membuat hidup penyerang sedikit lebih sulit. Dalam kasus khusus saya, lisensi Android sama sekali tidak layak   -  person usr-local-ΕΨΗΕΛΩΝ    schedule 31.03.2012
comment
Apa yang saya tidak mengerti di sini adalah, jika beberapa peretas dapat mengedit apk Anda sesuai keinginannya, tidak bisakah dia menghapus stub (metode) tempat Anda melakukan pemeriksaan tanda tangan ini sehingga aplikasi bahkan tidak memeriksa apa pun. Masuk akal?   -  person eRaisedToX    schedule 24.02.2017
comment
Tentu saja, tetapi kebingungan bisa membuatnya sedikit lebih sulit   -  person usr-local-ΕΨΗΕΛΩΝ    schedule 24.02.2017


Jawaban (2)


Anda dapat mencobanya, ini akan berhasil

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
Tidak berfungsi setelah diunggah di playstore. Mencoba apknya sebelum diupload di playstore, berhasil. Namun setelah diunggah, tanda tangannya berubah. - person Tenten Ponce; 19.02.2020
comment
@TentenPonce apa solusinya? tanda tangan aplikasi Anda berubah setelah diunggah di google play? - person Farzad; 04.03.2020
comment
@Farzad masih mencari solusi lain, tapi kita bisa mencoba mempublikasikan pra-versi untuk memeriksa tanda tangan di playstore kemudian merilis ulang lagi dengan tanda tangan yang kita dapatkan dari aplikasi playstore. - person Tenten Ponce; 04.03.2020
comment
@TentenPonce Bisakah penyabot menetralisir solusi ini dengan mengubah kode Java? - person Farzad; 04.03.2020
comment
@Farzad ya, mereka masih bisa menghapus kode yang memeriksa tanda tangan. Tidak ada solusi terbaik dalam keamanan seperti yang mereka katakan. Anda hanya dapat mempersulitnya tetapi tidak sepenuhnya mencegahnya. - person Tenten Ponce; 09.03.2020
comment
mengapa tanda tangan berubah setelah diunggah ke play store? - person D.madushanka; 03.02.2021
comment
apakah ini akan berfungsi untuk file aar? - person sinek; 08.07.2021

Saya pikir saya memiliki situasi yang sama seperti Anda. Inilah solusi asli saya.

Anda mungkin bisa mencobanya.

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