Android签名机制及绕过

前言

了解APK签名机制,可以让我们更加高效的解决关于APK签名绕过问题,假期我曾经碰到过这类题目,所以了解了一下这方面的知识。

一、APK签名原理

apk发布者需要使用android 密钥生成工具创建的keystore对APK进行签名,此时会在APK根目录中生成META-INF文件,其中包括了MANIFEST.MF,CERT.SF,CERT.RSA三个文件。
1.MANIFEST.MF
遍历apk包中所有文件,对非文件夹、非签名文件的文件,逐个生成SHA1数字签名信息,再用Base64进行编码。之后生成的签名写入MANIFEST.MF文件。
2.CERT.SF
对生成的MANIFEST.MF签名信息,使用SHA1-RSA算法,用私钥进行签名。
3.CERT.RSA
在CERT.RSA文件中保存公钥、所采用的加密算法等信息。
Android签名机制及绕过_第1张图片

二、APK签名方法

在《第一行代码》中,最后一节介绍了应用程序的签名发布,书中只是大体介绍了签名发布的操作,但是了解原理也非常重要。
APK常用的签名方法有两种,对应着两种工具——jarsigner和signapk。
jarsigner是JDK提供的针对jar包签名的通用工具,signapk是Google官方提供的针对Android apk签名及验证的专用工具。两者的签名算法差别不大,主要是调用文件不同。
jarsigner工具签名时使用的是keystore文件,signapk工具签名时使用的是pk8,x509.pem文件。这两者也是可以相互转换的,这里就不细说了。
signapk使用方法

java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk

jarsign使用方法

jarsigner -verbose -keystore d:\\debug.keystore -signedjar update_signed.apk update.apk androiddebugkey -digestalg SHA1 -sigalg MD5withRSA -keypass android -storepass android

重点提一下apksigner,他克服了以上两者在签名过程中的缺点,比如在我们的签名过程中,会碰到V1(Jar Signature) ,V2(Full APK Signature)两种签名方式。Android 7.0版本以下,只能使用v1。但是apksigner工具同时默认使用v1和v2签名。
apksigner使用方法

java -jar ApkSigner.jar [-appname test] -keystore keystorePath -alias alias [-pswd password] [-aliaspswd aliasPassword] apkPath(or directory)

在这里面:

-keystore表示keystore文件的路径

androiddebugkey 表示keystore中的一个别名

-digestalg表示摘要算法

-sigalg 表示签名算法

-keypass 表示别名密码

-storepass表示keystore密码

你可能感兴趣的:(逆向工程,Android)