Tải bản đầy đủ (.pdf) (7 trang)

Adding new section to a PE file

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.01 MB, 7 trang )

2009 

[Adding new section to PE File]

Published for educational Purposes only


Page | 2

1. Gi i thi u
Trong m t s tr ng h p, thêm m t section m i là m t trong nh ng ph ng pháp ph c v cho
vi c thêm code (code injection) vào trong file th c thi. Tôi bi t r ng có r t nhi u PE editors có
th giúp b n làm vi c này. Nh ng trong bài vi t này, đ tìm hi u k h n v PE File Format đ c
bi t là ph n Section, tôi quy t đ nh s trình bày cách thêm m t section m i vào PE File m t
cách th công.
Nh ng công c c n thi t:





Hex editor, đây tôi s d ng Hex Workshop 32.
M t công c cho chúng ta bi t thông tin v section table c a PE File đ cho b n ki m tra
thao tác c a b n có đúng hay không (PEditor, Procdump, …)
Ki n th c c n b n v PE Header

2. Thêm vùng bytes 00
u tiên, chúng ta nên “ngó” s qua target. Load target vào trong Peditor, b n th y target có 3
sections:

M file v i WinHex. Kích th c c a section m i s là 100h bytes.


ph n cu i c a file, b n s
th y có r t nhi u bytes 00. Vì th , hãy ch n vùng byte tr ng gi a Offset 840 và 940, sau đó,
ch n Edit->Copy Block -> Normally (hay nh n CTRL+C).

For more updated info, please check



Page | 3
Sau đó, đ t con tr t i v trí cu i c a file, ch n Edit->Paste Zero Bytes. WinHex s hi n ra
MessageBox xác nh n có mu n thêm vùng bytes 00 này vào cu i file hay không? Nh n Yes

Ti p theo đó, WinHex s h i b n kích th c c a vùng byte 00 mu n thêm là bao nhiêu. B n gõ
vào là 256d (vì b n mu n thêm 100h bytes = 256d bytes)

B nđ

c k t qu nh

sau:

Nh v y, là b n đã có m t section m i. Nó b t đ u t i offset th
Its length is 110h bytes.

A00 và k t thúc t i offset AFF.

For more updated info, please check




Page | 4

3. Ch nh s a thông tin trong PE Header
Công vi c k ti p b n ph i làm là hi u ch nh l i m t s thông tin trong PE Header, b n ph i làm
3 vi c sau:


Tìm đ n tr ng Number Of Sections và t ng lên 1 (b n có th xác đ nh tr
cách edit l i con s n m t i offset B6 trong PE Header!).



T ng Image Size
Thêm section m i section table



B n có th th y, tr

ng này b ng

ng PE signature n m t i offset B0.

T i offset B6 b n s th y 2 bytes là 03 00 (đây là m t giá tr ki u DWORD).
o ng
byte này (00 03) chính là s section ban đ u c a file. Hãy thay nó b ng 00 04.

c giá tr 2

Mu n v y, trong WinHex b n nh n phím Insert đ b t ch đ ghi đè, và s a 03 thành 04:


K ti p, b n ph i t ng Image Size. ây là đi u mà b n th ng hay quên. Hãy quan sát 2 tr ng
Section Alignment và Size of Image trong Peditor. B n th y Section Alignment có giá tr là
00001000 và Size Of Image có giá tr là 00004000. B i vì Section Alignment là 1000, và
section m i c a b n nh nh t c ng là 0x1000h (4096 bytes).
Vì th b n ph i công thêm giá tr 1000h vào Size Of Image (4000 + 1000 = 5000). Size Of
Image n m t i offset th 100h, có kích th c 1 DWORD)

For more updated info, please check



Page | 5

Thay đ i 00 00 40 00 thành 00 00 50 00 nh

sau:

Bây gi , b n ph i add section m i vào section table. Section table b t đ u t i offset th
trong the PE Header (B0 + F8 = 1A8). M i section có kích th c là 40 bytes nh hình sau:

For more updated info, please check


F8


Page | 6

Tuy nhiên, khi s d ng thì PE Loader không s

cho các tr ng quan tr ng nh sau:

d ng các tr

ng

trên. Ch s

+0
+08

Array[8] of byte Name
DWORD
PhysicalAddress/Virtual Size

+0C

DWORD

d ng 28h bytes

VirtualAddress

SizeOfRawData
+10 (16) DWORD
PointerToRawData
+14 (20) DWORD
+18 (24) Dword
PointerToRelocations
+1C (28) DWORD

PointerToLineNumbers
+20 (32) WORD
NumberOfRelocations
NumberOfLineNumbers
+22 (34) WORD
+24 (36) DWORD
Characteristics
Quan sát th y sau section .data là 1 section g m có 40 bytes nh ng tr ng thái ch a đ y đ và
d ng nh đó là 1 section r ng, vì th ta s quy t đ nh ch n đó làm n i thêm section m i vào.

Ph n ti p theo là quy t đ nh xem các thành ph n Virtual Offset/Virtual Size.Raw Offset và Raw
Size nào c n có. B n th y section .data có các thông tin:
Section Virtual Size
data

00000034

Virtual Offset

Raw Size Raw Offset Characteristics

00003000

00000200

00000800

C0000040

RVA và Raw Offset c a section m i c a chúng ta ph i phù h p v i các thông s

.data

c a section

Vritual Address c a section m i (.NEW) = Virtual Address c a .data + Vritual Size c a .data
= 3000+34 = 4000. Vì Section Alignment c a chúng ta là 1000h nên chúng ta ph i làm tròn
giá tr này lên g n gi ng nh 1000 t c là 4000.
+0
+08

Array[8] of byte Name
DWORD
PhysicalAddress/Virtual Size

+0C

DWORD

VirtualAddress

+10 (16) DWORD
+14 (20) DWORD

SizeOfRawData
PointerToRawData

+18
+1C
+20
+22

+24

PointerToRelocations
PointerToLineNumbers
NumberOfRelocations
NumberOfLineNumbers
Characteristics

(24)
(28)
(32)
(34)
(36)

dword
DWORD
WORD
WORD
DWORD

-> lets call our section .NEW
-> Virtual Size is 100h ->
00010000
-> 4000 b i vì Virtual Address c a
section tr c section .data = 3000
-> 00 40 00 00
-> là 100h -> 00010000
-> Add section m i t i A00
-> 000A0000
-> 00000000

-> 00000000
-> 00
-> 00
-> C0000040 (like .data section)
-> 400000C0

For more updated info, please check



Page | 7
Chúng ta s add section m i này vào sau section cu i cùng (.data) c a section table t c t i đ a
ch B0h + F8h + 3*28h = 220h. N u b n làm đúng, khi đó b n đ c nh sau:

Save file đ l u l i v i tên là sample_new.exe các ch nh s a và load file m i vào PEditor đ
check xem b n modify cho section m i có đúng v i các thông s hay không!

Nh n Section, đ ki m tra xu t hi n section m i tên là .NEW trong Section Table hay ch a!

OK. không quá khó ph i không các b n! H n g p l i
vào section m i.

bài vi t k

ti p, chúng ta s

thêm code

NhatPhuongLe
www.reaonline.net

Reverse Engineering Association

07/05/2009
For more updated info, please check




Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×