Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Android > сравнить сертификаты пакетов .apk |
Автор: Nataly88 7.4.2011, 10:07 |
Здравствуйте, подскажите пожалуйста, есть ли такая возможность получить от пакета .apk подписанный сертификат, если да, то как это реализовать? архив находится на sd-csrd. |
Автор: ivanovpv 7.4.2011, 21:21 |
Да, конечно переименуйте {myapp}.apk в {myapp}.zip и извлеките Meta-inf/cert.rsa - и сравните его сигнатуру со своим сертификатом. |
Автор: Nataly88 7.4.2011, 23:17 |
а что вы имеете в виду под "своим" сертификатом?(к сожалению не до конца понимаю эту систему) вообще моя задача заключается в сравнении сертификатов 2-ух .apk архивов, необходим ли этот этап - сверять со "своим" сертификатом? |
Автор: SneG0K 7.4.2011, 23:24 |
Полагаю что вам тогда надо извлечь сертификаты из обоих apk и сравнить их подписи между собой или вы хотите один сертификат перенести на другое приложение? |
Автор: Nataly88 8.4.2011, 00:01 |
нет не хочу,мне именно и нужно взять эти 2 сертификата, 2-ух разных .apk, но суть в том, что я не знаю как это сделать, я нашла такой вариант, как получить подпись, но не уверена, что этого достаточно: PackageManager pm = getPackageManager(); try { PackageInfo info = pm.getPackageInfo("com.example.app", PackageManager.GET_SIGNATURES); Signature[] sig = info.signatures; String sigstring = new String(sig[0].toChars()); //Do something with signature. //System.out.println(sigstring); } catch (NameNotFoundException e) { e.printStackTrace(); } |
Автор: SneG0K 8.4.2011, 00:08 |
Так что вам надо сделать с этими сертификатами? Взять и? |
Автор: Nataly88 8.4.2011, 00:13 |
и сравнить, если равно, то True иначе false |
Автор: SneG0K 8.4.2011, 01:18 |
Ну, судя по всему ваш код возвращает строку с подписью. таким же образом можно получить подпись и для второго приложения и просто сравнить эти строки |
Автор: Nataly88 8.4.2011, 08:17 |
спасибо всем, буду пробовать реализовывать. |
Автор: Nataly88 9.4.2011, 10:53 |
мне удалось получить подпись таким образом из пакета, но из архива не удалось,не понимаю в чем проблема, путь указан верно(к архиву производится обращение): PackageInfo info = pm.getPackageArchiveInfo(Environment.getExternalStorageDirectory()+"/MyFolder/"+"app.apk", PackageManager.GET_SIGNATURES); но в info всегда null, а если брать подпись из аналогичного уже установленного приложения - все работает,может, я что-то делаю не так? |
Автор: SneG0K 10.4.2011, 05:29 |
app.apk - это не что иное как зип-архив. А установленное приложение уже куда-то там прописываеся в телефон. Т.е. вы если вы должны програмно открыть архив и достать оттуда сертификат, посчитать его CRC (или как там, я не сильно в курсе) и сравнить. |