Hacking Diablo II之外挂的工作原理

article/2025/10/5 11:07:18
这一篇介绍外挂的工作原理。如果对外挂是怎么工作的没有一个大概的了解的话,那这一系列文章只能当故事看了。
如下图所示,大方框表示Diablo II.exe的进程空间,框内左侧的虚线表示游戏的主线程循环。游戏主线程循环所做的工作大约有:绘制客户端画面、响应服务器端的命令,以及接收玩家的鼠标键盘输入等。框内右侧的小方框就是所谓的外挂程序(Injected DLL)。

外挂要工作首先要加载到游戏进程空间,最常用的方法一般是通过DLL的远程注入,比如在NT/2K/XP下可以用CreateRemoteThread/LoadLibrary方法,9x平台稍微麻烦一点儿。也有做成和游戏程序一起启动的,比如利用d2loader的plugin加载功能。外挂要发挥作用,就要在必要的时刻感知游戏的状态,这个可以通过在游戏本身代码中设置旁路点(detour patch)改变原有程序的流程做到。因此外挂加载以后首先要做的就是设置旁路点(一般是一个跳转指令,有hook API经验的同学比较容易理解,但和hook API不同的是,旁路点不一定在函数的入口处)。由于设置旁路点需要修改原有游戏代码,而如果修改的同时主线程正好执行到那儿就会导致游戏崩溃,因此设置旁路点的代码最好在游戏主线程的上下文环境中执行(可以通过SetWindowLong设置消息钩子,用SendMessage触发主线程调用窗口过程,然后在窗口过程中进行设置)。
图中的黄色方框就是一个旁路点。通过旁路点,在适当的时刻游戏的主线程就会跳转到外挂程序中,此时外挂程序就取得了控制权,它做完处理后,再跳转回旁路点的后面继续执行-这是一个典型的外挂代码执行流程。举个例子来说,Diablo中有好几种天气效果:晴天、雨天、雪天等。可以想象游戏中肯定有一段负责绘制天气代码,如果在这段代码附近合适的地方插入一个旁路点,就可以控制天气的绘制,始终让游戏处于晴天。Maphack设置的旁路点有上百个。
其次,外挂要做更多的事情,就要充分利用游戏原有的函数、代码,比如Diablo的程序内部有一个函数可以往游戏画面的左上角输出文字。因此外挂程序加载后要做的另外一件事是定位一些游戏内部函数的入口点。Maphack中用到的内部函数有一百多个。
Diablo II中流行的大部分外挂,如d2maphack, d2hackmap, d2jsp, d2hackit等,都是基于这种原理工作。

注:本图片是在 Hacking WOW中的图片基础上修改而成。

http://chatgpt.dhexx.cn/article/qi5XfYBe.shtml

相关文章

Kratos技术系列|从Kratos设计看Go微服务工程实践

转载地址:https://mp.weixin.qq.com/s/D8py9Ia1KVoPZP-RCfwkgQ 在Kratos中,API定义、gRPC Service、HTTP Service、请求参数校验、错误定义、Swagger API json、应用服务模版等都是基于Protobuf IDL来构建的: 举一个简单的helloworld.proto例…

【kratos入门实战教程】2-实现注册登陆业务

1、系列目录 【kratos入门实战教程】0-商城项目介绍【kratos入门实战教程】1-kratos项目搭建和开发环境配置【kratos入门实战教程】2-实现注册登陆业务 2、概览 通过本篇文章,读者将会掌握kratos的一般开发流程,涵盖了从接口定义、自定义配置&#xff0…

golang 比较完美的通用框架,kratos v2.0 学习,一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具。涵盖了互联网开发的常用功能模块的开发库。

目录 前言1,关于kratos v2.02,Principles 原则2,Features 特色3,Architecture 架构4,总结 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/120464687 未经博主允许不得转载。 博主地址是&…

Kratos战神微服务框架(二)

Kratos战神微服务框架(二) 目录 Kratos战神微服务框架(二)项目结构api编写protobuf编写使用makefileservice层接口实现biz层data层configs配置文件 项目结构 api编写 protobuf编写 syntax "proto3"; package realwor…

kratos项目启动笔记

项目启动笔记 1、git clone git地址 2、kratos run,启动成功后如下图 3、假如运行2错误提示如下: 解决方案: 1.在终端中运行go env查看GO111MODULE 的值 如果不为on,则需要开启GO111MODULE 开启命令:go env -w GO1…

新平台架构的解决方案,使用kratos快速搭建系统服务,做好分布式集群,找大一个哥们写的一系列文章,非常不错赶紧学习下。

目录 前言1,关于kratos2,相关文档 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/109504012 未经博主允许不得转载。 博主地址是:http://blog.csdn.net/freewebsys 1,关于kratos https://pandayche…

Ory Kratos 用户认证

Ory Kratos 为用户认证与管理系统。本文将动手实现浏览器(ReactAntD)的完整流程,实际了解下它的 API 。 代码: https://github.com/ikuokuo/start-ory-kratos 了解 Kratos 获取代码 git clone -b v0.7.0-alpha.1 --depth 1 https://githu…

go微服务框架kratos 安装及使用

windows: 代理和mod 设置 set GO111MODULEonset GOPROXYhttps://goproxy.cn/ 安装protobuf库文件 go get -u github.com/golang/protobuf/proto 安装goprotobuf插件 go install github.com/golang/protobuf/protoc-gen-golatest 安装gogoprotobuf插件和依赖 go install gith…

go用户中心kratos

用户中心kratos kratos介绍 ORY Kratos是根据云架构最佳实践构建的API优先身份和用户管理系统。它实现了几乎每个软件应用程序都需要处理的核心用例: 自助登录和注册:允许最终用户使用用户名/电子邮件和密码组合,社交登录(使用Google,GitHub登录),无密码…

Kratos 集成Gin

Kratos 集成 Gin 规范项目分层处理请求处理、响应编写路由routeKratos 集成gin注入 wire set中 源码 Kratos 可以在 .proto文件定义请求类型,URL,响应等等,如官方示例: service BlogService {rpc CreateArticle (CreateArticleRe…

kratos mysql_Kratos--安装及配置

安装GO环境 安装protoc以及相关的包和插件 安装Kratos Go version>1.12 and GO111MODULEon go get -u github.com/bilibili/kratos/tool/kratos 提示:安装过程中可能会出现部分包下载失败,可以手动下载包然后拷贝至相应文件目录。 快速开始 cd $GOPAT…

初识go-kratos

推荐看一下 Kratos 官方文档 更加流畅观看此文章,本机器这里已经安装好了 kratos、proto、wire、make 等所需的命令工具 1.先下载beer-shop模板 git clone https://github.com/go-kratos/beer-shop.git 2.删除api和app下的全部文件 3.修改go.mod文件 把module g…

kratos mysql_kratos微服务框架学习笔记一(kratos-demo)

本文将为您描述kratos微服务框架学习笔记一(kratos-demo),教程操作步骤: 目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服务框架学习笔记一(kratos-demo) 今年大部分时间飘过去了,没怎么更博和github,现在开发任务也差不多完成…

Kratos日志

一.如何在kratos框架中使用 参考官方文档中描述,为了方便业务自适配不同的 log 接入使用,Logger 只包含了最简单的 Log 接口。当业务需要在 Kratos 框架内部使用自定义的 log的时候,只需要简单实现方法即可。日志库较为公用建议放在kit基础库…

kratos框架学习,在Linux 下面使用kratos 创建demo 项目然后跑起来。使用 kratos new kratos-demo 一键创建项目,脚手架非常方便。但是依赖grpc没有起来

目录 前言1,关于kratos2,使用 kratos new kratos-demo 一键创建项目3,解决gRPC 编译问题4,只创建HTTP服务 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/109139648 未经博主允许不得转载。 博主地址…

砥砺前行 | Kratos 框架 v2 版本架构演进之路

Kratos 是一套轻量级 Go 微服务框架,包含大量微服务相关功能及工具。名字来源于游戏《战神》,该游戏以希腊神话为背景,讲述了奎托斯(Kratos)由凡人成为战神并展开弑神屠杀的冒险历程。 写在前面 从 2021 年 2 月份&…

【kratos入门实战教程】1-kratos项目搭建和开发环境配置

1、系列目录 【kratos入门实战教程】0-商城项目介绍【kratos入门实战教程】1-kratos项目搭建和开发环境配置【kratos入门实战教程】2-实现注册登陆业务 2、概览 经过上一篇的说明,本篇教程正式开始搭建项目。深入解析工程项目的目录结构和介绍一些开发需要使用的工…

go微服务框架Kratos简单使用总结

Kratos是B站开源的一款go的微服务框架,最近PS5上的 战神诸神黄昏比较火,主角就是奎托斯。这个框架的名字就取自他。 在进行框架选型时,对比了目前主流的很多go微服务框架,如Zero,最后对比之下,选择了Krato…

c语言代码后return0表示什么意思,C语言中return 0 表示什么

满意答案 强计划止步不.. 2013.01.03 采纳率:44% 等级:12 已帮助:7948人 return表示函数结束, 也就是说CPU执行到return后, 就会跳转(如果要好理解的话, 是"回到")到调用它的地方, 然后继续执行. 而0, 是一个整型, 一般来说retu…

c语言代码后return0表示什么意思,return 0是什么意思 ?

return 0 代表告诉调用者程序是正常退出的。return是C预定义的语句,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值。 这个return语句结束main()函数的执行,把0返还给操作系统。从main()函数返回0表…