Hardware Keylogger

Gast #1303038
Lesenswert?

Guten Morgen.

Wir machen zur Zeit in der Schule ein Informatik Projekt, wo sich jeder 
aussuchen kann, was man gerne verwirklichen möchte.

Ich habe mich für einen Hardware Keylogger entschieden. Der Kursleiter 
meinte auch, dass dies kein allzugroßes Problem darstellen sollte. Nunja 
wir haben bisher nur LED´s angesteuert....

Gedacht ist es, dass wir mit unsererm uController (Atmel) eine Tastatur 
anschließen, und über die serielle Schnittstelle direkt ausgeben. 
Wollten dies erst mit einem EEPROM lösen, ist aber noch viel 
komplizierter.

Was wir brauchen (vermuten):
- +5V
- GND
- DATA

Pinbelegung am PS2 Stecker ist uns klar und auch wie das Protkoll mit 
den Scancodes fungiert. Allerdings wissen wir nicht wie wir damit 
Anfangen sollen und zerbrechen uns jeden Tag den Kopf darüber.

Würde mich über eine Antwort freuen.

PS: Wir programmieren in Assembler.
(Firma: TravelRec.) Persönliche Seite #1303043
Lesenswert?

CLOCK haste vergessen.

www.marjorie.de

Anfangen tut man am Anfang. Empfehlenswert ist das AVR-Tutorial und die 
ATMEL Datenblätter. Das Programm selber fängt die Scancodes ab und formt 
sie in ASCII- oder HEX-werte um, die über die Serielle Schnittstelle 
ausgegeben werden. Mit einem Terminal-Programm oder Portmonitor 
kontrolliert man das Ergebnis am PC.
Gast #1303056
Lesenswert?

Ja die Seite ist mir bereits bekannt. Ist die Variante mit dem EEPROM.
Also auf der Seite die  Travel Rec. gepostet hat, findet zumindest schon 
mal die Scancodes.

Wir müssen es halt irgendwie schaffen CLK abzufragen, und dann das ganze 
mit einer Tabelle lösen (Scancodes).

Uns ist schon klar, wie es funktioniert, nur es scheitert dann am 
Programmieren..
Gast #1303066
Lesenswert?

die tastatur ist immer ein slave. im normalfall ist pc der host. Wenn du 
die µC kiste vorschaltest sind zwei modi denkbar:

µC ersetzt pc und bedient die Tastaur mit allen konfig-daten
oder
(was für mich in eurem Fall für bessere Alternative erscheint): ein 
transparentmode, sprich eure kiste steckt zwischen pc und tastatur und 
gibt die daten 1:1 weiter. nebenbei kann der zweite pc die daten über 
serielle oder usb mithören.
(Firma: TravelRec.) Persönliche Seite #1303069
Lesenswert?

>die tastatur ist immer ein slave. im normalfall ist pc der host. Wenn du

Ja, aber die Tastatur gibt immer die CLOCK und im Sendefall auch DATA 
vor und diese muß also abgefragt werden. Was der PC damit macht, kann 
dem Logger relativ Schnitte sein. Er muß allerdings unterscheiden 
können, ob die Tastatur oder der PC (zum Beispiel Konfig- oder 
Steuerdaten) sendet
Gast #1303081
Lesenswert?

richtig

deswegen transparent mode.

jeder pc behandelt tastatur anders, warum also sich etwas ausdenken, 
wenn es schon da ist (bez. auf config string).

die tastatur sendet (gibt CLK und Data raus) wenn sie darf. Dies muß der 
host auch können.
Gast #1303104
Lesenswert?

Auf der Atmel Homepage gibt es eine Application Note (für Atmega) mit 
Beispielcode in C zum einlesen der Zeichen einer PS2-Tastatur. Ist recht 
schön geschrieben, wirste schon finden.
Dort wurde für die Scan-Codes ein hübsches Array geschrieben.
Gast #1303273
Lesenswert?

Ihr schreibt ihr von "Transparent Mode" und von irgendwelchen Strings, 
ich weiß nichtmal wo anfangen ^^

Hab das hier gefunden:
http://www.atmel.com/dyn/resources/prod_documents/doc1235.pdf

Ist aber in C geschrieben.

Da ist doch bereits die Serielle Schnitstelle im Quellcode?
Allerdings versteh ich die Pin Belegung nicht so ganz. (Quellcode)

Wäre es einfach wenn man es in Assembler schreibt?
#1303404
Lesenswert?

solange das gilt:

> Ihr schreibt ihr von "Transparent Mode" und von irgendwelchen Strings,
> ich weiß nichtmal wo anfangen

ist diese Frage

> Wäre es einfach wenn man es in Assembler schreibt?

eindeutig mit NEIN zu beantworten.

Solange du die grundlegende Idee (=Algorithmus) nicht verstanden hast, 
ist es egal ob das in C, Assembler oder in klingonisch formuliert ist.
Gast #1304554
Lesenswert?

LOL!

Also ein einfaches Projekt ist das nicht. PS/2 ist ein ziemlich 
grottiges Interface, das zudem noch schlecht dokumentiert ist.

Als Keylogger ist das Problem, dass man keinerlei 
Handshaking-Möglichkeiten hat und damit die Daten akzeptieren können 
muss wann immer sie ankommen. Damit wird die Programmierung sehr 
zeitkritisch. C oder andere Hochsprachen würde ich auf keinen Fall für 
diese Anwendung empfehlen, das wird nur was in Assembler mit 
handverlesenem Code.
#1304564
Lesenswert?

Mokka schrieb:
> Guten Morgen.
>
> Wir machen zur Zeit in der Schule ein Informatik Projekt, wo sich jeder
> aussuchen kann, was man gerne verwirklichen möchte.
>
> Ich habe mich für einen Hardware Keylogger entschieden. Der Kursleiter
> meinte auch, dass dies kein allzugroßes Problem darstellen sollte. Nunja
> wir haben bisher nur LED´s angesteuert....

Dann solltest du keinen derart grossen Sprung machen.
Mach dein Projekt über etwas, von dem du wenigstens ein bischen Ahnung 
hast. Zb. Ein Knight-Rider Lauflicht mit fliessenden Übergängen zwischen 
den Leds oder eine LED-Matrix aus 8 * 8 Led auf denen man PONG spielen 
kann, oder ...

> PS: Wir programmieren in Assembler.

Dann solltest du erst recht bei deinen Leisten bleiben und dich in 
bekanntem Wasser bewegen.
Gast #1305120
Lesenswert?

Also wenn es nur eine Ausgabe der von der Tastatur gesendeten Daten und 
nur derer über die serielle Schnittstelle geht, dann hab ich da schon 
was fertiges für euch:

Beitrag "Re: AT-Tastatur - PC - µC "einschleifen" -> RS232"

Die Scancode->ASCII-Umwandlung ist nicht dabei, aber aus der Atmel 
Appnote oder woanders zu entnehmen.

Danke für deine Hilfe damals, Travel Rec. !!!

MisterMime
Gast #1311646
Lesenswert?

@ Mister Mime: Ist leider alles in C geschrieben. Kann nur etwas 
Assembler und Java..

Bin bereits soweit...

-------------------------------------------

clk equ P3.0     ;Pins belegen
daten equ P3.1

org 0
;negative flanke prüfen    // Datenaustausch von Tastatur zum PC

loop:
  jnb clk,loop
  loop1:
    jnb daten,loop1
    jb daten,loop
  jb clk,loop1
  mov a,#0
  acall datenerfassung

datenerfassung:
  mov R7,#0
  inc R7
  cjne R7,#11,ziel2
  ;xxxxxxxxxxxxxxxxxxx
      ; verglich von Z0
  ;xxxxxxxxxxxxxxxxxxx
  mov R5,#daten
  rlc a
  mov a,R5
    ret

  ;xxxxxxxxxxxxxx
    ; ausgabe von R5 (serielle schnittstelle)
  ;XXXXXXXXXX
   ziel2: ret
--------------------------------------------------------------
#1311662
Lesenswert?

wenn org = 0 dann sollte ein Sprung in die Main erfolgen.
Da vorne liegen Vectoren für die Int. Und den SP ordentlich laden.

zB.: jmp  main
; die Vectoren

; die Main zB. ab 30h
     mov  sp,#20h

Die Main könnte dann wegen mir bei 30h beginnen. Kommt darauf an 
wieviele Call nachher kommen. Entsprchender Platz für den Stack muss 
sein.
Du kannst den Stack auch nach hinten legen, wenn Du weist wo Dein Proggi 
zu Ende ist..

nach "Acall Datenerfassung" fehlt was. Er würde danach "endlos" laufen, 
bzw. von Vorne beginnen. Er kommt ja mit Ret zurück.
Im einfachsten fall einen Jmp auf den richtigen Anfang.
Typischer Weise läuft eine Main als Endlosschleife in welcher Zustände 
und Variablen abgefragt und entsprechende Aktionen ausgeführt werden.
Danach geht´s wieder von vorn los.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren