精华内容
参与话题
问答
  • 应用签名

    2016-05-01 18:12:54
    2.安卓应用签名(提交时需要) Oculus签名文件 在开发期间,你的应用必须用一个Oculus-issued Oculus签名文件或osig来签名。签名来自一个文件(你包含在你的应用中为了访问低等级的VR功能在你的移动设备上)的...

    Oculus移动app需要两个明显的签名在不同搞得开发阶段。

    1.Oculus签名文件(开发中需要的,提交时移除)

    2.安卓应用签名(提交时需要)


    Oculus签名文件

    在开发期间,你的应用必须用一个Oculus-issued Oculus签名文件或osig来签名。签名来自一个文件(你包含在你的应用中为了访问低等级的VR功能在你的移动设备上)的形式。每个签名绑定到一个指定的设备,所以你需要生成osig文件为每一个你用来开发的设备。当你的应用提交时或审核时,Oculus会修改APK让它能用在所有设备上。

    请看我们osig自服务入口获取更多信息和说明在怎样为开发请求一个osig:https://developer.oculus.com/tools/osig/


    安卓应用签名

    安卓使用一个数字证书为密码学证实应用作者的标识。所有安卓应用必须用一个证书被数字签名为了被安装和运行在安卓设备上。


    所有开发者必须建立他们自己独一无二的数字签名和签他们的应用在提交他们到Oculus审核之前。更多的信息和说明请看安卓的签名你的应用的文档:http://developer.android.com/tools/publishing/app-signing.html


    确定保存你使用签你应用的证书文件。每次你应用的后续更新必须用相同的证书文件签名,或者它会失败。

    注意:你的应用必须通过安卓证书签名在提交之前。


    安卓应用签名和Unity


    Unity自动用一个临时默认的调试证书签名安卓应用。在构建你的最终发布版本之前,创建一个新的安卓keystore和用使用存在的keystore选项赋值它,在Edit->Project Settings->Player->Publishing Options中.更多的信息请看Unity的安卓篇的文档: http://docs.unity3d.com/Manual/class-PlayerSettings.html

    展开全文
  • 文章目录背景查看签名信息方式一:使用keytool工具方式二:使用微信提供的工具方式三:某些在线工具生成应用签名文件方式一:使用keytool工具方式二:使用android studio生成v1和v2签名文件的区别APK签名方式一:...

    背景

    APK要想安装到设备上,无论是debug还是release都是需要先签名的,默认IDE是会使用默认的签名文件给debug的apk签名,所以我们不需要配置签名信息也是可以在设备上运行的,而release的版本强制要求我们配置签名信息,下面整理了一些应用签名相关的知识。

    查看签名信息

    方式一:使用keytool工具

    keytool使用的详细方式介绍

    • 查看apk的签名信息
    keytool -list -printcert -jarfile 【apk路径】
    
    # 如:keytool -list -printcert -jarfile /Users/jiangwenzhong/Downloads/app-debug.apk 
    
    • 查看证书的签名信息
    keytool -list -v -keystore 【签名证书路径】
    
    # 如:keytool -list -v -keystore /Users/jiangwenzhong/Downloads/debug.keystore
    

    方式二:使用微信提供的工具

    获取安装到设备的应用签名工具:下载地址

    方式三:某些在线工具

    这种方式需要将apk上传上去,有风险,所以不建议使用,所以这里就不贴地址了,感兴趣的可以自己搜一下关键词“在线查看apk签名”。

    生成应用签名文件

    方式一:使用keytool工具

    keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
    

    方式二:使用android studio生成

    这种方式比较简单,就不详述了,简单说就是:Build -> Generate Signed Bundle or APK -> Create new…

    v1和v2签名文件的区别

    简单说:v1签名是对jar进行签名,V2签名是对整个apk签名:官方介绍就是:v2签名是在整个APK文件的二进制内容上计算和验证的,v1是在归档文件中解压缩文件内容。

    二者签名所产生的结果: v1:在v1中只对未压缩的文件内容进行了验证,所以在APK签名之后可以进行很多修改——文件可以移动,甚至可以重新压缩。即可以对签名后的文件在进行处理 v2:v2签名验证了归档中的所有字节,而不是单独的ZIP条目,如果您在构建过程中有任何定制任务,包括篡改或处理APK文件,请确保禁用它们,否则您可能会使v2签名失效,从而使您的APKs与Android 7.0和以上版本不兼容。

    详细区别可参考:

    官方说明
    浅谈:android签名打包v1和v2的区别
    Android开发之签名V1和V2的区别

    APK签名

    方式一:使用jarsigner工具

    注:v2的签名文件需要使用apksigner来签名,jarsigner和v2的签名文件不兼容。具体原因可参考:Android开发之签名V1和V2的区别中提到的。

    jarsigner -verbose -keystore [您的私钥存放路径] -signedjar [签名后文件存放路径] [未签名的文件路径] [您的证书名称] -storepass 密码库密码
    

    参考:

    Android 对apk进行重签名和查看签名(window 和mac)及生成签名

    方式二:直接使用android studio来签名

    同样,也比较简单,不详述,简单说就是:Build -> Generate Signed Bundle or APK

    系统签名文件转IDE签名文件

    系统签名文件一般是platform.x509.pem platform.pk8

    1、通过platform.x509.pem platform.pk8 生成签名keystore,可在github上下载脚本:keytool-importkeypair
    2、将脚本放入platform.x509.pem platform.pk8所在目录
    3、执行以下命令

    ./keytool-importkeypair -k ~/.android/debug.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform
    
    -k 表示要生成的 keystore 文件的名字,这里命名为 release.keystore
    -p 表示要生成的 keystore 的密码,这里是 youPassword
    -pk8 表示要导入的 platform.pk8 文件
    -cert 表示要导入的platform.x509.pem
    -alias 表示给生成的 release.keystore 取一个别名,这是命名为 youAlias
    

    在Android studio中使用

        signingConfigs {
            sginconfig {
                keyAlias 'platform'
                keyPassword 'android'
                storeFile file('/Users/macbook/.android/debug.keystore')
                storePassword 'android'
            }
        }
        buildTypes {
            release {
                signingConfig signingConfigs.sginconfig
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
            debug {
                signingConfig signingConfigs.sginconfig
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
    • keytool-importkeypair 源码
    #! /bin/bash
    #
    # This file is part of keytool-importkeypair.
    #
    # keytool-importkeypair is free software: you can redistribute it
    # and/or modify it under the terms of the GNU General Public License
    # as published by the Free Software Foundation, either version 3 of
    # the License, or (at your option) any later version.
    #
    # keytool-importkeypair is distributed in the hope that it will be
    # useful, but WITHOUT ANY WARRANTY; without even the implied warranty
    # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    # General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with keytool-importkeypair.  If not, see
    # <http://www.gnu.org/licenses/>.
    #
    
    DEFAULT_KEYSTORE=$HOME/.keystore
    keystore=$DEFAULT_KEYSTORE
    pk8=""
    cert=""
    alias=""
    passphrase=""
    tmpdir=""
    
    scriptname=`basename $0`
    
    usage() {
    cat << EOF
    usage: ${scriptname} [-k keystore] [-p storepass]
    -pk8 pk8 -cert cert -alias key_alias
    
    This script is used to import a key/certificate pair
    into a Java keystore.
    
    If a keystore is not specified then the key pair is imported into
    ~/.keystore in the user's home directory.
    
    The passphrase can also be read from stdin.
    EOF
    }
    
    cleanup() {
    if [ ! -z "${tmpdir}" -a -d ${tmpdir} ]; then
       rm -fr ${tmpdir}
    fi
    }
    
    while [ $# -gt 0 ]; do
            case $1
            in
                    -p | --passphrase | -passphrase)
                            passphrase=$2
                            shift 2
            ;;
                    -h | --help)
                            usage
                            exit 0
            ;;
                    -k | -keystore | --keystore)
                            keystore=$2
                            shift 2
            ;;
                    -pk8 | --pk8 | -key | --key)
                            pk8=$2
                            shift 2
            ;;
                    -cert | --cert | -pem | --pem)
                            cert=$2
                            shift 2
            ;;
                    -a | -alias | --alias)
                            alias=$2
                            shift 2
            ;;
                    *)
                            echo "${scriptname}: Unknown option $1, exiting" 1>&2
                            usage
                            exit 1
            ;;
            esac
    done
    
    if [ -z "${pk8}" -o -z "${cert}" -o -z "${alias}" ]; then
       echo "${scriptname}: Missing option, exiting..." 1>&2
       usage
       exit 1
    fi
    
    
    for f in "${pk8}" "${cert}"; do
        if [ ! -f "$f" ]; then
           echo "${scriptname}: Can't find file $f, exiting..." 1>&2
           exit 1
        fi
    done
    
    if [ ! -f "${keystore}" ]; then
       storedir=`dirname "${keystore}"`
       if [ ! -d "${storedir}" -o ! -w "${storedir}" ]; then
          echo "${scriptname}: Can't access ${storedir}, exiting..." 1>&2
          exit 1
       fi
    fi
    
    # Create temp directory ofr key and pkcs12 bundle
    tmpdir=`mktemp -q -d "/tmp/${scriptname}.XXXX"`
    
    if [ $? -ne 0 ]; then
       echo "${scriptname}: Can't create temp directory, exiting..." 1>&2
       exit 1
    fi
    
    key="${tmpdir}/key"
    p12="${tmpdir}/p12"
    
    if [ -z "${passphrase}" ]; then
       # Request a passphrase
      read -p "Enter a passphrase: " -s passphrase
      echo ""
    fi
    
    # Convert PK8 to PEM KEY
    openssl pkcs8 -inform DER -nocrypt -in "${pk8}" -out "${key}"
    
    # Bundle CERT and KEY
    openssl pkcs12 -export -in "${cert}" -inkey "${key}" -out "${p12}" -password pass:"${passphrase}" -name "${alias}"
    
    # Print cert
    echo -n "Importing \"${alias}\" with "
    openssl x509 -noout -fingerprint -in "${cert}"
    
    # Import P12 in Keystore
    keytool -importkeystore -deststorepass "${passphrase}" -destkeystore "${keystore}" -srckeystore "${p12}" -srcstoretype PKCS12 -srcstorepass "${passphrase}" 
    
    # Cleanup
    cleanup
    
    
    展开全文
  • Android应用签名获取工具,解压缩后内为APK文件,输入目标包名获取应用签名,方便快捷。希望能帮助到大家
  • 应用签名和应用包名

    2020-08-06 11:43:30
    unity项目在接入微信SDK时,会遇到应用签名和包名的问题。 如图所示 上图是微信开放平台上对于签名和包名的说明。 应用签名应用签名由开发者签名该应用的keystore文件决定,就是说无论包名如何更改,只要...

    unity项目在接入微信SDK时,会遇到应用签名和包名的问题。

    应用签名:应用签名由开发者签名该应用的keystore文件决定,就是说无论包名如何更改,只要keystore文件保持不变,那么生成的签名都为同一个。

    应用包名:应用在一台设备上的唯一标识,在manifest文件里面声明,该包名应和正式发布应用的包名一致。

    应用在升级的时候必须是签名和包名都一致。如果签名不一致的话在安装时会报错安装不成功。如果包名不一致,签名一致,就不是升级了,就是在安装另一个不同的应用了。

    既然上面说到签名是由keystore文件决定的,那么unity如何生成keystore的呢

    unity-->PlayerSettings-->选择Android平台-->PublishingSettings,如下图

    第一步,选择Create a new keystore

    第二步,点击Browse Keystore,选择目录,命名保存,然后输入密码和确认密码。保存好的keystore文件就是打包用到的,保存好。

    第三步,点击Alias右侧下拉选项,选择Create a new key选项(默认是Unsigned(debug)),跳出以下弹框

    填写相关信息,Alias是选项的名称,填完之后点击下面的Create Key

    第四步,点击Alias右侧下拉选项,选择刚才命名的key,签名设置就完成了

    Unity项目打包之后,通过微信开放平台上的签名生成工具,生成应用签名,将应用签名保存到平台上应用开发信息里即可进行后面的调试

    签名生成工具下载链接:https://developers.weixin.qq.com/doc/oplatform/Downloads/Android_Resource.html

     

     

    将应用签名和应用包名添加

    展开全文
  • Android 应用签名

    2019-04-28 13:31:55
    Android 应用签名是应用打包过程的重要步骤之一,Google 要求所有的应用必须被签名才可以安装到 Android 操作系统中。Android 的签名机制也为开发者识别和更新自己应用提供了方便。 数字摘要 Digital Digest 数字...

    Android 应用签名是应用打包过程的重要步骤之一,Google 要求所有的应用必须被签名才可以安装到 Android 操作系统中。Android 的签名机制也为开发者识别和更新自己应用提供了方便。

    数字摘要 Digital Digest

    数字摘要主要作用是将任意长度的消息使用单向 HASH 算法摘要成一串固定长度的密文。常用的 HASH 算法包括 SHA-1, SHA-256, MD5 等等,MD5 中的 MD 就是 Message Digest 的缩写。数字摘要有时也被称为数字指纹,消息摘要等等,其实表达的都是一个意思。它有以下三个特点:

    • 输出长度固定 例如 MD5 算法摘要信息有 128 比特,而 SHA-1 有 160 比特
    • 不考虑碰撞的情况下,只要输入原始数据不同,摘要也不会相同。即使稍微改变输出,摘要就会变得完全不同。相同的输入也会产生相同的输出
    • 单向不可逆。从摘要无法恢复原始消息

    Keystore 文件

    Android 签名需要用到一种后缀名为 keystore 的文件。在打 Debug 包的时候,如果没有在 build.gradle 文件中指定的话,Gradle 就会自动为我们生成一个 keystore文件,保存在系统用户根目录 .android 文件夹内,名称为 debug.keystore. 我们以它为例看看 keystore 文件包含了什么内容。 通过 keytool 工具来查看,默认的密码是 android. $ keytool -list -v -keystore debug.keystore -storepass android 结果如下:

    密钥库类型: jks
    密钥库提供方: SUN
    
    您的密钥库包含 1 个条目
    
    别名: androiddebugkey
    创建日期: 2013-4-26
    条目类型: PrivateKeyEntry
    证书链长度: 1
    证书[1]:
    所有者: CN=Android Debug, O=Android, C=US
    发布者: CN=Android Debug, O=Android, C=US
    序列号: 517a38f2
    有效期为 Fri Apr 26 15:46:58 CST 2013 至 Sun Apr 19 15:46:58 CST 2043
    证书指纹:
    	 MD5:  37:09:10:A9:F1:AE:9C:E4:C0:85:B9:35:D9:93:93:52
    	 SHA1: F1:60:3F:72:2A:F2:3A:BC:BE:1C:DB:F6:F4:5B:FD:5E:34:8C:01:A9
    	 SHA256: 86:C7:CB:D1:56:E7:D8:B8:AD:67:A7:A1:8F:C0:F6:E6:FC:E1:3D:45:AE:BC:F5:DF:B4:A9:F9:9A:F7:89:F7:0D
    签名算法名称: SHA1withRSA
    主体公共密钥算法: 1024 位 RSA 密钥
    版本: 3
    复制代码

    其实 keystore 类似一个钥匙仓库,里面有证书的所有者和发布者信息,包含了私钥和公钥信息,并设置了密码进行保护。

    公共密钥系统 RSA

    公钥和私钥都是公共密钥系统里的概念。最初所有的加密算法都属于对称加密,也就是说加密和解密使用的相同的密码,通信双方如何安全沟通和保存密码,是这种加密方法的主要难题。难保没有猪队友。 而在公共密钥系统中,加密和解密使用的是不同的密钥,分别称为公钥和私钥,公钥意思就是所有人都可以知道,私钥则只有所有者才持有,单从公钥无法在现有的计算能力下推导出私钥。这样一来就不存在沟通过程中泄露密钥的问题,只要私钥不泄露,通信就一直是安全的。 公共密钥系统可以说是现在最最最重要密钥系统,是互联网的基石之一。 公共密钥系统可以用来加密,也可以用来签名。加密方案中,是不希望别人知道我的消息,所以公钥用于加密信息,私钥用于解密信息;而签名方案中,是不希望别人冒充我发消息,只有我才能发布这个签名,所以需要用私钥进行签名,公钥用于验证签名。

    应用签名

    我们先来看看 Android 应用签名发生在构建的哪一步。

    在编译过程中,编译器首先会将源代码和资源进行编译,生成 DEX 文件和一些编译后的资源文件,然后 APK Manager 会根据配置使用 keystore 文件进行签名,签名后才会将所有资源压缩到一个 ZIP 包里,这个 ZIP 包其实我们安装的时候用的 APK 文件。可以看到签名是在构建基本完成的时候发生的。

    签名过程

    那 APK Manager 是如何使用 keystore 进行签名的呢?我们一步一步看到底发生了什么。

    1. 首先对编译后生成的所有的文件进行扫描,每个文件生成一个数字摘要,保存在 META-INF/MANIFEST.MF 文件中
    Name: res/drawable-xhdpi-v4/im_ic_keyboard_pressed.png
    SHA-256-Digest: cqjOi3gUv9O0IBfgLOlIJUZTBwyCPcWbXIs/o6TMfTc
    
    Name: classes.dex
    SHA-256-Digest: FJCwLV1TyZuL1qxkDsJ6bXTmaSkK+JkKt5zmpDBc8Tg=
    复制代码

    我们看一下 im_ic_keyboard_pressed.png 这个文件的数字摘要到底是如何计算出来的。

    • 第一步对文件进行 SHA-256 散列,得到一串 16 进制的散列值。
    $ shasum -a 256 im_ic_keyboard_pressed.png
    72a8ce8b7814bfd3b42017e02ce948254653070c823dc59b5c8b3fa3a4cc7d37 im_ic_keyboard_pressed.png
    复制代码
    • 第二步我们将其转换为二进制格式并进行 base64 编码
    $ echo "72a8ce8b7814bfd3b42017e02ce948254653070c823dc59b5c8b3fa3a4cc7d37" | xxd -r -p | base64
    cqjOi3gUv9O0IBfgLOlIJUZTBwyCPcWbXIs/o6TMfTc=
    复制代码

    可以看到跟我们在 MANIFEST.MF 中看到的值是能够对上的。

    1. 对 MANIFEST.MF 文件生成数字摘要,并写入 CERT.SF,这里有一个细节,除了对整个文件做 HASH 外,还会将文件分成多段计算 HASH 同样保存在 CERT.SF 文件中

    2. 计算 CERT.SF 的数字摘要,并使用 RSA 私钥进行加密,生成签名

    3. 将签名、公钥、哈希算法信息写入 CERT.RSA 文文件,并将这些文件添加到 APK 压缩包 META-INF 目录中

    目前应用签名不需要申请可信的证书机构 (Certificate Authority) 签发的证书,开发者可以通过 keytool 来创建自签名的证书。

    为什么要签名

    应用签名不能保证 APK 不被篡改,只是为了能够校验出 APK 是否被篡改。在系统安装过程中,如果发现 APK 被篡改,安装就会失败。那系统是如何校验的呢?

    1. 系统取得已安装 APK 中保存的公钥,用它对新 APK 中的 CERT.RSA 保存的签名信息进行解密;对 CERT.SF 文件计算摘要,与上一步解密出来的信息进行比对,如果不一致说明 CERT.SF 被篡改,拒绝安装
    2. 对 MANIFEST.SF 文件计算摘要,与 CERT.SF 文件中的信息进行对比,如果不一致,则说明 MANIFEST.SF 文件被篡改,拒绝安装
    3. 对 APK 内所有其他文件计算数字摘要,如果文件没有出现在 MANIFEST.SF 或者摘要与 MANIFEST.SF 中包含的不相同,说明加入了新的文件或者文件被篡改,拒绝安装

    整个校验过程中,环环相扣,从 CERT.RSA -> CERT.SF -> MANIFEST.SF -> All Other Files,只要有一环失败,系统就会终止 APK 的安装.

    如果给新版应用分配了新的签名文件,那就必须更改包名,这样系统才会认为是不同的应用。否则安装就会失败,提示签名不一致。 INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

    签名的其他用途

    除了用于安装时校验应用,签名还有一些别的用途。

    1. 应用模块化。Android 允许相同签名的两个应用使用同样的 Linux UserId,这样一来两个应用就可以共享数据存储了。同时如果应用申请的话,两个应用还可以在同一个进程中运行。通过这种方式可以模块化部署应用,每个模块也能独立的进行升级。猜想很多主题资源包可能就是通过这种方式来安装的。
    <manifest
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:sharedUserId="com.meng.sharedappid"
            package="meng.mainuicomponents">
    复制代码
    1. 共享代码数据。Android 提供了可以在使用同样签名的应用间共享代码的功能。另外一个前提也是两个应用设置了使用同样的 shareUserId。可以使用包名拿到兄弟 APP 的 Context,然后拿到 ClassLoader 加载兄弟 APP 的类,并可以实例化并通过反射来调用具体的方法。
    val friendContext = this.createPackageContext("packageName", Context.CONTEXT_INCLUDE_CODE)
    val friendClass = friendContext.classLoader.loadClass("packageName.className")
    val noparams = arrayOf<Class<*>>() //say the function (functionName) required no inputs
    friendClass.getMethod("functionName", *noparams).invoke(friendClass.newInstance(), null)
    复制代码
    1. 用来声明安全级别。比如隶属同一个公司的多个应用实现共享登陆功能,可以各自实现自己的 ContentProvider,向外提供访问本应用数据的接口,但这个接口需要限制不能被其他第三方的应用读取,通过限制安全级别为签名级别,系统就能保证只有相同签名的应用才可以访问到这个 ContentProvider。以下是在 AndroidManifest.xml 文件中的使用示例。
    <!-- 声明权限供兄弟 APP 使用 -->
    <permission
        android:name="com.xxx.permission.SHARED_ACCOUNT"
        android:protectionLevel="signature" />
    
    <!-- 申请获取兄弟 APP 的声明的权限 -->
    <uses-permission android:name="com.xxx.broapp1.permission.SHARED_ACCOUNT" />
    <uses-permission android:name="com.xxx.broapp2.permission.SHARED_ACCOUNT" />
    
    <!-- 定义 ContentProvider 来供兄弟 APP 获取共享账户信息,指定度权限为签名声明的权限 -->
    <provider
        android:name="com.xxx.XXXXSharedAccountProvider"
        android:authorities="com.xxx.shared_account"
        android:exported="true"
        android:readPermission="com.xxx.permission.SHARED_ACCOUNT" />
    复制代码

    签名机制的演进

    V1

    第一代是基于 JAR 文件签名,它主要的缺陷是只保护了一部分文件,而不是对整个 APK 文件做保护。这是因为所有文件都不可能包含了自身的签名,因为它不可能为自己签名后再把签名信息保存到自己内部,这是一个鸡生蛋蛋生鸡的问题,因为这个问题的存在,第一代签名机制会忽略所有以 .SF/.DSA/.RSA 的文件以及 META-INFO 目录下的所有文件。 所以攻击者就可以解压缩后在 APK/META-INF 目录新增一个含有恶意代码的文件,然后再压缩成 APK,同样是可以覆盖安装正版应用的,这样一来好好的应用就会被杀毒软件标记为恶意软件,从而达到攻击应用的目的。 除了容易被攻击外,应用安装起来也比较慢,因为安装器在校验时需要解压计算所有文件的数字摘要,确认没有被恶意修改。

    美团打渠道包的方法本质上就利用了这个第一代签名的漏洞,在 META-INF 目录下新建了一个包含 vendor 名称的文件,从而不需要重新编译,只需要解压缩 APK,添加文件,重新压缩就完成了一个渠道包的生成,速度非常快。

    V2

    Android 7.0 引入了第二代签名,避免了第一代签名模式的问题,主要改进在于它在验证过程中,将整个 APK 文件当作一个整体,只校验 APK 文件的签名就可以了,从而一方面更严苛的避免了 APK 被篡改,另外一方面也不用加压缩后对所有文件进行校验,从而极大提升了安装速度。第二代签名向后兼容,使用新签名的 APK 可以安装到 <7.0 的系统上,但要求 APK 同时也进行 v1 的签名。 具体来说,第二代签名将整个 APK 文件进行签名,并将签名信息保存在了 APK 文件的的尾部 Central Directory 的前边。它可以对第一三四,以及第二块除了签名部分的其他区域提供一致性保护。

    在计算签名的时候,会将这些部分的数据切割成 1MB 大小的 CHUNK,分别计算签名,然后汇总后再计算一个总签名,这么做的主要目的是为了并行计算,加快速度。

    为了避免攻击者在 7.0 以上系统中绕过 v2 签名机制(比如删除 APK Signing Block?),v2 签名要求如果 APK 同时提供了 V1 签名的话,需要在 META-INF/*.SF 文件中增加一行 X-Android-APK-Signed 属性,这样一来,支持 V2 签名的系统在回滚到 V1 签名的时候就会校验是否存在这个属性,如果存在,就会拒绝安装 APK,这一切都是建立在 *.SF 文件被 V1 签名保护的基础之上。

    V3

    Android 9.0 引入了第三代签名机制,主要增加一个功能叫 APK key rotation. 意思是允许开发者在更新 APK 的时候更换签名。签名的主要机制跟 V2 其实是一样的,只是重新设计了 APK Signing Block 的存储结构,以支持更换签名。这里就不再细说,可以参考官方的 文档 下图是安装一个 APK 时,系统对三代签名校验的流程示意。

    转载于:https://juejin.im/post/5cc5a6f3f265da03761e9514

    展开全文
  • 应用签名获取

    千次阅读 2018-12-07 00:37:51
    在用微信开放平台的时候会用到应用签名,如下图所示   应用包名就是manifest中的package名称 应用签名如何获取呢 首先将需要用到微信开放平台功能的app打包安装到手机上 然后到 ...verif...
  • Windows 应用签名

    2020-03-17 11:15:55
    Windows 应用签名 signtool.exe介绍: 微软参考链接:https://docs.microsoft.com/zh-cn/dotnet/framework/tools/signtool-exe 具体用法: signtool.exe sign /f ‘证书路径’ /p ‘签名企业名’ /fd sha256 /tr ...
  • 获取应用签名

    2016-04-12 20:59:32
    Android如何查看应用签名信息--微信平台开发应用的签名 时间 2014-03-25 16:13:04 fantaxy的空间_前庭 原文 http://fantaxy025025.iteye.com/blog/2036445 主题 安卓开发 参考:Android如何查看...
  • android-应用签名

    2017-09-01 15:04:18
    应用签名 通过应用签名,开发者可以标识应用创作者并更新其应用,而无需创建复杂的接口和权限。在 Android 平台上运行的每个应用都必须要有开发者的签名。Google Play 或 Android 设备上的软件包安装程序会...
  • 查看签名证书的指纹和应用签名
  • 在对接快应用微信支付时发现,快应用微信支付申请使用的包名和签名须是某个原生app的包名和签名。 参考文档截图如下: ...为保证签名一致(快应用签名须和微信支付申请填入的原生app签名一致),须将原...
  • AndroidStudio应用签名

    千次阅读 2018-11-20 16:26:29
    1、新建存放签名文件的文件夹 Build 2、初次没有账号 点击Create new 创建 3、签名成功后会在build。gradle 生成下面的数据 4、AS中调出黑窗口写入 keytool -... 5、找到MD5 SHA1 后面的密钥就是你的应用签名 ...
  • Android 如何获取应用签名

    千次阅读 2018-12-21 18:06:32
    用于获取安装到手机的第三方应用签名的apk包。点击下载签名生成工具 下载安装后,在手机上同时运行要生成签名的应用(切记:该应用不能直接AS运行到手机上,必须使用jks文件打包成apk文件,然后安装到手机上,然后...
  • Android 获取应用签名

    2017-07-25 16:37:43
    最近APP做了一个微信分享功能,在微信开放平台申请APP ID时需要应用签名,然后就学习了下。 Android Studio中获取应用签名通过在AS的Terminal中,keystore路径下执行 keytool -list -v -keystore **....
  • Android studio 应用签名

    2017-07-24 10:51:15
    应用签名 转载 http://www.jianshu.com/p/8b0483510bf9 为了确保应用在Android手机安装的唯一性,所以需要对App进行签名;签名之前我们需要明确一个概念:在开发App的时候,不论是在真机还是模拟器上调试,都...
  • 本文档介绍在Android下如何查看自己的应用签名及三方APK或系统APK签名信息,包含其中的MD5、SHA1、SHA256值和签名算法等信息。 1、查看自己的应用签名 可以通过两种方式查看 (1) 通过Eclipse查看默认的default....
  • 1. 有些应用会使用工具对应用进行扫描进行判断所存在的风险,特别一些国企,金融,安全类等应用,其中扫描有一项是**应用签名未校验风险**。 2. 危害的风险描述: 签名证书是对App开发者身份的唯一标识,开发者可利用...
  • JNI验证应用签名

    2018-04-12 17:33:01
    JNI验证应用签名 原理:获取当前的签名信息并且跟期待的签名信息是否一致,如果是一致,则通过,否则失败。 这个工作在JNI_OnLoad中完成,如下代码: JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* ...
  • Android Studio 应用签名

    2016-08-12 15:16:26
    获取debug的应用签名 进入.android文件夹,一般在系统账号目录下面,文件名为debug.keystore 在命令行执行 keytool -list -v -keystore debug.keystore 获取正式应用签名 打开Android Studio > Build > Generate ...
  • 安卓应用签名那些事

    千次阅读 2018-08-29 10:04:09
    安卓应用签名平常不怎么使用,容易遗忘,特记录下来。有些文章讲的很多,但觉的不够清晰,没能指出几种方式的异同,何时使用何种方式,下面说说我自己的理解。 为什么应用需要签名? Android应用以它的包名作为...
  • 微信应用签名配置方法

    千次阅读 2017-11-02 10:38:16
    做微信支付的时候遇到了最坑的莫过于签名错误,查看APK的应用签名: 进入CMD输入 keytool -printcert -file C:\META-INF\CERT.RSA 命令,即可获取sha1签名信息 填写微信里面的应用签名需要填入的是获取APK的MD5 把...
  • android获取应用签名

    2016-03-22 17:56:17
    但是网上给的好多感觉很复杂,有时候一知半解,所以我就自己总结了一下,经过各种上网查,应用签名好像就是SHA1值。但是我在eclipse中知道怎么获取,studio中却不知道,然后又是一阵子查找。总算有点成果,写下来,...
  • Android 获得app的应用签名

    千次阅读 2019-01-21 17:21:14
    创建应用,这里会需要用到APP的应用包名和应用签名需要开发者提供。 应用包名就不提了,应用签名的三种获取方式 1、AndroidStudio选择最右边的Gradle标签,选择你要取签名的项目,点击 signingReport 这个 Task...
  • Android如何查看应用签名信息
  • 应用签名,应用包名和Bundle ID如何填写呢?小程序只有一个测试包

空空如也

1 2 3 4 5 ... 20
收藏数 13,566
精华内容 5,426
关键字:

应用签名