apk获取服务器时间文件名,如何根据APK文件获取应用程序签名时间

至少有三种方法可以获得像签名时间这样的东西。有第一种是使用keytool:

$ keytool -printcert -jarfile sample.apk

Signer #1:

Signature:

Owner: CN=GService inc, OU=G Service inc, O=G, L=New York, ST=New York, C=US

Issuer: CN=GService inc, OU=G Service inc, O=G, L=New York, ST=New York, C=US

Serial number: 6f30f864

Valid from: Thu Dec 17 04:12:27 PST 2015 until: Wed Dec 12 04:12:27 PST 2035

Certificate fingerprints:

MD5: 4D:36:65:14:59:5B:74:8F:2C:9D:92:30:F6:1D:90:8A

SHA1: A8:85:7B:72:4C:EE:55:83:09:D5:AC:5D:1A:02:80:C5:F6:83:2B:40

SHA256: 04:A7:24:9F:35:D5:8D:7E:F6:0F:73:81:35:5D:23:16:0D:FC:EA:61:C4:15:61:CC:06:8D:36:D9:C6:55:12:B7

Signature algorithm name: SHA256withRSA

Version: 3

Extensions:

#1: ObjectId: 2.5.29.14 Criticality=false

SubjectKeyIdentifier [

KeyIdentifier [

0000: C1 C5 19 32 72 47 46 C5 01 CC 4B AF 12 40 3D D2 [email protected]=.

0010: B5 52 45 5E .RE^

]

]

这可以让你的证书已经创建了可能的时间:Thu Dec 17 04:12:27 PST 2015。

二是使用jarsigner:

$ jarsigner -verify -verbose sample.apk

sm 4284 Wed Apr 13 11:03:18 PDT 2016 AndroidManifest.xml

sm 9193 Wed Apr 13 11:03:18 PDT 2016 res/drawable-hdpi-v4/ic_launcher.png

sm 5057 Wed Apr 13 11:03:18 PDT 2016 res/drawable-mdpi-v4/ic_launcher.png

sm 14068 Wed Apr 13 11:03:18 PDT 2016 res/drawable-xhdpi-v4/ic_launcher.png

sm 1408 Wed Apr 13 11:03:18 PDT 2016 resources.arsc

sm 20388 Wed Apr 13 11:03:18 PDT 2016 classes.dex

s 523 Wed Apr 13 11:03:18 PDT 2016 META-INF/MANIFEST.MF

576 Wed Apr 13 11:03:18 PDT 2016 META-INF/CERT.SF

1368 Wed Apr 13 11:03:18 PDT 2016 META-INF/CERT.RSA

s = signature was verified

m = entry is listed in manifest

k = at least one certificate was found in keystore

i = at least one certificate was found in identity scope

这让你似乎是在APK中的所有条目的最后修改时间。他们在这个APK中都是一样的,但他们有时会有所不同。所有最后修改时间可能必须大于“有效期”的日期。

第三个选项是用Java编程方式使用JarFile:

private static void printCertInfo(String jarPath) throws Exception {

// verify = true is key here

JarFile apkFile = new JarFile(jarPath, true);

JarEntry androidManifestEntry = apkFile.getJarEntry("AndroidManifest.xml");

if (androidManifestEntry == null) {

System.err.println("APK has no AndroidManifest.xml");

System.exit(-1);

}

// Need to fully read stream to verify cert

System.out.println("Android manifest probably signed: " + androidManifestEntry.getLastModifiedTime());

ByteStreams.copy(apkFile.getInputStream(androidManifestEntry), ByteStreams.nullOutputStream());

// Assuming only signed with a single cert (not always true, but you get the idea)

X509Certificate cert = (X509Certificate) androidManifestEntry.getCertificates()[0];

System.out.println("Android manifest cert probably created: " + cert.getNotBefore());

System.out.println("Full cert: " + cert.toString());

}

你可能会认为你可以使用androidManifestEntry.getCodeSigners()[0].getTimestamp()但它总是null,我不知道它是什么。上面的代码给出了这样的输出:

Android manifest probably signed: 2016-04-13T18:03:18Z

Android manifest cert probably created: Thu Dec 17 04:12:27 PST 2015

Full cert: [

[

Version: V3

Subject: CN=GService inc, OU=G Service inc, O=G, L=New York, ST=New York, C=US

Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11

// ** SNIP -- you get the idea **

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值