钩子程序

使用Python打造一款间谍程序

走远了吗. 提交于 2020-03-24 16:47:35
知识点 这次我们使用python来打造一款间谍程序 程序中会用到许多知识点,大致分为四块   win32API 此处可以在MSDN上查看   Python基础重点在cpytes库的使用,使用方法请点击 此处   C语言基础   Hook ​ 程序的基本原理在于通过注册Hook,记录系统事件 那么什么是Hook呢 Hook 技术又叫做钩子函数,系统在调用函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递 注册Hook时我们需要先导入DLL库,在Python中我们使用ctypes来导入,导入方法如下 user32 = CDLL("user32.dll") kernel32 = CDLL("kernel32.dll") 我们导入了user32.dll和kernel32.dll 这两个DLL有什么用处呢    user32.dll   是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息   kernel32.dll  控制着系统的内存管理、数据的输入输出操作和中断处理 流程部分 知道了我们要使用什么样的工具,那么第一步应该怎么做呢 1.首先我们需要先注册Hook到系统上,通过user32.dll中的SetWindowsHookExA函数

SetWindowsHookEx的用法

馋奶兔 提交于 2020-03-01 02:46:21
HOOK钩子详细介绍 基本概念 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监 视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理 window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有 到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强 制结束消息的传递。 运行机制 1、钩子链表和钩子子程: 每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针 指向指定的,应用程 序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。 一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始, 而最早安装的钩子放在最后,也就是后加入的先获得控制权。 Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表

kill -9 vs kill

别来无恙 提交于 2020-02-29 21:48:12
no no no.不要使用kill -9. 它没有给进程留下善后的机会: 关闭socket链接 清理临时文件 将自己将要被销毁的消息通知给子进程 重置自己的终止状态 等等。 通常,应该发送15,等一两秒钟,如果没效果,发送2,如果还不行,发送1。如果还不行,那你应该把那个程序删掉,因为那个程序写的太烂了! 不要使用kill -9。不要用收割机来修剪花盆里的花。 Randal Schwartz,Perl Expert 本想自己写一篇,碰巧在 外刊IT评论 上看到了,就不重复了。 在Java中,如果使用 Runtime#addShutdownHook(Thread) 方法为应用添加了钩子,这时使用kill -9,这个钩子是不会执行的。如果想让钩子执行成功,应该使用kill -15(就是默认的不带参数的kill)。 来源: oschina 链接: https://my.oschina.net/u/178410/blog/277256

Dll注入:Windows消息钩子注入

北城余情 提交于 2020-02-26 23:01:48
SetWindowsHook() 是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。 钩子机制允许应用程序截获处理window消息或特定事件。 HHOOK WINAPI SetWindowsHookEx( __in int idHook, \\钩子类型 __in HOOKPROC lpfn, \\回调函数地址 __in HINSTANCE hMod, \\实例句柄 __in DWORD dwThreadId); \\线程ID 使用API函数SetWindowsHookEx()把一个应用程序定义的钩子子程安装到钩子 链表 中。 SetWindowsHookEx函数总是在Hook链的开头安装Hook子程。当指定类型的Hook监视的事件发生时,系统就调用与这个Hook关联的 Hook链的开头的Hook子程。每一个Hook链中的Hook子程都决定是否把这个事件传递到下一个Hook子程。Hook子程传递事件到下一个 Hook子程需要调用CallNextHookEx函数。 系统钩子 SetWindowsHookEx()函数的最后一个参数决定了此钩子是 系统钩子 还是线程钩子。 线程钩子 线程勾子用于监视指定线程的事件消息。线程勾子一般在当前线程或者当前线程派生的线程内。

Hook学习

守給你的承諾、 提交于 2020-02-05 16:56:06
转载: 一、基本概念: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。 二、运行机制: 1、钩子链表和钩子子程: 每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。 Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子

GitHook 工具 —— husky介绍及使用

自作多情 提交于 2020-02-03 21:41:14
名称 githooks-Git使用的挂钩。( githook在官网的介绍 ) 描述 挂钩是可以放置在挂钩目录中的程序,可在git执行的某些点触发动作。没有设置可执行位的钩子将被忽略。 默认情况下, hooks 目录是 $GIT_DIR/hooks ,但是可以通过 core.hooksPath 配置变量来更改(请参见 git-config [1] )。 HOOKS(钩子)的几种情况 1. applypatch-msg (应用程序消息) 这个钩子由 git am 调用。它只有一个参数,即保存建议的提交日志消息的文件的名称。以非零状态退出会导致 git am 在应用补丁之前中止。 该挂钩允许在适当位置编辑消息文件,并可用于将消息规范化为某些项目标准格式。检查消息文件后,它也可以用于拒绝提交。 启用后,默认的 applypatch-msg 挂钩将运行 commit-msg 挂钩(如果后者已启用)。 2. pre-applypatch (应用前批处理) 这个钩子由 git am 调用。它不接受任何参数,并在应用补丁程序之后、提交之前调用。 如果它以非零状态退出,则在应用补丁程序后将不会提交工作树。 它可以用来检查当前的工作树,如果不通过某些测试,则拒绝提交。 默认的 pre-applypatch 钩子在启用时运行 pre-commit 钩子(如果后者已启用)。 3. post

C#简单游戏外挂制作(以Warcraft Ⅲ为例)

孤人 提交于 2020-01-03 03:26:58
网上有很多外挂制作的教程,大多是讲针对大型网络游戏的,主要包含一些抓包、反汇编、C++的知识综合。事实也如此,常见的外挂都是使用VC++写的,从来没有过C#或者其他.NET语言编写的外挂。 作为微软.NET技术的忠实粉丝,这难免是一种遗憾。不过不要紧,下面流牛木马就教大家两招,包教包会,免收学费。 :) 其实作为游戏外挂来说,主要就是三个功能:模拟键盘操作、模拟鼠标操作、修改内存数据。修改内存数据比较难,但模拟鼠标键盘的操作却很简单。很多流行游戏的外挂,都可以只通过模拟鼠标键盘来实现,例如:劲舞团、QQ音速、连连看、各类网页游戏,以及各类大型网游中的自动打怪、自动吃药等等。 Warcraft Ⅲ,学名魔兽争霸之冰封王座,俗称魔兽,简称war3,在最近六七年风靡全球。最近两年,war3在中国又掀起了玩DOTA的新高潮。 本文制作DOTA游戏中的显血、改键外挂为例,简单地介绍如何使用C#语言制作游戏外挂。 最终界面如下: 本示例包含两个功能:显血;将Q键改为小键盘的7键。玩war3的同学都知道,这两个功能对于war3(尤其是DOTA)相当重要。 首先简单介绍一下,外挂程序模拟键盘的原理。 外挂程序与游戏程序是两个不同的进程。外挂程序使用Windows提供的API找到游戏程序的进程,并设置键盘钩子(什么叫做钩子?你不知道,但 百度知道 。)设置完钩子后,我们再监控游戏进程中用户的按键

dnf小小外挂外挂原理及使用

≯℡__Kan透↙ 提交于 2020-01-03 03:26:37
dnf小小外挂几乎所有的中都使用了鼠标来改变角色的位置和方向,玩家仅用一个小小的鼠 标,就可以使角色畅游天下。 那么,我们如何实现在没有玩家的参与下角色也可以自动行走呢。其实实现这个并不 难,仅仅几个Windows API函数就 可以搞定dnf小小外挂,让我们先来认识认识这些API函数。   (1) 模拟鼠标动作API函数mouse_event,它可以实现模拟鼠标按下和放开等动作。     VOID mouse_event(       DWORD dwFlags, // 鼠标动作标识。       DWORD dx, // 鼠标水平方向位置。       DWORD dy, // 鼠标垂直方向位置。       DWORD dwData, // 鼠标轮子转动的数量。       DWORD dwExtraInfo // 一个关联鼠标动作辅加信息。     );   其中,dwFlags表示了各种各样的鼠标动作和点击活动,它的常用取值如下:    MOUSEEVENTF_MOVE 表示模拟鼠标移动事件。    MOUSEEVENTF_LEFTDOWN 表示模拟按下鼠标左键。    MOUSEEVENTF_LEFTUP 表示模拟放开鼠标左键。    MOUSEEVENTF_RIGHTDOWN 表示模拟按下鼠标右键。    MOUSEEVENTF_RIGHTUP 表示模拟放开鼠标右键。

Tomcat 关闭钩子

微笑、不失礼 提交于 2019-12-17 18:22:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 使用JAVA的过程中,经常遇到程序启动时初始化一下资源,或生成一下临时文件,程序退出时要清除这些临时文件,或者程序退出时执行一下必要的其他操作。如果程序是通过我们提供的关闭/退出按钮正常退出的,一切还都好处理,但是如果用户直接关闭虚拟机运行的窗口,那一切就会变的比较复杂。 好在java提供了一种优雅的方式去解决这种问题。使得关闭的善后处理的代码能执行。java的关闭钩子能确保总是执行,无论用户如何终止应用程序。除非用户kill,这个是个死穴。 对 java 而言,虚拟机会对以下几种操作进行关闭: (1)系统调用System.exit()方法 (2)程序最后一个守护线程退出时,应用程序正常退出。 (3)用户强行中断程序运行,比如ctrl+c等其他方式中断java程序 关闭钩子的生成: 1.创建Thread的子类 2.实现run方法,应用程序关闭时会调用该方法,不需要调用start方法 3.在应用中实例化关闭钩子类 4.使用Runtime注册关闭钩子 下面是一个使用关闭钩子的例子: public class ShutDownHook extends Thread{ public static void main(String[] args){ Runtime.getRuntime().addShutdownHook

驱动保护:挂接SSDT内核钩子(1)

匿名 (未验证) 提交于 2019-12-03 00:09:02
SSDT 中文名称为系统服务描述符表,该表的作用是将Ring3应用层与Ring0内核层,两者的API函数连接起来,起到承上启下的作用,SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基址、服务函数个数等,SSDT 通过修改此表的函数地址可以对常用 Windows 函数进行内核级的Hook,从而实现对一些核心的系统动作进行过滤、监控的目的,接下来将演示如何通过编写简单的驱动程序,来实现搜索 SSDT 函数的地址,并能够实现简单的内核 Hook 挂钩。 在开始编写驱动之前,我们先来分析一下Ring3到Ring0是如何协作的,这里通过C语言调用 OpenProcess 分析它的执行过程来确定程序是如何协作的,先来创建一个C程序。 来源:博客园 作者: lyshark 链接:https://www.cnblogs.com/LyShark/p/11558680.html