Domanda aiuto programma

CyberBerry

Utente Iron
13 Ottobre 2023
5
1
0
6
Ultima modifica da un moderatore:
buonasera a tutti, sto cercando di creare un programma che prende un carattere inserito da tastiera e mi restituisce in output un carattere a caso...
vi allego una parte del programma (non ancora completo):

C:
#include<iostream>
#include<windows.h>
#include<cstdlib>
#include<conio.h>
#define DELAY 100
using namespace std;
/*
    ---CARATTERI PER ASSEGNAZIONE AUTOMATICA
*/
char car[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char Car[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char number[10] = {'1','2','3','4','5','6','7','8','9','0'};
char special[11] = {'!','"','£','$','%','&','/','(',')','=','?'};
void key(int a, int b);
int main()
{
    bool press=false;
    int ran;
    FreeConsole(); //NASCONDI CONSOLE
    srand(time(NULL));
    while(true)
    {
        for(int i=8; i<=222; i++) //CARATTERI ASCII
        {
            if(GetAsyncKeyState(i) != press)
            {
                ran = rand()%26+1; //GENERA NUMERO CASUALE (ANCORA DA SISTEARE BENE)
                key(i, ran);
                Sleep(DELAY);
            }
        }
    }
    return 0;
}
void key(int a, int b) //i, ran
{
    switch(a)
    {
        /*
            ------CARATTERI------
        */
        case 65:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) //SE VIENE PREMUTO A (65) VERIFICA SE è PREMUTO IL TASTO SHIFT SINISTRA O DESTRA
                _putch(Car); //CALCOLA IL CARATTERE DA INSERIRE CASUALMENTE CON LA FUNZIONE RAND (B) USATO COME ARGOMENTO DAL MAIN AL VOID
            else
                _putch(car);
        break;
        case 66:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 67:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 68:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 69:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 70:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 71:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 72:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 73:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 74:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 75:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 76:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 77:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 78:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 79:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 80:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 81:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 82:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 83:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 84:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 85:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 86:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 87:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 88:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 89:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 90:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        /*
            ------NUMMERI------
        */
        case 48:
        break;
        case 49:
        break;
        case 50:
        break;
        case 51:
        break;
        case 52:
        break;
        case 53:
        break;
        case 54:
        break;
        case 55:
        break;
        case 56:
        break;
        case 57:
        break;

    }
}

l'ho provato e funziona solamente dal cmd e vorrei farlo funzionare su tutto il sistema...ovviamente l'ho provato anche in modalità amministratore ma ogni volta che scrivo anche su un file txt o se faccio una ricerca su google mi da sempre il carattere inserito in input (es. input a, output a). come faccio a estendere il programma sul tutto il sistema?
P.S.il sistema discusso è windows e non linux. grazie a tutti per l'aiuto in anticipo
 
Utilizza il tag CODE per il codice ed indenta correttamente, altrimenti diventa complicato darti una mano. Il codice l'hai scritto tu oppure l'hai preso su Internet? Mi sembra vagamente il codice di un Keylogger...facci sapere! Ciao.
 
Ultima modifica da un moderatore:
Utilizza il tag CODE per il codice ed indenta correttamente, altrimenti diventa complicato darti una mano. Il codice l'hai scritto tu oppure l'hai preso su Internet? Mi sembra vagamente il codice di un Keylogger...facci sapere! Ciao.
buongiorno, in effetti si, è molto simile ad un keylogger. riposto con i commenti sperando di farti capire bene il mio progetto:
C:
#include<iostream>
#include<windows.h>
#include<cstdlib>
#include<conio.h>
#define DELAY 100
using namespace std;
/*
    ---CARATTERI PER ASSEGNAZIONE AUTOMATICA
*/
char car[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char Car[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char number[10] = {'1','2','3','4','5','6','7','8','9','0'};
char special[11] = {'!','"','£','$','%','&','/','(',')','=','?'};
void key(int a, int b);
int main()
{
    bool press=false;
    int ran;
    FreeConsole(); //NASCONDI CONSOLE
    srand(time(NULL));
    while(true)
    {
        for(int i=8; i<=222; i++) //CARATTERI ASCII
        {
            if(GetAsyncKeyState(i) != press)
            {
                ran = rand()%26+1; //GENERA NUMERO CASUALE (ANCORA DA SISTEARE BENE)
                key(i, ran);
                Sleep(DELAY);
            }
        }
    }
    return 0;
}
void key(int a, int b) //i, ran
{
    switch(a)
    {
        /*
            ------CARATTERI------
        */
        case 65:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) //SE VIENE PREMUTO A (65) VERIFICA SE è PREMUTO IL TASTO SHIFT SINISTRA O DESTRA
                _putch(Car); //CALCOLA IL CARATTERE DA INSERIRE CASUALMENTE CON LA FUNZIONE RAND (B) USATO COME ARGOMENTO DAL MAIN AL VOID
            else
                _putch(car);
        break;
        case 66:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 67:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 68:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 69:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 70:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 71:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 72:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 73:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 74:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 75:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 76:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 77:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 78:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 79:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 80:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 81:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 82:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 83:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 84:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 85:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 86:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 87:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 88:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 89:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        case 90:
            if (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT))
                _putch(Car);
            else
                _putch(car);
        break;
        /*
            ------NUMMERI------
        */
        case 48:
        break;
        case 49:
        break;
        case 50:
        break;
        case 51:
        break;
        case 52:
        break;
        case 53:
        break;
        case 54:
        break;
        case 55:
        break;
        case 56:
        break;
        case 57:
        break;

    }
}
questo è il progetto completo, ho fatto le variabili char sui caratteri maiuscoli, minuscoli, numeri e caratteri speciali, nel main ho inserito un while(true), dove al suo interno ho messo un for con dichiarazione di i=8 ad un massimo 222 (per i caratteri ascii) con un if che se riceve un tasto premuto (input) allora sarebbe diverso da press (variabile bool che l'ho settata su false all'inizio). al suo internoho messo la funzione rand racchiusa nella variabile ran con il void key che usa come argomenti i e ran.
nel void invece usando uno switch di i (in questo caso l'ho messo come argomento int a) calcola il tasto premuto, se viene premuto a (65) allora entra nel case 65 dove al suo interno controlla se è strato premuto il tasto shift di sinistra o destra, se premuto 1 dei 2 restituisce una lettera maiuscola (Car[]) sennò minuscola (car[]). il ran che come argomento viene usato come int b lo mette all'interno del array di Car o car. spero di essere stato utile e grazie
 
Se ho capito bene vuoi fare uno di quegli scherzi di una volta che rimappa tutti i tasti premuti a caso su Windows in qualunque applicazione stia usando l'utente.

Puoi farlo ma non con GetAsyncKeyState, ti servono SetWindowsHookEx e CallNextHookEx perché così puoi intercettare il valore del tasto premuto e modificarlo prima che arrivi a gli altri programmi, invece con GetAsyncKeyState vedi che un tasto è stato premuto ma ormai il carattere originale è già arrivato sull'applicazione.

Funziona in un modo simile a questo:
C:
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION)
    {
        PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
        // Esempio: sostituisci le A con B (sia maiuscolo che minuscolo)
        if (p->vkCode == 65)
            p->vkCode = 66;
    }
    // Propaga il tasto modificato alle altre app
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

//...
SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, 0, 0);
 
  • Mi piace
Reazioni: --- Ra ---
Ultima modifica da un moderatore:
si esatto, più che scherzo, è uno studio mio, ho iniziato a programmare in c++ da circa 1 anno e mezzo e mi sto appassionando molto al mondo della programmazione e siccome sono molto curioso di ogni cosa che riguarda un pc, mi sto concentrando sugli input del pc (tastiera e mouse), non mi reputo nè bravo e nè pessimo, so che ho moltissima strada da percorrere in questo ambito e la mia voglia di conoscere è alta...comunque tornando al discorso principale... queste funzioni deduco che siano disponibili sull'header windows.h (corregetemi se sbaglio),
quindi le posso trovare tutte sul sito della microsoft dove spiega questo header, ora mi rimetto a lavoro e come prima cosa mi studio per bene questo pezzo di algoritmo scritto da te. grazie infinite per l'aiuto!!!
 
dopo qualche giorno di lettura continuo a non capire come va utilizzato tutto ciò, sto dando di matto anche perchè sto tutto il giorno d'avanti a questi pezzi di codice, sto cominciando a valutare il fatto che è programmazione troppo avanzata per il momento...potreste aiutarmi con la spiegazione di tutto ciò? su internet non è che si capisce molto... grazie in anticipo
 
Non funziona probabilmente perchè ho sbagliato a modificare il vk nella stessa struttura passata in lParam, evidentemente non è una mossa consentita, però puoi fare così, stavolta ho provato:

C:
#include <Windows.h>

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION)
    {
        PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
        // Esempio: sostituisci lettere invertendo l'alfabeto

        // Sostituisci solo se è una lettera A-Z (sia maiuscolo che minuscolo) e se non è già stata scambiata da noi
        if ((p->flags & LLKHF_INJECTED) == 0 && p->vkCode >= 65 && p->vkCode <= 91)
        {
            INPUT input;
            ZeroMemory(&input, sizeof(INPUT));
            input.type = INPUT_KEYBOARD;
            input.ki.wScan = p->scanCode;
            if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP)
                input.ki.dwFlags = KEYEVENTF_KEYUP;

            // Qui imposti il nuovo valore del tasto
            input.ki.wVk = ('Z' - p->vkCode) + 'A';
            // Invia la lettera modificata
            SendInput(1, &input, sizeof(INPUT));
            // Scarta la lettera originale
            return 1;
        }
    }
    // Propaga il tasto non modificato alle altre app
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

int main()
{
    // Imposta il programma per intercettare la tastiera
    HHOOK kbHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, 0, 0);
    MSG m;
    // Gestione coda messaggi di Windows di default
    while (GetMessage(&m, 0, 0, 0))
    {
        TranslateMessage(&m);
        DispatchMessage(&m);
    }
    // Quando il programma viene chiuso, smetti di intercettare la tastiera ed esci
    UnhookWindowsHookEx(kbHook);
    return 0;
}

Ho inserito qualche commento di spiegazione, a differenza di prima invece di cercare di modificare il carattere al volo, prima invia il tasto modificato, poi scarta quello originale.

PS: se scrivi in un programma eseguito come amministratore, anche il tuo deve esserlo, altrimenti non scrive.
Se vuoi capire come funziona lato sistema operativo leggi la documentazione Using Hooks, in poche parole il sistema ti dà la possibilità di registrare una funzione per un determinato tipo di evento di sistema (in questo caso evento tastiera low level). Quando si verifica un evento di quel tipo, il sistema chiama la prima funzione registrata per monitorare quell'evento, che fa le sue azioni e poi deve chiamare CallNextHookEx per chiamare la prossima funzione registrata (che può essere in qualsiasi altro programma), in questo modo l'evento viene propagato finché non ci sono altre funzioni hook oppure finché una di quelle ritorna senza chiamare CallNextHookEx. Sfruttando questo meccanismo, la funzione di esempio che ho pubblicato, non propaga l'evento se è una lettera premuta dall'utente (al suo posto creando un evento finto "injected" con SendInput) mentre lo propaga per tutti gli altri tasti.
 
GRAZIE GRAZIE E ANCORA GRAZIE!!!!!! ora mi metto sotto a studiare tutto il programma!!!! vedendolo per intero adesso comincio già a capire un pò di più, poi con la spiegazione sotto è ancora meglio!!!!