Step 1 create space for new anew IID

Một phần của tài liệu tìm hiểu, phân tích virus (Trang 47 - 48)

Công vi c này liên quan n các b c sau ây :

1. D ch chuy n t t c các IIDs t i m t v trí mà t i ó có không gian.V trí này có th b t kì âu; phía

cu i c a section .idata hi n th i ho c m t section m i hoàn toàn.

2. C p nh t RVA c a Import Directory m i trong Data Directory c a PE Header.

3. N u c n thi t, làm tròn kích th c c a section n i mà b n ã t Import Table m i vì v y m i th u c ánh x vào trong b nh (ví d : VirtualSize of the .idata section rounded up 1000h).

4. Ch y nó và n u nh nó làm vi c thì chuy n t i b c 2. N u nó không ki m tra các injected descriptors c ánh x vào trong b nh và RVA c a Import Directory là chính xác ..

IMPORTANT NOTE: Các IIDs FirstThunk và OriginalFirstThunk ch a các RVAs- RELATIVE

ADDRESSES có ngh a là các b n có th c t và dán Import Directory (IIDs) b t kì âu b n mu n trong PE file (taking into account the destination has to mapped into memory) và thay i RVA (và kích th c n u c n thi t) c a Import Directory trong Data Directory s khi n cho ng d ng ho t ng m t cách hoàn h o.

Quay tr l i ng d ng c a chúng ta trong trình Hexeditor, IID u tiên và null terminator c tô b ng ng bao màu .Nh b n nhìn th y trong hình v d i ây không có không gian tr ng nào sau null IID:

Tuy nhiên có m t s l ng không gian l n t i ph n cu i c a section .idata tr c khi section .rdata b t

u. Chúng ta s copy và paste các IIDs hi n th i c a ra phía trên t i offset 2C500h t i v trí m i này :

convert m t offset m i thành RVA (xem thêm ph n ph l c) :

VA = RawOffset - RawOffsetOfSection + VirtualOffsetOfSection = 2C500 - 2AC00 + 2D000 = 2E900h

V y thay i a ch o c a import table trong Data Directory t 2D000 thành 2E900. Bây gi ch nh s a l i header c a section .idata và thay i VirtualSize b ng v i RawSize vì v y trình loader s ánh x toàn b section vào. Ch y th ng d ng c a chúng ta test.

Một phần của tài liệu tìm hiểu, phân tích virus (Trang 47 - 48)