Tại sao địa chỉ PE ImageBase thay đổi trong bộ nhớ?

Aug 17 2020

Tôi đang đảo ngược tệp thực thi Windows 32-bit x86 độc hại. Xem xét tĩnh các tiêu đề PE trong Ghidra, tôi thấy điều đó ImageBaseđược đặt thành 0x400000như mong đợi. Tuy nhiên, khi tệp nhị phân được tải vào bộ nhớ, RVA ban đầu không khớp với ImageBaseđịnh nghĩa trong tệp. Ví dụ, tôi đã thấy địa chỉ cơ sở trong bộ nhớ được đặt thành 0x4B00000x900000. Hành vi này xảy ra trên một máy ảo sạch và khi gỡ lỗi bằng Immunity và x32dbg cũng như IDA Free.

Sự hiểu biết của tôi là trình tải Windows đọc ImageBasevà sử dụng phần bù đó để bắt đầu ánh xạ các phần vào không gian địa chỉ ảo. Vì mã hệ thống xử lý quá trình tải và hệ thống của tôi sạch sẽ ngay khi thực hiện lần đầu tiên, giả định của tôi là điều bất thường ImageBaselà một triệu chứng của một sắc thái trình tải hơn là giả mạo. Tôi chưa bao giờ gặp trường hợp này và sẽ đánh giá cao bất kỳ thông tin chi tiết nào.

MD5: 1f63d04ee95ea041f2f6b1e818d94a7c

SHA1: 823ad6abb05f2393c44cf4b7f1d00e32ac04d1d1


ImageBaseđược đặt thành 0x400000khi xem tiêu đề PE trong Ghidra:


ImageBasetrong tiêu đề PE được ánh xạ bộ nhớ ( 0x4B0000) không khớp ImageBaseđược đặt trong tệp tĩnh:


Các phần PE được ánh xạ vào bộ nhớ với ImageBaselúc0x4B0000

Trả lời

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

Đây chỉ là một địa chỉ ưa thích. Windows có thể tải tệp nhị phân ở hầu hết mọi địa chỉ và đặt lại nó vào vị trí mới này.

ImageBase: Địa chỉ ưu tiên của byte hình ảnh đầu tiên khi được tải vào bộ nhớ; phải là bội số của 64 K. Giá trị mặc định cho DLL là 0x10000000. Mặc định cho Windows CE EXE là 0x00010000. Mặc định cho Windows NT, Windows 2000, Windows XP, Windows 95, Windows 98 và Windows Me là 0x00400000.

Nguồn: MSDN