Thêm section mới vào PE file: 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. Có rất nhiều PE editors có thể giúp bạn làm việc này. Nhưng tài liệu này để tìm hiểu kỹ hơn về PE File Format đặc biệt là phần section, 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.
Trang 1[Adding new section to PE File]
Trang 21 Gi i thi u
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:
thao tác c a b n có đúng hay không (PEditor, Procdump, …)
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:
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)
Trang 3Sau đó, đ 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
vào là 256d (vì b n mu n thêm 100h bytes = 256d bytes)
Nh v y, là b n đã có m t section m i Nó b t đ u t i offset th A00 và k t thúc t i offset AFF Its length is 110h bytes
Trang 43 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:
cách edit l i con s n m t i offset B6 trong PE Header!)
T ng Image Size
B n có th th y, tr 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 c giá tr 2 byte này (00 03) chính là s section ban đ u c a file Hãy thay nó b ng 00 04
Mu n v y, trong WinHex b n nh n phím Insert đ b t ch đ ghi đè, và s a 03 thành 04:
00001000 và Size Of Image có giá tr là 00004000 B i vì Section Alignment là 1000, và
Trang 5Thay đ 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 F8
Trang 6Tuy nhiên, khi s d ng thì PE Loader không s d ng các tr ng trên Ch s d ng 28h bytes
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à
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 Virtual Offset Raw Size Raw Offset Characteristics
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 c a section .data
Vritual Address c a section m i (.NEW) = Virtual Address c a data + Vritual Size c a data
giá tr này lên g n gi ng nh 1000 t c là 4000
-> 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
Trang 7Chú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
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 bài vi t k ti p, chúng ta s thêm code