2013-05-22 5 views
5

मैं विंडोज़ File System Filter Drivers पर देख रहा हूं। मैं इस "FsFilter" उदाहरण के साथ शुरू किया था:फ़िल्टर ड्राइवर (कर्नेल) के साथ फ़ाइल एक्सेस प्रयासों को कैसे जाल करें और अनुमति दें/अस्वीकार करने के लिए संवाद दें (उपयोगकर्ता)?

http://www.codeproject.com/Articles/43586/File-System-Filter-Driver-Tutorial

प्रयास के साथ

, मैं इसे बनाया गया है और संस्करण 64-बिट Win8 से 32-बिट WinXP के लिए सब कुछ पर काम में हस्ताक्षर किए पाने में कामयाब रहे। (ठीक है, जब तक मैं Bcdedit.exe -set TESTSIGNING ON चलाने के रूप में यह अपने परीक्षण प्रमाण पत्र स्वीकार करने के लिए, के बाद से मैं माइक्रोसॉफ्ट $ 250 मेरी .sys फ़ाइल पर हस्ताक्षर करने के भुगतान नहीं किया अनुमति देने के लिए: -। /)

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

शायद स्पष्ट रूप से ... कर्नेल-मोड कोड यूआई प्रदर्शित नहीं कर सकता है। इसे कुछ उपयोगकर्ता मोड प्रक्रिया को सिग्नल करना होगा, जो (मनमाने ढंग से अव्यवस्थित समय के बाद) ड्राइवर को उपयोगकर्ता की इच्छा को वापस संकेत देगा। मैंने User-Mode Interactions: Guidelines for Kernel-Mode Drivers पर थोड़ा सा देखा है (यहां Google's Cache as HTML है, डीओसी के बजाय)

मुझे नहीं पता कि यह हमला करने का सबसे अच्छा तरीका क्या है। एकमात्र उदाहरण जो मैंने अभी तक अध्ययन में पाया है वह SysInternals FileMon है। चालक यह एक WM_TIMER पाश के अनुसार एक बफर है, जो समय-समय पर .EXE से अनुरोध किया जाता है में बटोरता डेटा को स्थापित करता है:

// Have driver fill Stats buffer with information 
if (! DeviceIoControl(SysHandle, IOCTL_FILEMON_GETSTATS, 
      NULL, 0, &Stats, sizeof Stats, 
      &StatsLen, NULL)) 
{ 
    Abort(hWnd, _T("Couldn't access device driver"), GetLastError()); 
    return TRUE; 
} 

मैं एक ऐसी ही तकनीक का उपयोग करना चाहिए? शायद फिल्टर ड्राइवर, अनुरोध प्राप्त करने पर यह जांचना चाहता है, एक बफर में अनुरोध को ट्रैक करने के लिए एक रिकॉर्ड रख सकता है जिसमें दो HEVENT शामिल होंगे। इसके बाद यह इन दो हेवनेंट्स पर WaitForMultipleObjects होगा, जो उपयोगकर्ता मोड से संकेतित "हाँ" या "नहीं" का प्रतिनिधित्व करता है या नहीं।

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

मैं इस मॉडल को भी उलटा कर सकता हूं। उपयोगकर्ता मोड कोड डेटा में पास करने के लिए कस्टम IOCTL का उपयोग कर सकता है ... जैसे कि HEVENTs जिन्हें ड्राइवर द्वारा संकेतित किया जा सकता है, और केवल किसी प्रकार का सुरक्षित प्रोटोकॉल लागू करें। यह मतदान की आवश्यकता को खत्म कर देगा।

असल में बस विधि पर मार्गदर्शन की तलाश है, या वेब पर एक कामकाजी उदाहरण! मुझे यह जानने में भी दिलचस्पी होगी कि मैकेनिक्स एसिंक्रोनस फ़ाइल एक्सेस पर क्या होगा। मुझे लगता है कि एक तरीका है जिससे क्लाइंट एक एसिंक कॉल कर रहा है जिसे चेक किया जा रहा है, चल रहा है और केवल समाप्त होने के अनुरोध पर इंतजार कर रहा है ...?


(नोट: फिल्टर का निर्माण किया और डिबग होने का साथ ही मुझे पता चला है कि वहाँ "miniFilters" के माध्यम से कुछ और आधुनिक तकनीकों कर रहे हैं - जो Filter Manager Model लेकिन पल के लिए कहा जाता है कुछ का हिस्सा हैं,। मुझे लगता है कि लंबे समय के रूप विरासत मॉडल का समर्थन किया है के रूप में चिंतित नहीं हूँ। यह वैसे भी नहीं बल्कि समान दिखता है।)

+0

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

+0

@ रोहन आह ... किसी भी तरह से मुझे याद आया [वह आखिरी बात करने वाला बिंदु] (http://msdn.microsoft.com/en-us/library/windows/hardware/ff538896%28v=vs.85%29.aspx) में फायदे: * "फ़िल्टर प्रबंधक उपयोगकर्ता-मोड सेवाओं और नियंत्रण कार्यक्रमों के लिए सामान्य कार्यक्षमता प्रदान करता है जो मिनीफिल्टर ड्राइवरों के साथ काम करते हैं। फ़िल्टर प्रबंधक उपयोगकर्ता-मोड लाइब्रेरी, Filterlib.dll, उपयोगकर्ता-मोड सेवा या नियंत्रण प्रोग्राम और संचार के बीच संचार सक्षम करता है minifilter ड्राइवर। Filterlib.dll प्रबंधन उपकरण के लिए इंटरफेस भी प्रदान करता है। "* ठीक वही हो सकता है जो मैं चाहता हूं, मैं इसे देख लूंगा! – HostileFork

उत्तर

0

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

मैं इस परियोजना को देखने की पेशकश करूंगा, लेकिन कृपया README में अस्वीकरण को नोट करें। (यह केवल एक परीक्षण और जांच है):

https://github.com/hostilefork/CloneLocker

और हाँ, इस हद तक कि माइक्रोसॉफ्ट और उनके ड्राइवर मॉडल कुछ एक चिंताओं के बारे में हो रहा है के लिए, miniFilters बेहतर विकल्प इन दिनों कर रहे हैं।

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

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