Na wat gekloot kwam ik op het idee om een eigen keylogger te schrijven. Ik heb momenteel een keylogger draaien hier lokaal omdat ik wil weten wat er gebeurd op mijn computer. Ik doe dit sinds een tijdje nadat mn zusje de comp flink naar de klote had geholpen. Dat prog logt ook echt alles, maar een nadeel is dat ie zwaar is. Wat ik nu nodig heb is een programma dat gewoon op de 8ergrond draait. Niet omdat het geheim moet zijn, omdat iedereen die op mijn comp wil weet dat ik alles log, maar omdat het niet moet storen. Ik vraag me dus af hoe je dit kunt doen. Veel prog ervaring heb ik niet, maar je moet toch ergens beginnen
Welke os? Je kunt het namelijk als een service draaien in de NT os'n.
is idd een NT os, nl 2k pro
het moet alleen niet te moeilijk worden:P
het moet alleen niet te moeilijk worden:P
[ Voor 45% gewijzigd door Verwijderd op 23-07-2003 19:51 ]
Als service draaien zegt niet heel veel, alleen dat je geen window hebt, zelfs geen tekst window. Ik heb zelfs executables gebakken die tegelijkertijd als service en als command-line executable werkten (is heel handig by debuggen, namelijk).
SetWindowsHookEx() is de functie die je moet hebben. Zelf moet je een KeyboardProc() schrijven. MSDN vertelt je wat je daarvoor nodig hebt. Het ziet eruit als <100 regels C of C++, met de aantekening dat je een DLL nodig hebt. LowLevelKeyboardProc() zou misschien ook kunnen, die is net iets anders.
SetWindowsHookEx() is de functie die je moet hebben. Zelf moet je een KeyboardProc() schrijven. MSDN vertelt je wat je daarvoor nodig hebt. Het ziet eruit als <100 regels C of C++, met de aantekening dat je een DLL nodig hebt. LowLevelKeyboardProc() zou misschien ook kunnen, die is net iets anders.
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Indien je toetsaanslagen van alle applicaties wilt gaan monitoren, dan moet je system-wide hooks gaan gebruiken. Houdt wel in de gaten dat als je met system-wide hooks gaat werken, dat jouw DLL met daarin de door jou geschreven callback functie 'KeyboardProc' in de process-adress space van ieder process (m.u.v. enkele services, systeem applicaties) wordt ge-'mapped'. Dit kan uiteindelijk een enorme belasting voor je systeem worden, afhankelijk van wat je in de callback functie 'KeyboardProc' wilt gaan doen. Het kan het systeem ook instabiel maken en in sommige gevallen zelfs laten crashen. Het wordt daarom aangeraden om alleen system-wide hooks te gebruiken voor debugging.
De code in de callback functie moet je ook zo kort (lees: snel) mogelijk houden en weinig belastend. Wat je dus bijvoorbeeld niet moet gaan doen is iedere keer dat je callback functie wordt aangeroepen: een bestand op disk openen, er iets naar schrijven en dan weer sluiten. Dit gaat goed zolang iemand alleen maar aan het Internetten is, maar zodra heel veel ge-typed gaat worden (verslagen etc) dan moet je toch echt naar een andere oplossing gaan kijken.
In het geval van het gebruik van system-wide hooks, zou het volgende een wat elegantere oplossing zijn:
-een DLL schrijven (verplicht bij system-wide hooks) met daarin de callback functie.
-een enkele applicatie welke dienst doet als 'monitor'. Indien je callback functie wordt aangeroepen, dan stuurt deze een berichtje naar de 'monitor' applicatie met daarin welke toets is aangeslagen en vanuit welk programma. De 'monitor' applicatie heeft constant de logfile open staan en kan de ontvangen informatie onmiddelijk wegschrijven naar file.
Het berichtje zou je kunnen versturen door aanroep van de 'SendMessage' functie met als type 'WM_COPYDATA'. Daarvoor moet je ook weer een aantal dingen doen:
-Creër een onzichtbaar window in je 'monitor' applicatie met een bepaalde unieke 'classname'. Dit window (of liever zijn message-thread) ga je gebruiken om de berichten die van jouw DLL afkomen op te vangen
-Jouw DLL moet weten waar dat het onzichtbare window van jou 'monitor' applicatie zich bevindt. M.a.w.: je DLL moet in staat zijn om de windowhandle van het onzichtbare window op te vragen. Dat kan zo:
FindWindow(...classname..., ...windowname...)
Het kan allemaal nog veel mooier en beter, maar dat is aan jou. Ik hoop dat ik je een beetje begrijpt wat ik heb opgeschreven. Ik ben er wel vanuit gegaan dat je wel wat programmeer/systeem kennis hebt. Ik heb een hoop dingen overgeslagen en ben hier en daar wat kort door de bocht gegaan, want jij moet het programma zelf schrijven.
E.a. is afhankelijk van de performance van het computer-systeem. Een P4 3Ghz. uitgerust systeem kan een hogere belasting aan, dan een P1 166Mhz.
Lees hier maar eens: http://msdn.microsoft.com...ions/setwindowshookex.asp
Een system-wide hook krijg je door de laatste parameter van de functie 'SetWindowsHookEx' op '0' te initialiseren.
De code in de callback functie moet je ook zo kort (lees: snel) mogelijk houden en weinig belastend. Wat je dus bijvoorbeeld niet moet gaan doen is iedere keer dat je callback functie wordt aangeroepen: een bestand op disk openen, er iets naar schrijven en dan weer sluiten. Dit gaat goed zolang iemand alleen maar aan het Internetten is, maar zodra heel veel ge-typed gaat worden (verslagen etc) dan moet je toch echt naar een andere oplossing gaan kijken.
In het geval van het gebruik van system-wide hooks, zou het volgende een wat elegantere oplossing zijn:
-een DLL schrijven (verplicht bij system-wide hooks) met daarin de callback functie.
-een enkele applicatie welke dienst doet als 'monitor'. Indien je callback functie wordt aangeroepen, dan stuurt deze een berichtje naar de 'monitor' applicatie met daarin welke toets is aangeslagen en vanuit welk programma. De 'monitor' applicatie heeft constant de logfile open staan en kan de ontvangen informatie onmiddelijk wegschrijven naar file.
Het berichtje zou je kunnen versturen door aanroep van de 'SendMessage' functie met als type 'WM_COPYDATA'. Daarvoor moet je ook weer een aantal dingen doen:
-Creër een onzichtbaar window in je 'monitor' applicatie met een bepaalde unieke 'classname'. Dit window (of liever zijn message-thread) ga je gebruiken om de berichten die van jouw DLL afkomen op te vangen
-Jouw DLL moet weten waar dat het onzichtbare window van jou 'monitor' applicatie zich bevindt. M.a.w.: je DLL moet in staat zijn om de windowhandle van het onzichtbare window op te vragen. Dat kan zo:
FindWindow(...classname..., ...windowname...)
Het kan allemaal nog veel mooier en beter, maar dat is aan jou. Ik hoop dat ik je een beetje begrijpt wat ik heb opgeschreven. Ik ben er wel vanuit gegaan dat je wel wat programmeer/systeem kennis hebt. Ik heb een hoop dingen overgeslagen en ben hier en daar wat kort door de bocht gegaan, want jij moet het programma zelf schrijven.
E.a. is afhankelijk van de performance van het computer-systeem. Een P4 3Ghz. uitgerust systeem kan een hogere belasting aan, dan een P1 166Mhz.
Lees hier maar eens: http://msdn.microsoft.com...ions/setwindowshookex.asp
Een system-wide hook krijg je door de laatste parameter van de functie 'SetWindowsHookEx' op '0' te initialiseren.
[ Voor 65% gewijzigd door Primal op 24-07-2003 11:18 ]
"The fastest code, is the code that is never called."
Is het niet veel handiger om een aparte gebruiker aan te maken die 'niets' mag dmv policies ed? Scheelt jou werk mbt programmeren, je systeem wordt er niet trager van en je zusje kan chatten met haar vriendinnetjes zonder dat ze zorgen hoeft te maken dat jij alles terug leest.Verwijderd schreef op 23 juli 2003 @ 19:50:
is idd een NT os, nl 2k pro
het moet alleen niet te moeilijk worden:P
Verwijderd
Als je alleen maar wilt dat het op de achtergrond draait hoef je geen service te maken. Je kan dan (mits het een commandline proces is) hem gewoon detached starten. Kijk even in de MSDN voor de functie CreateProcess, dan vind je daar meer over. Je kan waarchijnlijk ook kant en klare tools downloaden voor het detached starten van een proces...
Verwijderd
kijk ook eens op http://www.astalavista.com/tools/utilities/keylogger/ als je er programmatisch niet uit komt.
Ik heb trouwens een keylogger geschreven die gewoon als programma op de achtergrond draait. Neemt heel weinig resources (op een snelle pc niet veel van te merken). Wel in delphi... vind ik een fijnere taal.
werkt gewoon met SetWindowsHookEx
Voobeeld code is genoeg beschikbaar
Ik heb trouwens een keylogger geschreven die gewoon als programma op de achtergrond draait. Neemt heel weinig resources (op een snelle pc niet veel van te merken). Wel in delphi... vind ik een fijnere taal.
werkt gewoon met SetWindowsHookEx
Voobeeld code is genoeg beschikbaar
[ Voor 70% gewijzigd door Verwijderd op 24-07-2003 14:07 ]
Pagina: 1