Từ 1 tới 8 trên tổng số 8 kết quả

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

  1. #1
    Ngày gia nhập
    12 2008
    Bài viết
    198

    Wink 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
    Đã được chỉnh sửa lần cuối bởi Cpro : 17-01-2009 lúc 10:07 PM.

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    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ớ.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    09 2008
    Bài viết
    223

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    - 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
    Ân oán giang hồ nuôi tôi lớn
    Cuộc đời khốn nạn dạy tôi khôn
    Không đâm không chém đời không nể
    Không tiền không bạc gái không theo

    ----------------------
    Visit my blog: http://nova-soft.net/

  4. #4
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi gianghoplus Xem bài viết
    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.

  5. #5
    Ngày gia nhập
    09 2008
    Bài viết
    223

    Trích dẫn Nguyên bản được gửi bởi quangnh89 Xem bài viết
    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.
    Ân oán giang hồ nuôi tôi lớn
    Cuộc đời khốn nạn dạy tôi khôn
    Không đâm không chém đời không nể
    Không tiền không bạc gái không theo

    ----------------------
    Visit my blog: http://nova-soft.net/

  6. #6
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

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

    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?
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  7. #7
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    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 )
    Đã được chỉnh sửa lần cuối bởi AlexF : 10-08-2010 lúc 08:25 AM.

  8. #8
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi gianghoplus Xem bài viết
    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à

Các đề tài tương tự

  1. New, Virtual va Override có tác dụng gì trong lập trình C#?
    Gửi bởi yuchi_1k91 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 11-04-2016, 02:26 PM
  2. Từ khóa virtual-override
    Gửi bởi protieusoi trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 15-10-2013, 10:10 PM
  3. Vấn đề override trong java
    Gửi bởi chicken_java trong diễn đàn Nhập môn lập trình Java
    Trả lời: 6
    Bài viết cuối: 15-07-2013, 01:31 PM
  4. Sự khác biệt giữa new, virtual và override ?
    Gửi bởi NT_OnlyLove trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 03-09-2009, 10:48 PM
  5. different redefine and override
    Gửi bởi cuopbien trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 02-01-2009, 11:45 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn