如何判断 Android 应用的 Apk 签名是否一致

如何判断 Android 应用的 Apk 签名是否一致,第1张

一、判断Apk是否签名

命令:jarsigner -verify -verbose -certs <apk文件>

1、如果有Android Debug字样就是debug

2、如果已经签名: [证书的有效期为13-8-31 下午2:31至41-1-16 下午2:31]

二、判断Apk签名是否一致

jdk 需要安装;想查demoapk所使用的签名的fingerprint,可以这样做:

1、查找apk里的rsa文件

Windows 平台:

> jar tf demo apk |findstr RSA

Linux 平台:

$ jar tf demo apk |grep RSA

META-INF/CERTRSA

2、 从apk中解压rsa文件

jar xf demo apk META-INF/CERTRSA

3、获取签名的fingerprints

keytool -printcert -file META-INF/CERTRSA

证书指纹:

MD5: 5A:5A:96:63:8E:EF:FC:66:9E:BC:1C:2A:A9:1E:E5:95

SHA1: 44:BD:33:2D:C5:21:AE:78:D5:04:92:1A:39:FD:AC:01:E2:32:3C:AB

SHA256: 2F:C0:A3:8C:0D:42:84:70:48:78:44:A4:2E:64:5B:50:B3:B3:1E:33:94:62:A3:9F:2F:10:DD:EF:D7:CF:02:0B

签名算法名称: SHA1withRSA

版本: 3

两个apk是否同签名,比较签名的MD5码或SHA1码 ,一样就是相同的,反之,不是。

手机怎么导出apk签名

选择 Android --> Export Android Application --> next

这里需要一个keystore 也就是一个签名钥匙(很重要) 如果有的话可以直接选择

注意这里点击密钥存储路径的时候会d出这个框,让你选择存放的位置以及你这个密钥的文件名。

android中有时候需要获取应用的签名信息,签名信息一般有:公钥,算法名,MD5值,序列号。要想获取这些信息首先该APK应用要有系统权限。

1 在配置文件里添加系统权限:android:sharedUserId="androiduidsystem"

2 获取签名信息的字符信息:

String signature_key = "";

try{

PackageInfo packageInfo = contextgetPackageManager()getPackageInfo(pkgName,

PackageManagerGET_SIGNATURES);

Signature[] signatures =

packageInfosignatures;

SignatureKeyparseSignature(signatures[0]toByteArray());

} catch (NameNotFoundException e) {

eprintStackTrace();

} catch (NullPointerException e) {

eprintStackTrace();

}

(1)其中packageInfo 得到的是指定包名的签名信息的字符串。另提及多说一句:在程序中我们一般使用

List list =

mPackageManagergetInstalledPackages(0);来得到所有的安装包的信息,这其中包括应用名,包名,大小

(2)

其中[]signatures里是存放的签名的字符串数组。我们一般取用第一个signatures[0]来做为该应用的签名信息。这里有一个疑惑就是为什么得到的是一个字符串的数组列表,而不是一个字符串,也有的开发者采用:

StringBuilder builder = new StringBuilder();

for(Signature sign: signatures

){

builderappend(signtoCharsString());

builderappend("/n");

}来得到所有的签名信息。在这里我验证过,signatures

的长度为1,所以指定apk的签名信息就为signatures[0]。

至于第二种方法有待发现。

3 获取签名的MD5值

public static final String getMD5String(byte[] paramArrayOfByte)

{

char[] asciiTable = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,

97, 98, 99, 100, 101, 102 }; // ascii表对应的数字和字符的编码

try

{

MessageDigest md5MessageDigest =

MessageDigestgetInstance("MD5");

md5MessageDigestupdate(paramArrayOfByte);//

byte[]

tempByte = md5MessageDigestdigest();

int i =

tempBytelength;

char[] tempChar = new char[i

2];

int j = 0;

int k =

0;

while (true) { //

将二进制数组转换成字符串

if (j >= i)

{

return new

String(tempChar);

}

int m

= tempByte[j];

int n = k +

1;

tempChar[k] = asciiTable[(0xF & m >>>

4)];

k = n +

1;

tempChar[n] = asciiTable[(m &

0xF)];

j++;

}

}

catch (Exception e)

{

eprintStackTrace();

}

return

null;

}

(1) 其中参数就是上一步得到的签名的byte数组。

4 获取公钥,签名算法,签名序列号

public static void parseSignature(byte[] signature)

{

try

{

CertificateFactory

certFactory =

CertificateFactorygetInstance("X509");

X509Certificate cert = (X509Certificate) certFactorygenerateCertificate(new

ByteArrayInputStream(signature));

String pubKey =

certgetPublicKey()toString(); //公钥

String signNumber =

certgetSerialNumber()toString();

Systemoutprintln("signName:" +

certgetSigAlgName());//算法名

Systemoutprintln("pubKey:" +

pubKey);

Systemoutprintln("signNumber:" +

signNumber);//证书序列编号

Systemoutprintln("subjectDN:"+certgetSubjectDN()toString());

} catch (CertificateException e)

{

eprintStackTrace();

}

}

5 电脑查看APK签名信息

查看三方应用或是系统应用签名

用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERTRSA文件

1keytool

-printcert -file META-INF/CERTRSA

命令是:keytool -printcert -file

<签名文件RSA的路径>

2jarsigner -verify -verbose -certs Superuserapk

此条未验证成功

1)使用jdk的keytool工具生成签名用的证书> keytool -genkey -v -alias CERT -keyalg RSA -keysize 2048 -validity 10000 -keystoreCERTkeystore 创建过程需要输入一些标识信息和密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): CERTkeystore ---- 证书保存的文件名 CERT ---- 证书的别名 10000 ---- 10000天的有效期 2048 ---- 默认为1024 bits,Android 建议使用2048 bits或更高其他的详细信息可以使用keytool -help查看帮助 证书生成后使用如下命令可以查看证书的信息:> keytool -list -alias CERT -keystore CERTkeystore

2)使用jdk的jarsigner工具对apk文件签名> jarsigner -verbose -keystore CERTkeystore to_signapk CERT 签名过程需要输入证书的密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): CERTkeystore ---- 证书保存的文件名 CERT ---- 证书的别名 待签名的apk文件根根目录下如果有文件夹“META-INFO”,请先删除(重新签名就需要这样做)。如果不想创建过程输出太多信息,可以删除“-verbose” 。上述签名会直接覆盖原来的文件,如果不想被覆盖而签名为另外的新文件 signedakp,只需将 to_signapk 改为 -signedjar to_signapk signedakp 即可。签名后可以使用如下命令验证是否签名成功: > jarsigner -verify to_signapk 如果需要查看更详细的验证信息,可修改为:> jarsigner -certs -verbose -verify to_signapk

3)使用android sdk的zipalign工具优化已签名的apk文件> zipalign -v 4 unalignedapk alignedapk 注意要在签名后再zipalign。这个工具不是jdk自带的,而是在%ANDROID_HOME%\tools\zipalignexe。--ITJOB

以下介绍查看自己的应用签名及三方APK或系统APK签名信息,包含其中的MD5、SHA1、SHA256值和签名算法等信息。

1、查看自己的应用签名

可以通过两种方式查看

(1) debug的apk通过Eclipse查看,如下图:

(2) 某个keystore签名的应用,通过以下命令查看

keytool -list -keystore E:\Trinea\keystore\appsearchkeystore,会要求输入签名密码,默认为android,如下图:

2、查看三方应用或是系统应用签名

用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERTRSA文件,通过keytool -printcert -file META-INF/CERTRSA命令打印证书信息,如微信证书信息如下图:

可以查看签名的MD5、SHA1、SHA256值及签名算法

一般在证书包里面有个文档,上面都是有签名的。

如果没有,那么久需要下载一个工具GenSignature安装到手机上面。

安装好上述工具之后把apk包下载到手机上安装好。

安装好之后打开GenSignature,然后输入你apk文件的包名,就可以查看签名了。

两种方式,一种开发工具eclipse,还有就是用apktool工具。I、只要Run As Android Application 过,到工作目录的bin文件夹下就能找到与项目同名的apk文件。II、 A选中项目,右键=》Andoid Tools=》Export Unsigned Application Package,直接保存,未签名的。 B选中项目,右键=》Andoid Tools=》Export Signed Application Package,后面一步步的去做,签过名的。 APK签名主要有两种:1 使用特殊的key签名可以获取到一些不同的权限。2 APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。

菜单菜单键,键入cmd命令进入命令模式。如图:

命令模式中,进入JDK的安装目录的Bin子目录下。(我的JDK安装在E盘,所以先进入E盘,然后再进入JDK安装目录)

通过keytoolexe 工具来创建keystore库

输入以下命令:

keytool -genkeypair -alias - mydemokeystore -keyalg RSA -validity 100

-keystore mydemokeystore

命令说明如下:

-genkeypair :指定生成数字证实

-alias :指定生成数字证书的别名

-keyalg:指定生成数字证书的算法 这里如RSA算法

-validity:指定生成数字证书的有效期

-keystore :指定生成数字证书的存储路径。 (这里默认在keytoolexe 目录下)

回车 出现如图交互式界面 输入数字证书费密码 作者 公司等详细信息

如图 :

完成后,keystore库创建完成,你可以在指定的保存目录下找到 如图:

使用jarsigner命令对未签名的APK安装包进行签名。使用JDK安装目录下bin子目录下的jarsignerexe工具来进行签名。

然后把未签名的apk也拷贝到此目录。如图:

使用如下命令进行签名:

jarsigner -verbose -keystore mydemokeystore -signedjar

-Noteapk Notesapk mydemokeystore

以上命令的说明:

-verbose:指定生成详细输出

-keystore:指定数字证书存储路径

-signedjar:该选项的三个参数为 签名后的apk包 未签名的apk包 数字证书别名

注意有效期哦。

签名后的apk 如图:

sdk目录下tool目录下使用zipalignexe工具优化APK安装包。

将已经签名的apk包放在zipalignexe同目录下 如图:

使用如下命令:

zipalign -f -v 4 -Noteapk -Notesapk

命令说明:

-f :指定强制覆盖已有文件

-v 指定生成详细输出

4:指定档案整理基于的字节数 一般是4 也有基于32位的。

-Noteapk :优化前APK

-Notesapk 优化后的APK

运行命令后,在该目录下生成一个-Notesapk,这个就是优化过的APK安装包

,该安装包可以对外发布。

以上就是关于如何判断 Android 应用的 Apk 签名是否一致全部的内容,包括:如何判断 Android 应用的 Apk 签名是否一致、手机怎么导出apk签名、如何获取android 签名信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9498848.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存