主机手游:热门手机游戏下载网站

主机手游首页|游戏合集|最近更新

您的位置:首页  →  攻略 → 爱夏的炼金工房DX时间修改方法 CE修改教程分享

爱夏的炼金工房DX时间修改方法 CE修改教程分享

日期:2022-10-20 12:51:51栏目:游戏攻略浏览:

爱夏的炼金工房目前已经推出DX加强版,游戏中如何更改时间?下面给大家分享一个爱夏的炼金工房DX CE修改教程

爱夏的炼金工房DX CE修改教程分享

Part.1 你需要准备工具
(大名鼎鼎的CheatEngine,下文简称CE),官网在这里
注意,如果你不是在patreon上赞助过作者的话,直接下载的安装包会捆绑2个软件,安装的时候注意跳过安装推广软件。或者自行寻找其他安装包。
Part.2 定位时间地址
先吐槽一句,Gust的程序员脑洞十分之大。目前测试的A14。
A14工坊世界的的日历算法类似日本公司的财年。每年4月1日到本年3月30日为一年(是的,工坊世界先过4月,然后到12月,再到1月2月3月,3月30日后是第二年,非常反直觉),一年12个月,每个月固定30天。
但是年份在内存中的记录方式却是按照自然年开始记录的,并且包含了最开始并不能游玩的1月1日也就是第零年1月1日,它在内存中被记录第0天,第一年4月1日则是第90天。
虽然作为玩家,你根本不能游玩第0天到第89天的内容。
第一步:
在开启游戏的情况下打开CE,在CE中选择你的游戏进程

  • 第二步:
    根据我在吐槽中给出的信息,计算出当前日期在内存中实际储存的值。在CE中搜索该值,会有多个结果。

  • 第三步:
    睡一觉,改变日期值,再次搜索。实际上老手这时候已经能看出应该用哪个地址了。

  • 第四步:
    再一次筛选出3个地址,对于新手来说,最简便的办法就是试错法。在地址上双击,逐个更改这3个地址,看哪个地址能顺利变更游戏里的日期就行。
    当然风险就是如果游戏内置检测(比如DOMO做的轩辕剑就会内置检测,你改错内存被抓到就会被DOOM工作室拒之门外)会被抓小辫子,就算不内置检测,改了错误的地址也可能会导致游戏意外跳出,所以务必存好档再改。
    如果你不想手工试错,请接着往下看进阶处理办法:
    右击地址,把筛选出的3个地址,全部附加监视器,看是什么改写了这个地址。

  • 第五步:
    可以看到可以看到036A3308这个地址,哪怕在游戏中不操作的情况下,依旧被改写到起飞。那么这多半不是存储日期信息的实际地址,而是一个用于显示日期信息的地址或者是暂存的地址。排除。

  • 第六步:
    保持监视开启,再睡一天。

  • 睡完之后,左侧的监视器开始检测到内存被修改的情况,先看左下方的036A3310,因为036A3308已经被猜测为不可靠,所以附近的036A3310有没有可能就是真实地址呢?但是睡了一天就让036A3310被修改了3次,也有点悬。一般来说睡觉这种简单的日期+1动作,应该只变动1次。
    双击036A3310的监视信息,查看详情。这里需要一点点汇编基础,没有基础也没事,直接百度/谷歌就行。我也不是学程序的,全靠搜索。

  • 可以看到是2个mov指令,来,百度关键词:汇编 mov指令,[https://baike.baidu.com/item/MOV/56228441] 在这查到MOV指令的例子:[MOV EAX,#050aH ;将十六进制数050a 传送到通用寄存器eax中]
    那红框部分的意思就是:
    1402B56F8 - mov eax,[rdi+48]//把[rdi+48]地址里的数传递到eax寄存器。
    1402B56FB - mov [rdi+50],eax//把eax寄存器里的数传递到[rdi+50],这就是我们检测到036A3310内存改动的地方。
    那rdi是多少呢,看下面的表,RDI=036A32C0。所以[rdi+48]=36A 3308,[rdi+50]=36A 3310
    那完犊子了,刚刚分析了36A3308很可能是个临时寄存,这下好了36A3310是从这个临时寄存传递来,所以36A3310这个地址,很可能也不是存放日期信息的原始地址。
    排除036A3308和036A3310之后,那就只剩141B5CA00一棵独苗了。如果是单纯的想要调整日期,修改141B5CA00这个地址就可以了,但是都到这一步了,不继续往下学学吗? − 要在此止步炼金术的研修吗? ...
    右击需要修改的地址,选择修改数值

  • 输入92,即为调整到第一年4月2日

  • 调整完成

  • 第七步:
    现在看141B5CA00的两条写入。可以看到这两条命令的位置非常接近,一个操作是1403610C0,一个操作是1403610CC,非常接近。双击这两条修改记录,看修改的详细信息。其实详细信息里基本就能看到,1403610C0往下走几条就是1403610CC了。
    先看第一条[1403610C0 - add [rcx],edx],右击他,选择在在反汇编程序中显示地址。开启反汇编。画橙色框框的地方就是从1403610C0到1403610CC

  • 来看看这堆指令大概的意思(我也是猜的,谁让我是个财务,并不懂计算机。)
    Atelier_Ayesha.exe+3610C0 - 01 11 - add [rcx],edx 在[rcx]地址的数据上加上edx
    Atelier_Ayesha.exe+3610C2 - BA 00000000 - mov edx,00000000 将edx改为0
    Atelier_Ayesha.exe+3610C7 - 8B 01 - mov eax,[rcx] 在[rcx]地址的数据写入eax寄存器
    Atelier_Ayesha.exe+3610C9 - 0F48 C2 - cmovs eax,edx 看不懂……
    Atelier_Ayesha.exe+3610CC - 89 01 - mov [rcx],eax 在eax寄存器写入[rcx]地址
    这里的[rcx]可以参考右边监视器中的数据,在指令执行的时候,这个[rcx]实际上就是我们正在监视的内存地址141B5CA00。
    那么到这就可以猜测了,add命令很明显是游戏变动日期的操作,edx寄存器中很可能是选择的睡觉天数,如果睡1天,edx就是1,睡2天edx就是2。
    那么,只要我们劫持[Atelier_Ayesha.exe+3610C0 - 01 11 - add [rcx],edx ]这条指令,把他替换成nop,就可以让日期永远不前进。


  • 替换后的指令明细可以在这里查询

  • -----------------------完结的分割线-------------------------------
    有的新同学可能要问了,哎我既然能找到地址,为什么要费尽去劫持替换程序的汇编码呢?
    因为在大多数的游戏里,内存地址是动态分配的,每一次运行游戏,存储日期的内存地址都不一样。如果你只保存内存地址信息,下一次再想修改日期时,需要重新定位内存地址。
    而汇编码是游戏程序的底层,只要游戏主程序不更新,汇编修改永远有效,你大可以把修改后的汇编导出,留待下一次需要的时候使用。
    甚至你可以把汇编修改导出为脚本,做出一个小程序,CE本身就内置了一个导出脚本程序的功能。没错,你也可以当枫灵月影,做自己的修改器。
  • 网友评论