Steam游戏《Nine Parchments(九张羊皮纸)》修改器制作-[先使用CE写,之后有时间的话改用C#](2020年寒假小目标02)
日期:2020.01.09
博客期:122
星期四
【温馨提示】:
只是想要修改器的网友,可以直接点击此链接下载;
只是想要部分CT文件的网友,可以直接点击此链接下载;
没有博客园账号的网友,可以将页面下滑到博客末尾.....
如果修改器失效了,你们可以在博客园本页直接评论,也可以给我发邮件告诉我,就是不要到百度云上去说了,百度云我好久不登录一次的!大家给我发邮件的话,记得要注明是哪个游戏,内容当然是越详细越好啦!邮箱地址:nightskysxs@163.com
博客前言:之前玩Steam游戏的时候,发现了这款游戏,发现单人通过难度很大,就希望能够有修改器的帮助,结果在网上搜寻了半天,根本没有一个链接可以提供我刚才那样要求的修改器的下载,这...唉~那就自己编吧,之前我是有学过CE的,也了解了一下基础的汇编语言,不过没有深究罢了,这一次寒假我要好好学一学。因为我们刚过完的这一学期学了.NET开发,我就想着多少复习一下吧,就开始准备了。刚刚重新拿《植物大战僵尸年度英文版》复习了一下CE的方法,感觉有点儿生疏了,诶嘿嘿!
《九张羊皮纸》这游戏的可修改性不如《植物大战僵尸》,但是这也方便了我们程序员,毕竟越多的需求,就是越多的编码时间啊!
博客地址:https://www.cnblogs.com/onepersonwholive/p/12174160.html
(前面的提供程序员看,如果需求仅限于修改器下载的话,请直接拖底....)
游戏版本(v1.1.0 build 4722)[Steam]
目前挖掘的可修改项:玩家血量值+技能值+闪现恢复度(基础地址如下:"THREADSTACK0"-00000168)
1、玩家血量值 (4字节)
所在地址:基础地址 00000168 + 370 + C8 + 110 + 0 + 4BC
2、技能值(单浮点-Float)
PS:下面的技能是按照当前游戏版本的顺序来的()
技能基础地址 所在地址:基础地址 ("THREADSTACK0"-00000168) + 370 + C8 + 70
//----------------------------------------------【火焰技能】
1、焰束 + 8 + 2C4
2、燃石 + 98 + 2DC
3、魔咒火球阵 + A8 + 2DC
4、火焰炸弹 + B0 + 290
5、烈焰弹串 + C0 + 2DC
6、小型火球 + A0 + 2E0
7、大型火球 + E8 + 2E0
8、烈焰弹幕 + B8 + 2E0
9、烈焰图腾 + C8 + 2DC
//----------------------------------------------【寒冰技能】
10、冰束 + F8 + 2C4
11、寒冰弹串 + 110 + 2DC
12、寒霜云 + D0 + 2DC
13、冰片飞刀 + D8 + 2E0
14、寒冰冲击波 + 108 + 290
15、寒霜喷雾 + 18 + 2FC
16、寒冰弹幕 + 100 + 2E0
17、疯狂雹暴 + 20 + 2DC
//----------------------------------------------【闪电技能】
18、闪电喷雾 + 78 + 2FC
19、闪电弹幕 + 70 + 2E0
20、闪电图腾 + 88 + 2DC
21、闪电波 + 90 + 290
22、闪电炸顶!(这里是原技能名称有“!”) + 198 + 2DC
23、闪电束 + 68 + 2C4
24、能量环 + 150 + 290
25、附著型能量环(这里是原技能名称写的“著”,不是我想写错字) + 178 + 290
26、闪电弹串 + 80 + 2DC
27、闪电球 + 0 + 2E0
//----------------------------------------------【死亡技能】
28、死亡波束 + 48 + 2C4
29、致命自杀炸弹 + 60 + 2DC
30、死亡光圈 + 40 + 2DC
31、传染性恶咒 + 118 + 2DC
32、死亡弹幕 + 58 + 2E0
33、死亡毒花 + 148 + 2DC
34、脉冲波环 + 158 + 2DC
35、限值死亡喷雾 + 30 + 324
36、死亡法术球 + 50 + 2E0
37、死亡之咒 + 128 + 318
38、连续死亡射弹 + 38 + 2E0
//----------------------------------------------【死亡生命技能】
39、生死曲线弹 + 180 + 2E0
40、盗命治疗弹 + 168 + 2E0
//----------------------------------------------【生命技能】
41、治疗喷雾 + E0 + 2FC
42、治疗弹幕 + 130 + 2E0
43、生命弹串 + 138 + 2DC
44、小型生命魔环 + 160 + 290
45、近程群疗 + 188 + 290
46、弧形跳跃治疗 + 28 + 2E0
47、大型生命魔环 + 120 + 2DC
48、治疗波束 + 10 + 2C4
49、大型治疗球 + F0 + 2E0
//----------------------------------------------【其他技能】
50、蒸汽束 + 170 + 2C4
51、阿玛迪斯的魔箱 + 190 + 2DC
52、穿心暗影 + 140 + 330
//-----------------------------------------------------------------------------------------------------------
第一偏转是上述偏转的第一个,由技能编号所决定,第一个是0,第二个是8,第三个是10(因为是16进制嘛!)
第二偏转是由技能类型所决定的,2C4是波束类,2E0是属性球类,2DC是投放型区域类,290是近距范围类,2FC是喷雾类,还有318、324、330这三个应该是特殊的技能
如果没有看出关系来就看下面的表格
如想看全部,就下载吧:https://files.cnblogs.com/files/onepersonwholive/9P技能偏转表.zip
3、闪现恢复度(4字节)
所在地址:基础地址 00000168 + 370 + E8 + 0 + 80 + 3F4
完整的CT文件下载地址:https://files.cnblogs.com/files/onepersonwholive/nineparchments_64bit.zip
修改器部分:
好了,截至到2020年1月15日,我也用CE先制作了修改器,附下载链接:链接已经失效,请认准 最新地址
修改器截图:
嗯~基本页面写好了,现在是2020年01月17日0:36,我重新装了系统和ViusalStudio2017,开始编写C#的修改器:
下图是页面:
//------[2020-01-20,更新内容]
我在20号,登录游戏挖掘技能的更多信息(发现了好多新大陆)
我就以小型火球为例子说明一下地址修改要素吧:
小型火球的最后一项偏转是 2E0 ,如果将 2E0 改为 (2E0-4) ——也就是 2D8 ,就会变成技能上限的地址。上图的相关信息都可以找到(+68和+6C我搞不清是啥,只不过攻击值会随其变大而变大,我就猜了一个暴击率)
目前我没有找到与 恢复速度 相关的地址 ... ...
新的CT文件我就不发了,这是因为如果把所有技能配合上述实例的地址全找出来,CT文件就太大了,所以要修改器的博友就可以要原来那个,要地址的博友就麻烦自己找到自己需要的地址了。
//------[END]
//------[2020-02-10,更新内容]
我根据原来的地址找到了血量上限的地址:
基础地址 00000168 + 370 + C8 + 110 + 0 + 4B8
但是我发现找偏转找到的最后一级偏转是 5B4 !这就有问题了,说明开发人员在写代码的时候提供了另外一个数据访问路径,这个路径不是我们日常需要的那种循规调用的。所以我又开始找了好多的玩家血量值的地址!
第一种:"nineparchments_64bit.exe"+035C9920 + 118 + F0 + C8 + 128 + 5B4
第二种:"THREADSTACK0"-00000168 + 290 + 370 + C8 + 128 + 5B4
第三种:"THREADSTACK0"-00000168 + 370 + C8 + B0 + 10 + 5B4
现在我们采用第一种!因为 nineparchments_64bit.exe 是你的主进程,这样方便一些,我现在还不太懂这个 ThreadStack0 是个什么进程 !
找好了之后,我们来对比一下 野猪(初始 HP 为 600)的结构体 与 玩家结构体 之间的不同,如下图:
这是我找到的部分不同,上图中 绿色 标识 数据有巨大不同 , 红色 标识 完全一致的数据(不包括血量和血量上限),黑色是近似相等的(可能取浮点值就差不多了)
嗯!我写了一个 代码注入 ,但是总是会报错说 “ kernel32.dll 什么什么的”,怎么回事啊?这好不容易深造了一天,结果还没学好!
[ENABLE]
alloc(newmem,,"nineparchments_64bit.exe"+10E9511)
label(returnhere)
label(originalcode)
label(exit) newmem: //this is allocated memory, you have read,write,execute access
//place your code here originalcode:
cmp [rbx+rcx*+5C],3E8
je exit
mov [rbx+rcx*],edi
movzx r10d,word ptr [rbx+4E] exit:
jmp returnhere "nineparchments_64bit.exe"+10E9511:
jmp newmem
nop returnhere: [DISABLE]
"nineparchments_64bit.exe"+10E9511:
mov [rbx+rcx*],edi
movzx r10d,word ptr [rbx+4E]
汇编代码
我最终发现代码的问题出在那里了,那个代码把 下面的一句遮住了,按照以上代码,走破解一路会不执行!所以我们要在 exit 里加上 这一句!另外,我发现 图上实际能用的就是 65535 对应的那个 + 14 的数据,所以最终的汇编代码如下:
[ENABLE]
alloc(newmem,,nineparchments_64bit.exe+10E9511)
label(returnhere)
label(originalcode)
label(exit) newmem: //this is allocated memory, you have read,write,execute access
//place your code here originalcode:
cmp [rbx+rcx*+],FFFF
je exit
mov [rbx+rcx*],edi
movzx r10d,word ptr [rbx+4E] exit:
movzx r10d,word ptr [rbx+4E]
jmp returnhere nineparchments_64bit.exe+10E9511:
jmp newmem
nop
nop
nop returnhere: [DISABLE]
nineparchments_64bit.exe+10E9511:
mov [rbx+rcx*],edi
movzx r10d,word ptr [rbx+4E]
优化以后的 生命不减
提醒一下:上述代码在 ENABLE 状态下,如果跳出地图外死亡,本关会直接结束!因为修改的代码是 共用代码段——生命赋值,敌人和自己的加血和扣血都是用的这段代码!如果遇到游戏卡住,可以暂时将代码 恢复至 DISABLE 状态,等待游戏卡顿结束。
另外,今天不是学习了汇编嘛!也试着自己把 无限闪现技能 重新使用 汇编代码实现一下:
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,,"nineparchments_64bit.exe"+45BD70)
label(returnhere)
label(originalcode)
label(exit) newmem: //this is allocated memory, you have read,write,execute access
//place your code here originalcode:
mov [rcx+r8*],
mov al, exit:
jmp returnhere "nineparchments_64bit.exe"+45BD70:
jmp newmem
nop
returnhere: [DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"nineparchments_64bit.exe"+45BD70:
mov [rcx+r8*],eax
mov al,
//Alt: db B0
优化以后的 闪现技能无冷却
技能无冷却的话,呃~我努力一下吧!
【END】
//------[2020-02-11,更新内容]
唉~去学了半天浮点的汇编指令,到头来还不是直接赋值 float(四字节)的 Int 表示
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,,"nineparchments_64bit.exe"+4A06D6)
label(returnhere)
label(originalcode)
label(exit) newmem: //this is allocated memory, you have read,write,execute access
//place your code here originalcode:
mov [rcx+r8*],
//movss [rcx+r8*],xmm0 exit:
jmp returnhere "nineparchments_64bit.exe"+4A06D6:
jmp newmem
nop
returnhere: [DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"nineparchments_64bit.exe"+4A06D6:
movss [rcx+r8*],xmm0
//Alt: db F3 0F
优化以后的 技能无冷却
嗯,很久以前,在我还是大一的时候,使用修改器改过 《崩溃大陆》,当时还不知道 搜索的那些 4字节的数字 1072.....其实是浮点数呢!当时我还找到了一些规律说它们之间的差没经过一个参数就会缩小至原来的一半,而这个参数是规律变化的!
比如 1.0 表示的是 1072693248 ,而 2.0 表示的是 1073741824 (浮点数的精确查法),3.0 是 1074266112 !嗯, 1074266112 - 1073741824 这个差 是 有规律变化的,具体见下表(来源于其他网站,历史久远忘记了来源),算了很难解释,就是看下面的 excel 表吧
规律很难用文字语言描述清楚,我就给大家看一下我临时制作的表格吧:
当时为了方便修改,写了这一个一定范围内的 Int整数 转 浮点数的 Int数值的 C 语言程序,因为是我在上大一的时候写的,所以特别粗糙!当然!大家也可以拿来练练手,不过现在回想起来还不如直接深造 CE 呢!
PS:我会制作新的 CT文件出来,另附新的修改器,感谢大家的支持,上一个版本将会被覆盖掉,也就是说——旧版本仅仅会保存在博主本人的主机上,至于博客园~空间小,实在是没有办法,望各位见谅哈!
下面是更新以后的 CT 文件 的内部项:
下面是更新以后的 修改器 的样式截图:
【END】
//------[2020-03-11,更新内容]
好了,话不多说了,今天摸索修改器也没有多少进步,本来今天是《Ori2》的Steam PC版发行嘛,打算做这个游戏的修改器的,万万没想到 3dm 的大佬们居然早做好了!嗯?不是还没发行么?修改器早做好了是什么鬼?难道...已经开学第4个月了,我也要离开修改器领域一段时间了,不扯了~说说今天的更新内容,今天是为了大家玩这个游戏的时候,尤其是最后高难度的那一部分的怪物,真的是肉啊!四五类技能全放了都没死,真的是皮厚!那我今天就写一个秒杀的修改项。
我们知道要秒杀可以有两类方法来实现:第一类,找到 sub 语句(减血语句),之后将后面的减数 调成无穷大(相对无穷大,如果游戏内最高血量敌人是2000,我们就可以设值无穷大为2500);第二类,找到 mov 语句(血量赋值语句),之后将后面的参数调成 0 ,就把 “血量设值函数” 变成了 “处死函数” 了!
实际上我们采取第二种,原因是我们游戏通过找血量 “是什么语句修改了这段地址” 找到的是 mov 语句,也就没必要去专门找 sub 语句了 ,更避免了对于 无穷大 的分析。那么这里还有一个问题,这个游戏里可是有误伤系统的啊!你是能把周围怪物一下子秒了,但要是你也在这个周围内呢?砰砰,完成 “猪队友” 成就!我们还是按照之前的找 玩家结构体和敌人结构体的区别(实际上我们可以直接拿过来用),这也是共用代码问题的最基本的解决方法了。
给大家看一下 汇编代码:
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048,"nineparchments_64bit.exe"+10E950C)
label(returnhere)
label(originalcode)
label(exit) newmem: //this is allocated memory, you have read,write,execute access
//place your code here originalcode:
mov [rsp+30],r15
cmp [rbx+rcx*4+14],FFFF
je exit
mov edi,0 exit:
jmp returnhere "nineparchments_64bit.exe"+10E950C:
jmp newmem
returnhere: [DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"nineparchments_64bit.exe"+10E950C:
mov [rsp+30],r15
//Alt: db 4C 89 7C 24 30
一击必杀
之后我会更新CT文件和修改器的下载地址哦!
[END]
【百度网盘下载】
如果发现链接失效,请及时通知博主,博主会抽时间回来补。
链接:https://pan.baidu.com/s/1Tah4VjN_1Mp8ssi4oxOCyA
提取码:pzz8
Steam游戏《Nine Parchments(九张羊皮纸)》修改器制作-[先使用CE写,之后有时间的话改用C#](2020年寒假小目标02)的更多相关文章
- Steam游戏《Zengeon(神明在上)》修改器制作-[先使用CE写,之后有时间的话改用C#](2020年寒假小目标06)
日期:2020.01.30 博客期:138 星期四 [温馨提示]: 只是想要修改器的网友,可以直接点击此链接下载: 只是想拿CT文件的网友,可以直接点击此链接下载: 没有博客园账号的网友,可以将页面下 ...
- Steam 游戏 《Crashlands(崩溃大陆)》修改器制作-[先使用CE写,之后有时间的话改用CheatMaker](2020年寒假小目标12)
日期:2020.02.15 博客期:155 星期六 [温馨提示]: 只是想要修改器的网友,可以直接点击此链接下载: 只是想拿CT文件的网友,可以直接点击此链接下载: 没有博客园账号的网友,可以将页面下 ...
- Steam 游戏 《The Vagrant(流浪者)》修改器制作-[先使用CE写,之后有时间的话改用CheatMaker](2020年寒假小目标08)
日期:2020.02.07 博客期:146 星期五 [温馨提示]: 只是想要修改器的网友,可以直接点击此链接下载: 只是想拿CT文件的网友,可以直接点击此链接下载: 没有博客园账号的网友,可以将页面下 ...
- Steam 游戏 《Sudoku Universe(数独宇宙)》、《Sudoku Killer(数独杀手)》、《Sudoku Jigsaw(数独拼图)》数字位置解析 ---------C# 数独程序解析(2020年寒假小目标11)
日期:2020.02.11 博客期:151 星期二 今天,准备肝一个 C# 的数独读写工具(汇编语言也在努力学习命令方法中...),这三个游戏我早就买下了,一直放在 Steam 库里积灰,看着它的成就 ...
- Steam游戏《Northgard(北境之地)》修改器制作
日期:2021.06.07 博客期:181 星期一 [温馨提示]: 我现在把资源先放到开头,不想研究学习的就直接取用.如果修改器失效了,你们可以在博客园本页直接评论,也可以给我发邮件告诉我,就是不要到 ...
- ce游戏内存修改器(Cheat Engine)
ce修改器(Cheat Engine)一款专门修改内存修改编辑的游戏工具它包括16进制编辑,反汇编程序,内存查找工具新版6.1 版的CE与6.0 最大的区别就是添加了修改器制作工具,比之前 5.6.1 ...
- 基于C++ Qt实现的红色警戒3修改器
前言 这部修改器制作有一段时间了,但是一直没出教程.今天利用周末空闲写篇教程,给后来者指路的同时也加深自己对游戏修改器的理解,大佬就随便看看吧 浏览了一下网络,形形色色的单机游戏修改器教程,但是基本只 ...
- CE修改器使用教程 [入门篇]
Cheat Engine 一般简称CE,是一个开放源代码的作弊软件,其功能包括:内存扫描.十六进制编辑器.调试工具,Cheat Engine 自身附带了外挂制作工具,可以用它直接生成外挂工具,CE可以 ...
- 吞食鱼2(FeedingFrenzyTwo) 修改器
吞食鱼2(FeedingFrenzyTwo) 修改器 童年回忆系列.小时候特别喜欢玩这类游戏,软件不大,很慢的网速也不会下载太久,然后对配置要求不高,很破的电脑也可以玩得很开心.不过也有糟心的时候啊, ...
随机推荐
- X shell安装 以及使用
X shell 百度搜索 X shell 然后下载软件 然后会进入主页面
- 使用Echarts实现折线图的一点总结
使用Echarts的一点总结 1.安装,我使用得vue cnpm install echarts --save 2.在入口文件main.js中注册,并使用 // 引入折线图 echarts impor ...
- Linux下基于PAM机制的USB Key的制作
摘自:https://server.zzidc.com/fwqpz/157.html USB Key这个概念最早是由加密锁厂家提出来的,加密锁是用来防止软件盗版的硬件产品,加密锁的概念是使安装在计算机 ...
- Django 初试水(一)
2020年注定是一个不平凡的一年!坚持就是胜利,一起加油! 至于为什么使用 Django,也不想说太多.个人喜欢,这里不做介绍.直接进入主题.show me the code!!! python 的环 ...
- el-popover 点击input框出现table表,可点击选中,可拼音检索完回车选中
<template> <card> <el-popover placement="right" width="400" trigg ...
- 排队看病(PriorityQueue自定义排序)
看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少)同时看病.而看病的人病情有轻重,所以不能根据简单的先来先服 ...
- 1.6 APP需要怎么测试
来源: https://tieba.baidu.com/p/5011439767 http://www.cnblogs.com/testwriter/p/6702624.html ...
- codeforce F - Three Paths on a Tree
F. Three Paths on a Tree time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- 5.Mybatis--解决属性名和字段名不一致的问题(起别名+resultMap)
我们看一下数据库中的字段 新建一个项目(我们拷贝之前的)来测试实体类字段跟数据库不一致 看看看,实体类中的属性是不是跟数据库表中的名不一样了 好,我们查询一下: 出现问题了:空值 为什么为空? 因为 ...
- ClassLoad
是什么 用来加载 Class 的.它负责将 Class 的字节码形式转换成内存形式的 Class 对象.字节码可以来自于磁盘文件 .class,也可以是 jar 包里的 .class,也可以来自远程服 ...