2012-01-20 6 views
8

द्वारा डिव का उपयोग करके अपनी प्रक्रिया से जुड़ी एक डीबगर का पता लगा सकते हैं क्या आप यह पता लगा सकते हैं कि उच्च सटीक टाइमर का उपयोग करके डीबगर आपके मूल विंडोज प्रक्रिया से जुड़ा हुआ है या नहीं, यह शून्य से एक पूर्णांक को विभाजित करने में कितना समय लगता है?क्या आप शून्य

तर्क यह है कि यदि कोई डीबगर संलग्न नहीं होता है, तो आपको हार्ड गलती मिलती है, जिसे हार्डवेयर द्वारा नियंत्रित किया जाता है और बहुत तेज़ होता है। यदि एक डीबगर संलग्न होता है, तो आपको इसके बजाय मुलायम गलती मिलती है, जो ओएस तक और अंततः डीबगर से घिरा हुआ है। यह अपेक्षाकृत धीमी है।

+1

क्या आपने इसे आजमाया? –

+2

मैंने कोशिश की। मुझे लगता है कि एक सांख्यिकीय सहसंबंध है, लेकिन आप इसका विश्वसनीय रूप से उपयोग नहीं कर सकते हैं क्योंकि विभिन्न हार्डवेयर पर इसे कितना समय लेना चाहिए, इसके लिए कटऑफ थ्रेसहोल्ड चुनना मुश्किल है। –

+3

और क्या होगा यदि उस पल में कोई बाधा आ गई? एक संदर्भ स्विच के बारे में कैसे? सबसे अच्छा आपको एक संभाव्य परिणाम मिलेगा। –

उत्तर

1

रिवर्स इंजीनियरों द्वारा उपयोग किए जाने वाले अधिकांश डिबगर्स डिबगर्स द्वारा छोड़े गए 99% अंकों को प्रभावित करने (निकालने) के तरीकों के साथ आते हैं, इनमें से अधिकांश डिबगर्स ने अपवाद फ़िल्टरिंग प्रदान की है, जिसका अर्थ है कि गति अंतर ज्ञानी नहीं होगा।

डीबगर को पहले स्थान पर जोड़ने से रोकने के लिए और अधिक उत्पादक है, लेकिन लंबे समय तक आप तब तक बाहर नहीं आ जाएंगे जब तक कि आप आवश्यक प्रयास निवेश को असुरक्षित न करें।

4

के बाद से वहाँ बिल्कुल कुछ भी नहीं है आप रिवर्स अपने कोड इंजीनियरिंग से एक निर्धारित व्यक्ति को रोकने के लिए क्या कर सकते हैं, कोई चालाक दृष्टिकोण आप को खोजने में काफी IsDebuggerPresent()

+0

अधिक विशिष्ट होने के लिए, व्यक्ति रिवर्स इंजीनियरिंग आपके कोड को केवल वर्चुअलाइज्ड टाइमर प्रदान कर सकता है जो समय बिताता है डीबगर में ... –

+0

... या बस जो कुछ भी है, उसे धीमा विभाजन का पता लगाने पर करने की योजना है ... या सिर्फ शून्य से विभाजन को हटा दें ... या बस अलग किए गए कोड को पढ़ें ... या उस एप्लिकेशन पर अपना समय बर्बाद न करें जिसे मैं वास्तव में संदेह करता हूं वह रिवर्स इंजीनियरिंग के लायक है। –

+2

हां, यह स्पष्ट नहीं है कि यहां स्पष्ट दृष्टिकोण का उपयोग करने और 'IsDebuggerPresent' को कॉल करने में क्या गलत है। किसी ने इसके बारे में टिप्पणी की, लेकिन पूछने वाला सिर्फ पागल हो गया और उसे इसके बजाय "कोई नहीं" कहा। –

3

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

इसके अलावा, आप एक प्रोग्राम हमला करने के लिए एक डिबगर संलग्न करने के लिए जरूरत नहीं है।

यदि आप यह निर्धारित करने के लिए अपवाद का उपयोग करने जा रहे थे कि एक बेवकूफ डीबगर संलग्न किया गया था, तो मैं व्यक्तिगत रूप से INT_MIN/-1 का उपयोग पूर्णांक ओवरफ़्लो अपवाद को ट्रिगर करने के लिए करता हूं। ज्यादातर उस बारे में नहीं जानते हैं।

+1

यह ध्यान दिया जाना चाहिए कि यह शून्य या 'INT_MIN/-1' द्वारा विभाजन करने के लिए वास्तव में गैर-तुच्छ (सी में) है। चूंकि यह यूबी है, जब तक संकलक संकलन-समय पर पता लगा सकता है कि यह होगा, यह अनुकूलित करने के लिए स्वतंत्र है या जो भी इसे पसंद करता है ... आपको कंपाइलर से व्यवहार छिपाने के लिए अक्सर कुछ हुप्स से कूदना होगा यदि आप वास्तव में सीपीयू द्वारा निर्देश को निष्पादित करना चाहते हैं ... –

+0

x86 पर, एक ही अपवाद (#DE) दोनों विभाजन के लिए 0 और INT_MIN/-1 द्वारा उत्पन्न किया जाएगा। –

+0

@ आर ..: आप या तो अस्थिर चर में संख्यात्मक या denominator स्टोर करते हैं और अधिकांश संकलक विभाजन के लिए कोड उत्पन्न करते हैं। –

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