Forum: Mikrocontroller und Digitale Elektronik Brauche Hilfe bei Keylogger


von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen, zum Zeitvertreib wollte ich mir mal einen Keylogger 
zusammenbasteln. Im Internet bin ich auf Folgendes gestoßen: 
http://steelrats.net/articles.php?article_id=178
Nun habe ich das Ganze nach Anleitung aufgebaut, Fuses entsprechend 
gesetzt, keylogger_tiny13_512.hex und keylogger_tiny13.eep geflasht. 
Leider funktioniert es nicht und ich kann nicht nachvollziehen warum. 
Das C-Programm verstehe ich leider nur zum Teil, da ich wenig Erfahrung 
mit I²C und EEPROM habe.
Der Controller ist ein AtTiny13V, der EEPROM ein 24LC512. Nachdem was 
ich im Internet gelesen habe sollte der 24LC512 kompartibel zum 24C512 
sein, oder etwa nicht?
Fuses sind: Interner RC-Oszillator 9,6MHz, ClkDiv8 = 1, BrownOut bei 
4,3V.
Flash und Verify waren erfolgreich und die Tastatur funktioniert auch 
mit Keylogger dazwischen einwandfrei. Wenn ich allerdings ein paar 
Zeilen zum Test im Notepad schreibe, die Tastatur dann abstecke und dann 
den Taster drücke, erscheint absolut nichts im Notepad.

Vielleicht kann ja jemand etwas mit dem C-Code anfangen und mir helfen.
Vielen Dank schon mal und ein schönes Wochenende

von Krapao (Gast)


Lesenswert?

Es gibt schon Unterschiede.

http://www.picbasic.co.uk/forum/showthread.php?t=5976
http://forums.parallax.com/showthread.php?106668-24lc512-or-24c512

Die Unterschiede betreffen lt. Links die Adressleitungen und die 
Arbeitsgeschwindigkeit.

Die Adressleitungen musst du im Schaltplan und deiner Hardware prüfen. 
Mir gefällt nicht, dass die im Originalschaltplan floaten. Das macht 
vielleicht bei den 24C512 nix aus, bei dem 24LC512 kann das eine Rolle 
spielen.

Die Arbeitsgeschwindigkeit auf dem Bus kannst du mit Delays 
runtersetzen. Problematisch könnte das Neuübersetzen werden. Mit der 
WinAVR Toolchain aus 2010 komme ich mit -Os und dem Originalcode bereits 
auf 101% Flashfüllgrad, d.h. zusätzlicher Code ist superübel!

von Stefan (Gast)


Lesenswert?

So, ich habe jetzt mal A0, A1, A2 und WP auf GND gelegt und den 24lC512 
durch einen 24C512 ersetzt (hatte ich überraschender Weise in der 
Bastelkiste entdeckt).
Resultat bleibt allerdings das gleiche: Funktioniert nicht.
Wenn ich eine Taste auf der Tastatur drücke, kann ich auf dem Oszi 
(analog) ein "Zuckeln" bei Keyboard-DATA und Keyboard-CLOCK verfolgen. 
Bei den EEPROM-Leitungen SCL und SDA tut sich leider garnichts. Ich 
vermute daher eher, dass es am AtTiny13V liegt. Da er sich flashen lässt 
müsste der interne RC-Oszillator egtl. schwingen. Reset liegt auch auf 
high, sollte also gehen.
Weiß jemand, ob sich Register oder ähnliches vom AtTiny13 zum AtTiny13V 
geändert haben? Konkret habe ich hier einen AtTiny13V-10PU. Hat jemand 
den Code soweit verstanden, dass er mir sagen kann wo ich die zu 
verwendende EEPROM Größe definiere?

MfG

von Stefan (Gast)


Lesenswert?

EDIT: War wohl blind beim letzten Post, der Parameter EEPROM_SIZE stellt 
wohl die gewünschte Größe ein. Muss ich hier für die gewünschten 512K 
den Wert 512*1024 = 524288 = 0x80000 eintragen?

von Krapao (Gast)


Lesenswert?

Wenn du neu übersetzt: ja. Allerdings sind in dem Download-ZIP von den 
Stahlratten verschiedene HEX-Dateien für verschiedene EEPROM-Größen 
drin.

von Krapao (Gast)


Lesenswert?

Die EEPROM_SIZE Angabe im Code oben ist eine Byte Angabe für ein 
externes 128K BIT EEPROM. Wenn du EEPROM_SIZE für ein 512K EEPROM 
eintragen willst, musst du den Wert 512 * 1024 / 8 angeben.

Die EEPROM_ADDR Slave Adresse ist 0b10100000, also 0xA0. Check das mal 
mit den Daten deines EEPROMs.

von Krapao (Gast)


Lesenswert?

Wie schnell wird dein AVR getaktet? Hast du die Fuse-Einstellungen von 
Stahlratte verwendet?

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Für EEPROM_SIZE hättte ich für 512k 512*1024 = 524288 = 0x80000 
eingetragen.
Laut Datenblatt ist die Adresse für den 24C512 und 24LC512 
folgendermaßen aufgebaut: 1010xxx wobei xxx jeweils für A0-A2 stehen. 
Bei A0 - A2 auf GND müsste EEPROM_ADDR 0b10100000 stimmen.
Fuses siehe Anhang.
Komisch finde ich nur, dass sich auf der I²C Verbindung zum EEPROM 
garnichts tut, was für mich nahelegt, dass der µC entweder nicht 
arbeitet oder der I²C falsch konfiguriert ist. Reset liegt auf +5V und 
der Controller lässt sich aus dem AVR-Studio heraus ansprechen. Leider 
kenne ich mich mit I²C garnicht aus.
MfG

von Krapao (Gast)


Lesenswert?

> Bei den EEPROM-Leitungen SCL und SDA tut sich leider garnichts.

Die 4.7K Pull-Up Widerstände auf dem I2C Bus hast du aber installiert, 
oder?

Das ist wichtig, weil die Pegel nur über das DDRB Register für den Pin 
eingestellt werden. Pin EINGANG mit externem Pull-Up ergibt HIGH und Pin 
Ausgang mit Defaultwert des PORT Registers ergibt LOW.

Hast du daran gedacht, die EEP Datei in das interne EEPROM des AVR zu 
programmieren? Das enthält die Startwerte für die Speicheradressen im 
externen EEPROM! Du kannst nach dem Drücken des Tasters auch mal das AVR 
EEPROM auslesen, ob das Programm dort was abgelegt hat, also soweit 
schon mal funktioniert.

von Krapao (Gast)


Lesenswert?

> Für EEPROM_SIZE hättte ich für 512k 512*1024 = 524288 = 0x80000
> eingetragen.

Und das wäre falsch gewesen. Im Code sieht man deutlich dass Bytes 
gezählt werden und keine Bits. Die Größenangabe des externen EEPROMs auf 
dem IC bzw in dessen Namen ist in Bits. Das musst du fürs Programm 
umrechnen, daher die Division durch 8.

von Krapao (Gast)


Lesenswert?

> Wie schnell wird dein AVR getaktet? Hast du die Fuse-Einstellungen von
> Stahlratte verwendet?

Dein Bild von den Fuses zeigt eine programmierte CKDIV8 Fuse. Das ist 
anders bei den Stahlratten. Dort wird im normalen Programm mit Fullspeed 
9.6 MHz gearbeitet und nur bei I2C Zugriffen auf 1.2 MHz 
runtergeschaltet.

Von dem Code
1
//#define I2C_DELAY  _delay_us(5);
2
//#define I2C_DELAY asm ("nop");
3
#define I2C_DELAY ;

Halte ich nicht viel. Man riecht förmlich, dass es hier bereits beim 
Original Probleme gab und es irgendwie zurecht gefummelt wurde. Die 
jetzige Lösung ohne Delay (wenn das auch im HEX so ist) und klappern 
mit dem DDR Register ist denkbar ungünstig.

Schau dir das Datenblatt deines EEPROMs an und versuche das Timing 
richtig zu implementieren. Dabei kann es helfen, wenn du dir ein kleines 
Pin-Klapper-Programm schreibst und das Timing auf deinem Oszi mal 
ausmisst.

von Stefan (Gast)


Lesenswert?

Oh Mann, diese Fuses... Der Satz
> Most of them are already set by default except CKDIV8. So you will turn on > 
internal 9.6 Mhz oscillator and divide its clock by 8.
hat mich verwirrt.
Der Keylogger funktioniert leider nur mäßig, Zeichen wie @€µ werden 
nicht erkannt und teilweis wird Kauderwelsch ausgelesen. Hängt wohl mit 
dem schlechten EEPROM Timing zusammen.
Leider scheint ein Neucompilieren unmöglich, da ich mit AVR-Studio 5.1 
auf 105,3% Codegröße komme und AVR-Studio 4.1 + AVR-GCC 20100110 spuckt 
folgende Fehlermeldung aus:

rm -rf key.o  key.elf dep/* key.hex key.eep key.lss key.map
Build succeeded with 0 Warnings...
mmcu=attiny13 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT key.o -MF 
dep/key.o.d  -c  ../key.c
/usr/bin/sh: -Wall: command not found
make: [key.o] Error 127 (ignored)
mmcu=attiny13 -Wl,-Map=key.map key.o     -o key.elf
/usr/bin/sh: -Wl,-Map=key.map: command not found
make: [key.elf] Error 127 (ignored)
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  key.elf 
key.hex
avr-objcopy: 'key.elf': No such file
make: *** [key.hex] Error 1
Build failed with 1 errors and 0 warnings...


Keine Ahnung was da wieder los ist ... Früher habe ich einfach 
AVR-Studio + AVR-GCC installiert und alles hat wunderbar geklappt, jetzt 
anscheinend nichtmehr, warum auch immer.

Auf Jeden Fall VIELEN, VIELEN DANK FÜR EURE UNTERSTÜTZUNG !!!
MfG

von Robert D. (d0rni)


Lesenswert?

Ich kann dir noch die Bauanleitung von http://www.keelog.com/diy.html 
empfehlen. Habe ich vor Jahren mal nachgebaut und funktionierte prima, 
ohne das man sich über den Code Gedanken machen muss. Gruss Robert

von Stefan (Gast)


Lesenswert?

Robert Dorn schrieb:
> Ich kann dir noch die Bauanleitung von http://www.keelog.com/diy.html
> empfehlen.

Darauf bin ich auch schon gestoßen, allerdings ist der Aufbau mit dem 
großen Controller und dem externen Quarz nicht so kompakt wie der von 
den Stahlratten. Werde den aber trotzdem mal auf Steckbrett aufbauen.

Für alle die das Thema noch interessiert und eher auf Microchip stehen:
http://www.radiolocman.com/shem/schematics.html?di=64169
Vielleicht taugt der ja was, der Aufbau ist jedenfalls in der 
SMD-Version kompakt realisierbar.

MfG

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.