У меня есть два файла .apk, которые должны быть разными версиями одного и того же приложения. Каков наилучший способ проверить, были ли они подписаны одним и тем же ключом?
Я хочу убедиться, что не было допущено ошибок, и более новая версия будет рассматриваться как обновление того же приложения.
Для обновления APK-файла должны совпадать два свойства:
AndroidManifest.xml
после его декомпиляции)Лучший способ проверить подпись файла APK и просмотреть используемый сертификат подписи и открытый ключ для использования apksigner.jar
в Android SDK (инструменты сборки):
В следующем примере выполняется проверка двух версий приложения Samsung E-Mail с использованием apksigner
:
java -jar <path to apksigner>\apksigner.jar verify -verbose --print-certs "Samsung Email_v4.2.74.1_apkpure.com.apk"
java -jar <path to apksigner>\apksigner.jar verify -verbose --print-certs "Samsung Email_v4.1.43-5_apkpure.com.apk"
Каждый раз, когда вы получаете такой вывод:
Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): true
Number of signers: 1
Signer #1 certificate DN: EMAILADDRESS=android.os@samsung.com, CN=Samsung Cert, OU=DMC, O=Samsung Corporation, L=Suwon City, ST=South Korea, C=KR
Signer #1 certificate SHA-256 digest: 34df0e7a9f1cf1892e45c056b4973cd81ccf148a4050d11aea4ac5a65f900a42
Signer #1 certificate SHA-1 digest: 9ca5170f381919dfe0446fcdab18b19a143b3163
Signer #1 certificate MD5 digest: d087e72912fba064cafa78dc34aea839
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 2048
Signer #1 public key SHA-256 digest: 0470be656b9375d253fbb94c3a87dc7040e2f2760c19c4292eb62cc68e02de4a
Signer #1 public key SHA-1 digest: df1e4fd4fc2ebfc187f79309dfc6a4c662bda4d0
Signer #1 public key MD5 digest: 7c6371f33db3b4361504cb13beb6e818
Вам нужно только сравнить дайджест sha256 сертификата и/или открытого ключа . Если для обоих APK они одинаковы, вы можете быть уверены, что они были выпущены одним и тем же лицом или компанией (если только владелец приложения не продал приложение кому-то другому или закрытый ключ не был украден).
Вам нужно проверить две вещи:
aapt dump badging file.apk
и берегись package:
. Если имена пакетов идентичны, это должно быть одно и то же приложение, но все еще неясно, созданы ли они одним и тем же разработчиком и, следовательно, будет ли «новый» считаться «действительным обновлением» или «проверка подписи» не удастся. в этом процессе.Обратите внимание, что для описанных задач требуется хотя бы базовая установка инструментов разработчика Android. aapt
является даже частью минимальной установки ADB — jarsigner
и keytool
для этого потребуется более полный пакет (хотя, если вы работаете в Linux, openssl
предлагает другой подход — подробности можно найти в связанных сообщениях из Stack Overflow.
Райан Конрад
эпелег
ГигантДерево
AndroidManifest.xml
файл, вы сможете найти имя пакета даже без декомпиляции приложения. Он должен быть в начале файла между некоторыми символами.