资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

获取android签名,安卓签名文件提取

android 微信开放平台,如何获取应用签名

在微信开放平台申请app应用的时候,遇到要填写 应用签名 一栏。

鸡泽ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

找到签名文件

keytool -list -v -keystore xxx.keystore

证书指纹节点下的MD5值转成小写,去掉冒号。

首先跟随 生成keystore和应用签名 ,生成 .jks 签名文件,

然后跟随 微信开放平台Android应用签名的本质及如何获取 的第三、四步,生成带签名的apk,并用专门的工具查看应用签名。

最后用工具查看到应用签名后,我们发现,其实它就是keystore文件的MD5值。

这样,我们就能够 查看应用签名了

如果你在 修改签名 后,进入微信授权页面失败,且提示"应用签名与微信开放平台上的签名不一致",有可能是 微信缓存 的缘故。

根据 android之微信开放平台修改签名 ,只要清理微信缓存,或重装微信即可。

接下来还有一个问题没解决:

解决方法参考 Android Studio直接运行调试签名包

但这样的做法会显示暴露keystore信息,所以跟随 Android Studio的两种模式及签名配置 的后半部分,可以让项目间接引入keystore信息。

android 系统签名

也有提到怎么单独给一个apk签名,这里补充一下android的签名权限控制机制。

android的标准签名key有:

 testkey

 media

latform

hared

以上的四种,可以在源码的/build/target/product/security里面看到对应的密钥,其中shared.pk8代表私钥,shared.x509.pem公钥,一定是成对出现的。

其中testkey是作为android编译的时候默认的签名key,如果系统中的apk的android.mk中没有设置LOCAL_CERTIFICATE的值,就默认使用testkey。

而如果设置成:

LOCAL_CERTIFICATE := platform

就代表使用platform来签名,这样的话这个apk就拥有了和system相同的签名,因为系统级别的签名也是使用的platform来签名,此时使用android:sharedUserId="android.uid.system"才有用!

 在/build/target/product/security目录下有个README,里面有说怎么制作这些key以及使用问题(android4.2):

 从上面可以看出来在源码下的/development/tools目录下有个make_key的脚本,通过传入两个参数就可以生成一对签名用的key。

其中第一个为key的名字,一般都默认成android本身有的,因为很多地方都默认使用了这些名字,我们自定义的话只需要对第二个参数动手脚,定义如下:

C --- Country Name (2 letter code) ST --- State or Province Name (full name) L --- Locality Name (eg, city) O --- Organization Name (eg, company) OU --- Organizational Unit Name (eg, section) CN --- Common Name (eg, your name or your server’s hostname) emailAddress --- Contact email addre

另外在使用上面的make_key脚本生成key的过程中会提示输入password,我的处理是不输入,直接enter,不要密码!后面解释,用自定义的key替换/security下面的。

可以看到android源码里面的key使用的第二个参数就是上面README里面的,是公开的,所以要release版本的系统的话,肯定要有自己的签名key才能起到一个安全控制作用。

在上面提到如果apk中的编译选项LOCAL_CERTIFICATE没有设置的话,就会使用默认的testkey作为签名key,我们可以修改成自己想要的key,按照上面的步骤制作一个releasekey,修改android配置在/build/core/config.mk中定义变量:

在主makefile文件里面:

ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)

BUILD_VERSION_TAGS += release-key

这样的话默认的所有签名将会使用releasekey。

修改完之后就要编译了,如果上面的这些key在制作的时候输入了password就会出现如下错误:

我在网上找到了合理的解释:

其实会出现这个错误的最根本的原因是多线程的问题。在编译的时候为了加速一般都会执行make -jxxx,这样本来需要手动输入密码的时候,由于其它线程的运行,就会导致影响当前的输入终端,所以就会导致密码无法输入的情况!

再编译完成之后也可以在build.prop中查看到变量:

这样处理了之后编译出来的都是签名过的了,系统才算是release版本

我发现我这样处理之后,整个系统的算是全部按照我的要求签名了。

网上看到还有另外的签名release办法,但是应该是针对另外的版本的,借用学习一下:

make -j4 PRODUCT-product_modul-user dist

这个怎么跟平时的编译不一样,后面多了两个参数PRODUCT-product_modul-user 和 dist. 编译完成之后回在源码/out/dist/目录内生成个product_modul-target_files开头的zip文件.这就是我们需要进行签名的文件系统.

我的product_modul 是full_gotechcn,后面加“-user”代表的是最终用户版本,关于这个命名以及product_modul等可参考

编译出需要签名的zip压缩包之后,就是利用/security下面的准备的key进行签名了:

./build/tools/releasetools/sign_target_files_apks -d /build/target/product/security  out/dist/full_gotechcn-target_files.zip   out/dist/signed_target_files.zi

签名目标文件 输出成signed_target_files.zi

如果出现某些apk出错,可以通过在full_gotechcn-target_files.zip前面加参数"-e =" 来过滤这些apk.

然后再通过image的脚本生成imag的zip文件,这种方式不适用与我目前的工程源码,没有做过多验证!

Android签名机制可划分为两部分:(1)ROM签名机制;(2)第三方APK签名机制。

Android APK实际上是一个jar包,而jar包又是一个zip包。APK包的签名实际上使用的是jar包的签名机制:在zip中添加一个META的子目录,其中存放签名信息;而签名方法是为zip包中的每个文件计算其HASH值,得到签名文件(*.sf),然后对签名文件(.sf)进行签名并把签名保存在签名块文件(*.dsa)中。

在编译Android源码生成ROM的过程中,会使用build/target/product/security目录中的4个key(media, platform, shared, testkey)来对apk进行签名。其中,*.pk8是二进制形式(DER)的私钥,*.x509.pem是对应的X509公钥证书(BASE64编码)。build/target/product/security目录中的这几个默认key是没有密码保护的,只能用于debug版本的ROM。

要生成Release版本的ROM,可先生成TargetFiles,再使用带密码的key对TargetFiles重新签名,最后由重签名的TargetFiles来生成最终的ROM。

可以使用Android源码树中自带的工具“development/tools/make_key”来生成带密码的RSA公私钥对(实际上是通过openssl来生成的): $ development/tools/make_key media ‘/C=CN/ST=Sichuan/L=Chengdu/O=MyOrg/OU=MyDepartment/CN=MyName’ 上面的命令将生成一个二进制形式(DER)的私钥文件“media.pk8”和一个对应的X509公钥证书文件“media.x509.pem”。其中,/C表示“Country Code”,/ST表示“State or Province”,/L表示“City or Locality”,/O表示“Organization”,/OU表示“Organizational Unit”,/CN表示“Name”。前面的命令生成的RSA公钥的e值为3,可以修改development/tools/make_key脚本来使用F4 (0×10001)作为e值(openssl genrsa的-3参数改为-f4)。

也可以使用JDK中的keytool来生成公私钥对,第三方APK签名一般都是通过keytool来生成公私钥对的。

可以使用openssl x509命令来查看公钥证书的详细信息: $ openssl x509 -in media.x509.pem -text -noout or, $ openssl x509 -in media.x509.pem -inform PEM -text -noout

还可以使用JDK中的keytool来查看公钥证书内容,但其输出内容没有openssl x509全面: $ keytool -printcert -v -file media.x509.pem

有了key之后,可以使用工具“build/tools/releasetools/sign_target_files”来对TargetFiles重新签名: $ build/tools/releasetools/sign_target_files_apks -d new_keys_dir -o target_files.zip target_files_resigned.zip 其中,new_keys_dir目录中需要有四个key(media, platform, shared, releasekey)。注意:这里的releasekey将代替默认的testkey(请参考build/tools/releasetools/sign_target_files脚本实现),也就是说,如果某个apk的Android.mk文件中的LOCAL_CERTIFICATE为testkey,那么在生成TargetFiles时是使用的build/target/product/security/testkey来签名的,这里重新签名时将使用new_keys_dir/releasekey来签名。

uild/tools/releasetools/sign_target_files_apks是通过host/linux-x86/framework/signapk.jar来完成签名的。也可以直接使用host/linux-x86/framework/signapk.jar来对某个apk进行签名: $ java -jar signapk [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar 其中,”-w”表示还对整个apk包(zip包)进行签名,并把签名放在zip包的comment中。

对于第三方应用开发者而言,对APK签名相对要简单得多。第三方应用开发一般采用JDK中的keytool和jarsigner来完成签名密钥的管理和APK的签名。

使用keytool来生成存储有公私钥对的keystore: $ keytool -genkey -v -keystore my-release-key.keystore -alias mykey -keyalg RSA -keysize 2048 -validity 10000

查看生成的密钥信息: $ keytool -list -keystore my-release-key.keystore -alias mykey -v or, $ keytool -list -keystore my-release-key.keystore -alias mykey -rfc (注:获取Base64格式的公钥证书,RFC 1421)

导出公钥证书: $ keytool -export -keystore mystore -alias mykey -file my.der (注:二进制格式公钥证书,DER) $ keytool -export -keystore mystore -alias mykey -file my.pem -rfc (注:Base64格式公钥证书,PEM)

对APK进行签名: $ jarsigner -verbose -keystore my-release-key.keystore my_application.apk mykey

验证签名: $ jarsigner -verify -verbose -certs my_application.apk

在进行Android二次开发时,有时需要把build/target/product/security下面的公私钥对转换为keystore的形式,可以参考这篇文章:把Android源码中的密码对转换为keystore的方法。

如何获取android app的签名

方法/步骤

1

1 win7,开始菜单,搜索cmd

2

2 打开cmd

3

3 进入.android

4

4 使用命令keytool -list -v -keystore debug.keystore

5

5 需要安装keytool,办法是安装jdk,百度搜索jdk并下载安装;具体平台按实际情况选择

6 安装完毕,进入到jdk安装bin目录,并复制地址

7 回到cmd命令窗口,输入cd + 空格,并在标题栏右侧点击粘贴

8 回车,进入到这个目录

9 再次输入keytool -list -v -keystore debug.keystore命令并回车,出现错误

10 先执行以下命令keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000

11 按提示输入密码(自己定),密保答案等;到后来需要重新再输入密码,生成完成

12 到keytool目录下,看到debug.keystore已经生成成功

13 将这个文件复制到.android文件夹下

14 现在再次键入生成android签名的命令:keytool -list -v -keystore debug.keystore,按提示输入密码,即可成功生成签名

步骤阅读

15 在标题栏右键选择标记复制其中的SHA1的值,即为android的签名

PHP获取安卓apk包里的apk签名

所需工具:aapt,Android SDK中的工具,只有一个exe,可以直接运行。

keytool,JDK中的工具,需要安装JDK环境。

需要提供目标应用的apk

1、获取包名

例如:aapt.exe dump badging C:\Users\Administrator\Desktop\demo-apk-1.0.1.8791.apk C:\Users\Administrator\Desktop\1.txt

获取到的包名是com.pakgname.swbg

2、获取签名

SHA1: 56:BD:02:6B:9D:53:D7:F5:32:B2:BC:BD:BB:34:5B:F1:CD:EF:7F:C0

这里借助github开源的类apkparser

在项目composer.json中执行下面命令或修改composer.json引入即可

方法二适用于没有JAVA环境的情况下,一般linux都会有openssl环境。

原理:通过分析方法一中,发现apk包解压之后,里面会有.rsa签名证书,此证书是一个符合pki体系的x509证书,通过openssl命令即可查看信息。

Android查看应用签名方法

查看应用签名的MD5、SHA1、SHA256值及签名算法。

查看keystore文件签名信息,前提要有keystore文件和密钥,才能够获取keystore文件的签名信息。

方法一:(适用于 AS)

1)打开 AS工具窗口栏右边的 Gradle - Project - app - Tasks - android - signingReport,双击运行 signingReport;

在没有keystore文件和密钥的情况下,要想查看我们所需应用的签名信息,就需要借助 keytool 工具来完成。

首先解压要查看的apk包,通过数据证书管理工具 keytool 查看apk的签名信息。具体步骤如下:

1)将apk修改后缀为 .rar 文件后进行解压;

2)进入解压后的 META-INF 目录,找到该目录下的 xxx.RSA 文件;

3)通过命令 cmd 打开DOS窗口,输入命令 : keytool -printcert -file [RSA文件路径]

在查看应用签名信息过程中,可能会遇到以下几个问题:

定位 keytool.exe 工具所在的目录,使用相关操作命令查看签名信息;

JKS(Java KeyStore) :是 Java 的 keytools 证书工具支持的证书私钥格式。jks 包含了公钥和私钥,可以通过 keytool 工具来将公钥和私钥导出。因为包含了私钥,所以 jks 文件通常通过一个密码来加以保护。一般用于 Java 或者 Tomcat 服务器。

PKCS #12 :定义了一种存档文件格式,用于实现存储许多加密对象在一个单独的文件中。通常用它来打包一个私钥及有关的 X.509 证书,或者打包信任链的全部项目。

定位 keytool.exe 工具所在的目录,使用操作命令转换证书格式;

获取Android应用签名的几种方式

打开 Android Studio,然后选择右边的 Gradle 标签,选择一个项目,然后选择 signingReport 这个 Task,双击运行

然后选择右下角的 Gradle Console,就可以看到签名信息了

使用解压工具解压 APK 文件,在 META-INF 文件夹拿到 CERT.RSA 文件。假设 CERT.RSA 文件的路径是 C:\Users\Administrator\Desktop\CERT.RSA 。在 CMD 中输入

就可以得到签名信息了

jks 作为签名文件,也可以通过命令行来查看的其中的签名信息,假设签名文件的名称是 test_release.jks ,在终端中输入

即可得到签名信息


文章名称:获取android签名,安卓签名文件提取
文章链接:http://cdkjz.cn/article/dsdoeco.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220