Kỹ thuật thực thi file dll cùng file exe bất kỳ

Thảo luận trong 'Virus/Malware' bắt đầu bởi Malware, 13/07/15, 08:07 AM.

  1. Malware

    Malware Wh------

    Tham gia: 08/01/15, 11:01 AM
    Bài viết: 56
    Đã được thích: 38
    Điểm thành tích:
    48
    Chào các bạn hôm nay mình sẽ giới thiệu với các bạn một kỹ thuật thực thi một file DLL cùng với file exe bất kỳ bằng cách sửa bảng Import của chương trình exe đó.
    Với kỹ thuật này malware sẽ không bị phát hiện trong quá trình chúng ta rà soát các thành phần Startup của hệ điều hành.

    I. Các bước thực hiện

    Kỹ thuật thực hiện sẽ gồm 2 công việc chính cần làm:
    o Thêm 1 section vào cuối file (hoặc mở rộng section cuối).
    o Tạo bảng IAT mới chứa các dll cũ và xx.dll đặt ở section cuối này và sửa lại địa chỉ bảng IAT trong Peheader.

    II. Demo

    Mình sẽ demo kỹ thuật này bằng tay. Mình sẽ thực thi file xx.dll bằng cách sửa bẳng import của file calc.exe trên windows XP (trong demo mình đặt tên file là calc_xp.exe). Khi xx.dll được thực thi sẽ mở chương trình notepad.exe.

    Cụ thể các bước thực hiện như sau:

    1. Thêm section mới vào cuối file.
    a. Dùng hexWorkshop Fill 1200 byte 00 vào cuối file


    [​IMG]

    Table 1: File calc_xp.exe sach​


    b. Thêm section vào cuối file (khá đơn giản khi sử dụng CFF)
    § Phải chuột chọn new Section.
    § Đối tên Section. Cái này khá nhạy cảm khi lập trình nhưng CFF đã giúp anh em.


    [​IMG]

    Table 2: Thêm section cuối


    Sửa Peheader:
    § Tăng số lượng section lên 1 (cách 6byte từ PE signature nhớ sửa cho = số section nhé, nếu CFF đã sửa hộ rồi thì thôi.)
    § Thay đổi SizeOfImage = Last VirtualAddress + Last VirtualSize


    [​IMG]

    Table 3: Section sau khi thêm​


    => Nếu chương trình có thể chạy tiếp với Section mới này thì hẵng làm tiếp nhé. Đến bước này File vẫn chạy bình thường mà không hề có gì thay đổi.


    2. Sửa bảng IAT của file calc_xp.exe.
    Ta đặt bảng IAT mới của file calc_xp.exe vào section cuối này bằng cách ghi RVA vào 1 vị trí trong section cuối. Ở đây mình chọn RVA = 20000 ~ fileOffset = 1d000.
    · Ghi 20000 vào ImportDirectoryRVA
    · Copy toàn bộ bảng IAT của của file calc_xp.exe cũ vào vị trí FileOffset = 1d000
    · Save lại và chạy thử nhé (chạy bt thì làm tiếp)


    [​IMG]

    Table 4: Sửa địa chỉ bảng IAT và save bảng IAT cũ vào vị trí mới.


    Tiến hành thêm xx.dll vào bảng Import.
    Trước khi làm tiếp mình muốn nói lại về cấu trúc của bảng IAT. Bảng IAT là 1 tập hợp 1 mảng các phần tử IMAGE_IMPORT_DESCRIPTOR (mỗi phần tử đặc trưng cho 1 dll mà file PE sẽ import ). Mỗi phần tử IMAGE_IMPORT_DESCRIPTOR có 5 DWORD = 20 byte. Bảng IAT kết thúc bởi 20 byte 0 liên tiếp nhau.
    Ta cần thêm 1 phần tử IMAGE_IMPORT_DESCRIPTOR đại diện cho xx.dll của chúng ta. Có 3 DWORD cần quan tâm là ở vị trí thứ 1, 4 và 5.
    · OriginalFirstThunk(1) chứa mảng các con trỏ - trỏ tới ds cấu trúc các hàm Import (cấu trúc hàm Import bao gồm vị trí export của hàm trong Dll và tên hàm Export.)
    · Name(4) trỏ tới dll name. (trỏ tới chuỗi “xx.dll”)
    · FirstThunk: chứa mảng các con trỏ. Hệ điều hành sẽ ghi vào mảng này các địa chỉ hàm được import vào file PE của phẩn tử IMAGE_IMPORT_DESCRIPTOR hiện tại. Kết thúc mảng này là 4 byte 00.


    [​IMG]


    Quay lại với demo của mình. Như đã nói ở trên, ta cần thêm 1 cấu trúc IMAGE_IMPORT_DESCRIPTOR.
    Tìm đến vị trí IMAGE_IMPORT_DESCRIPTOR cuối cùng (20 byte 00 đó) và sửa lại giá trị như sau.











    OriginalFirstThunk = 0x000200A0
    0x0
    0x0
    Name = 0x000200B0
    FirstThunk = 0x000200A8
    [​IMG]

    Tiếp tục điền dữ liệu vào.

    [​IMG]


    Bảng IAT sau khi sửa:


    [​IMG]

    Table 5: Bảng IAT sau khi sửa.


    III. Kết quả:


    Khi chạy file calc_xp.exe ta sẽ thấy của sổ của chương trinh notepad hiện lên.
    [​IMG]

    Table 6: Kết quả.​


    Với kỹ thuật này sau khi các bạn đã hiểu cách làm bằng tay. Thì chúng ta có thể code một chương trinh tự động việc sửa bảng import của một file exe.


    Trên đây là bài viết của mình về việc thực thi một file DLL bằng cách sửa bảng import của một file exe mà file DLL muốn load cùng. Bài viết chắc sẽ còn nhiều thiếu sót rất mong nhận được sự góp ý của các bạn.
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan