2010-04-23 24 views
9

मैं समझने की कोशिश कर रहा हूं कि App-V और सैंडबॉक्सि (http://www.sandboxie.com/) जैसे सॉफ़्टवेयर कैसे काम करते हैं। लेकिन मेरे जीवन के लिए, मैं ऐसा कुछ भी नहीं सोच सकता जो इसे संभव बना सके। वे एपीआई कॉल कैसे रोकते हैं और लक्ष्य सॉफ्टवेयर की चाल कैसे करते हैं? अगर कोई कहता है कि यह सिर्फ जादू और पिक्सी धूल है, तो मैं उन पर विश्वास करता हूं। गंभीरता से, क्या ऐसे कोई सफेद कागजात हैं जो इस समस्या के समाधान पर चर्चा करते हैं?एप्लिकेशन वर्चुअलाइजेशन कैसे कार्यान्वित किया जाता है?

यदि यह सीएलआर स्तर पर संभव है तो यह अच्छा होगा लेकिन अगर मुझे करना है तो मैं मूल रूप से जाने के इच्छुक हूं।

+1

आपको डेवलपर्स के लिए एप्लिकेशन वर्चुअलाइजेशन के लिए http://boxedapp.com/ यह एसडीके देखना चाहिए। – MastAvalons

उत्तर

3

सैंडबॉक्सि अनिवार्य रूप से कोर विंडोज एपीआई में कोड इंजेक्ट करके करता है, वैसे ही एक वायरस होगा (यही कारण है कि Vista x64 इस व्यवहार को रोकता है, और क्यों सैंडबॉक्सि उस ओएस पर काम नहीं करता है)।

Here एपीआई हुकिंग की व्याख्या करने वाली एक परियोजना है। मैंने सीखा कि कैसे Metamod:Source के लिए sourcecode (Counterstrike के लिए SourceMod के लिए इस्तेमाल किया: स्रोत :)) का अध्ययन करके यह सब काम

+0

कूल! उसमें देखेंगे। क्या मैं यह मानने में सही हूं कि विंडोज विस्टा और 7 के 64-बिट संस्करणों में एपीआई हुकिंग की अनुमति नहीं है?धन्यवाद! –

+1

दो अलग-अलग चीजों के लिए एक ही शब्द; जब आप एक विशिष्ट घटना होती है ("डीबगिंग" या "रनटाइम" हुकिंग - केवल ओएस आपको हुक करने की इजाजत देता है) के रूप में आप अपना कोड "हुक" कर सकते हैं। हालांकि, आप वास्तविक घटनाओं के विनिर्देशों को लागू करने वाले डीएलएस को ओवरराइट नहीं कर सकते हैं, जो कि सैंडबॉक्स की ज़रूरत है। [यहां] देखें (http://en.wikipedia.org/wiki/Hooking) –

0

मैं कैसे एमएस यह किया पता नहीं है, लेकिन यहां एक ही रास्ता के बुनियादी सिद्धांत यह करने के लिए है। ..

आप जो करना चाहते हैं वह सिस्टम कॉल (इंटरप्ट में चेन करने के समान) में हुक है।

  1. सिस्टम कॉल होता है।
  2. आपका कस्टम अवरोध निष्पादित हो जाता है।
  3. यदि इस syscall को विशेष प्रसंस्करण की आवश्यकता नहीं है, तो जारी रखें। अन्यथा इसे विशेष प्रसंस्करण की आवश्यकता है और चरण 4 पर जाएं।
  4. स्टैक पॉइंटर, निर्देश पॉइंटर और सभी जैज़ स्टैक से प्राप्त करें, और उपयोगकर्ता-भूमि में अपने कस्टम कोड पर वापस भेजने के लिए एक नया स्टैक फ्रेम बनाएं।
  5. उपयोगकर्ता भूमि में डेटा और पथ और सामान का अपना मालिश करें। इस तरह यदि अंतर्निहित ओएस बदलता है, तो इस कोड को [अक्सर के रूप में] अद्यतन नहीं किया जाना चाहिए।
  6. सभी डेटा मालिश करने के बाद, सिस्टम कॉल को फिर से निष्पादित करें।
  7. आपका कस्टम इंटरप्ट फिर से निष्पादित करता है, लेकिन यह पता लगाना चाहिए कि आप अपने उपयोगकर्ता-भूमि सहायक परत से कॉल कर रहे हैं और कॉल को पास कर सकते हैं। उचित स्टैक पतों को स्थापित करने के लिए कुछ ढेर फ्रेम हेरफेर की आवश्यकता हो सकती है।
  8. नियमित सिस्टम कॉल निष्पादित करता है।
  9. जब सिस्टम कॉल रिटर्न देता है, तो स्टैक फ्रेम आपको वापस अपने नियमित कार्यक्रम प्रवाह पर भेजना चाहिए।

उम्मीद है कि इससे मदद मिलती है।

0

बाहर की जाँच करें जो दोनों सॉफ्टवेयर वर्चुअलाइजेशन की चर्चा X86 Virtualization पर विकिपीडिया पृष्ठ और अधिक आधुनिक हार्डवेयर वर्चुअलाइजेशन (जल्दी VMWare, शराब, Sandboxie और एक हद ऐप-वी के लिए) (हाइपर-वी, VMWare, अन्य) ।

मैं आप विशेष रूप से सॉफ्टवेयर वर्चुअलाइजेशन के लिए के रूप में नेट (या किसी भी CLR) आप पहले से ही एक हद तक CPU वास्तुकला से दूर अपने आप को सार संक्षेप रहे हैं का उपयोग करके, विशेष रूप से 'AnyCPU' लक्ष्य के साथ देख रहे हैं यह सोचते हैं रहा हूँ ।

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