引言
从Android演进开始,APK签名就已经成为Android的一部分,并且android要求所有Apks都必须先签名,然后才能将其安装在设备上。关于如何生成密钥以及如何签名的文章很多。一个Apk,但我们将从安全角度进行研究。在对Apk文件进行反编译或反向工程之后,应查看哪个文件,以获取有关最初对应用进行签名的开发人员的更多信息。
反编译APK文件
解压缩文件或使用apktool后,取决于如何对文件进行反编译,如果解压缩文件,则文件结构将如下所示。
我们正在查看META-INF文件夹,
正在查看使用Apktool进行的反编译Apk,它在原始文件夹中包括有关开发人员的证书详细信息以及所使用的哈希算法的类型等,并检查META-INF文件夹。
当您当前仍位于META-INF文件夹中时,使用keytool检查证书。
keytool -printcert -file DROIDRDR.RSA
根据证书别名的名称,从证书颁发之日和证书设置为过期起,您将看到所有者,国家/地区,颁发者,证书有效性的不同信息。
MD5,SHA1和SHA256中的证书指纹以及所使用的签名算法。
之前,我谈论了生成证书,让我们从安全角度来看它,在分析您从第三方网站下载的Android应用程序时,您可以反编译该应用程序并查看该证书并将其与原始应用程序进行比较,在使用的哈希算法上,如果应用程序可能已被修改或篡改,则将其进行比较,我不会在谈论分析APK文件,但可能会稍后。
生成Android证书
如果您反编译并重新编译android应用程序,则需要对应用程序进行签名,如果不签名,则该应用程序将不会安装在用户设备上。有多种生成证书的方法,但是,我们将介绍使用keytool生成证书的三种方法。
方法1:
打开您的终端:
keytool -genkey -v -keystore awwal -alias hafsa -keyalg RSA -keysize 2048 -validity 365
其中 awwal —是密钥库名称,hafsa是证书别名,使用后将被添加到META-INF文件夹-keysize 2048中,但是您可以使用4096大小,但是设备存在与此有关的问题或者。但仅使用2048,有效期为几天。
方法2:
使用可在此处下载的apk-signer.jar。这是用Java编写的GUI,可生成证书并进行签名一个APK文件。尽管Playstore中也有一个Android应用程序。
签署Android应用程序
在您已经生成了Android应用程序之后,我们将研究如何对应用程序进行签名,运行您的终端:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore awwal medium.apk hafsa
其中-sigalg是使用的签名算法,您可以使用MD5找到一些应用程序,但是在验证应用程序时使用SHA1,因为它将告诉您使用的哈希算法以及使用的算法的弱度。
密钥库— awwal是生成证书时使用的密钥库名称的名称,hafsa是证书的别名,而medium.apk是要签名的应用程序的名称。
注意:如果您使用MD5,则该应用程序将被视为未签名应用程序,因为用于签署应用程序的算法很弱。
验证Android应用程序
使用jarsigner验证应用程序,以查看资源签名列表以及具有keysize的哈希算法。
打开您的终端:
jarsigner -verify -verbose medium.apk
其中仅验证将显示它是签名还是未签名,并使用详细选项查看证书的完整详细信息。
或者,您可以使用Apk签名者来自动完成文件名验证应用。
写在最后
虽然上面我们使用的都是 java 工具链的东西,其实生成的 CERT.RSA 文件内,包含了公钥链,也完全可以使用 openssl 工具打印出 pubkey 证书文件,并可做进一步的指纹校验。
关键是生成签名的方法,这个对于使用不同的工具复现过程很关键。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
领取专属 10元无门槛券
私享最新 技术干货