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:
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
@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 ImageDosHeader và ImageNtHeaders 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.