2011-04-02 6 views
6

मैं जिज्ञासा और सीखने के अनुभव से बाहर, निम्नलिखित कार्यक्रम को लागू करने के लिए सोच रहा हूं। मैं एक फ़ोल्डर की सुरक्षा के लिए एक प्रोग्राम लिखना चाहता हूं, ताकि आप सही पासवर्ड दर्ज करने के बाद ही फ़ोल्डर खोल सकें। मुझे पता है कि यह ऑपरेशन सिस्टम के लिए विशिष्ट है, इसलिए इसे Windows बनें। मुझे लगता है कि यह केवल C++ में संभव है, लेकिन यदि यह सादा C# या Java (जो मुझे संदेह है) में भी संभव है, तो कृपया मुझे बताएं।विंडोज फ़ोल्डर पासवर्ड

क्या कोई मुझे सही दिशा में इंगित कर सकता है? अग्रिम में धन्यवाद!

सादर, Petar

+0

क्या आपका मतलब है कि आपका प्रोग्राम एक सेवा होने जा रहा है और फ़ोल्डर से संबंधित सभी उपयोगकर्ता क्रियाएं आपकी सेवा के माध्यम से करनी चाहिए? मुश्किल लगता है ... –

+0

@ आर्मेन Tsirunyan - हाँ, ऐसा कहा जा सकता है। कुछ फ़ोल्डर्स पासवर्ड सुरक्षित होंगे, कुछ नहीं। –

+0

यहां एक मुश्किल सवाल है (और मुझे लगता है कि समाधान एक एन्क्रिप्शन ड्राइवर है): एलिस और बॉब एन्क्रिप्टेड फ़ोल्डर एफ के साथ मशीन से जुड़े हुए हैं एलिस को पता है कि एफ और बॉब के पासवर्ड को एफ के लिए पासवर्ड नहीं पता है बॉब "अजीब" तरीकों (cmd.exe या अपने स्वयं के अनुप्रयोग) में फ़ोल्डर में प्रवेश करने की कोशिश करता है और एन्क्रिप्टेड फाइलें पाता है, जैसा कि उन्हें होना चाहिए। ऐलिस एफ के लिए पासवर्ड डालें, इसलिए आप फ़ाइलों को डिक्रिप्ट करते हैं। अब, आप फ़ाइलों को कैसे डिक्रिप्ट करते हैं और यह सुनिश्चित करते हैं कि बॉब उन्हें छूने में सक्षम नहीं होगा? किसी भी तरह यह सुनिश्चित करना है कि जिन उपयोगकर्ताओं के पास एफ तक पहुंच नहीं है, वे इसे एक्सेस नहीं कर पाएंगे! – TCS

उत्तर

3

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

यदि इसे उच्च सुरक्षा की आवश्यकता नहीं है, तो आप विंडोज़ में अनुमान लगा सकते हैं। आपको विशेष रूप से निर्देशिका सूची फ़ंक्शंस, जैसे FindFirstFile, FindNextFile और OpenFile में भी हुक करने की आवश्यकता होगी (और FindFirstFileW जैसे उनके व्युत्पन्न में) और शायद कुछ अन्य।

आप है कि कॉल पुनः निर्देशित अपने कस्टम कार्यों के लिए kernel32.dll करने से, एक छोटे से कोड उदाहरण है जिसके नीचे मैं इंटरनेट पर पाया देखें:

unsigned char Store[10]; 
    //redirect FindNextFileW to your custom function 
    void HookAPI() 
    { 
     DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE; 
     HMODULE hmod = GetModuleHandle("Kernel32.dll"); 
     long pa = (long)GetProcAddress(hmod,"FindNextFileW"); 
     long pa2 = (long)MyFindNextFile; 
     long dAddr = pa2 - pa - 5; 
     unsigned char *p = (unsigned char *)pa; 
     unsigned char *p2 = (unsigned char *)(&dAddr); 

     VirtualProtect((void *)pa,5,NewProtect,&OldProtect); 

     for (int i=0;i<5;i++) 
      Store[i] = p[i]; 

     p[0] = (unsigned char)0xE9; 
     for (int i=0;i<4;i++) 
      p[i + 1] = p2[i]; 

     VirtualProtect((void *)pa,5,OldProtect,&NewProtect); 
    } 

    void UnHookAPI() 
    { 
     DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE; 
     HMODULE hmod = GetModuleHandle("Kernel32.dll"); 
     long pa = (long)GetProcAddress(hmod,"FindNextFileW"); 
     unsigned char *p = (unsigned char *)pa; 

     VirtualProtect((void *)pa,5,NewProtect,&OldProtect); 

     for (int i=0;i<5;i++) 
      p[i] = Store[i]; 

     VirtualProtect((void *)pa,5,OldProtect,&NewProtect); 
    } 

    BOOL WINAPI MyFindNextFile(HANDLE hFindFile,LPWIN32_FIND_DATAW lpFindFileData) 
    { 
     UnHookAPI(); 
     BOOL ans = FindNextFileW(hFindFile, lpFindFileData); 

     //your logic here, display password prompt to user e.g. 

     HookAPI(); 
     return ans; 
    } 

क्या आप क्या करना चाहते भी जावा के साथ किया जा सकता है (जेएनआई) या सी # (पिनवोक), लेकिन यह एक वास्तविक चक्कर आ जाएगा। मैं कुछ ऐसा उपयोग करता हूं जिसे देशी कोड में संकलित किया जा सकता है।

संपादित करें: Aoi Karasu एक पोस्ट जो एक FileSystemFilterDriver, जो शायद सबसे अच्छा अवधारणा प्रश्न में आवेदन का एहसास है उपयोग करने के लिए पता चलता है के लिए एक लिंक प्रदान की है।

+0

इसके लिए आप किस प्रकार का हुक इस्तेमाल करेंगे? मेरा मतलब है कि कौन सा हुक आपको विशिष्ट एपीआई कॉल की निगरानी करने में सक्षम बनाता है? –

+0

आप उनकी निगरानी नहीं करते हैं, आप मेमोरी मैनिपुलेशन के माध्यम से कॉल को "मोड़" देते हैं। – Falcon

+0

क्या आप सुनिश्चित हैं कि FindNextFile और FindFirstFile का उपयोग एक्सप्लोरर द्वारा किया जा रहा है? और फिर भी, डिक्रिप्ट करने के बाद क्या होता है? सिस्टम में अन्य उपयोगकर्ताओं को डिक्रिप्ट की गई फ़ाइलों तक पहुंचने से कैसे रोकते हैं? – TCS

0

एक "सरल" कार्यान्वयन के लिए मेरे सिर के ऊपर से एक विचार।

विचार ऐसे संरक्षित फ़ोल्डरों को बनाने के लिए विंडोज प्रमाणीकरण का उपयोग करना है।

आपका एप्लिकेशन प्रत्येक एन्क्रिप्टेड फ़ोल्डर F. के लिए उपयोगकर्ता उत्पन्न कर सकता है तो फ़ोल्डर Fi के लिए आप पासवर्ड यू के साथ उपयोगकर्ता यूआई उत्पन्न करेंगे।

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

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

0

विंडोज (एनटीएफएस) "जंक्शन पॉइंट" का समर्थन करता है। ये फ़ाइल सिस्टम में प्रविष्टियां हैं जो विंडोज को कुछ कोड निष्पादित करने के लिए बताती हैं। एक सामान्य प्रकार का जंक्शन बिंदु किसी अन्य फ़ाइल या फ़ोल्डर में हार्डलिंक है। हालांकि, आप मिलान करने वाले ड्राइवरों के साथ अन्य प्रकार जोड़ सकते हैं।

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

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