เหตุใดที่อยู่ PE ImageBase จึงเปลี่ยนไปในหน่วยความจำ

Aug 17 2020

ฉันกำลังย้อนกลับไฟล์ปฏิบัติการ Windows x86 32 บิตที่เป็นอันตราย ตรวจสอบส่วนหัว PE ใน Ghidra แบบคงที่ฉันเห็นว่าImageBaseตั้งค่า0x400000เป็นตามที่คาดไว้ อย่างไรก็ตามเมื่อไบนารีถูกโหลดลงในหน่วยความจำ RVA เริ่มต้นจะไม่ตรงกับที่ImageBaseกำหนดไว้ในไฟล์ ตัวอย่างเช่นผมได้เห็นในหน่วยความจำชุดที่อยู่ฐานและ0x4B0000 0x900000ลักษณะการทำงานนี้เกิดขึ้นบน VM ที่สะอาดและเมื่อทำการดีบักด้วย Immunity และ x32dbg รวมทั้ง IDA Free

ความเข้าใจของฉันคือตัวโหลดของ Windows อ่านImageBaseและใช้ออฟเซ็ตนั้นเพื่อเริ่มการแมปส่วนต่างๆลงในพื้นที่ที่อยู่เสมือน เนื่องจากรหัสระบบจัดการกับการโหลดและระบบของฉันสะอาดเมื่อดำเนินการครั้งแรกข้อสันนิษฐานของฉันคือสิ่งที่ผิดปกติImageBaseเป็นอาการของความแตกต่างกันเล็กน้อยของตัวโหลดมากกว่าการปลอมแปลง ฉันไม่เคยพบสถานการณ์นี้และขอขอบคุณข้อมูลเชิงลึกใด ๆ

MD5: 1f63d04ee95ea041f2f6b1e818d94a7c

SHA1: 823ad6abb05f2393c44cf4b7f1d00e32ac04d1d1


ImageBaseตั้งค่าเป็น0x400000เมื่อดูส่วนหัว PE ใน Ghidra:


ImageBaseในส่วนหัว PE ที่แมปหน่วยความจำ ( 0x4B0000) ไม่ตรงกับImageBaseชุดในไฟล์คงที่:


ส่วน PE ที่แมปลงในหน่วยความจำด้วยImageBaseat0x4B0000

คำตอบ

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

นี่เป็นเพียงที่อยู่ที่ต้องการ Windows สามารถโหลดไบนารีได้เกือบทุกที่อยู่และตั้งฐานใหม่ไปยังตำแหน่งใหม่นี้

ImageBase: แอดเดรสที่ต้องการของไบต์แรกของรูปภาพเมื่อโหลดลงในหน่วยความจำ ต้องเป็นผลคูณ 64 K ค่าเริ่มต้นสำหรับ DLL คือ 0x10000000 ค่าเริ่มต้นสำหรับ Windows CE EXE คือ 0x00010000 ค่าเริ่มต้นสำหรับ Windows NT, Windows 2000, Windows XP, Windows 95, Windows 98 และ Windows Me คือ 0x00400000

ที่มา: MSDN