本帖最后由 yakov 于 2024-5-15 23:46 编辑
我很久没有上这里了,今天偶然来,看到你问这个已经几个月了,希望回复不会太晚。
这个需要一点破解逆向基本知识,用一些常见的调试器,比如Ollydbg,不过现在64位系统,我一般用x32dbg,稍微跟踪分析下就能找到地方,也可以直接用CE,CE可以帮助我们分析和搜索数据。
几个版本都不太一样,不过原理是一样的,我以122大礼包为例解释下。
有个函数,是在战斗完成后调用的,几个护法的很多技能都是在这里处理的,比如厨子的资源收集、阿贤的抄书、阿丑的偷窃等,122大礼包中地址在:
0047F21C 55 push ebp ;战后处理函数 0047F21D 68 2CF74700 push kys_prom.0047F72C 0047F222 64:FF30 push dword ptr fs:[eax] 0047F225 64:8920 mov dword ptr fs:[eax],esp 0047F228 33D2 xor edx,edx ;第一技能, edx和自己xor,就是清零,这个代表技能,0为第一技能,1为第二,2为二技能......是以0为起点的 0047F22A B8 03000000 mov eax,0x3 ; 林厨子,这是人物代码,3是林厨子
......
然后这个函数很长,我们直接来到偷窃这里:
0047F5CC BA 02000000 mov edx,0x2 ;第三技能 0047F5D1 B8 02000000 mov eax,0x2 ;阿丑 0047F5D6 E8 457BFEFF call <kys_prom.护法技能开启检测> 0047F5DB 84C0 test al,al 0047F5DD 0F8495000000 je kys_prom.0047F678 0047F5E3 C745 FC32000000 mov dword ptr ss:[ebp-0x4],0x32 ; 这里是50,改成100,就能百分百偷到
0x32是16进制的50,这里表示偷窥机率是50,如果要改成100,在调试器里把那个32改成64(16进制,10进制就是100)就行了。
更加灵活的方式是在CE中,动态修改这个地址,或者如果你会某个编程语言,可以写个开关,动态修改内存,就更方便了,可以不用修改原程序。
|