Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
keyfinder — 一个用于查找和分析私钥(及公钥)文件的工具,包括对 Android APK 文件的支持。 | Kitploit
工具/GitHubGitHub/certcc/keyfinder
Android安全加密/解密工具漏洞分析取证分析数字取证密码学移动安全Archived
GitHubcertcc/keyfinder

keyfinder

一个用于查找和分析私钥(及公钥)文件的工具,包括对 Android APK 文件的支持。

查看仓库
2784843年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
  • 概述
  • 安装
  • Keyfinder 用法
    • 密钥解析
      • 简单示例
      • 详细输出
    • APK 解析
      • 简单 APK 示例
      • crt.sh 检查
      • 密钥文件用法

概述

CERT Keyfinder 是一个用于在文件系统以及 Android APK 文件中查找和分析密钥文件的实用程序。CERT Keyfinder 的开发由美国国土安全部(DHS)资助。安装要求:

  1. Python(推荐 3.x)
    • androguard
    • python-magic
    • PyOpenSSL
  2. apktool
  3. grep
  4. OpenSSL
  5. Java

安装

  1. 获取 Keyfinder 代码。可以通过对 Keyfinder 仓库执行 git clone,或下载仓库的 zip 文件来完成。
  2. 安装 Python 依赖: $ pip3 install androguard python-magic PyOpenSSL 在 Windows 平台上,请使用 python-magic-bin 包代替 python-magic。这将提供分析文件魔数所需的 DLL。

Keyfinder 用法```

$ python3 keyfinder.py usage: A tool for analyzing key files, with Android APK support [-h] [-e EXTRACT_APK] [-u] [-k CHECK_KEYFILE] [-p PASSWORD] [-v] [-d] [apkpath]

positional arguments: apkpath APK file or directory

optional arguments: -h, --help show this help message and exit -e EXTRACT_APK, --extract EXTRACT_APK Extract specified APK using apktool -u, --checkused Check if the key file is referenced by the app (slow) -k CHECK_KEYFILE, --key CHECK_KEYFILE Key file or directory -p PASSWORD, --password PASSWORD Specify password -v, --verbose Verbose output -d, --debug Debug output

root@kitploit:~
## Key Parsing

CERT Keyfinder 可用于扫描系统中的文件,默认只报告私钥和/或受密码保护的密钥文件。  

### Simple Example
例如,在 CERT Tapioca 系统的 `~` 目录上运行 Keyfinder:```
$ python keyfinder.py -k ~/tapioca
keyfile: /home/tapioca/tapioca/.mitmproxy/mitmproxy-ca-cert.p12
type: pkcs12
protected: True

=====================

keyfile: /home/tapioca/tapioca/.mitmproxy/mitmproxy-ca.pem
private: True
protected: False
iskey: True
iscert: True
encoding: pem
type: pkcs8
certhash: 902073e933d0bf9b3da49a3a120d0adecdf031960f87576947bdc3157cd62d8e
keyhash: 3aae8d85450bae20aaf360d046bc0d90b2998800b3a7356f0742ef6a8824e423

=====================

上述命令行将检查指定目录中的每个文件,通过文件扩展名和文件魔术字节判断其是否为可能的密钥文件,最后会为每个被认定为私钥和/或受密码保护的密钥文件显示简要详情。

Verbose Output

如果我们希望获得更多详细信息,可以运行相同的命令行,但添加详细输出 -v 标志:``` $ python keyfinder.py -k ~/tapioca -v keyfile: /home/tapioca/tapioca/.mitmproxy/mitmproxy-ca-cert.cer x509text: Certificate: Data: Version: 3 (0x2) Serial Number: 15259797775478 (0xde0f2d36476) Signature Algorithm: sha256WithRSAEncryption Issuer: CN=mitmproxy, O=mitmproxy Validity Not Before: May 8 19:16:17 2018 GMT Not After : May 9 19:16:17 2021 GMT Subject: CN=mitmproxy, O=mitmproxy Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b0:91:be:f6:cc:62:5f:fd:af:9e:48:1e:b9:c5: 59:ca:36:f0:02:a7:e5:62:48:5c:26:1b:78:c1:3a: 74:02:0f:af:85:74:0c:d7:24:5f:85:4c:ce:e0:9b: 2f:3f:0a:85:ba:8f:36:3e:bc:4b:3b:3c:13:d8:8f: b9:46:38:42:69:9c:b2:7e:51:fa:cc🆎fc:57:95: 49:89:45:5c:a2:17:b9:6c:fc:a3:f6:0c:df:50:9e: 36:28:71:1e:43:d2:e7:13:0a:ec:25:e1:5d:27:a5: 69:5d:48:75:f2:4c:44:3f:b6💿33:a2:db:49:d3: 97:4d:4f:2c:60:ac:a0:4f:4a:96:19:52:d9:4d:b9: ce:70:49:e6:2d:eb:99:c6:cb:45:8c:5b:df:79:0a: 10:53:44:ac:c2:a3:6c:fd:7d:a3:04:93:73:5e:2e: d2:d9:b9:c9:f2:5d:ad:a0:68:6e:b9:43:31:2e:2b: 31:b5:8d:2b:09:04:7b:63:1e:79:5a:0b:cc:02:16: 7e:6c:7e:0b:04:d0:07:d6:3b:f9:6d:f8:80:e4:b5: e2:36:73:ee:c2:6a:a2:b3:ad:20:ac:42:00:24:61: ad:ff:ed:8d:3d:e7:9f:36:ed:51:a1:91:cf:13:60: b4:40:1c:e4:82:29:4e:d5:05:43:36:2d:04:b2:37: c5:cb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Netscape Cert Type: SSL CA X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication, E-mail Protection, Time Stamping, Microsoft Individual Code Signing, Microsoft Commercial Code Signing, Microsoft Trust List Signing, Microsoft Server Gated Crypto, Microsoft Encrypted File System, Netscape Server Gated Crypto X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 18:85:41:4C:5B:CD:3F:32:0B:BE:12:F2:C8:6E:98:78:6E:B6:EA:33 Signature Algorithm: sha256WithRSAEncryption 9a:84:35:8c:50:81:ae:53:46💿25:31:24:22:3a:25:a3:b0: c9:bd:68:d9:7f:06:3c:88💿23:0e:24:00:06:55:c6:91:0f: 81:a9:b6:1d:3d:01:58:54:8b:bc:e6:38:f3:0b:1d:fb:6c:d8: 67:46:d4:0e:cc:5c:ff:17:a4:e6:d0:95:e7:8c:c3:95:4c:80: 40:51:5b:b7:32:65:2d:50:25:26:0b:4a:d4:9d:35:59:f0:d9: cc:1e:2b:54:47:24:02:64:6d:f3:01:85:02:c8:4e:7d:02:13: 30:0c:92:c8:7c:48:2a:c6:dd:64:54:5f:8e:65:ce:c6:91:27: 61:e9:c6:51:25:f2:f4:f7:33:7e:48:c5:0e:a1:c1:86:83:6a: 5a:84:b7:3d:73:28:0b:0c:5a:98:eb:64:1f:a8:72:fd:ca:71: 3c:e7:37:b4:ff:94:ce:15:3d:d5:f4:e0:18:75:41:3c:f9:63: 01:6e🇩🇪73:73:1e:bf:e2:02:d7:47:a6:4a:9e:70:2d:ce:06: c4:a9:e5:a5:3b:b9:5f:d8:b6:9d:33:58:fc:38:ce:fb:80:0b: ad:5d:6f:56:62:ca:81:d1:27:36:5e:6f:03:7b:2b:75:29:bd: 85:d3💿11:a3:32:b7:72:09:d2:87:10💿fd:4b:bb:88:28: ce:15:3e:d2 SHA256 Fingerprint=90:20:73:E9:33:D0:BF:9B:3D:A4:9A:3A:12:0D:0A:DE:CD:F0:31:96:0F:87:57:69:47:BD:C3:15:7C:D6:2D:8E -----BEGIN CERTIFICATE----- MIIDoTCCAomgAwIBAgIGDeDy02R2MA0GCSqGSIb3DQEBCwUAMCgxEjAQBgNVBAMM CW1pdG1wcm94eTESMBAGA1UECgwJbWl0bXByb3h5MB4XDTE4MDUwODE5MTYxN1oX DTIxMDUwOTE5MTYxN1owKDESMBAGA1UEAwwJbWl0bXByb3h5MRIwEAYDVQQKDAlt aXRtcHJveHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwkb72zGJf /a+eSB65xVnKNvACp+ViSFwmG3jBOnQCD6+FdAzXJF+FTM7gmy8/CoW6jzY+vEs7 PBPYj7lGOEJpnLJ+UfrMq/xXlUmJRVyiF7ls/KP2DN9QnjYocR5D0ucTCuwl4V0n pWldSHXyTEQ/ts0zottJ05dNTyxgrKBPSpYZUtlNuc5wSeYt65nGy0WMW995ChBT RKzCo2z9faMEk3NeLtLZucnyXa2gaG65QzEuKzG1jSsJBHtjHnlaC8wCFn5sfgsE 0AfWO/lt+IDkteI2c+7CaqKzrSCsQgAkYa3/7Y0955827VGhkc8TYLRAHOSCKU7V BUM2LQSyN8XLAgMBAAGjgdAwgc0wDwYDVR0TAQH/BAUwAwEB/zARBglghkgBhvhC AQEEBAMCAgQweAYDVR0lBHEwbwYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcD BAYIKwYBBQUHAwgGCisGAQQBgjcCARUGCisGAQQBgjcCARYGCisGAQQBgjcKAwEG CisGAQQBgjcKAwMGCisGAQQBgjcKAwQGCWCGSAGG+EIEATAOBgNVHQ8BAf8EBAMC AQYwHQYDVR0OBBYEFBiFQUxbzT8yC74S8shumHhutuozMA0GCSqGSIb3DQEBCwUA A4IBAQCahDWMUIGuU0bNJTEkIjolo7DJvWjZfwY8iM0jDiQABlXGkQ+BqbYdPQFY VIu85jjzCx37bNhnRtQOzFz/F6Tm0JXnjMOVTIBAUVu3MmUtUCUmC0rUnTVZ8NnM HitURyQCZG3zAYUCyE59AhMwDJLIfEgqxt1kVF+OZc7GkSdh6cZRJfL09zN+SMUO ocGGg2pahLc9cygLDFqY62QfqHL9ynE85ze0/5TOFT3V9OAYdUE8+WMBbt5zcx6/ 4gLXR6ZKnnAtzgbEqeWlO7lf2LadM1j8OM77gAutXW9WYsqB0Sc2Xm8Deyt1Kb2F 080RozK3cgnShxDN/Uu7iCjOFT7S -----END CERTIFICATE-----

private: False protected: False type: certificate

=====================

keyfile: /home/tapioca/tapioca/.mitmproxy/mitmproxy-dhparam.pem private: False type: DH

=====================

keyfile: /home/tapioca/tapioca/.mitmproxy/mitmproxy-ca-cert.p12 type: pkcs12 protected: True

=====================

keyfile: /home/tapioca/tapioca/.mitmproxy/mitmproxy-ca.pem private: True protected: False iskey: True iscert: True encoding: pem type: pkcs8 certhash: 902073e933d0bf9b3da49a3a120d0adecdf031960f87576947bdc3157cd62d8e x509text: Certificate: Data: Version: 3 (0x2) Serial Number: 15259797775478 (0xde0f2d36476) Signature Algorithm: sha256WithRSAEncryption Issuer: CN=mitmproxy, O=mitmproxy Validity Not Before: May 8 19:16:17 2018 GMT Not After : May 9 19:16:17 2021 GMT Subject: CN=mitmproxy, O=mitmproxy Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b0:91:be:f6:cc:62:5f:fd:af:9e:48:1e:b9:c5: 59:ca:36:f0:02:a7:e5:62:48:5c:26:1b:78:c1:3a: 74:02:0f:af:85:74:0c:d7:24:5f:85:4c:ce:e0:9b: 2f:3f:0a:85:ba:8f:36:3e:bc:4b:3b:3c:13:d8:8f: b9:46:38:42:69:9c:b2:7e:51:fa:cc🆎fc:57:95: 49:89:45:5c:a2:17:b9:6c:fc:a3:f6:0c:df:50:9e: 36:28:71:1e:43:d2:e7:13:0a:ec:25:e1:5d:27:a5: 69:5d:48:75:f2:4c:44:3f:b6💿33:a2:db:49:d3: 97:4d:4f:2c:60:ac:a0:4f:4a:96:19:52:d9:4d:b9: ce:70:49:e6:2d:eb:99:c6:cb:45:8c:5b:df:79:0a: 10:53:44:ac:c2:a3:6c:fd:7d:a3:04:93:73:5e:2e: d2:d9:b9:c9:f2:5d:ad:a0:68:6e:b9:43:31:2e:2b: 31:b5:8d:2b:09:04:7b:63:1e:79:5a:0b:cc:02:16: 7e:6c:7e:0b:04:d0:07:d6:3b:f9:6d:f8:80:e4:b5: e2:36:73:ee:c2:6a:a2:b3:ad:20:ac:42:00:24:61: ad:ff:ed:8d:3d:e7:9f:36:ed:51:a1:91:cf:13:60: b4:40:1c:e4:82:29:4e:d5:05:43:36:2d:04:b2:37: c5:cb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Netscape Cert Type: SSL CA X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication, E-mail Protection, Time Stamping, Microsoft Individual Code Signing, Microsoft Commercial Code Signing, Microsoft Trust List Signing, Microsoft Server Gated Crypto, Microsoft Encrypted File System, Netscape Server Gated Crypto X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 18:85:41:4C:5B:CD:3F:32:0B:BE:12:F2:C8:6E:98:78:6E:B6:EA:33 Signature Algorithm: sha256WithRSAEncryption 9a:84:35:8c:50:81:ae:53:46💿25:31:24:22:3a:25:a3:b0: c9:bd:68:d9:7f:06:3c:88💿23:0e:24:00:06:55:c6:91:0f: 81:a9:b6:1d:3d:01:58:54:8b:bc:e6:38:f3:0b:1d:fb:6c:d8: 67:46:d4:0e:cc:5c:ff:17:a4:e6:d0:95:e7:8c:c3:95:4c:80: 40:51:5b:b7:32:65:2d:50:25:26:0b:4a:d4:9d:35:59:f0:d9: cc:1e:2b:54:47:24:02:64:6d:f3:01:85:02:c8:4e:7d:02:13: 30:0c:92:c8:7c:48:2a:c6:dd:64:54:5f:8e:65:ce:c6:91:27: 61:e9:c6:51:25:f2:f4:f7:33:7e:48:c5:0e:a1:c1:86:83:6a: 5a:84:b7:3d:73:28:0b:0c:5a:98:eb:64:1f:a8:72:fd:ca:71: 3c:e7:37:b4:ff:94:ce:15:3d:d5:f4:e0:18:75:41:3c:f9:63: 01:6e🇩🇪73:73:1e:bf:e2:02:d7:47:a6:4a:9e:70:2d:ce:06: c4:a9:e5:a5:3b:b9:5f:d8:b6:9d:33:58:fc:38:ce:fb:80:0b: ad:5d:6f:56:62:ca:81:d1:27:36:5e:6f:03:7b:2b:75:29:bd: 85:d3💿11:a3:32:b7:72:09:d2:87:10💿fd:4b:bb:88:28: ce:15:3e:d2 SHA256 Fingerprint=90:20:73:E9:33:D0:BF:9B:3D:A4:9A:3A:12:0D:0A:DE:CD:F0:31:96:0F:87:57:69:47:BD:C3:15:7C:D6:2D:8E -----BEGIN CERTIFICATE----- MIIDoTCCAomgAwIBAgIGDeDy02R2MA0GCSqGSIb3DQEBCwUAMCgxEjAQBgNVBAMM CW1pdG1wcm94eTESMBAGA1UECgwJbWl0bXByb3h5MB4XDTE4MDUwODE5MTYxN1oX DTIxMDUwOTE5MTYxN1owKDESMBAGA1UEAwwJbWl0bXByb3h5MRIwEAYDVQQKDAlt aXRtcHJveHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwkb72zGJf /a+eSB65xVnKNvACp+ViSFwmG3jBOnQCD6+FdAzXJF+FTM7gmy8/CoW6jzY+vEs7 PBPYj7lGOEJpnLJ+UfrMq/xXlUmJRVyiF7ls/KP2DN9QnjYocR5D0ucTCuwl4V0n pWldSHXyTEQ/ts0zottJ05dNTyxgrKBPSpYZUtlNuc5wSeYt65nGy0WMW995ChBT RKzCo2z9faMEk3NeLtLZucnyXa2gaG65QzEuKzG1jSsJBHtjHnlaC8wCFn5sfgsE 0AfWO/lt+IDkteI2c+7CaqKzrSCsQgAkYa3/7Y0955827VGhkc8TYLRAHOSCKU7V BUM2LQSyN8XLAgMBAAGjgdAwgc0wDwYDVR0TAQH/BAUwAwEB/zARBglghkgBhvhC AQEEBAMCAgQweAYDVR0lBHEwbwYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcD BAYIKwYBBQUHAwgGCisGAQQBgjcCARUGCisGAQQBgjcCARYGCisGAQQBgjcKAwEG CisGAQQBgjcKAwMGCisGAQQBgjcKAwQGCWCGSAGG+EIEATAOBgNVHQ8BAf8EBAMC AQYwHQYDVR0OBBYEFBiFQUxbzT8yC74S8shumHhutuozMA0GCSqGSIb3DQEBCwUA A4IBAQCahDWMUIGuU0bNJTEkIjolo7DJvWjZfwY8iM0jDiQABlXGkQ+BqbYdPQFY VIu85jjzCx37bNhnRtQOzFz/F6Tm0JXnjMOVTIBAUVu3MmUtUCUmC0rUnTVZ8NnM HitURyQCZG3zAYUCyE59AhMwDJLIfEgqxt1kVF+OZc7GkSdh6cZRJfL09zN+SMUO ocGGg2pahLc9cygLDFqY62QfqHL9ynE85ze0/5TOFT3V9OAYdUE8+WMBbt5zcx6/ 4gLXR6ZKnnAtzgbEqeWlO7lf2LadM1j8OM77gAutXW9WYsqB0Sc2Xm8Deyt1Kb2F 080RozK3cgnShxDN/Uu7iCjOFT7S -----END CERTIFICATE-----

keyhash: 3aae8d85450bae20aaf360d046bc0d90b2998800b3a7356f0742ef6a8824e423

=====================

keyfile: /home/tapioca/tapioca/.mitmproxy/mitmproxy-ca-cert.pem x509text: Certificate: Data: Version: 3 (0x2) Serial Number: 15259797775478 (0xde0f2d36476) Signature Algorithm: sha256WithRSAEncryption Issuer: CN=mitmproxy, O=mitmproxy Validity Not Before: May 8 19:16:17 2018 GMT Not After : May 9 19:16:17 2021 GMT Subject: CN=mitmproxy, O=mitmproxy Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b0:91:be:f6:cc:62:5f:fd:af:9e:48:1e:b9:c5: 59:ca:36:f0:02:a7:e5:62:48:5c:26:1b:78:c1:3a: 74:02:0f:af:85:74:0c:d7:24:5f:85:4c:ce:e0:9b: 2f:3f:0a:85:ba:8f:36:3e:bc:4b:3b:3c:13:d8:8f: b9:46:38:42:69:9c:b2:7e:51:fa:cc🆎fc:57:95: 49:89:45:5c:a2:17:b9:6c:fc:a3:f6:0c:df:50:9e: 36:28:71:1e:43:d2:e7:13:0a:ec:25:e1:5d:27:a5: 69:5d:48:75:f2:4c:44:3f:b6💿33:a2:db:49:d3: 97:4d:4f:2c:60:ac:a0:4f:4a:96:19:52:d9:4d:b9: ce:70:49:e6:2d:eb:99:c6:cb:45:8c:5b:df:79:0a: 10:53:44:ac:c2:a3:6c:fd:7d:a3:04:93:73:5e:2e: d2:d9:b9:c9:f2:5d:ad:a0:68:6e:b9:43:31:2e:2b: 31:b5:8d:2b:09:04:7b:63:1e:79:5a:0b:cc:02:16: 7e:6c:7e:0b:04:d0:07:d6:3b:f9:6d:f8:80:e4:b5: e2:36:73:ee:c2:6a:a2:b3:ad:20:ac:42:00:24:61: ad:ff:ed:8d:3d:e7:9f:36:ed:51:a1:91:cf:13:60: b4:40:1c:e4:82:29:4e:d5:05:43:36:2d:04:b2:37: c5:cb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Netscape Cert Type: SSL CA X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication, E-mail Protection, Time Stamping, Microsoft Individual Code Signing, Microsoft Commercial Code Signing, Microsoft Trust List Signing, Microsoft Server Gated Crypto, Microsoft Encrypted File System, Netscape Server Gated Crypto X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 18:85:41:4C:5B:CD:3F:32:0B:BE:12:F2:C8:6E:98:78:6E:B6:EA:33 Signature Algorithm: sha256WithRSAEncryption 9a:84:35:8c:50:81:ae:53:46💿25:31:24:22:3a:25:a3:b0: c9:bd:68:d9:7f:06:3c:88💿23:0e:24:00:06:55:c6:91:0f: 81:a9:b6:1d:3d:01:58:54:8b:bc:e6:38:f3:0b:1d:fb:6c:d8: 67:46:d4:0e:cc:5c:ff:17:a4:e6:d0:95:e7:8c:c3:95:4c:80: 40:51:5b:b7:32:65:2d:50:25:26:0b:4a:d4:9d:35:59:f0:d9: cc:1e:2b:54:47:24:02:64:6d:f3:01:85:02:c8:4e:7d:02:13: 30:0c:92:c8:7c:48:2a:c6:dd:64:54:5f:8e:65:ce:c6:91:27: 61:e9:c6:51:25:f2:f4:f7:33:7e:48:c5:0e:a1:c1:86:83:6a: 5a:84:b7:3d:73:28:0b:0c:5a:98:eb:64:1f:a8:72:fd:ca:71: 3c:e7:37:b4:ff:94:ce:15:3d:d5:f4:e0:18:75:41:3c:f9:63: 01:6e🇩🇪73:73:1e:bf:e2:02:d7:47:a6:4a:9e:70:2d:ce:06: c4:a9:e5:a5:3b:b9:5f:d8:b6:9d:33:58:fc:38:ce:fb:80:0b: ad:5d:6f:56:62:ca:81:d1:27:36:5e:6f:03:7b:2b:75:29:bd: 85:d3💿11:a3:32:b7:72:09:d2:87:10💿fd:4b:bb:88:28: ce:15:3e:d2 SHA256 Fingerprint=90:20:73:E9:33:D0:BF:9B:3D:A4:9A:3A:12:0D:0A:DE:CD:F0:31:96:0F:87:57:69:47:BD:C3:15:7C:D6:2D:8E -----BEGIN CERTIFICATE----- MIIDoTCCAomgAwIBAgIGDeDy02R2MA0GCSqGSIb3DQEBCwUAMCgxEjAQBgNVBAMM CW1pdG1wcm94eTESMBAGA1UECgwJbWl0bXByb3h5MB4XDTE4MDUwODE5MTYxN1oX DTIxMDUwOTE5MTYxN1owKDESMBAGA1UEAwwJbWl0bXByb3h5MRIwEAYDVQQKDAlt aXRtcHJveHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwkb72zGJf /a+eSB65xVnKNvACp+ViSFwmG3jBOnQCD6+FdAzXJF+FTM7gmy8/CoW6jzY+vEs7 PBPYj7lGOEJpnLJ+UfrMq/xXlUmJRVyiF7ls/KP2DN9QnjYocR5D0ucTCuwl4V0n pWldSHXyTEQ/ts0zottJ05dNTyxgrKBPSpYZUtlNuc5wSeYt65nGy0WMW995ChBT RKzCo2z9faMEk3NeLtLZucnyXa2gaG65QzEuKzG1jSsJBHtjHnlaC8wCFn5sfgsE 0AfWO/lt+IDkteI2c+7CaqKzrSCsQgAkYa3/7Y0955827VGhkc8TYLRAHOSCKU7V BUM2LQSyN8XLAgMBAAGjgdAwgc0wDwYDVR0TAQH/BAUwAwEB/zARBglghkgBhvhC AQEEBAMCAgQweAYDVR0lBHEwbwYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcD BAYIKwYBBQUHAwgGCisGAQQBgjcCARUGCisGAQQBgjcCARYGCisGAQQBgjcKAwEG CisGAQQBgjcKAwMGCisGAQQBgjcKAwQGCWCGSAGG+EIEATAOBgNVHQ8BAf8EBAMC AQYwHQYDVR0OBBYEFBiFQUxbzT8yC74S8shumHhutuozMA0GCSqGSIb3DQEBCwUA A4IBAQCahDWMUIGuU0bNJTEkIjolo7DJvWjZfwY8iM0jDiQABlXGkQ+BqbYdPQFY VIu85jjzCx37bNhnRtQOzFz/F6Tm0JXnjMOVTIBAUVu3MmUtUCUmC0rUnTVZ8NnM HitURyQCZG3zAYUCyE59AhMwDJLIfEgqxt1kVF+OZc7GkSdh6cZRJfL09zN+SMUO ocGGg2pahLc9cygLDFqY62QfqHL9ynE85ze0/5TOFT3V9OAYdUE8+WMBbt5zcx6/ 4gLXR6ZKnnAtzgbEqeWlO7lf2LadM1j8OM77gAutXW9WYsqB0Sc2Xm8Deyt1Kb2F 080RozK3cgnShxDN/Uu7iCjOFT7S -----END CERTIFICATE-----

private: False protected: False type: certificate

=====================

root@kitploit:~
这里我们可以看到证书的公钥和X509文本输出。

## APK 解析
CERT Keyfinder 最初是作为执行我的[在安卓应用中查找私钥的实验](https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=517768)所使用的框架的一部分而诞生的。因此,Keyfinder 包含了解析安卓应用程序 APK 文件的能力。

### 简单的 APK 示例```
$ python3 keyfinder.py com.shopgate.android.app21760.apk 
Reached a NAMESPACE_END without having the namespace stored before? Prefix ID: 24, URI ID: 25
testapks/com.shopgate.android.app21760.apk distributes its signing key as: res/raw/keystore.jks
testapks/com.shopgate.android.app21760.apk includes private,protected key:  res/raw/keystore.jks (Java KeyStore)
testapks/com.shopgate.android.app21760.apk includes protected key:  res/raw/shopgate_bks_neu.bks (BouncyCastle Keystore V1)
test@test-virtual-machine:/mnt/v1/keyfinder$

在这里我们可以看到,相关应用程序包含一个受保护的Java KeyStore文件,并且其中包含一个私钥。尽管Java KeyStore受密码保护,但KeyStore文件不会隐藏其内容。Keyfinder利用这一弱点,更改KeyStore密码,然后使用原生Java keytool工具解析内容。此外,本例中值得关注的是,私钥res/raw/keystore.jks包含用于签名Android应用程序本身的私钥。谷歌指出,管理好你的密钥并确保其安全,对你和你的用户都非常重要,但在这个例子中,应用程序作者却将其公之于众!

crt.sh 检查

对于Keyfinder找到的任何密钥,该密钥的SHA256签名都会在crt.sh网站上查询。该网站监控多个证书透明度来源,以检查某个密钥或证书是否已在公开环境中出现过。通常的原因是某个HTTPS网络服务器正在使用指定的密钥或证书。 CERT Keyfinder将使用两个信息来源查询crt.sh:

  • 位于包含私钥的密钥库中的证书的哈希值
  • 从私钥中提取的公钥的哈希值

当CERT Keyfinder报告某个密钥存在于crt.sh中时,这很可能是一个令人担忧的原因。因为与证书透明度数据库中列出的证书相关联的私钥,很可能是一个不应公开访问的密钥。例如,来自Google Play的任何Android APK显然是公开可用的。但这并不是HTTPS网站私钥应该存放的地方。``` $ python3 keyfinder.py apks/ireland.numt.aplykey.apk apks/ireland.numt.aplykey.apk includes private key: assets/sample-keys/ca.key (pkcs5) apks/ireland.numt.aplykey.apk includes private key: assets/sample-keys/client.key (pkcs5) Enter pass phrase for keys/ireland.numt.aplykey/assets/sample-keys/pass.key:apks/ireland.numt.aplykey.apk includes private,protected key: assets/sample-keys/pass.key (pkcs5) apks/ireland.numt.aplykey.apk includes protected key: assets/sample-keys/pkcs12.p12 (pkcs12) apks/ireland.numt.aplykey.apk includes private key: assets/sample-keys/server.key (pkcs5) apks/ireland.numt.aplykey.apk key assets/sample-keys/server.key is listed in crt.sh: https://crt.sh/?spkisha256=493f34228ad3179e2dad25a392acae4d2dcaebcf633240a9df9d7f4413c4e681 $

root@kitploit:~
我们可以看到文件 `assets/sample-keys/server.key` 在 crt.sh 中被列为:[https://crt.sh/?spkisha256=493f34228ad3179e2dad25a392acae4d2dcaebcf633240a9df9d7f4413c4e681](https://crt.sh/?spkisha256=493f34228ad3179e2dad25a392acae4d2dcaebcf633240a9df9d7f4413c4e681)。由于此查询针对的是公钥哈希而非证书本身,我们需要点击任意一个被看到的证书以获取该私钥可能用于何种用途的详细信息。通过点击进入 [https://crt.sh/?id=35604116](https://crt.sh/?id=35604116),我们可以看到该证书是由 Comodo CA Limited 为域名 `oxsv.meta-level.de` 和 `www.oxsv.meta-level.de` 颁发的。由于此证书已于 2013 年过期,该问题或许并不十分严重。然而,人们可能会好奇私钥文件 `assets/sample-keys/server.key` 是如何出现在一个公开发布的 Android 应用中的,同时又曾被一台公开可访问的服务器所使用。此类密钥泄露的影响可能取决于该服务器具体的使用方式。

### 密钥文件使用分析
Keyfinder 还包含另一项功能,有助于确定 Android 应用中所使用密钥的功能。通过使用 `-u` 选项,Keyfinder 会使用 [apktool](https://ibotpeaches.github.io/Apktool/) 提取 APK 内容,然后检查有哪些 APK 内容引用了该密钥文件。例如:```
$ python3 keyfinder.py apks/by_sha256/06/14/49/06144936809844bcb120d360ecc148679e33fd013c2bdac8bd9d7b63d71a57a4/tntapp.trinitymember.apk -u
I: Using Apktool 2.3.1-dirty on tntapp.trinitymember.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /tmp/tntapp.trinitymember/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
res/raw/sm_private is referenced by extracted/tntapp.trinitymember/smali/tntapp/trinitymember/R$raw.smali
res/raw/sm_private is referenced by extracted/tntapp.trinitymember/res/values/public.xml
apks/by_sha256/06/14/49/06144936809844bcb120d360ecc148679e33fd013c2bdac8bd9d7b63d71a57a4/tntapp.trinitymember.apk includes private key:  res/raw/sm_private (pkcs5)

这里我们可以看到,Android 代码中的 R$raw.smali 引用了 sm_private 密钥文件。如果查看 R$raw.smali 文件,我们可以看到一处对 sm_private 的引用:``` .field public static final sm_private:I = 0x7f060001

root@kitploit:~
如果我们在应用的代码中查找 `0x7f060001`,可以看到它在 `smali/tntapp/trinitymember/model/RSA.smali` 中被引用。```
    const v18, 0x7f060001
    invoke-virtual/range {v17 .. v18}, Landroid/content/res/Resources;->openRawResource(I)Ljava/io/InputStream;
    move-result-object v7
    .line 114
    .local v7, "is":Ljava/io/InputStream;
    new-instance v3, Ljava/io/BufferedReader;
    new-instance v17, Ljava/io/InputStreamReader;
    const-string v18, "UTF-8"
    move-object/from16 v0, v17
    move-object/from16 v1, v18
...

smali 代码看起来不太美观,因此我们可以将代码反编译为 Java,这样可读性会好一些:```java public static byte[] decryptRSA(Context arg20, String arg21) throws Exception { System.out.println(":" + arg21); byte[] v14 = Base64.decode(arg21.getBytes("UTF-8"), 0); BufferedReader v3 = new BufferedReader(new InputStreamReader(arg20.getResources().openRawResource(0x7F060001), "UTF-8")); ArrayList v13 = new ArrayList(); while(true) { String v12 = v3.readLine(); if(v12 == null) { break; }

root@kitploit:~
        ((List)v13).add(v12);
    }

...

root@kitploit:~
这里我们可以清楚地看到,有一个名为 `decryptRSA` 的函数,它正在打开私钥,该私钥被引用为资源 `0x7F060001`。如果我们进一步追踪应用程序代码,就能更好地了解该私钥的用途。但我们把这个留给读者作为练习。
下载工具