80.游戏的分辨率修改思路与分析

news2024/9/22 7:21:11

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

内容参考于:易道云信息技术研究院

上一个内容:79.游戏分析工具闪屏问题优化与数据被修改高亮

GAMEHACKER2.exe 工具下载地址:79.游戏分析工具闪屏问题优化与数据被修改高亮

Sword2(剑侠情缘)这个游戏很老,在它的年代显示器分辨率是640*480(640是宽480是高),现在的分辨率最低也是1920*1080,高端显示器分辨率是4K、8K甚至更高的分辨率,用最低的1920*1080分辨率显示640*480看起来是非常的模糊,所以首先要修改游戏的分辨率,至少要改成1920*1080分辨率。

修改分辨率的思路是从游戏如何显示的地方下手,这样才会有机会修改分辨率,首先要搞清楚游戏是如何显示的然后在显示的时候肯定会用到640、480这俩数据,然后找到用640、480这俩数据的位置就可以分析出这俩变量的内存地址在哪了,然后更改这俩变量的值从而达到修改分辨率的效果。

然后显示的方式,显示是一个非常大的工程,做游戏一定会用到游戏引擎也就是会用到显示的技术,显示技术主流的有三种 GDI/GDI+、OpenGL、Direct

GDI/GDI+:微软公司提供比如窗口的界面全部用的GDI/GDI+技术

OpenGL:linux系统下用的多

Direct:是图形加速接口,它可让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3d图形和声音效果,微软提供的

然后查看游戏使用的是那种技术

首先打开Cheat Engine附加到游戏上并随便搜索一个数据

然后选择浏览相关的内存区域

如果用了某个显示技术一定会加载显示技术提供的类库或者函数,然后选择 枚举DLL和符号表

然后可以看到它有一个GDI32,这说明这个游戏有用到GDI的技术,如果没用到GDI的技术它不可能有GDI32这个模块,但是只看GDI不能作准它有可能用来GDI与OpenGL或GDI与Direct,因为画一个按钮也会用到GDI的技术,GDI的技术太普遍了,然后继续往下看,如果用到了OpenGL一定会有OpenGL.dll或者OpenGL32.dll这样的模块

然后游戏引擎比如Unity,游戏引擎和显示的关系是游戏引擎通过显示技术(或者说绘图技术)开发出的一个程序或者类库,也就是说就算用的引擎最终还是会用到 GDI/GDI+、OpenGL、Direct 这三种技术的

然后继续往下找可以看到它用了一个DDRAW的模块,这个模块是Direct,d3d9_x.dll类库是Direct9的类库,DDRAW.dll是Direct7或8的类库,然后剑侠情缘这个游戏就用的是Direct技术实现的显示,然后下一步弄清楚Direct是如何显示图形的就可以修改分辨率了

Direct是微软提供的所以去微软查资料

传送门:DirectDraw - Win32 apps | Microsoft Learn

不管Direct9还是7它本质上是一个类,是类用的时候就会创建对象,创建对象就有构造方法,所以先从文档中找构造方法,它有两个构造方法DirectDrawCreateEx 与 DirectDrawCreate,有了对象之后就可以利用对象在屏幕上画图了,证明游戏有没有用到那就在游戏一起启动就在这俩函数上下断点

然后使用 DirectDrawCreateEx 或 DirectDrawCreate只是得到了一个绘图对象指针,在绘图开始之前要做有几个函数必然要用到的第一个设置绘图的模式 SetCooperativeLevel 函数,它是一个纯虚函数没有任何实现,需要自己重写

然后还会用到 SetDisplayMode 函数,它也是一个纯虚函数,SetDisplayMode是就是用来设置分辨率的

SetDisplayMode的参数中文翻译,所以我们就拦截 SetDisplayMode 函数就可以反向追踪分辨率的变量在哪了。

然后打开Ollydbg.exe追踪函数,首先打开之前写的 GAMEHACKER2.exe工具,选择暂停和调试然后打开游戏,暂停的原因是我们要在游戏启动前下断点

然后打开可执行模块,随便点一个进去

进来之后CTRL + G,输入,DirectDrawCreate跳转到DirectDrawCreate函数中,原因是设置分辨率的函数是一个虚函数我们不知道函数地址,CTRL + G也跳不过去,所以要通过调用 DirectDrawCreate函数的位置往下找,如果 DirectDrawCreate函数CTRL + G跳不过去说明Ollydbg.exe还没把模块加载全,等待加载完就可以跳了

DirectDrawCreate函数入口打断点并运行游戏让它卡在断点处

卡在断点处了,剑侠情缘这个游戏是有检测多开的,如果卡不住看看是不是打开过游戏了

然后它的返回地址是6A51CB92

然后在6A51CB92处再打断点

然后按F9让它运行到6A51CB92位置,然后按两次f7

然后再按一次f7,这时就来到了游戏模块了

然后按CTRL+F9往前跳然后再按F7就会来到下图,可以看到调用了一排函数,通过上面说的函数调用顺序 DirectDrawCreate -》setcooperativel -》SetDisplayMode,然后下图中可以看到ASCII字符,这时代码中写的程序出错用来调试的提示,这也可以看出我们写代码时,这种提示不要用ASCII这样的明文信息这样就给逆向者提供了很大的助力因为现在我们可以看到它怎么调用的,正确的找SetDisplayMode函数是通过计算SetDisplayMode偏移得到的而不是通过无脑的分析,后面写如果计算SetDisplayMode函数偏移,这里先利用ASCII提示来找SetDisplayMode函数

在调用SetDisplayMode函数的位置打断点按F7

然后进入

然后按F8执行到下图红框位置可以看到EDX的值是取得全局变量然后它的值是十六进制的1E0换成十进制就是480

然后再按F8执行到下图红框位置可以看到edx的值是十六进制的280换成十进制就是640,所以很明显4391F0位置是480、4391EC位置是640这俩就是分辨率

然后我们这俩数据在栈中修改成1980*1080,修改方式是右击选择修改

点击修改之后弹出下图红框位置的弹框

直接写1920然后点确认,480改1080也是这样操作

修改之后的栈数据

然后直接让游戏继续运行

然后分辨率就被修改了


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

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

相关文章

Neo4j图数据库Docker部署至服务器

Neo4j图数据库Docker部署至服务器 文章目录 Neo4j图数据库Docker部署至服务器1. Neo4j介绍2. 拉取Docker镜像3. 创建容器并运行4. 导入数据(可选)5. 访问测试 1. Neo4j介绍 Neo4j 是一种基于图数据库管理系统,它专门用于存储和查询图数据结构…

Vuepress,搭建自己的技术文档

Vuepress Vuepress用于构建静态站点,非常适合搭建技术文档。如果手头上有开源项目,或者公司内部有项目需要做官网,且官网中大部分都是介绍、用法之类的文章。那么Vuepress是不二选择! 我们看到的一些项目的技术文档,…

河北学术会议:机器视觉、图像处理与影像技术领域

第二届机器视觉、图像处理与影像技术国际会议(MVIPIT 2024)将于2024年9月13日-15日在中国张家口召开。MVIPIT2024聚焦机器视觉、图像处理与影像技术,旨在为专家、学者和研究人员提供一个国际平台,分享研究成果,讨论问题…

WebSocket可拓展业务组件搭建,无侵入实现WebSocket通信信息自定义业务消费

组件概述 面对C端产品,往往会携带有客户端和服务端的双端通信以实现实时交互的效果,但是目前HTTP1.1并不支持双端通信,因此,对于聊天室、多人实时游戏等场景,就需要用到一个新的通信协议:WebSocket。 更多…

UE5-C++入门教程(二)---编写Editor类别的自定义模型实现小球规划路线的可视化

前言 本教程将以图文教程的形式讲述如何快速入门通过C使用UE5.4进行项目编写。UE5的教程系列 第一期:UE5-C入门教程(一):使用代码创建一个指定目标的移动小球-CSDN博客 UE5与ROS2实战->基于UE5和ROS2的激光雷达深度RGBD相机小车的仿真指南(一)—Unre…

MoneyPrinterTurbo的部署,在服务器Ubuntu22.04系统下——点动科技

在服务器Ubuntu22.04系统下,MoneyPrinterTurbo的部署 一、ubuntu22.04基本环境配置1.1 更换清华Ubuntu镜像源1.2 更新包列表:2. 安装英伟达显卡驱动2.1 使用wget在命令行下载驱动包2.2 更新软件列表和安装必要软件、依赖2.2 卸载原有驱动2.3 安装驱动2.4…

Axure高端交互元件库:助力产品与设计

用户体验(UX)和用户界面(UI)设计对于任何产品的成功都至关重要。为了在这个竞争激烈的市场中脱颖而出,设计师和产品开发团队需要依赖强大的工具来创造引人注目且功能丰富的交互界面。下面介绍一款Axure精心制作的"…

物联网(IoT)详解

物联网(IoT)详解 1. IoT定义简介2. IoT工作原理3. IoT关键技术4. 物联网与互联网区别5. IoT使用场景6. 开源物联网平台7. 参考资料 1. IoT定义简介 首先第一个问题,什么是物联网(IoT)? 物联网(英文&#…

Linux:CentOS配置

一,安装VMware 这个可以通过官网获取 vmware下载 也可以联系我,我发给你 二,安装CentOS Centos官网找要下载的版本: https://vault.centos.org/ 阿里云镜像:https://mirrors.aliyun.com/centos-vault/?spma2c6h.13…

如何搭建redis哨兵集群

1. 构建redis镜像 FROM redis:7.0.15-alpine3.20# install tools RUN apk add curl --no-cache &&\apk add bash --no-cache # COPY redis.conf /usr/local/etc/redis/redis.confCMD [ "redis-server", "/usr/local/etc/redis/redis.conf"] dock…

一起学习LeetCode热题100道(45/100)

45.二叉树的右视图(学习) 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 示例 2: 输入: [1,null,3] 输出: [1,3] 示例 …

【微信小程序】自定义组件 - 数据、方法和属性

1. data 数据 2. methods 方法 在小程序组件中,事件处理函数和自定义方法需要定义到 methods 节点中,示例代码如下: 3. properties 属性 在小程序组件中,properties 是组件的对外属性,用来接收外界传递到组件中的数…

如何使用docker打包后端项目并部署到阿里云k8s集群上

如何使用docker打包后端项目并部署到阿里云k8s集群上 1. 引言 在现代软件开发中,容器化技术已经成为主流,而Kubernetes (K8s) 是管理容器的首选平台之一。本文将详细介绍如何将一个后端项目使用Docker打包,并将其部署到阿里云的Kubernetes集群上。 2. 前置条件 阿里云账号…

sentinel集成springcloud实现限流熔断

Sentinel 是由阿里巴巴开源的一款流量控制和熔断降级组件,旨在通过灵活的流量控制和熔断降级机制,帮助开发者保护微服务架构中的应用和服务。 官网:home | Sentinel (sentinelguard.io) 一、安装sentinel 1.方式一:用docker-compose 安装 docker-com…

回归预测|基于粒子群优化深度神经网络DNN的数据回归预测Python程序PSO-DNN 多特征输入单输出

回归预测|基于粒子群优化深度神经网络DNN的数据回归预测Python程序PSO-DNN 多特征输入单输出 文章目录 前言回归预测|基于粒子群优化深度神经网络DNN的数据回归预测Python程序PSO-DNN 多特征输入单输出 一、PSO-DNN模型1. 粒子群优化(PSO)简介2. 深度神经…

java版知识付费saas租户平台的核心功能设计:打造高效、个性化的学习体验

随着互联网技术的飞速发展,我国在线教育行业迎来了新的变革,知识付费平台应运而生。这种新兴的在线教育模式,以用户需求为导向,以优质内容为核心,通过互联网技术手段,为用户提供便捷、高效的学习渠道。知识…

基于PyTorch的MNIST手写数字GAN生成器

文章目录 前言小笔记关键特性技术栈使用场景贡献者: 完整代码代码解析1. 导入必要的库2. 设备配置3. 超参数设置4. 创建样本目录5. 图像处理6. 加载MNIST数据集7. 创建数据加载器8. 定义判别器(Discriminator)D9. 定义生成器(Gene…

C语言(15)——顺序表的应用

目录 1.基于动态顺序表实现通讯录项⽬ 1.1功能要求 1.2代码实现 2. 顺序表经典算法 1.基于动态顺序表实现通讯录项⽬ 1.1功能要求 1)⾄少能够存储100个⼈的通讯信息 2)能够保存⽤⼾信息:名字、性别、年龄、电话、地址等 3)…

生活垃圾填埋场污染监测:新标准下的技术革新与环境保护

随着城市化进程的加速,生活垃圾产生量急剧增加,如何有效处理并控制其带来的环境污染成为亟待解决的问题。近日,生态环境部发布了新修订的《生活垃圾填埋场污染控制标准》(GB 16889-2024),将自2024年9月1日起…

【Redis】哈希类型详解及缓存方式对比:从命令操作到实际应用场景

目录 Hash 哈希命令命令⼩结内部编码使⽤场景缓存方式对比 Hash 哈希 ⼏乎所有的主流编程语⾔都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中,哈希类型是指值本身又是⼀个键值对结构&#xff…