Como verifico se um apk do Android está assinado com um certificado de versão?

222

Como posso verificar se um apk do Android está assinado com uma liberação e não com um certificado de depuração?

Vadivelan
fonte
6
Eu escrevi um script que validará um apk em um keystore.
JohnnyLambada
aceite a resposta se você tiver a sua.
Rinkal Bhanderi
@JohnnyLambada Como posso executar seu script no Mac?
Aaron Azhari
1
@JohnnyLambada Como posso executar seu script?
Sunil
@sunil É um script do bash que cria uma nova função do bash. siga o link e cole-o em um arquivo então source thatfile. Os comentários no script explicam como executá-lo.
precisa saber é o seguinte

Respostas:

372

Use este comando (vá para o caminho java <jdk <bin no prompt do cmd)

$ jarsigner -verify -verbose -certs my_application.apk

Se você vir "CN = Android Debug", isso significa que o .apk foi assinado com a chave de depuração gerada pelo Android SDK (significa que não está assinado), caso contrário, você encontrará algo para o CN. Para mais detalhes, consulte: http://developer.android.com/guide/publishing/app-signing.html

Anass
fonte
1
Eu recebi a mensagem como jar verificado no final da execução do comando para 2 arquivos apk diff.so ficou confuso. mas como ele fornece CN = "depuração do Android" para 1 apk e diferente para outro apk. passou a saber qual deles está assinado. Obrigado.
iRunner 4/10/12
3
Como isso verifica a assinatura? Ele usará as CAs confiáveis ​​do sistema? Ou isso é apenas uma ferramenta para verificar a integridade dos arquivos jar? Obrigado
Mostafa Shahverdy
2
this means the .apk was signed with the debug key generated by the Android SDK (means it is unsigned)- isso não significa que não está assinado. Significa o que você acabou de escrever - é assinado com a chave de depuração.
Dmitry Zaytsev
3
Como podemos verificar se ele foi assinado com o mesmo arquivo de certificado exato e não apenas com os mesmos valores para organização, local etc.?
OlivierM
1
Obrigado. Portanto jarsigner -verify -verbose -certs myapp.apk | grep CN= | less, não devemos ver "CN = Android Debug".
Rpattabi
70

Use o comando do console:

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

Você pode encontrar um apksigner em ../sdk/build-tools/24.0.3/apksigner.bat. Somente para ferramentas de construção v. 24.0.3 e superior.

Leia também o Google Docs: https://developer.android.com/studio/command-line/apksigner.html

PavelGP
fonte
Eu encontrei apksignerem `% LOCALAPPDATA% \ Android \ SDK \ build-tools \ 25.0.3` (e todos os outros versão ferramentas de compilação que eu tinha instalado)
Jon
2
Observe que apksignerestá faltando na versão 26.0.0das ferramentas de construção. Ele é rastreado no issuetracker.google.com/issues/62696222 e deve ser corrigido na próxima versão. A solução até que, em seguida, é a utilização apksignerde 25.0.3.
Friederbluemle
2
Atualização: apksignerestá incluído na versão26.0.1
forresthopkinsa
Update: APKSigner também está em 26.0.2, 26.0.3, 27.0.0, 27.0.1, 27.0.2 Eu acredito que você vai encontrá-lo em todos os futuros lançamentos :)
Kirill Vashilo
2
para saída detalhada use -v:./apksigner verify --print-certs -v ~/Downloads/MyAppHere.apk
Tilo
59

Use este comando: (O Jarsigner está na sua pasta bin Java, vá para java-> jdk-> caminho bin no prompt do cmd)

$ jarsigner -verify my_signed.apk

Se o .apk estiver assinado corretamente, o Jarsigner imprimirá "jar verificado"

Udaykiran
fonte
13
Isso não é bom o suficiente, pois os aplicativos de depuração e de liberação são assinados com o "jar verificado". Verifique os detalhes da resposta de @ Anass.
Rpattabi
Eu tentei exatamente esse comando e verifiquei. Então, como um experimento, entrei no APK e excluí literalmente todos os arquivos, exceto os arquivos sig e o manifesto, e ele ainda foi verificado. Então, algo está muito errado aqui. No entanto, ainda estou para tentar a resposta de @ Anass.
orblivion
39

O mais fácil de todos:

keytool -list -printcert -jarfile file.apk

Isso usa o aplicativo keytool interno do Java e não requer extração ou instalação de ferramentas de construção.

Randy Sugianto 'Yuku'
fonte
Para quem não pode executar keytoolimediatamente, verifique isso e talvez tente adicionar %JAVA_HOME%\binao caminho
TT--