1、申 请 I D : JKstring
2、个人邮箱: 742758233@qq.com
水平有限,难以达到精华要求,贴个修改游戏的过程拼下人品~
游戏名:秋叶原之旅2
这个游戏要求是扒掉敌人身上的衣服,其中有个设定是如果敌人身上的衣服有多个达到可以脱掉的时候,按指定的键可以连续脱衣,也就是QTE系统,不过像我这种手残只会平A的选手来说有点难受,于是决定改成让他自动脱衣服!
首先分析一下如果想要自动连脱应该是一个什么过程
首先应该是第一次强行脱衣成功
判断按键是否正确
连脱数+1 && 增加经验倍率(连脱可以增加经验获得倍率)
大概的分析出过程,那么就要查找数据位置了,直接开CE,查找连脱数,然后右键找出是什么改写了这个地址
右上角就是连脱数和经验倍率,查找连脱数更好一点,一般四字节没跑
这里有个小坑,右上角虽然写着是连击2,其实数据里是1,这点当时让我坑了一下,后来想到第一次脱衣并不显示右上角的图,可能强行脱衣并不算进连续脱衣里,所以要找的数据是右上角连脱数-1
找到连脱数右键找出什么改写了地址
这里就是改写连脱数的地址了,也能从截图看出来仅增加了一次连脱数,强行脱的那一次并没有算进去
地址有了,转成OD进行调试,分析一下他是怎么运行的
这里故意没把旁边注释截取上...因为走了不少弯路,导致部分注释是错误的分析......
那接下来就是分析一下这个代码是怎么跳转的,右键分析-分析代码,并在这个call的开头下断点跟着函数走一遍
游戏在刚刚进行脱衣的时候断下来了,看来就是这个地方没跑了,跟着函数走一遍,发现除了一个地方没跳其余所有跳转都跳了,包括上图增加连脱数的代码上方的jnz
F9继续运行,连进行连脱连击!看一下连击后是怎么走的!
结果发现F9之后秒断.........这玩个拦子!根本不给第二下的机会!
结果因为昨天晚上太困了,莫名其妙的返回上层代码看了一下,从此走了弯路......不过也因此有了另外的一个想法
在第一个红框处,我猜测这里就是判断是否按键的,,此处这个je直接跳过了整段的call,于是我决定将这个这个跳转nop掉,发现nop掉之后,游戏在进行连续脱衣时,按键只是闪一下就消失了
说明这个地方确定是判断按键的,只是秒错,于是查看到了图上第二个红框处,发现他将esi+2c的值跟edi对比了一下,又被下面jnz带出了call,于是将cmp直接改成cmp edi,edi
再从游戏进行连续脱衣发现只要敌人的衣服达到进行脱衣的条件,就会自动的进行脱衣!恢复第一处红框的代码,游戏进行连续脱衣时,就算按错键也可以进行连续脱衣了!
本想着这就结束了,然后发现虽然可以无条件进行连续脱衣了,但是脱衣数和经验倍数失效了,不过因为这次弯路,知道了判断按键是al,判断正确的是esi+2c的值跟edi对比也好
在这段函数中没有对al进行操作的地方,于是只有之前的增加连击数的call才会改变这个值了,再次回到之前的call
经过代码分析,发现大多数跳转都是跳到下方这个地方,又仔细的看了看add esi+24,ebx(增加连击数的代码),发现大部分赋值操作都在此处进行
而因为这个行代码
0051248C |. /75 20 jnz XAkibaUU.005124AE ; 跳过
跳出call而不执行赋值操作,那我们可不可以直接去掉跳转,执行赋值呢,于是尝试nop掉了一下,,进游戏果然实现了连续脱衣并且增加连击数及经验倍率
总结一下完整结构
调用脱衣call
判断是否为第一次,如果第一次脱衣完成直接return
如果可进行连续脱衣将再次调用脱衣call
不断进入脱衣判定call(增加连击数的那个call)判断是否按键正确,正确后将各种数值返回脱衣call
完成脱衣
只要修改脱衣判定call的关键跳转即完成了自动脱衣,有点像植物大战僵尸的自动捡阳光
至此修改就完成了!磕磕绊绊用了1天多的时间深知自己水平有限,求个邀请码来学习!
|