当前位置: 首页 > news >正文

39.第二阶段x86游戏实战2-HOOK实现主线程调用

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

本次游戏没法给

内容参考于:微尘网络安全

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:38.第二阶段x86游戏实战2-HOOK窗口消息机制

上一个内容里写了HOOK主线程,本次就让我们的call到主线程里进行执行

主线程调用流程

首先如下图红框通过SendMessage函数把一个消息发送到Windows的消息队列中,它会发送三个用来做判断的数据,窗口句柄、消息idA、消息idB(一般这个消息idB和消息idA配合使用,一般消息idA表示系列函数,消息idB表示系列函数中哪一个函数)

然后通过SetWindowsHookEx函数给游戏主线程做HOOK,HOOK之后只要有消息就会调用 Call_主线程回调函数 函数

然后 Call_主线程回调函数 里判断是不是有消息号

CM.cpp文件的修改:修改了 OnBnClickedButton2函数(这是寻路按钮的点击事件处理函数)寻路修改为通过Windows消息队列调用

// CM.cpp: 实现文件
//#include "pch.h"
#include "tl.h"
#include "CM.h"
#include "afxdialogex.h"// CM 对话框IMPLEMENT_DYNAMIC(CM, CDialogEx)CM::CM(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_DIALOG1, pParent), edi_x(_T(""))
{}CM::~CM()
{
}void CM::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, edi_x);DDX_Text(pDX, IDC_EDIT2, edi_y);
}BEGIN_MESSAGE_MAP(CM, CDialogEx)ON_BN_CLICKED(IDC_BUTTON1, &CM::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &CM::OnBnClickedButton2)ON_BN_CLICKED(IDC_BUTTON3, &CM::OnBnClickedButton3)ON_BN_CLICKED(IDC_BUTTON4, &CM::OnBnClickedButton4)ON_BN_CLICKED(IDC_BUTTON5, &CM::OnBnClickedButton5)ON_BN_CLICKED(IDC_BUTTON6, &CM::OnBnClickedButton6)
END_MESSAGE_MAP()// CM 消息处理程序void CM::OnBnClickedButton1()
{R_人物属性 a;a.初始化();Call_输出调试信息("人物信息:人物状态%d",a.状态);
}void CM::OnBnClickedButton2()
{UpdateData(TRUE);CString str1 = edi_x;CString str2 = edi_y;// strtol((const char*)CW2A(str1.GetBuffer(0)), NULL, 10);把字符串转成int数字类型int x = strtol((const char*)CW2A(str1.GetBuffer(0)), NULL, 10);int y = strtol((const char*)CW2A(str2.GetBuffer(0)), NULL, 10);Msg_xl(x, y);
}void CM::OnBnClickedButton3()
{R_遍历背包 a;a.遍历背包();// 遍历背包CString str;str.Format(L"a数量 %d", a.d数量);AfxMessageBox(str);for (int i = 0; i < a.d数量; i++){Call_输出调试信息("tl怀旧   背包信息 dwObject -------------%X----------------\r\n", a.列表[i].dwObject);Call_输出调试信息("tl怀旧   背包信息 名字:%s\r\n", a.列表[i].pName.c_str());Call_输出调试信息("tl怀旧   背包信息 使用等级:%d\r\n", a.列表[i].p使用等级);Call_输出调试信息("tl怀旧   背包信息 简介:%s\r\n", a.列表[i].简介.c_str());Call_输出调试信息("tl怀旧   背包信息 数量:%d\r\n", a.列表[i].p数量);}}void CM::OnBnClickedButton4()
{// TODO: 在此添加控件通知处理程序代码R_周围遍历 a;a.遍历最近怪物();// 让怪物重新排列for (int i = 0; i < a.d数量; i++){Call_输出调试信息("人物信息:---------------------%s-----%x---------------------", a.列表[i].pName, a.列表[i].dwObject);Call_输出调试信息("人物信息:人物id:%x", a.列表[i].id);Call_输出调试信息("人物信息:人物X:%f 人物Y:%f", a.列表[i].fX, a.列表[i].fY);Call_输出调试信息("人物信息:人物类型:%x  人物距离:%f", a.列表[i].PType, a.列表[i].距离);}
}void CM::OnBnClickedButton5()
{// TODO: 在此添加控件通知处理程序代码R_遍历技能 a;a.AsmGetMonsterData();// 遍历技能for (int i = 0; i < a.d数量; i++){Call_输出调试信息("tl怀旧   技能信息 名字:---------------%s-----------------------\r\n", a.列表[i].pName.c_str());Call_输出调试信息("tl怀旧   技能信息 ID:%d\r\n", a.列表[i].pID);Call_输出调试信息("tl怀旧   技能信息 是否冷却:%s\r\n", a.列表[i].冷却.c_str());Call_输出调试信息("tl怀旧   技能信息 冷却ID:%x\r\n", a.列表[i].冷却ID);Call_输出调试信息("tl怀旧   技能信息 对象地址:%x\r\n", a.列表[i].dwObject);}
}void CM::OnBnClickedButton6()
{Call_Hook主线程();
}

新加Hook.h文件,把HOOK相关的代码全放到了这里面

#pragma once
#include "pch.h"DWORD Call_Hook主线程();
HWND Call_获取窗口句柄();
void Msg_xl(DWORD X, DWORD Y);
//DWORD Call_卸载Hook主线程();#define ID_寻路 0x902struct T寻路参数
{DWORD X;DWORD Y;
};

新加Hook.cpp文件

#include "pch.h"HHOOK g_Hook返回;
const DWORD g_My消息ID = RegisterWindowMessageA("MyMsyCode");// 注册一个消息号
HWND Call_获取窗口句柄()
{// 获取游戏存放的窗口句柄,通过CE搜索spy++的句柄找到的HWND hGame = (HWND)((DWORD)GetModuleHandleA("CEGUIBase.dll") + 0x251030);hGame = *(HWND*)hGame;return hGame;
}void Msg_xl(DWORD X, DWORD Y)
{T寻路参数 寻路;寻路.X = X;寻路.Y = Y;::SendMessageA(Call_获取窗口句柄(), g_My消息ID, ID_寻路, (LPARAM)&寻路);
}//主线程回调函数
LRESULT CALLBACK Call_主线程回调函数(int nCode, WPARAM wParam, LPARAM lparam)
{/*::SendMessageA(Call_获取窗口句柄(), g_My消息ID, ID_寻路, (LPARAM)&寻路);CWPSTRUCT类型的参数分别对应SendMessageA函数的入参,如下LPARAM  lParam =  (LPARAM)&寻路WPARAM  wParam = ID_寻路UINT    message = g_MyHWND    hwnd = Call_获取窗口句柄()*/CWPSTRUCT *lpArg = (CWPSTRUCT*)lparam;//结构  hwnd message wParam lParamif (nCode == HC_ACTION)//自己进程的消息{if (lpArg->hwnd == Call_获取窗口句柄() && lpArg->message == g_My消息ID)//我们自己的消息  {string luaText;switch (lpArg->wParam){T寻路参数*寻路;case ID_寻路:寻路 = (T寻路参数*)lpArg->lParam;Call_xunlu(寻路->X, 寻路->Y);return 1;break;}}}return CallNextHookEx(g_Hook返回, nCode, wParam, lparam);
}DWORD Call_Hook主线程()
{HWND hGame = Call_获取窗口句柄();// 通过句柄获取窗口的线程idDWORD ndThreadId = GetWindowThreadProcessId(hGame, NULL);if (ndThreadId != 0){// 注册窗口HOOK,SetWindowsHookEx是微软提供g_Hook返回 = SetWindowsHookEx(WH_CALLWNDPROC, Call_主线程回调函数, NULL, ndThreadId);}return 1;
}

上方的代码不全,只有手写的代码

完整代码:

链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg?pwd=q9n5

提取码:q9n5

复制这段内容后打开百度网盘手机App,操作更方便哦


img

相关文章:

39.第二阶段x86游戏实战2-HOOK实现主线程调用

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…...

wordpress argon主题美化方面

1、页面前端额外CSS&#xff1a; /*字体*/ font-face {font-family: myFont1; src:url(https://blog.yangmumu.com/css/fonts/Dancing.ttf) ;font-display: swap; } font-face {font-family: myFont2; src:url(https://blog.yangmumu.com/css/fonts/Regular.ttf) ;font-displa…...

qt QRadioButton详解

QRadioButton 是一个可以切换选中&#xff08;checked&#xff09;或未选中&#xff08;unchecked&#xff09;状态的选项按钮。单选按钮通常呈现给用户一个“多选一”的选择&#xff0c;即在一组单选按钮中&#xff0c;一次只能选中一个按钮。 重要方法 QRadioButton(QWidget…...

Qt 最小化,最大化,关闭窗口

Qt 最小化,最大化 在Qt中&#xff0c;你可以使用QWidget类提供的方法来实现窗口的最小化、最大化等操作。 最小化窗口 你可以使用QWidget的showMinimized()方法来最小化窗口。这将隐藏窗口并将其显示为系统托盘区域的图标。 connect(ui->btnMin,&QPushButton::click…...

【vue项目中添加告警音频提示音】

一、前提&#xff1a; 由于浏览器限制不能自动触发音频文件播放&#xff0c;所以实现此类功能时&#xff0c;需要添加触发事件&#xff0c;举例如下&#xff1a; 1、页面添加打开告警声音开关按钮 2、首次进入页面时添加交互弹窗提示&#xff1a;是否允许播放音频 以上两种方…...

百度SEO分析实用指南 提升网站搜索排名的有效策略

内容概要 在数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为提升网站曝光度的关键工具。本指南将带您了解SEO的基本知识&#xff0c;帮助您在复杂的网络环境中立足。我们将从关键词优化开始&#xff0c;重点讲解如何选择合适的关键词来提高搜索引擎排…...

高并发场景下的性能测试方法!

在现代互联网应用中&#xff0c;高并发场景下的性能测试显得尤为重要。无论是电商平台的秒杀活动&#xff0c;还是社交应用的突发流量&#xff0c;都需要确保系统能够在高并发情况下稳定运行。本文将详细介绍高并发场景下的性能测试方法&#xff0c;并提供具体的方案和实战演练…...

杂项——USB键盘与鼠标流量分析——BUUCTF——流量分析

第一次做USB键盘与鼠标流量分析的题目&#xff0c;现在来好好做一个总结 1. 基础知识 USB流量指的是USB设备接口的流量&#xff0c;攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。 在正式介绍 USB H…...

Java如何实现企业微信审批流程

大家好&#xff0c;我是 V 哥。最近的一个项目中&#xff0c;用到企业微信的审批流程&#xff0c;整理出来分享给大家。在企业微信中实现审批流程可以通过调用企业微信的开放API完成&#xff0c;企业微信提供了审批应用接口&#xff0c;用于创建审批模板、发起审批流程以及获取…...

GEE app:在地图上构建一个可以查看局部的小窗

目录 简介 函数 ee.Geometry.MultiLineString(coords, proj, geodesic, maxError) Arguments: Returns: Geometry.MultiLineString getBounds(asGeoJSON) Arguments: Returns: GeoJSONGeometry|List|String setControlVisibility(all, layerList, zoomControl, scaleC…...

leetcode71:简化路径

给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为 更加简洁的规范路径。 在 Unix 风格的文件系统中规则如下&#xff1a; 一个点 . 表示当前目录本身。此外&#xff0c;两个点 ..…...

nodejs入门教程4:nodejs创建第一个应用

1. 安装 Node.js 首先&#xff0c;确保你的计算机上已经安装了 Node.js。如果还没有安装&#xff0c;可以从官方网站&#xff08;https://nodejs.org&#xff09;下载并安装最新的 LTS 版本。安装完成后&#xff0c;你可以在命令行或终端中运行以下命令来验证安装&#xff1a;…...

启用 iPhone 原生的五笔输入

聊聊如何在 iOS 中使用原生的五笔输入法 本文虽然介绍的是如何添加五笔键盘&#xff0c;其实其他键盘&#xff08;双拼&#xff0c;外语键盘、第三方输入法&#xff09;也是类似的添加方式。 ‍ 使用原生的理由 虽然之前的文章列了不少第三方的五笔输入法&#xff0c;但其实…...

这个工具让你轻松开发一个带AI功能的Notion

这个工具让你轻松开发一个带AI功能的Notion Plate 是一款由 AI 加持的富文本编辑器&#xff0c;旨在帮助开发者创建功能强大的 WYSIWYG 文本编辑工具。本文将介绍 Plate 的基本信息、特点、以及如何快速上手使用。 软件简介 Plate 由 udecode 开发&#xff0c;基于 React 和 S…...

光耦合器的关键作用和创新---腾恩科技

光耦合器或光隔离器已成为电路中必不可少的器件&#xff0c;它允许信号在无需直接电接触的情况下跨不同电压域传输。这种隔离能力对于保护低压元件免受高压电路的潜在损坏至关重要。本文将仔细研究光耦合器在当今技术中发挥的独特作用&#xff0c;并探讨其在各种应用中不断扩展…...

穿越死锁的迷雾:pthread_mutex_lock的终极挑战与破解策略

穿越死锁的迷雾:pthread_mutex_lock的终极挑战与破解策略 一、死锁的基本概念二、pthread_mutex_lock 出现死锁的原因三、pthread_mutex_lock 出现死锁的表现四、处理pthread_mutex_lock 出现死锁的方法1. 避免死锁1.1 遵循锁的顺序原则1.2 使用定时锁1.3 使用尝试锁1.4 使用递…...

Dockerfile制作Oracle19c镜像

Dockerfile文件 cat > Dockerfile << EOF # 使用 Oracle Linux 8 作为基础镜像 FROM oraclelinux:8# 复制 Oracle 19c 安装包 COPY oracle-database-ee-19c-1.0-1.x86_64.rpm /tmp/# 安装 Oracle 19c 数据库和依赖 RUN yum localinstall -y /tmp/oracle-database-ee-…...

【时间之外】IT人求职和创业应知【23】

目录 新闻一:央行发布首个买断式逆回购交易公告 新闻二:2024CCF科技创业大赛报名截止 新闻三:BNB Chain将在迪拜主办第四届BNB孵化联盟(BIA) 认知决定你的赚钱能力。以下是今天可能影响你求职和创业的热点新闻: 今日关键字:TCL两连扳,已经跑了,我的认知就到此了 新…...

后端:Spring-1

文章目录 1. 了解 spring(Spring Framework)2. 基于maven搭建Spring框架2.1 纯xml配置方式来实现Spring2.2 注解方式来实现Spring3. Java Config类来实现Spring 2.4 总结 1. 了解 spring(Spring Framework) 传统方式构建spring(指的是Spring Framework)项目&#xff0c;导入依…...

OTX系统架构分析

OTX&#xff08;Open Test Sequence Exchange&#xff09;系统架构是一种专门为汽车行业设计的测试序列交换格式&#xff0c;它基于ISO 13209标准&#xff0c;旨在提供一种独立于测试人员的可执行测试序列描述格式。 一、OTX系统架构概述 OTX架构是一种标准化的平台和格式&am…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...