如何用Python监听软件?

我们常听说:如果要操作某个软件或者监听某个软件的话,可以使用钩子(Hook)钩住软件,那这是如何操作的呢?用Python又如何实现呢?

本教程我们将通过注册Hook打造一款间谍程序,来监听win系统的笔记本,先给大家演示下效果吧!

一、Hook 技术

程序的基本原理在于通过注册Hook,记录系统事件。

那么什么是Hook呢?

Hook 技术又叫做钩子函数,系统在调用函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递

注册Hook时我们需要使用到两个DLL库:user32.dllkernel32.dll。这两个DLL有什么用处呢:

user32.dll:是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息

kernel32.dll:控制着系统的内存管理、数据的输入输出操作和中断处理

二、实现

了解了钩子的用处,那我们就来正式开始实现吧!

1.注册钩子

首先我们需要先注册Hook到系统上,通过user32.dll中的SetWindowsHookExA函数我们可以在系统上注册钩子。

通过查看 微软官方文档(https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-setwindowshookexa) ,我们看到SetWindowsHookExA函数的参数及参数类型如上所示。

我们简单介绍一下关于这几个参数的含义:

idHook:钩子的类型,可以监听消息、键盘、鼠标等等,这里我们来监视低级键盘输入事件作为案例演示!

lpfn:钩子函数,这里就表示你监听到事件后要怎么处理,核心作用!

hmod:DLL句柄(类似编 ),我们可以使用kernel32中的GetModuleHandleW来获取句柄

dwThreadId:我们填入0代表与同一桌面上所有的线程关联

上图中的代码我们可以看出使用的是C++语法,这时候Python中的ctypes库就可以助我们一臂之力!

ctypes 是 Python 的外部函数库。它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的函数。可使用该模块以纯 Python 形式对这些库进行封装。

Python使用ctypes库注册钩子代码:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年8月23日
下一篇 2021年8月23日

相关推荐