
DataDome के कस्टम अस्पष्ट VM और बाइटकोड प्रारूप का विश्लेषण, जिसमें स्ट्रिंग एन्क्रिप्शन, S-box सिफर, और ब्राउज़र फिंगरप्रिंटिंग संकेत रिवर्स इंजीनियरिंग शिक्षा के लिए उजागर किए गए हैं।
DataDome अपने बंडल में एक कस्टम VM एम्बेड करता है ताकि वे जो वास्तव में कर रहे हैं उसे छिपा सकें। मैं उत्सुक हो गया और इसे अलग कर दिया। इसे यहाँ साझा कर रहा हूँ उन लोगों के लिए जो इसी तरह की रिवर्स इंजीनियरिंग पहेली में रुचि रखते हैं।
DataDome आपके ब्राउज़र में एक भारी अस्पष्ट (obfuscated) जावास्क्रिप्ट बंडल भेजता है। इसके अंदर, एक कस्टम वर्चुअल मशीन है — वे अपनी वास्तविक फिंगरप्रिंटिंग लॉजिक को एक निजी बाइटकोड प्रारूप में संकलित करते हैं, फिर इसे रनटाइम पर उस VM के अंदर चलाते हैं। यह लेखन के समय नवीनतम संस्करण का विश्लेषण है।
इस रेपो में कोई DataDome कोड शामिल नहीं है — केवल मेरा स्वयं का विश्लेषण और टूलिंग।
कृपया इसका उपयोग करने से पहले नीचे दिए गए नोट को पढ़ें।
एक बार जब आप बाइटकोड पढ़ सकते हैं, तो कुछ चीज़ें सामने आती हैं।
स्ट्रिंग एन्क्रिप्शन। सभी स्ट्रिंग्स बाइटकोड के शीर्ष पर एक एकल एन्क्रिप्टेड ब्लॉब में संग्रहीत हैं। प्रत्येक स्ट्रिंग को रनटाइम पर प्रति-एंट्री XOR कुंजी का उपयोग करके डीकोड किया जाता है, जो तालिका हेडर में बेक किए गए एक सीड के साथ संयुक्त होता है। इसलिए बिना सीड जाने कच्चे बाइट्स पढ़ने से भी कुछ नहीं पता चलता।
S-बॉक्स टेबल हर जगह। बाइटकोड का पहला ~20KB लगभग पूरी तरह से PUSH_N_IMM + ARRAY_FROM_STACK अनुक्रम हैं जो 256-बाइट लुकअप टेबल बनाते हैं। ये S-बॉक्स हैं, संभवतः एक कस्टम सिफर या AES राउंड के लिए जो एकत्रित सिग्नलों को भेजने से पहले हैश करने के लिए उपयोग किए जाते हैं।
फिंगरप्रिंटिंग सिग्नल जिन्हें आप स्ट्रिंग्स को डीकोड करने के बाद वास्तव में देख सकते हैं:
यह परियोजना पूरी तरह से इस जिज्ञासा को संतुष्ट करने के लिए मौजूद है कि कस्टम VM अस्पष्टता व्यवहार में कैसे काम करती है। यह रिवर्स इंजीनियरिंग में एक सीखने का अभ्यास है, बॉट डिटेक्शन को दरकिनार करने का उपकरण नहीं।
इस ज्ञान के साथ आप क्या करते हैं, यह आप पर निर्भर है।