Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 8 của 8
  1. #1
    Ngày tham gia
    Sep 2015
    Đang ở
    89 Tam Trinh - Hoàng Mai - Hà Nội
    Bài viết
    0

    Từng bước sử dụng kỹ thuật Override hàm API

    có đọc ở đây


    II – Tại sao phải sử dụng kỹ thuật override trên Windows ?
    Nếu sử dụng kỹ thuật override thì developer có thể can thiệp vào (tức là có thể chen vào) các tiến trình thực thi (process) các thao tác xử lý của riêng mình bằng cách đón đợi thông báo gọi hàm API tương ứng và chuyển hướng điều khiển tới hàm của riêng developer. Khi không cần thiết thì cơ chế override có thể được gỡ bỏ và các trình ứng dụng có thể trở về thực thi bình thường. Override là hữu dụng trong trường hợp developer muốn bổ xung thêm hoặc sửa đổi một số tính năng hoạt động của tất cả hay chỉ một số ứng dụng (application) đang chạy trong hệ thống (hoặc tôi muốn làm một việc gì đó đen tối !!!???)
    ai có thể nói cho mình từng bứoc đễ sử dụng kỹ thuật override không
    VD như bước 1 làm gì,bước 2 làm gì không,thank you

  2. #2
    Có 3 loại hook hàm api ( trong usermode ) :
    - Hook bảng export ( EAT) : khó thực hiện, khó bị phát hiện, gỡ ko ra. Các dll sẽ export ra các hàm api, ta tìm và đổi lại địa chỉ của các hàm đã được export.
    - Hook bảng import ( IAT ) : hơi cực nhưng lại dễ bị qua mặt. Các chương trình dùng bảng IAT để ánh xạ địa chỉ các hàm api trong dll vào, ta tìm và đổi lại địa chỉ của các hàm này.
    - Chèn code vào đầu hàm : chèn lệnh nhảy ( jmp, mã lệnh là 0xE9 ) và đều hàm. Các bước thực hiện :
    + Tìm địa chỉ hàm
    + Set lại thuộc tính vùng nhớ cho phép ghi
    + Lưu lại 5 byte nội dung cũ
    + Ghi nội dung lệnh nhảy lên
    + Phục hồi lại thuộc tính cũ cho vùng nhớ.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi gianghoplus
    Theo kiến thức của mình thì cách này này chỉ hoạt động tốt với các hàm bắt đầu bằng 5 byte 8B FF 55 8B EC.
    Nếu có 1 hàm bắt đầu bằng 7 byte (liên tiếp) thì cách này không hoạt động và đôi khi (thường) gây crash
    Theo mình thì vấn đề này có thể giải quyết đơn giản thông qua một hàm disassembler để xác định độ dài các lệnh đầu hàm.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi meoconlongvang
    - Chèn code vào đầu hàm : chèn lệnh nhảy ( jmp, mã lệnh là 0xE9 ) và đều hàm. Các bước thực hiện :
    + Tìm địa chỉ hàm
    + Set lại thuộc tính vùng nhớ cho phép ghi
    + Lưu lại 5 byte nội dung cũ
    + Ghi nội dung lệnh nhảy lên
    + Phục hồi lại thuộc tính cũ cho vùng nhớ.
    Theo kiến thức của mình thì cách này này chỉ hoạt động tốt với các hàm bắt đầu bằng 5 byte 8B FF 55 8B EC.
    Nếu có 1 hàm bắt đầu bằng 7 byte (liên tiếp) thì cách này không hoạt động và đôi khi (thường) gây crash

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cách thứ 3 mà meoconlongvang đưa ra còn gọi là intercept API. Kevin đồng ý với ý kiến của gianghoplus, và việc sử dụng intercept API sẽ dễ gây đến vấn đề xung đội với mội trường multi thread, đó là việc khá chuối.

    Một cách đơn giản khác có thể sử dụng là dùng proxy dll, cách này cực kỳ đơn giản.

    Em xin hỏi các bác: Nếu như dll sử dụng private export thì ta dùng cách nào?

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi quangnh89
    Theo mình thì vấn đề này có thể giải quyết đơn giản thông qua một hàm disassembler để xác định độ dài các lệnh đầu hàm.
    Bạn có thể chỉ mình cái đó được không? (mình dốt ASM lắm)
    Vì đây là một phương pháp khá đơn giản, dễ dùng nên mình cũng muốn khắc phục được nhược điểm này.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Cách thứ 3 mà meoconlongvang đưa ra còn gọi là intercept API. Kevin đồng ý với ý kiến của gianghoplus, và việc sử dụng intercept API sẽ dễ gây đến vấn đề xung đội với mội trường multi thread, đó là việc khá chuối.
    chuối là vì anh không xử lý trường hợp MuiltiThread,có rất nhiều libs hỗ trợ xử lý đa nhiệm và hiện nay nó vẫn là cách phổ biến nhất để Hook API
    về lý thuyết có thể hook được bất cứ thứ gì chỉ cần biết địa chỉ và kiểu dữ liệu các tham số,nếu nhìn qua thì KAV Hook các Hàm Undocument của Kernel,để hook các hàm không export người ta dùng cách search binary mã code đặc biệt của hàm cần Hook,mã nhận dạng này có thể thay đổi tùy theo phiên bản của hệ điều hành,nếu ai quan tâm mình có thể share cho 1 vài tài liệu và source code hook Hàm không Export Kernel ( trên windows XP )

  8. #8
    Trích dẫn Gửi bởi gianghoplus
    Bạn có thể chỉ mình cái đó được không? (mình dốt ASM lắm)
    Vì đây là một phương pháp khá đơn giản, dễ dùng nên mình cũng muốn khắc phục được nhược điểm này.
    việc disasm thì có thể tham khảo code cuả olly , nó là free source mà

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •