दिलचस्प पोस्ट
JSF में सत्यापन कैसे करें, JSF में एक कस्टम वैलिएटर कैसे बनाएं JFreeChart पोलरप्लॉट: गणितीय अभिविन्यास एंड्रॉइड: मैं एक ईमेल में एक अस्थायी, जेनरेट की गई छवि कैसे जोड़ूं? क्या मुझे कड़ाई से एंड्रॉइड पर एंमाम का इस्तेमाल करना चाहिए? फ़ाइल के बाद फाइल को बंद करना। कई अनुप्रयोगों को स्थापित करने के लिए Wix गोलांग: संरचना का टुकड़ा! = इंटरफ़ेस का टुकड़ा यह लागू करता है? Node.js पर HTML- पार्सर जावास्क्रिप्ट + एचटीएमएल 5 स्थानीय स्टोरेज फ़ील्ड द्वारा PHP क्रमबद्ध सरणी? आर ऑब्जेक्ट फ़ंक्शंस या "फॉर" लूप में प्रिंट क्यों नहीं करते? पायथन Urllib2 SSL त्रुटि 2.3 पर किया गया सॉफ़्टइनपुट एक्शन लेबल के साथ बहुरेखित संपादन टेक्स्ट IPhone पर आधारित mach_absolute_time क्या है मैं कैसे जांच करूं अगर कोई सॉकेट वर्तमान में जावा में जुड़ा हुआ है?

स्मृति बफर से बनाएँप्रक्रिया करें

मैं एक EXE लॉन्च करने के लिए CreateProcess का उपयोग कर सकता हूँ मुझे एक स्मृति बफर में एक EXE की सामग्री है और इसे किसी फाइल में लिखने के बिना उस पर CreateProcess (या एक समतुल्य) करना चाहते हैं I क्या उसे करने का कोई तरीका है?

बैकस्टोरी: हम खेल बनाते हैं हम अपने वितरकों के लिए एक सादे EXE भेजते हैं, जो फिर अपने पसंदीदा DRM का उपयोग करके इसे अपने उपयोगकर्ताओं को बेचते हैं। ऐसे उदाहरण दिए गए हैं जहां उपयोगकर्ता क्रैश पाते हैं। अधिकांश दुर्घटनाओं को ठीक करने में 5 मिनट लगते हैं, लेकिन पैच को वितरक के माध्यम से जाना चाहिए और इसमें कई दिन लग सकते हैं, यहां तक ​​कि सप्ताह भी। मैं खिलाड़ियों को पैचिंग एक्सईई नहीं भेज सकता क्योंकि यह डिस्ट्रीब्यूटर के डीआरएम नहीं होगा। मैं एक एन्क्रिप्टेड डेटाफ़ाइल के अंदर वास्तविक गेम EXE को बांटने की सोच रहा हूं, इसलिए जो लिपटे हो (बाहरी EXE) बस असली डीईसीई को डिक्रीप्ट और लॉन्च करता है इस तरह से मैं DRM को अक्षम किए बिना ठीक से एक फ़िक्स वितरित कर सकता हूं।

Solutions Collecting From Web of "स्मृति बफर से बनाएँप्रक्रिया करें"

यह वास्तव में बहुत आसान है इसी तरह की तकनीक को एक पेपर में वर्णित किया गया है जो मैंने 3 साल पहले पढ़ा था।

विंडोज आपको CREATE_SUSPENDED ध्वज के साथ CreateProcess फ़ंक्शन को कॉल करने की अनुमति देती है, जो कि एंड्रॉइड रीफ्रेश फ़ंक्शन को बुलाए जाने तक प्रोसेस निलंबित रखने के लिए API को बताता है।

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

पीबीई संरचना के लेआउट से हम देख सकते हैं कि ImageBaseAddress 8 वें बाइट में जमा है, इसलिए [ईबीएक्स +8] हमें निलंबित होने की प्रक्रिया का वास्तविक आधार पता देगा।

अब हमें इन-मेमोरी में EXE की जरूरत है और एपीप्रिएट संरेखण की ज़रूरत है अगर मेमोरी और इन-मेमरी एक्सई के संरेखण अलग-अलग होते हैं।

यदि निलंबित प्रक्रिया का आधार पता और इन-मेमोरी एक्सके मैचों में, और यदि इन-मेमरी एक्स की इमेज साइज़ कम या निलंबित प्रक्रिया के बराबर है, तो 'हम मेमोरी एक्सई को मेमोरी स्पेस में लिखने के लिए केवल लिखेप्रोसेसेस मेमोर्री का उपयोग कर सकते हैं। निलंबित प्रक्रिया

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

अगला, इन-मेमरी एक्सई के बेसएंड्रेस को पीईबी-> इमेजबैस में निलंबित की गई प्रक्रिया में जोड़ें।

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

देखा! हम इसे निष्पादित करने के लिए निलंबित प्रक्रिया पर ResumeThread फ़ंक्शन को कॉल करने के लिए तैयार हैं!

आप गेम को डीएलएल के रूप में संकलित कर सकते हैं और एन्क्रिप्ट की गई डेटा फ़ाइल में डीएलएल डाल सकते हैं। एक DLL को स्मृति के बिना डिस्क पर लिखे बिना लोड किया जा सकता है कृपया इस ट्यूटोरियल को देखें (अंत में नमूना कोड के साथ): एक DLL से मेमोरी लोड हो रहा है

आप क्या करना चाहते हैं, एनटीक्रेटप्रक्रैस की आवश्यकता है, लेकिन यह बिना दस्तावेज है और इसलिए भंगुर है यह पुस्तक जाहिरा तौर पर इसके उपयोग को कवर करती है

शायद आप एक पैच सिस्टम का निर्माण कर सकते हैं? प्रक्षेपण पर उदाहरण, पैकेट DLL के लिए एक ही निर्देशिका में प्रोग्राम चेक, और यदि यह मौजूद है तो लोड करता है।

आपको एक नई प्रक्रिया बनाने की आवश्यकता क्यों है? मैंने सोचा होगा कि आप प्रक्रिया के संदर्भ में चल सकते हैं, जो कि अनपैकिंग / डिक्रिप्शन है

जो कुछ आप चाहते हैं वह "पैकर" नामक कुछ के साथ प्राप्त किया जा सकता है वास्तव में स्मृति से एक एक्सई लॉन्च करना संभव हो सकता है, लेकिन यह पैकर की तुलना में बहुत कठिन है;)

सबसे अच्छे ज्ञात पैकर्स में से एक है UPX (Google)। इसमें डिक्रिप्ट करने के लिए उपकरण हैं, लेकिन कम से कम आपको फौम काम करने के लिए शुरुआती बिंदु देना चाहिए। मैं भी निश्चित रूप से विशिष्ट यूपीएक्स ओपन सोर्स है

बॉक्सेड ऐप एसडीके देखें

यह मेमोरी बफर से एक्सई को लॉन्च करने में सहायता करता है

आशा करता हूँ की ये काम करेगा।