
Rtl* फ़ंक्शंस का उपयोग करके अनपेक्षित तरीके से वैकल्पिक रीड और राइट प्रिमिटिव।
स्क्रिप्ट्स वाला एक रिपॉज़िटरी जो Rtl* फ़ंक्शंस का उपयोग करके वैकल्पिक Read और Write प्रिमिटिव्स को अनपेक्षित तरीके से प्रदर्शित करता है।
RtlFillMemory तीन आर्गुमेंट लेता है: गंतव्य मेमोरी के लिए एक पॉइंटर, लिखने के लिए बाइट्स की संख्या, और एक एकल बाइट मान। यह निर्दिष्ट मेमोरी ब्लॉक में केवल एक बाइट लिखता है।
RtlInitializeBitMapEx और RtlFillMemory के संयोजन का उपयोग करके राइटिंग प्रिमिटिव।
सबसे पहले, यह स्ट्रिंग पर 16-बाइट चंक्स में लूप करता है, प्रत्येक ब्लॉक को दो 8-बाइट वैल्यूज़ में विभाजित करता है। पहला 8-बाइट ब्लॉक RtlInitializeBitMapEx के पहले आर्गुमेंट में संग्रहीत होता है और दूसरा 8-बाइट ब्लॉक दूसरे आर्गुमेंट में।
फिर, यदि एक अतिरिक्त 8-बाइट ब्लॉक बचता है, तो इसे NULL दूसरे पैरामीटर के साथ RtlInitializeBitMapEx का उपयोग करके लिखता है।
अंत में, यदि 8 बाइट्स से कम बचते हैं, तो यह उन्हें RtlFillMemory का उपयोग करके एक-एक बाइट करके लिखता है जब तक कि पूरी स्ट्रिंग गंतव्य बफर में कॉपी नहीं हो जाती।
RtlQueryDepthSList का उपयोग करके रीडिंग प्रिमिटिव। ROP गैजेट शिकार, बाइट तुलना, हुक डिटेक्शन आदि के लिए उपयोगी। यहाँ मैं ROP गैजेट के साथ एक सरल प्रोसेस इंजेक्शन प्रदर्शित करता हूँ। RtlQueryDepthSList एक एकल आर्गुमेंट स्वीकार करता है—पढ़ने के लिए मेमोरी एड्रेस, लेकिन यह केवल 2 बाइट्स पढ़ता है और एक 4-बाइट वैल्यू लौटाता है।