Thứ Ba, ngày 02 tháng 2 năm 2010

// // Leave a Comment

Key Logger C# .NET - API Methods

Các hàm API
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);


  • idHook: Con số này sẽ xác định loại hook sẽ được thiết lập. Ví dụ, SetWindowsHookEx cũng có thể được sử dụng để hook vào các sự kiện chuột. Trong trường hợp này, chúng ta chỉ quan tâm đến số 13, là id của hook bàn phím và đã được gán cho hằng WH_KEYBOARD_LL.


  • lpfn: Một long Pointer trỏ tới hàm xử lý các sự kiện bàn phím. Trong C#, "pointer" đạt được bằng cách gởi một thể hiện(instance) của kiểu delegate, tham chiếu đến phương thức thích hợp. Đây là phương thức mà sẽ được gọi mỗi khi hook được sử dụng.
    Một điểm quan trong cần lưu ý ở đây là delegate cần phải được lưu trữ trong một biến thành viên trong lớp. Điều này là để ngăn cản nó đang được thu gom rác(garbage collection) ngay khi phương thức đầu tiên kết thúc.


  • hMod: Một xử lý cho các ứng dụng được cài đặt hook. Chúng ta đã thiết lập này cho Int.Zero (ở đầu phần bài viết), bởi vì không chắc rằng sẽ có nhiều hơn một ví dụ của ứng dụng. Tuy nhiên, mã này sử dụng GetModuleHandle từ kernel32.dll (xem bên dưới) để xác định các trường hợp chính xác để làm cho các lớp có khả năng linh hoạt hơn.


  • dwThreadld: Các ID của thread hiện hành. Thiết lập là 0 cho hook toàn cục, được thiết lập thích hợp cho một low-level hook.



Ở đây chúng ta import hàm UnhookWindowsHookEx mà loại bỏ hook khi được gọi.

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
Dưới đây là đoạn mã cần thiết cho việc import hàm CallNextHookEx mà vượt qua những thông tin hook đến thủ tục tiếp theo.
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);

Bất cứ khi nào một sự kiện bàn phím xảy ra, các tham số sau sẽ được thông để HookCallback.

  • nCode: Chức năng gọi lại (callback function) phải trả lại kết quả của Call NextHookEx nếu giá trị này là nhỏ hơn zero. Sự kiện bàn phím bình thường sẽ trở lại một nCode của 0 hay nhiều hơn nữa.

  • wParam: Giá trị này cho biết loại sự kiện đã xảy ra: nhả hoặc giữ phím.
    iParam: một cấu trúc để lưu trữ các thông tin chính xác về các bàn phím tắt, chẳng hạn như các mã của phím được nhấn.

GetModuleHandle được sử dụng bởi hàm SetWindowsHookEx "hmod";
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);

Có hai cặp ngoặc nhọn cần để đóng tại vị trí này, một cho lớp IterceptKeys và một cho không gian tên Keylogger.


Phần 1: Creating the Project
Phần 2: Running the Key Logger
Phần 3: Got Mail
Phần 4: Intercepting Keystrokes
Phần 5: The HookCallback Method
Phần 6: API Methods
Phần 7: Possible Errors

0 comments: