f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 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.
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és3Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention20 juin 2010 4 févr. 2010 à 10:55
le code plante qd on appuie sur la touche TAB en mode caché
Justepourlelogieciel
Messages postés1Date d'inscriptiondimanche 14 septembre 2008StatutMembreDernière intervention20 septembre 2008 20 sept. 2008 à 12:46
comment on le fait fonctionner le logiciel ?
randriano
Messages postés54Date d'inscriptionvendredi 13 avril 2007StatutMembreDernière intervention26 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és814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 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és92Date d'inscriptionlundi 8 mars 2004StatutMembreDernière intervention12 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és94Date d'inscriptionmardi 9 mai 2006StatutMembreDernière intervention 1 mars 2008 13 janv. 2007 à 21:44
bien dit DelphiCool
DelphiCool
Messages postés455Date d'inscriptionmardi 24 juillet 2001StatutMembreDernière intervention10 mars 2009 13 janv. 2007 à 19:54
Mais ça ne marche que sur NT et XP
taye78
Messages postés106Date d'inscriptionmardi 18 juin 2002StatutMembreDernière intervention13 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és92Date d'inscriptionlundi 8 mars 2004StatutMembreDernière intervention12 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és106Date d'inscriptionmardi 18 juin 2002StatutMembreDernière intervention13 janvier 2007 13 janv. 2007 à 02:27
non whitehippo=?
jace1975
Messages postés81Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention12 octobre 20071 10 janv. 2007 à 19:02
Taye 78 : tu es aller voir le code de whitehippo??
taye78
Messages postés106Date d'inscriptionmardi 18 juin 2002StatutMembreDernière intervention13 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és94Date d'inscriptionmardi 9 mai 2006StatutMembreDerniè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és455Date d'inscriptionmardi 24 juillet 2001StatutMembreDernière intervention10 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és92Date d'inscriptionlundi 8 mars 2004StatutMembreDernière intervention12 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és94Date d'inscriptionmardi 9 mai 2006StatutMembreDerniè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és455Date d'inscriptionmardi 24 juillet 2001StatutMembreDernière intervention10 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és81Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention12 octobre 20071 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és94Date d'inscriptionmardi 9 mai 2006StatutMembreDerniè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és455Date d'inscriptionmardi 24 juillet 2001StatutMembreDernière intervention10 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és81Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention12 octobre 20071 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és4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 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és4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 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;
19 juin 2017 à 17:22
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.
4 févr. 2010 à 10:55
20 sept. 2008 à 12:46
14 juil. 2008 à 10:03
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 !!!
3 févr. 2007 à 19:33
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.
15 janv. 2007 à 14:23
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 ?
13 janv. 2007 à 21:44
13 janv. 2007 à 19:54
13 janv. 2007 à 19:00
13 janv. 2007 à 15:24
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 ...
13 janv. 2007 à 02:27
10 janv. 2007 à 19:02
10 janv. 2007 à 14:32
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.
3 janv. 2007 à 02:34
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
2 janv. 2007 à 18:38
j'en ai fais un aussi sans dll, mais il ne fonction que sous NT et XP
2 janv. 2007 à 16:12
22 déc. 2006 à 17:24
merci !
22 déc. 2006 à 15:05
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
22 déc. 2006 à 14:50
Cherche à "Hook sans dll" et surtout crédit à HIPPO. Perso, je m'en sers pour gérer des superraccourcis dans windows.
tschussss
22 déc. 2006 à 14:06
@ 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
22 déc. 2006 à 09:00
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
21 déc. 2006 à 18:50
Peux-tu donc m'expliquer l'interet de la dll par rapport à un hook directement implémente dans ton application?
tschussss
21 déc. 2006 à 11:57
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);
21 déc. 2006 à 11:52
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;