Keyboardlogger op basis van een Atmel AT90S2313 inclusief layout.

 



Informatie

Ik had behoefte aan een apparaat wat alle toetsaanslagen van een at keyboard kon loggen en vasthouden tot via de serieel poort wordt uitgelezen. Hieronder kun je zien dat het ontwerp aardig gelukt is, tevens vindt je hier de layout (PDF) en de sourcecode voor het project.

Technische informatie

De keyboardlogger is geschikt voor alle pc's incl. laptops. De gebruikte controller is er 1 van Atmel, Verder worden de toetsaanslagen opgeslagen in een serieele eeprom. Het uitlezen van het apparaat gaat via en een terminal programma.

Eventueel is de Atmel controller geprogrammeerd te verkrijgen zodat je niet eerst nog eens een programmer voor de gebruikte Atmel controller hoeft te maken.

De sourcecode voor de Atmel microcontroller

De source is geschreven in Bascom (www.mcselec.com).

Declare Sub Writei2c(byval Pos As Word , Byval A As Byte)
Declare Function Readi2c(byval Pos As Word) As Byte
Config Keyboard = Pind.2 , Data = Pind.4 , Keydata Dim A As Byte
Dim B As Byte
Dim Pos As Word
Disable Interrupts
Open "COMD.6:9600,8,N,1,INVERT Pos = 0
Config Scl = Portd.3
Config Sda = Portd.5
Pos = 0
Wait 10
For Pos = 0 To 8191
B Print #1 , Chr(b);
Next
Pos = 0
Do
A = Getatkbd()
If A > 0 Then
Incr Pos
Call Writei2c

End If
Loop
End

Keydata:

'normal keys lower case

Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,

Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0

Data 0 , 99 , 120 , 100

Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0

Data 0 , 44 , 10

Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0

Data 0 , 60 , 0 , 0 , 0 , 0 , 8

Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0

 

'shifted keys UPPER case

Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0

Data 0 , 67 , 88 , 68 , 69 ,

Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0

Data 0 , 0 , 0 , 0 , 0

Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 5

Sub Writei2c(byval Pos As Word , Byval A As Byte)
Local Z As Byte
I2cstart
I2cwbyte &B10100000
Z = Low(pos)
I2cwbyte Z
I2cwbyte A
I2cstop
Waitms 10
End Sub
Function Rea Local Z As Byte
I2cstart
I2cwbyte &HA0
Z = High(pos)
I2cwbyte Z
Z = Low(pos)
I2cwbyte Z I2crbyte A , Nack
If Err => 0 Then Print #1 , "error"
I2cstop
Readi2c = A
End Function