【游戏逆向】HOOK原理以及在游戏逆向中的应用

news/2024/4/27 0:35:11/文章来源:https://blog.csdn.net/douluo998/article/details/129255115

HOOk的意思是拦截, 也称钩子。

大家可以打开PCHunter 这个工具 看看任意的网游或则 游戏辅助程序,都纯在着大量的钩子。

无论是对数据的拦截还是对游戏代码的篡改还是游戏安全的被动防护,钩子都是必须的。

钩子的作用

①获取执行到某条代码的时候,所有寄存器的值 。

例如HOOK 明文包,HOOK 收包,我们可以拦截到所有的封包内容及包长,从而可以更加方便的分析封包协议。

②在某条代码处加入我们想处理的内容,例如某些变态功能 ,例如DXF扣血CALL ,判断是怪物对象直接赋值0将血量扣为0实现秒怪,而判断是人物对象直接不扣血,实现无敌的效果。

hook明文包代码实例如下:

函数,变量名 全部中文修改标注

void Call_Hook明文包()

{

DWORD Hook地址 = Addr_明文包-15;

DWORD Hook子程序指针 = (DWORD)Hook明文包子程序;

DWORD 跳转值=Hook子程序指针-Hook地址-5;

Call_提升权限(TRUE);//提升EXE权限

DWORD pid=NULL;

DWORD WriteSize=NULL;

GetWindowThreadProcessId(Call_获取窗口句柄(),&pid);//获得进程ID

hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);//打开进程

__try

{

byte Temp=0xE8;

WriteProcessMemory(hProcess,(LPDWORD)(Hook地址 + 0x00),&Temp,1,&WriteSize);

DWORD Temp1=跳转值;

WriteProcessMemory(hProcess,(LPDWORD)(Hook地址 + 0x01),&Temp1,4,&WriteSize);

byte Temp2=0x90;

WriteProcessMemory(hProcess,(LPDWORD)(Hook地址 + 0x05),&Temp2,1,&WriteSize);

}

__except (1)

{

Call_输出调试信息(“YYC3D Hook明文包异常\r\n”);

}

}

在退出的时候一定要还原HOOK

否则找不到HOOK的函数,游戏程序会直接崩溃

以下是还原HOOK代码:

void Call_UnHook明文包()

{

__try

{

DWORD Hook地址 = Addr_明文包-15;

DWORD WriteSize=NULL;

byte Temp []={0x8B,0x88,0xAC,0x0A,0x01,0x00};

WriteProcessMemory(hProcess,(LPDWORD)Hook地址,&Temp,6,&WriteSize);

}

__except (1)

{

Call_输出调试信息(“YYC3D UnHook明文包异常\r\n”);

}

}

基本原理

修改代码,让他跳转到我们想要的位置(DLL)中执行,执行我们想执行的代码以后再跳转回来。

本的原则是,这个过程不修改他原本任何的堆栈和寄存器值。

当然除了修变态修改的情况!因为变态修改目的就是为了改变他的值。

那么有人会问 ,那为什么不直接在游戏进程中修改成我们想要执行的代码

唯一的原因就是,该处的代码空间不够我们用的。

当然我们也可以在游戏进程里 ,找一块空内存或者申请一块内存出来, 把代码写进去然后让他跳转过去执行。

这样的办法,也可以用作远程HOOK。

所以说不注入DLL也可以HOOK。

因为本的原则是不破坏堆栈和寄存器

所以对于大家不是十分熟练HOOK之前 尽量不要去HOOK PUSH POP CALL RETN 等操作堆栈的代码。

这样不会影响我们什么,因为你把代码HOOK的位置调整一下,想要得到的值或者修改的值也会变

例如

mov eax,[edx+C]

mov ecx,[edx+10]

push eax

我们想知道EAX的值,我们可以不hook push eax ,可以去HOOK上一句,因为2句的EAX值是相同的,也可以HOOK mov eax,[edx+c]

去 读 [edx+c] 因为 [edx+c] 就是我们后面想得到的值。

HOOK的时候, 我们选大于5字节的代码可以一句或则多句,因为我们要修改的代码为JMP XXXX 是需要5字节的。

① 记录下我们要HOOK的代码

②修改成 jmp XXXX 多余的字节 我们NOP 填充

③跳到我们的DLL里,我们最好用裸函数,这样不会生成多余的代码,生成多余的代码会影响我们。

然后我们要 PUSHAD , 然后可以随意执行我们 ,做完我们的操作以后,我们就POPAD ,

最后执行原来被我们HOOK的代码 , JMP XXXX 跳转回去。

④这样 ,对于游戏进程来说, 代码执行过这里,什么都没有变化 ,只是多执行了我们想要硬插进去的代码而已

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

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

相关文章

Javascript的API基本内容(四)

一、日期对象 获取时间戳的方法,分别为 getTime 和 Date.now 和 new Date() // 1. 实例化const date new Date()// 2. 获取时间戳console.log(date.getTime()) // 还有一种获取时间戳的方法console.log(new Date())// 还有一种获取时间戳的方法console.log(Date.n…

【微信小程序-原生开发+TDesign】通用功能页封装——地点搜索(含腾讯地图开发key 的申请方法)

效果预览 核心技能点 调用腾讯地图官方的关键字地点搜索功能&#xff0c;详见官方文档 https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/methodGetsuggestion 完整代码实现 地点输入框 <t-input value"{{placeInfo.title}}" bindtap"searchPlace" dis…

硬件工程师——门控开关的设计

假设自己是一个工程师&#xff0c;那么我们怎么介绍自己呢&#xff1f; 我们首先需要可以自己独立设计项目&#xff0c;需要每一个工程师在开始阶段可以独立做项目&#xff0c;从而提高薪水 那么我们怎么提高做项目的能力呢&#xff1f; 通过项目来积累经验&#xff0c;在短…

推荐几个实用的在线教程(建议收藏)

hello&#xff0c;大家好&#xff0c;我是木荣君。作为一名技术人员&#xff0c;工作中熟练使用各种管理及设计工具是一项必备的技能。今天给大家分享一下我工作中经常查看和学习的几个在线教程地址。供大家参考学习&#xff0c;建议收藏&#xff0c;真的很实用&#xff01; Gi…

InnoDB数据页结构__盛放记录的大盒子

一、不同类型的页简介 前边我们简单提了一下页的概念&#xff0c;它是InnoDB管理存储空间的基本单位&#xff0c;一个页的大小一般是16KB。InnoDB为了不同的目的而设计了许多种不同类型的页&#xff0c;比如存放空间头部信息的页&#xff0c;存放Insert Buffer信息的页&#xf…

MySQL 横表和竖表相互转换

一 竖表转横表 1. 首先创建竖表 create table student ( id varchar(32) primary key, name varchar (50) not null, subject varchar(50) not null, result int); 2. 插入数据 insert into student (id, name, subject, result) values (0001, 小明, 语文, 83); insert into…

一文透视宝莱特CRM如何建设与落地

宝莱特集团成立于1993年&#xff0c;是一家国家高新技术企业&#xff0c;始终坚持在医疗器械领域的深耕细作&#xff0c;坚持患者第一、临床优先&#xff0c;业务板块涵盖生命信息与支持、肾病医疗和大健康医疗三大领域。自成立以来&#xff0c;宝莱特推出了多个中国第一的自主…

八通道触摸芯片GTC08L Pin to Pin替代启攀微八通道触摸芯片

能Pin to Pin替代启攀微八通道触控芯片的电容式触摸芯片-GTC08L是一款非常适用于小功率音箱上超稳定超抗干扰低功耗八通道电容式触摸IC&#xff1b;可通过触摸实现各种逻辑功能控制&#xff1b;可以在发动机运行下进行8通道电容传感&#xff1b;对电磁兼容、电磁干扰、温湿度变…

Java的运算操作

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 文章目录算术运算符增量运算符注意自增自减运算符关系运算符逻辑运算符逻辑与&&逻辑或||逻辑非&#xff01;…

华为OD机试题,用 Java 解【考古学家】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

VB6遍历目录(文件夹和文件)

日期&#xff1a;2023年2月27日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

产业链金融对接央行征信过程

2018年10月底&#xff0c;央行二代征信系统上线试运行。2018年10月至2019年4月&#xff0c;央行二代征信系统 进行试运行&#xff0c;全国16家试点机构参与全业务试运行&#xff0c;14家机构进行查询试点。2019年6月&#xff0c;央行二 代征信系统正式上线。2019年6月至2020年1…

计算机信息系统安全服务等级证

计算机信息系统安全服务等级评定是规范行业服务、提升企业诚信度、保证工程质量、市场准入控制的重要保证&#xff0c;是安全服务机构从事信息网络安全服务能力的等级证明&#xff0c;为我省信息化建设使用单位在选择网络安全服务机构时提供参考依据。 等级划分 安全服务机构等…

Java中常用的七种队列你了解多少?

文章目录Java中常用的七种队列你了解多少?ArrayBlockingQueue队列如何使用&#xff1f;添加元素到队列获取队列中的元素遍历队列LinkedBlockingQueue队列如何使用&#xff1f;1. 创建SynchronousQueue对象2. 添加元素到队列3. 获取队列中的元素4. 遍历队列SynchronousQueue队列…

我要测网2022优秀检测机构评选活动举办,径硕科技分享数字营销趋势

2023年2月17号&#xff0c;由我要测网主办的「数字营销韧性增长&#xff5c;2023TIC营销人开年报告」圆满举办。来自南京市产品质量监督检验院、中国检科院测试评价中心、径硕科技JINGdigital等企业的3位“重量级”嘉宾进行了精彩纷呈的分享&#xff0c;为在低谷中前行的检测机…

我嘞个神——原来创建应用根本不需要会编码(看我10分钟应用上线)

目录 一、前言 二、官网功能查询与环境初始化 YonBuilder应用开发 三、测试过程 3.1、创建应用 3.2、数据建模 3.3、页面建模 3.4、页面发布 四、时间累计 五、效率评价 六、总结 一、前言 这里我用到了用友的平台&#xff0c;很多学生们刚毕业都在从事运维和实施的…

Java基础:常见API(Math,System,Runtime,Object,BigInteger,BigDecima)

1.常见API 1.1 Math类 向上取整是向着数轴右边走的意思, 负数也是. 也可以叫进一法, 不论正数负数都会往右走一. 向下取整是向着数轴左边走. 也可以叫去尾法, 不论正负数都会将小数点后的数字去掉. 1.1.2 练习 // 判断有多少水仙花数int count 0;for (int i 100; i < 1…

如何在没有任何额外包的情况下使用 NodeJS 下载文件

如何在没有任何额外包的情况下使用 NodeJS 下载文件 您可以下载文件&#xff08;图像、文本或任何类型的文件&#xff09;并使用 NodeJS 内置 https和 fs模块将其保存到您的文件系统。 该 https模块允许您使用 NodeJS 创建 HTTPS 请求&#xff0c;同时该 fs模块授予您访问文件…

【论文精读11】MVSNet系列(2018-2022)总结

MVSNet系列总结1.MVSNet ECCV20182.RMVSNet CVPR20193.P-MVSNet ICCV20194.MVSCRF ICCV20195.PointMVSNet ICCV20192019年的这四篇文章各有特点&#xff0c;其中RMVSNet、PointMVSNet更是打开了可以继续沿着往下做的思路&#xff1a;6.cascade MVSNet CVPR20207.UCSNet CVPR202…

Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例实践应用

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…