NMB KEYLOGGER

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 21 déc. 2006 à 11:52
 ero5362 - 19 juin 2017 à 17:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40796-nmb-keylogger

Bonjour,

J'ai découvert récemment NMB KEYLOGGER, vraiment très bien fait, bravo !!!

A l'utilisation j'ai constaté que les caractères avec accent séparé (exemples : ê ou ë) n'étaient pas retranscris correctement lors de la frappe (ê devient e, ë aussi) alors même qu'ils sont bien stockés dans le fichier LogName. J'ai cherché comment remédier à cela mais en vain. Auriez-vous une piste à me conseiller, s'il vous plaît ?

Encore bravo pour le développement.
pierre_54 Messages postés 3 Date d'inscription mercredi 8 mars 2006 Statut Membre Dernière intervention 20 juin 2010
4 févr. 2010 à 10:55
le code plante qd on appuie sur la touche TAB en mode caché
Justepourlelogieciel Messages postés 1 Date d'inscription dimanche 14 septembre 2008 Statut Membre Dernière intervention 20 septembre 2008
20 sept. 2008 à 12:46
comment on le fait fonctionner le logiciel ?
randriano Messages postés 54 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 26 juillet 2011
14 juil. 2008 à 10:03
Bonjour N_M_B,

Beau code source mais ...

VOTRE HOOK EST DETECTABLE EN UTILISANT LES TOUCHES DE NAVIGATION SOUS WORD, NOTEPAD, ETC.
C'est à dire elles ne marchent pas: surtout les touches haut et bas!! Quelle pouasse !!!
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
3 févr. 2007 à 19:33
salut,

très bon code, bien présenté, agréable à lire, bien documenté et clair! beau boulot!

j'ai pris quelques notes lorsque je l'ai lue. Deux-trois trucs que tu peux améliorer. Les voici:


procedure TForm1.SetActive(Active: boolean);
begin
[...]
Actif:= Active; // me semble faux, tu affect la var à elle-même. utilise self.active. ou renomme le parametre par "value" ou "aActif".

end;

une var inutilisée dans ChbReRunClick

else MessageDlg(Msg1,mtError,[mbOk],0); //msg1= 'Le log n''éxiste pas'
si tu nomme tes const (genre MSG_NoLogFile) ça évite ce genre de commentaire et rend le code plus clair. ;)


const Msg5 pas utilisé.

aussi, essai de nommer tout les boutons (et autre compo), même somairement.

pour les trucs genre TRegistry. Utilise un "with TRegistry.Create do try finally" ça rend le code plus facile à lire et évite de décalarer une var local.

sinon, c'est parfait.

bonne continuation.
cs_askil2000 Messages postés 92 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 12 avril 2010
15 janv. 2007 à 14:23
:) salut !
DelphiCool, N_M_B : Certe, mais qui se connect à internet avec windows 98 aujourd'hui risque gros lol
d'autant qu'il n'y a plus de mise à jour de microsoft.

chercher une version compatible tout OS moi j'veux bien voir ça ?
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
13 janv. 2007 à 21:44
bien dit DelphiCool
DelphiCool Messages postés 455 Date d'inscription mardi 24 juillet 2001 Statut Membre Dernière intervention 10 mars 2009
13 janv. 2007 à 19:54
Mais ça ne marche que sur NT et XP
taye78 Messages postés 106 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 13 janvier 2007
13 janv. 2007 à 19:00
oui sans DLL enfait au lieu de load une dll cest le module courrant (l'exe) qui est loade et mappe ds chaque process par windows
cs_askil2000 Messages postés 92 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 12 avril 2010
13 janv. 2007 à 15:24
Salut tlm !
DelphiCool : J'avoue ne pas l'avoir testé sur d'autres OS que XP ou 2000, d'ailleur je n'ai pas Win9x ni Millenium sous la main. Le principe de mon keylogger repose en effet comme la sous entendu Taye78 sur les GetKeyState il y a un exemple sur ce site.

j'ai procédé de la façon suivante :

if ((Copy(IntToStr(GetKeyState(65)),1,1) '-') and (SHIFT.Visible True) and (CAPS.Visible = True) and (ALT.Visible = False) and (ALTGR.Visible = False) and (CTRL.Visible = False)) or ((Copy(IntToStr(GetKeyState(65)),1,1) = '-') and (SHIFT.visible = False) and (CAPS.Visible = False) and (ALT.Visible = False) and (ALTGR.Visible = False) and (CTRL.Visible = False)) then EdtTouche.Text := 'a' else etc..

traduction de chaque touche du clavier.

un bon conseil si vous voulez faire un keylogger en delphi qui tienne la route utilisé les clients sockets pour la transmition,
car le TWebBrowser vous trahira par l'effet sonor du changement de page :d

@+ tlm ...
taye78 Messages postés 106 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 13 janvier 2007
13 janv. 2007 à 02:27
non whitehippo=?
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
10 janv. 2007 à 19:02
Taye 78 : tu es aller voir le code de whitehippo??
taye78 Messages postés 106 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 13 janvier 2007
10 janv. 2007 à 14:32
Hook sans dll: En vérité ce n'est plus un hook car le prog simplement vérifie la position de chaque touche du clavier toute les millisecondes (oui performance = nul) via l'api win32 GetKeyState si je m'en souviens bien.

Je crois qu'il y a une autre manière de faire ça, peut-être en injectant du code dans chaque procès. Le code injecté se chargera de transmettre les info. au procès qui veux les travailler(ipc,wm_*, etc). J'imagine qu'il établira un hook local via lapi win32 SetWindowsHookEx et ainsi recuperera les touches localement actionées.

Cacher son process: il faudrait hooker l'API utiliser pour lister les process, pour le cas spécifique du task manager il faudrait voir quelle API il utilise pour les lister. On peut imaginer EnumProcess (psapi, pas compatible 9x je crois), on hook enumprocess et quand on voit que notre processus va être listé, on change ou cache la valeur.
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
3 janv. 2007 à 02:34
les gars si vous pouviez me montrer vos keyloggers je vous en serais reconaissant , sourtout dans le cas d'interprétations des touches et le fait qu'il marche sans dll en tout cas si vous etes d'accord faites le moi savoir pas MP merci :)

l'injection de code hé oui je voulais k'il soit invisible dans la listede process alors je me suis un peut documenté et je suis tombé sur ce mot 'l'injection de code' loool sa ma stopé sec !!!

lol alé encore bonne année et bon code a+
N_M_B
DelphiCool Messages postés 455 Date d'inscription mardi 24 juillet 2001 Statut Membre Dernière intervention 10 mars 2009
2 janv. 2007 à 18:38
askil2000, ton keylogger sans dll marche il sous win98 et Me? (autre que du NT, XP)
j'en ai fais un aussi sans dll, mais il ne fonction que sous NT et XP
cs_askil2000 Messages postés 92 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 12 avril 2010
2 janv. 2007 à 16:12
interessant, mais détectable par tout les antivirus. j'ai réalisé un keylogger sans dll, trés simple à faire en delphi, maintenant pour qu'il soit invisible (dans les process)c'est une autre histoire ... il faut se renseigner sur l'injection de code :o)
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
22 déc. 2006 à 17:24
DelphiCool pourais tu m'éclairer sur comment charger l'application dynamiquement je n'ai jamais entendue parler d'un tel procédé !
merci !
DelphiCool Messages postés 455 Date d'inscription mardi 24 juillet 2001 Statut Membre Dernière intervention 10 mars 2009
22 déc. 2006 à 15:05
NMB, je n'ai jamais dit que tu recupère les numéros de CB.
J'ai dit que ça peut servir à ça et que là c'est dangereux.

Pour Hooker sans dll, il te faut :
- mettre le code dans ton application
- Mettre les exports.
- Charger dynamiquement ton application comme si c'etait la dll
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
22 déc. 2006 à 14:50
Yo,

Cherche à "Hook sans dll" et surtout crédit à HIPPO. Perso, je m'en sers pour gérer des superraccourcis dans windows.

tschussss
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
22 déc. 2006 à 14:06
bonjour a tous ! désolé du retard mais je n'ai pas payé mon abonement internet sa sera pour samedi ,
@ f0xi : oui bien vue merci !
@ jace1975 : enfaite normalement et comme il a été dit pas microsoft on ne peut implémenter un hook sans dll(la dll est chargé en tant que module dans chaque process a éspioner) , mais ils ont mentis apparament car sur cppfrance.com il a été implémenté in hook clavier sans dll, on delphi je ne sais pas trop si c possible vu que je ne fait pas de c/c++ !

@ DelphiCool: "récuperer des numéro de carte bleu" ca n'est pas mon but et en plus en algerie on utilise pas de cartes banquaires!
mon but n'est pas d'éspioner un utilisateur m'ais juste la satisfaction d'utiliser des thequniques de programmation nouvelles pour moi , et d'ameliorer mon niveau !

@ tous : d'ès que je rétablie ma connection je met a jour !
a+ bon code
DelphiCool Messages postés 455 Date d'inscription mardi 24 juillet 2001 Statut Membre Dernière intervention 10 mars 2009
22 déc. 2006 à 09:00
L'interet c'est d'espionner un utilisateur.
Si tu as un réseau, tu peux savoir ce que les autre poste on fait et tapé.
Mais tu peux aussi récuperer des numéro de carte bleu et là c'est dangereux
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
21 déc. 2006 à 18:50
Déjà vu ce genre de code plein de fois, et je me suis toujours demander l'interet de faire une dll pour un hook claivier.

Peux-tu donc m'expliquer l'interet de la dll par rapport à un hook directement implémente dans ton application?

tschussss
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
21 déc. 2006 à 11:57
cela ne sert a rien de faire :

if I = 1 then Bool := true else Bool := false;

ça prend trop de cycle CPU pour juste un booléen...

tu fait directement :

Bool :I 1;

et si on as :

if I = 1 then Bool := false else Bool := true;

on peu ecrire :

Bool := I <> 1;
ou
Bool :not (I 1);
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
21 déc. 2006 à 11:52
if not Visible then begin
case VirtualKey of
{Ctrl}
17: ShortcutState[0] := (KeyStore and $80000000) = 0;
{n}
78: ShortcutState[1] := (KeyStore and $80000000) = 0;
end;
if ShortcutState[0] and ShortcutState[1] and ((KeyStore and $20000000)<> 0) then begin
ShortcutState[0]:= False;
ShortcutState[1]:= False;
self.Visible:= True;
end;
end;



if Ini.ReadBool('Config','ShowMsg2',True) then begin
IsChecked := False;
TheModalResult := MDChecked(Msg2,'Ne plus afficher ce message',IsChecked,mtInformation,[mbOk]);
if IsChecked then
Ini.WriteBool('Config','ShowMsg2',False);
end;



Registre := TRegistry.Create;
try
Registre.RootKey := HKEY_LOCAL_MACHINE;
if Registre.OpenKey(RunKey, False) then
ChbReRun.Checked :Registre.ReadString(KeyName) '"'+ParamStr(0)+'" '+'"Ghost"';
Registre.CloseKey;
finally
Registre.Free;
end;
Rejoignez-nous