40.设计HOOK引擎的好处

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

上一个内容:39.右键弹出菜单管理游戏列表

以 39.右键弹出菜单管理游戏列表 它的代码为基础进行修改

效果图:

实现步骤:

首先在Dlls项目中窗口ID位IDD_WNDMAIN里面添加下图中两个控件

然后添加给按钮点击时触发的函数中如下图中的实现:

void CWndMain::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);int* hp = (int*)0x4CEF18;wInfo.Format(L"HP: %d/%d", hp[0], hp[1]);UpdateData(FALSE);unsigned decx = 0x4CEF08;unsigned dcall = 0x41FD40;_asm {push 0x02push 0x9999mov ecx, decxcall dcall}
}

然后给输入框添加一个变量如下图:

Dlls.cpp文件中钩子函数做出了修改,KeyCallBack函数

// Dlls.cpp: 定义 DLL 的初始化例程。
//#include "pch.h"
#include "framework.h"
#include "Dlls.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif//
//TODO:  如果此 DLL 相对于 MFC DLL 是动态链接的,
//        则从此 DLL 导出的任何调入
//        MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
//        该函数的最前面。
//
//        例如: 
//
//        extern "C" BOOL PASCAL EXPORT ExportedFunction()
//        {
//            AFX_MANAGE_STATE(AfxGetStaticModuleState());
//            // 此处为普通函数体
//        }
//
//        此宏先于任何 MFC 调用
//        出现在每个函数中十分重要。  这意味着
//        它必须作为以下项中的第一个语句:
//        出现,甚至先于所有对象变量声明,
//        这是因为它们的构造函数可能生成 MFC
//        DLL 调用。
//
//        有关其他详细信息,
//        请参阅 MFC 技术说明 33 和 58。
//// CDllsAppBEGIN_MESSAGE_MAP(CDllsApp, CWinApp)
END_MESSAGE_MAP()// CDllsApp 构造CDllsApp::CDllsApp()
{// TODO:  在此处添加构造代码,// 将所有重要的初始化放置在 InitInstance 中isShowWindow = TRUE;
}// 唯一的 CDllsApp 对象CDllsApp theApp;
CDllsApp* PtheApp;// CDllsApp 初始化
HHOOK keyHook;
LRESULT CALLBACK KeyCallBack(int nCode, WPARAM w, LPARAM l);
BOOL CDllsApp::InitInstance()
{CWinApp::InitInstance();PtheApp = this;keyHook = SetWindowsHook(WH_KEYBOARD, KeyCallBack);return TRUE;
}LRESULT CALLBACK KeyCallBack(int nCode, WPARAM w, LPARAM l) {if (nCode == HC_ACTION) {if (l & (1 << 31)) {switch (w){case VK_HOME: {if (PtheApp->wndMain == NULL) {PtheApp->wndMain = new CWndMain();PtheApp->wndMain->Create(IDD_WNDMAIN);}PtheApp->wndMain->ShowWindow(PtheApp->isShowWindow);PtheApp->isShowWindow = !PtheApp->isShowWindow;break;}default:break;}}}return CallNextHookEx(keyHook, nCode, w, l);
}

OnBnClickedButton1函数中实现的自杀与读取游戏数据功能就非常简单方便直接把游戏进程中真正存在的地址拿来用,hook引擎带来的好处就是可以当做得到了游戏源码来进行编程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【海思Hi3403V100】多目拼接相机套板硬件规划方案

海思Hi3403V100 是专业超高清智能网络摄像头 SoC。该芯片最高支持四路 sensor 输入&#xff0c;支持最高 4K60fps 的 ISP 图像处理能力&#xff0c;支持 3F 、WDR、多级降噪、六轴防抖、硬件拼接、多光谱融合等多种传统图像增强和处理算法&#xff0c;支持通过AI 算法对输入图像…

视觉灵感的探索和分享平台

做设计没灵感&#xff1f;大脑一片空白&#xff1f;灵感是创作的源泉&#xff0c;也是作品的灵魂所在。工作中缺少灵感&#xff0c;这是每个设计师都会经历的苦恼&#xff0c;那当我们灵感匮乏的时候&#xff0c;该怎么办呢&#xff1f;别急&#xff0c;即时设计、SurfCG、Lapa…

基于sivaco设计仿真PT型IGBT和NPT型IGBT结构

本项目基于使用仿真软件SIVACO来仿真研究PT型和NPT型的IGBT结构特点&#xff0c;并且通过仿真研究对于不同的掺杂浓度、沟道宽度等对器件的特性产生不同的影响。 资料获取到咸&#x1f41f;&#xff1a;xy591215295250 \\\或者联系wechat 号&#xff1a;comprehensivable &…

HTML(15)——盒子模型

盒子模型组成 内容区域 -width&height内边距-padding &#xff08;出现在内容与盒子边缘之间&#xff09;边框线-border外边距-margin &#xff08;出现在盒子外面&#xff09; div { width: 200px; height: 200px; background-color: rgb(85, 226, 193); padding: 20px; …

未来一周比特币价格及数字货币市场预测

荷月的比特币市场就像过山车一样&#xff0c;仅仅六月下旬就跌去-12%&#xff0c;本周更是暴跌-6%&#xff0c;至 58,378美元。在这种市场表现&#xff0c;应有的踩踏如期而至。德国政府今日宣布再出售750 比特币的行为继续打击多头&#xff0c;但是小编认为这恰恰预示着市场可…

【Linux进阶】基础IO函数详解

1.函数open和openat 调用open或openat函数可以打开或创建一个文件。 #include <fcntl.h> int open(const char *path, int ofag, ... /* mode_t mode */);int openat (int fd, const char *path, int oflag, ... /* mode_t mode */); 我们将最后一个参数写为...&#x…

昇思25天学习打卡营第4天|数据变换 Transforms

昨天看到数据集&#xff0c;今天继续。 数据变换 众所周知&#xff0c;我们的原始数据基本不能直接丢进模型里面&#xff0c;需要作一定的操作才可以进行训练。 所以&#xff0c; mindspore为我们提供了一系列的数据变换手段。 针对图 调整像素的大小 ** Rescale **归一化 …

智慧会议会务解决方案

会务不仅仅是简单的活动策划&#xff0c;更是全方位的项目管理过程。然而&#xff0c;目前的会务领域仍存在着一些问题&#xff0c;直接影响着会务的效果和质量&#xff0c;如&#xff1a; 会议前期策划时间长&#xff0c;会务人员需要收集参会人员资料&#xff0c;准备会议材…

[C++深入] --- 类成员初始化的三种方式

1 类成员初始化的三种方式 1.1 三种方式介绍 初始化方式一:初始化列表 class A {public:int a; // 初始化列表A(int a_):a(a_){} };初始化列表是在构造函数冒号后对成员进行初始化,这是在成员被分配内存的同时进行的初始化操作。这样避免了成员变量先被默认构造然后再赋值…

突然!某大客户核心凌晨突然崩溃....

这几天实在太忙&#xff0c;刚弄完文档。业务线的同事就找到我&#xff0c;说一个银行客户的核心系统昨晚出了故障&#xff0c;还没找到原因&#xff0c;希望能帮忙分析下。 从提供的信息来看是业务跑任务报错&#xff0c;遇到了Oracle-00600和ora-07445 错误。 Doing block re…

机器学习-数据预处理-聚类-回归-分类-单车数据集

机器学习-数据预处理-聚类-回归-分类-单车数据集 前言一、数据预处理1. 导入数据集2. 数据预处理3. 处理缺失值4. 生成特征用于后续进一步的分析 二、数据分布可视化1. 骑行时长分布2. 起始站和终点站分布可视化3. 高峰期与非高峰期骑行频次分布 三、聚类分析1. K-means聚类 四…

GPU和CPU的架构分别是怎样的,有什么本质区别?GPU及CPU的架构在AI上的不同,和他们的技术体系区别

GPU 和 CPU 的架构及其在 AI 上的不同 引言 CPU&#xff08;中央处理器&#xff09;和 GPU&#xff08;图形处理单元&#xff09;是计算机系统中最重要的两种处理器。它们各自的架构设计和技术体系决定了其在不同应用领域中的性能和效率。本文将详细分析 CPU 和 GPU 的架构&a…

【代码随想录算法训练营第五十一天|115.不同的子序列、583. 两个字符串的删除操作、72.编辑距离】

文章目录 115.不同的子序列[583. 两个字符串的删除操作](https://leetcode.cn/problems/delete-operation-for-two-strings/description/)72.编辑距离 115.不同的子序列 dp数组表示s和t中前i-1和j-1项中s中出现过的t的次数&#xff0c;递推公式中当选择到s的第i-1的元素和t[j-…

java.io.Closeable接口介绍

java.io.Closeable 是 Java 标准库中的一个接口,位于 java.io 包中。它用于表示可以关闭的资源,例如文件流、网络连接等。实现了 Closeable 接口的类可以通过调用 close() 方法来释放资源。这对于确保资源不被泄漏非常重要。 使用 Closeable 接口主要是为了确保在使用完某些…

雅思词汇及发音积累 2024.6.27

monument /ˈmɒnjumənt/ n.纪念碑&#xff0c;纪念馆&#xff0c;纪念物&#xff1b;遗址&#xff0c;名胜古迹&#xff1b;典范&#xff1b;塑像&#xff0c;墓碑&#xff1b;有永久价值的作品 描述人的外表、衣着 gender 性别 medium build 中等身材 average height 不高不…

elasticsearch运维系列_用户及角色权限相关SQL及脚本整理

这篇文章介绍ES运维过程中一些常用查询权限和角色的命令和脚本&#xff0c;以及如何查询某个索引可被系统中哪些用户访问。 Part1 查询用户及权限 1 查询所有用户 首先&#xff0c;获取所有用户的列表&#xff1a; -- 命令如下 curl -u elastic:esuser -X GET "http:/…

git rebase的使用

没有排版&#xff0c;但是干货 因为项目要求&#xff0c;所以使用rebase指令 我使用的是rebase 的分支变基的功能 情景描述&#xff1a; 一共有两个分支&#xff1a;master owner 我在owner分枝上开发&#xff0c;有好多次commit master上也有同事在正常commit&#xff0c; …

Vue2 - 首页登录实现随机验证码组件的封装与实现详解(详细的注释及常见问题汇总)

在网站首页等登录时,随机验证码在现代网络应用中扮演着重要的安全角色。为了帮助开发者轻松集成和使用随机验证码功能,本文将介绍如何利用 Vue.js 2 封装一个简单而功能强大的随机验证码组件。让你能够快速理解并应用这一组件到你的项目中。 一、解决方案 本文提供了完美便捷…

HMI 的 UI 风格,精妙无比

HMI 的 UI 风格&#xff0c;精妙无比

【Pillow】module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘问题解决

问题描述 我在使用 SummaryWriter 记录图片数据日志时&#xff0c;遇到了报错&#xff0c;如下图所示&#xff1a; 问题的原因在于&#xff0c;使用的pillow版本已经舍弃了ANTIALIAS&#xff0c;在新版本中已经改为了LANCZOS 问题解决 两种解决方式&#xff1a; 修改源码更…