本帖最后由 才不是弱受 于 2023-4-3 22:04 编辑
武艺高超、武德充沛之人,会令对手知难而退,他出手疾如迅雷,不战而屈人之兵。
最近被这游戏虐的头皮发麻,可算是明白了什么叫20岁进夜店70岁被抬着出来
因为是头一次尝试修改游戏,所以可能是用的最笨的方法,大佬们勿怪
1.首先,作为一个只看过CE教程的萌新,第一个想到的肯定是修改血,把血锁住,死不了也就是无敌了。
但是这个游戏的血量没有显示数值,只是给了一个条子,如图左上角
所以载入CE直接模糊数值搜索,未知的初始值,众所周知血量一般都是单浮点或者双浮点,就先尝试用单浮点搜
9E多条数据人都麻了。
开始挨一下打搜一下减少的数值,中间可以穿插着未变动的数值清掉动态数据
中间过程省略
随后筛选到最后一步后可以发现,有一个105的数值比较可疑,可以先试试
锁一下看看是不是
果然,挨了一拳之后掉的血又加回来了,看来这个就是要找的数据
其实到这里正常已经结束了,但是众所周知这个数据无法保存,退出游戏之后数据就回变动导致锁血无效,
随后尝试找基址,但是被哥们告知是64位游戏,找基址比较麻烦,尝试无果后放弃
同时哥们告知一般这种游戏是通过hook的方式修改,可以省掉找基址这一步
然后通过右键-找出是什么改写了这个地址
进游戏挨一下打,随后跳出来了一个这个地址
选择右边显示反汇编程序
根据提示直接nop掉了这一段
随后进游戏发现果然不掉血了!
以为一劳永逸,但是舒服了两下之后发现 敌人也不掉血了!!!
连忙询问原因,被告知原来是游戏里面主角和敌人的扣血都是走的这一条
然后哥们提出来了一个“阵营”的概念,简单解释了一下就是说要找到区分敌我的那个方法。
但是哥们的知识也到了头,丢过来几个教程之后让我自己研究
然后简单了解了一下“阵营”的概念,就是区分敌我,让敌人扣血,主角不扣血
然后到了B站大学开始搜索,简单看了几个教程之后发现要找到敌方扣血的地址,
但是敌方扣血也是不显示扣多少,血还剩多少
只又开始了苦逼的搜索
功夫不负有心人,在一众数值之中,这个不带小数点的很显眼,尝试一下是不是敌方的血量
果然,尝试给修改到200之后,打了一拳发现敌方血涨上来了,
暂停游戏,开始重头戏
开始右键-找出是什么改写了地址-打一拳敌人+敌人打了我一拳之后 找到两个详细信息
尝试使用遍历找判断敌我
复制详细信息中指针数值可能是****的两条地址
我方:1754AB7F000
敌方:175CDCACE00
填写好之后选择定义新的结构
随后遍历出来一大堆数据
结合教程来看,一般是找比较有对比度的,比如我方是1,敌方是0
没有技巧,一个个的试
最后尝试发现这个A8的数据比较可疑,可以尝试一下
回到汇编窗口,选择工具-自动汇编
在弹出来的自动汇编窗口里面选择模版-AOB注入,然后点两下确认
然后会自动生成一片代码,我们直接到newmem这一段
根据解释是说CE可以让游戏执行到这里之前,先执行newmem这里面的代码
所以我们可以写上
cmp [rcx+000000A8],0
je code
jmp return
上面我们可以得知,0为敌方扣血,1为主角扣血。
所以就是在判断是谁挨了这一拳
cmp判断A8里面是不是0,如果是则正常执行扣血判断
如果不是,则返回
所以就可以达成判断敌我阵营的方法
随后点击左上角文件-分配到当前CT表,回到CE里面激活这一段脚本 回到游戏里面尝试一下
诚然,敌方怎么打主角血条都不会动,主角打地方正常扣血,看来这个方法已经是成功了
这个方法重启电脑和重启游戏都不会导致失效,具体原因不明
后续也尝试写到易语言里面,但是实在是不会操作,如果有大佬会的话可以教教弟弟
以上就是小白初次实战尝试的结果,可能有表达错误地方欢迎大佬们指出 |