美文网首页
Android签名相关

Android签名相关

作者: MarcoHorse | 来源:发表于2017-04-10 11:47 被阅读147次

    检查app的证书和签名
    对Android签名
    验证app的签名

    命令行代码:
    <pre>
    [进入文件目录]
    cd [文件目录]
    [复制文件并重命名]
    cp [apk文件名] [zip文件名]
    [解压文件]
    upzip [zip文件名]
    [查看文件]
    cat [文件名]
    [查看证书内容]
    keytool -printcert -file META-INF/CERT.RSA
    [生成签名文件]
    keytool -genkey -v -keystore storename -alias keyname -keyalg RSA -keysize 2048 -validity [有效天数]
    [apk重签名]
    jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore storename [.apk文件] [密钥别名alias]
    [验证apk]
    jarsigner -verify -verbose [apk路径]
    </pre>

    <h3>1. 检查app的证书和签名</h3>
    app的证书是在呗推送到app市场的app中,表示开发者身份的。它是以把开发者的id和他们的app以密码学的方式关联起来的方式实现的。通过提供一个简单又有效的确认和强制保证Android app完整性的机制,app的签名确保了没有哪个app会被其它app所冒充。所有的app在被安装之前,都必须通过签名。

    Andorid app的签名实际上是对JAR签名的重新利用,它的工作原理是用一个密码学意义上的hash的。这个hash随后会与一张表示开发者身份的证书绑定在一起并发布出来,即把它与开发者的公钥,实际上也就是和他的私钥(因为他们语意上是相关的)联系在一起。证书通常是由开发者私钥加密的,这也就意味着,他是自签名的证书,没有可信的第三方(例如数字证书认证机构,简称CA)开发者确实拥有给定的公钥这一事实,这一个过程产生了一个签名,并随着这个公钥一起被发布或公开出来。

    每一个app的签名都是唯一的,找出app的证书和签名是一个重要的技能,你可能会需要在一个设备上找出恶意app的签名,或者你也有可能需要把使用同一个公钥签名的app全部列出来。

    下面就是检查app证书和签名的步骤和命令
    我们需要的工具:jdk,adk,winzip
    首先进入命令行,进入到我们需要处理的apk文件目录,将apk转成zip并解压缩出来
    cd [文件目录]
    cp [apk文件名] [zip文件名]
    upzip [zip文件名]

    找到META-INF文件夹,你会发现里面有一个CERT.RSA文件,这个就是证书的自签名,我们可以使用jdk 自带的keytool工具来查看其中的内容
    keytool -printcert -file META-INF/CERT.RSA

    CERT.SF文件存储着资源文件的hash值

    在使用jarsigner工具验证app的内容时,它会计算CERT.SF文件中列出来的hash,并将其与列在每个资源文件的数字进行比较。

    META-INF文件夹分析
    MANIFEST.ME:这个文件声明了资源,与CERT.SF文件相似
    CERT.SF:包含app中所有资源文件的签名,负责对app进行签名,其中含有JAR指定密码学意义的签名
    CERT.RSA:这个文件是公钥证书,内容包括五个区域:owner(拥有者),issuer(颁发者),Serial number(序列号), Valid fromm ...util(有效期),Certificate fingerprints(证书校验)

    数字签名的计算方法是用可信第三方的私钥加密证书,在大多数Android app中,这个"可信第三方"就是开发者,这也就意味着这个签名是用它的私钥加密证书而生成的,这样使用数字签名可能从功能上是正确的,但并不像依赖于数字证书认证机构那样的强壮。

    <h3>2. 对App签名</h3>
    所有的Android app在呗安装到Android设备上之前,都必须通过签名。我们可以利用android的IDE很方便地进行签名。有时候我们也可以装逼一下,用命令行来实现应用签名。
    Android app中的签名,使用的实际上是JAR的签名机制,主要用于验证java class文件的开发者。Android项目相对与Java项目来说,还用很多的元数据和资源,所以Android把这些额外的内容也添加到了签名和验证的过程。

    对APP的签名步骤

    1. 获取一个还没签名版本的apk(如果已经签名了,那么就删除该签名)
      1.1 解压apk解压出来后删除META-INF文件夹
      1.2 重新压缩生成apk文件
    2. 使用命令行创建一个自己的签名文件
      keytool -genkey -v -keystore storename -alias keyname -keyalg RSA -keysize 2048 -validity [有效天数]
    ![Paste_Image.png](https://img.haomeiwen.com/i2427213/a85e2b999029fa4a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   
    
    1. 对应用通过jarsign进行重签名
      jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore storename [.apk文件] [密钥别名alias]

    <h3>3. 验证app签名</h3>
    jd里面有一个jarsigner的工具,我们需要做的就是执行一下的命令
    jarsigner -verify -verbose [apk路径]

    验证已签名apk文件 未签名文件

    相关文章

      网友评论

          本文标题:Android签名相关

          本文链接:https://www.haomeiwen.com/subject/jvhsattx.html