2011-11-21 18 views
6

एसओ पर this post पढ़ने के बाद मैंने एक छोटा ऐप लिखने की कोशिश की जिसे मुझे छिपी हुई रजिस्ट्री कुंजियों/मानों को पढ़ने और लिखने की आवश्यकता है।
मैंने Registry Manipulation using NT Native APIs और Creating "Hidden" Registry Values लिंक की जांच की।
पहले व्यक्ति ने मुझे काम करने के लिए कुछ दिया, लेकिन यह सी ++ में लिखा गया है जबकि दूसरा एक डेल्फी परियोजना अच्छी तरह से काम कर रहा है।
मैं पहले कनवर्ट करने में सक्षम नहीं हूं और मैं दूसरे को बदलने की कोशिश कर सकता हूं, लेकिन मुझे कुंजी/मूल्य पढ़ने के लिए कुछ कोड ढूंढना होगा। इस कारण से मैं जानना चाहता हूं कि क्या कुछ "तैयार" है और सी # में परीक्षण किया गया है।
मैंने Proces Hacker v1.11 स्रोत कोड भी डाउनलोड किया है और इसे नीचे दिखाए गए डेल्फी उदाहरण को आंशिक रूप से रूपांतरित करने के लिए उपयोग किया है, लेकिन छुपा रजिस्ट्री कुंजी पहुंच योग्य है (जबकि डेल्फी में यह नहीं था) और मानों को लिखने के लिए एपीआई नहीं हैं।छिपी रजिस्ट्री कुंजी/मान

static void Main(string[] args) 
{ 
    string KeyNameBuffer = @"\Registry\User\S-1-5-21-3979903645-2167650815-2353538381-1001\SOFTWARE"; 
    string NewKeyNameBuffer = "Systems Internals"; 
    string HiddenKeyNameBuffer = "Can't touch me\0"; 
    string HiddenValueNameBuffer = "Hidden Value"; 

    // Apro la chiave di registro 
    IntPtr SoftwareKeyHandle = CreateKey(KeyNameBuffer, IntPtr.Zero); 
    if (SoftwareKeyHandle != IntPtr.Zero) 
    { 
     IntPtr SysKeyHandle = CreateKey(NewKeyNameBuffer, SoftwareKeyHandle); 
     if (SysKeyHandle != IntPtr.Zero) 
     {   
      // This key shouldn't be accessible, but it is    
      IntPtr HiddenKeyHandle = CreateKey(HiddenKeyNameBuffer, SysKeyHandle); 
      if (HiddenKeyHandle != IntPtr.Zero) 
      { 
       // I don't have APIs to write values 
      } 
     } 
    } 
} 

static IntPtr CreateKey(string keyName, IntPtr rootKey) 
{ 
    IntPtr res; 
    KeyCreationDisposition disp; 
    ObjectAttributes attributes = new ObjectAttributes(keyName, 
     ObjectFlags.CaseInsensitive, 
     new NativeHandle(rootKey)); 
    NtStatus st = Win32.NtCreateKey(out res, KeyAccess.All, 
     ref attributes, 0, 
     IntPtr.Zero, RegOptions.NonVolatile, out disp); 
    return st == NtStatus.Success ? res : IntPtr.Zero; 
} 

अंत: पर विस्टा से, तुम नहीं \Registry\Machine हिस्सा अगर तुम, प्रशासक के रूप में अपने अनुप्रयोग नहीं चला रहे हैं, तो उदाहरण में मैं अपने उपयोगकर्ता रजिस्ट्री कुंजी इस्तेमाल किया लिख ​​सकते हैं। क्या मुझे रजिस्ट्री के उस हिस्से को लिखने के लिए मूल एपीआई का कोई तरीका है यदि मुझे प्रति मशीन मूल्य स्टोर करने की आवश्यकता है?

उत्तर

1

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

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