Trao đổi với tôi

http://www.buidao.com

12/14/16

[PE File] Overlays-Extra Data

Overlays-Extra Data
Tranz by: Benina (REA) 2007
Seek n Destroy _ Hints & Tips _ Overlays / Extra Data
Posted by: Teddy Rogers Jan 5 2007, 10:21 AM
Một overlay (aka extra-data) là một data đơn giản đựoc gắn vào physical image of một Portable Executable. Lấy một file PE, gắn một món stuff vào cuối bên trong header điều chỉnh, và nó có một overlay. Vùng data này ko được định nghĩa như một phần của image bởi PE header và do vãy nó ko phải là một phần của  virtual image of loaded PE.

DOS MZ header và stub ko được sử dụng nếu PE thực thi trong Windows, với exception of vùng e_lfanew field mà nó được sử dụng định vị  PE header.

Một overlay ko phải là một phần của virtual image, vì vậy nó ko có address. Đễ tham chiếu đến nó bạn phải read nó từ physical image of file thực thi executable. Vì vậy để thực thi code bên trong một overlay bạn phải cấp phát động memory cho nó, đọc nó từ disk, rồi tạo một call đến offset thích hợp. Offset sẽ là tĩnh static, nhưng address sẽ thay đổi dựa trên base address of memory block chứa overlay, tương tự như  RVAs và VAs.

Đối với PE overlays, ko có tài liệu liên quan hay bất cứ gì khi  'unofficial' data (dữ liệu ko liên quan) của nó of một lọai độc quyền (proprietary nature) đính kèm theo file. Khi nó chỉ là extra data, ko có định dạng hay bất cứ gì được công bố.

Một vài năm trước phần lớn các ứng dụng mà nó sử dụng overlays để tham chiếu đến chúng bởi một static physical offset trong file. Điều này gây ra vấn đề với executable packers khi static offset sẽ thay đổi. Cách thích hợp để tìm ra overlay, và bây giờ phần lớn các ứng dụng làm gì, là dùng sum of last section's physical offset và  last section's physical size. Chúng được tìm thấy trong object/section table.

Chú ý rằng một khi bạn  include extra-data/overlay trong PE section thực tế nó ko dài hơn một overlay bởi định nghĩa, nh7ng đó là nit-picking ;p

Nếu bạn cần một toll để gắn extra data tại cuối of file, bạn có thể dùng bất kỳ Hex editor nào hay mỗi lệnh 'copy' command!

Chỉ cài đặt file được đặt tên là 'CopyOverlay.bat' với nội dụng như sau:
CODE
[FILE START]

@echo off
Set SourceFile=Main.exe
Set Ovl=Extended.ovl
Set Target=Main_Extended.exe
copy /B %SourceFile% + %Ovl% %Target% /B

[FILE END]
where:
SourceFile - your main executable
Ovl - overlay data
Target - main file with appended overlay



Như thế nào để code một toll tự động tìm và extract overlay? Nếu bạn  nghiên cứu ImageDosHeaderImageNtHeaders structures sẽ có tất cả thông tin bạn cần. Overlay chỉ là data sau
Raw Offset + Raw Size of last section trong exe. Vì vậy, open  exe file, tìm last section, add Raw Offset + Raw Size với file pointer và nếu  filesize lớn hơn, thì sẽ có một  overlay. Nếu  size = filesize, thì ko có.

Vậy để save overlay bạn  get offset như chi tiết ở trên và write như một  file. Dễ dàng khi bạn sử dụng làm việc với các cáu trúc windows structures.