Thứ Sáu, 11 tháng 12, 2015

Add new Section to PE file

Bài viết này tôi sẽ nói về cách để thêm một section mới vào trong PE file, và ở đây tôi có việt một chương trình bằng python để dễ dàng thực hiện hơn.
- Đầ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.
(size_new = sizeOfImage + sizeSection_new + FileAlignment).


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 đó.
+ dụ: trong file demo ta thông tin của section .rsrc:
Virtual Size8e00
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) làm tròn với giá trị của section aligenment
dụ: section cuối :Virtual Size8e00 ; Virtual Address: 34000 ;section aligenment : 1000
tổng VS + VA = 3ce00 làm tròn lên sẽ thành = > 3d000
Như vậy virtual address của section mới sẽ 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 thể tìm đến cuối file chọn giá trị offset cuối cùng.
    - hoặc sẽ lấy : sizeRaw(section cuối) + pointerRaw(section cuối) 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