2012-03-18 19 views
5

एक बार जब मैंने विंडोज के लिए एक ड्राइवर लिखा है, जिसे ओएस के साथ देशी डिस्प्ले ड्राइवर की बातचीत को रोकना पड़ा। देशी डिस्प्ले ड्राइवर में मिनीपॉर्ट ड्राइवर और सत्र स्थान में win32k.sys द्वारा लोड किया गया एक डीएलएल होता है। मेरा लक्ष्य win32k.sys और डीएलएल के बीच दखल देना था। इसके अलावा, सिस्टम में कई डिस्प्ले ड्राइवर हो सकते हैं, मुझे उन्हें सभी को हुक करना पड़ा।विंडोज डिस्प्ले ड्राइवर हुकिंग, 64 बिट

मैंने एक मानक डब्लूडीएम ड्राइवर बनाया, जिसे सिस्टम बूट पर लोड करने के लिए कॉन्फ़िगर किया गया था (यानी win32k से पहले)। प्रारंभिकरण के दौरान एसएसडीटी को पैच करके ZwSetSystemInformation लगाया गया। जब भी यह सत्र स्थान में डीएलएल लोड/अनलोड करता है, तो यह फ़ंक्शन ओएस द्वारा कॉल किया जाता है, जो वास्तव में मुझे चाहिए।

जब ZwSetSystemInformationSystemLoadImage पैरामीटर के साथ शुरू हो जाती है - इसके मापदंडों में से एक एक SYSTEM_LOAD_IMAGE संरचना करने के लिए सूचक है, और उसके ModuleBase मॉड्यूल आधार मानचित्रण पता है। फिर मैं मैप किए गए छवि का विश्लेषण करता हूं, पैच मेरे फ़ंक्शन के साथ इसकी प्रविष्टि बिंदु, और शेष सरल है।

अब मुझे इस ड्राइवर को 64-बिट विंडोज़ पर पोर्ट करने की आवश्यकता है। कहने की जरूरत नहीं है कि यह एक मामूली काम नहीं है।

  • सभी ड्राइवरों हस्ताक्षर किया जाना चाहिए
  • PatchGuard
  • SSDT सीधे निर्यात नहीं किया है: अब तक मैं निम्नलिखित बाधाओं पाया।

यदि मैं सही ढंग से समझता हूं, तो पैचगार्ड और ड्राइवर हस्ताक्षर सत्यापन बंद कर दिया जा सकता है, ड्राइवर को समर्पित मशीन पर स्थापित किया जाना चाहिए, और हम इसे जिस तरह से चाहते हैं उसे यातना दे सकते हैं।

ऑनलाइन स्रोतों के अनुसार, एसएसडीटी का पता लगाने के लिए भी युक्तियां हैं।

हालांकि हाल ही में मैंने पाया है कि PsSetLoadImageNotifyRoutine नामक एक फ़ंक्शन मौजूद है। यह कार्य को काफी सरल बना सकता है, और गंदे चाल से बचने में मदद करता है।

मेरा प्रश्न हैं:

  • अगर मैं PsSetLoadImageNotifyRoutine उपयोग करते हैं, मैं सत्र अंतरिक्ष में लोड DLLs के बारे में सूचनाएं प्राप्त होगा? आधिकारिक दस्तावेज "सिस्टम स्पेस या यूजर स्पेस" के बारे में बात करता है, लेकिन क्या "सिस्टम स्पेस" में सत्र स्थान भी शामिल है?
  • क्या मुझे पैचगार्ड को अक्षम करने की आवश्यकता है यदि मैं मैप किए गए डीएलएल छवि को के बाद मैप किया गया था?
  • क्या कोई और संभावित समस्याएं हैं जिनके बारे में मैंने नहीं सोचा था?
  • क्या मैं चाहता हूं कि हासिल करने के लिए कोई और तरीका है?

अग्रिम धन्यवाद।

+0

आप क्या हासिल करने की कोशिश कर रहे हैं? ऐसा हो सकता है कि रूट समस्या के बारे में अधिक जानकारी के साथ आपकी समस्या को हल करने का एक बेहतर तरीका है। –

+0

@ लैरी ओस्टर्मन: मैं कुछ और द्वारा rdpdd (रिमोट डेस्कटॉप वर्चुअल डिस्प्ले ड्राइवर) को प्रतिस्थापित करने की कोशिश कर रहा हूं। ऐसा करने के लिए सही कारण समझाने में बहुत लंबा समय है, लेकिन यह आवश्यक है – valdo

+0

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

उत्तर

2

क्या मुझे मैच किए गए डीएलएल छवि को मैप किए जाने के बाद पैचगार्ड को अक्षम करने की आवश्यकता है?

x64 पर किसी भी ड्राइवर को लोड करने के लिए इसे हस्ताक्षरित होना चाहिए। व्यवस्थापक अधिकारों के साथ आप पैचगार्ड को अक्षम कर सकते हैं और मैं व्यक्तिगत रूप से डीएसईओ का उपयोग करने की सलाह देता हूं, इसके लिए एक जीयूआई आवेदन किया गया है।या आप एमबीआर (या BIOS) को ओवरराइट करके पैचगार्ड को बाईपास कर सकते हैं, हालांकि इसे आमतौर पर बूटकिट - मैलवेयर माना जाता है।