12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
三国霸业 战车-珍宝-觉醒-攻城掠地SF-全新玩法 免费玩新区 攻城掠地私服 进入游戏
手游私服盒子 各类免费游戏 0.1折送海量资源 各类手游私服 进入游戏
皇家MU2 《奇迹 2:传奇》韩国网禅公司《奇迹》正统续作。 3D锁视角Mmrpg 暗黑3+传奇+流放之路+奇迹 进入游戏
查看: 482|回复: 0

【CE】女神异闻录5S的不遇敌实现思路以及追码过程

[复制链接]
发表于 2021-7-18 18:37:24 | 显示全部楼层 |阅读模式
网上的不遇敌修改器已经有了(风灵月影大佬那是永远滴神!),这篇文章主要是讲解一下不遇敌是如何实现的,以及如何追码。对于想要学习这方面知识的同学们应该算是一个思路分享。
实在我去研究P5S的不遇敌,是想了解大概机制,因为我终极的目的,是想要在rpcs3模仿的P5上面实现不遇敌。后来发现本身太天真了,模仿器上面的追码只能用四个字来形容,丧尽天良!
以是先把P5S的不遇敌思路整理出来,肯定是比新手入门要难一点,但绝对比模仿器简朴多了。
先简朴讲一下思路
看下图(请叫我灵魂画手)

我选择第二个,显示反汇编,跟踪该地址。则根据警戒值,我们得到了切入点:
game.exe+6E53B6 - 44 89 81 500F0000     - mov [rcx+00000F50],r8d

这里我们可以直接跳出这个call,或者直接点击return address里的第一个地址,返回到上一个call。

断点2:
取消上一个断点(即,取消game.exe+6E53B6处的断点)。再返回上一个call后,返回地址的上面有一个call,记录一下该call的地址。
game.exe+6E4772 - E8 819199FF           - call game.exe+7D8F8
然后运行程序,快速切回游戏,操作人物退却别进战斗

这个call如果你对它下断,它会不停的触发,你可能会很高兴,因为这是不是阐明了找过头了,关键判断就在这个断点以下。
但是这个call有个题目,就是这是个共用代码段,而且rax的值不停在变动,导致没法追。
如果我是一个小白的话,很可能就止步于此的,但是现在我们可以不求甚解一下,直接跳出这个call,如果下一个断点很幸运的只在遇怪的时间才触发,那么我们根本就不消纠结这个call。
跳出这个call,发现下一个断点是
game.exe+82EBC8 - E8 E2A484FF           - call game.exe+790AF

对断点4下断后,发现不停触发。根据我们的判断,遇敌判定应该在断点4和断点3之间
那我们进入这个call去看看

发现直接给我们跳到了game.exe+6BA170,要知道我们断点3的地址是game.exe+82EBC8。
这里遇到贫苦,game.exe+6BA170和game.exe+82EBC8离得太远了,唯一的解释是此call里面有jump指令到82EBC8上面,然后往下走直接ret。这种情况下jump点比较难找,因为有可能往返跳,比如A跳B,B跳C,C跳到82EBC8附近
以是只能从game.exe+6BA170这里跟踪下去,一点点耐烦的往下走,遇到call指令或者jump指令就下断尝试,需要找到遇敌会触发,寻常不会触发的路段

断点5:
从game.exe+6BA170往下走,到
game.exe+6BA21C - E8 3E7899FF           - call game.exe+51A5F

此断点又是只有遇怪触发,继续往上追

断点7:
从game.exe+6BA213往上走,到
game.exe+6BA1D6 - E8 5F0B9AFF           - call game.exe+5AD3A

寻常的时间会直接跳到game.exe+6BA245,遇敌的时间则不跳
进一步追踪上面的test al,al,发现只有遇敌的时间rax为1,其余的时间为地址
=====
补充下顺序的指令
game.exe+6BA170 - 40 53                 - push rbx(函数头)
game.exe+6BA1D6 - E8 5F0B9AFF           - call game.exe+5AD3A(不停触发)
game.exe+6BA1DB - 84 C0                 - test al,al(关键判断,遇敌时rax=1,其余时间为地址)
game.exe+6BA1DD - 74 66                 - je game.exe+6BA245(不停触发,寻常直接跳到函数尾部,遇敌时不跳)
game.exe+6BA213 - E8 E7F698FF           - call game.exe+498FF(只有遇敌才弹)
game.exe+6BA21C - E8 3E7899FF           - call game.exe+51A5F(只有遇敌才弹)
game.exe+6BA245 - 48 83 C4 20           - add rsp,20(函数尾部)
=====
这个关键点就很符合我们要的那个岔路口的特性:不停触发,其中一条道只有遇敌的时间触发。但是这个关键点后面的“1”告诉我们事情没有那么简朴。
我们先尝试下,可以通过代码注入把je改成jmp,或者把test al,al改成xor al,al
然后我们去勾引小怪。发现还是会遇敌,唯一的区别是原本应该显示的警戒界面,现在不显示了
也就是说,这个test al,al不是遇敌的岔路口,是显示警戒界面的岔路口!
我们追了大半天追了个寂寞!!
缓一口气,重整旗鼓。
没有关系,警戒和遇敌本来就一脉相承。
那么在现在这种情况下,我们就要去追这个rax是怎么酿成1的,因为通常的逻辑是:
遇敌→rax酿成1→显示警戒界面
在game.exe+6BA1DB - 84 C0                 - test al,al上面,有一个
game.exe+6BA1D6 - E8 5F0B9AFF           - call game.exe+5AD3A
我们需要进入这个call里去,找有没有给rax赋值的指令,然后根据逻辑下断,看是否符合遇敌才触发的判断

关键点2:
进入call game.exe+5AD3A后,有个jmp指令,直接把我们带到了
game.exe+6E48F0 - 4C 8B 05 F93BDC01     - mov r8,[game.exe+24A84F0]

发现寻常的时间,[r9+00000F84]的值为0,遇敌的时间为1。而当它为1的时间,恰好可以跳到mov al,01的指令,给rax赋值,完美!
那么下一步,我们就要去追踪[r9+00000F84]是哪里来的
比较幸运的是,r9在这里是不会变动的,以是我们可以直接添加地址
000002A109851298+00000F84,此地址为关键地址

有两段代码
第一段代码是把关键地址酿成1,第二段是把关键地址酿成0
以是我们能追踪的实在只有第一条

断点8:
对第一条代码显示反汇编,然后下断
game.exe+82ED1A - FF 82 840F0000        - inc [rdx+00000F84]

寻常不触发,遇怪时触发,往上追

断点10:
跳出call后,发现下一个是
game.exe+2F23B2 - 41 FF D7              - call r15

对这个call下断,然后我们发现它是不停触发的

断点11:
现在我们就遇到一个题目,断点10不停触发,call r15也不停触发,断点9只有遇怪的时间触发
那么现在我们有两种选择
1.从断点10往下追
2.从断点9往上追
因为r15明显是共用代码段,最重要的是断点9往上有一大串的代码,以是我决定用第二种方法
先返回断点9:game.exe+305D08
往上走,下断
game.exe+305C8A - 74 35                 - je game.exe+305CC1

通过不停的下断→勾引小怪,可以得出结论
寻常的时间,必定会跳到game.exe+305D0D,只有在遇怪的时间,会继续往下走,从而来到断点11(game.exe+305C8A)
再进一步,寻常的时间rax为0,遇敌的时间rax为1
=====
补充下顺序的指令
game.exe+305C3C - 84 C0                 - test al,al(关键点:寻常的时间rax为0,遇敌的时间rax为1)
game.exe+305C3E - 0F84 C9000000         - je game.exe+305D0D(跳到函数尾部)
game.exe+305C8A - 74 35                 - je game.exe+305CC1(只有遇敌触发)
game.exe+305D08 - E8 C4DBD0FF           - call game.exe+138D1(只有遇敌触发)
game.exe+305D0D - 48 8B 5C 24 78        - mov rbx,[rsp+78](函数尾部)
game.exe+305D17 - C3                    - ret
=====
同样的原理,这里的关键点也很符合遇敌判断岔路的特性:不停触发,其中一条道只有遇敌的时间触发
在这里关键点这里:
game.exe+305C3C - 84 C0                 - test al,al
game.exe+305C3E - 0F84 C9000000         - je game.exe+305D0D
我们通过代码注入,把 je game.exe+305CC1改成 jmp game.exe+305CC1,或者把上面的test al,al改成xor al,al
然后去勾引下小怪,发现已经不会遇敌了,完美!

至此为止,P5S的不遇敌实战已经结束了,实在中心省略了很多,就比如切入点1的选择,实在有很多,其时追了好几条,有些追一半就追不下去,只能放弃选择下一条。文章中列出的断点只是我以为比较重要的,固然还有很多琐碎的尝试我压根就没写进去了。
这篇文章花费我很长的时间、很大的精力,盼望能给想要学习不遇敌却无从下手的人一点思路。因为我当初就是完全不知道从何入手,绕了很多弯子。
总体来说P5S的不遇敌还是有点难度的,如果是纯新手可能有点晕。
末了说一下,不遇敌,或者其他的游戏修改,乃至逆向,都是需要很大的热情以及耐烦。找到一个切入点,然后一层层的抽丝剥茧下去,终极达到本身的目的,实在是一件很有成就感的事情。
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-11-24 12:50 , Processed in 0.078125 second(s), 32 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表