简介《三国群侠传》是河洛工作室于2002年推出的一款角色扮演单机游戏。由于这是一款非常老的游戏,所以我不会评论游戏本身是什么样的。我之所以修改它是因为我父亲说游戏里的钱太少了。打了几次架,就得回城了,但是来回很痛苦。于是,我利用自己一点点的反汇编知识,尝试扫描一下。
准备工作必须修改,并需要适当的材料和工具。网上有很多版本,010到30000,都打包了游戏主程序TKS.EXE。该版本无法修改,必须先解压。然而,脱壳通常太困难,因此您可以使用更简单的方法。就是找到解压版的~~
编辑后解压后的版本大小约为1022KB。如果比这个小几百KB,则应该对其进行压缩。现在您已经有了材料,您仍然需要修改工具。这里我们使用c32asm。
开始反汇编并使用c32asm打开TKS.EXE文件。打开后,它看起来像这样:
首先,让我们更改在商店中出售商品后可以保留的最大金额。按“Ctrl+G”打开跳转对话框,输入EIP、RVA、偏移量分别为00425154、00025154、24B54,单击“确定”。
跳转完后,滑动鼠标滚轮或者点击c32asm右侧的滚动条,向上移动几行,查看下一行代码。
红框中第一行代码:
00424B49: 0FB705 82687500 MOVZX EAX, WORD PTR [756882] 该代码的意思是将第三行代码中内存地址0x756882的值放入寄存器EAX中。
00424B53: BA 30750000 MOV EDX, 7530 该代码的意思是将十六进制数7530 放入寄存器EDX 中。 7530 十六进制=30000 十进制代码第4 行:
代码SUB EDX, EAX 是将两个寄存器EDX 和EAX 相减: EAX=EAX-EDX 代码第三行中的数字7530 控制在商店中出售商品时可以获得的最大金额。在c32asm上选中这一行,右键选择“对应的十六进制编辑”,切换到十六进制编辑模式。此时,按Ctrl+Q返回装配模式并再次选择该行。右键单击并选择最后一项“编译”
将出现一个装配对话框。
将7530(十六进制)更改为您想要的值,然后单击左下角的“Assembly”以完成更改。但是,请注意该值的大小是有限制的。由于它是无符号短整数,因此值范围为0 至65535(十进制)和0 至FFFF 十六进制。
要更改您在战斗中可以获得的最高金钱金额,请按Ctrl+G打开跳转对话框,输入40C849并单击确定跳转到此处。
红框中的前三行代码是我以前见过的内容,所以不用担心,修改也一目了然。然而,最后一行还显示数字7530。这里发生了什么?我们来看看这几行代码。
0040C85B: 3BD1 CMP EDX, ECX //比较EDX和ECX寄存器的值0040C85D: 7D 0B JGE SHORT 0040C86A //根据上述比较结果是否进行跳转0040C85F: 66:C705 687500 3 07 5 MOV [字DS:756882] , 7530 //该语句的意思是直接将十六进制数7530写入内存地址0x756882。综上所述,这几行代码的作用就是在对战赢钱后判断是否已经超出总额。上限,直接用7530这个值覆盖。这意味着您需要同时更改两个位置的7530。
要更改单场战斗中可以获得的最大金额,请按Ctrl+G 打开跳转对话框并输入地址43B6D5。
红框内汇编代码解释:
0043B6D5: 8B15 1C6F9D00MOV EDX, [DWORD DS:9D6F1C] //寄存器地址9D6F1C的值EDX0043B6DB: 8D1492LEA EDX, [DWORD DS:EDX+EDX*4] //LEA为传送指令0 04 3 B6DE : 8915 1C6F9D00MOV [DWORD DS:9D6F1C],EDX //EDX 寄存器地址9D6F1C0043B6E4: 8B0D 1C6F9D00MOV ECX, [DWORD DS:9D6F1C] //寄存器地址9D6F1C ECX0043B6EA: 81F9 0F270000CMP ECX, 2 70F //C MP 为比较实际操作中的减法算法。相当于ECX-270F。 270F为十六进制,十进制99990043B6F0: 7E 0A JLE SHORT 0043B6FC //如果ECX的值小于等于270F,则指令跳转到地址0043B6FC0043B6F2: C705 1C6F9D00 DS :9D6F1C], 270F //上面的代码不跳转这段代码将运行如果:如果ECX的值大于270F,这里返回该值,写入地址9D6F1C(如果战斗赚的钱超过上面的值270F,这里赚的钱就是270F) 0043B6FC: 66:A1 1C6F9D00 MOV AX , [WORD] DS:9D6F1C] //上面的“JLE SHORT 0043B6FC”跳转正是要跳转的地方。如果您的ECX 值为270F 或更小,只需跳转到此处并在代码的第5 行和第7 行更改为270F。和以前一样,该地址的值不能超过65535 (FFFF)。0x756882和0x9D6F1C这两个内存地址是从哪里来的呢?这些都是通过金山Ranger、Cheat Engine等内存修改工具找到的,本文不涉及~~
skyyx20022023.01.02-2023.01.08 备忘录
本文和图片来自网络,不代表火豚游戏立场,如若侵权请联系我们删除:https://www.huotun.com/game/553798.html