PE ImageBase एड्रेस मेमोरी में क्यों बदलता है?

Aug 17 2020

मैं एक दुर्भावनापूर्ण 32-बिट x 86 विंडोज निष्पादन योग्य उलट रहा हूं। घिड्रा में सांख्यिकीय रूप से पीई हेडर की समीक्षा करते हुए, मैं देख रहा हूं कि ImageBaseयह 0x400000अपेक्षित है। हालांकि, जब बाइनरी को मेमोरी में लोड किया जाता है, तो प्रारंभिक आरवीए ImageBaseफ़ाइल में परिभाषित से मेल नहीं खाता है । उदाहरण के लिए, मैंने इन-मेमोरी बेस एड्रेस को सेट किया है 0x4B0000और देखा है 0x900000। यह व्यवहार एक साफ VM पर होता है, और जब Immunity और x32dbg के साथ-साथ IDA फ्री के साथ डिबगिंग होता है।

मेरी समझ यह है कि विंडोज लोडर पढ़ता है ImageBaseऔर उस पते का उपयोग करता है जो वर्चुअल एड्रेस स्पेस में मैपिंग सेक्शन शुरू करने के लिए ऑफसेट करता है। क्योंकि सिस्टम कोड लोडिंग को संभालता है, और मेरा सिस्टम पहले निष्पादन पर साफ है, मेरी धारणा यह है कि असामान्य ImageBaseछेड़छाड़ के बजाय लोडर बारीकियों का एक लक्षण है। मैंने कभी इस परिदृश्य का सामना नहीं किया है और किसी भी अंतर्दृष्टि की सराहना करेंगे।

MD5: 1f63d04ee95ea041f2f6b1e818d94a7c

SHA1: 823ad6abb05f2393c44cf4b7f1d00e32ac04d1d1


ImageBase0x400000Ghidra में पीई हेडर देखने पर सेट करें :


ImageBaseमेमोरी-मैप्ड पीई हेडर में ( 0x4B0000) ImageBaseस्थिर फाइल में सेट से मेल नहीं खाता :


पीई वर्गों के साथ स्मृति में मैप किया ImageBaseपर0x4B0000

जवाब

7 PawełŁukasik Aug 17 2020 at 12:44

यह सिर्फ एक पसंदीदा पता है। विंडोज लगभग किसी भी पते पर बाइनरी को लोड कर सकता है और इसे इस नए स्थान पर रीबेस कर सकता है।

ImageBase: स्मृति में लोड होने पर छवि के पहले बाइट का पसंदीदा पता; 64 K का गुणक होना चाहिए। DLL के लिए डिफ़ॉल्ट 0x10000000 है। Windows CE EXEs के लिए डिफ़ॉल्ट 0x00010000 है। Windows NT, Windows 2000, Windows XP, Windows 95, Windows 98 और Windows Me के लिए डिफ़ॉल्ट 0x00400000 है।

स्रोत: MSDN