
बाइनरी फ़ाइलों में दोहराए गए बाइट अनुक्रमों को विज़ुअलाइज़ करता है ताकि छिपी हुई संरचना को उजागर किया जा सके, जो पूर्व-परिभाषित सिग्नेचर के बिना रिवर्स इंजीनियरिंग और पैटर्न खोज में सहायता करता है।

hexcymatix एक अन्वेषणात्मक शोध परियोजना है, जिसे मोटे तौर पर बाइनरी फ़ाइलों में दोहराए गए बाइट पैटर्न से संरचनात्मक जानकारी निकालने के लिए एक बाइनरी रिवर्स इंजीनियरिंग उपकरण के रूप में परिकल्पित किया गया है।
यह विचार कभी उपयोग योग्य उपकरण में परिणत नहीं हुआ, लेकिन फिर भी यह रोज़मर्रा के डेटा में मौजूद आश्चर्यजनक स्व-सममिति के कुछ मनोरम निरूपण प्रस्तुत करता है।
कभी-कभी रिवर्स इंजीनियरिंग में आपके पास कुछ डेटा का एक उदाहरण होता है — एक तालिका, एक संपीड़ित ब्लॉब, एक प्रोटोकॉल पेलोड — और आप उसका वर्णन करने वाला नियम या पार्सर लिखने में सक्षम हुए बिना, फ़ाइल में कहीं और समान डेटा खोजना चाहते हैं। आप बिना विशिष्टता के समानता चाहते हैं।
hexcymatix यह मानता है कि दोहराए गए बाइट स्ट्रिंग संरचना या संबंध का संकेत देते हैं, भले ही हम न जानें कि वह संरचना क्या है। पुनरावृत्तियों को विज़ुअलाइज़ करके, हम यह जाने बिना कि हम वास्तव में क्या खोज रहे हैं, संबंधित डेटा को उजागर कर सकते हैं।
उदाहरण के लिए, नीचे दिए गए Pensées अंश में कई स्व-दोहराए जाने वाले अनुक्रम हैं (' incapable of ', ' which he ', 'ing either ') — hexcymatix फ़ाइल को दो पंक्तियों में फैलाता है और कम से कम 8 बाइट्स के किसी भी दोहराए गए बाइट अनुक्रम को जोड़ता है:

जो कनेक्शन उभरते हैं वे फिर डेटा में अंतर्निहित संरचना और संबंधों का संकेत देते हैं।
इस प्रक्रिया को किसी सामान्य बाइनरी फ़ाइल पर दोहराने से स्वतः ही अप्रत्याशित स्व-समानता, कनेक्शन और संरचना उभरने लगती है। एक उदाहरण के रूप में, यहाँ एक मानक Windows इंस्टॉल में स्थित एरर लुकअप एक्ज़ीक्यूटेबल है:

इस प्रक्रिया का सबसे महत्वपूर्ण हिस्सा फ़्रैगमेंट कनेक्शनों के बीच आर्क्स जोड़ना है ताकि आउटपुट शानदार दिखे:

पूरी तरह से विषय से भटक जाने के बाद, हम डेटा के विभिन्न निरूपणों के साथ प्रयोग कर सकते हैं। उदाहरण के लिए, वही फ़ाइल और कनेक्शन एक वृत्त की परिधि पर प्रस्तुत किए जाने पर निम्न प्रकार दिखाई देते हैं:

python hexcymatix.py [options] file [file ...]
# Circular visualization of an executable
python hexcymatix.py --circular guidgen.exe
# Linear visualization, top 500 fragments only
python hexcymatix.py --linear --top 500 guidgen.exe
# Batch, 4K output
python hexcymatix.py --circular --resolution 4k *.exe






























pip install pycairo numpy pillow
pycairo मूल cairo लाइब्रेरी के विरुद्ध बनता है, जिसे पहले उपस्थित होना आवश्यक है — macOS पर brew install cairo pkg-config, या Debian/Ubuntu पर apt install libcairo2-dev pkg-config।
यह उपकरण एक रिवर्स इंजीनियरिंग सहायता के रूप में विकसित किया गया था: कुछ डेटा के एक ज्ञात उदाहरण — एक स्ट्रक्चर, एक संपीड़ित ब्लॉब, एक प्रोटोकॉल पेलोड — को देखते हुए, अतिरिक्त RE की आवश्यकता के बिना फ़ाइल में उसके अन्य उदाहरण खोजें। आशा यह थी कि ज्ञात उदाहरण के साथ कई दोहराए गए उप-अनुक्रम साझा करने वाले क्षेत्र, आगे जांच के योग्य उम्मीदवारों में समूहित हो जाएँगे।
अंततः, यह विचार कमज़ोर लगा और उपयोग-मामला सीमित था, इसलिए इस तकनीक को कभी उस तरह के निर्बाध प्लगइन के रूप में विकसित नहीं किया गया, जैसा उपयोगी शोध के लिए आवश्यक था। यह कार्य यहाँ साझा किया गया है ताकि यह शून्य में खो न जाए, इस आशा के साथ कि शायद कोई और इसे आगे बढ़ा सके।
यह परियोजना मूल रूप से हाथ से C# में लिखी गई थी। इसे बहुत कम निगरानी या समीक्षा के साथ LLM का उपयोग करके Python में पोर्ट किया गया है।
hexcymatix क्रिस्टोफर डोमास (@xoreaxeaxeax) का एक शोध प्रयास है।

| फ़्लैग | विवरण |
|---|
--circular | वृत्ताकार लेआउट: बाइट ऑफ़सेट एक रिंग पर कोणों में मैप होते हैं (डिफ़ॉल्ट) |
--linear | समानांतर-पट्टी लेआउट: दो क्षैतिज पट्टियाँ जो क्रॉसिंग क्वाड्स द्वारा जुड़ी होती हैं |
--top N [N ...] | रेंडरिंग से पहले केवल सबसे लंबे N फ़्रैगमेंट रखें; प्रति कटऑफ एक छवि रेंडर करने के लिए कई मान पास करें |
--no-arcs | केवल कॉर्ड्स बनाएं, आर्क्स छोड़ दें (काफ़ी तेज़, कम दृश्य शोर) |
--resolution RES | आउटपुट रिज़ॉल्यूशन WxH या एक प्रीसेट: 480p, 720p, 1080p, 1440p, 4k, uwfhd (2560x1080), suwfhd (3840x1080) (डिफ़ॉल्ट: 1080p) |
--ultra | --resolution 4000x4000 के लिए संक्षिप्त रूप |
--circle-fill F | वृत्त द्वारा उपयोग किए जाने वाले कैनवास व्यास का अंश (डिफ़ॉल्ट: 0.25, या अल्ट्रा-वाइड प्रीसेट के लिए 0.50) |
--jpg | प्रत्येक PNG के साथ 80% गुणवत्ता वाली JPEG भी लिखें |
--output-dir DIR | आउटपुट फ़ाइलों के लिए निर्देशिका (डिफ़ॉल्ट: output) |