दिलचस्प पोस्ट
निर्धारित करें कि क्या कोई सरणी में मान है नेस्टेड फ़ंक्शन के अंदर जावास्क्रिप्ट "यह" पॉइंटर जावा में प्राथमिकताओं, हमेशा प्राथमिकता सहित स्थानीय चर क्यों होना चाहिए? अधिक से अधिक 2 दशमलव स्थानों पर गोल करें (यदि आवश्यक हो तो) विंडो बैच फ़ाइल में सबस्ट्रिंग को कैसे बदलें क्या मैं <url-pattern> अंदर <filter-maping> कुछ ठोस यूआरएल को बाहर कर सकता हूं? स्विफ्ट का इस्तेमाल करते हुए एनएसडीटी तुलना मैं कैसे जांच सकता हूं कि जावा में दो नंबरों को गुणा करना ओवरफ़्लो का कारण होगा? यह चल रहा है, जबकि SetInterval के अंतराल को बदलने जावा एप्लिकेशन में दुर्भावनापूर्ण कोड के खिलाफ सैंडबॉक्स क्या स्वत: पूर्ण = "बंद" सभी आधुनिक ब्राउज़रों के साथ संगत है? मैं जावा में ध्वनि कैसे खेल सकता हूं? निरीक्षण योग्य संकलन जो संग्रह के तत्वों पर भी नज़र रखता है स्प्रिंग एमवीसी (@ रेस्पॉन्सबॉडी) में प्रतिक्रिया सामग्री प्रकार किसने सेट करता है एक अलग बनाएँ तालिका के बिना एक SELECT कथन में एक अस्थायी तालिका बनाएं

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

मैं एक 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)। इसमें डिक्रिप्ट करने के लिए उपकरण हैं, लेकिन कम से कम आपको फौम काम करने के लिए शुरुआती बिंदु देना चाहिए। मैं भी निश्चित रूप से विशिष्ट यूपीएक्स ओपन सोर्स है

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

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

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