找人做网站会给源代码吗,深圳市力同科技有限公司,wordpress汉化版,永久建站空间购买免责声明#xff1a;内容仅供学习参考#xff0c;请合法利用知识#xff0c;禁止进行违法犯罪活动#xff01;
内容参考于#xff1a;易道云信息技术研究院
上一个内容#xff1a;79.游戏分析工具闪屏问题优化与数据被修改高亮
GAMEHACKER2.exe 工具下载地址#xff…免责声明内容仅供学习参考请合法利用知识禁止进行违法犯罪活动
内容参考于易道云信息技术研究院
上一个内容79.游戏分析工具闪屏问题优化与数据被修改高亮
GAMEHACKER2.exe 工具下载地址79.游戏分析工具闪屏问题优化与数据被修改高亮
Sword2剑侠情缘这个游戏很老在它的年代显示器分辨率是640*480640是宽480是高现在的分辨率最低也是1920*1080高端显示器分辨率是4K、8K甚至更高的分辨率用最低的1920*1080分辨率显示640*480看起来是非常的模糊所以首先要修改游戏的分辨率至少要改成1920*1080分辨率。 修改分辨率的思路是从游戏如何显示的地方下手这样才会有机会修改分辨率首先要搞清楚游戏是如何显示的然后在显示的时候肯定会用到640、480这俩数据然后找到用640、480这俩数据的位置就可以分析出这俩变量的内存地址在哪了然后更改这俩变量的值从而达到修改分辨率的效果。
然后显示的方式显示是一个非常大的工程做游戏一定会用到游戏引擎也就是会用到显示的技术显示技术主流的有三种 GDI/GDI、OpenGL、Direct
GDI/GDI微软公司提供比如窗口的界面全部用的GDI/GDI技术
OpenGLlinux系统下用的多
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的模块这个模块是Directd3d9_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这时就来到了游戏模块了 然后按CTRLF9往前跳然后再按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也是这样操作 修改之后的栈数据 然后直接让游戏继续运行 然后分辨率就被修改了