上分宝:值得大家信赖的下载网站!
时间:2023-08-15 15:52:27来源:互联网
《三国群侠传》是河洛工作室于2002年发行的一款角色扮演类单机游戏。一款非常老的游戏,游戏本身怎么样,不去评论。之所以修改它,是因为我老爸说游戏中的金钱太少了,一场战斗最多可以得到9999,而身上只可以带30000!打几战就要回城,老是跑来跑去的,太麻烦。。
于是,我用仅有的一点点反汇编知识,盘了它一次~
要修改嘛,总要有适合的材料和工具才行!网上很多《三国群侠传》的版本,TKS.EXE这个游戏主程序是加过壳的!这种版本修改不了,需要先脱壳!
不过脱壳这种事往往难度太大,所以我们可以用更简单的方法!那就是找个没加壳的版本~~
编辑没加壳的版本大小大约在1022KB。比这个小几百KB的,肯定是加过壳了。。
材料有了,我们还需要修改的工具,这里使用的是c32asm:
用c32asm打开TKS.EXE文件进行反汇编,打开之后是这个样子的:
我们先来修改一下,在商店里卖东西后最大可以持有的金钱数量。
按下Ctrl G打开跳转对话框,然后在EIP、RVA、Offset处分别填入:00425154,00025154,24B54 点击确定。
跳转之后,滑动鼠标滚轮或者点击c32asm右侧的滚动条,向上移动几行,然后我们来看一下这几行代码:
红框里第一行代码:
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,回到汇编模式
然后再次选择此行点击右键,选择最后一项 “汇编”
此时会弹出汇编对话框:
将7530(16进制)改成你想改的数值,点击左下角的 汇编 即完成修改。
但是需要注意,这个数值的大小是有限制的!因为它是一个无符号的短整数,所以取值范围是0-65535(十进制),16进制就是0-FFFF
修改战斗中获得的金钱上限按下Ctrl G打开跳转对话框,输入40C849,点击确定,将会跳转到此处:
红框里的前三行代码前面已经见过了,应是没什么疑问,要修改的地方也很明确。
但是,我们在最后一行,同样看到了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
红框里汇编代码解读:
0043B6D5: 8B15 1C6F9D00 MOV EDX, [DWORD DS:9D6F1C] //将内存地址9D6F1C的值放入寄存器EDX0043B6DB: 8D1492 LEA EDX, [DWORD DS:EDX EDX*4] //LEA是传址指令0043B6DE: 8915 1C6F9D00 MOV [DWORD DS:9D6F1C], EDX //将EDX的值写入内存地址9D6F1C0043B6E4: 8B0D 1C6F9D00 MOV ECX, [DWORD DS:9D6F1C] //将内存地址9D6F1C的值放入寄存器ECX0043B6EA: 81F9 0F270000 CMP ECX, 270F //CMP是比较指令,实际操作中相当于减法算法。这里相当于ECX-270F。270F是16进制数,也就是十进制的99990043B6F0: 7E 0A JLE SHORT 0043B6FC //跳转指令,如果ECX的值小于等于270F则跳转到地址0043B6FC0043B6F2: 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笔记
上海市初中学生综合素质评价登录入口
宝可梦属性克制表2024最新,18种属性克制关系
王者荣耀排位巅峰赛荣耀战力加分公式规则2024
魔塔50层攻略隐藏道具图解,魔塔50层详细图文攻略
美国zoom动物仙踪林详情介绍
重装机兵攻略隐藏物品图文详解,战车具体位置
推荐几款超污的手游游戏,6个很污的养成类游戏
希尔薇攻略
原神主c排行2023,4.2目前各系最强主c角色排名
action对魔忍
动作游戏
2233盒子
其他游戏
oppo助手2.0
其他游戏
touchitrikka
益智休闲
qq飞车测试服
赛车竞速
青云纪事
角色扮演
泰拉tmodloader
其他游戏
菜菜音乐盒
其他游戏
迷你世界老版本0.44.2版本
模拟经营
极乐园
聊天交友
湖北农村商业银行
金融理财
51品茶
交友约会
极乐园paradise
聊天交友
丝目
社交聊天
七点工具箱
工具应用
酷狗输入法(搜狗输入法)
常用工具
shopee东南亚跨境电商
境外购物
日本大阪usj
生活实用