- Đầu tiên để có thể thêm được một section mới ta phải hiểu được cấu trúc file PE, nếu chưa hiểu, bạn nên tìm hiểu về cấu trúc file PE trước.
- Ta sẽ thực hiện các bước sau:
Bước 1: Thay đổi giá trị trong phần PE header:
+ NumberOfSection: Số lượng section trong file PE cần thêm(Tăng giá trị của nó lên)
+ SizeOfImage: tổng kích thước cảu file PE. giá trị này cần thay đổi vì khi thêm mới section kích thước của file sẽ tăng lên.
Bước 2: Lấy thông tin của section cuối cùng của file :
- Virtual Size: kích thước trên bộ nhớ.
-Virtual Address: địa chỉ trên bộ nhớ.
-Size to Raw data: kích thước của section trên file.
-Pointer to Raw data: offset trỏ đến phần dữ liệu của section đó.
+ Ví dụ: trong file demo ta có thông tin của section .rsrc:
Virtual Size: 8e00
Virtual Address: 34000
Size to Raw data: 2f400
Pointer to Raw data: 8e00
Section Aligenment: 1000
File Aligenment : 200
Bước 3: Điền thông tin vào section table
của section mới được tạo, gồm những thông tin:
- Virtual Size : kích thước trên bộ nhớ của section mới(tùy chọn)
- Virtual Address: VS(section cuối) + VA(section
cuối) và làm tròn với giá trị của section aligenment
Ví dụ: section cuối :Virtual Size: 8e00 ; Virtual Address: 34000 ;section
aligenment : 1000
tổng VS + VA =
3ce00 và làm tròn lên sẽ thành = > 3d000
Như vậy virtual
address của section mới sẽ là 3d000.
- Size to Raw data: kích thước của section mới trên file(tùy chọn)
- Pointer to Raw data:
- ta có thể tìm đến cuối file và chọn giá trị offset cuối cùng.
- hoặc sẽ lấy : sizeRaw(section cuối) + pointerRaw(section cuối) và làm tròn với giá trị của File Aligenment
Bước 4 : Sử dụng chương trình hex editer để thêm các byte opcode cho section mới:
- Còn đây là chương trình tôi code bằng python để thêm section mới:
https://www.dropbox.com/s/m05b5pe443g7a75/add_section.py?dl=0
Không có nhận xét nào:
Đăng nhận xét