Adding new section to a PE file

7 521 2
Adding new section to a PE file

Đang tải... (xem toàn văn)

Thông tin tài liệu

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.

2009  [Adding new section to PE File] Published for educational Purposes only Page | Gi i thi u Trong m t s tr ng h p, thêm m t section m i m t nh ng ph ng pháp ph c v cho vi c thêm code (code injection) vào 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 Nh ng vi t này, đ tìm hi u k h n v PE File Format đ c bi t ph n Section, 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, s d ng Hex Workshop 32 M t công c cho 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ó hay không (PEditor, Procdump, …) Ki n th c c n b n v PE Header Thêm vùng bytes 00 u tiên, nên “ngó” s qua target Load target vào Peditor, b n th y target có sections: M file v i WinHex Kích th c c a section m i s 100h bytes ph n cu i c a file, b n s th y có r t nhi u bytes 00 Vì th , ch n vùng byte tr ng gi a Offset 840 940, sau đó, ch n Edit->Copy Block -> Normally (hay nh n CTRL+C) For more updated info, please check http://nhatphuongle.spaces.live.com Page | Sau đó, đ t tr t i v trí cu i c a file, ch n Edit->Paste Zero Bytes WinHex s hi n MessageBox xác nh n có mu n thêm vùng bytes 00 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 B n gõ vào 256d (vì b n mu n thêm 100h bytes = 256d bytes) B nđ c k t qu nh sau: Nh v y, b n có m t section m i Nó b t đ u t i offset th Its length is 110h bytes A00 k t thúc t i offset AFF For more updated info, please check http://nhatphuongle.spaces.live.com Page | Ch nh s a thông tin PE Header Công vi c k ti p b n ph i làm hi u ch nh l i m t s thông tin PE Header, b n ph i làm vi c sau:  Tìm đ n tr ng Number Of Sections t ng lên (b n có th xác đ nh tr cách edit l i s n m t i offset B6 PE Header!)  T ng Image Size Thêm section m i section table  B n có th th y, tr ng b ng ng PE signature n m t i offset B0 T i offset B6 b n s th y bytes 03 00 (đây m t giá tr ki u DWORD) o ng byte (00 03) s section ban đ u c a file Hãy thay b ng 00 04 c giá tr Mu n v y, WinHex b n nh n phím Insert đ b t ch đ ghi đè, s a 03 thành 04: K ti p, b n ph i t ng Image Size ây u mà b n th ng hay quên Hãy quan sát tr ng Section Alignment Size of Image Peditor B n th y Section Alignment có giá tr 00001000 Size Of Image có giá tr 00004000 B i Section Alignment 1000, section m i c a b n nh nh t c ng 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 DWORD) For more updated info, please check http://nhatphuongle.spaces.live.com Page | 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 the PE Header (B0 + F8 = 1A8) M i section có kích th c 40 bytes nh hình sau: For more updated info, please check http://nhatphuongle.spaces.live.com F8 Page | Tuy nhiên, s d ng PE Loader không s cho tr ng quan tr ng nh sau: d ng tr ng 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 section g m có 40 bytes nh ng tr ng thái ch a đ y đ d ng nh section r ng, th ta s quy t đ nh ch n làm n i thêm section m i vào Ph n ti p theo quy t đ nh xem thành ph n Virtual Offset/Virtual Size.Raw Offset Raw Size c n có B n th y section data có thông tin: Section Virtual Size data 00000034 Virtual Offset Raw Size Raw Offset Characteristics 00003000 00000200 00000800 C0000040 RVA Raw Offset c a section m i c a ph i phù h p v i 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 1000h nên ph i làm tròn giá tr lên g n gi ng nh 1000 t c 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 Virtual Address c a section tr c section data = 3000 -> 00 40 00 00 -> 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 http://nhatphuongle.spaces.live.com Page | Chúng ta s add section m i vào sau section cu i (.data) c a section table t c t i đ a ch B0h + F8h + 3*28h = 220h N u b n làm đúng, b n đ c nh sau: Save file đ l u l i v i tên sample_new.exe ch nh s a load file m i vào PEditor đ check xem b n modify cho section m i có v i thông s hay không! Nh n Section, đ ki m tra xu t hi n section m i tên NEW Section Table hay ch a! OK không khó ph i không b n! H n g p l i vào section m i vi t k ti p, s thêm code NhatPhuongLe www.reaonline.net Reverse Engineering Association 07/05/2009 For more updated info, please check http://nhatphuongle.spaces.live.com ... Offset Raw Size Raw Offset Characteristics 00003000 00000200 00000800 C0000040 RVA Raw Offset c a section m i c a ph i phù h p v i thông s data c a section Vritual Address c a section m i ( .NEW) ... tin v section table c a PE File đ cho b n ki m tra thao tác c a b n có hay không (PEditor, Procdump, …) Ki n th c c n b n v PE Header Thêm vùng bytes 00 u tiên, nên “ngó” s qua target Load target... Virtual Address c a data + Vritual Size c a data = 3000+34 = 4000 Vì Section Alignment c a 1000h nên ph i làm tròn giá tr lên g n gi ng nh 1000 t c 4000 +0 +08 Array[8] of byte Name DWORD PhysicalAddress/Virtual

Ngày đăng: 25/01/2016, 13:59

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan