
निजी (और सार्वजनिक) कुंजी फ़ाइलों को खोजने और विश्लेषण करने का एक उपकरण, जिसमें Android APK फ़ाइलों के लिए समर्थन शामिल है।
CERT Keyfinder एक उपयोगिता है जो फ़ाइल सिस्टम पर कुंजी फ़ाइलों को खोजने और विश्लेषण करने के साथ-साथ Android APK फ़ाइलों के अंदर मौजूद कुंजी फ़ाइलों को ढूंढने और उनका विश्लेषण करने के लिए है। CERT Keyfinder के विकास को अमेरिकी गृहभूति सुरक्षा विभाग (DHS) द्वारा प्रायोजित किया गया था। स्थापना आवश्यकताएँ:
git clone करके, या रिपॉजिटरी की एक zip फ़ाइल डाउनलोड करके किया जा सकता है।$ pip3 install androguard python-magic PyOpenSSL
Windows प्लेटफ़ॉर्म पर, python-magic के बजाय python-magic-bin पैकेज का उपयोग करें। यह फ़ाइल मैजिक का विश्लेषण करने के लिए आवश्यक DLL प्रदान करेगा।$ 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
## कुंजी पार्सिंग
CERT Keyfinder का उपयोग आपके सिस्टम पर फ़ाइलों को स्कैन करने के लिए किया जा सकता है, जो डिफ़ॉल्ट रूप से केवल निजी और/या पासवर्ड-संरक्षित कुंजी फ़ाइलों की रिपोर्ट करता है।
### सरल उदाहरण
उदाहरण के लिए, 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
=====================
उपरोक्त कमांड लाइन निर्दिष्ट निर्देशिका में प्रत्येक फ़ाइल की जाँच करेगी, फ़ाइल एक्सटेंशन और फ़ाइल मैजिक का उपयोग करके यह निर्धारित करेगी कि यह संभावित कुंजी फ़ाइल है या नहीं, और अंत में यह किसी भी फ़ाइल के लिए संक्षिप्त विवरण प्रदर्शित करेगी जो निजी और/या पासवर्ड-सुरक्षित कुंजी फ़ाइल पाई जाती है।
यदि हम अधिक विवरण प्राप्त करना चाहते हैं, तो हम वही कमांड लाइन चला सकते हैं, लेकिन विस्तृत -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
=====================
Here we can see public keys and X509 text output for certificates.
## APK Parsing
CERT Keyfinder started its life as part of the framework used to perform my [experiment to find private keys in Android apps](https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=517768). As such, Keyfinder includes the ability to parse Android application APK files.
### Simple APK Example```
$ 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 एप्लीकेशन पर हस्ताक्षर करने के लिए उपयोग की जाने वाली निजी कुंजी शामिल है। Google इंगित करता है कि अपनी कुंजी का प्रबंधन करना और इसे सुरक्षित रखना आपके और आपके उपयोगकर्ताओं दोनों के लिए बहुत महत्वपूर्ण है, लेकिन इस मामले में एप्लीकेशन लेखक ने इसे सार्वजनिक कर दिया है!
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 $
यहाँ हम देख सकते हैं कि फ़ाइल `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)
यहाँ हम देख सकते हैं कि एंड्रॉइड कोड R$raw.smali sm_private कुंजी फ़ाइल का संदर्भ देता है। यदि हम R$raw.smali फ़ाइल को देखते हैं, तो हम sm_private का एक संदर्भ देख सकते हैं:```
.field public static final sm_private:I = 0x7f060001
अगर हम एप्लिकेशन के कोड में `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; }
((List)v13).add(v12);
}
...
यहाँ हम स्पष्ट रूप से देख सकते हैं कि हमारे पास एक फ़ंक्शन है जिसे `decryptRSA` कहा जाता है, जो निजी कुंजी खोल रहा है, जिसे संसाधन `0x7F060001` के रूप में संदर्भित किया गया है। यदि हम एप्लिकेशन कोड में और आगे खोज करें, तो हमें बेहतर अंदाज़ा हो सकता है कि निजी कुंजी का उपयोग किस लिए किया जा रहा है। लेकिन हम इसे पाठक के लिए एक अभ्यास के रूप में छोड़ देंगे।