मैंने एक उपहार के रूप में "हिटस्टर" नामक एक बोर्ड गेम प्राप्त किया। यह एक ऐसा गेम है जहाँ आप गानों की पहचान करते हैं और रिलीज़ वर्ष, आर्टिस्ट आदि के बारे में अंदाज़ा लगाते हैं। हर कार्ड पर आपको गाने के आर्टिस्ट या बैंड का नाम, गाने का रिलीज़ वर्ष और गाने का शीर्षक मिलता है। पीछे एक QR कोड होता है, जिसे आप Hitster ऐप के माध्यम से स्कैन करते हैं, जो फिर Spotify या Apple Music के माध्यम से म्यूज़िक प्ले करता है। दुःख के साथ, ऐप का उपयोग करने के लिए Apple Music या Spotify की सब्सक्रिप्शन की आवश्यकता होती है। इस ब्लॉग पोस्ट में, मैं अपनी यात्रा को गहरा करूंगा कि Android ऐप की उलटा इंजीनियरिंग कैसे की जाती है और उनके बहुत ही असफल प्रयास को कैसे ओवरराइड किया जाए जो डेटा को छिपाने के लिए किया गया है।
हर कार्ड के सामने, आपको गाने के आर्टिस्ट या बैंड का नाम, गाने के रिलीज़ वर्ष और गाने का शीर्षक मिलता है। पीछे एक QR कोड होता है। इसे स्कैन करने पर आपको दो चीज़ों वाली URL के पथ पर ले जाया जाता है: गेम का क्षेत्र (मेरे मामले में DE) और कार्ड का आईडी। फिर से म्यूज़िक ऐप में या Spotify के माध्यम से चलना शुरू हो जाता है। यह संकेत देता है कि कार्ड आईडी ⇒ Spotify ट्रैक के बीच एक मैपिंग है। कई कार्ड वर्शन भी प्रति क्षेत्र होते हैं, इसलिए कार्ड आईडी केवल एक गाने की पहचान करने के लिए पर्याप्त नहीं है।
मैंने किसी संदिहित Android APK डाउनलोड वेबसाइट से ऐप का APK प्राप्त किया, जावा कोड को डिकम्पाइल करने के लिए jadx का उपयोग किया। थोड़ा खोज करके, मैंने res/raw के अंदर कई JSON फाइलें पायीं। एक از them gameset_database_4.json था और इसे एन्क्रिप्टेड माना जाता था। मैंने एक टूल चलाया ताकि फॉर्मेट की पहचान की जा सके और उसने Base64 वापस कर दिया। यह एक एन्कोडिंग है, इसलिए मैंने इसे पहले डिकोड कर लिया। परिणाम अभी भी पढ़ने योग्य नहीं था, मैंने यह अंदाज़ा लगाया कि यह AES या एक समान चीज़ के साथ एन्क्रिप्टेड है। मैंने कभी भी Android ऐप की उलटा इंजीनियरिंग नहीं की थी, इसलिए मैं सिर्फ ग्लोबली AES की खोज करने लगे। और ख़याल क्या? एक फाइल नाम k43.java में पूरा डिक्रिप्शन प्रोसेस मे सामने खुला था।
FAQ प्रश्न: Hitster ऐप अपनी गेम डेटाबेस को कैसे डिक्रिप्ट करता है?
FAQ उत्तर: ऐप एक Base64-एन्कोडेड और AES/GCM/NoPadding एन्क्रिप्टेड JSON फाइल का उपयोग करता है। डिक्रिप्शन कुंजी एक पूरण और एक गुप्त स्ट्रिंग की कॉनकैटेनेशन के बीच SHA-256 से निर्मित की जाती है। IV डिकोड किए गए डेटा के पहले 12 बाइट्स है।
स्रोत: Hacker News · HeadlinesBriefing द्वारा सारांशित