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

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

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

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

上一个内容: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也是这样操作

修改之后的栈数据

然后直接让游戏继续运行

然后分辨率就被修改了


相关文章:

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

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:易道云信息技术研究院 上一个内容:79.游戏分析工具闪屏问题优化与数据被修改高亮 GAMEHACKER2.exe 工具下载地址&#xff…...

MaxKB(二):Ubuntu24.04搭建maxkb开发环境

接上文:windows10搭建maxkb开发环境(劝退指南) 上文在windows10环境搭建maxkb开发环境遇到各种坑,后面就转战ubuntu平台,果然比较顺利的完成开发环境搭建。当然遇到相关的问题还是可以参考上文《windows10搭建maxkb开发…...

c#实现数据导出为PDF的方式

PdfSharp vs iTextSharp: C#中PDF导出功能比较 PdfSharp 优点 轻量级:适合简单的PDF生成任务易于学习:API相对简单,学习曲线较缓开源:提供开源版本,可自由使用和修改纯C#实现:不依赖外部库或COM组件支持…...

【联想电脑】:使用拓展坞后转接HDMI,无法识别显示屏

项目场景: 作为一个嵌入式软件开发者,有两个外接屏幕,不足为奇。 但是在今天的使用电脑过程中,出现了接了一个拓展坞上面有HDMI接口,但是HDMI接口接上外接显示屏的时候电脑无法识别到,导致只有电脑直连的HD…...

Verilog刷题笔记53

题目: Fsm serialdata See also: Serial receiver Now that you have a finite state machine that can identify when bytes are correctly received in a serial bitstream, add a datapath that will output the correctly-received data byte. out_byte needs …...

GoFly快速开发后台框架-后端接口请求返回403提示码就跨域问题/请求端域名拦截问题

问题: 大家在本地开发或者部署后请求后端时返回403,只有一个问题就是存在请求端跨域问题。 解决办法: 解决这个问题很简单,跨域的就解决跨域就好了。 我们官方给大家统一解决办法是: 到后端配置文件resource/conf…...

设备实时数据采集:开启制造业智能化、自动化的新篇章

传统制造业在进行生产过程中,会涉及到设备实时数据采集需求,这些数据对于监控生产流程、优化生产效率、保证产品质量以及降低成本等方面至关重要。以下是一些常见的数据采集需求: 1.生产数据:包括生产数量、生产批次、生产速度等&…...

【python与java的区别-03(集合、字典)】

一、Set python: 集合(set)是一个无序的不重复元素序列。 集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。 可以使用大括号 { } 创建集合,元素之间用逗号 , 分隔, 或者也可以使用 set() 函数…...

Java继承

目录 一、继承概念 二、语法格式 三、类型及特性 四、关键字 4.1. super 4.2. super与this指针 4.3 final 关键字 一、继承概念 继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性 的基础上进…...

Kafka集群搭建的两种方式

目录 1. 依赖Zookeeper搭建集群 1. 下载Kafka二进制文件 2. 更改kafka配置 3. 启动Zookeeper集群和Kafka集群 4. 验证集群 1.创建主题 2. 检查主题是否存在 3. 创建生产者生产数据 4. 创建消费者消费数据 5. 检查Zookeeper中Kafka集群的元数据 2. 不依赖Zookeeper搭…...

两种变量初始化方法的区别

1. CarriageEntity carriageEntity new CarriageEntity()和 null的区别 1.1 CarriageEntity carriageEntity new CarriageEntity(); 初始化:这行代码创建了一个新的 CarriageEntity 对象,并将其引用赋值给 carriageEntity 变量。对象状态&#xff…...

群晖把硬盘共享给win10(虚拟机或物理机)的两种办法

1. 通过SMB共享 NAS地址:192.168.3.100 打开“此电脑”,在win10地址栏输入 \192.168.3.100\video,提示输入用户名、密码。在video文件夹右击,点击“映射网络驱动器” 在win10电脑上,复制文件到T盘上,在T盘…...

Java-Web面试题汇总

一、TCP 和 UDP 的区别 在网络通信中,TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是两种常见的协议,它们在多个方面存在显著差…...

数字化技术分别有哪些,数字化技术特点和优势是什么?

​随着企业数字化进程的加速,人工智能、工业互联网、低代码等底层技术正全面重塑企业运营生产体系,推动新的生产要素、研发范式和商业模式的建立。 这个变革过程不仅是对原有制造体系的颠覆,而且会影响各行各业的所有细分行业和产业链价值链…...

微服务CI/CD实践(一)环境准备及虚拟机创建

微服务CI/CD实践系列: 微服务CI/CD实践(一)环境准备及虚拟机创建 微服务CI/CD实践(二)gitlabs部署 微服务CI/CD实践(三)nexus3部署 微服务CI/CD实践(四)数据库,redis,n…...

【SpringBoot】优化慢启动应用的用户体验

通过深入分析SpringBoot中WebServer的启动流程,插入自定义的Loading页面展示逻辑,优化软件使用时的用户体验。 背景 Java本身的特点,再加上开发人员能力差,软件开发工程化程度低等等问题,经过一段时间的迭代之后&…...

String str=“i“ 与 String str=new String (“i“) 一样吗?

String str"i" 与 String strnew String ("i") String str"i" 这种形式声明了一个 String 对象,其中 "i" 字符串字面量直接赋值给 str。在 Java 中,字符串字面量会自动放入字符串常量池中,这是一个…...

【数据结构】二叉树链式结构的实现

前置声明:在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉…...

如何有效找到目标客户群体?

在激烈的市场竞争中,找到并锁定目标客户群体是企业成功的关键。以下是几种有效的策略,帮助您精准定位并吸引目标客户。 1. 明确市场定位与客户画像 首先,企业需要明确市场定位,并绘制详细的客户画像,包括年龄、性别、…...

机器学习-混淆矩阵

文章目录 一、混淆矩阵1.混淆矩阵简介2.混淆矩阵图列 二、混淆矩阵指标1. 准确率(Accuracy)2. 精确率(Precision)3. 召回率(Recall)4. F1分数(F1 Score) 三、总结 一、混淆矩阵 1.混…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...