RelocAlloc: सामान्य allocation कॉल्स को बदलने के लिए .reloc सेक्शन का उपयोग करना
कोड की व्याख्या:
- सबसे पहले, हम अपनी प्रक्रिया में मैप किए गए सभी dlls के पते का पता लगाते हैं।
- फिर हम structs का एक array बनाते हैं और उसे कुछ डेटा से भरते हैं, यही Initialize() फ़ंक्शन है।
- अब, हमारे पास एक पूरा array है, अगला कदम सही पते की खोज करना है।
- GetSuitableAddress(SIZE_T ShellcodeSize) को कॉल करना यह काम करेगा; यह हमें सही code cave ढूंढकर देता है (मेमोरी में खाली जगह, जो shellcode के आकार के अनुकूल हो)
- अगर यह मिल जाता है तो इसे लौटा दिया जाएगा।
- इसका उपयोग करने के लिए हमें मेमोरी प्रोटेक्शन को writable/executable में समायोजित करना होगा ... (poc सीधे rwx है)
डेमो:
img1
img2
नोट: यह केवल छोटे shellcodes के साथ काम करता है, क्योंकि यह मैप किए गए dlls पर निर्भर करता है, .reloc सेक्शन जितना बड़ा होगा, वैध पता मिलने की संभावना उतनी ही अधिक होगी। इसके अलावा, यह केवल x64 मशीन पर परीक्षण किया गया है, लेकिन इसे x86 के लिए भी काम करना चाहिए (मुझे लगता है :p)
# और जानकारी के लिए बने रहें
120064592-a5c83480-c075-11eb-89c1-78732ecaf8d3