2013-06-17 8 views
5

हमारे पास एक तृतीय पक्ष मूल एप्लिकेशन है (सी I विश्वास में लिखा गया है) जिसे हम मशीन पर कई उदाहरण चलाने के लिए चाहते हैं।किसी एप्लिकेशन के लिए वर्चुअलाइज्ड रजिस्ट्री के साथ 'सैंडबॉक्स' कैसे बनाएं?

हालांकि कॉन्फ़िगरेशन फ़ाइल का स्थान ढूंढने के लिए एप्लिकेशन एक विशेष रजिस्ट्री कुंजी से पढ़ता और लिखता है। यह अपने चलने के दौरान लगातार इस स्थान को पढ़ता है। रजिस्ट्री कुंजी HKLM में है। इसका अर्थ यह है कि यदि हम कॉन्फ़िगर फ़ाइल के लिए 2 अलग-अलग स्थानों के साथ ऐप के 2 अलग-अलग उदाहरणों को चलाने और चलाने के लिए प्रक्रियाओं को एक-दूसरे के पैर की अंगुली पर चलते हैं।

क्या रजिस्ट्री को वर्चुअलाइज करना संभव है (या प्रत्येक प्रक्रिया को एक सैंडबॉक्स में चलाएं) कि प्रक्रियाएं उपयोग कर रही हैं ताकि वे दोनों सोच सकें कि वे एक ही स्थान पर लिख रहे हैं, लेकिन वास्तव में वे कहीं से लिख रहे हैं और पढ़ रहे हैं अलग और वे एक दूसरे के पैर की उंगलियों पर कदम नहीं उठाएंगे?
https://en.wikipedia.org/wiki/Portable_application_creators

बनाने के लिए अपने स्वयं के वर्चुअलाइजेशन सॉफ्टवेयर और अधिक जटिल है और प्रोग्रामिंग और खिड़कियों SDK का उपयोग पुस्तकालय कॉल hooking पर एक पूरे मोटे की आवश्यकता होगी:

उत्तर

5

कई विकल्प एक कार्यक्रम virtualize करने के लिए कर रहे हैं।

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

आवेदन के रूप में कई प्रतियां के रूप में आप चलाने की आवश्यकता है, तो आवेदन फाइल एक हेक्स संपादक में रजिस्ट्री कुंजी का नाम खोजते हैं, यानी खोलने के लिए और: \ CurrentControlSet \
HKLM \ System नियंत्रण \ सत्र प्रबंधक

\ CurrentControlSet \ HKLM \ System नियंत्रण \ सत्र Manage1
HKLM \ System \ CurrentControlSet \ Control \ सत्र:

फिर प्रत्येक अलग संस्करण (1 बाइट, 0-9) यानी के लिए एक अंकों के लिए पिछले बाइट बदल प्रबंधन 2
HKLM \ System \ CurrentControlSet \ Control \ सत्र प्रबंधित

10 से अधिक मतभेदों के लिए (2 बाइट्स, 00-99) पिछले दो बाइट का उपयोग:
\ CurrentControlSet \ HKLM \ System नियंत्रण \ सत्र Manag01
\ CurrentControlSet \ HKLM \ System नियंत्रण \ सत्र Manag02
HKLM \ System \ CurrentControlSet \ Control \ Session Manag03

+0

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

+0

मैंने अभी इसका परीक्षण किया है और ऐसा लगता है कि यह काम करता है। धन्यवाद। मैं अन्य सुझावों का इंतजार करूंगा लेकिन अगर कोई अन्य समाधान नहीं आ रहा है तो भी हमें इस मुद्दे को हल करना चाहिए। धन्यवाद! –

+0

आपका स्वागत है, मुझे खुशी है कि मैं आपकी मदद करने में सक्षम था! –

1

हां, आप एप्लिकेशन को वर्चुअलाइज़ कर सकते हैं, इस तकनीक को एप्लिकेशन वर्चुअलाइजेशन कहा जाता है। http://www.cameyo.com/ आज़माएं। कैमियो एक सॉफ्टवेयर है जो वर्चुअल एप्लिकेशन बनाने के लिए उपयोग किया जाता है।

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

3

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

इसलिए, मैं DLL injection का उपयोग करने का सुझाव दूंगा और RegOpenKey(Ex), RegCreateKey(Ex) आदि पर कॉल को रोक देगा।इस तरह, आप वास्तविक विंडोज Advapi32.dll पर कॉल को पार करने से पहले रजिस्ट्री पथ से परेशान हो सकते हैं।

एपीआई hooking के बारे में कुछ महान लेख:

API Hooking and DLL Injection on Windows

API Hooking with MS Detours

1

हाँ, Sandboxie किसी ऐप के कई उदाहरण चला सकते हैं, में अपने आप "सैंडबॉक्स" जो यह पूरे होने का मानना ​​है कि प्रत्येक ब्रम्हांड। लेकिन यदि आपको आवश्यकता हो तो आप सीधे सामान्य तरीकों से डेटा तक पहुंच सकते हैं।

तो दूसरे शब्दों में, सैंडबॉक्सि आपको ऐप के संचालन में किए गए सभी रजिस्ट्री परिवर्तनों को देखने देता है, और यदि आप चाहें तो उन्हें वापस रोल कर सकते हैं।

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