Android攻防笔记之APP签名

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_14976351/article/details/50449576
一、签名证书的提取
     APP签名是将开发者ID与其所开发的APP以hash函数关联实现的,它保证了app的唯一性,不会被其他APP冒充。在Android中,所有APP安装之前必须被签名。它的工作原理是,利用hash函数对APP中内容(资源、文件等)进行签名,如下图所示。在apk文件内容被签名之后,hash函数会和开发者的证书绑定一起发布出来,而证书是由开发者的私钥加密的(不是可信第三方)。



     接下来,我们开始检查APP证书了。首先,解压apk文件。解压之后打开META-INF文件夹。我们这里以百度手机助手为例,如下图所示。BDMOBILE.RSA是公钥证书的自签名文件,BDMOBILE.SF是关于APP内容签名的文件,MANIFEST.MF主要是声明了资源,与BDMOBILE.SF相似。
打开BDMOBILE.RSA文件,在dos中输入keytool -printcert -file (BDMOBILE.RSA具体路径),如下图所示:



     上图就是公钥证书的内容,声明了所有者,发布者,序列号,有效期,证书指纹和签名算法。
CERT.RSA是一个X.509 v3证书,包括所有者,发布者,序列号,有效期,证书指纹五部分。
所有者是用来声明公钥所有者,也就是开发者。包含了开发者单位,组织,国家等信息。
发布者是用来声明证书颁发者的,把所有者和证书关联起来,通俗一点就是,就是为密钥所有者提供担保证明。
序列号是证书号,用来唯一标识证书的。
证书指纹是用来检验证书是否被篡改过。

     使用记事本打开BDMOBILE.SF文件



     MANIFEST.MF中内容和BDMOBILE.SF差不多,这里就不一一重复了。

     权威的数字签名是利用可信第三方的私钥对证书加密的,而在Android APP中,证书是由自己的私钥签名的。这样Android管理器无法验证证书中的所有者,颁发者等信息是否正确。

二、对Android APP签名

     在我们开发Android APP时,IDE会自动给Android进行签名。然而,为了进一步了解签名过程我们需要掌握“手工签名”。
     首先,我们需要在本地建立一个密钥库存放签名用的公私密钥对及相关信息。在dos中输入以下命令即可。

  

 可以通过keystore -genkey -help命令查看详细命令

     

查看已有的密钥库命令: keytool -list -v -keystore (具体路径)

现在使用新的密钥存储器对百度手机助手进行签名
命令为:jarsigner -verbose -sigalg sha1 -keystore 密钥存储器的路径 apk文件的路径 密钥别名


三、验证APP签名

验证命令:jarsigner -vertify -verbose apk文件路径
 

猜你喜欢

转载自blog.csdn.net/qq_14976351/article/details/50449576