【android】apk证书信息获取


前言

记录一些获取apk证书信息的命令


1. 获取apk文件指纹信息

keytool --printcert --jarfile C:\Users\admin\Desktop\test.apk

结果如下:

签名者 #1:

签名:

所有者: L=CN
发布者: L=CN
序列号: 1da74ad
有效期为 Fri Nov 20 14:24:38 CST 2020 至 Tue Nov 14 14:24:38 CST 2045
证书指纹:
         MD5:  35:C4:93:2D:1D:68:4A:3C:8B:2F:47:A5:5E:DF:A6:B0
         SHA1: 72:F8:69:37:D0:6C:3D:3C:64:B3:DB:AD:62:B2:98:BE:79:DB:34:B2
         SHA256: CF:1A:DF:A4:EF:3B:91:93:DE:A0:F6:C1:50:D2:D7:95:8D:89:3D:38:F2:5C:8D:21:C2:42:2C:23:18:8A:5F:90
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 57 14 DB BA 85 C8 33 21   CE 33 F7 B9 3D D9 58 46  W.....3!.3..=.XF
0010: E8 DF 8A F0                                        ....
]
]

2. 获取apk证书信息

这里需要先解压apk文件,获取META-INF文件夹中的CERT.RSA文件

openssl pkcs7 -inform DER -in C:\Users\admin\Desktop\test\META-INF\CERT.RSA -noout -print_certs -text

结果如下:

Certificate:                                                                                          
    Data:                                                                                             
        Version: 3 (0x2)                                                                              
        Serial Number: 31093933 (0x1da74ad)                                                           
        Signature Algorithm: sha256WithRSAEncryption                                                  
        Issuer: L=CN                                                                                  
        Validity                                                                                      
            Not Before: Nov 20 06:24:38 2020 GMT                                                      
            Not After : Nov 14 06:24:38 2045 GMT                                                      
        Subject: L=CN                                                                                 
        Subject Public Key Info:                                                                      
            Public Key Algorithm: rsaEncryption                                                       
                RSA Public-Key: (2048 bit)                                                            
                Modulus:                                                                              
                    00:e5:9c:f0:63:d0:e5:7a:f5:2f:a2:7e:e7:a1:9c:                                     
                    c6:d3:22:4a:03:5a:34:0a:f7:ff:9e:8a:c5:d2:7f:                                     
                    98:37:fc:a9:f2:52:db:ec:a4:88:53:1b:86:26:82:                                     
                    08:28:6a:ba:b9:fb:f4:69:e1:48:40:ac:89:5e:89:                                     
                    7b:89:0a:29:3c:0b:37:74:41:40:64:db:29:ce:57:                                     
                    a7:10:cd:9c:d2:07:40:fd:0f:01:42:14:2e:c9:9e:                                     
                    d9:93:0d:2e:89:ed:fb:7c:fc:89:3f:c2:fa:cd:da:                                     
                    df:71:14:1b:5b:ed:60:ec:fe:b4:99:c7:4b:77:d0:                                     
                    a9:19:b3:4d:2e:26:3c:68:4c:dc:b5:d6:df:37:9b:                                     
                    a7:11:0c:cc:9e:4f:8e:f4:5e:bf:f4:38:01:2e:59:                                     
                    90:cb:9f:43:73:7d:35:ab:8a:7d:ef:04:30:02:f7:                                     
                    a2:dc:0f:c7:1a:9c:55:23:db:7f:a2:9b:a0:98:9e:                                     
                    e7:a9:c8:5a:15:70:93:fc:88:97:f0:8b:56:8a:2d:                                     
                    6e:2f:fa:7c:ed:9d:e2:c7:bf:24:ef:a2:81:05:a2:                                     
                    50:7e:e0:e8:2d:38:35:74:02:e4:01:18:e3:52:72:                                     
                    20:9a:24:e7:5e:d2:da:d2:b2:91:26:4f:48:4c:a2:                                     
                    a5:03:ca:22:9f:f7:44:0d:bc:41:4a:ac:7c:12:f8:                                     
                    cf:27                                                                             
                Exponent: 65537 (0x10001)                                                             
        X509v3 extensions:                                                                            
            X509v3 Subject Key Identifier:                                                            
                57:14:DB:BA:85:C8:33:21:CE:33:F7:B9:3D:D9:58:46:E8:DF:8A:F0                           
    Signature Algorithm: sha256WithRSAEncryption                                                      
         23:e6:c7:36:b3:9e:ea:34:b0:ef:05:b8:34:2a:1c:83:74:c3:                                       
         2e:3b:95:42:d8:96:9d:88:c4:51:77:a1:14:ca:ef:74:19:2d:                                       
         90:46:b0:a5:00:d2:4c:2e:d7:75:b4:4c:d2:ed:d1:5b:05:d5:                                       
         aa:a8:e3:d2:25:8a:c8:57:f4:0d:09:2f:29:35:06:db:70:04:                                       
         5c:1c:5f:2c:5a:e3:70:47:ff:7a:94:e7:f1:1c:d3:71:c6:c1:                                       
         81:2d:ae:c1:fc:b7:f8:05:9c:c1:5c:be:ad:a0:a8:de:a6:53:                                       
         20:8b:7a:bc:b9:68:3c:0f:b4:17:f3:ee:39:30:21:29:5c:5d:                                       
         ab:68:e4:2f:d3:f2:50:71:b6:0e:91:1c:c1:e9:a0:d4:1c:e7:                                       
         e7:7f:78:2a:82:21:5c:4f:2e:a9:32:46:e7:a1:e3:db:ce:28:                                       
         02:02:30:35:c5:84:e6:10:15:ae:0e:22:f6:45:38:2b:8f:85:                                       
         52:e8:e9:5f:fa:6c:a6:41:f6:24:47:32:11:d5:61:ad:fc:a0:                                       
         44:3f:93:e7:fe:48:90:af:7f:02:d7:38:f9:d7:64:c7:53:db:                                       
         54:66:70:dd:ed:29:1e:84:22:be:37:1b:27:89:11:4a:b4:45:                                       
         15:5d:a5:ab:4c:19:92:8b:51:64:2e:ef:14:55:bc:c4:d6:61:                                       
         ac:6c:94:2e                                                                                  
                                                                                                      
                                                                                                      

另外可以通过修改CERT.RSA文件名,修改后缀为.p7r后双击打开,查看其中信息

p7r

参考资料:

从CERT.RSA中提取证书
Android签名机制及PMS中校验流程

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个工具前后用了好多天的时间查阅资料并不断修改才完成。本工具可以用于读取apk包的大量信息,无其他依赖。可以直接通过命令行运行,也可以当作架包使用。 命令行方式使用举例: 获取AndroidManifest.xml文件中定义的versionCode: java -jar ApkAnalysis.jar “apk路径” -versionCode 获取apk证书详情: java -jar ApkAnalysis.jar “apk路径” -certs 获取apk证书中的第一条的详情: java -jar ApkAnalysis.jar “apk路径” -certs 0 获取证书摘要(百度、高德地图等API中需要的那个SHA1): java -jar ApkAnalysis.jar “apk路径” -certs 0 SHA1 获取apk发布者信息: java -jar ApkAnalysis.jar “apk路径” -certs 0 issuer 获取apk声明的权限: java -jar ApkAnalysis.jar “apk路径” -permissions 当作为架包使用时,通过 ApkAnalysis apkAnalysis = ApkAnalysis.getApkReader(apkFilePath); 获取ApkAnalysis的实例,然后就调用对应方法读取即可。相信都会使用自动补全等功能吧?那个会告诉你有哪些可用的方法,这里不例举了。 输入 java -jar ApkAnalysis.jar -help会给出如下提示,请慢慢研究。如果好用,请不吝评价一下,谢谢~至于源码么,会反编译的就反编译吧,我也拦不住的,纯Java写的,还是很好反编译的,也没有代码混淆过。感兴趣愿意一起交流的可以留言问我要,纯粹伸手党就算了。 Apk分析工具 v1.0.7 编译时JDK版本:1.6.0_33 当前JRE版本:1.6.0_33 作者:周骞 发布日期:2015-01-08 --------------------------------------------------- ApkAnalysis [-versionCode] [-versionName] [-packageName]... 可用的选项: -versionCode 版本号 -versionName 版本名称,如1.0.3 -packageName Apk包名 -certs [index] [MD5|SHA1|issuer|subject|validity] 获取证书信息 -verify 校验apk内文件的签名,并列出未通过校验的文件 -permissions 获取apk所需的权限 -features 获取apk所需的特性 -activities [detail] 获取apk所含的Activity -services [detail] 获取apk所含的Service -receivers [detail] 获取apk所含的静态Receiver -content [name] 获取AndroidManifest.xml中的内容 -extract 抽取apk中的文件 -h[elp] 显示此帮助信息 --------------------------------------------------- 如在程序中引用本包,方法如下: ApkAnalysis apkAnalysis = ApkAnalysis.getApkReader(apkFilePath); 需要判断apkAnalysis是否为null,为null表示读取失败,不为null时即可调用getXX()获取数据
要在 Android 应用程序中使用 PKCS#12 格式的证书,可以按照以下步骤进行操作: 1. 在 Android Studio 的 Project 视图中找到 `app` 模块,创建一个新的目录,例如 `certs`。 2. 将 `.p12` 格式的证书文件复制到该目录中。 3. 在 `build.gradle` 文件中添加以下代码,将证书文件打包到 APK 中: ```groovy android { // ... sourceSets { main { assets.srcDirs += ['certs'] } } } ``` 4. 在代码中获取证书文件的输入流,并将其加载到 `SSLContext` 中: ```java InputStream inputStream = getAssets().open("your_certificate_file.p12"); KeyStore keyStore = KeyStore.getInstance("PKCS12"); keyStore.load(inputStream, "your_certificate_password".toCharArray()); KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); keyManagerFactory.init(keyStore, "your_certificate_password".toCharArray()); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keyStore); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null); ``` 5. 在 `MediaPlayer` 中设置 `DataSource` 时,使用 `HttpsURLConnection` 并设置其 `SSLSocketFactory`: ```java URL url = new URL("https://your_media_file_url"); HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection(); httpsURLConnection.setSSLSocketFactory(sslContext.getSocketFactory()); mediaPlayer.setDataSource(httpsURLConnection.getURL().toString()); mediaPlayer.prepareAsync(); ``` 这样,你的 `MediaPlayer` 就可以使用 PKCS#12 格式的证书加载加密的媒体文件了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值