梦幻群侠传2修改器下载(梦幻群侠传2修改器怎么用)

前言

三国群侠传》是河洛工作室于2002年发行的一款角色扮演类单机游戏。一款非常老的游戏,游戏本身怎么样,不去评论。之所以修改它,是因为我老爸说游戏中的金钱太少了,一场战斗最多可以得到9999,而身上只可以带30000!打几战就要回城,老是跑来跑去的,太麻烦。。

于是,我用仅有的一点点反汇编知识,盘了它一次~

梦幻群侠传2修改器下载(梦幻群侠传2修改器怎么用)

准备工作

要修改嘛,总要有适合的材料和工具才行!网上很多《三国群侠传》的版本,TKS.EXE这个游戏主程序是加过壳的!这种版本修改不了,需要先脱壳!

不过脱壳这种事往往难度太大,所以我们可以用更简单的方法!那就是找个没加壳的版本~~

梦幻群侠传2修改器下载(梦幻群侠传2修改器怎么用)

编辑没加壳的版本大小大约在1022KB。比这个小几百KB的,肯定是加过壳了。。

材料有了,我们还需要修改的工具,这里使用的是c32asm

梦幻群侠传2修改器下载(梦幻群侠传2修改器怎么用)

开始反汇编

用c32asm打开TKS.EXE文件进行反汇编,打开之后是这个样子的:

梦幻群侠传2修改器下载(梦幻群侠传2修改器怎么用)

我们先来修改一下,在商店里卖东西后最大可以持有的金钱数量。

按下Ctrl+G打开跳转对话框,然后在EIP、RVA、Offset处分别填入:00425154,00025154,24B54 点击确定。

梦幻群侠传2修改器下载(梦幻群侠传2修改器怎么用)

跳转之后,滑动鼠标滚轮或者点击c32asm右侧的滚动条,向上移动几行,然后我们来看一下这几行代码

梦幻群侠传2修改器下载(梦幻群侠传2修改器怎么用)

红框里第一行代码:

00424B49:  0FB705 82687500            MOVZX   EAX, WORD PTR [756882]  

这句代码表示,将内存地址0x756882处的值放入寄存器EAX中

第三行代码:

00424B53:  BA 30750000                MOV     EDX, 7530

这句代码表示,将16进制数7530放入寄存器EDX中。16进制的7530=十进制的30000

第四行代码:

SUB     EDX, EAX

这句代码是对EDX和EAX两个寄存器做减法运算:EAX=EAX-EDX

第三行代码处的7530这个数,控制着商店里卖东西时候,你能得到的最大金额。

在c32asm上选中这一行,然后点击右键,选择 “对应HEX编辑” ,这个时候会切换到16进制编辑模式,此时按下Ctrl+Q,回到汇编模式

然后再次选择此行点击右键,选择最后一项 “汇编”

梦幻群侠传2修改器下载(梦幻群侠传2修改器怎么用)

此时会弹出汇编对话框:

梦幻群侠传2修改器下载(梦幻群侠传2修改器怎么用)

将7530(16进制)改成你想改的数值,点击左下角的 汇编 即完成修改。

但是需要注意,这个数值的大小是有限制的!因为它是一个无符号的短整数,所以取值范围是0-65535(十进制),16进制就是0-FFFF

修改战斗中获得的金钱上限

按下Ctrl+G打开跳转对话框,输入40C849,点击确定,将会跳转到此处:

梦幻群侠传2修改器下载(梦幻群侠传2修改器怎么用)

红框里的前三行代码前面已经见过了,应是没什么疑问,要修改的地方也很明确。

但是,我们在最后一行,同样看到了7530这个数!这是什么情况?我们来看一下这几行代码:

0040C85B:  3BD1                       CMP     EDX, ECX  //将EDX和ECX寄存器中的数值进行比较
0040C85D:  7D 0B                      JGE     SHORT 0040C86A  //根据上面比较的结果执行跳转或者不跳转
0040C85F:  66:C705 82687500 3075      MOV     [WORD DS:756882], 7530  //这句表示将16进制数7530直接写入到内存地址0x756882中

总结,这几行代码的作用,是在战斗获得金钱之后,进行一次判断,如果总的金钱数超过了上限,就直接用7530这个值覆盖。

也就是说,我们需要把这里两处的7530都同时改掉。

修改单次战斗最大获取金钱

同样的按下Ctrl+G打开跳转对话框,然后输入地址:43B6D5

梦幻群侠传2修改器下载(梦幻群侠传2修改器怎么用)

红框里汇编代码解读:

0043B6D5:  8B15 1C6F9D00              MOV     EDX, [DWORD DS:9D6F1C]  //将内存地址9D6F1C的值放入寄存器EDX

0043B6DB:  8D1492                     LEA     EDX, [DWORD DS:EDX+EDX*4]  //LEA是传址指令

0043B6DE:  8915 1C6F9D00              MOV     [DWORD DS:9D6F1C], EDX  //将EDX的值写入内存地址9D6F1C

0043B6E4:  8B0D 1C6F9D00              MOV     ECX, [DWORD DS:9D6F1C]  //将内存地址9D6F1C的值放入寄存器ECX

0043B6EA:  81F9 0F270000              CMP     ECX, 270F  //CMP是比较指令,实际操作中相当于减法算法。这里相当于ECX-270F。270F是16进制数,也就是十进制的9999

0043B6F0:  7E 0A                      JLE     SHORT 0043B6FC  //跳转指令,如果ECX的值小于等于270F则跳转到地址0043B6FC

0043B6F2:  C705 1C6F9D00 0F270000     MOV     [DWORD DS:9D6F1C], 270F  //上面的代码如果没有跳转,则会执行本句代码。如果ECX的值大于270F,则此处返回一个值写入到地址9D6F1C(如果战斗获取的金钱超过上面的值270F,则获得的金钱为此处的270F)

0043B6FC:  66:A1 1C6F9D00             MOV     AX, [WORD DS:9D6F1C]  //上面"JLE SHORT 0043B6FC"的跳转正是跳到本处。如果ECX的值小于等于270F,则跳到此处

将第五和第七行代码中的270F修改,就可以了。和前面一样,这个地址的值同样不能超过65535(FFFF)

至于0x756882和0x9D6F1C这两个内存地址是怎么来的?

它们是通过金山游侠、Cheat Engine这类内存修改工具找到的,本篇就不讲了~~

skyyx2002

2016.01.02-2016.01.08笔记

?

多获客
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 792114587@qq.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.dhuoke.com/12273.html