Tìm hiểu cấu trúc PE file PE gì? PE định dạng riêng Win32 Hầu hết file thực thi Win32 thuộc dạng PE (Trừ tập tin VxDs file DLL 16 bít) Tại cần hiểu cấu trúc PE? Để thực thi máy tính, nội dung file PE chia thành thành phần có mối liên hệ mật thiết với Nắm rõ cấu trúc PE giúp hiểu chế thực thi chương trình, từ việc tổ chức tới việc load lên nhớ, tài nguyên sử dụng, … Hơn nữa, muốn sửa đổi file, ví dụ thêm vào số đoạn mã, chỉnh sửa số thành phần muốn chương trình thực thi bình thường Do đó, cần phải nắm rõ cấu trúc PE file, mối liên hệ thành phần file để nhanh chóng thay đổi file thoả mãn yêu cầu đề Cấu trúc PE Từ hình vẽ trên, thấy cấu trúc PE gồm nhiều section, tối thiểu cần section: data code Một số section thơng dụng hay gặp chương trình: Executable Code Section, có tên text (Micro$oft) hoc CODE (Borland) Data Sections, có nhng tên nh data, rdata hoc bss (Micro$oft) hay DATA (Borland) Resources Section, có tên rsrc Export Data Section, có tên edata Import Data Section có tên idata Debug Information Section, có tên debug Cấu trúc section nhớ ổ đĩa nhau, nhiên nạp lên nhớ, Windows loader định thứ tự vị trí nạp phần, vị trí phần ổ đĩa nhớ có khác biệt Tiếp theo chi tiết phần cụ thể PE: DOS MZ header, DOS stub, PE header, Section table 1 DOS MZ header Tất file PE bắt đầu DOS Header, vùng chiếm 64 bytes files Vùng dùng trường hợp chương trình chạy DOS, hệ điều hành DOS nhận biết file thực thi hợp lệ thực thi nội dung phần DOS stub DOS Header cấu trúc định nghĩa file windows.inc winnt.h Cấu trúc gồm 19 thành phần Trong cần quan tâm tới hai trường: • e_magic: Chữ ký PE file, giá trị: 4Dh, 5Ah (Ký tự “MZ”, tên người sáng lập MS-DOS: Mark Zbikowsky) Giá trị đánh dấu DOS Header hợp lệ phép thực thi tiếp • e_lfanew: DWORD nằm cuối DOS Header, trường chứa offset PE Header so với vị trí đầu file 2 PE Header PE Header thực chất cấu trúc IMAGE_NT_HEADERS bao gồm thông tin cần thiết cho trình loader load file lên nhớ Cấu trúc gồm phần định nghĩa windows.inc • • • Signature: DWORD bắt đầu PE Header chứa chữ ký PE: 50h, 45h, 00h, 00h FileHeader: bao gồm 20 bytes PE Header, phần chứa thơng tin sơ đồ bố trí vật lý đặc tính file Trong trường cần ý tới trường NumberOfSections , trường chứa số section file Nếu muốn thêm/xoá section PE file, ta cần thay đổi tương ứng trường OptionalHeader: bao gồm 224 bytes sau FileHeader Cấu trúc định nghĩa windows.inc, phần chứa thông tin sơ đồ logic PE file Dưới danh sách trường cấu trúc này, đồng thời đưa số dẫn thông tin số trường cần quan tâm muốn chỉnh sửa file • o o o AddressOfEntryPoint (RVA): địa ảo tương đối câu lệnh thực thi Nếu muốn chương trình địa khác (để thực thi câu lệnh với mục đích khác) cần thay đổi địa địa tương đối câu lệnh muốn thực thi ImageBase: Địa ưu tiên nạp cho PE file SectionAlignment: Phần liên kết section nhớ, tức section luôn bắt đầu bội số sectionAlignment Ví dụ: sectionAlignment 1000h, section đầu o o o o tiên bắt đầu vị trí 401000h kích thước 10h, section bắt đầu địa 402000h FileAlignment: Phần liên kết section file Tương tự SectionAlignment áp dụng với file SizeOfImage: Toàn kích thước PE file nhớ, tổng tất headers sections liên kết tới SectionAlignment SizeOfHeaders: Kích thước tất headers section table, kích thước file trừ tổng kích thước section file DataDirectory: mảng gồm 16 cấu trúc IMAGE_DATA_DIRECTORY, cấu trúc liên quan tới cấu trúc liệu PE file Hình 16 cấu trúc IMAGE_DATA_DIRECTORY xem thông qua LordPE 3 Section Table Section Table thành phần ngày sau PE Header, bao gồm mảng cấu trúc IMAGE_SECTION_HEADER, phần tử chứa thông tin section PE file Cấu trúc định nghĩa file windows.inc hình đây: Thơng tin số trường quan trọng: • VirtualSize: Kích thước thật liệu section tính theo byte, giá trị nhỏ kích thước ổ đĩa (SizeOfRawData) • VirtualAddress: RVA section, giá trị để ánh xạ section load lên nhớ • SizeOfRawData: Kích thước section data ổ đĩa • PointerToRawData: offset từ vị trí đầu file tới section data • Characteristics: đặc tính section: thực thi, liệu khởi tạo … ... section table, kích thước file trừ tổng kích thước section file DataDirectory: mảng gồm 16 cấu trúc IMAGE_DATA_DIRECTORY, cấu trúc liên quan tới cấu trúc liệu PE file Hình 16 cấu trúc IMAGE_DATA_DIRECTORY... trường chứa offset PE Header so với vị trí đầu file 2 PE Header PE Header thực chất cấu trúc IMAGE_NT_HEADERS bao gồm thông tin cần thiết cho trình loader load file lên nhớ Cấu trúc gồm phần định... thông qua LordPE 3 Section Table Section Table thành phần ngày sau PE Header, bao gồm mảng cấu trúc IMAGE_SECTION_HEADER, phần tử chứa thông tin section PE file Cấu trúc định nghĩa file windows.inc