दिलचस्प पोस्ट
जावा में, मैं एक बाइट सरणी को हेक्स अंकों की स्ट्रिंग में कैसे बदलूं, जबकि अग्रणी शून्य रखते हुए? स्वत: पूर्ण होने पर जावास्क्रिप्ट ऑनचेन ईवेंट क्यों नहीं आग लग रहा है? एक JTextField को लंबवत घूर्णन करना सी ++ प्रीप्रोसेसर __VA_ARGS__ तर्कों की संख्या निर्माता दिनांक (…) नापसंद है इसका क्या मतलब है? (जावा) स्ट्रिंग में अक्षरों को कैसे सॉर्ट करना है? गतिशील कुंजी के साथ ऑब्जेक्ट बनाना मेरे ऐप में डायरेक्ट "iTunes में दर" लिंक है? कैसपर जे एस पास डेटा वापस PHP करने के लिए क्या गोटो में PHP बुराई है? एक्सेस संपत्ति कैटलॉग pathForResource WCF सेवाहोस्ट पहुंच अधिकार ब्राउज़र को यह बताएं कि इनपुट मूल्यों को कैश करने / संरक्षित करने के लिए नहीं मैं उल्का क्षुधा के बीच मोंगोडीबी संग्रह कैसे साझा कर सकता हूं? Numpy arrays और matrices के बीच अंतर क्या हैं? मुझे किसका उपयोग करना चाहिए?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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