2009-09-18 5 views
8

एक बहुत ही सरल स्थिति। मैं डेल्फी 2007 में एक एप्लिकेशन पर काम कर रहा हूं जिसे अक्सर 'रिलीज' के रूप में संकलित किया जाता है लेकिन फिर भी डीबगर के तहत चलता है। और कभी-कभी यह रिग्रेशन परीक्षण के लिए भी सिल्कटेस्ट के तहत चलाएगा। हालांकि यह काफी मजेदार है कि मैं कुछ विशेष करना चाहता हूं ...मैं एक डीबगर या अन्य उपकरण का पता कैसे लगा सकता हूं जो मेरे सॉफ़्टवेयर का विश्लेषण कर सकता है?

मैं यह जानना चाहता हूं कि मेरा एप्लिकेशन डीबगर/रिग्रेशन-टेस्टर में चल रहा है या नहीं और यदि ऐसा है, तो मैं चाहता हूं कि एप्लिकेशन यह जान सके कि कौन सा टूल उपयोग किया जाता है ! (इस प्रकार, जब एप्लिकेशन क्रैश हो जाता है, तो मैं इस त्रुटि की रिपोर्ट में इसकी जानकारी रिपोर्ट कर सकता हूं।)

कोई सुझाव, समाधान?

+0

आप लिख नहीं कर रहे हैं मैलवेयर, सही है ...? – Mick

उत्तर

10

आप माता-पिता की प्रक्रिया है कि आपके आवेदन शुरू कर दिया जाँच कर सकते हैं कर सकते हैं। CreateToolhelp32Snapshot/Process32First/Process32Next अपने आवेदन पीआईडी ​​के लिए मूल पीआईडी ​​(PROCESSENTRY32.th32ParentProcessID या TProcessEntry32.th32ParentProcessID) प्राप्त करें। फिर उन अभिभावकों के साथ तुलना करने के लिए अभिभावक पीआईडी ​​के लिए फ़ाइल नाम प्राप्त करें, जैसे कि सिल्कटेस्ट।

कोड उपयोग के लिए this article देखें।

IsDebuggerPresent और CheckRemoteDebuggerPresent के अलावा, आप भी (पाने के लिए PEB आप TEB, जो थ्रेड पर्यावरण ब्लॉक है क्वेरी चाहिए PEB प्रक्रिया पर्यावरण ब्लॉक है,) PEB.BeingDebugged क्वेरी कर सकते हैं।

3

शायद आप IsDebuggerPresent फ़ंक्शन की तलाश में हैं।

+0

लेकिन क्या यह सिल्कटेस्ट और अन्य परीक्षण सॉफ़्टवेयर का भी पता लगाएगा? या रिमोट डीबगर्स? –

+1

'चेकरमोटेडब्यूगर प्रतिनिधि' फ़ंक्शन भी है, जो लगता है कि यह दूरस्थ डिबगर्स की पहचान कर सकता है। मैं सिल्कटेस्ट से अपरिचित हूं इसलिए मुझे नहीं पता कि यह एक के रूप में कार्य करता है या नहीं डीबगर या नहीं। अगर ऐसा होता है, तो उपरोक्त काम करेगा। यदि नहीं, तो आपको एक और तकनीक मिलनी होगी। –

0

तुम भी

if DebugHook <> 0 then ... 
+0

यह केवल डेल्फी आईडीई के भीतर से काम करता है, अन्य डिबगर्स नहीं। साथ ही, ध्यान रखें कि एप्लिकेशन में डीबग किया गया है "रिलीज" मोड, "डीबग" मोड नहीं। –

1

सिल्कटेस्ट का पता लगाने के लिए, आप एक डीएलएल से जुड़ने का प्रयास कर सकते हैं जिसका उपयोग केवल इसकी मौजूदगी का पता लगाने के लिए सिल्कटेस्ट द्वारा किया जाता है। उदाहरण के लिए, अगर ओपन एजेंट एक प्रक्रिया से जुड़ा हुआ है, Win32HookDll_x86.dll या Win32HookDll_amd64.dll वर्तमान (नाम आसानी से Process Explorer जैसे उपकरण के साथ बाहर पाया जा सकता है किया जाएगा।