2009-05-15 12 views
29

रोक सकता हूं, मैं इस देखा:मैं कैसे तो दूसरे दिन DLL इंजेक्शन

http://www.edgeofnowhere.cc/viewtopic.php?p=2483118

और यह DLL इंजेक्शन के तीन अलग अलग तरीकों से चला जाता है। मैं प्रक्रिया से इन्हें कैसे रोकूं? या कम से कम, मैं पहले को कैसे रोकूं?

मैं सोच रहा था कि शायद एक अंगूठी 0 ड्राइवर तीनों को रोकने का एकमात्र तरीका हो सकता है, लेकिन मैं देखना चाहता हूं कि समुदाय क्या सोचता है।

उत्तर

27

सबसे अच्छा तकनीकी समाधान कुछ है कि का कारण बनता है लोडर कोड नहीं करने के लिए अपने प्रक्रिया आरंभ करने के बाद ठीक से चलाने में सक्षम होना करने के लिए किया जाएगा। ऐसा करने का एक तरीका एनटी लोडर लॉक लेना है, जो प्रभावी रूप से किसी भी लोडर कार्रवाई को रोकने से रोक देगा। अन्य विकल्पों में लोडर कोड को हमलावर के लिए विफल करने के लिए लोडर कोड को सीधे पैच करना शामिल है (उदाहरण के लिए अपेक्षित मामलों को संभालने के लिए एक इंट 3 ब्रेकपॉइंट और स्वयं-डीबग डालें) ..

लेकिन एक हैकर के रूप में बोलना (जो प्रशासक जिस साइट से आपने लिंक किया है, वास्तव में), आप कभी भी लोगों को अपनी प्रक्रिया, कोड या किसी अन्य तरीके से कोड प्राप्त करने से नहीं रोकेंगे। लोड लाइब्रेरी बस एक आसान शॉर्टकट होता है, लेकिन मैन्युअल रूप से कोड लोड करने के कई अलग-अलग तरीके हैं जिन्हें आप कभी भी पूरी तरह से रुकने की उम्मीद नहीं कर सकते, कुछ बेहद शामिल रिंग 0 कोड से कम। और यहां तक ​​कि यदि आप ring0 पर जाते हैं, तो हैकर्स आपके बगल में होंगे।

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

+0

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

+8

आपको याद है, लोडर लॉक एक वैश्विक संसाधन है, और तत्काल समाप्ति के लिए इसे जब्त कर रहा है (है | होना चाहिए)। – MSalters

+0

"क्या किसी भी प्रोग्राम को अतिरिक्त कार्यक्षमता देने के लिए संभावित रूप से डीएलएल इंजेक्शन का उपयोग कर सकते हैं" - और, इसे अक्सर क्रैश करने के लिए, प्रोग्राम-इंजेक्शन-टू-इन, बिना किसी उपयोगकर्ता द्वारा क्रैश के लिए दोषी ठहराया जा सकता है)। –

6

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

+1

हाँ ... यह सहायक नहीं है। प्रक्रिया के भीतर से मैं प्रक्रिया को नए उपयोगकर्ता खाते के तहत कैसे रख सकता हूं? –

1

आप इसे क्यों रोकना चाहते हैं? क्या यह एक वास्तविक 'व्यापार' की ज़रूरत है, या क्या आप 'हैक'

का विरोध करने के लिए सिर्फ 'हैक' में रूचि रखते हैं यदि उपयोगकर्ता के अधिकार इस परमिट करते हैं, तो यह डिज़ाइन द्वारा है - ओएस सभी उपयोगकर्ताओं को सुविधा प्रदान करता है आप, सिस्टम के व्यवस्थापक ने उन खातों को असाइन किया है जिनके तहत वे चलते हैं।

रेमंड चेन के यहां जल्द ही जोड़ने होने जा ...

+7

डीएलएल इंजेक्शन गेम हैकिंग में आम प्रथा है। मैं इसे रोकने के तरीकों के साथ खेल रहा हूं। और, बदले में, उन चारों ओर पाने के तरीके। हम सवाल की नैतिकता पर सवाल उठाने और इसके बजाय इसका जवाब देने के बारे में कैसे? –

+2

नैतिकता पर सवाल नहीं उठा रहा है। एचटी समीकरण के दोनों किनारों पर उपलब्ध अधिक जानकारी, बेहतर। मेरा मुद्दा यह था कि सुविधा एक जानबूझकर प्रदान की गई ओएस सुविधा है, और इसलिए वास्तव में ऐसा कुछ नहीं है जो "ऐसा नहीं होना चाहिए"। इसे रोकने के लिए कोई भी प्रयास पहले स्थान पर 'circumventing' से अधिक 'हैक' है। लेकिन मेरा मुख्य उद्देश्य यह पुष्टि करना था कि कोई एक हथियार दौड़ में प्रवेश करने की सोच रहा था और यह सोच रहा था कि यह ऐसा कुछ है जो सामान्य रूप से ऐप स्तर पर समायोजित होता है। स्पष्ट रूप से आप हैं, इसलिए यह स्पष्ट किया गया है ... –

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें। – Kcvin

0

मैं Windows API के साथ घनिष्ठ रूप से परिचित नहीं हूँ, लेकिन मैं आपको कुछ अधिक सामान्य संकेत दे सकते हैं: यदि आप Windows डाटा निष्पादन रोकथाम (डीपीई) का उपयोग कर सकते

  1. देखें। यह शायद सभी (पढ़ने: अधिकतर) स्थितियों के लिए काम नहीं करेगा, क्योंकि आपके लिंक में उल्लिखित प्रक्रिया ओएस के दृष्टिकोण से एक वैध प्रक्रिया है। गहरी सुरक्षा हालांकि

  2. सुनिश्चित करें कि आपकी प्रक्रिया तरीकों आवेदन भर सुरक्षा अनुमतियाँ जोर

  3. स्थिरता अपनी स्मृति अंतरिक्ष आवंटित ताकि किसी भी नए सूत्र पैदा में यह या तो असफल या मौजूदा स्मृति स्थान के ऊपर लिख देगा; यद्यपि इस के लिए पता लगाने और सही करने के लिए आपको शायद तर्क का एक भारी हिस्सा तर्क की आवश्यकता होगी।

  4. फैक्टर डिवाइस ड्राइवर या कुछ अन्य निम्न स्तर के प्रकार प्रक्रिया है कि आप Windows फ़ाइल संरक्षण छाता के अंतर्गत कवर प्राप्त कर सकते हैं में अपने कोड।

बस (Btw अच्छा नाम,!) Cthulon के जवाब को देखा और मुझे डर लग रहा है वह शायद सही: किसी को जो आपके आवेदन पर कोड इंजेक्शन प्रदर्शन करने के लिए ऐसा करने के लिए एक तरह से मिल जाएगा चाहता है। ऊपर दिए गए कदम केवल इसे थोड़ा और कठिन बना सकते हैं।

आशा इस मदद करता है

1

चर्चा के लिए बस संक्षिप्त विचार :)

इंजेक्षन करने के लिए एक सीआरसी अपने खुद के कोड में जाँच शायद अन्य कोड गुफाओं का उपयोग करने से दूसरों को धीमी हो जाएगी एक कोड गुफा का उपयोग करना।

मतदान के लिए प्रक्रिया मॉड्यूल सूची अज्ञात dll का लोड किया जा रहा है नीचे सिर्फ संलग्न धागा और संदेश हुक्स के साथ किसी भी पुराने बात इंजेक्शन लगाने के लोगों को धीमा के साथ मदद कर सकता है।

+1

रेफरी: "अज्ञात डीएल के लिए प्रक्रिया मॉड्यूल सूची मतदान"। मुझे लगता है कि जब आप अतीत में चले गए तो मैं झाड़ियों में छुपा रहा था। मैं कोड इंजेक्ट करता हूं लेकिन डीएलएल इंजेक्ट नहीं करता है ताकि आप वहां कुछ भी न देख सकें। – Joshua

2

आप तो एक Ring3 समाधान के लिए देख रहे हैं? यदि ऐसा है, तो आप सिस्टम में अतिरिक्त कार्यक्षमता बनाना चाहते हैं जो वर्तमान में (कम से कम मेरे ज्ञान के लिए) उपलब्ध नहीं है, इसलिए इसे कुछ काम की आवश्यकता होगी। इसके अलावा, यह एक ड्राइवर से संभव है, वास्तव में आपके अधिकांश एवी सॉफ्टवेयर इस प्रकार की गतिविधि नियमित रूप से करते हैं।

उपयोगकर्ता-मोड से उपर्युक्त विधियों को रोकने के लिए, यह थोड़ा सा ट्रिकियर हो जाता है क्योंकि आप केवल सृजन या डीएलएल लोडिंग को संसाधित करने के लिए कॉल के रूप में स्वयं को पंजीकृत नहीं कर सकते हैं। हालांकि, यदि आप मानते हैं कि आपकी प्रक्रिया उनके सामने शुरू हो गई है, तो वैश्विक स्तर पर CreateRemoteThread और इसी तरह के कार्यों को हुक करें और इस प्रकार की जांच स्वयं करें।

तो प्रभाव में आप जहां CreateRemoteThread एक धागा बना सकते हैं और एक त्रुटि लौट यदि आप इसे से खुश नहीं हैं के लिए करना चाहता जाँच करना चाहते हैं चाहते हैं।

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

यह मूर्ख प्रूफ नहीं है, लेकिन यह कार्यक्षमता का अनुरोध आपने किया देने के लिए प्रकट होता है।

11

कैसे उन 3 तकनीक के खिलाफ की रक्षा करने के लिए:

CreateRemoteThread

आप पहली तकनीक रोका जा सकता है (CreateRemoteThread जो LoadLibrary कॉल) LoadLibrary hooking द्वारा। अपने हुक में आप डीएलएल नामों की एक सूची के खिलाफ जांच करते हैं जिन्हें आप जानते हैं प्रक्रिया का हिस्सा हैं और जिन्हें लोड किया जा सकता है, या आप ज्ञात डीएलएल की एक सूची के खिलाफ जांच सकते हैं जिन्हें आप लोड नहीं करना चाहते हैं।

जब आप एक DLL आप SetLastError (ERROR_ACCESS_DENIED) लोड करने के लिए तो लौट शून्य नहीं करना चाहते हैं। मैंने आखिरी त्रुटि सेट की है ताकि कोड लिखने वाले लोग एक त्रुटि कोड की तलाश कर सकें। यह काम पर प्रतीत होता है, शायद एक अलग कोड अधिक उपयुक्त हो सकता है।

जो डीएलएल को लोड होने से रोक देगा।

SetWindowsHookEx

मुझे लगता है कि CreateRemoteThread अवरुद्ध के लिए उसी तकनीक का SetWindowsHookEx के लिए काम करेंगे, लेकिन केवल आप अपने हुक स्थापित कर सकते हैं इससे पहले कि SetWindowsHookEx तकनीक अपने कोड (जो आमतौर पर तब होता है जब पहली विंडो बनाई गई है लोड हो रहा है शुरू कर दिया है, तो एक ऐप में - अपने जीवनकाल में इतनी जल्दी)।

कोड गुफा

अच्छा तकनीक। पहले नहीं देखा। आप इसके खिलाफ बचाव कर सकते हैं, लेकिन आपको लोड लाइब्रेरी एंट्री पॉइंट (आईएटी टेबल नहीं) को हुक करना होगा क्योंकि कोड गुफा सीधे लोड लाइब्रेरी को कॉल करता है।

लेख के लेखक ने टिप्पणी की - कई तरीकों से आप पर हमला किया जा सकता है और आपको शायद उन सभी को हराने में मुश्किल होगी। लेकिन अक्सर आप केवल कुछ डीएलएल लोड के खिलाफ बचाव करना चाहते हैं (जैसे कि एक विशेष तृतीय पक्ष डीएलएल जो आपके सॉफ़्टवेयर के साथ असंगत है क्योंकि तीसरी पार्टी डीएलएल को इस तथ्य को समायोजित करने के लिए ठीक से लिखा नहीं गया था कि एक और हुक भी मौजूद हो सकता है, इसलिए आप ब्लॉक करते हैं इसे लोड करने से)।

+1

मैं CreateRemoteThread का उपयोग करके हुक लिखता हूं। हुकिंग लोड लाइब्रेरी कोई बचाव नहीं है क्योंकि मैं लोड लाइब्रेरी को कॉल नहीं करता हूं। मैं असेंबली स्टब में FindLibrary और GetProcedure पता की आंतरिक प्रतियां लेता हूं। – Joshua

4

चूंकि यह पोस्टर यह बताता है कि वह गेम एंटी-हैकिंग का निवेश कर रहा है, मुझे जो कुछ लगता है उस पर कुछ प्रकाश डालने दें। एक पूर्व धोखेबाज के रूप में।

खेल एंटी-हैकिंग के बारे में सिर्फ एक सूचक।

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

कौन परवाह करता है कि हैकर अपने क्लाइंट को हैक करता है या नहीं? बस इसे दूसरे पर मना कर दें और सब अच्छा है। स्टारक्राफ्ट मैपहाक्स के लिए, समाधान सरल है। उन क्षेत्रों के लिए गैमेस्टेट न दें जिन्हें अज्ञात होना चाहिए। यह बैंडविड्थ भी बचाता है।

मैं डेल्टा फोर्स (इसका पुराना गेम) में एक बड़ा धोखा था। मैंने जिस मुख्य चाल का उपयोग किया था, वह प्रक्रिया मेमोरी को सीधे संशोधित करके खेल में कहीं भी घुमा देना था। कोई डीएलएल की आवश्यकता नहीं है!

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