2013-12-12 6 views
13

मैं थिरकने regex सेट मैं एक बहुत ही अजीब चरित्र वर्ग वाक्यविन्यास पाया, [\x80-t] या [\x01-t\x0B\x0C\x0E-t\x80-t] तरह पार्स करने गया था, और मैं (वास्तव में कोई सुराग नहीं) को समझ नहीं सकते हैं क्या आयकर का मतलब है। मुझे यह भी नहीं पता कि यह मानक पीसीआरई है या एक प्रकार का स्नॉर्ट एक्सटेंशन है।थिरकने/PCRE Regex: अजीब चरित्र वर्ग वाक्यविन्यास

/\x3d\x00\x12\x00..........(.[\x80-t]|...[\x80-t])/smiR 
/^To\x3A[^\r\n]+[\x01-t\x0B\x0C\x0E-t\x80-t]/smi 

पुनश्च::

यहाँ कुछ नियमित अभिव्यक्ति है कि इन चरित्र वर्गों में शामिल हैं कृपया ध्यान दें कि \x80-t भी मानक तरीके से किसी मान्य श्रेणी नहीं है क्योंकि चरित्र टी है \ x74

+0

मैं चिंतित हूं। क्या मैं बिल्कुल पूछ सकता हूं कि आपको यह कहां मिला? – polkadotcadaver

+1

@polkadotcadaver बेशक। मैं कुछ परियोजनाओं की जांच कर रहा था, एक [netbench] है (http://merlin.fit.vutbr.cz/ant/netbench/index.html)। इसमें पैटर्न_मैच/नियम निर्देशिका के तहत एल 7, ब्रो और स्नॉर्ट से कई नियमित अभिव्यक्तियां शामिल हैं। Snort/voip.rules.pcre में स्नैर्ट/exploit.rules.pcre में अन्य इनमें से कुछ चरित्र वर्ग हैं। –

+0

@ सिमोन-क्यू यह निश्चित रूप से एक सीमा है। मैंने 'पिक मैनुअल] (http://www.pcre.org/pcre.txt) की खोज '-t \ b' के लिए की लेकिन मिलान नहीं हुआ। जिसका मतलब है कि'cre 'में विशेष रूप से कुछ भी नहीं है। अब कुछ संभावनाएं हैं: ** 1) ** श्रेणी केवल लेखक से एक त्रुटि है ** 2) ** '0x80' दशमलव में' 128' है, यदि आप किसी ब्राउज़र में '€ 'आज़माते हैं यूरो प्रतीक '€। तो हो सकता है कि प्रोग्राम किसी अन्य प्रकार की एन्कोडिंग/कैरेक्टर टेबल का उपयोग कर रहा हो? – HamZa

उत्तर

4

यह एक अलग वर्ण एन्कोडिंग का संदर्भ दे सकता है जहां tx80 से बड़ा है और x80 सामान्य रूप से संबोधित नहीं किया जा सकता है।

उदाहरण के लिए ईबीसीडीआईसी स्कैन कोड लें (here for a reference देखें)।

(लेकिन मैं भी कोई सुराग नहीं है यही कारण है कि किसी को इसे उस तरह से लिखना चाहते हैं)

ASCII के लिए मैं एक जंगली अनुमान है: अगर -t का अर्थ है "अगले टोकन तक -1" या अगर लाइन में पिछले रखा "स्वीकृत वर्णों के अंत तक" दूसरी क्वेरी इस राज्य होगा:

To:(not a newline, more than one character)(not a newline) 

तो मूल रूप से अभिव्यक्ति [\x01-t\x0B\x0C\x0E-t\x80-t][^\r\n] मतलब होगा।

यदि कोई (.Ç-t]|...[Ç-t]) पर लागू होता है जो कि 7 बिट ASCII से बड़े किसी भी चरित्र को संबोधित करेगा जो सभी यूनिकोड (पहले 127 वर्णों के अलावा) को भी संबोधित कर सकता है।

(कहा जा रहा है, मैं अभी भी कोई सुराग नहीं क्यों किसी को इस तरह से यह लिखना चाहिए है, लेकिन कम से कम "यह एक बग" के अलावा एक सुसंगत विवरण thats)

शायद उपयोगी: क्या rexexes आप मतलब तैनात करता है अगर कोई \ xYY लिखता है? ASCII:

/=\NULL\DEVICE_CONTROL_2\NULL\.{10}\(.Ç-t]|...[Ç-t])/smiR 
/^To\:[^\r\n]+[\START_OF_HEADING-t\VERTICALTAB\FORMFEED\SHIFTOUT\Ç-t]/smi 

के बाद \0x12 उर्फ ​​Device control 2 खोज रहे हैं मदद कर सकता है, क्योंकि उस पाठ में दिखाई नहीं देंगे, लेकिन शायद शुद्ध यातायात में।

+0

यह एक दिलचस्प बिंदु है, लेकिन इस मामले में मैं कक्षा '[\ x01-t \ x0B \ x0C \ x0E-t \ x80-t]' को अनावृत नहीं कर सकता हूं, जिसमें ओवरलैपिंग श्रेणियां होंगी। –

+1

@ सिमोन-सीयू क्या आप कुछ कोड पोस्ट कर सकते हैं जो कि रेगेक्स का उपयोग करता है? - इसके अलावा, ओवरलैपिंग श्रेणियां "अच्छी" नहीं हो सकती हैं, लेकिन उन्हें काम करना चाहिए, क्योंकि यह पर्यवेक्षक को "समझ में नहीं आता" हो सकता है, इसे एक लेखक द्वारा समझाया जा सकता है जो "जब तक वे काम नहीं करते" अपने regexes के साथ meddles लेकिन जांच नहीं करता बाद में उन्हें बाद में। –

+0

यह सच है, लेकिन वास्तव में अजीब है। कोड के बारे में, ये regexes Snort regex सेट से आना चाहिए (अगर netbench टीम ने उन्हें गलतियों के बिना एकत्र किया है, netbench के प्रश्न में मेरी पहली टिप्पणी में से एक देखें)। अब तक मैं इसे जावा रेगेक्स में बदलने और अन्य प्रयोजनों के लिए एक पार्स पेड़ में बदलने की कोशिश कर रहा हूं, इसलिए मैं कहूंगा कि रेगेक्स डेटा है। –

3

दूसरी रेगेक्स मेल लाइनें जो To: (केस-असंवेदनशील) से शुरू होती हैं, उसके बाद कम से कम एक वर्ण होता है जो लाइन फीड या कैरिज रिटर्न नहीं होता है। चूंकि यह एक लालची मैच है, इसलिए मुझे \r या \n[\x01-t\x0B\x0C\x0E-t\x80-t] वर्ण वर्ग में एकमात्र संभावित समाप्ति मैच होने की उम्मीद है। नोट: \r\x0D और \n के समतुल्य \x0A के बराबर है। सुनिश्चित नहीं है कि -t का अर्थ है, लेकिन आइए इसका दावा करें कि यह - था। फिर चरित्र वर्ग [\x01-\x0B\x0C\x0E-\x80-] होगा, जो अभी भी थोड़ा सा संकुचित है लेकिन थोड़ा और अधिक समझ में आएगा - यानी \n को एक समाप्ति चरित्र के रूप में अनुमति दे रहा है लेकिन \r नहीं।

यह बहुत लंबा शॉट है, लेकिन क्या कोई मौका है कि यह किसी प्रकार की खोज-और-बदली गई गलत हो सकती है ?! (मान लीजिए कि अगर t के बिना सामान्य श्रेणियां हैं, तो शायद इसे तुरंत छूट दी जा सकती है।)

संबंधित मुद्दे