三国志8吧 关注:5,476贴子:109,141
  • 6回复贴,共1

拒绝单挑后出现逃兵的研究机制,申请加精。

只看楼主收藏回复

向敌方单挑,如果对方不接受,那么无论他勇猛和武力如何,全部士兵逃跑,从原来的跑20分之一,改为跑10分之一,且显示对话框正确。
先上效果图:






我们可以看到,士兵逃跑的是10分之一了,而且吕布拒绝单挑也会士兵逃跑。
修改法的思路过程:
1、在士兵数量处断点,查找谁修改了这个数量,这很容易也很基础。
2、然后断点运行1000此,找到上下的地址,然后结合士兵逃跑的数量,反过去观察一些堆栈和代数的值,发现
一个把【esp+08】赋予进ecx,然后尝试修改了ecx,发现士兵逃跑的确增加了一倍变成10分之1,但是对话框显示还是20分之一,那么就再往上debug,发现670420这个地方,有句mov eax,[esp+04],eax就是士兵逃跑的数量,然后发现edi也是这个数量,由此猜测edi就是对话框显示的逃兵数量,于是在670420和670424之间,插入
shl eax,1 (表示逃兵数量乘以2)
mov edi,eax(把乘以2的逃兵数量存入edi,在对话框中显示出来),这样就可以了。
具体插入不能随便插,因为8086有区域限制,可以用CE新增一个内存。
3、找到61A937,把4改为7(意思是就算勇猛就算是到达7,也会出现拒绝单挑的逃兵)
4、找到61A93B,把70改为7f(意思是就算武力到达127,也会出现拒绝单挑的逃兵)
但是实际用了以后,发现直接改edi系统会出错,表现在战场委任后,如果武将之间行走路线交叉情况下,会跳出!!!!因此只能再往上逆向debug,最终发现:
21A986处是一个eax把20分之一的值赋予edi的,
源代码:
mov edi,eax
test edi,edi
所以现在,只需要在上面把eax乘以2即可
所以可以从源代码的上一层开始改,也就是21A981,跳转一下空白区域,
保留 E8 8AFFFFFF - call SAN8.EXE+21A910的情况下,新增shl eax,1比较好。
一劳永逸修改法(exe修改法附上):
1、发现21A901有14字段空白90,
到内存61A901写上
call 0061A910
shl eax,1
jmp 61a986
记录下十六进制
然后也就是在21A901把90 90.。。改为E8 0A 00 00 00 D1 E0 EB 7C
2、反过去在内存61A981上,把原来的call SAN8.EXE+21A910改为
jmp 61A901
记录下十六进制
也就是在21A981处把原来的:E8 8A FF FF FF改为
E9 7B FF FF FF
3:找到21A937,把4改为7(意思是就算勇猛就算是到达7,也会出现拒绝单挑的逃兵)
4:找到21A93B,把70改为7f(意思是就算武力到达127,也会出现拒绝单挑的逃兵)
至此修改结束。


IP属地:上海1楼2022-03-30 08:50回复
    先生用的什么工具


    IP属地:广东3楼2022-04-18 01:11
    回复


      IP属地:安徽4楼2022-04-19 21:14
      回复
        拒绝单挑,掉士气和少量兵就行了,太多还是不好,


        IP属地:浙江来自Android客户端7楼2022-05-09 16:30
        收起回复
          不错。加油 不知道何时可以面世,,,,,城防值也是要加强,感觉太脆


          9楼2022-06-13 13:09
          回复